Add gtk_widget_remove_css_classes_by_prefix() helper

This commit is contained in:
Geoffrey D. Bennett
2024-03-12 00:44:13 +10:30
parent 2b664c446b
commit 96b4ec8259
3 changed files with 16 additions and 11 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -3,6 +3,7 @@
#include <ctype.h>
#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)