summaryrefslogtreecommitdiffstats
path: root/src/compositor
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
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')
-rw-r--r--src/compositor/compositor_api/qwaylandclient.cpp23
-rw-r--r--src/compositor/compositor_api/qwaylandclient.h5
-rw-r--r--src/compositor/compositor_api/qwaylandkeyboard.cpp14
-rw-r--r--src/compositor/compositor_api/qwaylandkeyboard.h3
-rw-r--r--src/compositor/compositor_api/qwaylandsurface.cpp2
-rw-r--r--src/compositor/extensions/qwaylandwindowmanagerextension.cpp2
-rw-r--r--src/compositor/wayland_wrapper/qwlcompositor.cpp9
-rw-r--r--src/compositor/wayland_wrapper/qwlcompositor_p.h2
-rw-r--r--src/compositor/wayland_wrapper/qwlinputdevice.cpp6
9 files changed, 39 insertions, 27 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
diff --git a/src/compositor/compositor_api/qwaylandclient.h b/src/compositor/compositor_api/qwaylandclient.h
index d2710d5f5..dde36f79d 100644
--- a/src/compositor/compositor_api/qwaylandclient.h
+++ b/src/compositor/compositor_api/qwaylandclient.h
@@ -48,6 +48,7 @@ struct wl_client;
QT_BEGIN_NAMESPACE
class QWaylandClientPrivate;
+class QWaylandCompositor;
class Q_COMPOSITOR_EXPORT QWaylandClient : public QObject
{
@@ -60,7 +61,7 @@ class Q_COMPOSITOR_EXPORT QWaylandClient : public QObject
public:
~QWaylandClient();
- static QWaylandClient *fromWlClient(wl_client *wlClient);
+ static QWaylandClient *fromWlClient(QWaylandCompositor *compositor, wl_client *wlClient);
wl_client *client() const;
@@ -75,7 +76,7 @@ public Q_SLOTS:
void close();
private:
- explicit QWaylandClient(wl_client *client);
+ explicit QWaylandClient(QWaylandCompositor *compositor, wl_client *client);
};
QT_END_NAMESPACE
diff --git a/src/compositor/compositor_api/qwaylandkeyboard.cpp b/src/compositor/compositor_api/qwaylandkeyboard.cpp
index e02e53fa3..09c0bfc9c 100644
--- a/src/compositor/compositor_api/qwaylandkeyboard.cpp
+++ b/src/compositor/compositor_api/qwaylandkeyboard.cpp
@@ -53,6 +53,18 @@ QWaylandKeyboard::QWaylandKeyboard(QWaylandInputDevice *seat, QObject *parent)
connect(&d->m_focusDestroyListener, &QWaylandDestroyListener::fired, this, &QWaylandKeyboard::focusDestroyed);
}
+QWaylandInputDevice *QWaylandKeyboard::inputDevice() const
+{
+ Q_D(const QWaylandKeyboard);
+ return d->m_seat;
+}
+
+QWaylandCompositor *QWaylandKeyboard::compositor() const
+{
+ Q_D(const QWaylandKeyboard);
+ return d->m_seat->compositor();
+}
+
void QWaylandKeyboard::focusDestroyed(void *data)
{
Q_UNUSED(data);
@@ -68,7 +80,7 @@ QWaylandClient *QWaylandKeyboard::focusClient() const
Q_D(const QWaylandKeyboard);
if (!d->focusResource())
return Q_NULLPTR;
- return QWaylandClient::fromWlClient(d->focusResource()->client());
+ return QWaylandClient::fromWlClient(compositor(), d->focusResource()->client());
}
void QWaylandKeyboard::sendKeyModifiers(QWaylandClient *client, uint serial)
diff --git a/src/compositor/compositor_api/qwaylandkeyboard.h b/src/compositor/compositor_api/qwaylandkeyboard.h
index 6443a081d..d28b5f6d0 100644
--- a/src/compositor/compositor_api/qwaylandkeyboard.h
+++ b/src/compositor/compositor_api/qwaylandkeyboard.h
@@ -88,6 +88,9 @@ class Q_COMPOSITOR_EXPORT QWaylandKeyboard : public QObject, public QWaylandExte
public:
QWaylandKeyboard(QWaylandInputDevice *seat, QObject *parent = 0);
+ QWaylandInputDevice *inputDevice() const;
+ QWaylandCompositor *compositor() const;
+
void setFocus(QWaylandSurface *surface);
virtual void setKeymap(const QWaylandKeymap &keymap);
diff --git a/src/compositor/compositor_api/qwaylandsurface.cpp b/src/compositor/compositor_api/qwaylandsurface.cpp
index caf816353..ef7665437 100644
--- a/src/compositor/compositor_api/qwaylandsurface.cpp
+++ b/src/compositor/compositor_api/qwaylandsurface.cpp
@@ -67,7 +67,7 @@ QWaylandSurfacePrivate::QWaylandSurfacePrivate(wl_client *wlClient, quint32 id,
, closing(false)
, refCount(1)
, client(QWaylandClient::fromWlClient(wlClient))
- , windowType(QWaylandSurface::None)
+ , client(QWaylandClient::fromWlClient(compositor, wlClient))
{}
diff --git a/src/compositor/extensions/qwaylandwindowmanagerextension.cpp b/src/compositor/extensions/qwaylandwindowmanagerextension.cpp
index 58abd661d..92b0d834a 100644
--- a/src/compositor/extensions/qwaylandwindowmanagerextension.cpp
+++ b/src/compositor/extensions/qwaylandwindowmanagerextension.cpp
@@ -101,7 +101,7 @@ void QWaylandWindowManagerExtensionPrivate::windowmanager_open_url(Resource *res
m_urls.insert(resource, url);
else {
m_urls.remove(resource);
- q->openUrl(QWaylandClient::fromWlClient(resource->client()), QUrl(url));
+ q->openUrl(QWaylandClient::fromWlClient(m_compositor, resource->client()), QUrl(url));
}
}
diff --git a/src/compositor/wayland_wrapper/qwlcompositor.cpp b/src/compositor/wayland_wrapper/qwlcompositor.cpp
index 0aef63671..7951ee065 100644
--- a/src/compositor/wayland_wrapper/qwlcompositor.cpp
+++ b/src/compositor/wayland_wrapper/qwlcompositor.cpp
@@ -149,11 +149,6 @@ public:
Compositor *compositor;
};
-Compositor *Compositor::instance()
-{
- return compositor;
-}
-
Compositor::Compositor(QWaylandCompositor *qt_compositor)
: m_extensions(QWaylandCompositor::DefaultExtensions)
, m_display(new Display)
@@ -172,7 +167,6 @@ Compositor::Compositor(QWaylandCompositor *qt_compositor)
{
m_outputSpaces.append(new QWaylandOutputSpace(qt_compositor));
m_timer.start();
- compositor = this;
QWindowSystemInterfacePrivate::installWindowSystemEventHandler(m_eventHandler.data());
}
@@ -319,7 +313,7 @@ void Compositor::cleanupGraphicsResources()
void Compositor::compositor_create_surface(Resource *resource, uint32_t id)
{
- QWaylandClient *client = QWaylandClient::fromWlClient(resource->client());
+ QWaylandClient *client = QWaylandClient::fromWlClient(m_qt_compositor, resource->client());
QWaylandSurface *surface = m_qt_compositor->createSurface(client, id, resource->version());
m_all_surfaces.append(surface);
if (primaryOutput())
@@ -329,7 +323,6 @@ void Compositor::compositor_create_surface(Resource *resource, uint32_t id)
void Compositor::compositor_create_region(Resource *resource, uint32_t id)
{
- Q_UNUSED(compositor);
new Region(resource->client(), id);
}
diff --git a/src/compositor/wayland_wrapper/qwlcompositor_p.h b/src/compositor/wayland_wrapper/qwlcompositor_p.h
index f6e0e0024..ce9d95460 100644
--- a/src/compositor/wayland_wrapper/qwlcompositor_p.h
+++ b/src/compositor/wayland_wrapper/qwlcompositor_p.h
@@ -122,8 +122,6 @@ public:
struct wl_display *wl_display() const { return m_display->handle(); }
Display *display() const { return m_display; }
- static Compositor *instance();
-
QList<QWaylandClient *> clients() const;
QWaylandCompositor::ExtensionFlags extensions() const;
diff --git a/src/compositor/wayland_wrapper/qwlinputdevice.cpp b/src/compositor/wayland_wrapper/qwlinputdevice.cpp
index 74c90f8f5..2f972425f 100644
--- a/src/compositor/wayland_wrapper/qwlinputdevice.cpp
+++ b/src/compositor/wayland_wrapper/qwlinputdevice.cpp
@@ -132,21 +132,21 @@ void QWaylandInputDevicePrivate::setCapabilities(QWaylandInputDevice::Capability
void QWaylandInputDevicePrivate::seat_get_pointer(wl_seat::Resource *resource, uint32_t id)
{
if (!m_pointer.isNull()) {
- m_pointer->addClient(QWaylandClient::fromWlClient(resource->client()), id);
+ m_pointer->addClient(QWaylandClient::fromWlClient(m_compositor, resource->client()), id);
}
}
void QWaylandInputDevicePrivate::seat_get_keyboard(wl_seat::Resource *resource, uint32_t id)
{
if (!m_keyboard.isNull()) {
- m_keyboard->addClient(QWaylandClient::fromWlClient(resource->client()), id);
+ m_keyboard->addClient(QWaylandClient::fromWlClient(m_compositor, resource->client()), id);
}
}
void QWaylandInputDevicePrivate::seat_get_touch(wl_seat::Resource *resource, uint32_t id)
{
if (!m_touch.isNull()) {
- m_touch->addClient(QWaylandClient::fromWlClient(resource->client()), id);
+ m_touch->addClient(QWaylandClient::fromWlClient(m_compositor, resource->client()), id);
}
}