From: Jean-Philippe Orsini Date: Wed, 4 May 2011 07:22:36 +0000 (+0000) Subject: code cleanup X-Git-Tag: v0.8.0.5~786 X-Git-Url: https://git.wpitchoune.net/gitweb/?p=psensor.git;a=commitdiff_plain;h=faec1b967798dae821ace41fb45fe8df42e4b9cd code cleanup avoid recreation of the sensorlist widget when its position is changed --- diff --git a/po/Makefile.in b/po/Makefile.in index 78af544..120519a 100644 --- a/po/Makefile.in +++ b/po/Makefile.in @@ -21,7 +21,7 @@ srcdir = . top_srcdir = .. -prefix = /usr/local +prefix = /home/jporsini/tmp exec_prefix = ${prefix} datarootdir = ${prefix}/share datadir = ${datarootdir} diff --git a/src/ui.c b/src/ui.c index 9a4195f..696a2e1 100644 --- a/src/ui.c +++ b/src/ui.c @@ -148,17 +148,22 @@ static void menu_bar_show(unsigned int show, struct ui_psensor *ui) void ui_window_update(struct ui_psensor *ui) { struct config *cfg; - GtkWidget *w_sensorlist; + int init = 1; cfg = ui->config; if (ui->sensor_box) { - ui_sensorlist_create_widget(ui->ui_sensorlist); + g_object_ref(GTK_WIDGET(ui->ui_sensorlist->widget)); + + gtk_container_remove(GTK_CONTAINER(ui->sensor_box), + ui->ui_sensorlist->widget); gtk_container_remove(GTK_CONTAINER(ui->main_box), ui->sensor_box); ui->w_graph = ui_graph_create(ui); + + init = 0; } if (cfg->sensorlist_position == SENSORLIST_POSITION_RIGHT @@ -167,12 +172,6 @@ void ui_window_update(struct ui_psensor *ui) else ui->sensor_box = gtk_vpaned_new(); - w_sensorlist = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(w_sensorlist), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_container_add(GTK_CONTAINER(w_sensorlist), - ui->ui_sensorlist->widget); - gtk_box_pack_end(GTK_BOX(ui->main_box), ui->sensor_box, TRUE, TRUE, 2); if (cfg->sensorlist_position == SENSORLIST_POSITION_RIGHT @@ -180,14 +179,17 @@ void ui_window_update(struct ui_psensor *ui) gtk_paned_pack1(GTK_PANED(ui->sensor_box), GTK_WIDGET(ui->w_graph), TRUE, TRUE); gtk_paned_pack2(GTK_PANED(ui->sensor_box), - w_sensorlist, FALSE, TRUE); + ui->ui_sensorlist->widget, FALSE, TRUE); } else { gtk_paned_pack1(GTK_PANED(ui->sensor_box), - w_sensorlist, FALSE, TRUE); + ui->ui_sensorlist->widget, FALSE, TRUE); gtk_paned_pack2(GTK_PANED(ui->sensor_box), GTK_WIDGET(ui->w_graph), TRUE, TRUE); } + if (!init) + g_object_unref(GTK_WIDGET(ui->ui_sensorlist->widget)); + gtk_widget_show_all(ui->sensor_box); if (cfg->menu_bar_disabled) diff --git a/src/ui_sensorlist.c b/src/ui_sensorlist.c index e666421..c036bc9 100644 --- a/src/ui_sensorlist.c +++ b/src/ui_sensorlist.c @@ -59,7 +59,7 @@ void ui_sensorlist_update(struct ui_sensorlist *list) { GtkTreeIter iter; GtkTreeModel *model - = gtk_tree_view_get_model(GTK_TREE_VIEW(list->widget)); + = gtk_tree_view_get_model(list->treeview); gboolean valid = gtk_tree_model_get_iter_first(model, &iter); struct psensor **sensor = list->sensors; @@ -142,7 +142,7 @@ void ui_sensorlist_update_sensors_preferences(struct ui_sensorlist *list) { GtkTreeIter iter; GtkTreeModel *model - = gtk_tree_view_get_model(GTK_TREE_VIEW(list->widget)); + = gtk_tree_view_get_model(list->treeview); gboolean valid = gtk_tree_model_get_iter_first(model, &iter); struct psensor **sensor = list->sensors; @@ -172,7 +172,7 @@ void ui_sensorlist_update_sensors_preferences(struct ui_sensorlist *list) } } -static void cb_sensor_settings_activated(GtkWidget *menu_item, gpointer data) +static void on_preferences_activated(GtkWidget *menu_item, gpointer data) { struct cb_data *cb_data = data; struct psensor *sensor = cb_data->sensor; @@ -290,19 +290,17 @@ static GtkWidget *create_sensor_popup(struct ui_sensorlist *ui_sensorlist, g_signal_connect(item, "activate", - G_CALLBACK(cb_sensor_settings_activated), data); + G_CALLBACK(on_preferences_activated), data); gtk_widget_show_all(menu); return menu; } -static int -cb_sensor_line_clicked(GtkWidget *widget, - GdkEventButton *event, gpointer data) +static int on_clicked(GtkWidget *widget, GdkEventButton *event, gpointer data) { struct ui_sensorlist *list = (struct ui_sensorlist *)data; - GtkTreeView *view = GTK_TREE_VIEW(list->widget); + GtkTreeView *view = list->treeview; struct psensor *sensor = get_sensor_at_pos(view, event->x, @@ -334,12 +332,11 @@ cb_sensor_line_clicked(GtkWidget *widget, } static void -ui_sensorlist_on_toggled(GtkCellRendererToggle *cell, - gchar *path_str, gpointer data) +on_toggled(GtkCellRendererToggle *cell, gchar *path_str, gpointer data) { struct ui_sensorlist *list = (struct ui_sensorlist *)data; GtkTreeModel *model - = gtk_tree_view_get_model(GTK_TREE_VIEW(list->widget)); + = gtk_tree_view_get_model(list->treeview); GtkTreeIter iter; GtkTreePath *path = gtk_tree_path_new_from_string(path_str); gboolean fixed; @@ -366,14 +363,11 @@ ui_sensorlist_on_toggled(GtkCellRendererToggle *cell, gtk_tree_path_free(path); } -void ui_sensorlist_create_widget(struct ui_sensorlist *ui) +static void create_widget(struct ui_sensorlist *ui) { GtkListStore *store; GtkCellRenderer *renderer; - struct psensor **sensor_cur; - struct psensor **sensors; - - sensors = ui->sensors; + struct psensor **s_cur; store = gtk_list_store_new(COLS_COUNT, G_TYPE_STRING, @@ -384,43 +378,39 @@ void ui_sensorlist_create_widget(struct ui_sensorlist *ui) G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING); - if (ui->widget) - gtk_widget_destroy(ui->widget); - - ui->widget = - GTK_WIDGET(gtk_tree_view_new_with_model(GTK_TREE_MODEL(store))); + ui->treeview = GTK_TREE_VIEW + (gtk_tree_view_new_with_model(GTK_TREE_MODEL(store))); - gtk_tree_selection_set_mode(gtk_tree_view_get_selection - (GTK_TREE_VIEW(ui->widget)), + gtk_tree_selection_set_mode(gtk_tree_view_get_selection(ui->treeview), GTK_SELECTION_NONE); renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(ui->widget), + gtk_tree_view_insert_column_with_attributes(ui->treeview, -1, _("Sensor"), renderer, "text", COL_NAME, NULL); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(ui->widget), + gtk_tree_view_insert_column_with_attributes(ui->treeview, -1, _("Current"), renderer, "text", COL_TEMP, NULL); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(ui->widget), + gtk_tree_view_insert_column_with_attributes(ui->treeview, -1, _("Min"), renderer, "text", COL_TEMP_MIN, NULL); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(ui->widget), + gtk_tree_view_insert_column_with_attributes(ui->treeview, -1, _("Max"), renderer, "text", COL_TEMP_MAX, NULL); renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(ui->widget), + gtk_tree_view_insert_column_with_attributes(ui->treeview, -1, _("Color"), renderer, @@ -428,52 +418,57 @@ void ui_sensorlist_create_widget(struct ui_sensorlist *ui) "background", COL_COLOR_STR, NULL); - g_signal_connect(ui->widget, - "button-press-event", - (GCallback) cb_sensor_line_clicked, ui); + g_signal_connect(ui->treeview, + "button-press-event", (GCallback) on_clicked, ui); renderer = gtk_cell_renderer_toggle_new(); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(ui->widget), + gtk_tree_view_insert_column_with_attributes(ui->treeview, -1, _("Enabled"), renderer, "active", COL_ENABLED, NULL); - g_signal_connect(G_OBJECT(renderer), "toggled", - (GCallback) ui_sensorlist_on_toggled, ui); + g_signal_connect(G_OBJECT(renderer), + "toggled", (GCallback) on_toggled, ui); renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(ui->widget), + gtk_tree_view_insert_column_with_attributes(ui->treeview, -1, "", renderer, "text", COL_EMPTY, NULL); - sensor_cur = sensors; - while (*sensor_cur) { + s_cur = ui->sensors; + while (*s_cur) { GtkTreeIter iter; GdkColor color; gchar *scolor; + struct psensor *s = *s_cur; - color.red = (*sensor_cur)->color->red; - color.green = (*sensor_cur)->color->green; - color.blue = (*sensor_cur)->color->blue; + color.red = s->color->red; + color.green = s->color->green; + color.blue = s->color->blue; scolor = gdk_color_to_string(&color); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, - COL_NAME, (*sensor_cur)->name, + COL_NAME, s->name, COL_TEMP, _("N/A"), COL_TEMP_MIN, _("N/A"), COL_TEMP_MAX, _("N/A"), COL_COLOR_STR, scolor, - COL_ENABLED, (*sensor_cur)->enabled, -1); + COL_ENABLED, s->enabled, -1); free(scolor); - sensor_cur++; + s_cur++; } + + ui->widget = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ui->widget), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_container_add(GTK_CONTAINER(ui->widget), GTK_WIDGET(ui->treeview)); } struct ui_sensorlist *ui_sensorlist_create(struct psensor **sensors) @@ -482,9 +477,8 @@ struct ui_sensorlist *ui_sensorlist_create(struct psensor **sensors) list = malloc(sizeof(struct ui_sensorlist)); list->sensors = sensors; - list->widget = NULL; - ui_sensorlist_create_widget(list); + create_widget(list); return list; diff --git a/src/ui_sensorlist.h b/src/ui_sensorlist.h index f37520b..8691581 100644 --- a/src/ui_sensorlist.h +++ b/src/ui_sensorlist.h @@ -25,6 +25,9 @@ #include "psensor.h" struct ui_sensorlist { + /* The GtkTreeView widget containing the list of sensors */ + GtkTreeView *treeview; + GtkWidget *widget; struct psensor **sensors; @@ -37,6 +40,4 @@ void ui_sensorlist_update(struct ui_sensorlist *list); void ui_sensorlist_update_sensors_preferences(struct ui_sensorlist *); -void ui_sensorlist_create_widget(struct ui_sensorlist *ui); - #endif