X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fplugin_selector.cc;h=7953290b006f33bbb8b9b4391cef01d928e7e2cf;hb=e33d4553b2b333c30835b00741fc5c1fd0e2b36d;hp=e1aa19588279d772a218e607d2aab3bfc1d22fdc;hpb=b5148d93d5a9e6949f82f8685cab50cb772f2b9d;p=ardour.git diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index e1aa195882..7953290b00 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -63,7 +63,7 @@ static const char* _filter_mode_strings[] = { }; PluginSelector::PluginSelector (PluginManager *mgr) - : ArdourDialog (_("ardour: plugins"), true, false), + : ArdourDialog (_("Plugin Manager"), true, false), filter_button (Stock::CLEAR) { set_position (Gtk::WIN_POS_MOUSE); @@ -74,7 +74,7 @@ PluginSelector::PluginSelector (PluginManager *mgr) manager = mgr; in_row_change = false; - manager->PluginListChanged.connect (plugin_list_changed_connection, boost::bind (&PluginSelector::build_plugin_menu, this), gui_context()); + manager->PluginListChanged.connect (plugin_list_changed_connection, invalidator (*this), boost::bind (&PluginSelector::build_plugin_menu, this), gui_context()); build_plugin_menu (); plugin_model = Gtk::ListStore::create (plugin_columns); @@ -442,29 +442,36 @@ PluginSelector::run () { ResponseType r; TreeModel::Children::iterator i; - SelectedPlugins plugins; - r = (ResponseType) Dialog::run (); + bool finish = false; + + while (!finish) { - switch (r) { - case RESPONSE_APPLY: - for (i = amodel->children().begin(); i != amodel->children().end(); ++i) { - PluginInfoPtr pp = (*i)[acols.plugin]; - PluginPtr p = load_plugin (pp); - if (p) { - plugins.push_back (p); + SelectedPlugins plugins; + r = (ResponseType) Dialog::run (); + + switch (r) { + case RESPONSE_APPLY: + for (i = amodel->children().begin(); i != amodel->children().end(); ++i) { + PluginInfoPtr pp = (*i)[acols.plugin]; + PluginPtr p = load_plugin (pp); + if (p) { + plugins.push_back (p); + } } + if (interested_object && !plugins.empty()) { + finish = !interested_object->use_plugins (plugins); + } + + break; + + default: + finish = true; + break; } - if (interested_object && !plugins.empty()) { - interested_object->use_plugins (plugins); - } - - break; - - default: - break; } - + + hide(); amodel->clear(); interested_object = 0; @@ -586,7 +593,7 @@ PluginSelector::build_plugin_menu () delete _plugin_menu; - _plugin_menu = new Menu; + _plugin_menu = manage (new Menu); _plugin_menu->set_name("ArdourContextMenu"); MenuList& items = _plugin_menu->items();