From b25829645d15aa54caf9ea4f53de2489ea04f863 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 23 Nov 2018 16:09:12 +0100 Subject: Adding and Removing plugins at runtime --- src/browser.h | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/browser.h') diff --git a/src/browser.h b/src/browser.h index e871202..2148484 100644 --- a/src/browser.h +++ b/src/browser.h @@ -16,6 +16,8 @@ #include #include #include +#include +#include class Configuration; class BookmarksWidget; @@ -23,7 +25,6 @@ class DownloadsWidget; class Filter; class MainWindow; class ProfileManager; -class QPluginLoader; class Browser : public SingleApplication, public BrowserInterface { Q_OBJECT @@ -47,6 +48,7 @@ public: QPair loadProfile(const QString &id, bool isOffTheRecord = true) override; void removeProfile(const QString &id) override; + QPluginLoader *addPlugin(const QString &path = QString()); void setConfiguration(std::unique_ptr &config); void setup(QVector plugins); @@ -61,6 +63,21 @@ public slots: MainWindow *createWindow(); private: + struct PluginInfo { + explicit PluginInfo(QPluginLoader *l) { + this->loader = l; + } + ~PluginInfo() { + loader->unload(); + for(auto *m : menus) + m->deleteLater(); + }; + + QPluginLoader *loader; + QVector menus; + }; + void addPluginTo(PluginInfo *info, MainWindow *window); + Q_DISABLE_COPY(Browser) std::unique_ptr m_config; @@ -70,7 +87,7 @@ private: std::unique_ptr m_urlFilter; QVector m_windows; - QVector m_plugins; + QVector m_plugins; }; #endif // SMOLBOTE_BROWSER_H -- cgit v1.2.1