summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-11-17 15:48:51 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-11-17 15:48:51 +0000
commitc2cc7848297a7a640d52adac3c1a1255f26517b4 (patch)
tree861ddbf70a410acc17965d8a85da6a3fab703fbe
parent6e78630e5a6ea5fe69338daad461d8a70ccfea4e (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.cc1
-rw-r--r--gtk2_ardour/keyboard.cc40
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;
}