summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-05-14 17:14:43 -0400
committerMatthias Clasen <mclasen@redhat.com>2023-05-14 17:19:45 -0400
commit4c6919283763280df0ede9940ebf30afb794f079 (patch)
tree145770acefafb77a06b5fcb6f7f4d954b8327328
parent38f610f85eb0cdfb05ecea3b8f1f94fb6a034ab9 (diff)
downloadgtk+-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.c11
-rw-r--r--gtk/gtkfilechoosernativeportal.c8
-rw-r--r--gtk/gtkopenuriportal.c8
-rw-r--r--gtk/gtkprintoperation-portal.c8
-rw-r--r--gtk/gtkwindow.c3
-rw-r--r--gtk/gtkwindowprivate.h3
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,