summaryrefslogtreecommitdiffstats
path: root/src/gui/GraphCanvas.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-10-30 17:02:07 +0000
committerDavid Robillard <d@drobilla.net>2015-10-30 17:02:07 +0000
commit8510f80faad7a719a97cf14b1a82a1cc2141282b (patch)
tree11ab0ede29a4a2e29d1e689f6b2cb23ee0da47f1 /src/gui/GraphCanvas.cpp
parent2fe35cd17f96a1d393fda203ccaa234b0aa69b16 (diff)
downloadingen-8510f80faad7a719a97cf14b1a82a1cc2141282b.tar.gz
ingen-8510f80faad7a719a97cf14b1a82a1cc2141282b.tar.bz2
ingen-8510f80faad7a719a97cf14b1a82a1cc2141282b.zip
Update clients when plugins are unloaded/reloaded
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5808 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/gui/GraphCanvas.cpp')
-rw-r--r--src/gui/GraphCanvas.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/gui/GraphCanvas.cpp b/src/gui/GraphCanvas.cpp
index 16739a55..85ab4855 100644
--- a/src/gui/GraphCanvas.cpp
+++ b/src/gui/GraphCanvas.cpp
@@ -88,6 +88,7 @@ GraphCanvas::GraphCanvas(App& app,
, _plugin_menu(NULL)
, _human_names(true)
, _show_port_names(true)
+ , _menu_dirty(false)
{
Glib::RefPtr<Gtk::Builder> xml = WidgetFactory::create("canvas_menu");
xml->get_widget("canvas_menu", _menu);
@@ -157,6 +158,8 @@ GraphCanvas::GraphCanvas(App& app,
_app.store()->signal_new_plugin().connect(
sigc::mem_fun(this, &GraphCanvas::add_plugin));
+ _app.store()->signal_plugin_deleted().connect(
+ sigc::mem_fun(this, &GraphCanvas::remove_plugin));
// Connect widget signals to do things
_menu_load_plugin->signal_activate().connect(
@@ -178,7 +181,7 @@ GraphCanvas::show_menu(bool position, unsigned button, uint32_t time)
{
_app.request_plugins_if_necessary();
- if (!_internal_menu)
+ if (!_internal_menu || _menu_dirty)
build_menus();
if (position)
@@ -205,7 +208,9 @@ GraphCanvas::build_menus()
}
// Build skeleton LV2 plugin class heirarchy for 'Plugin' menu
- if (!_plugin_menu) {
+ if (_plugin_menu) {
+ _plugin_menu->clear();
+ } else {
_plugin_menu = Gtk::manage(new PluginMenu(*_app.world()));
_menu->items().push_back(
Gtk::Menu_Helpers::ImageMenuElem(
@@ -223,6 +228,8 @@ GraphCanvas::build_menus()
for (const auto& p : *plugins.get()) {
add_plugin(p.second);
}
+
+ _menu_dirty = false;
}
void
@@ -308,6 +315,13 @@ GraphCanvas::add_plugin(SPtr<PluginModel> p)
}
void
+GraphCanvas::remove_plugin(const Raul::URI& uri)
+{
+ // Flag menus as dirty so they will be rebuilt when needed next
+ _menu_dirty = true;
+}
+
+void
GraphCanvas::add_block(SPtr<const BlockModel> bm)
{
SPtr<const GraphModel> pm = dynamic_ptr_cast<const GraphModel>(bm);