From d6511acd1865cc8c202c6b2c6ac2eb87d337aa74 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 6 May 2015 12:10:41 -0400 Subject: [PATCH] use Tracks' MainMenuDisabler during session lock (could be improved with more RAII) --- gtk2_ardour/editor.cc | 1 + gtk2_ardour/editor.h | 2 ++ gtk2_ardour/editor_ops.cc | 15 ++++----------- gtk2_ardour/public_editor.h | 17 +++++++++++++++++ 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 534dd26ddb..61af8a4e11 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -300,6 +300,7 @@ Editor::Editor () , _following_mixer_selection (false) , _control_point_toggled_on_press (false) , _stepping_axis_view (0) + , _main_menu_disabler (0) { constructed = false; diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index d5645a1e82..b2510e3d9e 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -2237,6 +2237,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void update_bring_in_message (Gtk::Label* label, uint32_t n, uint32_t total, std::string name); void bring_all_sources_into_session (); + MainMenuDisabler* _main_menu_disabler; + friend class Drag; friend class RegionDrag; friend class RegionMoveDrag; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 2c44508b12..bc79fc5255 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -7541,15 +7541,10 @@ Editor::lock () lock_dialog->get_vbox()->show_all (); lock_dialog->set_size_request (200, 200); } + + delete _main_menu_disabler; + _main_menu_disabler = new MainMenuDisabler; -#ifdef __APPLE__ - /* The global menu bar continues to be accessible to applications - with modal dialogs, which means that we need to desensitize - all items in the menu bar. Since those items are really just - proxies for actions, that means disabling all actions. - */ - ActionManager::disable_all_actions (); -#endif lock_dialog->present (); } @@ -7558,9 +7553,7 @@ Editor::unlock () { lock_dialog->hide (); -#ifdef __APPLE__ - ActionManager::pop_action_state (); -#endif + delete _main_menu_disabler; if (ARDOUR_UI::config()->get_lock_gui_after_seconds()) { start_lock_event_timing (); diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 951c3e9b0e..b5d139b543 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -40,6 +40,8 @@ #include "pbd/statefuldestructible.h" #include "canvas/fwd.h" + +#include "gtkmm2ext/actions.h" #include "gtkmm2ext/visibility_tracker.h" #include "editing.h" @@ -459,4 +461,19 @@ class DisplaySuspender { } }; +class MainMenuDisabler { +public: + MainMenuDisabler () { + /* The global menu bar continues to be accessible to applications + with modal dialogs on mac, which means that we need to desensitize + all items in the menu bar. + */ + ActionManager::disable_active_actions (); + } + + ~MainMenuDisabler () { + ActionManager::enable_active_actions (); + } +}; + #endif // __gtk_ardour_public_editor_h__