Check for attribute availability before accessing it
authorEmmanuele Bassi <ebassi@gnome.org>
Mon, 13 Mar 2023 11:49:50 +0000 (11:49 +0000)
committerEmmanuele Bassi <ebassi@gnome.org>
Mon, 13 Mar 2023 11:54:01 +0000 (11:54 +0000)
Starting from GLib 2.76, the standard attribute getters in the GFileInfo
object will warn if the attribute is unset, instead of silently bailing
out and returning a default value.

gtk/gtkfilechooserwidget.c
gtk/gtkfilesystemmodel.c
gtk/gtkpathbar.c

index 0496fd2f35e06dc9468eefdf82a902d0f20ccab5..ab531f7eb679bd2b57c32dee26506b18675ddf32 100644 (file)
@@ -4634,10 +4634,12 @@ show_and_select_files (GtkFileChooserWidget *impl,
       if (!_gtk_file_system_model_iter_is_visible (fsmodel, &iter))
         {
           GFileInfo *info = _gtk_file_system_model_get_info (fsmodel, &iter);
+          gboolean has_is_hidden = g_file_info_has_attribute (info, "standard::is-hidden");
+          gboolean has_is_backup = g_file_info_has_attribute (info, "standard::is-backup");
 
           if (!enabled_hidden &&
-              (g_file_info_get_is_hidden (info) ||
-               g_file_info_get_is_backup (info)))
+              ((has_is_hidden && g_file_info_get_is_hidden (info)) ||
+               (has_is_backup && g_file_info_get_is_backup (info))))
             {
               g_object_set (impl, "show-hidden", TRUE, NULL);
               enabled_hidden = TRUE;
index 0fa44536d9e8d1611b9400d690c27884f4994987..0309c747bd1df90791d9982cc8b64fd5ccd8f3a3 100644 (file)
@@ -442,16 +442,23 @@ node_should_be_filtered_out (GtkFileSystemModel *model, guint id)
 }
 
 static gboolean
-node_should_be_visible (GtkFileSystemModel *model, guint id, gboolean filtered_out)
+node_should_be_visible (GtkFileSystemModel *model,
+                        guint               id,
+                        gboolean            filtered_out)
 {
   FileModelNode *node = get_node (model, id);
+  gboolean has_is_hidden, has_is_backup;
   gboolean result;
 
   if (node->info == NULL)
     return FALSE;
 
+  has_is_hidden = g_file_info_has_attribute (node->info, "standard::is-hidden");
+  has_is_backup = g_file_info_has_attribute (node->info, "standard::is-backup");
+
   if (!model->show_hidden &&
-      (g_file_info_get_is_hidden (node->info) || g_file_info_get_is_backup (node->info)))
+      ((has_is_hidden && g_file_info_get_is_hidden (node->info)) ||
+       (has_is_backup && g_file_info_get_is_backup (node->info))))
     return FALSE;
 
   if (_gtk_file_info_consider_as_directory (node->info))
index 99d5282888095f560caca5ec221188bc2741d900..8b1608c2236747f61ca570ea62f6aa49dcca9fc7 100644 (file)
@@ -1762,7 +1762,8 @@ gtk_path_bar_get_info_callback (GCancellable *cancellable,
     }
 
   display_name = g_file_info_get_display_name (info);
-  is_hidden = g_file_info_get_is_hidden (info) || g_file_info_get_is_backup (info);
+  is_hidden = g_file_info_get_attribute_boolean (info, "standard::is-hidden") ||
+              g_file_info_get_attribute_boolean (info, "standard::is-backup");
 
   button_data = make_directory_button (file_info->path_bar, display_name,
                                        file_info->file,