diff --git a/src/plugins/platforms/wayland/global/qwaylandclientextension.cpp b/src/plugins/platforms/wayland/global/qwaylandclientextension.cpp index 125b1e19d94..a0d35a15fb3 100644 --- a/src/plugins/platforms/wayland/global/qwaylandclientextension.cpp +++ b/src/plugins/platforms/wayland/global/qwaylandclientextension.cpp @@ -71,10 +71,13 @@ void QWaylandClientExtensionPrivate::handleRegistryGlobal(void *data, ::wl_regis } } -void QWaylandClientExtension::addRegistryListener() +void QWaylandClientExtension::initialize() { Q_D(QWaylandClientExtension); - d->waylandIntegration->display()->addRegistryListener(&QWaylandClientExtensionPrivate::handleRegistryGlobal, this); + if (!d->registered) { + d->waylandIntegration->display()->addRegistryListener(&QWaylandClientExtensionPrivate::handleRegistryGlobal, this); + d->registered = true; + } } QWaylandClientExtension::QWaylandClientExtension(const int ver) @@ -85,7 +88,7 @@ QWaylandClientExtension::QWaylandClientExtension(const int ver) // The registry listener uses virtual functions and we don't want it to be called from // the constructor. - QMetaObject::invokeMethod(this, "addRegistryListener", Qt::QueuedConnection); + QMetaObject::invokeMethod(this, "initialize", Qt::QueuedConnection); } QtWaylandClient::QWaylandIntegration *QWaylandClientExtension::integration() const diff --git a/src/plugins/platforms/wayland/global/qwaylandclientextension.h b/src/plugins/platforms/wayland/global/qwaylandclientextension.h index 98272e5710e..014edce1d69 100644 --- a/src/plugins/platforms/wayland/global/qwaylandclientextension.h +++ b/src/plugins/platforms/wayland/global/qwaylandclientextension.h @@ -76,8 +76,8 @@ Q_SIGNALS: void versionChanged(); void activeChanged(); -private Q_SLOTS: - void addRegistryListener(); +protected Q_SLOTS: + void initialize(); }; template diff --git a/src/plugins/platforms/wayland/global/qwaylandclientextension_p.h b/src/plugins/platforms/wayland/global/qwaylandclientextension_p.h index 69cc46a0a48..9091efbe558 100644 --- a/src/plugins/platforms/wayland/global/qwaylandclientextension_p.h +++ b/src/plugins/platforms/wayland/global/qwaylandclientextension_p.h @@ -68,6 +68,7 @@ public: QtWaylandClient::QWaylandIntegration *waylandIntegration = nullptr; int version = -1; bool active = false; + bool registered = false; }; class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtensionTemplatePrivate : public QWaylandClientExtensionPrivate