diff options
-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; } |