[glib/gdbus-codegen-exporting: 1/3] gfile: Fallback to fast-content-type if content-type is not set



commit 5e1af07733e1133f60045c4a2164e2af40d3de7d
Author: Ondrej Holy <oholy redhat com>
Date:   Tue Apr 7 14:56:49 2020 +0200

    gfile: Fallback to fast-content-type if content-type is not set
    
    The G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE attribute doesn't have to be
    always set. See https://gitlab.gnome.org/GNOME/gvfs/-/merge_requests/68
    for more details. In that case, the g_file_query_default_handler function
    fails with the "No application is registered as handling this file" error.
    Let's fallback to the "standard::fast-content-type" attribute instead to
    fix issues when opening such files.
    
    https://gitlab.gnome.org/GNOME/nautilus/-/issues/1425

 gio/gfile.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/gio/gfile.c b/gio/gfile.c
index 4e6e39827..a2ded14ea 100644
--- a/gio/gfile.c
+++ b/gio/gfile.c
@@ -6839,7 +6839,8 @@ g_file_query_default_handler (GFile         *file,
     g_free (uri_scheme);
 
   info = g_file_query_info (file,
-                            G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+                            G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
+                            G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE,
                             0,
                             cancellable,
                             error);
@@ -6849,6 +6850,8 @@ g_file_query_default_handler (GFile         *file,
   appinfo = NULL;
 
   content_type = g_file_info_get_content_type (info);
+  if (content_type == NULL)
+    content_type = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE);
   if (content_type)
     {
       /* Don't use is_native(), as we want to support fuse paths if available */
@@ -6890,6 +6893,8 @@ query_default_handler_query_info_cb (GObject      *object,
     }
 
   content_type = g_file_info_get_content_type (info);
+  if (content_type == NULL)
+    content_type = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE);
   if (content_type)
     {
       char *path;
@@ -6960,7 +6965,8 @@ g_file_query_default_handler_async (GFile              *file,
     g_free (uri_scheme);
 
   g_file_query_info_async (file,
-                           G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+                           G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
+                           G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE,
                            0,
                            io_priority,
                            cancellable,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]