diff --git a/gtk/gtkgridview.c b/gtk/gtkgridview.c index 5e2d0791b7..a3d7a518c2 100644 --- a/gtk/gtkgridview.c +++ b/gtk/gtkgridview.c @@ -1282,6 +1282,32 @@ gtk_grid_view_select_item_action (GtkWidget *widget, gtk_grid_view_select_item (self, pos, modify, extend); } +static void +gtk_grid_view_select_all (GtkWidget *widget, + const char *action_name, + GVariant *parameter) +{ + GtkGridView *self = GTK_GRID_VIEW (widget); + GtkSelectionModel *selection_model; + + selection_model = gtk_list_item_manager_get_model (self->item_manager); + + gtk_selection_model_select_all (selection_model); +} + +static void +gtk_grid_view_unselect_all (GtkWidget *widget, + const char *action_name, + GVariant *parameter) +{ + GtkGridView *self = GTK_GRID_VIEW (widget); + GtkSelectionModel *selection_model; + + selection_model = gtk_list_item_manager_get_model (self->item_manager); + + gtk_selection_model_unselect_all (selection_model); +} + static void gtk_grid_view_compute_scroll_align (GtkGridView *self, GtkOrientation orientation, @@ -1586,6 +1612,28 @@ gtk_grid_view_class_init (GtkGridViewClass *klass) "(ubb)", gtk_grid_view_select_item_action); + /** + * GtkGridView|list.select-all: + * + * If the selection model supports it, select all items in the model. + * If not, do nothing. + */ + gtk_widget_class_install_action (widget_class, + "list.select-all", + NULL, + gtk_grid_view_select_all); + + /** + * GtkGridView|list.unselect-all: + * + * If the selection model supports it, unselect all items in the model. + * If not, do nothing. + */ + gtk_widget_class_install_action (widget_class, + "list.unselect-all", + NULL, + gtk_grid_view_unselect_all); + /** * GtkGridView|list.scroll-to-item: * @position: position of item to scroll to @@ -1598,6 +1646,12 @@ gtk_grid_view_class_init (GtkGridViewClass *klass) "u", gtk_grid_view_scroll_to_item); + gtk_widget_class_add_binding_action (widget_class, GDK_KEY_a, GDK_CONTROL_MASK, "list.select-all", NULL); + gtk_widget_class_add_binding_action (widget_class, GDK_KEY_slash, GDK_CONTROL_MASK, "list.select-all", NULL); + + gtk_widget_class_add_binding_action (widget_class, GDK_KEY_A, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "list.unselect-all", NULL); + gtk_widget_class_add_binding_action (widget_class, GDK_KEY_backslash, GDK_CONTROL_MASK, "list.unselect-all", NULL); + gtk_widget_class_set_css_name (widget_class, I_("flowbox")); }