contentserializer: Serialize to file:// if possible
authorBenjamin Otte <otte@redhat.com>
Wed, 14 Dec 2022 01:26:49 +0000 (02:26 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 14 Dec 2022 01:33:45 +0000 (02:33 +0100)
Try to get a native file:// URI instead of any other GVFS
scheme, for interoperability with apps only handling file:// URIs.

This is what GTK3 Nautilus and Thunar do, so apps should be tuned
for this behavior.

See also https://bugzilla.xfce.org/show_bug.cgi?id=13845

Fixes: #5422
gdk/gdkcontentserializer.c

index 2ffbbf5ae5eab18b956fcc22d60647f76a7ff63e..da9f668d8cfdb6b10095502ebcd712545555ec42 100644 (file)
@@ -795,6 +795,22 @@ file_serializer_finish (GObject      *source,
     gdk_content_serializer_return_success (serializer);
 }
 
+static char *
+file_get_native_uri (GFile *file)
+{
+  char *path;
+
+  path = g_file_get_path (file);
+  if (path != NULL)
+    {
+      char *uri = g_filename_to_uri (path, NULL, NULL);
+      g_free (path);
+      return uri;
+    }
+
+  return g_file_get_uri (file);
+}
+
 static void
 file_uri_serializer (GdkContentSerializer *serializer)
 {
@@ -811,7 +827,7 @@ file_uri_serializer (GdkContentSerializer *serializer)
       file = g_value_get_object (gdk_content_serializer_get_value (serializer));
       if (file)
         {
-          uri = g_file_get_uri (file);
+          uri = file_get_native_uri (file);
           g_string_append (str, uri);
           g_free (uri);
         }
@@ -827,7 +843,7 @@ file_uri_serializer (GdkContentSerializer *serializer)
 
       for (l = g_value_get_boxed (value); l; l = l->next)
         {
-          uri = g_file_get_uri (l->data);
+          uri = file_get_native_uri (l->data);
           g_string_append (str, uri);
           g_free (uri);
           g_string_append (str, "\r\n");