|
David Zeuthen |
58ed49b |
Index: gio/gdesktopappinfo.c
|
|
David Zeuthen |
58ed49b |
===================================================================
|
|
David Zeuthen |
58ed49b |
--- gio/gdesktopappinfo.c (revision 6851)
|
|
David Zeuthen |
58ed49b |
+++ gio/gdesktopappinfo.c (working copy)
|
|
David Zeuthen |
58ed49b |
@@ -1,3 +1,5 @@
|
|
David Zeuthen |
58ed49b |
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
David Zeuthen |
58ed49b |
+
|
|
David Zeuthen |
58ed49b |
/* GIO - GLib Input, Output and Streaming Library
|
|
David Zeuthen |
58ed49b |
*
|
|
David Zeuthen |
58ed49b |
* Copyright (C) 2006-2007 Red Hat, Inc.
|
|
David Zeuthen |
58ed49b |
@@ -87,6 +89,7 @@
|
|
David Zeuthen |
58ed49b |
char *exec;
|
|
David Zeuthen |
58ed49b |
char *binary;
|
|
David Zeuthen |
58ed49b |
char *path;
|
|
David Zeuthen |
58ed49b |
+ char *vfs_system;
|
|
David Zeuthen |
58ed49b |
|
|
David Zeuthen |
58ed49b |
guint nodisplay : 1;
|
|
David Zeuthen |
58ed49b |
guint hidden : 1;
|
|
David Zeuthen |
58ed49b |
@@ -149,6 +152,7 @@
|
|
David Zeuthen |
58ed49b |
g_free (info->try_exec);
|
|
David Zeuthen |
58ed49b |
g_free (info->exec);
|
|
David Zeuthen |
58ed49b |
g_free (info->binary);
|
|
David Zeuthen |
58ed49b |
+ g_free (info->vfs_system);
|
|
David Zeuthen |
58ed49b |
g_free (info->path);
|
|
David Zeuthen |
58ed49b |
|
|
David Zeuthen |
58ed49b |
G_OBJECT_CLASS (g_desktop_app_info_parent_class)->finalize (object);
|
|
David Zeuthen |
58ed49b |
@@ -264,6 +268,7 @@
|
|
David Zeuthen |
58ed49b |
info->terminal = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_TERMINAL, NULL) != FALSE;
|
|
David Zeuthen |
58ed49b |
info->startup_notify = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY, NULL) != FALSE;
|
|
David Zeuthen |
58ed49b |
info->hidden = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_HIDDEN, NULL) != FALSE;
|
|
David Zeuthen |
58ed49b |
+ info->vfs_system = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, "X-Gnome-Vfs-System", NULL);
|
|
David Zeuthen |
58ed49b |
|
|
David Zeuthen |
58ed49b |
g_key_file_free (key_file);
|
|
David Zeuthen |
58ed49b |
|
|
David Zeuthen |
58ed49b |
@@ -498,9 +503,35 @@
|
|
David Zeuthen |
58ed49b |
{
|
|
David Zeuthen |
58ed49b |
GList *uris = *uri_list;
|
|
David Zeuthen |
58ed49b |
char *expanded;
|
|
David Zeuthen |
58ed49b |
-
|
|
David Zeuthen |
58ed49b |
+ gboolean force_file_uri;
|
|
David Zeuthen |
58ed49b |
+ char force_file_uri_macro;
|
|
David Zeuthen |
58ed49b |
+
|
|
David Zeuthen |
58ed49b |
g_return_if_fail (exec != NULL);
|
|
David Zeuthen |
58ed49b |
-
|
|
David Zeuthen |
58ed49b |
+
|
|
David Zeuthen |
58ed49b |
+ /* On %u and %U, only pass gio URI's if the desktop file has the
|
|
David Zeuthen |
58ed49b |
+ * X-Gnome-Vfs-System key set to 'gio' or if FUSE is not available.
|
|
David Zeuthen |
58ed49b |
+ * Otherwise we pass in a POSIX file path pointing to the URI via
|
|
David Zeuthen |
58ed49b |
+ * the FUSE mount in ~/.gvfs.
|
|
David Zeuthen |
58ed49b |
+ */
|
|
David Zeuthen |
58ed49b |
+ force_file_uri = FALSE;
|
|
David Zeuthen |
58ed49b |
+ if (macro == 'u' || macro == 'U')
|
|
David Zeuthen |
58ed49b |
+ {
|
|
David Zeuthen |
58ed49b |
+ if (info->vfs_system == NULL || strcmp (info->vfs_system, "gio") != 0)
|
|
David Zeuthen |
58ed49b |
+ {
|
|
David Zeuthen |
58ed49b |
+ switch (macro)
|
|
David Zeuthen |
58ed49b |
+ {
|
|
David Zeuthen |
58ed49b |
+ case 'u':
|
|
David Zeuthen |
58ed49b |
+ force_file_uri_macro = 'f';
|
|
David Zeuthen |
58ed49b |
+ force_file_uri = TRUE;
|
|
David Zeuthen |
58ed49b |
+ break;
|
|
David Zeuthen |
58ed49b |
+ case 'U':
|
|
David Zeuthen |
58ed49b |
+ force_file_uri_macro = 'F';
|
|
David Zeuthen |
58ed49b |
+ force_file_uri = TRUE;
|
|
David Zeuthen |
58ed49b |
+ break;
|
|
David Zeuthen |
58ed49b |
+ }
|
|
David Zeuthen |
58ed49b |
+ }
|
|
David Zeuthen |
58ed49b |
+ }
|
|
David Zeuthen |
58ed49b |
+
|
|
David Zeuthen |
58ed49b |
switch (macro)
|
|
David Zeuthen |
58ed49b |
{
|
|
David Zeuthen |
58ed49b |
case 'u':
|
|
David Zeuthen |
58ed49b |
@@ -509,7 +540,17 @@
|
|
David Zeuthen |
58ed49b |
case 'n':
|
|
David Zeuthen |
58ed49b |
if (uris)
|
|
David Zeuthen |
58ed49b |
{
|
|
David Zeuthen |
58ed49b |
- expanded = expand_macro_single (macro, uris->data);
|
|
David Zeuthen |
58ed49b |
+ if (!force_file_uri || g_str_has_prefix (uris->data, "http"))
|
|
David Zeuthen |
58ed49b |
+ {
|
|
David Zeuthen |
58ed49b |
+ expanded = expand_macro_single (macro, uris->data);
|
|
David Zeuthen |
58ed49b |
+ }
|
|
David Zeuthen |
58ed49b |
+ else
|
|
David Zeuthen |
58ed49b |
+ {
|
|
David Zeuthen |
58ed49b |
+ expanded = expand_macro_single (force_file_uri_macro, uris->data);
|
|
David Zeuthen |
58ed49b |
+ if (expanded == NULL)
|
|
David Zeuthen |
58ed49b |
+ expanded = expand_macro_single (macro, uris->data);
|
|
David Zeuthen |
58ed49b |
+ }
|
|
David Zeuthen |
58ed49b |
+
|
|
David Zeuthen |
58ed49b |
if (expanded)
|
|
David Zeuthen |
58ed49b |
{
|
|
David Zeuthen |
58ed49b |
g_string_append (exec, expanded);
|
|
David Zeuthen |
58ed49b |
@@ -526,7 +567,17 @@
|
|
David Zeuthen |
58ed49b |
case 'N':
|
|
David Zeuthen |
58ed49b |
while (uris)
|
|
David Zeuthen |
58ed49b |
{
|
|
David Zeuthen |
58ed49b |
- expanded = expand_macro_single (macro, uris->data);
|
|
David Zeuthen |
58ed49b |
+ if (!force_file_uri || g_str_has_prefix (uris->data, "http"))
|
|
David Zeuthen |
58ed49b |
+ {
|
|
David Zeuthen |
58ed49b |
+ expanded = expand_macro_single (macro, uris->data);
|
|
David Zeuthen |
58ed49b |
+ }
|
|
David Zeuthen |
58ed49b |
+ else
|
|
David Zeuthen |
58ed49b |
+ {
|
|
David Zeuthen |
58ed49b |
+ expanded = expand_macro_single (force_file_uri_macro, uris->data);
|
|
David Zeuthen |
58ed49b |
+ if (expanded == NULL)
|
|
David Zeuthen |
58ed49b |
+ expanded = expand_macro_single (macro, uris->data);
|
|
David Zeuthen |
58ed49b |
+ }
|
|
David Zeuthen |
58ed49b |
+
|
|
David Zeuthen |
58ed49b |
if (expanded)
|
|
David Zeuthen |
58ed49b |
{
|
|
David Zeuthen |
58ed49b |
g_string_append (exec, expanded);
|