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 | |
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')
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); } } |