notify LV2 GUIs about port-changes when loading presets
authorRobin Gareus <robin@gareus.org>
Wed, 28 Oct 2015 03:06:14 +0000 (04:06 +0100)
committerRobin Gareus <robin@gareus.org>
Wed, 28 Oct 2015 03:06:14 +0000 (04:06 +0100)
gtk2_ardour/lv2_plugin_ui.cc
gtk2_ardour/lv2_plugin_ui.h

index 572cdfb6716888731a220787d7e1530f8f2a8c25..20f59b5e8361624f3454c9533e58d9b486453705 100644 (file)
@@ -159,6 +159,19 @@ LV2PluginUI::stop_updating(GdkEventAny*)
        return false;
 }
 
+void
+LV2PluginUI::queue_port_update()
+{
+       const uint32_t num_ports = _lv2->num_ports();
+       for (uint32_t i = 0; i < num_ports; ++i) {
+               bool     ok;
+               uint32_t port = _lv2->nth_parameter(i, ok);
+               if (ok) {
+                       _updates.insert (port);
+               }
+       }
+}
+
 void
 LV2PluginUI::output_update()
 {
@@ -233,6 +246,8 @@ LV2PluginUI::LV2PluginUI(boost::shared_ptr<PluginInsert> pi,
        _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);
+
+       plugin->PresetLoaded.connect (*this, invalidator (*this), boost::bind (&LV2PluginUI::queue_port_update, this), gui_context ());
 }
 
 void
index f7f2d99641916ae0ac820263faae235b02bf2114..da6ffca957d507c6e070bcc4be9a492f7fdf1bbe 100644 (file)
@@ -118,6 +118,7 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox
        bool configure_handler (GdkEventConfigure*);
        void save_plugin_setting ();
        void output_update();
+       void queue_port_update();
        bool is_update_wanted(uint32_t index);
 
        virtual bool on_window_show(const std::string& title);