summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@digia.com>2013-06-05 16:21:07 +0200
committerAndy Nichols <andy.nichols@digia.com>2013-06-06 10:52:16 +0200
commit28187e24a5c6e8ffc864942f451bfb59414411d8 (patch)
tree726a953b7a14f3d0757c43db2a11a1f3be66acf7
parent99774144586164729df58518235407f1f0531c39 (diff)
Add close event to the surface extension
Change-Id: Iacbd83d5551b3a5c2152ff80bb0085ce3f853306 Reviewed-by: Andy Nichols <andy.nichols@digia.com>
-rw-r--r--examples/qml-compositor/WindowContainer.qml2
-rw-r--r--src/compositor/compositor_api/qwaylandsurface.cpp15
-rw-r--r--src/compositor/compositor_api/qwaylandsurface.h2
-rw-r--r--src/extensions/surface-extension.xml3
-rw-r--r--src/plugins/platforms/wayland_common/qwaylandextendedsurface.cpp5
-rw-r--r--src/plugins/platforms/wayland_common/qwaylandextendedsurface.h1
6 files changed, 27 insertions, 1 deletions
diff --git a/examples/qml-compositor/WindowContainer.qml b/examples/qml-compositor/WindowContainer.qml
index 7a034d847..701b46d24 100644
--- a/examples/qml-compositor/WindowContainer.qml
+++ b/examples/qml-compositor/WindowContainer.qml
@@ -193,7 +193,7 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: {
- compositor.destroyClientForWindow(child)
+ child.surface.destroySurface()
}
}
}
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 @@
<arg name="value" type="array"/>
</event>
+ <event name="close">
+ </event>
+
<request name="update_generic_property">
<arg name="name" type="string"/>
<arg name="value" type="array"/>
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;