summaryrefslogtreecommitdiff
path: root/programs
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2012-05-18 08:55:00 -0400
committerDan Winship <danw@gnome.org>2012-06-20 10:44:27 -0400
commite8b4b3309e3e9c85c37d5522a01f24a8914538fc (patch)
treeffac12f05660a2889c097ee06159f0ea68b42eeb /programs
parentb6164bc173223ee726f3102e3c7ed2bb9d2aad5b (diff)
downloadgvfs-e8b4b3309e3e9c85c37d5522a01f24a8914538fc.tar.gz
gvfs-open: use g_app_info_launch_default_for_uri()
g_app_info_launch_default_for_uri() didn't exist when gvfs-open was first written, but now that it does, there's no reason not to use it. https://bugzilla.gnome.org/show_bug.cgi?id=676313
Diffstat (limited to 'programs')
-rw-r--r--programs/gvfs-open.c84
1 files changed, 14 insertions, 70 deletions
diff --git a/programs/gvfs-open.c b/programs/gvfs-open.c
index c72a896a..e32b1950 100644
--- a/programs/gvfs-open.c
+++ b/programs/gvfs-open.c
@@ -38,76 +38,14 @@ static GOptionEntry entries[] = {
{NULL}
};
-static gboolean
-is_file_uri_with_anchor (char *str)
-{
- if (g_ascii_strncasecmp (str, "file:", 5) == 0 &&
- strchr (str, '#') != NULL)
- return TRUE;
- return FALSE;
-}
-
-static gboolean
-open (GFile *file, char *arg_string)
-{
- GAppInfo *app;
- GError *error;
- GList l = {NULL};
- gboolean res;
-
- error = NULL;
- app = g_file_query_default_handler (file, NULL, &error);
-
- if (app == NULL)
- {
- /* Translators: the first %s is the program name, the second one */
- /* is the URI of the file, the third is the error message. */
- g_printerr (_("%s: %s: error opening location: %s\n"),
- g_get_prgname (), g_file_get_uri (file), error->message);
- g_error_free (error);
- return FALSE;
- }
-
- if (g_file_is_native (file) && !is_file_uri_with_anchor (arg_string))
- {
- /* For normal files, pass in the canonicalized GFile as path */
- l.data = file;
- res = g_app_info_launch (app, &l,
- NULL, &error);
- }
- else
- {
- /* However, for uris, use the original string, as it might be
- modified by passing throught GFile (e.g. mailto: links)
- */
- l.data = arg_string;
- res = g_app_info_launch_uris (app, &l,
- NULL, &error);
- }
-
- if (!res)
- {
- /* Translators: the first %s is the program name, the second one */
- /* is the URI of the file, the third is the error message. */
- g_printerr (_("%s: %s: error launching application: %s\n"),
- g_get_prgname (), g_file_get_uri (file), error->message);
- g_error_free (error);
- }
-
- g_object_unref (app);
-
- return res;
-}
-
int
main (int argc, char *argv[])
{
GError *error = NULL;
GOptionContext *context = NULL;
- GFile *file;
gchar *summary;
int i;
- gint res;
+ gboolean success;
setlocale (LC_ALL, "");
@@ -158,17 +96,23 @@ main (int argc, char *argv[])
}
i = 0;
- res = 0;
+ success = TRUE;
do
{
- file = g_file_new_for_commandline_arg (locations[i]);
- res += !open (file, locations[i]);
- g_object_unref (file);
+ if (!g_app_info_launch_default_for_uri (locations[i],
+ NULL,
+ &error))
+ {
+ /* Translators: the first %s is the program name, the second one */
+ /* is the URI of the file, the third is the error message. */
+ g_printerr (_("%s: %s: error opening location: %s\n"),
+ g_get_prgname (), locations[i], error->message);
+ g_clear_error (&error);
+ success = FALSE;
+ }
}
while (locations[++i] != NULL);
- if (res)
- return 2;
- return 0;
+ return success ? 0 : 2;
}