use Tracks' MainMenuDisabler during session lock (could be improved with more RAII)
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 6 May 2015 16:10:41 +0000 (12:10 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 29 Jun 2015 18:18:09 +0000 (14:18 -0400)
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_ops.cc
gtk2_ardour/public_editor.h

index ea4da49325a15b94fd00db2552006b5bf8bc9395..59edb1420adb356a31ed96c56a2357e819e72b03 100644 (file)
@@ -302,6 +302,7 @@ Editor::Editor ()
        , _control_point_toggled_on_press (false)
        , _stepping_axis_view (0)
        , quantize_dialog (0)
+       , _main_menu_disabler (0)
 {
        constructed = false;
 
index ac25455c04b21683a141aa0818fc17926a1429c1..9d0f83d0404b374653d84455ee94d90715cdefa4 100644 (file)
@@ -2239,6 +2239,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void bring_all_sources_into_session ();
 
        QuantizeDialog* quantize_dialog;
+       MainMenuDisabler* _main_menu_disabler;
        
        friend class Drag;
        friend class RegionDrag;
index ccb9fe55beb1cc3a4c213c8ef6e61ae9cb5486f1..2d26a90a86ce5362886b06cff6c1a450dc38860a 100644 (file)
@@ -7547,15 +7547,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 ();
 }
 
@@ -7564,9 +7559,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 ();
index 951c3e9b0ebed7a38b03125437efb4f465fa8f3d..b5d139b543949a25c6beb05c0e3cee41a3edc37d 100644 (file)
@@ -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__