Index: python/utils.py =================================================================== --- python/utils.py (revision 13044) +++ python/utils.py (working copy) @@ -160,7 +160,22 @@ return True +def canUninstallPlugin(packageName): + """ Conform that a plugin can be uninstalled """ + global plugins, active_plugins + if not plugins.has_key(packageName): return False + if packageName not in active_plugins: return False + + try: + metadata = plugins[packageName] + if "canUninstall" not in dir(metadata): + return True + return bool(metadata.canUninstall()) + except: + return False + + def unloadPlugin(packageName): """ unload and delete plugin! """ global plugins, active_plugins Index: src/app/qgspluginmanager.cpp =================================================================== --- src/app/qgspluginmanager.cpp (revision 13044) +++ src/app/qgspluginmanager.cpp (working copy) @@ -407,9 +407,12 @@ { if ( mPythonUtils && mPythonUtils->isEnabled() ) { - mPythonUtils->unloadPlugin( baseName ); - //disable it to the qsettings file - settings.setValue( "/PythonPlugins/" + baseName, false ); + if( mPythonUtils->canUninstallPlugin( baseName ) ) + { + mPythonUtils->unloadPlugin( baseName ); + //disable it to the qsettings file + settings.setValue( "/PythonPlugins/" + baseName, false ); + } } } else // C++ plugin Index: src/python/qgspythonutils.h =================================================================== --- src/python/qgspythonutils.h (revision 13044) +++ src/python/qgspythonutils.h (working copy) @@ -82,7 +82,9 @@ virtual QString getPluginMetadata( QString pluginName, QString function ) = 0; //! unload plugin - virtual bool unloadPlugin( QString packageName ) = 0; -}; + virtual bool canUninstallPlugin( QString packageName ) = 0; + //! unload plugin + virtual bool unloadPlugin( QString packageName ) = 0;}; + #endif Index: src/python/qgspythonutilsimpl.cpp =================================================================== --- src/python/qgspythonutilsimpl.cpp (revision 13044) +++ src/python/qgspythonutilsimpl.cpp (working copy) @@ -423,6 +423,13 @@ } +bool QgsPythonUtilsImpl::canUninstallPlugin( QString packageName ) +{ + QString output; + evalString( "qgis.utils.canUninstallPlugin('" + packageName + "')", output ); + return ( output == "True" ); +} + bool QgsPythonUtilsImpl::unloadPlugin( QString packageName ) { QString output; Index: src/python/qgspythonutilsimpl.h =================================================================== --- src/python/qgspythonutilsimpl.h (revision 13044) +++ src/python/qgspythonutilsimpl.h (working copy) @@ -98,6 +98,9 @@ //! @param function one of these strings: name, tpye, version, description QString getPluginMetadata( QString pluginName, QString function ); + //! confirm it is ok to uninstall a plugin + bool canUninstallPlugin( QString packageName ); + //! unload plugin bool unloadPlugin( QString packageName );