diff options
| author | Leandro A. F. Pereira <leandro@hardinfo.org> | 2009-02-21 09:43:51 -0300 | 
|---|---|---|
| committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2009-02-21 09:43:51 -0300 | 
| commit | 7c4e7afb55ebe84817b0e638454f0245dcd5f74c (patch) | |
| tree | d991a4e1b290380134f683db7b19971bf840df73 | |
| parent | de513fb963bb63f9ccfc47d82881a6ac9d62be35 (diff) | |
Fix some flickering problems when reloading a ModuleSection
| -rw-r--r-- | hardinfo2/shell.c | 53 | 
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; | 
