maplistmodel: Fix items-changed emission
authorMatthias Clasen <mclasen@redhat.com>
Thu, 14 Jul 2022 20:50:22 +0000 (16:50 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 14 Jul 2022 20:53:09 +0000 (16:53 -0400)
We were modifying the removed value before passing
it to the items-changed signal, so we always ended
up with removed == 0 in our signal emission, instead
of passing the original value on, as we should.

Pointed out in !4870

gtk/gtkmaplistmodel.c

index 5001367b9fb1732aa52521a5a19f374f3bfd1b52..e1cb0b1553903b6cc68410eee61a953369e6ff40 100644 (file)
@@ -220,6 +220,7 @@ gtk_map_list_model_items_changed_cb (GListModel      *model,
 {
   MapNode *node;
   guint start, end;
+  guint count;
 
   if (self->items == NULL)
     {
@@ -232,21 +233,22 @@ gtk_map_list_model_items_changed_cb (GListModel      *model,
   node = gtk_map_list_model_get_nth (self->items, position, &start);
   g_assert (start <= position);
 
-  while (removed > 0)
+  count = removed;
+  while (count > 0)
     {
       end = start + node->n_items;
-      if (start == position && end <= position + removed)
+      if (start == position && end <= position + count)
         {
           MapNode *next = gtk_rb_tree_node_get_next (node);
-          removed -= node->n_items;
+          count -= node->n_items;
           gtk_rb_tree_remove (self->items, node);
           node = next;
         }
       else
         {
-          if (end >= position + removed)
+          if (end >= position + count)
             {
-              node->n_items -= removed;
+              node->n_items -= count;
               removed = 0;
               gtk_rb_tree_node_mark_dirty (node);
             }
@@ -255,7 +257,7 @@ gtk_map_list_model_items_changed_cb (GListModel      *model,
               guint overlap = node->n_items - (position - start);
               node->n_items -= overlap;
               gtk_rb_tree_node_mark_dirty (node);
-              removed -= overlap;
+              count -= overlap;
               start = position;
               node = gtk_rb_tree_node_get_next (node);
             }