diff options
Diffstat (limited to 'src/browser.cpp')
-rw-r--r-- | src/browser.cpp | 58 |
1 files changed, 15 insertions, 43 deletions
diff --git a/src/browser.cpp b/src/browser.cpp index 2277e54..4f1e02e 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -92,10 +92,11 @@ void Browser::aboutPlugins() dlg->exec(); } -void Browser::loadPlugins(const QStringList &paths, const std::function<void(const QPluginLoader *)> &callback) +bool Browser::loadPlugin(const QString &path) { - if(paths.isEmpty()) - return; + if(path.isEmpty()) { + return false; + } Configuration conf; const auto state = PluginLoader::signature_state( @@ -103,23 +104,18 @@ void Browser::loadPlugins(const QStringList &paths, const std::function<void(con conf.value<bool>("plugins.signature.checked").value(), conf.value<bool>("plugins.signature.enforced").value()); - for(const auto &path : paths) { - auto *loader = new PluginLoader(path, state, this); - const bool loaded = loader->load(); - - callback(loader); - - if(!loaded) { - delete loader; - } else { - auto *info = new PluginInfo(loader); - m_plugins.append(info); + auto *loader = new PluginLoader(path, state, this); + const bool loaded = loader->load(); - for(MainWindow *window : qAsConst(m_windows)) { - addPluginTo(info, window); - } - } + if(!loaded) { + delete loader; + return false; } + auto *info = new PluginInfo(loader); + m_plugins.append(info); + + emit pluginAdded(loader); + return true; } void Browser::setup() @@ -205,6 +201,7 @@ void Browser::open(const QVector<Session::MainWindow> &data, bool merge) for(const auto &windowData : data) { auto *menu = new ApplicationMenu(this); + connect(this, &Browser::pluginAdded, menu, &ApplicationMenu::addPlugin); for(auto *info : qAsConst(m_plugins)) { menu->addPlugin(info->loader); } @@ -219,28 +216,3 @@ void Browser::open(const QVector<Session::MainWindow> &data, bool merge) }); } } - -void Browser::addPluginTo(PluginInfo *info, MainWindow *window) -{ - QPluginLoader *loader = info->loader; - auto *pluginMenu = new QMenu(loader->metaData().value("MetaData").toObject().value("name").toString()); - //window->m_menuBar->insertPlugin(pluginMenu); - info->menus.append(pluginMenu); - - auto *runAction = pluginMenu->addAction(tr("Run")); - runAction->setShortcut(QKeySequence::fromString(loader->metaData().value("MetaData").toObject().value("shortcut").toString())); - - connect(runAction, &QAction::triggered, window, [loader, window]() { - if(loader->isLoaded()) { - const auto *interface = qobject_cast<PluginInterface *>(loader->instance()); - Q_CHECK_PTR(interface); - interface->createWidget(window)->exec(); - } - }); - - auto *removeAction = pluginMenu->addAction(tr("Remove")); - connect(removeAction, &QAction::triggered, this, [this, info]() { - m_plugins.removeOne(info); - delete info; - }); -} |