Remove widgets from struct alsa_elem and add data to callbacks

Rather than having widget/widget2/widget_callback fields in the struct
alsa_elem, have a list of callbacks and allow private data to be
passed to callbacks.
This commit is contained in:
Geoffrey D. Bennett
2023-12-03 04:53:34 +10:30
parent d56a1d34ff
commit 47034d7901
11 changed files with 222 additions and 126 deletions

View File

@@ -642,8 +642,7 @@ static void setup_src_drag(struct routing_src *r_src) {
}
static void setup_snk_drag(struct routing_snk *r_snk) {
struct alsa_elem *elem = r_snk->elem;
GtkWidget *box = elem->widget;
GtkWidget *box = r_snk->box_widget;
// handle drags on the box
GtkDragSource *source = gtk_drag_source_new();
@@ -670,7 +669,7 @@ static void setup_snk_drag(struct routing_snk *r_snk) {
// set the box as a drop target
GtkDropTarget *dest = gtk_drop_target_new(G_TYPE_INT, GDK_ACTION_COPY);
gtk_widget_add_controller(box, GTK_EVENT_CONTROLLER(dest));
g_signal_connect(dest, "drop", G_CALLBACK(dropped_on_snk), elem);
g_signal_connect(dest, "drop", G_CALLBACK(dropped_on_snk), r_snk->elem);
g_signal_connect(dest, "accept", G_CALLBACK(snk_drop_accept), r_snk);
g_signal_connect(dest, "enter", G_CALLBACK(snk_drop_enter), r_snk);
g_signal_connect(dest, "leave", G_CALLBACK(snk_drop_leave), r_snk);
@@ -747,11 +746,11 @@ static void make_snk_routing_widget(
struct alsa_elem *elem = r_snk->elem;
// create a box, a "socket", and a label
GtkWidget *box = elem->widget = gtk_box_new(orientation, 5);
GtkWidget *box = r_snk->box_widget = gtk_box_new(orientation, 5);
gtk_widget_add_css_class(box, "route-label");
GtkWidget *label = gtk_label_new(name);
gtk_box_append(GTK_BOX(box), label);
GtkWidget *socket = elem->widget2 = make_socket_widget();
GtkWidget *socket = r_snk->socket_widget = make_socket_widget();
if (orientation == GTK_ORIENTATION_VERTICAL) {
gtk_box_append(GTK_BOX(box), socket);
gtk_widget_set_margin_start(box, 5);
@@ -777,7 +776,7 @@ static void make_snk_routing_widget(
setup_snk_drag(r_snk);
}
static void routing_updated(struct alsa_elem *elem) {
static void routing_updated(struct alsa_elem *elem, void *data) {
struct alsa_card *card = elem->card;
update_mixer_labels(card);
@@ -797,7 +796,7 @@ static void make_routing_alsa_elem(struct routing_snk *r_snk) {
snprintf(name, 10, "%d", elem->lr_num);
make_snk_routing_widget(r_snk, name, GTK_ORIENTATION_VERTICAL);
gtk_grid_attach(
GTK_GRID(card->routing_dsp_in_grid), elem->widget,
GTK_GRID(card->routing_dsp_in_grid), r_snk->box_widget,
r_snk->port_num + 1, 0, 1, 1
);
@@ -810,7 +809,7 @@ static void make_routing_alsa_elem(struct routing_snk *r_snk) {
snprintf(name, 10, "%d", elem->lr_num);
make_snk_routing_widget(r_snk, name, GTK_ORIENTATION_VERTICAL);
gtk_grid_attach(
GTK_GRID(card->routing_mixer_in_grid), elem->widget,
GTK_GRID(card->routing_mixer_in_grid), r_snk->box_widget,
r_snk->port_num + 1, 0, 1, 1
);
@@ -828,7 +827,7 @@ static void make_routing_alsa_elem(struct routing_snk *r_snk) {
free(name);
gtk_grid_attach(
GTK_GRID(card->routing_pcm_out_grid), elem->widget,
GTK_GRID(card->routing_pcm_out_grid), r_snk->box_widget,
0, r_snk->port_num + 1, 1, 1
);
@@ -848,14 +847,14 @@ static void make_routing_alsa_elem(struct routing_snk *r_snk) {
free(name);
gtk_grid_attach(
GTK_GRID(card->routing_hw_out_grid), elem->widget,
GTK_GRID(card->routing_hw_out_grid), r_snk->box_widget,
0, r_snk->port_num + 1, 1, 1
);
} else {
printf("invalid port category %d\n", r_snk->port_category);
}
elem->widget_callback = routing_updated;
alsa_elem_add_callback(elem, routing_updated, NULL);
}
static void add_routing_widgets(