diff options
author | Corey Berla <corey@berla.me> | 2023-04-07 16:07:04 -0700 |
---|---|---|
committer | Corey Berla <corey@berla.me> | 2023-04-24 14:33:20 -0700 |
commit | 46f028bbd235f4c011ba07b9ea1da89bdbf95311 (patch) | |
tree | 7757f7675d5ee23a237519167a3570d59087cfa5 | |
parent | 8a05559795473c437d65789d81f2cf3be38ef13e (diff) | |
download | nautilus-wip/corey/focus-tab-behavior.tar.gz |
star-cell: Make the star button in column view a focusable buttonwip/corey/focus-tab-behavior
Now that we are using tab-behavior, we'll be able to tab to the star
to star items in an accessible way. The current star is a GtkImage
which doesn't deal well with what are are trying to do (it doesn't
even show the focus ring). Switch to a GtkButton which automatically
will handle click and activate.
-rw-r--r-- | src/nautilus-star-cell.c | 28 | ||||
-rw-r--r-- | src/resources/style.css | 11 |
2 files changed, 17 insertions, 22 deletions
diff --git a/src/nautilus-star-cell.c b/src/nautilus-star-cell.c index ed6969f21..6e7e687cd 100644 --- a/src/nautilus-star-cell.c +++ b/src/nautilus-star-cell.c @@ -13,19 +13,14 @@ struct _NautilusStarCell GSignalGroup *item_signal_group; - GtkImage *star; + GtkButton *star; }; G_DEFINE_TYPE (NautilusStarCell, nautilus_star_cell, NAUTILUS_TYPE_VIEW_CELL) static void -on_star_click_released (GtkGestureClick *gesture, - gint n_press, - gdouble x, - gdouble y, - gpointer user_data) +toggle_star (NautilusStarCell *self) { - NautilusStarCell *self = user_data; NautilusTagManager *tag_manager = nautilus_tag_manager_get (); g_autoptr (NautilusViewItem) item = NULL; NautilusFile *file; @@ -54,12 +49,10 @@ on_star_click_released (GtkGestureClick *gesture, NULL); gtk_widget_add_css_class (GTK_WIDGET (self->star), "added"); } - - gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); } static void -update_star (GtkImage *star, +update_star (GtkButton *star, NautilusFile *file) { gboolean is_starred; @@ -71,7 +64,7 @@ update_star (GtkImage *star, is_starred = nautilus_tag_manager_file_is_starred (nautilus_tag_manager_get (), file_uri); - gtk_image_set_from_icon_name (star, is_starred ? "starred-symbolic" : "non-starred-symbolic"); + gtk_button_set_icon_name (star, is_starred ? "starred-symbolic" : "non-starred-symbolic"); } static void @@ -113,22 +106,19 @@ static void nautilus_star_cell_init (NautilusStarCell *self) { GtkWidget *star; - GtkGesture *gesture; /* Create star icon */ - star = gtk_image_new (); + star = GTK_WIDGET (gtk_button_new ()); gtk_widget_set_halign (star, GTK_ALIGN_END); gtk_widget_set_valign (star, GTK_ALIGN_CENTER); gtk_widget_add_css_class (star, "dim-label"); gtk_widget_add_css_class (star, "star"); + gtk_widget_add_css_class (star, "flat"); + gtk_widget_add_css_class (star, "circular"); adw_bin_set_child (ADW_BIN (self), star); - self->star = GTK_IMAGE (star); + self->star = GTK_BUTTON (star); - /* Make it clickable */ - gesture = gtk_gesture_click_new (); - gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_PRIMARY); - g_signal_connect (gesture, "released", G_CALLBACK (on_star_click_released), self); - gtk_widget_add_controller (star, GTK_EVENT_CONTROLLER (gesture)); + g_signal_connect_swapped (self->star, "clicked", G_CALLBACK (toggle_star), self); /* Update on tag changes */ g_signal_connect_object (nautilus_tag_manager_get (), "starred-changed", diff --git a/src/resources/style.css b/src/resources/style.css index d86e03988..1ea07a5a0 100644 --- a/src/resources/style.css +++ b/src/resources/style.css @@ -208,7 +208,12 @@ padding-bottom: 3px; } -.nautilus-list-view:not(.compact) image.star { +.nautilus-list-view button.star { + min-height: 0px; + min-width: 0px; +} + +.nautilus-list-view:not(.compact) button.star { padding: 6px; } @@ -249,7 +254,7 @@ opacity: 0.55; } -.view image.star:hover { +.view button.star:hover { opacity: 1; } @@ -258,7 +263,7 @@ to {} } -.view image.star.added { +.view button.star.added image { animation: rotate_star 0.4s ease; } |