diff options
-rw-r--r-- | modules/benchmark.c | 46 | ||||
-rw-r--r-- | shell/shell.c | 51 |
2 files changed, 36 insertions, 61 deletions
diff --git a/modules/benchmark.c b/modules/benchmark.c index f4629866..770cb446 100644 --- a/modules/benchmark.c +++ b/modules/benchmark.c @@ -134,7 +134,7 @@ bench_value benchmark_crunch_for(float seconds, int cpu_procs, cpu_cores, cpu_threads, cpu_nodes; int thread_number, stop = 0; GSList *threads = NULL, *t; - GTimer *timer; + GTimer *timer = NULL; bench_value ret = EMPTY_BENCH_VALUE; timer = g_timer_new(); @@ -595,22 +595,22 @@ do_benchmark_handler(GIOChannel *source, GIOCondition condition, gpointer data) { BenchmarkDialog *bench_dialog = (BenchmarkDialog *)data; GIOStatus status; - gchar *result; + gchar *result = NULL; bench_value r = EMPTY_BENCH_VALUE; status = g_io_channel_read_line(source, &result, NULL, NULL, NULL); if (status != G_IO_STATUS_NORMAL) { DEBUG("error while reading benchmark result"); r.result = -1.0f; - bench_dialog->r = r; - gtk_widget_destroy(bench_dialog->dialog); + if(bench_dialog && &bench_dialog->r) bench_dialog->r = r; + if(bench_dialog && bench_dialog->dialog) gtk_widget_destroy(bench_dialog->dialog); return FALSE; } - r = bench_value_from_str(result); - bench_dialog->r = r; + if(result) r = bench_value_from_str(result); + if(result && bench_dialog && &bench_dialog->r) bench_dialog->r = r; - gtk_widget_destroy(bench_dialog->dialog); + if(bench_dialog && bench_dialog->dialog) gtk_widget_destroy(bench_dialog->dialog); g_free(result); return FALSE; @@ -636,10 +636,7 @@ static void do_benchmark(void (*benchmark_function)(void), int entry) bench_value r = EMPTY_BENCH_VALUE; bench_results[entry] = r; - bench_status = - g_strdup_printf(_("Benchmarking: <b>%s</b>."), entries[entry].name); - - shell_view_set_enabled(FALSE); + bench_status = g_strdup_printf(_("Benchmarking: <b>%s</b>."), entries[entry].name); shell_status_update(bench_status); g_free(bench_status); @@ -648,12 +645,10 @@ static void do_benchmark(void (*benchmark_function)(void), int entry) bench_dialog = gtk_dialog_new_with_buttons ("Benchmarking...", GTK_WINDOW(shell_get_main_shell()->transient_dialog), - GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, _("Stop"), GTK_RESPONSE_ACCEPT, NULL); - gtk_widget_set_sensitive(GTK_WIDGET(shell_get_main_shell()->transient_dialog), FALSE); - content_area = gtk_dialog_get_content_area (GTK_DIALOG(bench_dialog)); #if GTK_CHECK_VERSION(3,0,0) @@ -701,36 +696,29 @@ static void do_benchmark(void (*benchmark_function)(void), int entry) channel = g_io_channel_unix_new(bench_stdout); watch_id = g_io_add_watch(channel, G_IO_IN, do_benchmark_handler, benchmark_dialog); - + gboolean done=FALSE; switch (gtk_dialog_run(GTK_DIALOG(bench_dialog))) { case GTK_RESPONSE_NONE: DEBUG("benchmark finished"); - bench_results[entry] = benchmark_dialog->r; + if(benchmark_dialog) bench_results[entry] = benchmark_dialog->r; + done=TRUE; break; - case GTK_RESPONSE_ACCEPT: + case GTK_RESPONSE_ACCEPT: DEBUG("cancelling benchmark"); - gtk_widget_destroy(bench_dialog); - g_source_remove(watch_id); - kill(bench_pid, SIGINT); } + DEBUG("benchmark exiting"); + if(!done) if(bench_dialog) gtk_widget_destroy(bench_dialog); + if(!done) if(watch_id) g_source_remove(watch_id); + if(!done) kill(bench_pid, SIGINT); g_io_channel_unref(channel); - shell_view_set_enabled(TRUE); - shell_status_set_enabled(TRUE); - gtk_widget_set_sensitive( - GTK_WIDGET(shell_get_main_shell()->transient_dialog), TRUE); g_free(benchmark_dialog); - shell_status_update(_("Done.")); - return; } - gtk_widget_destroy(bench_dialog); g_free(benchmark_dialog); - shell_status_set_enabled(TRUE); - shell_status_update(_("Done.")); } setpriority(PRIO_PROCESS, 0, -20); diff --git a/shell/shell.c b/shell/shell.c index f7572307..7f303d7b 100644 --- a/shell/shell.c +++ b/shell/shell.c @@ -190,9 +190,7 @@ gboolean shell_action_get_active(const gchar * action_name) GtkAction *action; GSList *proxies; - /* FIXME: Ugh. Are you sure there isn't any simpler way? O_o */ - if (!params.gui_running) - return FALSE; + if (!params.gui_running) return FALSE; action = gtk_action_group_get_action(shell->action_group, action_name); if (action) { @@ -217,9 +215,7 @@ void shell_action_set_active(const gchar * action_name, gboolean setting) GtkAction *action; GSList *proxies; - /* FIXME: Ugh. Are you sure there isn't any simpler way? O_o */ - if (!params.gui_running) - return; + if (!params.gui_running) return; action = gtk_action_group_get_action(shell->action_group, action_name); if (action) { @@ -287,7 +283,7 @@ void shell_view_set_enabled(gboolean setting) shell->_pulses = 0; widget_set_cursor(shell->window, GDK_LEFT_PTR); } else { - widget_set_cursor(shell->window, GDK_WATCH); + widget_set_cursor(shell->window, GDK_WATCH); } gtk_widget_set_sensitive(shell->hbox, setting); @@ -305,16 +301,16 @@ void shell_status_set_enabled(gboolean setting) return; if (setting) - gtk_widget_show(shell->progress); + gtk_widget_show(shell->progress); else { - gtk_widget_hide(shell->progress); + gtk_widget_hide(shell->progress); shell_view_set_enabled(TRUE); shell_status_update(_("Done.")); } } -void shell_do_reload(void) +void shell_do_reload(gboolean reload) { if (!params.gui_running || !shell->selected) return; @@ -325,7 +321,7 @@ void shell_do_reload(void) shell_status_set_enabled(TRUE); - module_entry_reload(shell->selected); + if(reload) module_entry_reload(shell->selected); module_selected(NULL); shell_action_set_enabled("RefreshAction", TRUE); @@ -338,6 +334,7 @@ void shell_status_update(const gchar * message) DEBUG("Shell_status_update %s",message); if (params.gui_running) { gtk_label_set_markup(GTK_LABEL(shell->status), message); + gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(shell->progress),1); gtk_progress_bar_pulse(GTK_PROGRESS_BAR(shell->progress)); while (gtk_events_pending()) gtk_main_iteration(); @@ -463,11 +460,16 @@ static void create_window(void) gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 3); shell->progress = gtk_progress_bar_new(); - gtk_widget_set_size_request(shell->progress, 80, 10); + //gtk_widget_set_size_request(shell->progress, 80, 10); +#if GTK_CHECK_VERSION(3, 0, 0) + gtk_widget_set_valign(GTK_WIDGET(shell->progress), GTK_ALIGN_CENTER); +#else + gtk_misc_set_alignment(GTK_MISC(shell->progress), 0.0, 0.5); +#endif gtk_widget_hide(shell->progress); gtk_box_pack_end(GTK_BOX(hbox), shell->progress, FALSE, FALSE, 5); - shell->status = gtk_label_new(""); + shell->status = gtk_label_new("Starting..."); #if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_set_valign(GTK_WIDGET(shell->status), GTK_ALIGN_CENTER); #else @@ -911,10 +913,10 @@ static gboolean update_field(gpointer data) } #if GTK_CHECK_VERSION(3, 0, 0) -#define RANGE_SET_VALUE(...) -#define RANGE_GET_VALUE(...) 0 + #define RANGE_SET_VALUE(tree,scrollbar,value) gtk_range_set_value(GTK_RANGE(gtk_scrolled_window_get_##scrollbar(GTK_SCROLLED_WINDOW(shell->tree->scroll))), value) + #define RANGE_GET_VALUE(tree,scrollbar) gtk_range_get_value(GTK_RANGE(gtk_scrolled_window_get_##scrollbar(GTK_SCROLLED_WINDOW(shell->tree->scroll)))) #else -#define RANGE_SET_VALUE(tree, scrollbar, value) \ + #define RANGE_SET_VALUE(tree, scrollbar, value) \ do { \ GtkRange CONCAT(*range, __LINE__) = \ GTK_RANGE(GTK_SCROLLED_WINDOW(shell->tree->scroll)->scrollbar); \ @@ -922,7 +924,7 @@ static gboolean update_field(gpointer data) gtk_adjustment_value_changed(GTK_ADJUSTMENT( \ gtk_range_get_adjustment(CONCAT(range, __LINE__)))); \ } while (0) -#define RANGE_GET_VALUE(tree, scrollbar) \ + #define RANGE_GET_VALUE(tree, scrollbar) \ gtk_range_get_value( \ GTK_RANGE(GTK_SCROLLED_WINDOW(shell->tree->scroll)->scrollbar)) #endif @@ -956,12 +958,8 @@ static gboolean reload_section(gpointer data) double pos_detail_scroll; /* save current position */ -#if GTK_CHECK_VERSION(3, 0, 0) - /* TODO:GTK3 */ -#else pos_info_scroll = RANGE_GET_VALUE(info_tree, vscrollbar); pos_detail_scroll = RANGE_GET_VALUE(detail_view, vscrollbar); -#endif /* avoid drawing the window while we reload */ #if GTK_CHECK_VERSION(2, 14, 0) @@ -989,16 +987,10 @@ static gboolean reload_section(gpointer data) gtk_tree_path_free(path); } else { /* restore position */ -#if GTK_CHECK_VERSION(3, 0, 0) - /* TODO:GTK3 */ -#else RANGE_SET_VALUE(info_tree, vscrollbar, pos_info_scroll); -#endif } -#if !GTK_CHECK_VERSION(3, 0, 0) RANGE_SET_VALUE(detail_view, vscrollbar, pos_detail_scroll); -#endif /* make the window drawable again */ #if GTK_CHECK_VERSION(2, 14, 0) @@ -2061,15 +2053,10 @@ static void module_selected(gpointer data) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(shell->info_tree->view)); - /* urgh. why don't GTK do this when the model is cleared? */ -#if GTK_CHECK_VERSION(3, 0, 0) - /* TODO:GTK3 */ -#else RANGE_SET_VALUE(info_tree, vscrollbar, 0.0); RANGE_SET_VALUE(info_tree, hscrollbar, 0.0); RANGE_SET_VALUE(detail_view, vscrollbar, 0.0); RANGE_SET_VALUE(detail_view, hscrollbar, 0.0); -#endif title = g_strdup_printf("%s - %s", shell->selected_module->name, entry->name); |