diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-11-17 15:48:51 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-11-17 15:48:51 +0000 |
commit | c2cc7848297a7a640d52adac3c1a1255f26517b4 (patch) | |
tree | 861ddbf70a410acc17965d8a85da6a3fab703fbe | |
parent | 6e78630e5a6ea5fe69338daad461d8a70ccfea4e (diff) |
fix loss of Keyboard::current_window tracking when leaving a dialog by clicking a button
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@4191 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/ardour_dialog.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/keyboard.cc | 40 |
2 files changed, 23 insertions, 18 deletions
diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc index decae49bd1..c42243a1cd 100644 --- a/gtk2_ardour/ardour_dialog.cc +++ b/gtk2_ardour/ardour_dialog.cc @@ -76,6 +76,7 @@ ArdourDialog::on_leave_notify_event (GdkEventCrossing *ev) void ArdourDialog::on_unmap () { + Keyboard::the_keyboard().leave_window (0, this); Dialog::on_unmap (); } diff --git a/gtk2_ardour/keyboard.cc b/gtk2_ardour/keyboard.cc index 4b0a810429..24ca17ff42 100644 --- a/gtk2_ardour/keyboard.cc +++ b/gtk2_ardour/keyboard.cc @@ -301,25 +301,29 @@ Keyboard::enter_window (GdkEventCrossing *ev, Gtk::Window* win) bool Keyboard::leave_window (GdkEventCrossing *ev, Gtk::Window* win) { - switch (ev->detail) { - case GDK_NOTIFY_INFERIOR: - if (debug_keyboard) { - cerr << "INFERIOR crossing ... out\n"; - } - break; - - case GDK_NOTIFY_VIRTUAL: - if (debug_keyboard) { - cerr << "VIRTUAL crossing ... out\n"; - } - /* fallthru */ - - default: - if (debug_keyboard) { - cerr << "REAL CROSSING ... out\n"; - cerr << "clearing current target\n"; + if (ev) { + switch (ev->detail) { + case GDK_NOTIFY_INFERIOR: + if (debug_keyboard) { + cerr << "INFERIOR crossing ... out\n"; + } + break; + + case GDK_NOTIFY_VIRTUAL: + if (debug_keyboard) { + cerr << "VIRTUAL crossing ... out\n"; + } + /* fallthru */ + + default: + if (debug_keyboard) { + cerr << "REAL CROSSING ... out\n"; + cerr << "clearing current target\n"; + } + state.clear (); + current_window = 0; } - state.clear (); + } else { current_window = 0; } |