summaryrefslogtreecommitdiff
path: root/frontends
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2019-09-04 19:23:06 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2019-09-21 10:53:41 +0100
commit635be1dfb88c01ab6a901f6e88eb3b7187d2c03b (patch)
tree13327c7b95ecc5dc31b5b5944c01bb99655aabcf /frontends
parentbcb2b7a2c4425ba888f6236890d35a8f2d037360 (diff)
downloadnetsurf-635be1dfb88c01ab6a901f6e88eb3b7187d2c03b.tar.gz
netsurf-635be1dfb88c01ab6a901f6e88eb3b7187d2c03b.tar.bz2
make toolbar and menubar hiding work appropriately
Diffstat (limited to 'frontends')
-rw-r--r--frontends/gtk/menu.c58
-rw-r--r--frontends/gtk/menu.h5
-rw-r--r--frontends/gtk/scaffolding.c65
-rw-r--r--frontends/gtk/toolbar.c13
-rw-r--r--frontends/gtk/toolbar.h8
-rw-r--r--frontends/gtk/window.c230
-rw-r--r--frontends/gtk/window.h7
7 files changed, 247 insertions, 139 deletions
diff --git a/frontends/gtk/menu.c b/frontends/gtk/menu.c
index 6589fcacd..08af970f3 100644
--- a/frontends/gtk/menu.c
+++ b/frontends/gtk/menu.c
@@ -85,15 +85,17 @@ nsgtk_menu_add_image_item(GtkMenu *menu,
#define IMAGE_ITEM(p, q, r, s, t)\
nsgtk_menu_add_image_item(s->p##_menu, &(s->q##_menuitem), #r, t)
-#define CHECK_ITEM(p, q, r, s)\
- s->q##_menuitem = GTK_CHECK_MENU_ITEM(\
+#define CHECK_ITEM(p, q, r, s) \
+ do { \
+ s->q##_menuitem = GTK_CHECK_MENU_ITEM( \
gtk_check_menu_item_new_with_mnemonic(\
messages_get(#r)));\
- if ((s->q##_menuitem != NULL) && (s->p##_menu != NULL)) {\
- gtk_menu_shell_append(GTK_MENU_SHELL(s->p##_menu),\
- GTK_WIDGET(s->q##_menuitem));\
- gtk_widget_show(GTK_WIDGET(s->q##_menuitem));\
- }
+ if ((s->q##_menuitem != NULL) && (s->p##_menu != NULL)) { \
+ gtk_menu_shell_append(GTK_MENU_SHELL(s->p##_menu), \
+ GTK_WIDGET(s->q##_menuitem)); \
+ gtk_widget_show(GTK_WIDGET(s->q##_menuitem)); \
+ } \
+ } while(0)
#define SET_SUBMENU(q, r) \
do { \
@@ -224,28 +226,36 @@ static struct nsgtk_tabs_submenu *nsgtk_menu_tabs_submenu(GtkAccelGroup *group)
static struct nsgtk_toolbars_submenu *
nsgtk_menu_toolbars_submenu(GtkAccelGroup *group)
{
- struct nsgtk_toolbars_submenu *ret =
- malloc(sizeof(struct nsgtk_toolbars_submenu));
- if (ret == NULL) {
+ struct nsgtk_toolbars_submenu *tmenu;
+
+ tmenu = malloc(sizeof(struct nsgtk_toolbars_submenu));
+ if (tmenu == NULL) {
nsgtk_warning(messages_get("NoMemory"), 0);
return NULL;
}
- ret->toolbars_menu = GTK_MENU(gtk_menu_new());
- if (ret->toolbars_menu == NULL) {
+
+ tmenu->toolbars_menu = GTK_MENU(gtk_menu_new());
+ if (tmenu->toolbars_menu == NULL) {
nsgtk_warning(messages_get("NoMemory"), 0);
- free(ret);
+ free(tmenu);
return NULL;
}
- CHECK_ITEM(toolbars, menubar, gtkMenuBar, ret)
- if (ret->menubar_menuitem != NULL)
- gtk_check_menu_item_set_active(ret->menubar_menuitem, TRUE);
- CHECK_ITEM(toolbars, toolbar, gtkToolBar, ret)
- if (ret->toolbar_menuitem != NULL)
- gtk_check_menu_item_set_active(ret->toolbar_menuitem, TRUE);
- ADD_SEP(toolbars, ret);
- IMAGE_ITEM(toolbars, customize, gtkCustomize, ret, group);
- return ret;
+ CHECK_ITEM(toolbars, menubar, gtkMenuBar, tmenu);
+ if (tmenu->menubar_menuitem != NULL) {
+ gtk_check_menu_item_set_active(tmenu->menubar_menuitem, TRUE);
+ }
+
+ CHECK_ITEM(toolbars, toolbar, gtkToolBar, tmenu);
+ if (tmenu->toolbar_menuitem != NULL) {
+ gtk_check_menu_item_set_active(tmenu->toolbar_menuitem, TRUE);
+ }
+
+ ADD_SEP(toolbars, tmenu);
+
+ IMAGE_ITEM(toolbars, customize, gtkCustomize, tmenu, group);
+
+ return tmenu;
}
/**
@@ -558,9 +568,11 @@ struct nsgtk_popup_menu *nsgtk_popup_menu_create(GtkAccelGroup *group)
ADD_NAMED_SEP(popup, second, nmenu);
+ IMAGE_ITEM(popup, toolbars, gtkToolbars, nmenu, group);
+ SET_SUBMENU(toolbars, nmenu);
+
IMAGE_ITEM(popup, tools, gtkTools, nmenu, group);
SET_SUBMENU(tools, nmenu);
- IMAGE_ITEM(popup, customize, gtkCustomize, nmenu, group);
return nmenu;
}
diff --git a/frontends/gtk/menu.h b/frontends/gtk/menu.h
index 4656e225c..822e463d2 100644
--- a/frontends/gtk/menu.h
+++ b/frontends/gtk/menu.h
@@ -193,11 +193,10 @@ struct nsgtk_popup_menu {
GtkWidget *second_separator;
+ GtkWidget *toolbars_menuitem;
+ struct nsgtk_toolbars_submenu *toolbars_submenu;
GtkWidget *tools_menuitem;
struct nsgtk_tools_menu *tools_submenu;
-
- GtkWidget *customize_menuitem;
-
};
struct nsgtk_link_menu {
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 7c68b9493..14ed23058 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -120,7 +120,7 @@ static struct browser_window_features current_menu_features;
* \param custom flag to indicate if menu customisation is hidden.
*/
static void
-popup_menu_hide(struct nsgtk_popup_menu *menu, bool nav, bool cnp, bool custom)
+popup_menu_hide(struct nsgtk_popup_menu *menu, bool nav, bool cnp)
{
if (nav) {
gtk_widget_hide(GTK_WIDGET(menu->back_menuitem));
@@ -139,9 +139,6 @@ popup_menu_hide(struct nsgtk_popup_menu *menu, bool nav, bool cnp, bool custom)
gtk_widget_hide(menu->second_separator);
}
- if (custom) {
- gtk_widget_hide(GTK_WIDGET(menu->customize_menuitem));
- }
}
@@ -155,7 +152,7 @@ popup_menu_hide(struct nsgtk_popup_menu *menu, bool nav, bool cnp, bool custom)
* \param custom flag to indicate if menu customisation is visible.
*/
static void
-popup_menu_show(struct nsgtk_popup_menu *menu, bool nav, bool cnp, bool custom)
+popup_menu_show(struct nsgtk_popup_menu *menu, bool nav, bool cnp)
{
if (nav) {
gtk_widget_show(GTK_WIDGET(menu->back_menuitem));
@@ -174,9 +171,6 @@ popup_menu_show(struct nsgtk_popup_menu *menu, bool nav, bool cnp, bool custom)
gtk_widget_show(menu->second_separator);
}
- if (custom) {
- gtk_widget_show(GTK_WIDGET(menu->customize_menuitem));
- }
}
@@ -322,7 +316,7 @@ nsgtk_scaffolding_enable_edit_actions_sensitivity(struct nsgtk_scaffolding *g)
g->menus[CUT_BUTTON].sensitivity = true;
nsgtk_scaffolding_set_sensitivity(g);
- popup_menu_show(g->popup_menu, false, true, false);
+ popup_menu_show(g->popup_menu, false, true);
}
/* signal handling functions for the toolbar, URL bar, and menu bar */
@@ -615,10 +609,12 @@ nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *gs = (struct nsgtk_scaffolding *)data;
GtkCheckMenuItem *bmcmi; /* burger menu check */
- GtkCheckMenuItem *mbcmi; /* menu bar check*/
+ GtkCheckMenuItem *mbcmi; /* menu bar check */
+ GtkCheckMenuItem *tbcmi; /* popup menu check */
bmcmi = GTK_CHECK_MENU_ITEM(gs->burger_menu->view_submenu->toolbars_submenu->menubar_menuitem);
mbcmi = GTK_CHECK_MENU_ITEM(gs->menu_bar->view_submenu->toolbars_submenu->menubar_menuitem);
+ tbcmi = GTK_CHECK_MENU_ITEM(gs->popup_menu->toolbars_submenu->menubar_menuitem);
/* ensure menubar and burger menu checkboxes are both updated */
if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) {
@@ -630,10 +626,12 @@ nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
gtk_check_menu_item_set_active(mbcmi, TRUE);
}
+ if (gtk_check_menu_item_get_active(tbcmi) == FALSE) {
+ gtk_check_menu_item_set_active(tbcmi, TRUE);
+ }
+
gtk_widget_show(GTK_WIDGET(gs->menu_bar->bar_menu));
- popup_menu_show(gs->popup_menu, true, true, true);
- popup_menu_hide(gs->popup_menu, false, false, false);
} else {
if (gtk_check_menu_item_get_active(bmcmi) == TRUE) {
gtk_check_menu_item_set_active(bmcmi, FALSE);
@@ -643,10 +641,11 @@ nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
gtk_check_menu_item_set_active(mbcmi, FALSE);
}
- gtk_widget_hide(GTK_WIDGET(gs->menu_bar->bar_menu));
-
- popup_menu_show(gs->popup_menu, true, true, true);
+ if (gtk_check_menu_item_get_active(tbcmi) == TRUE) {
+ gtk_check_menu_item_set_active(tbcmi, FALSE);
+ }
+ gtk_widget_hide(GTK_WIDGET(gs->menu_bar->bar_menu));
}
return TRUE;
}
@@ -658,9 +657,11 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
struct nsgtk_scaffolding *gs = (struct nsgtk_scaffolding *)data;
GtkCheckMenuItem *bmcmi; /* burger menu check */
GtkCheckMenuItem *mbcmi; /* menu bar check */
+ GtkCheckMenuItem *tbcmi; /* popup menu check */
bmcmi = GTK_CHECK_MENU_ITEM(gs->burger_menu->view_submenu->toolbars_submenu->toolbar_menuitem);
mbcmi = GTK_CHECK_MENU_ITEM(gs->menu_bar->view_submenu->toolbars_submenu->toolbar_menuitem);
+ tbcmi = GTK_CHECK_MENU_ITEM(gs->popup_menu->toolbars_submenu->toolbar_menuitem);
/* ensure menubar and burger menu checkboxes are both updated */
if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) {
@@ -672,7 +673,11 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
gtk_check_menu_item_set_active(mbcmi, TRUE);
}
- //gtk_widget_show(GTK_WIDGET(g->tool_bar));
+ if (gtk_check_menu_item_get_active(tbcmi) == FALSE) {
+ gtk_check_menu_item_set_active(tbcmi, TRUE);
+ }
+
+ nsgtk_window_toolbar_show(gs, true);
} else {
if (gtk_check_menu_item_get_active(bmcmi) == TRUE) {
gtk_check_menu_item_set_active(bmcmi, FALSE);
@@ -682,7 +687,11 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
gtk_check_menu_item_set_active(mbcmi, FALSE);
}
- //gtk_widget_hide(GTK_WIDGET(g->tool_bar));
+ if (gtk_check_menu_item_get_active(tbcmi) == TRUE) {
+ gtk_check_menu_item_set_active(tbcmi, FALSE);
+ }
+
+ nsgtk_window_toolbar_show(gs, false);
}
return TRUE;
}
@@ -828,13 +837,21 @@ create_scaffolding_popup_menu(struct nsgtk_scaffolding *gs, GtkAccelGroup *group
G_CALLBACK(nsgtk_window_popup_menu_hidden),
gs);
- g_signal_connect(nmenu->customize_menuitem,
+ g_signal_connect(nmenu->toolbars_submenu->menubar_menuitem,
+ "toggled",
+ G_CALLBACK(nsgtk_on_menubar_activate_menu),
+ gs);
+ g_signal_connect(nmenu->toolbars_submenu->toolbar_menuitem,
+ "toggled",
+ G_CALLBACK(nsgtk_on_toolbar_activate_menu),
+ gs);
+ g_signal_connect(nmenu->toolbars_submenu->customize_menuitem,
"activate",
G_CALLBACK(nsgtk_on_customize_activate_menu),
gs);
/* set initial popup menu visibility */
- popup_menu_hide(nmenu, false, false, true);
+ popup_menu_hide(nmenu, false, false);
return nmenu;
}
@@ -1411,8 +1428,7 @@ void nsgtk_scaffolding_set_sensitivity(struct nsgtk_scaffolding *g)
nserror nsgtk_scaffolding_toolbar_context_menu(struct nsgtk_scaffolding *gs)
{
/* set visibility for right-click popup menu */
- popup_menu_hide(gs->popup_menu, false, true, false);
- popup_menu_show(gs->popup_menu, false, false, true);
+ popup_menu_hide(gs->popup_menu, false, true);
nsgtk_menu_popup_at_pointer(gs->popup_menu->popup_menu, NULL);
@@ -1445,11 +1461,6 @@ nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g,
if (current_menu_features.link != NULL) {
/* menu is opening over a link */
gtkmenu = g->link_menu->link_menu;
- } else if (gtk_widget_get_visible(GTK_WIDGET(g->menu_bar->bar_menu)) == FALSE) {
- gtkmenu = g->burger_menu->burger_menu;
-
- nsgtk_scaffolding_update_edit_actions_sensitivity(g);
-
} else {
gtkmenu = g->popup_menu->popup_menu;
@@ -1473,8 +1484,6 @@ nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g,
gtk_widget_show(GTK_WIDGET(g->popup_menu->paste_menuitem));
}
- /* hide customise */
- popup_menu_hide(g->popup_menu, false, false, true);
}
nsgtk_menu_popup_at_pointer(gtkmenu, NULL);
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 02097ea13..f595c05d9 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -3758,3 +3758,16 @@ nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb,
return NSERROR_OK;
}
+
+
+/* exported interface documented in toolbar.h */
+nserror nsgtk_toolbar_show(struct nsgtk_toolbar *tb, bool show)
+{
+ if (show) {
+ gtk_widget_show(GTK_WIDGET(tb->widget));
+ } else {
+ gtk_widget_hide(GTK_WIDGET(tb->widget));
+
+ }
+ return NSERROR_OK;
+}
diff --git a/frontends/gtk/toolbar.h b/frontends/gtk/toolbar.h
index dc229e788..75fb3abfa 100644
--- a/frontends/gtk/toolbar.h
+++ b/frontends/gtk/toolbar.h
@@ -95,6 +95,14 @@ nserror nsgtk_toolbar_set_websearch_image(struct nsgtk_toolbar *tb, GdkPixbuf *p
*/
nserror nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb, nsgtk_toolbar_button itemid);
+/**
+ * set the toolbar to be shown or hidden
+ *
+ * \param toolbar A toolbar returned from a creation
+ * \param show true to show the toolbar and false to hide it.
+ * \return NSERROR_OK on success
+ */
+nserror nsgtk_toolbar_show(struct nsgtk_toolbar *tb, bool show);
/**
* sets up the images for scaffolding.
diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c
index 0daf0fefb..f0eb7431f 100644
--- a/frontends/gtk/window.c
+++ b/frontends/gtk/window.c
@@ -66,9 +66,6 @@
static GtkWidget *select_menu;
static struct form_control *select_menu_control;
-static void nsgtk_select_menu_clicked(GtkCheckMenuItem *checkmenuitem,
- gpointer user_data);
-
struct gui_window {
/**
* The gtk scaffold object containing menu, buttons, url bar, [tabs],
@@ -138,42 +135,12 @@ struct gui_window *window_list = NULL;
/** flag controlling opening of tabs in the background */
int temp_open_background = -1;
-struct nsgtk_scaffolding *nsgtk_get_scaffold(struct gui_window *g)
-{
- return g->scaffold;
-}
-
-struct browser_window *nsgtk_get_browser_window(struct gui_window *g)
-{
- return g->bw;
-}
-
-unsigned long nsgtk_window_get_signalhandler(struct gui_window *g, int i)
-{
- return g->signalhandler[i];
-}
-
-GtkLayout *nsgtk_window_get_layout(struct gui_window *g)
-{
- return g->layout;
-}
-
-GtkWidget *nsgtk_window_get_tab(struct gui_window *g)
-{
- return g->tab;
-}
-
-void nsgtk_window_set_tab(struct gui_window *g, GtkWidget *w)
-{
- g->tab = w;
-}
-
-
-static void nsgtk_select_menu_clicked(GtkCheckMenuItem *checkmenuitem,
- gpointer user_data)
+static void
+nsgtk_select_menu_clicked(GtkCheckMenuItem *checkmenuitem,
+ gpointer user_data)
{
form_select_process_selection(select_menu_control,
- (intptr_t)user_data);
+ (intptr_t)user_data);
}
#if GTK_CHECK_VERSION(3,0,0)
@@ -270,8 +237,10 @@ nsgtk_window_draw_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
#endif
-static gboolean nsgtk_window_motion_notify_event(GtkWidget *widget,
- GdkEventMotion *event, gpointer data)
+static gboolean
+nsgtk_window_motion_notify_event(GtkWidget *widget,
+ GdkEventMotion *event,
+ gpointer data)
{
struct gui_window *g = data;
bool shift = event->state & GDK_SHIFT_MASK;
@@ -385,8 +354,11 @@ nsgtk_window_button_press_event(GtkWidget *widget,
return TRUE;
}
-static gboolean nsgtk_window_button_release_event(GtkWidget *widget,
- GdkEventButton *event, gpointer data)
+
+static gboolean
+nsgtk_window_button_release_event(GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data)
{
struct gui_window *g = data;
bool shift = event->state & GDK_SHIFT_MASK;
@@ -415,6 +387,7 @@ static gboolean nsgtk_window_button_release_event(GtkWidget *widget,
return TRUE;
}
+
static gboolean
nsgtk_window_scroll_event(GtkWidget *widget,
GdkEventScroll *event,
@@ -502,8 +475,11 @@ nsgtk_window_scroll_event(GtkWidget *widget,
return TRUE;
}
-static gboolean nsgtk_window_keypress_event(GtkWidget *widget,
- GdkEventKey *event, gpointer data)
+
+static gboolean
+nsgtk_window_keypress_event(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
{
struct gui_window *g = data;
uint32_t nskey;
@@ -619,8 +595,11 @@ static gboolean nsgtk_window_keypress_event(GtkWidget *widget,
return TRUE;
}
-static gboolean nsgtk_window_keyrelease_event(GtkWidget *widget,
- GdkEventKey *event, gpointer data)
+
+static gboolean
+nsgtk_window_keyrelease_event(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
{
struct gui_window *g = data;
@@ -628,8 +607,10 @@ static gboolean nsgtk_window_keyrelease_event(GtkWidget *widget,
}
-static void nsgtk_window_input_method_commit(GtkIMContext *ctx,
- const gchar *str, gpointer data)
+static void
+nsgtk_window_input_method_commit(GtkIMContext *ctx,
+ const gchar *str,
+ gpointer data)
{
struct gui_window *g = data;
size_t len = strlen(str), offset = 0;
@@ -644,8 +625,10 @@ static void nsgtk_window_input_method_commit(GtkIMContext *ctx,
}
-static gboolean nsgtk_window_size_allocate_event(GtkWidget *widget,
- GtkAllocation *allocation, gpointer data)
+static gboolean
+nsgtk_window_size_allocate_event(GtkWidget *widget,
+ GtkAllocation *allocation,
+ gpointer data)
{
struct gui_window *g = data;
@@ -685,11 +668,15 @@ nsgtk_paned_notify__position(GObject *gobject, GParamSpec *pspec, gpointer data)
((gtk_paned_get_position(g->paned) * 10000) / (pane_alloc.width - 1)));
}
-/** Set status bar / scroll bar proportion according to user option
- * when pane is resized.
+
+/**
+ * Set status bar / scroll bar proportion according to user option
+ * when pane is resized.
*/
-static gboolean nsgtk_paned_size_allocate_event(GtkWidget *widget,
- GtkAllocation *allocation, gpointer data)
+static gboolean
+nsgtk_paned_size_allocate_event(GtkWidget *widget,
+ GtkAllocation *allocation,
+ gpointer data)
{
gtk_paned_set_position(GTK_PANED(widget),
(nsoption_int(toolbar_status_size) * allocation->width) / 10000);
@@ -697,7 +684,10 @@ static gboolean nsgtk_paned_size_allocate_event(GtkWidget *widget,
return TRUE;
}
-/* destroy the browsing context as there is nothing to display it now */
+
+/**
+ * destroy the browsing context as there is nothing to display it now
+ */
static void window_destroy(GtkWidget *widget, gpointer data)
{
struct gui_window *gw = data;
@@ -708,13 +698,13 @@ static void window_destroy(GtkWidget *widget, gpointer data)
}
-
static struct browser_window *bw_from_gw(void *data)
{
struct gui_window *gw = data;
return gw->bw;
}
+
/**
* Create and open a gtk container (window or tab) for a browsing context.
*
@@ -897,31 +887,6 @@ gui_window_create(struct browser_window *bw,
return g;
}
-/* exported interface documented in window.h */
-nserror
-nsgtk_window_item_activate(struct gui_window *gw, nsgtk_toolbar_button itemid)
-{
- return nsgtk_toolbar_item_activate(gw->toolbar, itemid);
-}
-
-/* exported interface documented in window.h */
-void nsgtk_window_update_all(void)
-{
- struct gui_window *gw;
- for (gw = window_list; gw != NULL; gw = gw->next) {
- nsgtk_tab_options_changed(nsgtk_scaffolding_notebook(gw->scaffold));
- nsgtk_toolbar_update(gw->toolbar);
- /** \todo update search bar */
- browser_window_schedule_reformat(gw->bw);
- }
-}
-
-
-void nsgtk_window_destroy_browser(struct gui_window *gw)
-{
- /* remove tab */
- gtk_widget_destroy(gw->container);
-}
static void gui_window_destroy(struct gui_window *g)
{
@@ -943,6 +908,7 @@ static void gui_window_destroy(struct gui_window *g)
NSLOG(netsurf, INFO, "window list head: %p", window_list);
}
+
/**
* favicon setting for gtk gui window.
*
@@ -977,6 +943,7 @@ gui_window_set_icon(struct gui_window *gw, struct hlcache_handle *icon)
nsgtk_tab_set_icon(gw, gw->icon);
}
+
static bool gui_window_get_scroll(struct gui_window *g, int *sx, int *sy)
{
GtkAdjustment *vadj = nsgtk_layout_get_vadjustment(g->layout);
@@ -991,6 +958,7 @@ static bool gui_window_get_scroll(struct gui_window *g, int *sx, int *sy)
return true;
}
+
static void nsgtk_redraw_caret(struct gui_window *g)
{
int sx, sy;
@@ -1005,6 +973,7 @@ static void nsgtk_redraw_caret(struct gui_window *g)
}
+
static void gui_window_remove_caret(struct gui_window *g)
{
int sx, sy;
@@ -1022,6 +991,7 @@ static void gui_window_remove_caret(struct gui_window *g)
}
+
/**
* Invalidates an area of a GTK browser window
*
@@ -1054,6 +1024,7 @@ nsgtk_window_invalidate_area(struct gui_window *g, const struct rect *rect)
return NSERROR_OK;
}
+
static void gui_window_set_status(struct gui_window *g, const char *text)
{
assert(g);
@@ -1107,6 +1078,7 @@ gui_window_set_scroll(struct gui_window *g, const struct rect *rect)
return NSERROR_OK;
}
+
static void gui_window_update_extent(struct gui_window *g)
{
int w, h;
@@ -1116,8 +1088,9 @@ static void gui_window_update_extent(struct gui_window *g)
}
}
-static void gui_window_set_pointer(struct gui_window *g,
- gui_pointer_shape shape)
+
+static void
+gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
{
GdkCursor *cursor = NULL;
GdkCursorType cursortype;
@@ -1254,13 +1227,16 @@ gui_window_get_dimensions(struct gui_window *gw, int *width, int *height)
return NSERROR_OK;
}
+
static void gui_window_start_selection(struct gui_window *g)
{
gtk_widget_grab_focus(GTK_WIDGET(g->layout));
}
-static void gui_window_create_form_select_menu(struct gui_window *g,
- struct form_control *control)
+
+static void
+gui_window_create_form_select_menu(struct gui_window *g,
+ struct form_control *control)
{
intptr_t item;
struct form_option *option;
@@ -1425,6 +1401,7 @@ gui_search_web_provider_update(const char *name, struct bitmap *bitmap)
return NSERROR_OK;
}
+
/**
* GTK frontend web search operation table
*/
@@ -1460,3 +1437,88 @@ static struct gui_window_table window_table = {
};
struct gui_window_table *nsgtk_window_table = &window_table;
+
+
+/* exported interface documented in window.h */
+struct nsgtk_scaffolding *nsgtk_get_scaffold(struct gui_window *g)
+{
+ return g->scaffold;
+}
+
+
+/* exported interface documented in window.h */
+struct browser_window *nsgtk_get_browser_window(struct gui_window *g)
+{
+ return g->bw;
+}
+
+
+/* exported interface documented in window.h */
+unsigned long nsgtk_window_get_signalhandler(struct gui_window *g, int i)
+{
+ return g->signalhandler[i];
+}
+
+
+/* exported interface documented in window.h */
+GtkLayout *nsgtk_window_get_layout(struct gui_window *g)
+{
+ return g->layout;
+}
+
+
+/* exported interface documented in window.h */
+GtkWidget *nsgtk_window_get_tab(struct gui_window *g)
+{
+ return g->tab;
+}
+
+
+/* exported interface documented in window.h */
+void nsgtk_window_set_tab(struct gui_window *g, GtkWidget *w)
+{
+ g->tab = w;
+}
+
+
+/* exported interface documented in window.h */
+nserror
+nsgtk_window_item_activate(struct gui_window *gw, nsgtk_toolbar_button itemid)
+{
+ return nsgtk_toolbar_item_activate(gw->toolbar, itemid);
+}
+
+
+/* exported interface documented in window.h */
+void nsgtk_window_destroy_browser(struct gui_window *gw)
+{
+ /* remove tab */
+ gtk_widget_destroy(gw->container);
+}
+
+
+/* exported interface documented in window.h */
+nserror nsgtk_window_update_all(void)
+{
+ struct gui_window *gw;
+ for (gw = window_list; gw != NULL; gw = gw->next) {
+ nsgtk_tab_options_changed(nsgtk_scaffolding_notebook(gw->scaffold));
+ nsgtk_toolbar_update(gw->toolbar);
+ /** \todo update search bar */
+ browser_window_schedule_reformat(gw->bw);
+ }
+ return NSERROR_OK;
+}
+
+
+/* exported interface documented in window.h */
+nserror nsgtk_window_toolbar_show(struct nsgtk_scaffolding *gs, bool show)
+{
+ struct gui_window *gw;
+ for (gw = window_list; gw != NULL; gw = gw->next) {
+ if (gw->scaffold == gs) {
+ nsgtk_toolbar_show(gw->toolbar, show);
+ }
+ }
+ return NSERROR_OK;
+}
diff --git a/frontends/gtk/window.h b/frontends/gtk/window.h
index b6e00a604..ae3dae16f 100644
--- a/frontends/gtk/window.h
+++ b/frontends/gtk/window.h
@@ -52,7 +52,12 @@ struct nsgtk_scaffolding *nsgtk_get_scaffold(struct gui_window *gw);
* toolbar size and style is changed and the browser window contents
* redrawn.
*/
-void nsgtk_window_update_all(void);
+nserror nsgtk_window_update_all(void);
+
+/**
+ * Windows associated with a scaffold will have their toolbar show state set
+ */
+nserror nsgtk_window_toolbar_show(struct nsgtk_scaffolding *gs, bool show);
/**
* update targets