fix gtk "child->parent == NULL" asserts
authorRobin Gareus <robin@gareus.org>
Sat, 3 Aug 2013 11:45:27 +0000 (13:45 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 3 Aug 2013 11:45:27 +0000 (13:45 +0200)
gtk2_ardour/lv2_plugin_ui.cc
gtk2_ardour/lv2_plugin_ui.h
gtk2_ardour/port_matrix.cc

index 2fe817a6a0f65af93fab5791193df3772766f82e..f9b15714f6f835fe13a4ba2ea3b32a427ba93c29 100644 (file)
@@ -184,11 +184,19 @@ LV2PluginUI::LV2PluginUI(boost::shared_ptr<PluginInsert> pi,
        , _pi(pi)
        , _lv2(lv2p)
        , _gui_widget(NULL)
-       , _ardour_buttons_box(NULL)
        , _values(NULL)
        , _external_ui_ptr(NULL)
        , _inst(NULL)
 {
+       _ardour_buttons_box.set_spacing (6);
+       _ardour_buttons_box.set_border_width (6);
+       _ardour_buttons_box.pack_end (focus_button, false, false);
+       _ardour_buttons_box.pack_end (bypass_button, false, false, 10);
+       _ardour_buttons_box.pack_end (delete_button, false, false);
+       _ardour_buttons_box.pack_end (save_button, false, false);
+       _ardour_buttons_box.pack_end (add_button, false, false);
+       _ardour_buttons_box.pack_end (_preset_combo, false, false);
+       _ardour_buttons_box.pack_end (_preset_modified, false, false);
 }
 
 void
@@ -219,18 +227,11 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
                features[features_count - 1] = &_external_ui_feature;
                features[features_count]     = NULL;
        } else {
-               _ardour_buttons_box = manage (new Gtk::HBox);
-               _ardour_buttons_box->set_spacing (6);
-               _ardour_buttons_box->set_border_width (6);
-               _ardour_buttons_box->pack_end (focus_button, false, false);
-               _ardour_buttons_box->pack_end (bypass_button, false, false, 10);
-               _ardour_buttons_box->pack_end (delete_button, false, false);
-               _ardour_buttons_box->pack_end (save_button, false, false);
-               _ardour_buttons_box->pack_end (add_button, false, false);
-               _ardour_buttons_box->pack_end (_preset_combo, false, false);
-               _ardour_buttons_box->pack_end (_preset_modified, false, false);
-               _ardour_buttons_box->show_all();
-               pack_start(*_ardour_buttons_box, false, false);
+               if (_ardour_buttons_box.get_parent()) {
+                       _ardour_buttons_box.get_parent()->remove(_ardour_buttons_box);
+               }
+               pack_start(_ardour_buttons_box, false, false);
+               _ardour_buttons_box.show_all();
 
                _gui_widget = Gtk::manage((container = new Gtk::Alignment()));
                pack_start(*_gui_widget, true, true);
index 9bf8c3d92ba3c3414b29c3c725ef451082e4cfda..edb90cb1547031a1e4d98c720f387e1a8930574a 100644 (file)
@@ -73,7 +73,7 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox
        sigc::connection                     _screen_update_connection;
        Gtk::Widget*                         _gui_widget;
        /** a box containing the focus, bypass, delete, save / add preset buttons etc. */
-       Gtk::HBox*                           _ardour_buttons_box;
+       Gtk::HBox                            _ardour_buttons_box;
        float*                               _values;
        std::vector<ControllableRef>         _controllables;
        struct lv2_external_ui_host          _external_ui_host;
index 60f86ae888c80f06f70d9c17ab374bf7cf6d3a5c..2872ad66051cdecf6facbafee2200dcf01510333 100644 (file)
@@ -336,6 +336,13 @@ PortMatrix::select_arrangement ()
                _vbox.pack_end (_vnotebook, false, false);
                _vbox.pack_end (_vspacer, true, true);
 
+#define REMOVE_FROM_GTK_PARENT(WGT) if ((WGT).get_parent()) { (WGT).get_parent()->remove(WGT);}
+               REMOVE_FROM_GTK_PARENT(*_body)
+               REMOVE_FROM_GTK_PARENT(_vscroll)
+               REMOVE_FROM_GTK_PARENT(_hscroll)
+               REMOVE_FROM_GTK_PARENT(_vbox)
+               REMOVE_FROM_GTK_PARENT(_hbox)
+
                attach (*_body, 2, 3, 1, 2, FILL | EXPAND, FILL | EXPAND);
                attach (_vscroll, 3, 4, 1, 2, SHRINK);
                attach (_hscroll, 2, 3, 3, 4, FILL | EXPAND, SHRINK);
@@ -355,6 +362,12 @@ PortMatrix::select_arrangement ()
                _vbox.pack_end (_vnotebook, false, false);
                _vbox.pack_end (_vlabel, false, false);
 
+               REMOVE_FROM_GTK_PARENT(*_body)
+               REMOVE_FROM_GTK_PARENT(_vscroll)
+               REMOVE_FROM_GTK_PARENT(_hscroll)
+               REMOVE_FROM_GTK_PARENT(_vbox)
+               REMOVE_FROM_GTK_PARENT(_hbox)
+
                attach (*_body, 1, 2, 2, 3, FILL | EXPAND, FILL | EXPAND);
                attach (_vscroll, 3, 4, 2, 3, SHRINK);
                attach (_hscroll, 1, 2, 3, 4, FILL | EXPAND, SHRINK);