From 28187e24a5c6e8ffc864942f451bfb59414411d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 5 Jun 2013 16:21:07 +0200 Subject: Add close event to the surface extension Change-Id: Iacbd83d5551b3a5c2152ff80bb0085ce3f853306 Reviewed-by: Andy Nichols --- src/compositor/compositor_api/qwaylandsurface.cpp | 15 +++++++++++++++ src/compositor/compositor_api/qwaylandsurface.h | 2 ++ src/extensions/surface-extension.xml | 3 +++ .../platforms/wayland_common/qwaylandextendedsurface.cpp | 5 +++++ .../platforms/wayland_common/qwaylandextendedsurface.h | 1 + 5 files changed, 26 insertions(+) (limited to 'src') diff --git a/src/compositor/compositor_api/qwaylandsurface.cpp b/src/compositor/compositor_api/qwaylandsurface.cpp index 94770197d..e302ab717 100644 --- a/src/compositor/compositor_api/qwaylandsurface.cpp +++ b/src/compositor/compositor_api/qwaylandsurface.cpp @@ -327,4 +327,19 @@ bool QWaylandSurface::transientInactive() const return d->surface->transientInactive(); } +void QWaylandSurface::destroySurface() +{ + Q_D(QWaylandSurface); + if (d->surface->extendedSurface()) { + d->surface->extendedSurface()->send_close(); + } +} + +void QWaylandSurface::destroySurfaceByForce() +{ + Q_D(QWaylandSurface); + wl_resource *surface_resource = d->surface->resource()->handle; + wl_resource_destroy(surface_resource); +} + QT_END_NAMESPACE diff --git a/src/compositor/compositor_api/qwaylandsurface.h b/src/compositor/compositor_api/qwaylandsurface.h index 544fbc047..01479273b 100644 --- a/src/compositor/compositor_api/qwaylandsurface.h +++ b/src/compositor/compositor_api/qwaylandsurface.h @@ -157,6 +157,8 @@ public: bool transientInactive() const; + Q_INVOKABLE void destroySurface(); + Q_INVOKABLE void destroySurfaceByForce(); signals: void mapped(); void unmapped(); diff --git a/src/extensions/surface-extension.xml b/src/extensions/surface-extension.xml index 269b4390d..ccc65795b 100644 --- a/src/extensions/surface-extension.xml +++ b/src/extensions/surface-extension.xml @@ -55,6 +55,9 @@ + + + diff --git a/src/plugins/platforms/wayland_common/qwaylandextendedsurface.cpp b/src/plugins/platforms/wayland_common/qwaylandextendedsurface.cpp index 46280bcf3..daf330265 100644 --- a/src/plugins/platforms/wayland_common/qwaylandextendedsurface.cpp +++ b/src/plugins/platforms/wayland_common/qwaylandextendedsurface.cpp @@ -136,6 +136,11 @@ void QWaylandExtendedSurface::extended_surface_set_generic_property(const QStrin nativeInterface->emitWindowPropertyChanged(m_window, name); } +void QWaylandExtendedSurface::extended_surface_close() +{ + QWindowSystemInterface::handleCloseEvent(m_window->window()); +} + Qt::WindowFlags QWaylandExtendedSurface::setWindowFlags(Qt::WindowFlags flags) { uint wlFlags = 0; diff --git a/src/plugins/platforms/wayland_common/qwaylandextendedsurface.h b/src/plugins/platforms/wayland_common/qwaylandextendedsurface.h index 9dbebaf47..d52b2cc33 100644 --- a/src/plugins/platforms/wayland_common/qwaylandextendedsurface.h +++ b/src/plugins/platforms/wayland_common/qwaylandextendedsurface.h @@ -73,6 +73,7 @@ public: private: void extended_surface_onscreen_visibility(int32_t visible) Q_DECL_OVERRIDE; void extended_surface_set_generic_property(const QString &name, wl_array *value) Q_DECL_OVERRIDE; + void extended_surface_close() Q_DECL_OVERRIDE; QWaylandWindow *m_window; QVariantMap m_properties; -- cgit v1.2.3