summaryrefslogtreecommitdiffstats
path: root/src/libs/gui/LoadPluginWindow.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-08-14 05:09:14 +0000
committerDavid Robillard <d@drobilla.net>2008-08-14 05:09:14 +0000
commitce208602f25d443d4f721d75c9bd9c884ba9e9a6 (patch)
tree4d423d423739f9ef9bade7968bf60ae847925952 /src/libs/gui/LoadPluginWindow.cpp
parentd09cfd0f5e6a1290ed5e90959f633b3c2d3e9386 (diff)
downloadingen-ce208602f25d443d4f721d75c9bd9c884ba9e9a6.tar.gz
ingen-ce208602f25d443d4f721d75c9bd9c884ba9e9a6.tar.bz2
ingen-ce208602f25d443d4f721d75c9bd9c884ba9e9a6.zip
Defer menu creation until it is actually requested (speeds up startup time-to-patch-window considerably).
Handle new plugins being presented after initialization in plugin menu and dialog. git-svn-id: http://svn.drobilla.net/lad/ingen@1372 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/gui/LoadPluginWindow.cpp')
-rw-r--r--src/libs/gui/LoadPluginWindow.cpp37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/libs/gui/LoadPluginWindow.cpp b/src/libs/gui/LoadPluginWindow.cpp
index f0754cb9..99ab54c2 100644
--- a/src/libs/gui/LoadPluginWindow.cpp
+++ b/src/libs/gui/LoadPluginWindow.cpp
@@ -36,9 +36,10 @@ namespace Ingen {
namespace GUI {
LoadPluginWindow::LoadPluginWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& xml)
-: Gtk::Window(cobject),
- _has_shown(false),
- _plugin_name_offset(0)
+ : Gtk::Window(cobject)
+ , _plugin_name_offset(0)
+ , _has_shown(false)
+ , _refresh_list(true)
{
xml->get_widget("load_plugin_plugins_treeview", _plugins_treeview);
xml->get_widget("load_plugin_polyphonic_checkbutton", _polyphonic_checkbutton);
@@ -173,20 +174,16 @@ void
LoadPluginWindow::on_show()
{
if (!_has_shown) {
- set_plugins(App::instance().store()->plugins());
-
- // Center on patch window
- /*int _w, _h;
- get_size(_w, _h);
-
- int parent_x, parent_y, parent_w, parent_h;
- _patch_controller->window()->get_position(parent_x, parent_y);
- _patch_controller->window()->get_size(parent_w, parent_h);
-
- move(parent_x + parent_w/2 - _w/2, parent_y + parent_h/2 - _h/2);
- */
+ App::instance().store()->signal_new_plugin.connect(
+ sigc::mem_fun(this, &LoadPluginWindow::add_plugin));
_has_shown = true;
}
+
+ if (_refresh_list) {
+ set_plugins(App::instance().store()->plugins());
+ _refresh_list = false;
+ }
+
Gtk::Window::on_show();
}
@@ -248,6 +245,16 @@ LoadPluginWindow::set_plugins(const Raul::Table<string, SharedPtr<PluginModel> >
void
+LoadPluginWindow::new_plugin(SharedPtr<PluginModel> pm)
+{
+ if (is_visible())
+ add_plugin(pm);
+ else
+ _refresh_list = true;
+}
+
+
+void
LoadPluginWindow::add_plugin(SharedPtr<PluginModel> plugin)
{
Gtk::TreeModel::iterator iter = _plugins_liststore->append();