commit - a03dec105e0a4daf41a71e912d7e88183384ba73
commit + 518b125835bf3dfd068189334ffb193142de82bf
blob - 7dcf1a1aa8611b492a475b0429daf2f92034cff9
blob + 30f4d10fc468f13a572aaf08e5f8d59c8474007f
--- ctlitem.c
+++ ctlitem.c
gtk_widget_set_vexpand(gscale, TRUE);
gtk_scale_set_draw_value(GTK_SCALE(gscale), TRUE);
gtk_scale_set_format_value_func(GTK_SCALE(gscale), _format_percent, NULL, NULL);
- gtk_widget_set_size_request(gscale, -1, 100);
+ gtk_widget_set_size_request(gscale, -1, 150);
g_signal_connect(item, "notify::level", G_CALLBACK(_on_scale_value_changed), item);
GtkAdjustment *a = gtk_range_get_adjustment(GTK_RANGE(gscale));
item->binding = g_object_bind_property(item, "level", a, "value",
G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+
gtk_box_append(GTK_BOX(box), gscale);
+ gtk_widget_set_margin_top(box, 5);
+ gtk_widget_set_margin_start(box, 10);
+ gtk_widget_set_margin_bottom(box, 10);
+ gtk_widget_set_margin_end(box, 5);
free(label);
free(group);
blob - 9d5f9cf215218bfe88579e043a8e8eee844f6a68
blob + c7adf557a74cccb9218581c748d7f8a7aa2b5584
--- siomixer.c
+++ siomixer.c
struct info *nextent(struct info *, int);
void ondesc(void *, struct sioctl_desc *, int);
void onctl(void *, unsigned, unsigned);
+static GtkWidget *build_dropdown(void);
+static void activate (GtkApplication *, gpointer);
/*
* register a new knob/button, called from the poll() loop. this may be
sioctl_setval(s.hdl, siomixer_ctl_item_get_addr(item), 1);
}
-static void
-activate (GtkApplication *app, gpointer user_data)
+static GtkWidget *
+build_dropdown(void)
{
- GtkWidget *window;
- GtkWidget *vbox;
- GtkWidget *scroll;
- GtkWidget *flowbox;
-
GtkWidget *frame;
GtkWidget *hbox;
GtkWidget *label;
GtkWidget *dropdown;
+ SiomixerCtlItem *item;
+ guint i, n_items;
- window = gtk_application_window_new (app);
- gtk_window_set_title(GTK_WINDOW (window), "Mixer");
- gtk_window_set_default_size(GTK_WINDOW (window), -1, 400);
-
+ /* Device selection */
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
- gtk_widget_set_hexpand(hbox, FALSE);
gtk_widget_set_margin_top(hbox, 10);
gtk_widget_set_margin_start(hbox, 10);
gtk_widget_set_margin_bottom(hbox, 10);
GtkFilterListModel *dropdown_filter_model =
gtk_filter_list_model_new(G_LIST_MODEL(s.controls), s.dropdownfilter);
dropdown = gtk_drop_down_new(G_LIST_MODEL(dropdown_filter_model), NULL);
- gtk_widget_set_hexpand(dropdown, FALSE);
+ gtk_widget_set_hexpand(dropdown, TRUE);
gtk_drop_down_set_expression(GTK_DROP_DOWN(dropdown),
gtk_property_expression_new(SIOMIXER_TYPE_CTL_ITEM, NULL, "device"));
gtk_widget_set_margin_top(dropdown, 5);
gtk_widget_set_margin_start(dropdown, 10);
gtk_widget_set_margin_bottom(dropdown, 5);
gtk_widget_set_margin_end(dropdown, 10);
- /* XXX: Find and highlight selected */
- g_signal_connect(dropdown, "notify::selected-item", G_CALLBACK(_on_selected_changed), NULL);
gtk_box_append(GTK_BOX(hbox), dropdown);
gtk_frame_set_child(GTK_FRAME(frame), hbox);
+ /* Find and highlight selected */
+ n_items = g_list_model_get_n_items(G_LIST_MODEL(dropdown_filter_model));
+ for (i = 0; i < n_items; i++) {
+ item = g_list_model_get_item(G_LIST_MODEL(dropdown_filter_model), i);
+ if (siomixer_ctl_item_get_level(item) == 1)
+ break;
+ }
+ if (i == n_items)
+ g_assert("Selected device not found");
+
+ gtk_drop_down_set_selected(GTK_DROP_DOWN(dropdown), i);
+
+ /* Register callback for update */
+ g_signal_connect(dropdown, "notify::selected-item",
+ G_CALLBACK(_on_selected_changed), NULL);
+
+ return frame;
+}
+
+static void
+activate (GtkApplication *app, gpointer user_data)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *scroll;
+ GtkWidget *flowbox;
+ GtkWidget *dropdown;
+
+ window = gtk_application_window_new (app);
+ gtk_window_set_title(GTK_WINDOW (window), "Mixer");
+ gtk_window_set_default_size(GTK_WINDOW (window), 500, 300);
+
+ dropdown = build_dropdown();
+
+ /* Volume scales */
flowbox = gtk_flow_box_new();
GtkFilterListModel *filter_model =
gtk_filter_list_model_new(G_LIST_MODEL(s.controls), s.scalefilter);
gtk_flow_box_bind_model(GTK_FLOW_BOX(flowbox), G_LIST_MODEL(filter_model),
siomixer_ctl_item_to_widget, NULL, NULL);
-
gtk_flow_box_set_selection_mode(GTK_FLOW_BOX(flowbox), GTK_SELECTION_NONE);
+ gtk_widget_set_vexpand(flowbox, TRUE);
+ gtk_widget_set_halign(flowbox, GTK_ALIGN_CENTER);
scroll = gtk_scrolled_window_new();
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scroll), flowbox);
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
- gtk_box_append(GTK_BOX(vbox), frame);
+ gtk_box_append(GTK_BOX(vbox), dropdown);
gtk_box_append(GTK_BOX(vbox), scroll);
- gtk_widget_set_size_request(vbox, -1, 400);
+ gtk_widget_set_size_request(vbox, 500, 300);
gtk_window_set_child(GTK_WINDOW(window), vbox);
gtk_window_present(GTK_WINDOW (window));