diff --git a/xwl/databridge.cpp b/xwl/databridge.cpp index 0375c2953..ee57d065b 100644 --- a/xwl/databridge.cpp +++ b/xwl/databridge.cpp @@ -33,11 +33,11 @@ namespace KWin namespace Xwl { -static DataBridge *s_self = nullptr; +KWIN_SINGLETON_FACTORY(DataBridge) -DataBridge *DataBridge::self() +void DataBridge::destroy() { - return s_self; + delete s_self; } DataBridge::DataBridge(QObject *parent) diff --git a/xwl/databridge.h b/xwl/databridge.h index 736807d60..86cf9f2f0 100644 --- a/xwl/databridge.h +++ b/xwl/databridge.h @@ -9,6 +9,8 @@ #ifndef KWIN_XWL_DATABRIDGE #define KWIN_XWL_DATABRIDGE +#include "kwinglobals.h" + #include #include #include @@ -32,7 +34,6 @@ class Toplevel; namespace Xwl { -class Xwayland; class Clipboard; class Dnd; enum class DragEventReply; @@ -48,9 +49,8 @@ class DataBridge : public QObject, public QAbstractNativeEventFilter Q_OBJECT public: - static DataBridge *self(); + static void destroy(); - explicit DataBridge(QObject *parent = nullptr); ~DataBridge() override; DragEventReply dragMoveFilter(Toplevel *target, const QPoint &pos); @@ -80,7 +80,7 @@ private: KWayland::Client::DataDevice *m_dataDevice = nullptr; KWaylandServer::DataDeviceInterface *m_dataDeviceInterface = nullptr; - Q_DISABLE_COPY(DataBridge) + KWIN_SINGLETON(DataBridge) }; } // namespace Xwl diff --git a/xwl/xwayland.cpp b/xwl/xwayland.cpp index 9f417d843..3d7ddcac4 100644 --- a/xwl/xwayland.cpp +++ b/xwl/xwayland.cpp @@ -152,8 +152,7 @@ void Xwayland::stop() // events will be dispatched before blocking; otherwise we will simply hang... uninstallSocketNotifier(); - delete m_dataBridge; - m_dataBridge = nullptr; + DataBridge::destroy(); destroyX11Connection(); @@ -321,7 +320,7 @@ void Xwayland::continueStartupWithX() KSelectionOwner owner("WM_S0", xcbConn, m_app->x11RootWindow()); owner.claim(true); - m_dataBridge = new DataBridge; + DataBridge::create(this); auto env = m_app->processStartupEnvironment(); env.insert(QStringLiteral("DISPLAY"), QString::fromUtf8(qgetenv("DISPLAY"))); @@ -334,10 +333,11 @@ void Xwayland::continueStartupWithX() DragEventReply Xwayland::dragMoveFilter(Toplevel *target, const QPoint &pos) { - if (!m_dataBridge) { + DataBridge *bridge = DataBridge::self(); + if (!bridge) { return DragEventReply::Wayland; } - return m_dataBridge->dragMoveFilter(target, pos); + return bridge->dragMoveFilter(target, pos); } } // namespace Xwl diff --git a/xwl/xwayland.h b/xwl/xwayland.h index 7ac508f77..6d0a091ba 100644 --- a/xwl/xwayland.h +++ b/xwl/xwayland.h @@ -21,7 +21,6 @@ class ApplicationWaylandAbstract; namespace Xwl { -class DataBridge; class Xwayland : public XwaylandInterface { @@ -93,7 +92,6 @@ private: int m_displayFileDescriptor = -1; int m_xcbConnectionFd = -1; QProcess *m_xwaylandProcess = nullptr; - DataBridge *m_dataBridge = nullptr; QSocketNotifier *m_socketNotifier = nullptr; ApplicationWaylandAbstract *m_app;