summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Berla <corey@berla.me>2023-04-07 16:07:04 -0700
committerCorey Berla <corey@berla.me>2023-04-24 14:33:20 -0700
commit46f028bbd235f4c011ba07b9ea1da89bdbf95311 (patch)
tree7757f7675d5ee23a237519167a3570d59087cfa5
parent8a05559795473c437d65789d81f2cf3be38ef13e (diff)
downloadnautilus-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.c28
-rw-r--r--src/resources/style.css11
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;
}