From 82d6cd427538eab87c74a3296d12cb712dd6c390 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Tue, 2 Apr 2013 09:17:41 +0000 Subject: [PATCH] reorderable sensors list for the sensors pref dialog --- src/cfg.h | 1 - src/ui.c | 29 +++++++++++++++++++++++++++++ src/ui_sensorlist.c | 20 +------------------- src/ui_sensorpref.c | 5 ++++- 4 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/cfg.h b/src/cfg.h index f314424..ed77976 100644 --- a/src/cfg.h +++ b/src/cfg.h @@ -116,5 +116,4 @@ int config_get_slog_interval(); int config_get_sensor_position(const char *); void config_set_sensor_position(const char *, int); - #endif diff --git a/src/ui.c b/src/ui.c index 7c7af9f..bbb6cc2 100644 --- a/src/ui.c +++ b/src/ui.c @@ -16,6 +16,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA */ +#include + #include "cfg.h" #include "slog.h" #include "ui.h" @@ -326,3 +328,30 @@ void ui_window_show(struct ui_psensor *ui) ui_window_update(ui); gtk_window_present(GTK_WINDOW(ui->main_window)); } + +static int cmp_sensors(const void *p1, const void *p2) +{ + const struct psensor *s1, *s2; + int pos1, pos2; + + s1 = *(void **)p1; + s2 = *(void **)p2; + + pos1 = config_get_sensor_position(s1->id); + pos2 = config_get_sensor_position(s2->id); + + return pos1 - pos2; +} + +struct psensor **ui_get_sensors_ordered_by_position(struct ui_psensor *ui) +{ + struct psensor **result; + + result = psensor_list_copy(ui->sensors); + qsort(result, + psensor_list_size(result), + sizeof(struct psensor *), + cmp_sensors); + + return result; +} diff --git a/src/ui_sensorlist.c b/src/ui_sensorlist.c index 1933002..904d4f5 100644 --- a/src/ui_sensorlist.c +++ b/src/ui_sensorlist.c @@ -262,20 +262,6 @@ toggled_cbk(GtkCellRendererToggle *cell, gchar *path_str, gpointer data) gtk_tree_path_free(path); } -static int cmp_sensors(const void *p1, const void *p2) -{ - const struct psensor *s1, *s2; - int pos1, pos2; - - s1 = *(void **)p1; - s2 = *(void **)p2; - - pos1 = config_get_sensor_position(s1->id); - pos2 = config_get_sensor_position(s2->id); - - return pos1 - pos2; -} - void ui_sensorlist_create(struct ui_psensor *ui) { GtkListStore *store; @@ -340,11 +326,7 @@ void ui_sensorlist_create(struct ui_psensor *ui) renderer, "text", COL_EMPTY, NULL); - ordered_sensors = psensor_list_copy(ui->sensors); - qsort(ordered_sensors, - psensor_list_size(ordered_sensors), - sizeof(struct psensor *), - cmp_sensors); + ordered_sensors = ui_get_sensors_ordered_by_position(ui); store = ui->sensors_store; for (s_cur = ordered_sensors; *s_cur; s_cur++) { diff --git a/src/ui_sensorpref.c b/src/ui_sensorpref.c index 8c45eaf..a4077ca 100644 --- a/src/ui_sensorpref.c +++ b/src/ui_sensorpref.c @@ -433,6 +433,7 @@ void ui_sensorpref_dialog_run(struct psensor *sensor, struct ui_psensor *ui) struct cb_data cbdata; GtkTreeIter iter; struct sensor_pref *spref; + struct psensor **ordered_sensors; gboolean valid; GtkTreeModel *model; @@ -461,7 +462,8 @@ void ui_sensorpref_dialog_run(struct psensor *sensor, struct ui_psensor *ui) store = GTK_LIST_STORE(gtk_builder_get_object(builder, "sensors_liststore")); - for (s_cur = ui->sensors; *s_cur; s_cur++) { + ordered_sensors = ui_get_sensors_ordered_by_position(ui); + for (s_cur = ordered_sensors; *s_cur; s_cur++) { s = *s_cur; gtk_list_store_append(store, &iter); @@ -474,6 +476,7 @@ void ui_sensorpref_dialog_run(struct psensor *sensor, struct ui_psensor *ui) if (s == sensor) update_pref(spref, ui->config, builder); } + free(ordered_sensors); selection = gtk_tree_view_get_selection(w_sensors_list); g_signal_connect(selection, "changed", G_CALLBACK(on_changed), &cbdata); -- 2.7.4