summaryrefslogtreecommitdiff
path: root/libs/gtkmm2ext/binding_proxy.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-01-19 05:06:33 +0000
committerDavid Robillard <d@drobilla.net>2008-01-19 05:06:33 +0000
commit7295d8e9f675f4441ab626c0655b2d2e6663e47e (patch)
tree50a1bf7d6b736c02591de3904909dda5cdd625d4 /libs/gtkmm2ext/binding_proxy.cc
parent4ca1fe7993adf63ea3f35958f63dd20ee546e7ae (diff)
Merge with 2.0-ongoing R2943.
git-svn-id: svn://localhost/ardour2/branches/3.0@2944 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/gtkmm2ext/binding_proxy.cc')
-rw-r--r--libs/gtkmm2ext/binding_proxy.cc22
1 files changed, 17 insertions, 5 deletions
diff --git a/libs/gtkmm2ext/binding_proxy.cc b/libs/gtkmm2ext/binding_proxy.cc
index 3a2f5bbbc8..90f95f82ef 100644
--- a/libs/gtkmm2ext/binding_proxy.cc
+++ b/libs/gtkmm2ext/binding_proxy.cc
@@ -32,13 +32,19 @@ using namespace std;
using namespace PBD;
BindingProxy::BindingProxy (Controllable& c)
- : prompter (Gtk::WIN_POS_MOUSE, 30000, false),
+ : prompter (0),
controllable (c),
bind_button (2),
bind_statemask (Gdk::CONTROL_MASK)
{
- prompter.signal_unmap_event().connect (mem_fun (*this, &BindingProxy::prompter_hiding));
+}
+
+BindingProxy::~BindingProxy ()
+{
+ if (prompter) {
+ delete prompter;
+ }
}
void
@@ -61,8 +67,12 @@ BindingProxy::button_press_handler (GdkEventButton *ev)
if ((ev->state & bind_statemask) && ev->button == bind_button) {
if (Controllable::StartLearning (&controllable)) {
string prompt = _("operate controller now");
- prompter.set_text (prompt);
- prompter.touch (); // shows popup
+ if (prompter == 0) {
+ prompter = new PopUp (Gtk::WIN_POS_MOUSE, 30000, false);
+ prompter->signal_unmap_event().connect (mem_fun (*this, &BindingProxy::prompter_hiding));
+ }
+ prompter->set_text (prompt);
+ prompter->touch (); // shows popup
learning_connection = controllable.LearningFinished.connect (mem_fun (*this, &BindingProxy::learning_finished));
}
return true;
@@ -75,7 +85,9 @@ void
BindingProxy::learning_finished ()
{
learning_connection.disconnect ();
- prompter.touch (); // hides popup
+ if (prompter) {
+ prompter->touch (); // hides popup
+ }
}