summaryrefslogtreecommitdiff
path: root/hardinfo2/shell.c
diff options
context:
space:
mode:
authorLeandro A. F. Pereira <leandro@hardinfo.org>2009-02-21 09:43:51 -0300
committerLeandro A. F. Pereira <leandro@hardinfo.org>2009-02-21 09:43:51 -0300
commit7c4e7afb55ebe84817b0e638454f0245dcd5f74c (patch)
treed991a4e1b290380134f683db7b19971bf840df73 /hardinfo2/shell.c
parentde513fb963bb63f9ccfc47d82881a6ac9d62be35 (diff)
Fix some flickering problems when reloading a ModuleSection
Diffstat (limited to 'hardinfo2/shell.c')
-rw-r--r--hardinfo2/shell.c53
1 files changed, 30 insertions, 23 deletions
diff --git a/hardinfo2/shell.c b/hardinfo2/shell.c
index 4e9846c7..0c3fe246 100644
--- a/hardinfo2/shell.c
+++ b/hardinfo2/shell.c
@@ -652,6 +652,11 @@ static gboolean update_field(gpointer data)
return FALSE;
}
+#define RANGE_SET_VALUE(tree,scrollbar,value) \
+ gtk_range_set_value(GTK_RANGE \
+ (GTK_SCROLLED_WINDOW(shell->tree->scroll)-> \
+ scrollbar), value);
+
static gboolean reload_section(gpointer data)
{
ShellModuleEntry *entry = (ShellModuleEntry *) data;
@@ -666,8 +671,9 @@ static gboolean reload_section(gpointer data)
/* gets the current selected path */
if (gtk_tree_selection_get_selected
- (shell->info->selection, &shell->info->model, &iter))
+ (shell->info->selection, &shell->info->model, &iter)) {
path = gtk_tree_model_get_path(shell->info->model, &iter);
+ }
/* update the information, clear the treeview and populate it again */
module_entry_reload(entry);
@@ -726,7 +732,7 @@ info_tree_compare_val_func(GtkTreeModel * model,
return ret;
}
-static void set_view_type(ShellViewType viewtype)
+static void set_view_type(ShellViewType viewtype, gboolean reload)
{
if (viewtype < SHELL_VIEW_NORMAL || viewtype >= SHELL_VIEW_N_VIEWS)
viewtype = SHELL_VIEW_NORMAL;
@@ -739,10 +745,12 @@ static void set_view_type(ShellViewType viewtype)
shell->info->model);
/* reset to the default view columns */
- gtk_tree_view_column_set_visible(shell->info->col_extra1, FALSE);
- gtk_tree_view_column_set_visible(shell->info->col_extra2, FALSE);
- gtk_tree_view_column_set_visible(shell->info->col_progress, FALSE);
- gtk_tree_view_column_set_visible(shell->info->col_value, TRUE);
+ if (!reload) {
+ gtk_tree_view_column_set_visible(shell->info->col_extra1, FALSE);
+ gtk_tree_view_column_set_visible(shell->info->col_extra2, FALSE);
+ gtk_tree_view_column_set_visible(shell->info->col_progress, FALSE);
+ gtk_tree_view_column_set_visible(shell->info->col_value, TRUE);
+ }
/* turn off the rules hint */
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(shell->info->view), FALSE);
@@ -754,7 +762,10 @@ static void set_view_type(ShellViewType viewtype)
default:
case SHELL_VIEW_NORMAL:
gtk_widget_hide(shell->notebook);
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), FALSE);
+
+ if (!reload) {
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), FALSE);
+ }
break;
case SHELL_VIEW_DUAL:
gtk_notebook_set_page(GTK_NOTEBOOK(shell->notebook), 0);
@@ -775,9 +786,12 @@ static void set_view_type(ShellViewType viewtype)
/* fallthrough */
case SHELL_VIEW_PROGRESS:
shell_action_set_enabled("SaveGraphAction", TRUE);
- gtk_tree_view_column_set_visible(shell->info->col_progress, TRUE);
- gtk_tree_view_column_set_visible(shell->info->col_value, FALSE);
-
+
+ if (!reload) {
+ gtk_tree_view_column_set_visible(shell->info->col_progress, TRUE);
+ gtk_tree_view_column_set_visible(shell->info->col_value, FALSE);
+ }
+
if (viewtype == SHELL_VIEW_PROGRESS)
gtk_widget_hide(shell->notebook);
break;
@@ -786,7 +800,7 @@ static void set_view_type(ShellViewType viewtype)
static void
group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry,
- gchar * group, gchar ** keys)
+ gchar * group, gchar ** keys, gboolean reload)
{
if (g_str_equal(group, "$ShellParam$")) {
gboolean headers_visible = FALSE;
@@ -859,7 +873,7 @@ group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry,
key, NULL);
} else if (g_str_equal(key, "ViewType")) {
set_view_type(g_key_file_get_integer(key_file, group,
- key, NULL));
+ key, NULL), reload);
} else if (g_str_has_prefix(key, "Icon")) {
GtkTreeIter *iter = g_hash_table_lookup(update_tbl,
strchr(key,
@@ -1113,10 +1127,10 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view), NULL);
/* reset the view type to normal */
- set_view_type(SHELL_VIEW_NORMAL);
+ set_view_type(SHELL_VIEW_NORMAL, reload);
- /* recreate the iter hash table */
if (!reload) {
+ /* recreate the iter hash table */
h_hash_table_remove_all(update_tbl);
}
@@ -1154,7 +1168,7 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
gchar **keys = g_key_file_get_keys(key_file, group, NULL, NULL);
if (*group == '$') {
- group_handle_special(key_file, entry, group, keys);
+ group_handle_special(key_file, entry, group, keys, reload);
has_shell_param = TRUE;
} else {
group_handle_normal(key_file, entry, group, keys, ngroups);
@@ -1276,18 +1290,11 @@ static void module_selected(gpointer data)
gtk_tree_view_columns_autosize(GTK_TREE_VIEW(shell->info->view));
/* urgh. why don't GTK do this when the model is cleared? */
-#define RANGE_SET_VALUE(tree,scrollbar,value) \
- gtk_range_set_value(GTK_RANGE \
- (GTK_SCROLLED_WINDOW(shell->tree->scroll)-> \
- scrollbar), value);
-
RANGE_SET_VALUE(info, vscrollbar, 0.0);
RANGE_SET_VALUE(info, hscrollbar, 0.0);
RANGE_SET_VALUE(moreinfo, vscrollbar, 0.0);
RANGE_SET_VALUE(moreinfo, hscrollbar, 0.0);
-#undef RANGE_SET_VALUE
-
shell_status_update("Done.");
shell_status_set_enabled(FALSE);
@@ -1304,7 +1311,7 @@ static void module_selected(gpointer data)
shell_action_set_enabled("CopyAction", FALSE);
gtk_tree_store_clear(GTK_TREE_STORE(shell->info->model));
- set_view_type(SHELL_VIEW_NORMAL);
+ set_view_type(SHELL_VIEW_NORMAL, FALSE);
}
current = entry;