filechooser: Select via action
authorBenjamin Otte <otte@redhat.com>
Wed, 29 Mar 2023 04:26:03 +0000 (06:26 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 29 Mar 2023 08:42:49 +0000 (10:42 +0200)
Don't fudge around poking through the listview, trying to get a model
and selecting it directly. Instead, use the proper way and activate the
"listitem.select" action.

gtk/gtkfilechoosercell.c

index 3e02d283028b4caae3eeba64e4798846abca8a38..8173bcb1d7f1af24b55d8c22cdd7c125c67ef0a7 100644 (file)
@@ -69,14 +69,12 @@ popup_menu (GtkFileChooserCell *self,
             double              y)
 {
   GtkWidget *widget = GTK_WIDGET (self);
-  GtkSelectionModel *model;
   GtkWidget *impl;
   graphene_point_t p;
 
-  impl = gtk_widget_get_ancestor (widget, GTK_TYPE_FILE_CHOOSER_WIDGET);
+  gtk_widget_activate_action (GTK_WIDGET (self), "listitem.select", "(bb)", FALSE, FALSE);
 
-  model = gtk_file_chooser_widget_get_selection_model (GTK_FILE_CHOOSER_WIDGET (impl));
-  gtk_selection_model_select_item (model, self->position, TRUE);
+  impl = gtk_widget_get_ancestor (widget, GTK_TYPE_FILE_CHOOSER_WIDGET);
 
   if (!gtk_widget_compute_point (widget, GTK_WIDGET (impl),
                                  &GRAPHENE_POINT_INIT (x, y), &p))
@@ -129,10 +127,9 @@ drag_prepare_cb (GtkDragSource *source,
   impl = GTK_FILE_CHOOSER_WIDGET (gtk_widget_get_ancestor (GTK_WIDGET (self),
                                                            GTK_TYPE_FILE_CHOOSER_WIDGET));
 
-  if (!self->selected)
+  if (self->list_item && !gtk_list_item_get_selected (self->list_item))
     {
-      gtk_selection_model_select_item (gtk_file_chooser_widget_get_selection_model (impl),
-                                       self->position, TRUE);
+      gtk_widget_activate_action (GTK_WIDGET (self), "listitem.select", "(bb)", FALSE, FALSE);
     }
 
   selection = gtk_file_chooser_widget_get_selected_files (impl);