From ca20dab9cfe3c0fe71ba6057a7d22aae575e949c Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 22 Sep 2019 11:58:23 +0100 Subject: [PATCH] fix toolbar visibility checkboxes initial state --- frontends/gtk/scaffolding.c | 119 ++++++++++++++++++++++++------------ 1 file changed, 81 insertions(+), 38 deletions(-) diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c index 526c0be83..e4b4c6fff 100644 --- a/frontends/gtk/scaffolding.c +++ b/frontends/gtk/scaffolding.c @@ -801,20 +801,72 @@ static void nsgtk_menu_connect_signals(struct nsgtk_scaffolding *g) g); } } +} + + +/** + * Create and connect handlers to bar menu. + * + * \param gs scaffolding to attach popup menu to. + * \param group The accelerator group to use for the popup. + * \param showmenu if the bar menu should be shown + * \param showtool if the toolabar should be shown + * \return menu structure on success or NULL on error. + */ +static struct nsgtk_bar_submenu * +create_scaffolding_bar_menu(struct nsgtk_scaffolding *gs, + GtkAccelGroup *group, + bool showmenu, + bool showtool) +{ + GtkMenuShell *menushell; + struct nsgtk_bar_submenu *nmenu; + + menushell = GTK_MENU_SHELL(gtk_builder_get_object(gs->builder, + "menubar")); + + nmenu = nsgtk_menu_bar_create(menushell, group); + if (nmenu == NULL) { + return NULL; + } + + /* set menu bar visibility */ + if (showmenu) { + gtk_widget_show(GTK_WIDGET(nmenu->bar_menu)); + } else { + gtk_widget_hide(GTK_WIDGET(nmenu->bar_menu)); + } + + /* set checks correct way on toolbar submenu */ + gtk_check_menu_item_set_active(nmenu->view_submenu->toolbars_submenu->menubar_menuitem, showmenu); + gtk_check_menu_item_set_active(nmenu->view_submenu->toolbars_submenu->toolbar_menuitem, showtool); + + /* bar menu signal handlers for edit controls */ + g_signal_connect(nmenu->edit_submenu->edit, + "show", + G_CALLBACK(nsgtk_window_edit_menu_shown), + gs); + + g_signal_connect(nmenu->edit_submenu->edit, + "hide", + G_CALLBACK(nsgtk_window_edit_menu_hidden), + gs); /* * attach signal handlers for menubar and toolbar visibility toggling */ - g_signal_connect(g->menu_bar->view_submenu->toolbars_submenu->menubar_menuitem, + g_signal_connect(nmenu->view_submenu->toolbars_submenu->menubar_menuitem, "toggled", G_CALLBACK(nsgtk_on_menubar_activate_menu), - g); + gs); - g_signal_connect(g->menu_bar->view_submenu->toolbars_submenu->toolbar_menuitem, + g_signal_connect(nmenu->view_submenu->toolbars_submenu->toolbar_menuitem, "toggled", G_CALLBACK(nsgtk_on_toolbar_activate_menu), - g); + gs); + + return nmenu; } @@ -823,11 +875,15 @@ static void nsgtk_menu_connect_signals(struct nsgtk_scaffolding *g) * * \param g scaffolding to attach popup menu to. * \param group The accelerator group to use for the popup. + * \param showbar if the bar menu should be shown + * \param showtool if the toolabar should be shown * \return menu structure on success or NULL on error. */ static struct nsgtk_burger_menu * create_scaffolding_burger_menu(struct nsgtk_scaffolding *gs, - GtkAccelGroup *group) + GtkAccelGroup *group, + bool showbar, + bool showtool) { struct nsgtk_burger_menu *nmenu; @@ -836,6 +892,11 @@ create_scaffolding_burger_menu(struct nsgtk_scaffolding *gs, if (nmenu == NULL) { return NULL; } + + /* set checks correct way on toolbar submenu */ + gtk_check_menu_item_set_active(nmenu->view_submenu->toolbars_submenu->menubar_menuitem, showbar); + gtk_check_menu_item_set_active(nmenu->view_submenu->toolbars_submenu->toolbar_menuitem, showtool); + g_signal_connect(nmenu->view_submenu->toolbars_submenu->menubar_menuitem, "toggled", G_CALLBACK(nsgtk_on_menubar_activate_menu), @@ -851,13 +912,17 @@ create_scaffolding_burger_menu(struct nsgtk_scaffolding *gs, /** * Create and connect handlers to popup menu. * - * \param g scaffolding to attach popup menu to. + * \param gs scaffolding to attach popup menu to. * \param group The accelerator group to use for the popup. + * \param showbar if the bar menu should be shown + * \param showtool if the toolabar should be shown * \return menu structure on success or NULL on error. */ static struct nsgtk_popup_menu * create_scaffolding_popup_menu(struct nsgtk_scaffolding *gs, - GtkAccelGroup *group) + GtkAccelGroup *group, + bool showbar, + bool showtool) { struct nsgtk_popup_menu *nmenu; @@ -866,6 +931,9 @@ create_scaffolding_popup_menu(struct nsgtk_scaffolding *gs, if (nmenu == NULL) { return NULL; } + /* set checks correct way on toolbar submenu */ + gtk_check_menu_item_set_active(nmenu->toolbars_submenu->menubar_menuitem, showbar); + gtk_check_menu_item_set_active(nmenu->toolbars_submenu->toolbar_menuitem, showtool); g_signal_connect(nmenu->popup_menu, "hide", @@ -1122,34 +1190,19 @@ static void nsgtk_menu_set_icons(struct nsgtk_scaffolding *g) */ static nserror nsgtk_menus_create(struct nsgtk_scaffolding *gs) { - GtkMenuShell *menushell; GtkAccelGroup *group; + bool showmenu; /* show menubar */ + bool showtool; /* show toolbar */ - menushell = GTK_MENU_SHELL(gtk_builder_get_object(gs->builder, - "menubar")); + get_bar_show(&showmenu, &showtool); group = gtk_accel_group_new(); gtk_window_add_accel_group(gs->window, group); - gs->menu_bar = nsgtk_menu_bar_create(menushell, group); - - /* toolbar URL bar menu bar signal handlers */ - g_signal_connect(gs->menu_bar->edit_submenu->edit, - "show", - G_CALLBACK(nsgtk_window_edit_menu_shown), - gs); - - g_signal_connect(gs->menu_bar->edit_submenu->edit, - "hide", - G_CALLBACK(nsgtk_window_edit_menu_hidden), - gs); - - - gs->burger_menu = create_scaffolding_burger_menu(gs, group); - - gs->popup_menu = create_scaffolding_popup_menu(gs, group); - + gs->menu_bar = create_scaffolding_bar_menu(gs, group, showmenu, showtool); + gs->burger_menu = create_scaffolding_burger_menu(gs, group, showmenu, showtool); + gs->popup_menu = create_scaffolding_popup_menu(gs, group, showmenu, showtool); gs->link_menu = create_scaffolding_link_menu(gs, group); /* set up the menu signal handlers */ @@ -1422,8 +1475,6 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel) { nserror res; struct nsgtk_scaffolding *gs; - bool menu; - bool tool; gs = calloc(1, sizeof(*gs)); if (gs == NULL) { @@ -1508,14 +1559,6 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel) gs->prev = NULL; scaf_list = gs; - /* set menu and tool bar visibility */ - get_bar_show(&menu, &tool); - if (menu) { - gtk_widget_show(GTK_WIDGET(gs->menu_bar->bar_menu)); - } else { - gtk_widget_hide(GTK_WIDGET(gs->menu_bar->bar_menu)); - } - /* finally, show the window. */ gtk_widget_show(GTK_WIDGET(gs->window));