From 3e53caa56a48a1b854588e9a53c863ef7071f58e Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Fri, 5 Sep 2008 09:47:48 +0000 Subject: [PATCH] Use GdkAppLaunchContext when available to open attachments. 2008-09-05 Carlos Garcia Campos * libdocument/ev-attachment.[ch]: (ev_attachment_launch_app), (ev_attachment_open): * shell/ev-sidebar-attachments.c: (ev_sidebar_attachments_button_press): * shell/ev-window.c: (ev_attachment_popup_cmd_open_attachment): Use GdkAppLaunchContext when available to open attachments. svn path=/trunk/; revision=3152 --- ChangeLog | 10 ++++++++++ libdocument/ev-attachment.c | 29 +++++++++++++++++++++++------ libdocument/ev-attachment.h | 2 ++ shell/ev-sidebar-attachments.c | 5 ++++- shell/ev-window.c | 7 +++++-- 5 files changed, 44 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 98f2f3ba..3d8d1864 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-09-05 Carlos Garcia Campos + + * libdocument/ev-attachment.[ch]: (ev_attachment_launch_app), + (ev_attachment_open): + * shell/ev-sidebar-attachments.c: + (ev_sidebar_attachments_button_press): + * shell/ev-window.c: (ev_attachment_popup_cmd_open_attachment): + + Use GdkAppLaunchContext when available to open attachments. + 2008-09-04 Carlos Garcia Campos * shell/ev-media-player-keys.c: (ev_media_player_keys_grab_keys): diff --git a/libdocument/ev-attachment.c b/libdocument/ev-attachment.c index 02d5f3d2..2eadadf4 100644 --- a/libdocument/ev-attachment.c +++ b/libdocument/ev-attachment.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "ev-file-helpers.h" #include "ev-attachment.h" @@ -340,18 +341,30 @@ ev_attachment_save (EvAttachment *attachment, static gboolean ev_attachment_launch_app (EvAttachment *attachment, + GdkScreen *screen, + guint32 timestamp, GError **error) { - gboolean result; - GList *files = NULL; - GError *ioerror = NULL; + gboolean result; + GList *files = NULL; + GAppLaunchContext *context = NULL; + GError *ioerror = NULL; g_assert (G_IS_FILE (attachment->priv->tmp_file)); g_assert (G_IS_APP_INFO (attachment->priv->app)); files = g_list_prepend (files, attachment->priv->tmp_file); + +#if GTK_CHECK_VERSION (2, 14, 0) + context = G_APP_LAUNCH_CONTEXT (gdk_app_launch_context_new ()); + gdk_app_launch_context_set_screen (GDK_APP_LAUNCH_CONTEXT (context), screen); + gdk_app_launch_context_set_timestamp (GDK_APP_LAUNCH_CONTEXT (context), timestamp); +#endif result = g_app_info_launch (attachment->priv->app, files, - NULL, &ioerror); + context, &ioerror); + + if (context) + g_object_unref (context); if (!result) { g_set_error (error, @@ -374,6 +387,8 @@ ev_attachment_launch_app (EvAttachment *attachment, gboolean ev_attachment_open (EvAttachment *attachment, + GdkScreen *screen, + guint32 timestamp, GError **error) { GAppInfo *app_info; @@ -398,7 +413,8 @@ ev_attachment_open (EvAttachment *attachment, if (attachment->priv->tmp_file && g_file_query_exists (attachment->priv->tmp_file, NULL)) { - retval = ev_attachment_launch_app (attachment, error); + retval = ev_attachment_launch_app (attachment, screen, + timestamp, error); } else { GFile *tmpdir; GFile *file; @@ -411,7 +427,8 @@ ev_attachment_open (EvAttachment *attachment, g_object_unref (attachment->priv->tmp_file); attachment->priv->tmp_file = g_object_ref (file); - retval = ev_attachment_launch_app (attachment, error); + retval = ev_attachment_launch_app (attachment, screen, + timestamp, error); } g_object_unref (file); diff --git a/libdocument/ev-attachment.h b/libdocument/ev-attachment.h index 8403bee8..f163c0a3 100644 --- a/libdocument/ev-attachment.h +++ b/libdocument/ev-attachment.h @@ -66,6 +66,8 @@ gboolean ev_attachment_save (EvAttachment *attachment, GFile *file, GError **error); gboolean ev_attachment_open (EvAttachment *attachment, + GdkScreen *screen, + guint32 timestamp, GError **error); G_END_DECLS diff --git a/shell/ev-sidebar-attachments.c b/shell/ev-sidebar-attachments.c index fa64fbce..44c027f5 100644 --- a/shell/ev-sidebar-attachments.c +++ b/shell/ev-sidebar-attachments.c @@ -295,7 +295,10 @@ ev_sidebar_attachments_button_press (EvSidebarAttachments *ev_attachbar, if (!attachment) return FALSE; - ev_attachment_open (attachment, &error); + ev_attachment_open (attachment, + gtk_widget_get_screen (GTK_WIDGET (ev_attachbar)), + event->time, + &error); if (error) { g_warning ("%s", error->message); diff --git a/shell/ev-window.c b/shell/ev-window.c index 03f98cbb..ed64145d 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -5170,18 +5170,21 @@ ev_view_popup_cmd_copy_image (GtkAction *action, EvWindow *window) static void ev_attachment_popup_cmd_open_attachment (GtkAction *action, EvWindow *window) { - GList *l; + GList *l; + GdkScreen *screen; if (!window->priv->attach_list) return; + screen = gtk_window_get_screen (GTK_WINDOW (window)); + for (l = window->priv->attach_list; l && l->data; l = g_list_next (l)) { EvAttachment *attachment; GError *error = NULL; attachment = (EvAttachment *) l->data; - ev_attachment_open (attachment, &error); + ev_attachment_open (attachment, screen, GDK_CURRENT_TIME, &error); if (error) { ev_window_error_message (GTK_WINDOW (window), -- 2.43.5