From bde3b2615d9086cf3b739b4d669701690557e85f Mon Sep 17 00:00:00 2001 From: "Geoffrey D. Bennett" Date: Tue, 12 Mar 2024 00:44:13 +1030 Subject: [PATCH] Add gtk_widget_remove_css_classes_by_prefix() helper --- src/gtkhelper.c | 13 +++++++++++++ src/gtkhelper.h | 1 + src/widget-drop-down.c | 13 ++----------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/gtkhelper.c b/src/gtkhelper.c index 287e486..a0c54c0 100644 --- a/src/gtkhelper.c +++ b/src/gtkhelper.c @@ -24,3 +24,16 @@ void gtk_grid_set_spacing(GtkGrid *grid, int spacing) { gtk_grid_set_row_spacing(grid, spacing); gtk_grid_set_column_spacing(grid, spacing); } + +void gtk_widget_remove_css_classes_by_prefix( + GtkWidget *w, + const char *prefix +) { + char **classes = gtk_widget_get_css_classes(w); + + for (char **i = classes; *i != NULL; i++) + if (strncmp(*i, prefix, strlen(prefix)) == 0) + gtk_widget_remove_css_class(w, *i); + + g_strfreev(classes); +} diff --git a/src/gtkhelper.h b/src/gtkhelper.h index 1959306..407e67c 100644 --- a/src/gtkhelper.h +++ b/src/gtkhelper.h @@ -9,3 +9,4 @@ void gtk_widget_set_margin(GtkWidget *w, int margin); void gtk_widget_set_expand(GtkWidget *w, gboolean expand); void gtk_widget_set_align(GtkWidget *w, GtkAlign x, GtkAlign y); void gtk_grid_set_spacing(GtkGrid *grid, int spacing); +void gtk_widget_remove_css_classes_by_prefix(GtkWidget *w, const char *prefix); diff --git a/src/widget-drop-down.c b/src/widget-drop-down.c index af873dd..1d83f9b 100644 --- a/src/widget-drop-down.c +++ b/src/widget-drop-down.c @@ -3,6 +3,7 @@ #include +#include "gtkhelper.h" #include "widget-drop-down.h" struct drop_down { @@ -14,16 +15,6 @@ struct drop_down { int fixed_text; }; -static void remove_selected_classes(GtkWidget *widget) { - char **classes = gtk_widget_get_css_classes(widget); - - for (char **i = classes; *i != NULL; i++) - if (strncmp(*i, "selected-", 9) == 0) - gtk_widget_remove_css_class(widget, *i); - - g_strfreev(classes); -} - static void sanitise_class_name(char *s) { char *dst = s; @@ -120,7 +111,7 @@ static void drop_down_updated( int value = alsa_get_elem_value(elem); gtk_single_selection_set_selected(data->selection, value); - remove_selected_classes(data->button); + gtk_widget_remove_css_classes_by_prefix(data->button, "selected-"); add_class(data->button, alsa_get_item_name(elem, value)); if (data->fixed_text)