filesystemmodel: Emit items-changed when modifying attributes
authorOlivier CrĂȘte <olivier.crete@ocrete.ca>
Sat, 22 Apr 2023 05:54:57 +0000 (05:54 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 22 Apr 2023 06:44:10 +0000 (02:44 -0400)
(cherry picked from commit 0ce6bc677e339b2af213377773e184674cb45c87)

gtk/gtkfilesystemmodel.c

index 2ff527b7b4c9f63e54842b8ca98b9567d7021d86..6dca1cb999cf549bb0921d0615a9043dc2ce6ab8 100644 (file)
@@ -384,6 +384,7 @@ gtk_file_system_model_refilter_all (GtkFileSystemModel *model)
   for (i = 0; i < model->files->len; i++)
     node_compute_visibility_and_filters (model, i);
 
+  g_list_model_items_changed (G_LIST_MODEL (model), 0, model->files->len, model->files->len);
   model->filter_on_thaw = FALSE;
   thaw_updates (model);
 }
@@ -408,6 +409,7 @@ thaw_updates (GtkFileSystemModel *model)
   if (stuff_added)
     {
       guint i;
+      guint changed_idx = G_MAXUINT;
 
       for (i = 0; i < model->files->len; i++)
         {
@@ -415,9 +417,17 @@ thaw_updates (GtkFileSystemModel *model)
 
           if (!node->frozen_add)
             continue;
+
           node->frozen_add = FALSE;
           node_compute_visibility_and_filters (model, i);
+          if (changed_idx == G_MAXUINT)
+            changed_idx = i;
         }
+
+      if (changed_idx != G_MAXUINT)
+        g_list_model_items_changed (G_LIST_MODEL (model), changed_idx,
+                                    model->files->len - changed_idx,
+                                    model->files->len - changed_idx);
     }
 }
 
@@ -448,9 +458,10 @@ add_file (GtkFileSystemModel *model,
   position = model->files->len - 1;
 
   if (!model->frozen)
-    node_compute_visibility_and_filters (model, position);
-
-  g_list_model_items_changed (G_LIST_MODEL (model), position, 0, 1);
+    {
+      node_compute_visibility_and_filters (model, position);
+      g_list_model_items_changed (G_LIST_MODEL (model), position, 0, 1);
+    }
 }
 
 static void