summaryrefslogtreecommitdiffstats
path: root/src/compositor/compositor_api/qwaylandclient.cpp
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@theqtcompany.com>2015-07-30 15:19:42 +0200
committerJørgen Lind <jorgen.lind@theqtcompany.com>2015-08-28 13:09:42 +0200
commitfb84a2bfd5ac4d4574df63d0f29d7904e043f123 (patch)
tree6e9f3f5d652da07d82a3bc1be70228f525740f25 /src/compositor/compositor_api/qwaylandclient.cpp
parent0dcca22ab39096b60446225f51689df06a6f98e9 (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.cpp23
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