GdkWaylandWindow: Unexport when finalizing
authorJonas Ådahl <jadahl@gmail.com>
Mon, 8 May 2017 04:09:00 +0000 (12:09 +0800)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 8 May 2017 19:47:12 +0000 (15:47 -0400)
The application might not have exported, and it'll be too late for it
at this point anyway, so lets be helpful and not leak it.

https://bugzilla.gnome.org/show_bug.cgi?id=782109

gdk/wayland/gdkwindow-wayland.c

index 191ab214a1b32233f11abc7aca4966a5b70084a2..f36f9b2ead7cf09cc654f78382258635d7f89421 100644 (file)
@@ -239,6 +239,8 @@ static void calculate_moved_to_rect_result (GdkWindow    *window,
                                             gboolean     *flipped_x,
                                             gboolean     *flipped_y);
 
+static gboolean gdk_wayland_window_is_exported (GdkWindow *window);
+
 GType _gdk_window_impl_wayland_get_type (void);
 
 G_DEFINE_TYPE (GdkWindowImplWayland, _gdk_window_impl_wayland, GDK_TYPE_WINDOW_IMPL)
@@ -969,6 +971,9 @@ gdk_window_impl_wayland_finalize (GObject *object)
 
   impl = GDK_WINDOW_IMPL_WAYLAND (object);
 
+  if (gdk_wayland_window_is_exported (window))
+    gdk_wayland_window_unexport_handle (window);
+
   g_free (impl->title);
 
   g_free (impl->application.application_id);
@@ -4049,6 +4054,12 @@ static const struct zxdg_exported_v1_listener xdg_exported_listener = {
  * Since: 3.22
  */
 
+static gboolean
+gdk_wayland_window_is_exported (GdkWindow *window)
+{
+  return !!impl->display_server.xdg_exported;
+}
+
 /**
  * gdk_wayland_window_export_handle:
  * @window: the #GdkWindow to obtain a handle for