diff options
author | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-07-30 15:19:42 +0200 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-08-28 13:09:42 +0200 |
commit | fb84a2bfd5ac4d4574df63d0f29d7904e043f123 (patch) | |
tree | 6e9f3f5d652da07d82a3bc1be70228f525740f25 /src/compositor/compositor_api/qwaylandclient.cpp | |
parent | 0dcca22ab39096b60446225f51689df06a6f98e9 (diff) |
Remove the static instance of a compositor.
All classes that needs to access the compositor instance needs to keep
a reference to it
Change-Id: Ia0d4b04b460200ad3c7907b94c032afe90c18771
Diffstat (limited to 'src/compositor/compositor_api/qwaylandclient.cpp')
-rw-r--r-- | src/compositor/compositor_api/qwaylandclient.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/compositor/compositor_api/qwaylandclient.cpp b/src/compositor/compositor_api/qwaylandclient.cpp index 870d566ee..1b3db5858 100644 --- a/src/compositor/compositor_api/qwaylandclient.cpp +++ b/src/compositor/compositor_api/qwaylandclient.cpp @@ -48,8 +48,9 @@ QT_BEGIN_NAMESPACE class QWaylandClientPrivate : public QObjectPrivate { public: - QWaylandClientPrivate(wl_client *_client) - : client(_client) + QWaylandClientPrivate(QWaylandCompositor *compositor, wl_client *_client) + : compositor(compositor) + , client(_client) { // Save client credentials wl_client_get_credentials(client, &pid, &uid, &gid); @@ -65,10 +66,10 @@ public: QWaylandClient *client = reinterpret_cast<Listener *>(listener)->parent; Q_ASSERT(client != 0); - QtWayland::Compositor::instance()->m_clients.removeOne(client); delete client; } + QWaylandCompositor *compositor; wl_client *client; uid_t uid; @@ -82,8 +83,8 @@ public: Listener listener; }; -QWaylandClient::QWaylandClient(wl_client *client) - : QObject(*new QWaylandClientPrivate(client)) +QWaylandClient::QWaylandClient(QWaylandCompositor *compositor, wl_client *client) + : QObject(*new QWaylandClientPrivate(compositor, client)) { Q_D(QWaylandClient); @@ -91,6 +92,8 @@ QWaylandClient::QWaylandClient(wl_client *client) d->listener.parent = this; d->listener.listener.notify = QWaylandClientPrivate::client_destroy_callback; wl_client_add_destroy_listener(client, &d->listener.listener); + + compositor->handle()->m_clients.append(this); } QWaylandClient::~QWaylandClient() @@ -99,9 +102,11 @@ QWaylandClient::~QWaylandClient() // Remove listener from signal wl_list_remove(&d->listener.listener.link); + + d->compositor->handle()->m_clients.removeOne(this); } -QWaylandClient *QWaylandClient::fromWlClient(wl_client *wlClient) +QWaylandClient *QWaylandClient::fromWlClient(QWaylandCompositor *compositor, wl_client *wlClient) { if (!wlClient) return 0; @@ -120,8 +125,7 @@ QWaylandClient *QWaylandClient::fromWlClient(wl_client *wlClient) // bind several times resulting in multiple QWaylandClient // instances for the same wl_client therefore we create it from // here on demand - client = new QWaylandClient(wlClient); - QtWayland::Compositor::instance()->m_clients.append(client); + client = new QWaylandClient(compositor, wlClient); } return client; @@ -164,7 +168,8 @@ void QWaylandClient::kill(int sig) void QWaylandClient::close() { - QtWayland::Compositor::instance()->waylandCompositor()->destroyClient(this); + Q_D(QWaylandClient); + d->compositor->destroyClient(this); } QT_END_NAMESPACE |