summaryrefslogtreecommitdiff
path: root/frontends
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2019-09-21 01:07:32 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2019-09-21 10:53:41 +0100
commit9d3112a643d2ff1c6055133485273d5e5a358d24 (patch)
treeda78d753fa16de6bd20e7d2942115083df742210 /frontends
parente14416d43fea0da0aca91a3373ed3c67a28af183 (diff)
downloadnetsurf-9d3112a643d2ff1c6055133485273d5e5a358d24.tar.gz
netsurf-9d3112a643d2ff1c6055133485273d5e5a358d24.tar.bz2
persist the menu and tool bar visibility as user settings
Diffstat (limited to 'frontends')
-rw-r--r--frontends/gtk/gui.c5
-rw-r--r--frontends/gtk/options.h2
-rw-r--r--frontends/gtk/scaffolding.c80
-rw-r--r--frontends/gtk/scaffolding.h6
-rw-r--r--frontends/gtk/toolbar.c1
-rw-r--r--frontends/gtk/window.c19
6 files changed, 92 insertions, 21 deletions
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index 21d146c41..f14c7bd92 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -251,7 +251,10 @@ static nserror set_defaults(struct nsoption_s *defaults)
/* set default items in toolbar */
nsoption_set_charp(toolbar_items,
- strdup("back/history/forward/reloadstop/url_bar/websearch/openmenu"));
+ strdup("back/history/forward/reloadstop/url_bar/websearch/openmenu"));
+
+ /* set default for menu and tool bar visibility */
+ nsoption_set_charp(bar_show, strdup("tool"));
return NSERROR_OK;
}
diff --git a/frontends/gtk/options.h b/frontends/gtk/options.h
index 483a766a0..dad17f059 100644
--- a/frontends/gtk/options.h
+++ b/frontends/gtk/options.h
@@ -75,4 +75,4 @@ NSOPTION_INTEGER(position_tab, 0)
NSOPTION_STRING(toolbar_items, NULL)
/* The menu and tool bars that are shown */
-NSOPTION_STRING(toolbar_show, NULL)
+NSOPTION_STRING(bar_show, NULL)
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 5a50d8101..459195f36 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -589,6 +589,55 @@ static gboolean nsgtk_on_find_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
+static nserror get_bar_show(bool *menu, bool *tool)
+{
+ const char *cur_bar_show;
+
+ *menu = false;
+ *tool = false;
+
+ cur_bar_show = nsoption_charp(bar_show);
+ if (cur_bar_show != NULL) {
+ if (strcmp(cur_bar_show, "menu/tool") == 0) {
+ *menu = true;
+ *tool = true;
+ } else if (strcmp(cur_bar_show, "menu") == 0) {
+ *menu = true;
+ } else if (strcmp(cur_bar_show, "tool") == 0) {
+ *tool = true;
+ }
+ }
+
+ return NSERROR_OK;
+}
+
+static nserror set_bar_show(const char *bar, bool show)
+{
+ bool menu;
+ bool tool;
+ const char *new_bar_show;
+
+ get_bar_show(&menu, &tool);
+
+ if (strcmp(bar, "menu") == 0) {
+ menu = show;
+ } else if (strcmp(bar, "tool") == 0) {
+ tool = show;
+ }
+
+ if ((menu == true) && (tool == true)) {
+ new_bar_show = "menu/tool";
+ } else if (menu == true) {
+ new_bar_show = "menu";
+ } else if (tool == true) {
+ new_bar_show = "tool";
+ } else {
+ new_bar_show = "none";
+ }
+ nsoption_set_charp(bar_show, strdup(new_bar_show));
+
+ return NSERROR_OK;
+}
static gboolean
nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
@@ -617,7 +666,7 @@ nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
}
gtk_widget_show(GTK_WIDGET(gs->menu_bar->bar_menu));
-
+ set_bar_show("menu", true);
} else {
if (gtk_check_menu_item_get_active(bmcmi) == TRUE) {
gtk_check_menu_item_set_active(bmcmi, FALSE);
@@ -632,6 +681,7 @@ nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
}
gtk_widget_hide(GTK_WIDGET(gs->menu_bar->bar_menu));
+ set_bar_show("menu", false);
}
return TRUE;
}
@@ -664,6 +714,7 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
}
nsgtk_window_toolbar_show(gs, true);
+ set_bar_show("tool", true);
} else {
if (gtk_check_menu_item_get_active(bmcmi) == TRUE) {
gtk_check_menu_item_set_active(bmcmi, FALSE);
@@ -678,6 +729,7 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
}
nsgtk_window_toolbar_show(gs, false);
+ set_bar_show("tool", false);
}
return TRUE;
}
@@ -792,6 +844,7 @@ create_scaffolding_burger_menu(struct nsgtk_scaffolding *gs,
return nmenu;
}
+
/**
* Create and connect handlers to popup menu.
*
@@ -800,7 +853,8 @@ create_scaffolding_burger_menu(struct nsgtk_scaffolding *gs,
* \return menu structure on success or NULL on error.
*/
static struct nsgtk_popup_menu *
-create_scaffolding_popup_menu(struct nsgtk_scaffolding *gs, GtkAccelGroup *group)
+create_scaffolding_popup_menu(struct nsgtk_scaffolding *gs,
+ GtkAccelGroup *group)
{
struct nsgtk_popup_menu *nmenu;
@@ -1013,6 +1067,7 @@ static void nsgtk_menu_set_sensitivity(struct nsgtk_scaffolding *g)
}
}
+
/* set menu items to have icons */
static void nsgtk_menu_set_icons(struct nsgtk_scaffolding *g)
{
@@ -1041,6 +1096,7 @@ static void nsgtk_menu_set_icons(struct nsgtk_scaffolding *g)
}
}
+
/**
* create and initialise menus
*
@@ -1103,10 +1159,6 @@ static nserror nsgtk_menus_create(struct nsgtk_scaffolding *gs)
}
-
-
-
-
/* exported function documented in gtk/scaffolding.h */
void nsgtk_scaffolding_set_title(struct gui_window *gw, const char *title)
{
@@ -1189,12 +1241,6 @@ GtkNotebook* nsgtk_scaffolding_notebook(struct nsgtk_scaffolding *g)
return g->notebook;
}
-/* exported interface documented in gtk/scaffolding.h */
-GtkWidget *nsgtk_scaffolding_urlbar(struct nsgtk_scaffolding *g)
-{
- return NULL;//g->url_bar;
-}
-
/* exported interface documented in gtk/scaffolding.h */
GtkMenuBar *nsgtk_scaffolding_menu_bar(struct nsgtk_scaffolding *gs)
@@ -1373,6 +1419,8 @@ 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) {
@@ -1457,6 +1505,14 @@ 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));
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index c30c58534..1fae00394 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -79,12 +79,6 @@ GtkWindow *nsgtk_scaffolding_window(struct nsgtk_scaffolding *g);
*/
GtkNotebook *nsgtk_scaffolding_notebook(struct nsgtk_scaffolding *g);
-/**
- * Get the gtk url bar from a scaffold.
- */
-GtkWidget *nsgtk_scaffolding_urlbar(struct nsgtk_scaffolding *g);
-
-
struct gtk_search *nsgtk_scaffolding_search(struct nsgtk_scaffolding *g);
GtkMenuBar *nsgtk_scaffolding_menu_bar(struct nsgtk_scaffolding *g);
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 243c0ceb5..aed35e77c 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -3608,7 +3608,6 @@ nserror nsgtk_toolbar_show(struct nsgtk_toolbar *tb, bool show)
gtk_widget_show(GTK_WIDGET(tb->widget));
} else {
gtk_widget_hide(GTK_WIDGET(tb->widget));
-
}
return NSERROR_OK;
}
diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c
index da904ea95..a5defcfce 100644
--- a/frontends/gtk/window.c
+++ b/frontends/gtk/window.c
@@ -707,6 +707,22 @@ static struct browser_window *bw_from_gw(void *data)
}
+static bool get_tool_bar_show(void)
+{
+ const char *cur_bar_show;
+
+ cur_bar_show = nsoption_charp(bar_show);
+ if (cur_bar_show != NULL) {
+ if (strcmp(cur_bar_show, "menu/tool") == 0) {
+ return true;
+ } else if (strcmp(cur_bar_show, "tool") == 0) {
+ return true;
+ }
+ }
+ return false;
+}
+
+
/**
* Create and open a gtk container (window or tab) for a browsing context.
*
@@ -887,6 +903,9 @@ gui_window_create(struct browser_window *bw,
/* initialy should not be visible */
nsgtk_search_toggle_visibility(g->search);
+ /* set toolbar visibility from user option */
+ nsgtk_toolbar_show(g->toolbar, get_tool_bar_show());
+
/* safe to drop the reference to the tab_builder as the container is
* referenced by the notebook now.
*/