GTK4 SingleSelection: selection-changed signal is not triggered if selection is deleted from underlying model
Steps to reproduce
Using a slightly modified version of the file list demo:
diff --git a/demos/gtk-demo/listview_filebrowser.c b/demos/gtk-demo/listview_filebrowser.c
index e73ad41a0d..0c3a55a841 100644
--- a/demos/gtk-demo/listview_filebrowser.c
+++ b/demos/gtk-demo/listview_filebrowser.c
@@ -33,6 +33,10 @@ enum {
N_PROPS
};
+static void selection_changed(GtkWidget *widget, gpointer data) {
+ g_print("selection changed\n");
+}
+
#define FILE_BROWSER_TYPE_VIEW (file_browser_view_get_type ())
G_MODULE_EXPORT
G_DECLARE_FINAL_TYPE (FileBrowserView, file_browser_view, FILE_BROWSER, VIEW, GObject);
@@ -245,6 +249,7 @@ do_listview_filebrowser (GtkWidget *do_widget)
GFile *file;
char *cwd;
GtkCssProvider *provider;
+ GtkSingleSelection *single_selection;
provider = gtk_css_provider_new ();
gtk_css_provider_load_from_resource (provider, "/listview_filebrowser/listview_filebrowser.css");
@@ -267,6 +272,10 @@ do_listview_filebrowser (GtkWidget *do_widget)
gtk_directory_list_set_file (dirlist, file);
g_object_unref (file);
+ single_selection = GTK_SINGLE_SELECTION(gtk_builder_get_object(builder, "selection_model"));
+ g_signal_connect(single_selection, "selection-changed",
+ G_CALLBACK(selection_changed), NULL);
+
/* grab focus in the view */
view = GTK_WIDGET (gtk_builder_get_object (builder, "view"));
gtk_widget_grab_focus (view);
-
touch foo
in the directory that you will launch the directory view in. - Launch the demo and select
foo
in the directory view (notice that "selection changed" is printed). -
rm foo
.
Current behavior
The view is updated to remove the selection and the entry for foo
, but no "selection changed" is printed because the selection-changed
callback is not triggered.
Expected outcome
I expected the selection_changed
callback to be triggered, since deleting the file caused the selection to disappear.
Version information
commit 6bd96522e87682d48d9f1218050cff9f7b0bb3ae
- Arch Linux
- Default build options
Additional information
Edited by Andy Russell