From 724bfd4548093d0b3ab4ca36ddae474fc573f806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Mon, 8 Apr 2013 11:05:42 +0200 Subject: [PATCH] Make DeocrationPlugin a KWin singleton Like so many other classes there is exactly one instance hold by Workspace. --- plugins.cpp | 9 ++++++++- plugins.h | 4 +++- workspace.cpp | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/plugins.cpp b/plugins.cpp index dae6d7f1df..57bad18e39 100644 --- a/plugins.cpp +++ b/plugins.cpp @@ -30,7 +30,9 @@ along with this program. If not, see . namespace KWin { -DecorationPlugin::DecorationPlugin() +KWIN_SINGLETON_FACTORY(DecorationPlugin) + +DecorationPlugin::DecorationPlugin(QObject *) : KDecorationPlugins(KGlobal::config()) , m_noDecoration(false) { @@ -45,6 +47,11 @@ DecorationPlugin::DecorationPlugin() #endif } +DecorationPlugin::~DecorationPlugin() +{ + s_self = NULL; +} + void DecorationPlugin::error(const QString &error_msg) { qWarning("%s", QString(i18n("KWin: ") + error_msg).toLocal8Bit().data()); diff --git a/plugins.h b/plugins.h index 30bcd673c3..69e248099c 100644 --- a/plugins.h +++ b/plugins.h @@ -23,6 +23,7 @@ along with this program. If not, see . #define KWIN_PLUGINS_H #include +#include namespace KWin { @@ -31,7 +32,7 @@ class DecorationPlugin : public KDecorationPlugins { public: - DecorationPlugin(); + virtual ~DecorationPlugin(); virtual bool provides(Requirement); /** * @returns @c true if there is no decoration plugin. @@ -42,6 +43,7 @@ protected: private: void setNoDecoration(bool noDecoration); bool m_noDecoration; + KWIN_SINGLETON(DecorationPlugin) }; } // namespace diff --git a/workspace.cpp b/workspace.cpp index 67b1002db3..64484b7159 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -159,7 +159,7 @@ Workspace::Workspace(bool restore) reparseConfigFuture.waitForFinished(); options->loadConfig(); options->loadCompositingConfig(false); - mgr = new DecorationPlugin; + mgr = DecorationPlugin::create(this); default_colormap = DefaultColormap(display(), screen_number); installed_colormap = default_colormap; @@ -534,7 +534,7 @@ Workspace::~Workspace() delete rootInfo; delete supportWindow; - delete mgr; + delete DecorationManager::self(); delete startup; delete Placement::self(); delete client_keys_dialog;