From 265b1c2f5bb21b5e011715d9f31c9186b5b58c8a Mon Sep 17 00:00:00 2001 From: Simon Steinbeiss Date: Thu, 14 Jan 2021 15:59:40 +0100 Subject: [PATCH] settings: Hook up refresh rate --- src/settings-dialog.c | 57 ++++++++++++++++++++++++++++++++++++++++++ src/settings-dialog.ui | 35 +++++++++++++++++++++++++- 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/src/settings-dialog.c b/src/settings-dialog.c index 488ea0e..c4e908d 100644 --- a/src/settings-dialog.c +++ b/src/settings-dialog.c @@ -25,6 +25,11 @@ static void show_about_dialog (GtkWidget *widget, gpointer user_data); static GtkWidget *xtm_settings_dialog_new (GtkBuilder *builder, GtkWidget *parent_window); +typedef struct +{ + GtkWidget *combobox; + guint rate; +} XtmRefreshRate; static void button_toggled (GtkToggleButton *button, XtmSettings *settings) @@ -48,6 +53,57 @@ builder_bind_toggle_button (GtkBuilder *builder, gchar *widget_name, XtmSettings g_signal_connect (button, "toggled", G_CALLBACK (button_toggled), settings); } +static void +combobox_changed (GtkComboBox *combobox, XtmSettings *settings) +{ + GtkTreeModel *model; + GtkTreeIter iter; + GValue prop = { 0, }; + gint rate; + + gtk_combo_box_get_active_iter (combobox, &iter); + model = gtk_combo_box_get_model (combobox); + gtk_tree_model_get_value (model, &iter, 0, &prop); + rate = g_value_get_int (&prop); + g_object_set (settings, "refresh-rate", GUINT_TO_POINTER (rate), NULL); +} + +static gboolean +combobox_foreach (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer user_data) +{ + XtmRefreshRate *refresh_rate = user_data; + GValue prop = { 0, }; + + gtk_tree_model_get_value (model, iter, 0, &prop); + + if (g_value_get_int (&prop) == refresh_rate->rate) + { + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (refresh_rate->combobox), iter); + return TRUE; + } + + return FALSE; +} + +static void +builder_bind_combobox (GtkBuilder *builder, XtmSettings *settings) +{ + XtmRefreshRate *refresh_rate; + GtkTreeModel *model; + + refresh_rate = g_new0 (XtmRefreshRate, 1); + g_object_get (settings, "refresh-rate", &refresh_rate->rate, NULL); + + refresh_rate->combobox = GTK_WIDGET (gtk_builder_get_object (builder, "combobox-refresh-rate")); + model = gtk_combo_box_get_model (GTK_COMBO_BOX (refresh_rate->combobox)); + gtk_tree_model_foreach (model, combobox_foreach, refresh_rate); + g_object_set_data (G_OBJECT (refresh_rate->combobox), "setting-name", "refresh-rate"); + g_signal_connect (refresh_rate->combobox, "changed", G_CALLBACK (combobox_changed), settings); +} + static void show_about_dialog (GtkWidget *widget, gpointer user_data) { @@ -132,6 +188,7 @@ xtm_settings_dialog_new (GtkBuilder *builder, GtkWidget *parent_window) builder_bind_toggle_button (builder, "button-more-precision", settings, "more-precision"); builder_bind_toggle_button (builder, "button-process-tree", settings, "process-tree"); builder_bind_toggle_button (builder, "button-show-legend", settings, "show-legend"); + builder_bind_combobox (builder, settings); // Miscellaneous builder_bind_toggle_button (builder, "button-prompt-terminate-task", settings, "prompt-terminate-task"); builder_bind_toggle_button (builder, "button-show-status-icon", settings, "show-status-icon"); diff --git a/src/settings-dialog.ui b/src/settings-dialog.ui index 95ad560..0ef2f6e 100644 --- a/src/settings-dialog.ui +++ b/src/settings-dialog.ui @@ -18,11 +18,37 @@ False window-close-symbolic + + + + + + + + 500 + + + 750 + + + 1000 + + + 2000 + + + 5000 + + + 10000 + + + False Task Manager Settings org.xfce.taskmanager - dialog + normal False @@ -213,6 +239,13 @@ True False + liststore1 + + + + 0 + + False