aboutsummaryrefslogtreecommitdiff
path: root/src/browser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/browser.cpp')
-rw-r--r--src/browser.cpp58
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;
- });
-}