typedef struct {
GtkWindow *parent;
+ char *handle;
GAppLaunchContext *context;
char *uri;
GTask *task;
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);
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,
const char *method_name;
+ char *exported_handle;
GtkWindow *exported_window;
PortalErrorHandler error_handler;
} FilechooserPortalData;
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);
}
gtk_grab_add (GTK_WIDGET (data->grab_widget));
}
+ data->exported_handle = g_strdup (handle_str);
show_portal_file_chooser (self, handle_str);
}
typedef struct {
GtkWindow *parent;
+ char *parent_handle;
GFile *file;
char *uri;
gboolean open_folder;
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);
GAppLaunchContext *context;
char *activation_token = NULL;
+ data->parent_handle = g_strdup (handle);
+
if (window)
display = gtk_widget_get_display (GTK_WIDGET (window));
else
GtkPrintOperationResult result;
GtkPrintOperationPrintFunc print_cb;
GtkWindow *parent;
+ char *handle;
GMainLoop *loop;
guint32 token;
GDestroyNotify destroy;
{
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)
{
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})",
}
void
-gtk_window_unexport_handle (GtkWindow *window)
+gtk_window_unexport_handle (GtkWindow *window,
+ const char *handle)
{
GtkWindowPrivate *priv = gtk_window_get_instance_private (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,