diff --git a/src/core/pluginmanager.cpp b/src/core/pluginmanager.cpp index 9c2c48cd09..9b7adc8d8b 100644 --- a/src/core/pluginmanager.cpp +++ b/src/core/pluginmanager.cpp @@ -288,10 +288,12 @@ void PluginManager::enableAppPlugin( const QString &uuid ) loadPlugin( mAvailableAppPlugins[uuid].path(), mAvailableAppPlugins[uuid].name() ); } } + callPluginMethod( uuid, "appWideActivated" ); } void PluginManager::disableAppPlugin( const QString &uuid ) { + callPluginMethod( uuid, "appWideDisabled" ); if ( mAvailableAppPlugins.contains( uuid ) ) { if ( mLoadedPlugins.contains( mAvailableAppPlugins[uuid].path() ) ) @@ -455,3 +457,27 @@ QString PluginManager::findProjectPlugin( const QString &projectPath ) } return QString(); } + +void PluginManager::callPluginMethod( const QString &uuid, const QString &methodName ) +{ + if ( !mAvailableAppPlugins.contains( uuid ) ) + { + return; + } + + const QString pluginPath = mAvailableAppPlugins[uuid].path(); + if ( !mLoadedPlugins.contains( pluginPath ) ) + { + return; + } + + const QPointer object = mLoadedPlugins[pluginPath]; + + const char *normalizedSignature = QMetaObject::normalizedSignature( ( methodName + "()" ).toStdString().c_str() ); + const int methodExists = object->metaObject()->indexOfSlot( normalizedSignature ); + + if ( methodExists != -1 ) + { + QMetaObject::invokeMethod( object.data(), methodName.toStdString().c_str() ); + } +} diff --git a/src/core/pluginmanager.h b/src/core/pluginmanager.h index 7be7e30b0d..a8027e308b 100644 --- a/src/core/pluginmanager.h +++ b/src/core/pluginmanager.h @@ -112,8 +112,10 @@ class PluginManager : public QObject void installProgress( double progress ); void installEnded( const QString &uuid = QString(), const QString &error = QString() ); + private slots: void handleWarnings( const QList &warnings ); + void callPluginMethod( const QString &uuid, const QString &slotName ); private: QQmlEngine *mEngine = nullptr; diff --git a/src/qml/PluginManagerSettings.qml b/src/qml/PluginManagerSettings.qml index 0c00942215..44c83b1bd9 100644 --- a/src/qml/PluginManagerSettings.qml +++ b/src/qml/PluginManagerSettings.qml @@ -14,9 +14,6 @@ Popup { y: (parent.height - height) / 2 padding: 0 - signal unLoadClicked(string Uuid) - signal loadClicked(string Uuid) - Page { id: page width: parent.width @@ -122,10 +119,8 @@ Popup { Enabled = checked == true; if (Enabled) { pluginManager.enableAppPlugin(Uuid); - loadClicked(Uuid); } else { pluginManager.disableAppPlugin(Uuid); - unLoadClicked(Uuid); } } } diff --git a/src/qml/qgismobileapp.qml b/src/qml/qgismobileapp.qml index 0e343062eb..2cece6ee17 100644 --- a/src/qml/qgismobileapp.qml +++ b/src/qml/qgismobileapp.qml @@ -2077,12 +2077,6 @@ ApplicationWindow { modal: true closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside parent: Overlay.overlay - - onUnLoadClicked: function (Uuid) { - if (Uuid.search === "qfield-egeniouss-plugin") { - positioningSettings.enableEgeniouss = false; - } - } } DashBoard {