From d31bd3380e64ea074c267d3e92ccdbb5c59e7e2d Mon Sep 17 00:00:00 2001 From: "Geoffrey D. Bennett" Date: Sun, 26 Nov 2023 22:57:52 +1030 Subject: [PATCH] Allow the routing window to be resized and give it scrollbars --- src/iface-mixer.c | 20 +++++++++++++++++++- src/window-routing.c | 3 +++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/iface-mixer.c b/src/iface-mixer.c index f2aab53..3ede5e1 100644 --- a/src/iface-mixer.c +++ b/src/iface-mixer.c @@ -429,6 +429,24 @@ static gboolean window_levels_close_request(GtkWindow *w, gpointer data) { return true; } +// wrap a scrolled window around the controls +static void create_scrollable_window(GtkWidget *window, GtkWidget *controls) { + GtkWidget *scrolled_window = gtk_scrolled_window_new(); + + gtk_scrolled_window_set_policy( + GTK_SCROLLED_WINDOW(scrolled_window), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC + ); + gtk_scrolled_window_set_child( + GTK_SCROLLED_WINDOW(scrolled_window), controls + ); + gtk_scrolled_window_set_propagate_natural_height(GTK_SCROLLED_WINDOW(scrolled_window), TRUE); + gtk_scrolled_window_set_propagate_natural_width(GTK_SCROLLED_WINDOW(scrolled_window), TRUE); + + gtk_window_set_child(GTK_WINDOW(window), scrolled_window); + gtk_window_set_resizable(GTK_WINDOW(window), TRUE); +} + GtkWidget *create_iface_mixer_main(struct alsa_card *card) { card->has_speaker_switching = !!get_elem_by_name(card->elems, "Speaker Switching Playback Enum"); @@ -445,7 +463,7 @@ GtkWidget *create_iface_mixer_main(struct alsa_card *card) { card, "Routing", G_CALLBACK(window_routing_close_request) ); - gtk_window_set_child(GTK_WINDOW(card->window_routing), routing_top); + create_scrollable_window(card->window_routing, routing_top); GtkWidget *mixer_top = create_mixer_controls(card); diff --git a/src/window-routing.c b/src/window-routing.c index 58cead8..838c3ac 100644 --- a/src/window-routing.c +++ b/src/window-routing.c @@ -256,6 +256,9 @@ static GtkWidget *make_preset_menu_button(struct alsa_card *card) { static void create_routing_grid(struct alsa_card *card) { GtkWidget *routing_grid = card->routing_grid = gtk_grid_new(); + gtk_widget_set_halign(routing_grid, GTK_ALIGN_CENTER); + gtk_widget_set_valign(routing_grid, GTK_ALIGN_CENTER); + GtkWidget *preset_menu_button = make_preset_menu_button(card); gtk_grid_attach( GTK_GRID(routing_grid), preset_menu_button, 0, 0, 1, 1