Blob Blame History Raw
--- trunk/gio/gdesktopappinfo.c	2008/09/26 19:57:36	7554
+++ trunk/gio/gdesktopappinfo.c	2008/10/01 17:46:57	7566
@@ -530,9 +530,32 @@
 {
   GList *uris = *uri_list;
   char *expanded;
-  
+  gboolean force_file_uri;
+  char force_file_uri_macro;
+
   g_return_if_fail (exec != NULL);
-  
+
+  /* On %u and %U, pass POSIX file path pointing to the URI via
+   * the FUSE mount in ~/.gvfs. Note that if the FUSE daemon isn't
+   * running or the URI doesn't have a POSIX file path via FUSE
+   * we'll just pass the URI.
+   */
+  switch (macro)
+    {
+    case 'u':
+      force_file_uri_macro = 'f';
+      force_file_uri = TRUE;
+      break;
+    case 'U':
+      force_file_uri_macro = 'F';
+      force_file_uri = TRUE;
+      break;
+    default:
+      force_file_uri_macro = macro;
+      force_file_uri = FALSE;
+      break;
+    }
+
   switch (macro)
     {
     case 'u':
@@ -541,7 +564,17 @@
     case 'n':
       if (uris)
 	{
-	  expanded = expand_macro_single (macro, uris->data);
+          if (!force_file_uri)
+            {
+              expanded = expand_macro_single (macro, uris->data);
+            }
+          else
+            {
+              expanded = expand_macro_single (force_file_uri_macro, uris->data);
+              if (expanded == NULL)
+                expanded = expand_macro_single (macro, uris->data);
+            }
+
 	  if (expanded)
 	    {
 	      g_string_append (exec, expanded);
@@ -558,7 +591,17 @@
     case 'N':
       while (uris)
 	{
-	  expanded = expand_macro_single (macro, uris->data);
+          if (!force_file_uri)
+            {
+              expanded = expand_macro_single (macro, uris->data);
+            }
+          else
+            {
+              expanded = expand_macro_single (force_file_uri_macro, uris->data);
+              if (expanded == NULL)
+                expanded = expand_macro_single (macro, uris->data);
+            }
+
 	  if (expanded)
 	    {
 	      g_string_append (exec, expanded);