From b0462c5b29b78961e4ec4a8ee706baa25b936d43 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Wed, 30 Jul 2014 09:33:54 +0200 Subject: [PATCH 16/20] gui: conver report-gtk to GtkApplication - improves compatibility with GNOME - allows us to move "Preferences" to the application menu Signed-off-by: Jakub Filak --- src/gui-wizard-gtk/main.c | 60 ++++++++++++++++++++++++++++++++++++----- src/gui-wizard-gtk/wizard.c | 26 ++++-------------- src/gui-wizard-gtk/wizard.glade | 39 --------------------------- src/gui-wizard-gtk/wizard.h | 2 +- 4 files changed, 60 insertions(+), 67 deletions(-) diff --git a/src/gui-wizard-gtk/main.c b/src/gui-wizard-gtk/main.c index 0bfa45c..697b91f 100644 --- a/src/gui-wizard-gtk/main.c +++ b/src/gui-wizard-gtk/main.c @@ -72,6 +72,55 @@ void problem_data_reload_from_dump_dir(void) g_cd = new_cd; } +static void +preferences_activated(GSimpleAction *action, + GVariant *parameter, + gpointer data) +{ + GtkApplication *app = GTK_APPLICATION(data); + show_config_list_dialog(GTK_WINDOW(gtk_application_get_active_window(app))); +} + +static void +quit_activated(GSimpleAction *action, + GVariant *parameter, + gpointer data) +{ + g_application_quit(G_APPLICATION(data)); +} + +static GActionEntry app_entries[] = +{ + { "preferences", preferences_activated, NULL, NULL, NULL }, + { "quit", quit_activated, NULL, NULL, NULL } +}; + +static void +startup_wizard(GApplication *app, + gpointer user_data) +{ + g_action_map_add_action_entries(G_ACTION_MAP (app), + app_entries, G_N_ELEMENTS (app_entries), + app); + + GMenu *app_menu = g_menu_new(); + g_menu_append(app_menu, _("Preferences"), "app.preferences"); + + GMenu *service_app_menu_sec = g_menu_new(); + g_menu_append(service_app_menu_sec, _("Quit"), "app.quit"); + g_menu_append_section(app_menu, /*no title*/NULL, G_MENU_MODEL(service_app_menu_sec)); + + gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL(app_menu)); +} + +static void +activate_wizard(GApplication *app, + gpointer user_data) +{ + create_assistant(GTK_APPLICATION(app), (bool)user_data); + update_gui_state_from_problem_data(UPDATE_SELECTED_EVENT); +} + int main(int argc, char **argv) { bool expert_mode = false; @@ -166,14 +215,13 @@ int main(int argc, char **argv) problem_data_reload_from_dump_dir(); - create_assistant(expert_mode); - g_custom_logger = &show_error_as_msgbox; - - update_gui_state_from_problem_data(UPDATE_SELECTED_EVENT); - + GtkApplication *app = gtk_application_new("org.freedesktop.libreport.report", G_APPLICATION_FLAGS_NONE); + g_signal_connect(app, "activate", G_CALLBACK(activate_wizard), (gpointer)expert_mode); + g_signal_connect(app, "startup", G_CALLBACK(startup_wizard), NULL); /* Enter main loop */ - gtk_main(); + g_application_run(G_APPLICATION(app), argc, argv); + g_object_unref(app); if (opts & OPT_d) delete_dump_dir_possibly_using_abrtd(g_dump_dir_name); diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index 993b602..5c4bd6a 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -2174,12 +2174,6 @@ static void on_log_changed(GtkTextBuffer *buffer, gpointer user_data) gtk_widget_show(GTK_WIDGET(g_exp_report_log)); } - -static void on_show_event_list_cb(GtkWidget *button, gpointer user_data) -{ - show_config_list_dialog(GTK_WINDOW(g_wnd_assistant)); -} - #if 0 static void log_ready_state(void) { @@ -3237,16 +3231,6 @@ static void add_pages(void) gtk_widget_override_font(GTK_WIDGET(g_tv_event_log), g_monospace_font); fix_all_wrapped_labels(GTK_WIDGET(g_assistant)); - /* Configure btn on select analyzers page */ - GtkWidget *img_config_btn = gtk_image_new_from_icon_name("preferences-system", GTK_ICON_SIZE_BUTTON); - GtkWidget *config_btn = GTK_WIDGET(gtk_builder_get_object(g_builder, "button_cfg1")); - if (config_btn) - { - g_signal_connect(G_OBJECT(config_btn), "clicked", G_CALLBACK(on_show_event_list_cb), NULL); - gtk_button_set_image(GTK_BUTTON(config_btn), img_config_btn); - gtk_button_set_image_position(GTK_BUTTON(config_btn), GTK_POS_RIGHT); - } - g_signal_connect(g_cb_no_comment, "toggled", G_CALLBACK(on_no_comment_toggled), NULL); g_signal_connect(g_rb_forbidden_words, "toggled", G_CALLBACK(on_forbidden_words_toggled), NULL); @@ -3342,7 +3326,7 @@ static void assistant_quit_cb(void *obj, void *data) g_loaded_texts = NULL; } - gtk_main_quit(); + gtk_widget_destroy(GTK_WIDGET(data)); } static void on_btn_startcast(GtkWidget *btn, gpointer user_data) @@ -3398,7 +3382,7 @@ static bool is_screencast_available() return status == 0; } -void create_assistant(bool expert_mode) +void create_assistant(GtkApplication *app, bool expert_mode) { g_loaded_texts = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); @@ -3487,7 +3471,7 @@ void create_assistant(bool expert_mode) gtk_widget_hide(g_btn_onfail); gtk_widget_show(g_btn_next); - g_wnd_assistant = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); + g_wnd_assistant = GTK_WINDOW(gtk_application_window_new(app)); gtk_container_add(GTK_CONTAINER(g_wnd_assistant), GTK_WIDGET(g_box_assistant)); gtk_window_set_default_size(g_wnd_assistant, DEFAULT_WIDTH, DEFAULT_HEIGHT); @@ -3502,12 +3486,12 @@ void create_assistant(bool expert_mode) create_details_treeview(); - g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), NULL); + g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), g_wnd_assistant); g_signal_connect(g_btn_stop, "clicked", G_CALLBACK(on_btn_cancel_event), NULL); g_signal_connect(g_btn_onfail, "clicked", G_CALLBACK(on_btn_failed_cb), NULL); g_signal_connect(g_btn_next, "clicked", G_CALLBACK(on_next_btn_cb), NULL); - g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(assistant_quit_cb), NULL); + g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(assistant_quit_cb), g_wnd_assistant); g_signal_connect(g_assistant, "switch-page", G_CALLBACK(on_page_prepare), NULL); g_signal_connect(g_tb_approve_bt, "toggled", G_CALLBACK(on_bt_approve_toggle), NULL); diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade index 9e43cce..854a402 100644 --- a/src/gui-wizard-gtk/wizard.glade +++ b/src/gui-wizard-gtk/wizard.glade @@ -618,45 +618,6 @@ 1 - - - True - False - - - _Preferences - True - True - True - True - - - False - False - 0 - - - - - True - False - - - - - - True - True - 1 - - - - - False - False - 2 - - diff --git a/src/gui-wizard-gtk/wizard.h b/src/gui-wizard-gtk/wizard.h index a6d8b5d..4c891dc 100644 --- a/src/gui-wizard-gtk/wizard.h +++ b/src/gui-wizard-gtk/wizard.h @@ -21,7 +21,7 @@ #include "internal_libreport_gtk.h" -void create_assistant(bool expert_mode); +void create_assistant(GtkApplication *app, bool expert_mode); enum { -- 2.0.4