Add flag to IPlugin::aboutToShutdown that allows asynchronous shutdown.

If a plugin requests asyncronous shutdown, the shutdown sequence does
not continue to deleting the plugins before it has sent a
asynchronousShutdownFinished signal. During that time an event loop
is running.
This commit is contained in:
con
2010-07-13 13:36:47 +02:00
parent adf2c1b0da
commit b3dbc4b4e4
29 changed files with 165 additions and 42 deletions

View File

@@ -49,12 +49,17 @@ class EXTENSIONSYSTEM_EXPORT IPlugin : public QObject
Q_OBJECT
public:
enum ShutdownFlag {
SynchronousShutdown,
AsynchronousShutdown
};
IPlugin();
virtual ~IPlugin();
virtual bool initialize(const QStringList &arguments, QString *errorString) = 0;
virtual void extensionsInitialized() = 0;
virtual void aboutToShutdown() { }
virtual ShutdownFlag aboutToShutdown() { return SynchronousShutdown; }
virtual void remoteCommand(const QStringList & /* options */, const QStringList & /* arguments */) { }
PluginSpec *pluginSpec() const;
@@ -63,6 +68,9 @@ public:
void addAutoReleasedObject(QObject *obj);
void removeObject(QObject *obj);
signals:
void asynchronousShutdownFinished();
private:
Internal::IPluginPrivate *d;