From c55919def7a3cea9865fa9dfa133de6852d0a433 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Sat, 4 Oct 2008 17:20:23 +0000 Subject: [PATCH] Fix launching external applications for launch actions which seems to be 2008-10-04 Carlos Garcia Campos * shell/ev-window.c: (launch_action): Fix launching external applications for launch actions which seems to be broken since the gio port. Fixes bug #554500. svn path=/trunk/; revision=3213 --- ChangeLog | 7 +++++++ shell/ev-window.c | 42 +++++++++++++++++++++--------------------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6a2ae61b..76bbcb7f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-10-04 Carlos Garcia Campos + + * shell/ev-window.c: (launch_action): + + Fix launching external applications for launch actions which seems + to be broken since the gio port. Fixes bug #554500. + 2008-09-28 Carlos Garcia Campos * backend/dvi/Makefile.am: diff --git a/shell/ev-window.c b/shell/ev-window.c index fc8cc8dc..75120ba8 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -4833,12 +4833,11 @@ static void launch_action (EvWindow *window, EvLinkAction *action) { const char *filename = ev_link_action_get_filename (action); - const char *content_type; GAppInfo *app_info; - GFileInfo *file_info; GFile *file; - GList *file_list = NULL; - + GList file_list = {NULL}; + GError *error = NULL; + if (filename == NULL) return; @@ -4846,34 +4845,35 @@ launch_action (EvWindow *window, EvLinkAction *action) file = g_file_new_for_path (filename); } else { GFile *base_file; + gchar *dir; + + dir = g_path_get_dirname (window->priv->uri); + base_file = g_file_new_for_uri (dir); + g_free (dir); - base_file = g_file_new_for_uri (window->priv->uri); - file = g_file_resolve_relative_path (base_file, - filename); - + file = g_file_resolve_relative_path (base_file, filename); g_object_unref (base_file); } - - file_info = g_file_query_info (file, - G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, - 0, NULL, NULL); - if (file_info == NULL) { + + app_info = g_file_query_default_handler (file, NULL, &error); + if (!app_info) { + /* FIXME: use ev_window_error_message */ + g_warning ("%s", error->message); g_object_unref (file); + return; } - content_type = g_file_info_get_content_type (file_info); - app_info = g_app_info_get_default_for_type (content_type, TRUE); - - file_list = g_list_append (file_list, file); + file_list.data = file; /* FIXME: should we use a GAppLaunchContext? */ - g_app_info_launch (app_info, file_list, - NULL, NULL); + if (!g_app_info_launch (app_info, &file_list, NULL, &error)) { + /* FIXME: use ev_window_error_message */ + g_warning ("%s", error->message); + g_error_free (error); + } - g_list_free (file_list); g_object_unref (app_info); - g_object_unref (file_info); g_object_unref (file); /* According to the PDF spec filename can be an executable. I'm not sure -- 2.43.5