diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-05-14 17:14:43 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-05-14 17:19:45 -0400 |
commit | 4c6919283763280df0ede9940ebf30afb794f079 (patch) | |
tree | 145770acefafb77a06b5fcb6f7f4d954b8327328 | |
parent | 38f610f85eb0cdfb05ecea3b8f1f94fb6a034ab9 (diff) | |
download | gtk+-4c6919283763280df0ede9940ebf30afb794f079.tar.gz |
gtk: Change the private export handle api
Make unexport_handle take the handle, which will
let us deal with multiple exports in the future.
Update all callers to store their handle, and
pass it to unexport_handle.
-rw-r--r-- | gtk/deprecated/gtkshow.c | 11 | ||||
-rw-r--r-- | gtk/gtkfilechoosernativeportal.c | 8 | ||||
-rw-r--r-- | gtk/gtkopenuriportal.c | 8 | ||||
-rw-r--r-- | gtk/gtkprintoperation-portal.c | 8 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 3 | ||||
-rw-r--r-- | gtk/gtkwindowprivate.h | 3 |
6 files changed, 31 insertions, 10 deletions
diff --git a/gtk/deprecated/gtkshow.c b/gtk/deprecated/gtkshow.c index cd37905cf0..3c3b9616cd 100644 --- a/gtk/deprecated/gtkshow.c +++ b/gtk/deprecated/gtkshow.c @@ -31,6 +31,7 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS typedef struct { GtkWindow *parent; + char *handle; GAppLaunchContext *context; char *uri; GTask *task; @@ -39,9 +40,10 @@ typedef struct { static void gtk_show_uri_data_free (GtkShowUriData *data) { - if (data->parent) - gtk_window_unexport_handle (data->parent); + if (data->parent && data->handle) + gtk_window_unexport_handle (data->parent, data->handle); g_clear_object (&data->parent); + g_free (data->handle); g_clear_object (&data->context); g_free (data->uri); g_clear_object (&data->task); @@ -72,7 +74,10 @@ window_handle_exported (GtkWindow *window, GtkShowUriData *data = user_data; if (handle) - g_app_launch_context_setenv (data->context, "PARENT_WINDOW_ID", handle); + { + g_app_launch_context_setenv (data->context, "PARENT_WINDOW_ID", handle); + data->handle = g_strdup (handle); + } g_app_info_launch_default_for_uri_async (data->uri, data->context, diff --git a/gtk/gtkfilechoosernativeportal.c b/gtk/gtkfilechoosernativeportal.c index 3d73fa6db9..4bb312d8fb 100644 --- a/gtk/gtkfilechoosernativeportal.c +++ b/gtk/gtkfilechoosernativeportal.c @@ -52,6 +52,7 @@ typedef struct { const char *method_name; + char *exported_handle; GtkWindow *exported_window; PortalErrorHandler error_handler; } FilechooserPortalData; @@ -79,7 +80,11 @@ filechooser_portal_data_clear (FilechooserPortalData *data) if (data->exported_window) { - gtk_window_unexport_handle (data->exported_window); + if (data->exported_handle) + { + gtk_window_unexport_handle (data->exported_window, data->exported_handle); + g_clear_pointer (&data->exported_handle, g_free); + } g_clear_object (&data->exported_window); } @@ -460,6 +465,7 @@ window_handle_exported (GtkWindow *window, gtk_grab_add (GTK_WIDGET (data->grab_widget)); } + data->exported_handle = g_strdup (handle_str); show_portal_file_chooser (self, handle_str); } diff --git a/gtk/gtkopenuriportal.c b/gtk/gtkopenuriportal.c index 1bec7a1cb0..67778affda 100644 --- a/gtk/gtkopenuriportal.c +++ b/gtk/gtkopenuriportal.c @@ -108,6 +108,7 @@ enum { typedef struct { GtkWindow *parent; + char *parent_handle; GFile *file; char *uri; gboolean open_folder; @@ -128,8 +129,9 @@ open_uri_data_free (OpenUriData *data) g_clear_object (&data->connection); if (data->cancel_handler) g_signal_handler_disconnect (data->cancellable, data->cancel_handler); - if (data->parent) - gtk_window_unexport_handle (data->parent); + if (data->parent && data->parent_handle) + gtk_window_unexport_handle (data->parent, data->parent_handle); + g_free (data->parent_handle); g_clear_object (&data->parent); g_clear_object (&data->file); g_free (data->uri); @@ -426,6 +428,8 @@ window_handle_exported (GtkWindow *window, GAppLaunchContext *context; char *activation_token = NULL; + data->parent_handle = g_strdup (handle); + if (window) display = gtk_widget_get_display (GTK_WIDGET (window)); else diff --git a/gtk/gtkprintoperation-portal.c b/gtk/gtkprintoperation-portal.c index 61e4071df4..d39ad1645c 100644 --- a/gtk/gtkprintoperation-portal.c +++ b/gtk/gtkprintoperation-portal.c @@ -48,6 +48,7 @@ typedef struct { GtkPrintOperationResult result; GtkPrintOperationPrintFunc print_cb; GtkWindow *parent; + char *handle; GMainLoop *loop; guint32 token; GDestroyNotify destroy; @@ -62,8 +63,9 @@ portal_data_free (gpointer data) { PortalData *portal = data; - if (portal->parent) - gtk_window_unexport_handle (portal->parent); + if (portal->parent && portal->handle) + gtk_window_unexport_handle (portal->parent, portal->handle); + g_free (portal->handle); g_object_unref (portal->op); g_object_unref (portal->proxy); if (portal->loop) @@ -547,6 +549,8 @@ window_handle_exported (GtkWindow *window, { PortalData *portal = user_data; + portal->handle = g_strdup (handle_str); + g_dbus_proxy_call (portal->proxy, "PreparePrint", g_variant_new ("(ss@a{sv}@a{sv}@a{sv})", diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 42f1765cd0..97f97ab5c9 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -6336,7 +6336,8 @@ gtk_window_export_handle (GtkWindow *window, } void -gtk_window_unexport_handle (GtkWindow *window) +gtk_window_unexport_handle (GtkWindow *window, + const char *handle) { GtkWindowPrivate *priv = gtk_window_get_instance_private (window); diff --git a/gtk/gtkwindowprivate.h b/gtk/gtkwindowprivate.h index d17ce474da..96d9dd110b 100644 --- a/gtk/gtkwindowprivate.h +++ b/gtk/gtkwindowprivate.h @@ -79,7 +79,8 @@ typedef void (*GtkWindowHandleExported) (GtkWindow *window, gboolean gtk_window_export_handle (GtkWindow *window, GtkWindowHandleExported callback, gpointer user_data); -void gtk_window_unexport_handle (GtkWindow *window); +void gtk_window_unexport_handle (GtkWindow *window, + const char *handle); GtkWidget * gtk_window_lookup_pointer_focus_widget (GtkWindow *window, GdkDevice *device, |