From ffe7fbfbb5208937394361dabfbf705e3bb2f8fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Wed, 15 Feb 2012 13:28:10 +0100
Subject: [PATCH] Expose in a virtual function that surfaces are being
 destroyed

Change-Id: I979e7d9ca7152d4db6c3e7adae8353935a05d6c5
Reviewed-by: Andy Nichols <andy.nichols@nokia.com>
---
 src/compositor/compositor_api/waylandcompositor.cpp | 5 +++++
 src/compositor/compositor_api/waylandcompositor.h   | 1 +
 src/compositor/wayland_wrapper/wlcompositor.cpp     | 1 +
 src/compositor/wayland_wrapper/wlsurface.cpp        | 2 +-
 4 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/compositor/compositor_api/waylandcompositor.cpp b/src/compositor/compositor_api/waylandcompositor.cpp
index 9196a574..4e1097c4 100644
--- a/src/compositor/compositor_api/waylandcompositor.cpp
+++ b/src/compositor/compositor_api/waylandcompositor.cpp
@@ -109,6 +109,11 @@ QWindow * WaylandCompositor::window() const
     return m_toplevel_window;
 }
 
+void WaylandCompositor::surfaceAboutToBeDestroyed(WaylandSurface *surface)
+{
+    Q_UNUSED(surface);
+}
+
 Wayland::Compositor * WaylandCompositor::handle() const
 {
     return m_compositor;
diff --git a/src/compositor/compositor_api/waylandcompositor.h b/src/compositor/compositor_api/waylandcompositor.h
index 22072659..8406298b 100644
--- a/src/compositor/compositor_api/waylandcompositor.h
+++ b/src/compositor/compositor_api/waylandcompositor.h
@@ -72,6 +72,7 @@ public:
     QWindow *window()const;
 
     virtual void surfaceCreated(WaylandSurface *surface) = 0;
+    virtual void surfaceAboutToBeDestroyed(WaylandSurface *surface);
 
     Wayland::Compositor *handle() const;
 
diff --git a/src/compositor/wayland_wrapper/wlcompositor.cpp b/src/compositor/wayland_wrapper/wlcompositor.cpp
index 27378f19..1e1765b1 100644
--- a/src/compositor/wayland_wrapper/wlcompositor.cpp
+++ b/src/compositor/wayland_wrapper/wlcompositor.cpp
@@ -254,6 +254,7 @@ void Compositor::surfaceDestroyed(Surface *surface)
     m_dirty_surfaces.remove(surface);
     if (m_directRenderSurface == surface)
         setDirectRenderSurface(0);
+    waylandCompositor()->surfaceAboutToBeDestroyed(surface->waylandSurface());
 }
 
 void Compositor::markSurfaceAsDirty(Wayland::Surface *surface)
diff --git a/src/compositor/wayland_wrapper/wlsurface.cpp b/src/compositor/wayland_wrapper/wlsurface.cpp
index 72cc45ad..5d658493 100644
--- a/src/compositor/wayland_wrapper/wlsurface.cpp
+++ b/src/compositor/wayland_wrapper/wlsurface.cpp
@@ -68,6 +68,7 @@ namespace Wayland {
 void destroy_surface(struct wl_resource *resource)
 {
     Surface *surface = wayland_cast<Surface *>((wl_surface *)resource);
+    surface->compositor()->surfaceDestroyed(surface);
     delete surface;
 }
 
@@ -88,7 +89,6 @@ Surface::Surface(struct wl_client *client, uint32_t id, Compositor *compositor)
 
 Surface::~Surface()
 {
-    m_compositor->surfaceDestroyed(this);
     delete m_waylandSurface;
 }
 
-- 
GitLab