diff options
| author | Leandro Pereira <leandro@hardinfo.org> | 2009-12-27 22:08:05 -0200 | 
|---|---|---|
| committer | Leandro Pereira <leandro@hardinfo.org> | 2009-12-27 22:08:05 -0200 | 
| commit | 000ade2d1866021554cbb04f77174638d3c1706c (patch) | |
| tree | 9135c12620d386dcb5f5cabc291c7f0648cb4fda /hardinfo2 | |
| parent | 160dfa7d7176d7220e0d4b7a58ba875bd22526d4 (diff) | |
Don't scroll back when reloading a section
Diffstat (limited to 'hardinfo2')
| -rw-r--r-- | hardinfo2/benchmark.c | 7 | ||||
| -rw-r--r-- | hardinfo2/hardinfo.h | 3 | ||||
| -rw-r--r-- | hardinfo2/shell.c | 21 | 
3 files changed, 27 insertions, 4 deletions
| diff --git a/hardinfo2/benchmark.c b/hardinfo2/benchmark.c index b273ea72..11ad9b01 100644 --- a/hardinfo2/benchmark.c +++ b/hardinfo2/benchmark.c @@ -363,9 +363,14 @@ static void do_benchmark(void (*benchmark_function)(void), int entry)         GtkWidget *bench_dialog;         GtkWidget *bench_image;         BenchmarkDialog *benchmark_dialog; +       gchar *bench_status; + +       bench_status = g_strdup_printf("Benchmarking: <b>%s</b>.", entries[entry].name);         shell_view_set_enabled(FALSE); -       shell_status_update("Benchmarking."); +       shell_status_update(bench_status); +        +       g_free(bench_status);         bench_image = icon_cache_get_image("benchmark.png");         gtk_widget_show(bench_image); diff --git a/hardinfo2/hardinfo.h b/hardinfo2/hardinfo.h index 235036be..dc720069 100644 --- a/hardinfo2/hardinfo.h +++ b/hardinfo2/hardinfo.h @@ -136,4 +136,7 @@ gchar	       *h_sysfs_read_string(gchar *endpoint, gchar *entry);  #define SCAN_START()  static gboolean scanned = FALSE; if (reload) scanned = FALSE; if (scanned) return;  #define SCAN_END()    scanned = TRUE; +#define _CONCAT(a,b) a ## b +#define CONCAT(a,b) _CONCAT(a,b) +  #endif				/* __HARDINFO_H__ */ diff --git a/hardinfo2/shell.c b/hardinfo2/shell.c index 50dc0232..912515da 100644 --- a/hardinfo2/shell.c +++ b/hardinfo2/shell.c @@ -811,9 +811,15 @@ static gboolean update_field(gpointer data)  }  #define RANGE_SET_VALUE(tree,scrollbar,value) \ -  	  gtk_range_set_value(GTK_RANGE \ +  	  do { \ +  	      GtkRange CONCAT(*range, __LINE__) = GTK_RANGE(GTK_SCROLLED_WINDOW(shell->tree->scroll)->scrollbar); \ +  	      gtk_range_set_value(CONCAT(range, __LINE__), value); \ +              gtk_adjustment_value_changed(GTK_ADJUSTMENT(gtk_range_get_adjustment(CONCAT(range, __LINE__)))); \ +          } while (0) +#define RANGE_GET_VALUE(tree,scrollbar) \ +  	  gtk_range_get_value(GTK_RANGE \  	  		    (GTK_SCROLLED_WINDOW(shell->tree->scroll)-> \ -			     scrollbar), value); +			     scrollbar))  static gboolean reload_section(gpointer data)  { @@ -823,7 +829,12 @@ static gboolean reload_section(gpointer data)      if (entry->selected) {  	GtkTreePath *path = NULL;  	GtkTreeIter iter; - +	double pos_info_scroll, pos_more_scroll; +	 +	/* save current position */ +	pos_info_scroll = RANGE_GET_VALUE(info, vscrollbar); +	pos_more_scroll = RANGE_GET_VALUE(moreinfo, vscrollbar); +	  	/* avoid drawing the window while we reload */  	gdk_window_freeze_updates(shell->window->window); @@ -848,6 +859,10 @@ static gboolean reload_section(gpointer data)  	/* make the window drawable again */  	gdk_window_thaw_updates(shell->window->window); +	 +	/* restore position */ +	RANGE_SET_VALUE(info, vscrollbar, pos_info_scroll); +	RANGE_SET_VALUE(moreinfo, vscrollbar, pos_more_scroll);      }      /* destroy the timeout: it'll be set up again */ | 
