summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-02-22 11:48:26 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-02-22 11:49:17 -0500
commit3a08ac5e1faede83db0f7b5db43bb982f00d5a1d (patch)
tree3170cfb65ad27a138eeb53067cc1219646388427
parent100e156727b3c2e67fdd4c4ff882faf038baa631 (diff)
os x: an initial attempt at fixing loss of keyboard focus after cmd-w to close dialog
-rw-r--r--gtk2_ardour/ardour_ui.cc12
-rw-r--r--gtk2_ardour/ardour_ui.h2
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/keyboard.h1
-rw-r--r--libs/gtkmm2ext/keyboard.cc8
4 files changed, 23 insertions, 0 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 4d6a0a72d5..5071ebd36a 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -391,6 +391,8 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
keyboard->set_state (*node, Stateful::loading_state_version);
}
+ keyboard->GrabFocus.connect (sigc::mem_fun (*this, &ARDOUR_UI::grab_focus_after_dialog));
+
/* we don't like certain modifiers */
Bindings::set_ignored_state (GDK_LOCK_MASK|GDK_MOD2_MASK|GDK_MOD3_MASK);
@@ -5068,3 +5070,13 @@ ARDOUR_UI::cancel_solo ()
_session->clear_all_solo_state (_session->get_routes()); // safeguard, ideally this won't do anything, check the log-window
}
}
+
+void
+ARDOUR_UI::grab_focus_after_dialog ()
+{
+ if (mixer && mixer->fully_visible()) {
+ mixer->grab_focus ();
+ } else if (editor) {
+ editor->grab_focus ();
+ }
+}
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 3b62065a30..33e4174b50 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -795,6 +795,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void audioengine_became_silent ();
DuplicateRouteDialog* duplicate_routes_dialog;
+
+ void grab_focus_after_dialog ();
};
#endif /* __ardour_gui_h__ */
diff --git a/libs/gtkmm2ext/gtkmm2ext/keyboard.h b/libs/gtkmm2ext/gtkmm2ext/keyboard.h
index 4319c9a4f6..7bdfab3007 100644
--- a/libs/gtkmm2ext/gtkmm2ext/keyboard.h
+++ b/libs/gtkmm2ext/gtkmm2ext/keyboard.h
@@ -179,6 +179,7 @@ class LIBGTKMM2EXT_API Keyboard : public sigc::trackable, PBD::Stateful
};
sigc::signal0<void> ZoomVerticalModifierReleased;
+ sigc::signal0<void> GrabFocus;
protected:
static Keyboard* _the_keyboard;
diff --git a/libs/gtkmm2ext/keyboard.cc b/libs/gtkmm2ext/keyboard.cc
index d59fe014ce..c1a279cce6 100644
--- a/libs/gtkmm2ext/keyboard.cc
+++ b/libs/gtkmm2ext/keyboard.cc
@@ -432,6 +432,14 @@ Keyboard::close_current_dialog ()
if (current_window) {
current_window->hide ();
current_window = 0;
+#ifdef __APPLE__
+ /* Since Apple users has a basically unconfigurable window
+ manager, and since users there cannot use
+ focus-follows-mouse, we force focus back to some application
+ "main window" after closing a dialog via Primary-w.
+ */
+ GrabFocus ();
+#endif
}
}