diff options
author | Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> | 2014-07-25 21:51:09 +0200 |
---|---|---|
committer | Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> | 2014-08-17 11:23:26 +0200 |
commit | ca83fc4620c483190aeeddd3b80645e29131c57a (patch) | |
tree | 63530f1e318f1eb36fffc0d6b9b07b78bbfceeeb /src/compositor/wayland_wrapper/qwlcompositor.cpp | |
parent | 14faa3376a9d680b97622386784d8b52a9b56ca9 (diff) |
Expose surface's client to QML
Introduce QWaylandClient class that wraps wl_client credentials
and has a method to destroy the client.
Add QWaylandClient object as a QWaylandSurface property.
This come in handy for example when the compositor wants to kill the
process of an unresponsive surface or wants to know client credentails.
WaylandClient typedef is now useless thus is replaced by QWaylandClient.
Change-Id: I997ec459af0f19baef67e7420c90937b197b2e1d
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Diffstat (limited to 'src/compositor/wayland_wrapper/qwlcompositor.cpp')
-rw-r--r-- | src/compositor/wayland_wrapper/qwlcompositor.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/compositor/wayland_wrapper/qwlcompositor.cpp b/src/compositor/wayland_wrapper/qwlcompositor.cpp index d89d653d3..a733e33fa 100644 --- a/src/compositor/wayland_wrapper/qwlcompositor.cpp +++ b/src/compositor/wayland_wrapper/qwlcompositor.cpp @@ -1,5 +1,6 @@ /**************************************************************************** ** +** Copyright (C) 2014 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** @@ -44,6 +45,7 @@ #include "qwldisplay_p.h" #include "qwloutput_p.h" #include "qwlsurface_p.h" +#include "qwaylandclient.h" #include "qwaylandcompositor.h" #include "qwldatadevicemanager_p.h" #include "qwldatadevice_p.h" @@ -163,6 +165,7 @@ void Compositor::init() connect(dispatcher, SIGNAL(aboutToBlock()), this, SLOT(processWaylandEvents())); qRegisterMetaType<SurfaceBuffer*>("SurfaceBuffer*"); + qRegisterMetaType<QWaylandClient*>("WaylandClient*"); qRegisterMetaType<QWaylandSurface*>("WaylandSurface*"); qRegisterMetaType<QWaylandSurfaceView*>("WaylandSurfaceView*"); //initialize distancefieldglyphcache here @@ -174,6 +177,8 @@ void Compositor::init() Compositor::~Compositor() { + qDeleteAll(m_clients); + delete m_outputExtension; delete m_surfaceExtension; delete m_subSurfaceExtension; @@ -238,16 +243,15 @@ void Compositor::compositor_create_region(Resource *resource, uint32_t id) new Region(resource->client(), id); } -void Compositor::destroyClient(WaylandClient *c) +void Compositor::destroyClient(QWaylandClient *client) { - wl_client *client = static_cast<wl_client *>(c); if (!client) return; if (m_windowManagerIntegration) - m_windowManagerIntegration->sendQuitMessage(client); + m_windowManagerIntegration->sendQuitMessage(client->client()); - wl_client_destroy(client); + wl_client_destroy(client->client()); } QWindow *Compositor::window() const @@ -319,15 +323,9 @@ void Compositor::initializeDefaultInputDevice() m_default_input_device = m_default_wayland_input_device->handle(); } -QList<struct wl_client *> Compositor::clients() const +QList<QWaylandClient *> Compositor::clients() const { - QList<struct wl_client *> list; - foreach (Surface *surface, m_surfaces) { - struct wl_client *client = surface->resource()->client(); - if (!list.contains(client)) - list.append(client); - } - return list; + return m_clients; } void Compositor::setScreenOrientation(Qt::ScreenOrientation orientation) |