gdk: Change the private export handle api
authorMatthias Clasen <mclasen@redhat.com>
Sun, 14 May 2023 21:28:17 +0000 (17:28 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 15 May 2023 03:49:44 +0000 (23:49 -0400)
Make unexport_handle take the handle, so we
can in the future deal with multiple exports.

Update the one caller in gtkwindow.c to pass
the handle.

gdk/gdktoplevel.c
gdk/gdktoplevelprivate.h
gdk/wayland/gdktoplevel-wayland.c
gdk/x11/gdksurface-x11.c
gtk/gtkwindow.c

index 5b201d45e45cb1e831ac1ffd3b5075ab8c727d97..6a1667768a79371c6f9107e614902531612a327c 100644 (file)
@@ -135,7 +135,8 @@ gdk_toplevel_default_export_handle_finish (GdkToplevel   *toplevel,
 }
 
 static void
-gdk_toplevel_default_unexport_handle (GdkToplevel *toplevel)
+gdk_toplevel_default_unexport_handle (GdkToplevel *toplevel,
+                                      const char  *handle)
 {
 }
 
@@ -810,6 +811,7 @@ gdk_toplevel_export_handle_finish (GdkToplevel   *toplevel,
 /*< private >
  * gdk_toplevel_unexport_handle:
  * @toplevel: a `GdkToplevel`
+ * @handle: the handle to unexport
  *
  * Destroys the handle that was obtained with [method@Gdk.Toplevel.export_handle].
  *
@@ -819,7 +821,8 @@ gdk_toplevel_export_handle_finish (GdkToplevel   *toplevel,
  * Since: 4.10
  */
 void
-gdk_toplevel_unexport_handle (GdkToplevel *toplevel)
+gdk_toplevel_unexport_handle (GdkToplevel *toplevel,
+                              const char  *handle)
 {
-  GDK_TOPLEVEL_GET_IFACE (toplevel)->unexport_handle (toplevel);
+  GDK_TOPLEVEL_GET_IFACE (toplevel)->unexport_handle (toplevel, handle);
 }
index 8f0f8d6f8e960a0a2d4ecda1f06c1fc3649e943f..6fb6d408357804e91f865526b22547dba86f4705 100644 (file)
@@ -49,7 +49,8 @@ struct _GdkToplevelInterface
                                             GAsyncResult         *result,
                                             GError              **error);
 
-  void          (* unexport_handle)        (GdkToplevel          *toplevel);
+  void          (* unexport_handle)        (GdkToplevel          *toplevel,
+                                            const char           *handle);
 };
 
 typedef enum
@@ -82,7 +83,8 @@ char *gdk_toplevel_export_handle_finish (GdkToplevel          *toplevel,
                                          GAsyncResult         *result,
                                          GError              **error);
 
-void  gdk_toplevel_unexport_handle      (GdkToplevel          *toplevel);
+void  gdk_toplevel_unexport_handle      (GdkToplevel          *toplevel,
+                                         const char           *handle);
 
 G_END_DECLS
 
index 521841ee9dc25462568b0a21217dab8505ff7a62..7b968e5c1695952342b86c8dbec468eaaa5a6f4d 100644 (file)
@@ -1809,7 +1809,8 @@ gdk_wayland_toplevel_real_export_handle_finish (GdkToplevel   *toplevel,
 }
 
 static void
-gdk_wayland_toplevel_real_unexport_handle (GdkToplevel *toplevel)
+gdk_wayland_toplevel_real_unexport_handle (GdkToplevel *toplevel,
+                                           const char  *handle)
 {
   GdkWaylandToplevel *wayland_toplevel = GDK_WAYLAND_TOPLEVEL (toplevel);
 
@@ -2486,9 +2487,7 @@ gdk_wayland_toplevel_export_handle (GdkToplevel                *toplevel,
 void
 gdk_wayland_toplevel_unexport_handle (GdkToplevel *toplevel)
 {
-  g_return_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel));
-
-  gdk_toplevel_unexport_handle (toplevel);
+  g_warning ("Use gdk_wayland_toplevel_drop_exported_handle()");
 }
 
 /**
@@ -2507,9 +2506,7 @@ void
 gdk_wayland_toplevel_drop_exported_handle (GdkToplevel *toplevel,
                                            const char  *handle)
 {
-  g_return_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel));
-
-  gdk_toplevel_unexport_handle (toplevel);
+  gdk_toplevel_unexport_handle (toplevel, handle);
 }
 
 static void
index db8a8770ed68dafe736cf161611c1963d21c7e1e..468ee941b68657f77baf742db9dd9a2ad2aaa124 100644 (file)
@@ -5318,7 +5318,8 @@ gdk_x11_toplevel_export_handle_finish (GdkToplevel   *toplevel,
 }
 
 static void
-gdk_x11_toplevel_unexport_handle (GdkToplevel *toplevel)
+gdk_x11_toplevel_unexport_handle (GdkToplevel *toplevel,
+                                  const char  *handle)
 {
 }
 
index 97f97ab5c9f24b32d20ae7b075307ee2aad9644a..4b67f2793bcfcfd05ee169314a1caf4b28294a70 100644 (file)
@@ -6291,6 +6291,17 @@ prefix_handle (GdkDisplay *display,
     return NULL;
 }
 
+static const char *
+unprefix_handle (const char *handle)
+{
+  if (g_str_has_prefix (handle, "wayland:"))
+    return handle + strlen ("wayland:");
+  else if (g_str_has_prefix (handle, "x11:"))
+    return handle + strlen ("x1!:");
+  else
+    return handle;
+}
+
 static void
 export_handle_done (GObject      *source,
                     GAsyncResult *result,
@@ -6341,7 +6352,7 @@ gtk_window_unexport_handle (GtkWindow  *window,
 {
   GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
 
-  gdk_toplevel_unexport_handle (GDK_TOPLEVEL (priv->surface));
+  gdk_toplevel_unexport_handle (GDK_TOPLEVEL (priv->surface), unprefix_handle (handle));
 }
 
 static GtkPointerFocus *