Restore 'Edit with basic controls' plugin UI functionality.
authorRobin Gareus <robin@gareus.org>
Sun, 19 May 2013 00:28:36 +0000 (02:28 +0200)
committerRobin Gareus <robin@gareus.org>
Sun, 19 May 2013 00:28:36 +0000 (02:28 +0200)
Regression was introduced in 40944574c

Compared to before 40944574c it is no longer possible to have
both custom and basic open at the same time.
On the upside window stacking and raise-to-top works properly.

gtk2_ardour/processor_box.cc
gtk2_ardour/processor_box.h

index 2782d2cff85f03edc6fc11c7de312c9db7827410..9ac57a356c429ef0dc53b4059e62dd61fd7e515b 100644 (file)
@@ -2040,7 +2040,7 @@ ProcessorBox::one_processor_can_be_edited ()
 }
 
 Gtk::Window*
-ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor)
+ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor, bool use_custom)
 {
        boost::shared_ptr<Send> send;
        boost::shared_ptr<InternalSend> internal_send;
@@ -2119,8 +2119,7 @@ ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor)
                Window* w = get_processor_ui (plugin_insert);
 
                if (w == 0) {
-
-                       plugin_ui = new PluginUIWindow (plugin_insert, false, Config->get_use_plugin_own_gui());
+                       plugin_ui = new PluginUIWindow (plugin_insert, false, use_custom);
                        plugin_ui->set_title (generate_processor_title (plugin_insert));
                        set_processor_ui (plugin_insert, plugin_ui);
 
@@ -2438,6 +2437,7 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor)
        ProcessorWindowProxy* proxy = find_window_proxy (processor);
 
        if (proxy) {
+               proxy->set_custom_ui_mode (Config->get_use_plugin_own_gui ());
                proxy->toggle ();
        }
 }
@@ -2452,6 +2452,7 @@ ProcessorBox::generic_edit_processor (boost::shared_ptr<Processor> processor)
        ProcessorWindowProxy* proxy = find_window_proxy (processor);
 
        if (proxy) {
+               proxy->set_custom_ui_mode (false);
                proxy->toggle ();
        }
 }
@@ -2629,6 +2630,7 @@ ProcessorWindowProxy::ProcessorWindowProxy (string const & name, ProcessorBox* b
        , _processor_box (box)
        , _processor (processor)
        , is_custom (false)
+       , want_custom (false)
 {
 
 }
@@ -2648,8 +2650,7 @@ ProcessorWindowProxy::get (bool create)
        if (!p) {
                return 0;
        }
-       
-       if (_window && (is_custom != Config->get_use_plugin_own_gui ())) {
+       if (_window && (is_custom != want_custom)) {
                /* drop existing window - wrong type */
                drop_window ();
        }
@@ -2659,8 +2660,8 @@ ProcessorWindowProxy::get (bool create)
                        return 0;
                }
                
-               _window = _processor_box->get_editor_window (p);
-               is_custom = Config->get_use_plugin_own_gui();
+               is_custom = want_custom;
+               _window = _processor_box->get_editor_window (p, is_custom);
 
                if (_window) {
                        setup ();
@@ -2673,10 +2674,11 @@ ProcessorWindowProxy::get (bool create)
 void
 ProcessorWindowProxy::toggle ()
 {
-       if (_window && (is_custom != Config->get_use_plugin_own_gui ())) {
+       if (_window && (is_custom != want_custom)) {
                /* drop existing window - wrong type */
                drop_window ();
        }
+       is_custom = want_custom;
 
        WM::ProxyBase::toggle ();
 }
index c279ffa91769319f2c5003e9c791482850624032..7d80abdc68c1ebff17c6e0d4e891add109b59653 100644 (file)
@@ -88,6 +88,7 @@ class ProcessorWindowProxy : public WM::ProxyBase
 
     ARDOUR::SessionHandlePtr* session_handle();
     void toggle();
+    void set_custom_ui_mode(bool use_custom) { want_custom = use_custom; }
 
     bool marked;
 
@@ -95,6 +96,7 @@ class ProcessorWindowProxy : public WM::ProxyBase
     ProcessorBox* _processor_box;
     boost::weak_ptr<ARDOUR::Processor> _processor;
     bool is_custom;
+    bool want_custom;
 };
 
 class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable
@@ -257,7 +259,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
        Gtk::Window* get_processor_ui (boost::shared_ptr<ARDOUR::Processor>) const;
 
         /* a WindowProxy object can use this */
-        Gtk::Window* get_editor_window (boost::shared_ptr<ARDOUR::Processor>);
+        Gtk::Window* get_editor_window (boost::shared_ptr<ARDOUR::Processor>, bool);
         Gtk::Window* get_generic_editor_window (boost::shared_ptr<ARDOUR::Processor>);
 
         void edit_processor (boost::shared_ptr<ARDOUR::Processor>);