diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-02-22 11:48:26 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-02-22 11:49:17 -0500 |
commit | 3a08ac5e1faede83db0f7b5db43bb982f00d5a1d (patch) | |
tree | 3170cfb65ad27a138eeb53067cc1219646388427 | |
parent | 100e156727b3c2e67fdd4c4ff882faf038baa631 (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.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 2 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/keyboard.h | 1 | ||||
-rw-r--r-- | libs/gtkmm2ext/keyboard.cc | 8 |
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 } } |