~ubuntu-branches/ubuntu/utopic/ardour3/utopic

« back to all changes in this revision

Viewing changes to libs/gtkmm2ext/popup.cc

  • Committer: Package Import Robot
  • Author(s): Felipe Sateler
  • Date: 2013-09-21 19:05:02 UTC
  • Revision ID: package-import@ubuntu.com-20130921190502-8gsftrku6jnzhd7v
Tags: upstream-3.4~dfsg
ImportĀ upstreamĀ versionĀ 3.4~dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
    Copyright (C) 1998-99 Paul Barton-Davis
 
3
 
 
4
    This program is free software; you can redistribute it and/or modify
 
5
    it under the terms of the GNU General Public License as published by
 
6
    the Free Software Foundation; either version 2 of the License, or
 
7
    (at your option) any later version.
 
8
 
 
9
    This program is distributed in the hope that it will be useful,
 
10
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
    GNU General Public License for more details.
 
13
 
 
14
    You should have received a copy of the GNU General Public License
 
15
    along with this program; if not, write to the Free Software
 
16
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
17
 
 
18
    $Id$
 
19
*/
 
20
 
 
21
#include <iostream>
 
22
 
 
23
#include <gtkmm2ext/popup.h>
 
24
#include <gtkmm2ext/utils.h>
 
25
#include <gtkmm2ext/gtk_ui.h>
 
26
 
 
27
using namespace std;
 
28
using namespace Gtk;
 
29
using namespace Gtkmm2ext;
 
30
 
 
31
PopUp::PopUp (Gtk::WindowPosition pos, unsigned int showfor_msecs, bool doh)
 
32
        : Window (WINDOW_POPUP)
 
33
{
 
34
        add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
 
35
        signal_button_press_event().connect(mem_fun(*this,&PopUp::button_click));
 
36
        set_border_width (12);
 
37
        add (label);
 
38
        set_position (pos);
 
39
 
 
40
        delete_on_hide = doh;
 
41
        popdown_time = showfor_msecs;
 
42
        timeout = -1;
 
43
}
 
44
 
 
45
 
 
46
PopUp::~PopUp ()
 
47
{
 
48
}
 
49
 
 
50
void
 
51
PopUp::on_realize ()
 
52
{
 
53
        Gtk::Window::on_realize();
 
54
        get_window()->set_decorations (Gdk::WMDecoration (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH));
 
55
}
 
56
 
 
57
gint
 
58
PopUp::remove_prompt_timeout (void *arg)
 
59
{
 
60
        PopUp *pup = (PopUp *) arg;
 
61
 
 
62
        pup->remove ();
 
63
        return FALSE;
 
64
}
 
65
 
 
66
static gint idle_delete (void *arg)
 
67
{
 
68
        delete static_cast<PopUp*> (arg);
 
69
        return FALSE;
 
70
}
 
71
 
 
72
void
 
73
PopUp::remove ()
 
74
{
 
75
        hide ();
 
76
 
 
77
        if (popdown_time != 0 && timeout != -1) {
 
78
                g_source_remove (timeout);
 
79
        }
 
80
 
 
81
        if (delete_on_hide) {
 
82
                std::cerr << "deleting prompter\n";
 
83
                g_idle_add (idle_delete, this);
 
84
        }
 
85
}
 
86
#define ENSURE_GUI_THREAD(slot) \
 
87
     if (!Gtkmm2ext::UI::instance()->caller_is_ui_thread()) {\
 
88
             Gtkmm2ext::UI::instance()->call_slot (MISSING_INVALIDATOR, (slot)); \
 
89
        return;\
 
90
     }
 
91
 
 
92
 
 
93
void
 
94
PopUp::touch ()
 
95
{
 
96
        ENSURE_GUI_THREAD (mem_fun (*this, &PopUp::touch));
 
97
 
 
98
        if (is_visible ()) {
 
99
                remove ();
 
100
        } else {
 
101
                set_size_request_to_display_given_text (label, my_text.c_str(), 25, 10);
 
102
                label.set_text (my_text);
 
103
                show_all ();
 
104
                
 
105
                if (popdown_time != 0) {
 
106
                        timeout = g_timeout_add (popdown_time, 
 
107
                                                   remove_prompt_timeout, 
 
108
                                                   this);
 
109
                }
 
110
        }
 
111
}
 
112
 
 
113
gint
 
114
PopUp::button_click (GdkEventButton */*ev*/)
 
115
{
 
116
        remove ();
 
117
        return TRUE;
 
118
}
 
119
 
 
120
void
 
121
PopUp::set_text (string txt)
 
122
{
 
123
        my_text = txt;
 
124
}
 
125
 
 
126
void
 
127
PopUp::set_name (string name)
 
128
{
 
129
        Window::set_name (name);
 
130
        label.set_name (name);
 
131
}
 
132
 
 
133
bool
 
134
PopUp::on_delete_event (GdkEventAny* /*ev*/)
 
135
{
 
136
        hide();
 
137
 
 
138
        if (popdown_time != 0 && timeout != -1) {
 
139
                g_source_remove (timeout);
 
140
        }       
 
141
 
 
142
        if (delete_on_hide) {
 
143
                std::cerr << "deleting prompter\n" << endl;
 
144
                g_idle_add (idle_delete, this);
 
145
        }
 
146
 
 
147
        return true;
 
148
}