[gtk/gbsneto/filechooser-column-view: 69/82] filechooserwidget: Use GListModel API for post-renaming selection




commit ac9b12564f6fc89b600feadb9f4b6e290ce4a67d
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Mon Oct 10 11:28:50 2022 -0300

    filechooserwidget: Use GListModel API for post-renaming selection

 gtk/gtkfilechooserwidget.c | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)
---
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index 43359779e8..fefe71d1b6 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -3692,19 +3692,28 @@ browse_files_model_finished_loading_cb (GtkFileSystemModel   *model,
 /* Callback used when file system model adds or updates a file.
  * We detect here when a new renamed file appears and reveal it */
 static void
-browse_files_model_row_changed_cb (GtkTreeModel         *model,
-                                   GtkTreePath          *path,
-                                   GtkTreeIter          *iter,
-                                   GtkFileChooserWidget *impl)
+browse_files_model_items_changed_cb (GListModel           *model,
+                                     guint                 position,
+                                     guint                 removed,
+                                     guint                 added,
+                                     GtkFileChooserWidget *impl)
 {
-  GFile *file;
-  GSList files;
+  if (!impl->renamed_file)
+    return;
 
-  if (impl->renamed_file)
+  for (guint i = 0; i < added; i++)
     {
-      gtk_tree_model_get (model, iter, MODEL_COL_FILE, &file, -1);
+      GFileInfo *info;
+      GFile *file;
+
+      info = g_list_model_get_item (model, position + i);
+      file = _gtk_file_info_get_file (info);
+      g_clear_object (&info);
+
       if (g_file_equal (impl->renamed_file, file))
         {
+          GSList files;
+
           g_clear_object (&impl->renamed_file);
 
           files.data = (gpointer) file;
@@ -3712,8 +3721,6 @@ browse_files_model_row_changed_cb (GtkTreeModel         *model,
 
           show_and_select_files (impl, &files);
         }
-
-      g_object_unref (file);
     }
 }
 
@@ -4033,8 +4040,8 @@ set_list_model (GtkFileChooserWidget  *impl,
   g_signal_connect (impl->browse_files_model, "finished-loading",
                     G_CALLBACK (browse_files_model_finished_loading_cb), impl);
 
-  g_signal_connect (impl->browse_files_model, "row-changed",
-                    G_CALLBACK (browse_files_model_row_changed_cb), impl);
+  g_signal_connect (impl->selection_model, "items-changed",
+                    G_CALLBACK (browse_files_model_items_changed_cb), impl);
 
   _gtk_file_system_model_set_filter (impl->browse_files_model, impl->current_filter);
 


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