netsurf: branch vince/gtk-tab-restyle updated. release/3.9-189-g67892ba
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/67892ba18f738224e8c5a...
...commit http://git.netsurf-browser.org/netsurf.git/commit/67892ba18f738224e8c5a6e...
...tree http://git.netsurf-browser.org/netsurf.git/tree/67892ba18f738224e8c5a6e43...
The branch, vince/gtk-tab-restyle has been updated
via 67892ba18f738224e8c5a6e4336b4fe9011c40dd (commit)
from d43df4b133335c62c6bc4d7c6d6a041ca1d7f62f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=67892ba18f738224e8c...
commit 67892ba18f738224e8c5a6e4336b4fe9011c40dd
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
make web search icon setting work properly
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index 91a8118..2c0873d 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -366,6 +366,33 @@ search_web_omni(const char *term,
}
/* exported interface documented in desktop/searchweb.h */
+nserror search_web_get_provider_bitmap(struct bitmap **bitmap_out)
+{
+ struct search_provider *provider;
+ struct bitmap *ico_bitmap = NULL;
+
+ /* must be initialised */
+ if (search_web_ctx.providers == NULL) {
+ return NSERROR_INIT_FAILED;
+ }
+
+ provider = &search_web_ctx.providers[search_web_ctx.current];
+
+ /* set the icon now (if we can) at least to the default */
+ if (provider->ico_handle != NULL) {
+ ico_bitmap = content_get_bitmap(provider->ico_handle);
+ }
+ if ((ico_bitmap == NULL) &&
+ (search_web_ctx.default_ico_handle != NULL)) {
+ ico_bitmap = content_get_bitmap(search_web_ctx.default_ico_handle);
+ }
+
+ *bitmap_out = ico_bitmap;
+ return NSERROR_OK;
+}
+
+
+/* exported interface documented in desktop/searchweb.h */
nserror search_web_select_provider(int selection)
{
struct search_provider *provider;
@@ -520,10 +547,14 @@ nserror search_web_init(const char *provider_fname)
}
/* get default search icon */
- ret = hlcache_handle_retrieve(icon_nsurl, 0, NULL, NULL,
+ ret = hlcache_handle_retrieve(icon_nsurl,
+ 0,
+ NULL,
+ NULL,
default_ico_callback,
&search_web_ctx,
- NULL, CONTENT_IMAGE,
+ NULL,
+ CONTENT_IMAGE,
&search_web_ctx.default_ico_handle);
nsurl_unref(icon_nsurl);
if (ret != NSERROR_OK) {
diff --git a/desktop/searchweb.h b/desktop/searchweb.h
index a96e778..69748b6 100644
--- a/desktop/searchweb.h
+++ b/desktop/searchweb.h
@@ -72,6 +72,17 @@ enum search_web_omni_flags {
*/
nserror search_web_omni(const char *term, enum search_web_omni_flags flags, struct nsurl **url_out);
+
+/**
+ * obtain the current providers bitmap
+ *
+ * obtain the icon representing the current web search provider
+ *
+ * \param bitmap_out recives the resulting bitmap which may be NULL
+ * \return NSERROR_OK on success or NSERROR_INIT_FAILED if not initialised
+ */
+nserror search_web_get_provider_bitmap(struct bitmap **bitmap_out);
+
/**
* Change the currently selected web search provider.
*
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index ba37413..d033a57 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -304,6 +304,7 @@ static nserror nsgtk_init(int argc, char** argv, char **respath)
resource_filename);
free(resource_filename);
}
+ search_web_select_provider(nsoption_int(search_provider));
/* Default favicon */
res = nsgdk_pixbuf_new_from_resname("favicon.png", &favicon_pixbuf);
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index a7414eb..ccfe1a1 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -1449,135 +1449,6 @@ nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active)
}
-static void
-nsgtk_scaffolding_set_websearch(struct nsgtk_scaffolding *g, const char *content)
-{
-#if 0
- /** \todo this code appears technically correct, though
- * currently has no effect at all.
- */
- PangoLayout *lo = gtk_entry_get_layout(GTK_ENTRY(g->webSearchEntry));
- if (lo != NULL) {
- pango_layout_set_font_description(lo, NULL);
- PangoFontDescription *desc = pango_font_description_new();
- if (desc != NULL) {
- pango_font_description_set_style(desc,
- PANGO_STYLE_ITALIC);
- pango_font_description_set_family(desc, "Arial");
- pango_font_description_set_weight(desc,
- PANGO_WEIGHT_ULTRALIGHT);
- pango_font_description_set_size(desc,
- 10 * PANGO_SCALE);
- pango_layout_set_font_description(lo, desc);
- }
-
- PangoAttrList *list = pango_attr_list_new();
- if (list != NULL) {
- PangoAttribute *italic = pango_attr_style_new(
- PANGO_STYLE_ITALIC);
- if (italic != NULL) {
- italic->start_index = 0;
- italic->end_index = strlen(content);
- }
- PangoAttribute *grey = pango_attr_foreground_new(
- 0x7777, 0x7777, 0x7777);
- if (grey != NULL) {
- grey->start_index = 0;
- grey->end_index = strlen(content);
- }
- pango_attr_list_insert(list, italic);
- pango_attr_list_insert(list, grey);
- pango_layout_set_attributes(lo, list);
- pango_attr_list_unref(list);
- }
- pango_layout_set_text(lo, content, -1);
- }
-/* an alternative method */
-/* char *parse = malloc(strlen(content) + 1);
- PangoAttrList *list = pango_layout_get_attributes(lo);
- char *markup = g_strconcat("<span foreground='#777777'><i>", content,
- "</i></span>", NULL);
- pango_parse_markup(markup, -1, 0, &list, &parse, NULL, NULL);
- gtk_widget_show_all(g->webSearchEntry);
-*/
- gtk_entry_set_visibility(GTK_ENTRY(g->webSearchEntry), TRUE);
- gtk_entry_set_text(GTK_ENTRY(g->webSearchEntry), content);
-#endif
-}
-
-
-/**
- * GTK UI callback when search provider details are updated.
- *
- * \param provider_name The providers name.
- * \param provider_bitmap The bitmap representing the provider.
- * \return NSERROR_OK on success else error code.
- */
-static nserror
-gui_search_web_provider_update(const char *provider_name,
- struct bitmap *provider_bitmap)
-{
- struct nsgtk_scaffolding *current;
- GdkPixbuf *srch_pixbuf = NULL;
- char *searchcontent;
-
- NSLOG(netsurf, INFO, "name:%s bitmap %p", provider_name,
- provider_bitmap);
-
- if (provider_bitmap != NULL) {
- srch_pixbuf = nsgdk_pixbuf_get_from_surface(provider_bitmap->surface, 16, 16);
-
- if (srch_pixbuf == NULL) {
- return NSERROR_NOMEM;
- }
- }
-
- /* setup the search content name */
- searchcontent = malloc(strlen(provider_name) + SLEN("Search ") + 1);
- if (searchcontent != NULL) {
- sprintf(searchcontent, "Search %s", provider_name);
- }
-#if 0
- /* set the search provider parameters up in each scaffold */
- for (current = scaf_list; current != NULL; current = current->next) {
- if (current->webSearchEntry == NULL) {
- continue;
- }
-
- /* add ico to each window's toolbar */
- if (srch_pixbuf != NULL) {
- nsgtk_entry_set_icon_from_pixbuf(current->webSearchEntry,
- GTK_ENTRY_ICON_PRIMARY,
- srch_pixbuf);
- } else {
- nsgtk_entry_set_icon_from_stock(current->webSearchEntry,
- GTK_ENTRY_ICON_PRIMARY,
- NSGTK_STOCK_FIND);
- }
-
- /* set search entry text */
- if (searchcontent != NULL) {
- nsgtk_scaffolding_set_websearch(current, searchcontent);
- } else {
- nsgtk_scaffolding_set_websearch(current, provider_name);
- }
- }
-#endif
- free(searchcontent);
-
- if (srch_pixbuf != NULL) {
- g_object_unref(srch_pixbuf);
- }
-
- return NSERROR_OK;
-}
-
-static struct gui_search_web_table search_web_table = {
- .provider_update = gui_search_web_provider_update,
-};
-
-struct gui_search_web_table *nsgtk_search_web_table = &search_web_table;
-
/* exported interface documented in gtk/scaffolding.h */
nserror nsgtk_scaffolding_destroy_all(void)
{
@@ -1618,12 +1489,6 @@ GtkWidget *nsgtk_scaffolding_urlbar(struct nsgtk_scaffolding *g)
}
/* exported interface documented in gtk/scaffolding.h */
-GtkWidget *nsgtk_scaffolding_websearch(struct nsgtk_scaffolding *g)
-{
- return NULL;//g->webSearchEntry;
-}
-
-/* exported interface documented in gtk/scaffolding.h */
GtkToolbar *nsgtk_scaffolding_toolbar(struct nsgtk_scaffolding *g)
{
return NULL;//g->tool_bar;
@@ -1658,15 +1523,6 @@ void nsgtk_scaffolding_reset_offset(struct nsgtk_scaffolding *g)
/* exported interface documented in gtk/scaffolding.h */
-void nsgtk_scaffolding_update_websearch_ref(struct nsgtk_scaffolding *g)
-{
-#if 0
- g->webSearchEntry = gtk_bin_get_child(GTK_BIN(
- g->buttons[WEBSEARCH_ITEM]->button));
-#endif
-}
-
-/* exported interface documented in gtk/scaffolding.h */
void nsgtk_scaffolding_toggle_search_bar_visibility(struct nsgtk_scaffolding *g)
{
gboolean vis;
@@ -1803,7 +1659,6 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
{
nserror res;
struct nsgtk_scaffolding *gs;
- int i;
GtkAccelGroup *group;
gs = calloc(1, sizeof(*gs));
@@ -1916,9 +1771,6 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
/* set icon images */
nsgtk_theme_implement(gs);
- /* set web search provider */
- search_web_select_provider(nsoption_int(search_provider));
-
/* finally, show the window. */
gtk_widget_show(GTK_WIDGET(gs->window));
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index a8cea20..825310f 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -28,7 +28,6 @@ struct gui_window;
struct gui_search_web_table;
struct nsurl;
-extern struct gui_search_web_table *nsgtk_search_web_table;
struct gtk_history_window {
@@ -98,11 +97,6 @@ GtkNotebook *nsgtk_scaffolding_notebook(struct nsgtk_scaffolding *g);
GtkWidget *nsgtk_scaffolding_urlbar(struct nsgtk_scaffolding *g);
/**
- * Get the gtk web search entry from a scaffold.
- */
-GtkWidget *nsgtk_scaffolding_websearch(struct nsgtk_scaffolding *g);
-
-/**
* Get the gtk toolbar from a scaffold.
*/
GtkToolbar *nsgtk_scaffolding_toolbar(struct nsgtk_scaffolding *g);
@@ -131,8 +125,6 @@ void nsgtk_scaffolding_reset_offset(struct nsgtk_scaffolding *g);
struct nsgtk_scaffolding *nsgtk_scaffolding_iterate(struct nsgtk_scaffolding *g);
-void nsgtk_scaffolding_update_websearch_ref(struct nsgtk_scaffolding *g);
-
void nsgtk_scaffolding_toggle_search_bar_visibility(struct nsgtk_scaffolding *g);
/**
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 694c271..ae87010 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -67,6 +67,8 @@
#include "gtk/hotlist.h"
#include "gtk/cookies.h"
#include "gtk/about.h"
+#include "gtk/gdk.h"
+#include "gtk/bitmap.h"
#include "gtk/toolbar.h"
/**
@@ -641,8 +643,12 @@ make_toolbar_item_websearch(void)
GTK_ICON_SIZE_LARGE_TOOLBAR)),
"[websearch]");
} else {
- GtkWidget *entry = nsgtk_entry_new();
+ nserror res;
+ GtkWidget *entry;
+ struct bitmap *bitmap;
+ GdkPixbuf *pixbuf = NULL;
+ entry = nsgtk_entry_new();
item = gtk_tool_item_new();
if ((entry == NULL) || (item == NULL)) {
@@ -651,9 +657,21 @@ make_toolbar_item_websearch(void)
gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1);
- nsgtk_entry_set_icon_from_stock(entry,
- GTK_ENTRY_ICON_PRIMARY,
- NSGTK_STOCK_INFO);
+ res = search_web_get_provider_bitmap(&bitmap);
+ if ((res == NSERROR_OK) && (bitmap != NULL)) {
+ pixbuf = nsgdk_pixbuf_get_from_surface(bitmap->surface,
+ 16, 16);
+ }
+
+ if (pixbuf != NULL) {
+ nsgtk_entry_set_icon_from_pixbuf(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ pixbuf);
+ } else {
+ nsgtk_entry_set_icon_from_stock(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ NSGTK_STOCK_INFO);
+ }
gtk_container_add(GTK_CONTAINER(item), entry);
}
@@ -3629,6 +3647,33 @@ nserror nsgtk_toolbar_set_url(struct nsgtk_toolbar *tb, nsurl *url)
/* exported interface documented in toolbar.h */
nserror
+nsgtk_toolbar_set_websearch_image(struct nsgtk_toolbar *tb, GdkPixbuf *pixbuf)
+{
+ GtkWidget *entry;
+
+ if (tb->buttons[WEBSEARCH_ITEM]->button == NULL) {
+ /* no toolbar item */
+ return NSERROR_INVALID;
+ }
+
+ entry = gtk_bin_get_child(GTK_BIN(tb->buttons[WEBSEARCH_ITEM]->button));
+
+ if (pixbuf != NULL) {
+ nsgtk_entry_set_icon_from_pixbuf(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ pixbuf);
+ } else {
+ nsgtk_entry_set_icon_from_stock(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ NSGTK_STOCK_INFO);
+ }
+
+ return NSERROR_OK;
+}
+
+
+/* exported interface documented in toolbar.h */
+nserror
nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb,
nsgtk_toolbar_button itemid)
{
diff --git a/frontends/gtk/toolbar.h b/frontends/gtk/toolbar.h
index b89774b..c302194 100644
--- a/frontends/gtk/toolbar.h
+++ b/frontends/gtk/toolbar.h
@@ -70,6 +70,10 @@ nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active);
*/
nserror nsgtk_toolbar_set_url(struct nsgtk_toolbar *tb, nsurl *url);
+/**
+ * set the websearch image
+ */
+nserror nsgtk_toolbar_set_websearch_image(struct nsgtk_toolbar *tb, GdkPixbuf *pixbuf);
/**
* activate the handler for a toolbar item
diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c
index 666e6ea..b43a0ec 100644
--- a/frontends/gtk/window.c
+++ b/frontends/gtk/window.c
@@ -655,7 +655,8 @@ static gboolean nsgtk_window_size_allocate_event(GtkWidget *widget,
}
-/** when the pane position is changed update the user option
+/**
+ * when the pane position is changed update the user option
*
* The slightly awkward implementation with the first allocation flag
* is necessary because the initial window creation does not cause an
@@ -794,6 +795,7 @@ gui_window_create(struct browser_window *bw,
return NULL;
}
+
/* set a default favicon */
g_object_ref(favicon_pixbuf);
g->icon = favicon_pixbuf;
@@ -1196,8 +1198,10 @@ static void gui_window_set_pointer(struct gui_window *g,
}
-static void gui_window_place_caret(struct gui_window *g, int x, int y, int height,
- const struct rect *clip)
+static void
+gui_window_place_caret(struct gui_window *g,
+ int x, int y, int height,
+ const struct rect *clip)
{
nsgtk_redraw_caret(g);
@@ -1302,6 +1306,12 @@ static void gui_window_create_form_select_menu(struct gui_window *g,
nsgtk_menu_popup_at_pointer(GTK_MENU(select_menu), NULL);
}
+
+/**
+ * GTK window UI callback when core needs a file selection gadget
+ *
+ * \param g The gui window on which the gadget has been requested
+ */
static void
gui_window_file_gadget_open(struct gui_window *g,
struct hlcache_handle *hl,
@@ -1336,7 +1346,7 @@ gui_window_file_gadget_open(struct gui_window *g,
/**
- * process miscellaneous window events
+ * GTK window UI callback to process miscellaneous events
*
* \param gw The window receiving the event.
* \param event The event code.
@@ -1374,11 +1384,56 @@ gui_window_event(struct gui_window *gw, enum gui_window_event event)
return NSERROR_OK;
}
+
+/**
+ * GTK window UI callback when core changes the current url
+ *
+ * \param gw The gui window on which the url has been set.
+ * \param url The new url.
+ */
static nserror gui_window_set_url(struct gui_window *gw, nsurl *url)
{
return nsgtk_toolbar_set_url(gw->toolbar, url);
}
+
+/**
+ * GTK UI callback when search provider details are updated.
+ *
+ * \param name The providers name.
+ * \param bitmap The bitmap representing the provider.
+ * \return NSERROR_OK on success else error code.
+ */
+static nserror
+gui_search_web_provider_update(const char *name, struct bitmap *bitmap)
+{
+ struct gui_window *gw;
+ GdkPixbuf *pixbuf = NULL;
+
+ if (bitmap != NULL) {
+ pixbuf = nsgdk_pixbuf_get_from_surface(bitmap->surface, 16, 16);
+ }
+
+ for (gw = window_list; gw != NULL; gw = gw->next) {
+ nsgtk_toolbar_set_websearch_image(gw->toolbar, pixbuf);
+ }
+
+ return NSERROR_OK;
+}
+
+/**
+ * GTK frontend web search operation table
+ */
+static struct gui_search_web_table search_web_table = {
+ .provider_update = gui_search_web_provider_update,
+};
+
+struct gui_search_web_table *nsgtk_search_web_table = &search_web_table;
+
+
+/**
+ * GTK frontend browser window operation table
+ */
static struct gui_window_table window_table = {
.create = gui_window_create,
.destroy = gui_window_destroy,
@@ -1394,10 +1449,10 @@ static struct gui_window_table window_table = {
.place_caret = gui_window_place_caret,
.create_form_select_menu = gui_window_create_form_select_menu,
.file_gadget_open = gui_window_file_gadget_open,
+ .set_url = gui_window_set_url,
/* from scaffold */
.set_title = nsgtk_window_set_title,
- .set_url = gui_window_set_url,
};
struct gui_window_table *nsgtk_window_table = &window_table;
diff --git a/frontends/gtk/window.h b/frontends/gtk/window.h
index a991f03..dd49c71 100644
--- a/frontends/gtk/window.h
+++ b/frontends/gtk/window.h
@@ -20,6 +20,7 @@
#define NETSURF_GTK_WINDOW_H 1
extern struct gui_window_table *nsgtk_window_table;
+extern struct gui_search_web_table *nsgtk_search_web_table;
typedef enum nsgtk_window_signals {
NSGTK_WINDOW_SIGNAL_CLICK,
-----------------------------------------------------------------------
Summary of changes:
desktop/searchweb.c | 35 +++++++++-
desktop/searchweb.h | 11 ++++
frontends/gtk/gui.c | 1 +
frontends/gtk/scaffolding.c | 148 -------------------------------------------
frontends/gtk/scaffolding.h | 8 ---
frontends/gtk/toolbar.c | 53 ++++++++++++++--
frontends/gtk/toolbar.h | 4 ++
frontends/gtk/window.c | 65 +++++++++++++++++--
frontends/gtk/window.h | 1 +
9 files changed, 159 insertions(+), 167 deletions(-)
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index 91a8118..2c0873d 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -366,6 +366,33 @@ search_web_omni(const char *term,
}
/* exported interface documented in desktop/searchweb.h */
+nserror search_web_get_provider_bitmap(struct bitmap **bitmap_out)
+{
+ struct search_provider *provider;
+ struct bitmap *ico_bitmap = NULL;
+
+ /* must be initialised */
+ if (search_web_ctx.providers == NULL) {
+ return NSERROR_INIT_FAILED;
+ }
+
+ provider = &search_web_ctx.providers[search_web_ctx.current];
+
+ /* set the icon now (if we can) at least to the default */
+ if (provider->ico_handle != NULL) {
+ ico_bitmap = content_get_bitmap(provider->ico_handle);
+ }
+ if ((ico_bitmap == NULL) &&
+ (search_web_ctx.default_ico_handle != NULL)) {
+ ico_bitmap = content_get_bitmap(search_web_ctx.default_ico_handle);
+ }
+
+ *bitmap_out = ico_bitmap;
+ return NSERROR_OK;
+}
+
+
+/* exported interface documented in desktop/searchweb.h */
nserror search_web_select_provider(int selection)
{
struct search_provider *provider;
@@ -520,10 +547,14 @@ nserror search_web_init(const char *provider_fname)
}
/* get default search icon */
- ret = hlcache_handle_retrieve(icon_nsurl, 0, NULL, NULL,
+ ret = hlcache_handle_retrieve(icon_nsurl,
+ 0,
+ NULL,
+ NULL,
default_ico_callback,
&search_web_ctx,
- NULL, CONTENT_IMAGE,
+ NULL,
+ CONTENT_IMAGE,
&search_web_ctx.default_ico_handle);
nsurl_unref(icon_nsurl);
if (ret != NSERROR_OK) {
diff --git a/desktop/searchweb.h b/desktop/searchweb.h
index a96e778..69748b6 100644
--- a/desktop/searchweb.h
+++ b/desktop/searchweb.h
@@ -72,6 +72,17 @@ enum search_web_omni_flags {
*/
nserror search_web_omni(const char *term, enum search_web_omni_flags flags, struct nsurl **url_out);
+
+/**
+ * obtain the current providers bitmap
+ *
+ * obtain the icon representing the current web search provider
+ *
+ * \param bitmap_out recives the resulting bitmap which may be NULL
+ * \return NSERROR_OK on success or NSERROR_INIT_FAILED if not initialised
+ */
+nserror search_web_get_provider_bitmap(struct bitmap **bitmap_out);
+
/**
* Change the currently selected web search provider.
*
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index ba37413..d033a57 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -304,6 +304,7 @@ static nserror nsgtk_init(int argc, char** argv, char **respath)
resource_filename);
free(resource_filename);
}
+ search_web_select_provider(nsoption_int(search_provider));
/* Default favicon */
res = nsgdk_pixbuf_new_from_resname("favicon.png", &favicon_pixbuf);
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index a7414eb..ccfe1a1 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -1449,135 +1449,6 @@ nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active)
}
-static void
-nsgtk_scaffolding_set_websearch(struct nsgtk_scaffolding *g, const char *content)
-{
-#if 0
- /** \todo this code appears technically correct, though
- * currently has no effect at all.
- */
- PangoLayout *lo = gtk_entry_get_layout(GTK_ENTRY(g->webSearchEntry));
- if (lo != NULL) {
- pango_layout_set_font_description(lo, NULL);
- PangoFontDescription *desc = pango_font_description_new();
- if (desc != NULL) {
- pango_font_description_set_style(desc,
- PANGO_STYLE_ITALIC);
- pango_font_description_set_family(desc, "Arial");
- pango_font_description_set_weight(desc,
- PANGO_WEIGHT_ULTRALIGHT);
- pango_font_description_set_size(desc,
- 10 * PANGO_SCALE);
- pango_layout_set_font_description(lo, desc);
- }
-
- PangoAttrList *list = pango_attr_list_new();
- if (list != NULL) {
- PangoAttribute *italic = pango_attr_style_new(
- PANGO_STYLE_ITALIC);
- if (italic != NULL) {
- italic->start_index = 0;
- italic->end_index = strlen(content);
- }
- PangoAttribute *grey = pango_attr_foreground_new(
- 0x7777, 0x7777, 0x7777);
- if (grey != NULL) {
- grey->start_index = 0;
- grey->end_index = strlen(content);
- }
- pango_attr_list_insert(list, italic);
- pango_attr_list_insert(list, grey);
- pango_layout_set_attributes(lo, list);
- pango_attr_list_unref(list);
- }
- pango_layout_set_text(lo, content, -1);
- }
-/* an alternative method */
-/* char *parse = malloc(strlen(content) + 1);
- PangoAttrList *list = pango_layout_get_attributes(lo);
- char *markup = g_strconcat("<span foreground='#777777'><i>", content,
- "</i></span>", NULL);
- pango_parse_markup(markup, -1, 0, &list, &parse, NULL, NULL);
- gtk_widget_show_all(g->webSearchEntry);
-*/
- gtk_entry_set_visibility(GTK_ENTRY(g->webSearchEntry), TRUE);
- gtk_entry_set_text(GTK_ENTRY(g->webSearchEntry), content);
-#endif
-}
-
-
-/**
- * GTK UI callback when search provider details are updated.
- *
- * \param provider_name The providers name.
- * \param provider_bitmap The bitmap representing the provider.
- * \return NSERROR_OK on success else error code.
- */
-static nserror
-gui_search_web_provider_update(const char *provider_name,
- struct bitmap *provider_bitmap)
-{
- struct nsgtk_scaffolding *current;
- GdkPixbuf *srch_pixbuf = NULL;
- char *searchcontent;
-
- NSLOG(netsurf, INFO, "name:%s bitmap %p", provider_name,
- provider_bitmap);
-
- if (provider_bitmap != NULL) {
- srch_pixbuf = nsgdk_pixbuf_get_from_surface(provider_bitmap->surface, 16, 16);
-
- if (srch_pixbuf == NULL) {
- return NSERROR_NOMEM;
- }
- }
-
- /* setup the search content name */
- searchcontent = malloc(strlen(provider_name) + SLEN("Search ") + 1);
- if (searchcontent != NULL) {
- sprintf(searchcontent, "Search %s", provider_name);
- }
-#if 0
- /* set the search provider parameters up in each scaffold */
- for (current = scaf_list; current != NULL; current = current->next) {
- if (current->webSearchEntry == NULL) {
- continue;
- }
-
- /* add ico to each window's toolbar */
- if (srch_pixbuf != NULL) {
- nsgtk_entry_set_icon_from_pixbuf(current->webSearchEntry,
- GTK_ENTRY_ICON_PRIMARY,
- srch_pixbuf);
- } else {
- nsgtk_entry_set_icon_from_stock(current->webSearchEntry,
- GTK_ENTRY_ICON_PRIMARY,
- NSGTK_STOCK_FIND);
- }
-
- /* set search entry text */
- if (searchcontent != NULL) {
- nsgtk_scaffolding_set_websearch(current, searchcontent);
- } else {
- nsgtk_scaffolding_set_websearch(current, provider_name);
- }
- }
-#endif
- free(searchcontent);
-
- if (srch_pixbuf != NULL) {
- g_object_unref(srch_pixbuf);
- }
-
- return NSERROR_OK;
-}
-
-static struct gui_search_web_table search_web_table = {
- .provider_update = gui_search_web_provider_update,
-};
-
-struct gui_search_web_table *nsgtk_search_web_table = &search_web_table;
-
/* exported interface documented in gtk/scaffolding.h */
nserror nsgtk_scaffolding_destroy_all(void)
{
@@ -1618,12 +1489,6 @@ GtkWidget *nsgtk_scaffolding_urlbar(struct nsgtk_scaffolding *g)
}
/* exported interface documented in gtk/scaffolding.h */
-GtkWidget *nsgtk_scaffolding_websearch(struct nsgtk_scaffolding *g)
-{
- return NULL;//g->webSearchEntry;
-}
-
-/* exported interface documented in gtk/scaffolding.h */
GtkToolbar *nsgtk_scaffolding_toolbar(struct nsgtk_scaffolding *g)
{
return NULL;//g->tool_bar;
@@ -1658,15 +1523,6 @@ void nsgtk_scaffolding_reset_offset(struct nsgtk_scaffolding *g)
/* exported interface documented in gtk/scaffolding.h */
-void nsgtk_scaffolding_update_websearch_ref(struct nsgtk_scaffolding *g)
-{
-#if 0
- g->webSearchEntry = gtk_bin_get_child(GTK_BIN(
- g->buttons[WEBSEARCH_ITEM]->button));
-#endif
-}
-
-/* exported interface documented in gtk/scaffolding.h */
void nsgtk_scaffolding_toggle_search_bar_visibility(struct nsgtk_scaffolding *g)
{
gboolean vis;
@@ -1803,7 +1659,6 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
{
nserror res;
struct nsgtk_scaffolding *gs;
- int i;
GtkAccelGroup *group;
gs = calloc(1, sizeof(*gs));
@@ -1916,9 +1771,6 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
/* set icon images */
nsgtk_theme_implement(gs);
- /* set web search provider */
- search_web_select_provider(nsoption_int(search_provider));
-
/* finally, show the window. */
gtk_widget_show(GTK_WIDGET(gs->window));
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index a8cea20..825310f 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -28,7 +28,6 @@ struct gui_window;
struct gui_search_web_table;
struct nsurl;
-extern struct gui_search_web_table *nsgtk_search_web_table;
struct gtk_history_window {
@@ -98,11 +97,6 @@ GtkNotebook *nsgtk_scaffolding_notebook(struct nsgtk_scaffolding *g);
GtkWidget *nsgtk_scaffolding_urlbar(struct nsgtk_scaffolding *g);
/**
- * Get the gtk web search entry from a scaffold.
- */
-GtkWidget *nsgtk_scaffolding_websearch(struct nsgtk_scaffolding *g);
-
-/**
* Get the gtk toolbar from a scaffold.
*/
GtkToolbar *nsgtk_scaffolding_toolbar(struct nsgtk_scaffolding *g);
@@ -131,8 +125,6 @@ void nsgtk_scaffolding_reset_offset(struct nsgtk_scaffolding *g);
struct nsgtk_scaffolding *nsgtk_scaffolding_iterate(struct nsgtk_scaffolding *g);
-void nsgtk_scaffolding_update_websearch_ref(struct nsgtk_scaffolding *g);
-
void nsgtk_scaffolding_toggle_search_bar_visibility(struct nsgtk_scaffolding *g);
/**
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 694c271..ae87010 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -67,6 +67,8 @@
#include "gtk/hotlist.h"
#include "gtk/cookies.h"
#include "gtk/about.h"
+#include "gtk/gdk.h"
+#include "gtk/bitmap.h"
#include "gtk/toolbar.h"
/**
@@ -641,8 +643,12 @@ make_toolbar_item_websearch(void)
GTK_ICON_SIZE_LARGE_TOOLBAR)),
"[websearch]");
} else {
- GtkWidget *entry = nsgtk_entry_new();
+ nserror res;
+ GtkWidget *entry;
+ struct bitmap *bitmap;
+ GdkPixbuf *pixbuf = NULL;
+ entry = nsgtk_entry_new();
item = gtk_tool_item_new();
if ((entry == NULL) || (item == NULL)) {
@@ -651,9 +657,21 @@ make_toolbar_item_websearch(void)
gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1);
- nsgtk_entry_set_icon_from_stock(entry,
- GTK_ENTRY_ICON_PRIMARY,
- NSGTK_STOCK_INFO);
+ res = search_web_get_provider_bitmap(&bitmap);
+ if ((res == NSERROR_OK) && (bitmap != NULL)) {
+ pixbuf = nsgdk_pixbuf_get_from_surface(bitmap->surface,
+ 16, 16);
+ }
+
+ if (pixbuf != NULL) {
+ nsgtk_entry_set_icon_from_pixbuf(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ pixbuf);
+ } else {
+ nsgtk_entry_set_icon_from_stock(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ NSGTK_STOCK_INFO);
+ }
gtk_container_add(GTK_CONTAINER(item), entry);
}
@@ -3629,6 +3647,33 @@ nserror nsgtk_toolbar_set_url(struct nsgtk_toolbar *tb, nsurl *url)
/* exported interface documented in toolbar.h */
nserror
+nsgtk_toolbar_set_websearch_image(struct nsgtk_toolbar *tb, GdkPixbuf *pixbuf)
+{
+ GtkWidget *entry;
+
+ if (tb->buttons[WEBSEARCH_ITEM]->button == NULL) {
+ /* no toolbar item */
+ return NSERROR_INVALID;
+ }
+
+ entry = gtk_bin_get_child(GTK_BIN(tb->buttons[WEBSEARCH_ITEM]->button));
+
+ if (pixbuf != NULL) {
+ nsgtk_entry_set_icon_from_pixbuf(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ pixbuf);
+ } else {
+ nsgtk_entry_set_icon_from_stock(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ NSGTK_STOCK_INFO);
+ }
+
+ return NSERROR_OK;
+}
+
+
+/* exported interface documented in toolbar.h */
+nserror
nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb,
nsgtk_toolbar_button itemid)
{
diff --git a/frontends/gtk/toolbar.h b/frontends/gtk/toolbar.h
index b89774b..c302194 100644
--- a/frontends/gtk/toolbar.h
+++ b/frontends/gtk/toolbar.h
@@ -70,6 +70,10 @@ nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active);
*/
nserror nsgtk_toolbar_set_url(struct nsgtk_toolbar *tb, nsurl *url);
+/**
+ * set the websearch image
+ */
+nserror nsgtk_toolbar_set_websearch_image(struct nsgtk_toolbar *tb, GdkPixbuf *pixbuf);
/**
* activate the handler for a toolbar item
diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c
index 666e6ea..b43a0ec 100644
--- a/frontends/gtk/window.c
+++ b/frontends/gtk/window.c
@@ -655,7 +655,8 @@ static gboolean nsgtk_window_size_allocate_event(GtkWidget *widget,
}
-/** when the pane position is changed update the user option
+/**
+ * when the pane position is changed update the user option
*
* The slightly awkward implementation with the first allocation flag
* is necessary because the initial window creation does not cause an
@@ -794,6 +795,7 @@ gui_window_create(struct browser_window *bw,
return NULL;
}
+
/* set a default favicon */
g_object_ref(favicon_pixbuf);
g->icon = favicon_pixbuf;
@@ -1196,8 +1198,10 @@ static void gui_window_set_pointer(struct gui_window *g,
}
-static void gui_window_place_caret(struct gui_window *g, int x, int y, int height,
- const struct rect *clip)
+static void
+gui_window_place_caret(struct gui_window *g,
+ int x, int y, int height,
+ const struct rect *clip)
{
nsgtk_redraw_caret(g);
@@ -1302,6 +1306,12 @@ static void gui_window_create_form_select_menu(struct gui_window *g,
nsgtk_menu_popup_at_pointer(GTK_MENU(select_menu), NULL);
}
+
+/**
+ * GTK window UI callback when core needs a file selection gadget
+ *
+ * \param g The gui window on which the gadget has been requested
+ */
static void
gui_window_file_gadget_open(struct gui_window *g,
struct hlcache_handle *hl,
@@ -1336,7 +1346,7 @@ gui_window_file_gadget_open(struct gui_window *g,
/**
- * process miscellaneous window events
+ * GTK window UI callback to process miscellaneous events
*
* \param gw The window receiving the event.
* \param event The event code.
@@ -1374,11 +1384,56 @@ gui_window_event(struct gui_window *gw, enum gui_window_event event)
return NSERROR_OK;
}
+
+/**
+ * GTK window UI callback when core changes the current url
+ *
+ * \param gw The gui window on which the url has been set.
+ * \param url The new url.
+ */
static nserror gui_window_set_url(struct gui_window *gw, nsurl *url)
{
return nsgtk_toolbar_set_url(gw->toolbar, url);
}
+
+/**
+ * GTK UI callback when search provider details are updated.
+ *
+ * \param name The providers name.
+ * \param bitmap The bitmap representing the provider.
+ * \return NSERROR_OK on success else error code.
+ */
+static nserror
+gui_search_web_provider_update(const char *name, struct bitmap *bitmap)
+{
+ struct gui_window *gw;
+ GdkPixbuf *pixbuf = NULL;
+
+ if (bitmap != NULL) {
+ pixbuf = nsgdk_pixbuf_get_from_surface(bitmap->surface, 16, 16);
+ }
+
+ for (gw = window_list; gw != NULL; gw = gw->next) {
+ nsgtk_toolbar_set_websearch_image(gw->toolbar, pixbuf);
+ }
+
+ return NSERROR_OK;
+}
+
+/**
+ * GTK frontend web search operation table
+ */
+static struct gui_search_web_table search_web_table = {
+ .provider_update = gui_search_web_provider_update,
+};
+
+struct gui_search_web_table *nsgtk_search_web_table = &search_web_table;
+
+
+/**
+ * GTK frontend browser window operation table
+ */
static struct gui_window_table window_table = {
.create = gui_window_create,
.destroy = gui_window_destroy,
@@ -1394,10 +1449,10 @@ static struct gui_window_table window_table = {
.place_caret = gui_window_place_caret,
.create_form_select_menu = gui_window_create_form_select_menu,
.file_gadget_open = gui_window_file_gadget_open,
+ .set_url = gui_window_set_url,
/* from scaffold */
.set_title = nsgtk_window_set_title,
- .set_url = gui_window_set_url,
};
struct gui_window_table *nsgtk_window_table = &window_table;
diff --git a/frontends/gtk/window.h b/frontends/gtk/window.h
index a991f03..dd49c71 100644
--- a/frontends/gtk/window.h
+++ b/frontends/gtk/window.h
@@ -20,6 +20,7 @@
#define NETSURF_GTK_WINDOW_H 1
extern struct gui_window_table *nsgtk_window_table;
+extern struct gui_search_web_table *nsgtk_search_web_table;
typedef enum nsgtk_window_signals {
NSGTK_WINDOW_SIGNAL_CLICK,
--
NetSurf Browser
4 years, 3 months
netsurf: branch vince/gtk-tab-restyle updated. release/3.9-188-gd43df4b
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/d43df4b133335c62c6bc4...
...commit http://git.netsurf-browser.org/netsurf.git/commit/d43df4b133335c62c6bc4d7...
...tree http://git.netsurf-browser.org/netsurf.git/tree/d43df4b133335c62c6bc4d7c6...
The branch, vince/gtk-tab-restyle has been updated
via d43df4b133335c62c6bc4d7c6d6a041ca1d7f62f (commit)
from ac7a9aefce8d622df78e980937771bd5bcc7cee0 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=d43df4b133335c62c6b...
commit d43df4b133335c62c6bc4d7c6d6a041ca1d7f62f
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
make popup context menu work on toolbar
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index d7e7d59..a7414eb 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -79,29 +79,6 @@
#include "gtk/resources.h"
#include "gtk/layout_pango.h"
-/** Macro to define a handler for menu, button and activate events. */
-#define MULTIHANDLER(q)\
-static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g);\
-static gboolean nsgtk_on_##q##_activate_menu(GtkMenuItem *widget, gpointer data)\
-{\
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;\
- return nsgtk_on_##q##_activate(g);\
-}\
-static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g)
-
-
-/**
- * handle menu activate signals by calling toolbar item activation
- */
-#define MENUHANDLER(name, itemid) \
-static gboolean \
-nsgtk_on_##name##_activate_menu(GtkMenuItem *widget, gpointer data) \
-{ \
- struct nsgtk_scaffolding *gs = (struct nsgtk_scaffolding *)data;\
- nsgtk_window_item_activate(gs->top_level, itemid); \
- return TRUE; \
-}
-
/**
* menu entry context
@@ -464,33 +441,16 @@ nsgtk_window_url_changed(GtkWidget *widget,
return nsgtk_completion_update(GTK_ENTRY(widget));
}
-
-/**
- * Event handler for popup menu on toolbar.
- *
- * \param toolbar The toolbar being clicked
- * \param x The x coordinate where the click happened
- * \param y The x coordinate where the click happened
- * \param button the buttons being pressed
- * \param data The context pointer passed when the connection was made.
- * \return TRUE to indicate event handled.
- */
-static gboolean
-nsgtk_window_tool_bar_clicked(GtkToolbar *toolbar,
- gint x,
- gint y,
- gint button,
- gpointer data)
+/* exported interface documented in gtk/scaffolding.h */
+nserror nsgtk_scaffolding_toolbar_context_menu(struct nsgtk_scaffolding *gs)
{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
-
/* set visibility for right-click popup menu */
- popup_menu_hide(g->menu_popup, true, false, true, false);
- popup_menu_show(g->menu_popup, false, false, false, true);
+ popup_menu_hide(gs->menu_popup, true, false, true, false);
+ popup_menu_show(gs->menu_popup, false, false, false, true);
- nsgtk_menu_popup_at_pointer(g->menu_popup->popup_menu, NULL);
+ nsgtk_menu_popup_at_pointer(gs->menu_popup->popup_menu, NULL);
- return TRUE;
+ return NSERROR_OK;
}
@@ -574,6 +534,18 @@ nsgtk_window_tabs_remove(GtkNotebook *notebook,
/* signal handlers for menu entries */
/**
+ * handle menu activate signals by calling toolbar item activation
+ */
+#define MENUHANDLER(name, itemid) \
+static gboolean \
+nsgtk_on_##name##_activate_menu(GtkMenuItem *widget, gpointer data) \
+{ \
+ struct nsgtk_scaffolding *gs = (struct nsgtk_scaffolding *)data;\
+ nsgtk_window_item_activate(gs->top_level, itemid); \
+ return TRUE; \
+}
+
+/**
* menu signal handler for activation on new window item
*/
MENUHANDLER(newwindow, NEWWINDOW_BUTTON);
@@ -623,6 +595,165 @@ MENUHANDLER(closewindow, CLOSEWINDOW_BUTTON);
*/
MENUHANDLER(quit, QUIT_BUTTON);
+/**
+ * menu signal handler for activation on cut item
+ */
+MENUHANDLER(cut, CUT_BUTTON);
+
+/**
+ * menu signal handler for activation on copy item
+ */
+MENUHANDLER(copy, COPY_BUTTON);
+
+/**
+ * menu signal handler for activation on paste item
+ */
+MENUHANDLER(paste, PASTE_BUTTON);
+
+/**
+ * menu signal handler for activation on delete item
+ */
+MENUHANDLER(delete, DELETE_BUTTON);
+
+
+
+/**
+ * menu signal handler for activation on selectall item
+ */
+MENUHANDLER(selectall, SELECTALL_BUTTON);
+
+/**
+ * menu signal handler for activation on preferences item
+ */
+MENUHANDLER(preferences, PREFERENCES_BUTTON);
+
+/**
+ * menu signal handler for activation on zoom plus item
+ */
+MENUHANDLER(zoomplus, ZOOMPLUS_BUTTON);
+
+/**
+ * menu signal handler for activation on zoom minus item
+ */
+MENUHANDLER(zoomminus, ZOOMMINUS_BUTTON);
+
+/**
+ * menu signal handler for activation on zoom normal item
+ */
+MENUHANDLER(zoomnormal, ZOOMNORMAL_BUTTON);
+
+/**
+ * menu signal handler for activation on full screen item
+ */
+MENUHANDLER(fullscreen, FULLSCREEN_BUTTON);
+
+/**
+ * menu signal handler for activation on view source item
+ */
+MENUHANDLER(viewsource, VIEWSOURCE_BUTTON);
+
+/**
+ * menu signal handler for activation on downloads item
+ */
+MENUHANDLER(downloads, DOWNLOADS_BUTTON);
+
+/**
+ * menu signal handler for activation on save window size item
+ */
+MENUHANDLER(savewindowsize, SAVEWINDOWSIZE_BUTTON);
+
+/**
+ * menu signal handler for activation on toggle debug render item
+ */
+MENUHANDLER(toggledebugging, TOGGLEDEBUGGING_BUTTON);
+
+/**
+ * menu signal handler for activation on debug box tree item
+ */
+MENUHANDLER(debugboxtree, SAVEBOXTREE_BUTTON);
+
+/**
+ * menu signal handler for activation on debug dom tree item
+ */
+MENUHANDLER(debugdomtree, SAVEDOMTREE_BUTTON);
+
+/**
+ * menu signal handler for activation on stop item
+ */
+MENUHANDLER(stop, STOP_BUTTON);
+
+/**
+ * menu signal handler for activation on reload item
+ */
+MENUHANDLER(reload, RELOAD_BUTTON);
+
+/**
+ * menu signal handler for activation on back item
+ */
+MENUHANDLER(back, BACK_BUTTON);
+
+/**
+ * menu signal handler for activation on forward item
+ */
+MENUHANDLER(forward, FORWARD_BUTTON);
+
+/**
+ * menu signal handler for activation on home item
+ */
+MENUHANDLER(home, HOME_BUTTON);
+
+/**
+ * menu signal handler for activation on localhistory item
+ */
+MENUHANDLER(localhistory, LOCALHISTORY_BUTTON);
+
+/**
+ * menu signal handler for activation on globalhistory item
+ */
+MENUHANDLER(globalhistory, GLOBALHISTORY_BUTTON);
+
+/**
+ * menu signal handler for activation on addbookmarks item
+ */
+MENUHANDLER(addbookmarks, ADDBOOKMARKS_BUTTON);
+
+/**
+ * menu signal handler for activation on showbookmarks item
+ */
+MENUHANDLER(showbookmarks, SHOWBOOKMARKS_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(showcookies, SHOWCOOKIES_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(openlocation, OPENLOCATION_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(contents, CONTENTS_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(guide, GUIDE_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(info, INFO_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(about, ABOUT_BUTTON);
+
+#undef MENUHANDLER
+
static gboolean
nsgtk_on_savelink_activate_menu(GtkMenuItem *widget, gpointer data)
@@ -649,6 +780,7 @@ nsgtk_on_savelink_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
+
/**
* Handler for opening new window from a link. attached to the popup menu.
*/
@@ -672,6 +804,7 @@ nsgtk_on_link_openwin_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
+
/**
* Handler for opening new tab from a link. attached to the popup menu.
*/
@@ -701,6 +834,7 @@ nsgtk_on_link_opentab_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
+
/**
* Handler for bookmarking a link. attached to the popup menu.
*/
@@ -715,6 +849,7 @@ nsgtk_on_link_bookmark_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
+
/**
* Handler for copying a link. attached to the popup menu.
*/
@@ -734,27 +869,6 @@ nsgtk_on_link_copy_activate_menu(GtkMenuItem *widget, gpointer data)
}
-/**
- * menu signal handler for activation on cut item
- */
-MENUHANDLER(cut, CUT_BUTTON);
-
-/**
- * menu signal handler for activation on copy item
- */
-MENUHANDLER(copy, COPY_BUTTON);
-
-/**
- * menu signal handler for activation on paste item
- */
-MENUHANDLER(paste, PASTE_BUTTON);
-
-/**
- * menu signal handler for activation on delete item
- */
-MENUHANDLER(delete, DELETE_BUTTON);
-
-
static gboolean
nsgtk_on_customize_activate_menu(GtkMenuItem *widget, gpointer data)
{
@@ -763,48 +877,15 @@ nsgtk_on_customize_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-/**
- * menu signal handler for activation on selectall item
- */
-MENUHANDLER(selectall, SELECTALL_BUTTON);
-
-MULTIHANDLER(find)
+static gboolean nsgtk_on_find_activate_menu(GtkMenuItem *widget, gpointer data)
{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+
nsgtk_scaffolding_toggle_search_bar_visibility(g);
return TRUE;
}
-/**
- * menu signal handler for activation on preferences item
- */
-MENUHANDLER(preferences, PREFERENCES_BUTTON);
-
-/**
- * menu signal handler for activation on zoom plus item
- */
-MENUHANDLER(zoomplus, ZOOMPLUS_BUTTON);
-
-/**
- * menu signal handler for activation on zoom minus item
- */
-MENUHANDLER(zoomminus, ZOOMMINUS_BUTTON);
-
-/**
- * menu signal handler for activation on zoom normal item
- */
-MENUHANDLER(zoomnormal, ZOOMNORMAL_BUTTON);
-
-/**
- * menu signal handler for activation on full screen item
- */
-MENUHANDLER(fullscreen, FULLSCREEN_BUTTON);
-
-/**
- * menu signal handler for activation on view source item
- */
-MENUHANDLER(viewsource, VIEWSOURCE_BUTTON);
-
static gboolean
nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
@@ -888,102 +969,29 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-/**
- * menu signal handler for activation on downloads item
- */
-MENUHANDLER(downloads, DOWNLOADS_BUTTON);
-
-/**
- * menu signal handler for activation on save window size item
- */
-MENUHANDLER(savewindowsize, SAVEWINDOWSIZE_BUTTON);
-
-/**
- * menu signal handler for activation on toggle debug render item
- */
-MENUHANDLER(toggledebugging, TOGGLEDEBUGGING_BUTTON);
-
-/**
- * menu signal handler for activation on debug box tree item
- */
-MENUHANDLER(debugboxtree, SAVEBOXTREE_BUTTON);
-
-/**
- * menu signal handler for activation on debug dom tree item
- */
-MENUHANDLER(debugdomtree, SAVEDOMTREE_BUTTON);
-
-/**
- * menu signal handler for activation on stop item
- */
-MENUHANDLER(stop, STOP_BUTTON);
-
-/**
- * menu signal handler for activation on reload item
- */
-MENUHANDLER(reload, RELOAD_BUTTON);
-
-/**
- * menu signal handler for activation on back item
- */
-MENUHANDLER(back, BACK_BUTTON);
-
-/**
- * menu signal handler for activation on forward item
- */
-MENUHANDLER(forward, FORWARD_BUTTON);
-/**
- * menu signal handler for activation on home item
- */
-MENUHANDLER(home, HOME_BUTTON);
-
-/**
- * menu signal handler for activation on localhistory item
- */
-MENUHANDLER(localhistory, LOCALHISTORY_BUTTON);
-
-/**
- * menu signal handler for activation on globalhistory item
- */
-MENUHANDLER(globalhistory, GLOBALHISTORY_BUTTON);
-
-/**
- * menu signal handler for activation on addbookmarks item
- */
-MENUHANDLER(addbookmarks, ADDBOOKMARKS_BUTTON);
-
-/**
- * menu signal handler for activation on showbookmarks item
- */
-MENUHANDLER(showbookmarks, SHOWBOOKMARKS_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(showcookies, SHOWCOOKIES_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(openlocation, OPENLOCATION_BUTTON);
-
-
-MULTIHANDLER(nexttab)
+static gboolean
+nsgtk_on_nexttab_activate_menu(GtkMenuItem *widget, gpointer data)
{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+
nsgtk_tab_next(g->notebook);
return TRUE;
}
-MULTIHANDLER(prevtab)
+
+static gboolean
+nsgtk_on_prevtab_activate_menu(GtkMenuItem *widget, gpointer data)
{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
nsgtk_tab_prev(g->notebook);
return TRUE;
}
+
/**
* menu signal handler for activation on close tab item
*/
@@ -991,33 +999,13 @@ static gboolean
nsgtk_on_closetab_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, CLOSETAB_BUTTON);
- return TRUE;
-}
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(contents, CONTENTS_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(guide, GUIDE_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(info, INFO_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(about, ABOUT_BUTTON);
+ nsgtk_tab_close_current(g->notebook);
+ return TRUE;
+}
-#undef MULTIHANDLER
-#undef MENUHANDLER
+/* end of menu callback handlers */
/**
* attach gtk signal handlers for menus
@@ -1322,7 +1310,9 @@ static nserror nsgtk_search_update(struct gtk_search *search)
return NSERROR_OK;
}
-
+/**
+ * create text search context
+ */
static nserror
nsgtk_search_create(GtkBuilder *builder, struct gtk_search **search_out)
{
@@ -1350,6 +1340,50 @@ nsgtk_search_create(GtkBuilder *builder, struct gtk_search **search_out)
nsgtk_search_update(search);
*search_out = search;
+
+ return NSERROR_OK;
+}
+
+/**
+ * connect signals to search bar
+ */
+static nserror nsgtk_search_connect_signals(struct nsgtk_scaffolding *gs)
+{
+ g_signal_connect(gs->search->buttons[1],
+ "clicked",
+ G_CALLBACK(nsgtk_search_forward_button_clicked),
+ gs);
+
+ g_signal_connect(gs->search->buttons[0],
+ "clicked",
+ G_CALLBACK(nsgtk_search_back_button_clicked),
+ gs);
+
+ g_signal_connect(gs->search->entry,
+ "changed",
+ G_CALLBACK(nsgtk_search_entry_changed),
+ gs);
+
+ g_signal_connect(gs->search->entry,
+ "activate",
+ G_CALLBACK(nsgtk_search_entry_activate),
+ gs);
+
+ g_signal_connect(gs->search->entry,
+ "key-press-event",
+ G_CALLBACK(nsgtk_search_entry_key),
+ gs);
+
+ g_signal_connect(gs->search->buttons[2],
+ "clicked",
+ G_CALLBACK(nsgtk_search_close_button_clicked),
+ gs);
+
+ g_signal_connect(gs->search->caseSens,
+ "toggled",
+ G_CALLBACK(nsgtk_search_entry_changed),
+ gs);
+
return NSERROR_OK;
}
@@ -1471,6 +1505,7 @@ nsgtk_scaffolding_set_websearch(struct nsgtk_scaffolding *g, const char *content
#endif
}
+
/**
* GTK UI callback when search provider details are updated.
*
@@ -1789,8 +1824,10 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
gtk_builder_connect_signals(gs->builder, NULL);
- gs->window = GTK_WINDOW(gtk_builder_get_object(gs->builder, "wndBrowser"));
- gs->notebook = GTK_NOTEBOOK(gtk_builder_get_object(gs->builder, "notebook"));
+ gs->window = GTK_WINDOW(gtk_builder_get_object(gs->builder,
+ "wndBrowser"));
+ gs->notebook = GTK_NOTEBOOK(gtk_builder_get_object(gs->builder,
+ "notebook"));
res = nsgtk_search_create(gs->builder, &gs->search);
@@ -1825,50 +1862,38 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
nsgtk_tab_init(gs);
- g_signal_connect_after(gs->notebook, "page-added",
- G_CALLBACK(nsgtk_window_tabs_add), gs);
- g_signal_connect_after(gs->notebook, "page-removed",
- G_CALLBACK(nsgtk_window_tabs_remove), gs);
-
-#define CONNECT(obj, sig, callback, ptr) \
- g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
+ g_signal_connect_after(gs->notebook,
+ "page-added",
+ G_CALLBACK(nsgtk_window_tabs_add),
+ gs);
+ g_signal_connect_after(gs->notebook,
+ "page-removed",
+ G_CALLBACK(nsgtk_window_tabs_remove),
+ gs);
/* connect main window signals to their handlers. */
- CONNECT(gs->window,
- "delete-event",
- scaffolding_window_delete_event,
- gs);
+ g_signal_connect(gs->window,
+ "delete-event",
+ G_CALLBACK(scaffolding_window_delete_event),
+ gs);
- CONNECT(gs->window, "destroy", scaffolding_window_destroy, gs);
+ g_signal_connect(gs->window,
+ "destroy",
+ G_CALLBACK(scaffolding_window_destroy),
+ gs);
/* toolbar URL bar menu bar search bar signal handlers */
- CONNECT(gs->menu_bar->edit_submenu->edit, "show",
- nsgtk_window_edit_menu_shown, gs);
- CONNECT(gs->menu_bar->edit_submenu->edit, "hide",
- nsgtk_window_edit_menu_hidden, gs);
-
- CONNECT(gs->search->buttons[1], "clicked",
- nsgtk_search_forward_button_clicked, gs);
+ g_signal_connect(gs->menu_bar->edit_submenu->edit,
+ "show",
+ G_CALLBACK(nsgtk_window_edit_menu_shown),
+ gs);
- CONNECT(gs->search->buttons[0], "clicked",
- nsgtk_search_back_button_clicked, gs);
-
- CONNECT(gs->search->entry, "changed", nsgtk_search_entry_changed, gs);
-
- CONNECT(gs->search->entry, "activate", nsgtk_search_entry_activate, gs);
-
- CONNECT(gs->search->entry, "key-press-event",
- nsgtk_search_entry_key, gs);
-
- CONNECT(gs->search->buttons[2], "clicked",
- nsgtk_search_close_button_clicked, gs);
-
- CONNECT(gs->search->caseSens, "toggled",
- nsgtk_search_entry_changed, gs);
+ g_signal_connect(gs->menu_bar->edit_submenu->edit,
+ "hide",
+ G_CALLBACK(nsgtk_window_edit_menu_hidden),
+ gs);
- /** \todo fix popup menu */
- //CONNECT(gs->tool_bar, "popup-context-menu",
- // nsgtk_window_tool_bar_clicked, gs);
+ nsgtk_search_connect_signals(gs);
/* create popup menu */
gs->menu_popup = nsgtk_new_scaffolding_popup(gs, group);
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index 666bc50..a8cea20 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -69,6 +69,11 @@ nserror nsgtk_scaffolding_destroy_all(void);
nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active);
/**
+ * open a toolbar context menu
+ */
+nserror nsgtk_scaffolding_toolbar_context_menu(struct nsgtk_scaffolding *gs);
+
+/**
* Obtain the most recently used scaffolding element.
*
* This allows tabs to be opened in the most recently used window
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index fafa194..694c271 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -66,6 +66,7 @@
#include "gtk/preferences.h"
#include "gtk/hotlist.h"
#include "gtk/cookies.h"
+#include "gtk/about.h"
#include "gtk/toolbar.h"
/**
@@ -131,7 +132,7 @@ struct nsgtk_toolbar {
/**
* context passed to get_bw function
*/
- void *get_bw_ctx;
+ void *get_ctx;
};
@@ -1722,7 +1723,7 @@ toolbar_navigate_to_url(struct nsgtk_toolbar *tb, const char *urltxt)
return res;
}
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_navigate(bw,
url,
@@ -1872,7 +1873,7 @@ back_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
if ((bw != NULL) && browser_window_history_back_available(bw)) {
/* clear potential search effects */
@@ -1904,7 +1905,7 @@ forward_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
if ((bw != NULL) && browser_window_history_forward_available(bw)) {
/* clear potential search effects */
@@ -1934,7 +1935,7 @@ stop_button_clicked_cb(GtkWidget *widget, gpointer data)
{
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
- browser_window_stop(tb->get_bw(tb->get_bw_ctx));
+ browser_window_stop(tb->get_bw(tb->get_ctx));
return TRUE;
}
@@ -1953,7 +1954,7 @@ reload_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
/* clear potential search effects */
browser_window_search_clear(bw);
@@ -2013,7 +2014,7 @@ static gboolean url_entry_activate_cb(GtkWidget *widget, gpointer data)
SEARCH_WEB_OMNI_NONE,
&url);
if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_navigate(
bw, url, NULL, BW_NAVIGATE_HISTORY, NULL, NULL, NULL);
nsurl_unref(url);
@@ -2067,7 +2068,7 @@ static gboolean websearch_entry_activate_cb(GtkWidget *widget, gpointer data)
&url);
if (res == NSERROR_OK) {
temp_open_background = 0;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_create(
BW_CREATE_HISTORY | BW_CREATE_TAB,
@@ -2133,7 +2134,7 @@ newwindow_button_clicked_cb(GtkWidget *widget, gpointer data)
res = nsurl_create(addr, &url);
if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
@@ -2175,7 +2176,7 @@ newtab_button_clicked_cb(GtkWidget *widget, gpointer data)
}
if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_create(BW_CREATE_HISTORY |
BW_CREATE_TAB,
@@ -2234,7 +2235,7 @@ openfile_button_clicked_cb(GtkWidget *widget, gpointer data)
res = nsurl_create(urltxt, &url);
if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_navigate(bw,
url,
NULL,
@@ -2261,24 +2262,6 @@ openfile_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
- * handler for close tab tool bar item clicked signal
- *
- * \param widget The widget the signal is being delivered to.
- * \param data The toolbar context passed when the signal was connected
- * \return TRUE
- */
-static gboolean
-closetab_button_clicked_cb(GtkWidget *widget, gpointer data)
-{
- struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
-
- nsgtk_tab_close_current(GTK_NOTEBOOK(tb->widget));
-
- return TRUE;
-}
-
-
-/**
* handler for close window tool bar item clicked signal
*
* \param widget The widget the signal is being delivered to.
@@ -2312,7 +2295,7 @@ savepage_button_clicked_cb(GtkWidget *widget, gpointer data)
nserror res;
GtkWidget *toplevel;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
res = nsgtk_saveas_dialog(bw,
@@ -2363,7 +2346,7 @@ pdf_button_clicked_cb(GtkWidget *widget, gpointer data)
gchar *filename;
nserror res;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
@@ -2415,7 +2398,7 @@ plaintext_button_clicked_cb(GtkWidget *widget, gpointer data)
gchar *filename;
nserror res;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
@@ -2456,7 +2439,7 @@ print_button_clicked_cb(GtkWidget *widget, gpointer data)
char *settings_fname = NULL;
GtkWidget *toplevel;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
@@ -2574,7 +2557,7 @@ cut_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_cut_clipboard(GTK_EDITABLE(focused));
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_CUT_SELECTION);
}
@@ -2605,7 +2588,7 @@ copy_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_copy_clipboard(GTK_EDITABLE(focused));
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_COPY_SELECTION);
}
@@ -2636,7 +2619,7 @@ paste_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_paste_clipboard(GTK_EDITABLE(focused));
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_PASTE);
}
@@ -2667,7 +2650,7 @@ delete_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_delete_selection(GTK_EDITABLE(focused));
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_CLEAR_SELECTION);
}
@@ -2698,7 +2681,7 @@ selectall_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_select_region(GTK_EDITABLE(focused), 0, -1);
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_SELECT_ALL);
}
@@ -2721,7 +2704,7 @@ preferences_button_clicked_cb(GtkWidget *widget, gpointer data)
GtkWidget *toplevel;
GtkWidget *wndpreferences;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
@@ -2747,7 +2730,7 @@ zoomplus_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_set_scale(bw, 0.05, false);
@@ -2768,7 +2751,7 @@ zoomminus_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_set_scale(bw, -0.05, false);
@@ -2790,7 +2773,7 @@ zoomnormal_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_set_scale(bw, 1.0, true);
@@ -2840,7 +2823,7 @@ viewsource_button_clicked_cb(GtkWidget *widget, gpointer data)
struct browser_window *bw;
GtkWindow *gtkwindow; /* gtk window widget is in */
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
@@ -2917,7 +2900,7 @@ toggledebugging_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_debug(bw, CONTENT_DEBUG_REDRAW);
@@ -2959,7 +2942,7 @@ debugboxtree_button_clicked_cb(GtkWidget *widget, gpointer data)
return TRUE;
}
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_debug_dump(bw, f, CONTENT_DEBUG_RENDER);
@@ -3004,7 +2987,7 @@ debugdomtree_button_clicked_cb(GtkWidget *widget, gpointer data)
return TRUE;
}
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_debug_dump(bw, f, CONTENT_DEBUG_DOM);
@@ -3036,7 +3019,7 @@ localhistory_button_clicked_cb(GtkWidget *widget, gpointer data)
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
if (toplevel != NULL) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = nsgtk_local_history_present(GTK_WINDOW(toplevel), bw);
if (res != NSERROR_OK) {
@@ -3081,7 +3064,7 @@ addbookmarks_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
if (browser_window_has_content(bw)) {
hotlist_add_url(browser_window_access_url(bw));
}
@@ -3366,7 +3349,7 @@ toolbar_connect_signal(struct nsgtk_toolbar *tb, nsgtk_toolbar_button itemid)
nsgtk_completion_connect_signals(entry,
tb->get_bw,
- tb->get_bw_ctx);
+ tb->get_ctx);
break;
@@ -3417,11 +3400,41 @@ static nserror toolbar_connect_signals(struct nsgtk_toolbar *tb)
return NSERROR_OK;
}
+/**
+ * signal handler for toolbar context menu
+ *
+ * \param toolbar The toolbar event is being delivered to
+ * \param x The x coordinate where the click happened
+ * \param y The x coordinate where the click happened
+ * \param button the buttons being pressed
+ * \param data The context pointer passed when the connection was made.
+ * \return TRUE to indicate signal handled.
+ */
+static gboolean
+toolbar_popup_context_menu_cb(GtkToolbar *toolbar,
+ gint x,
+ gint y,
+ gint button,
+ gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct gui_window *gw;
+ struct nsgtk_scaffolding *gs;
+
+ gw = tb->get_ctx; /** \todo stop assuming the context is a gui window */
+
+ gs = nsgtk_get_scaffold(gw);
+
+ nsgtk_scaffolding_toolbar_context_menu(gs);
+
+ return TRUE;
+}
+
/* exported interface documented in toolbar.h */
nserror
nsgtk_toolbar_create(GtkBuilder *builder,
struct browser_window *(*get_bw)(void *ctx),
- void *get_bw_ctx,
+ void *get_ctx,
struct nsgtk_toolbar **tb_out)
{
nserror res;
@@ -3434,13 +3447,18 @@ nsgtk_toolbar_create(GtkBuilder *builder,
}
tb->get_bw = get_bw;
- tb->get_bw_ctx = get_bw_ctx;
+ tb->get_ctx = get_ctx;
/* set the throbber start frame. */
tb->throb_frame = 0;
tb->widget = GTK_TOOLBAR(gtk_builder_get_object(builder, "toolbar"));
gtk_toolbar_set_show_arrow(tb->widget, TRUE);
+ g_signal_connect(tb->widget,
+ "popup-context-menu",
+ G_CALLBACK(toolbar_popup_context_menu_cb),
+ tb);
+
/* allocate button contexts */
for (bidx = BACK_BUTTON; bidx < PLACEHOLDER_BUTTON; bidx++) {
res = toolbar_item_create(bidx, &tb->buttons[bidx]);
@@ -3543,7 +3561,7 @@ nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active)
nserror res;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
/* when activating the throbber simply schedule the next frame update */
if (active) {
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 9bbb300..fbfa5e5 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -100,7 +100,7 @@ TOOLBAR_ITEM(THROBBER_ITEM, throbber, true, NULL)
TOOLBAR_ITEM(NEWWINDOW_BUTTON, newwindow, true, newwindow_button_clicked_cb)
TOOLBAR_ITEM(NEWTAB_BUTTON, newtab, true, newtab_button_clicked_cb)
TOOLBAR_ITEM(OPENFILE_BUTTON, openfile, true, openfile_button_clicked_cb)
-TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, closetab_button_clicked_cb)
+TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, NULL)
TOOLBAR_ITEM(CLOSEWINDOW_BUTTON, closewindow, true, closewindow_button_clicked_cb)
TOOLBAR_ITEM(SAVEPAGE_BUTTON, savepage, true, savepage_button_clicked_cb)
TOOLBAR_ITEM(PDF_BUTTON, pdf, false, pdf_button_clicked_cb)
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/scaffolding.c | 523 +++++++++++++++++++++--------------------
frontends/gtk/scaffolding.h | 5 +
frontends/gtk/toolbar.c | 122 ++++++----
frontends/gtk/toolbar_items.h | 2 +-
4 files changed, 350 insertions(+), 302 deletions(-)
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index d7e7d59..a7414eb 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -79,29 +79,6 @@
#include "gtk/resources.h"
#include "gtk/layout_pango.h"
-/** Macro to define a handler for menu, button and activate events. */
-#define MULTIHANDLER(q)\
-static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g);\
-static gboolean nsgtk_on_##q##_activate_menu(GtkMenuItem *widget, gpointer data)\
-{\
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;\
- return nsgtk_on_##q##_activate(g);\
-}\
-static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g)
-
-
-/**
- * handle menu activate signals by calling toolbar item activation
- */
-#define MENUHANDLER(name, itemid) \
-static gboolean \
-nsgtk_on_##name##_activate_menu(GtkMenuItem *widget, gpointer data) \
-{ \
- struct nsgtk_scaffolding *gs = (struct nsgtk_scaffolding *)data;\
- nsgtk_window_item_activate(gs->top_level, itemid); \
- return TRUE; \
-}
-
/**
* menu entry context
@@ -464,33 +441,16 @@ nsgtk_window_url_changed(GtkWidget *widget,
return nsgtk_completion_update(GTK_ENTRY(widget));
}
-
-/**
- * Event handler for popup menu on toolbar.
- *
- * \param toolbar The toolbar being clicked
- * \param x The x coordinate where the click happened
- * \param y The x coordinate where the click happened
- * \param button the buttons being pressed
- * \param data The context pointer passed when the connection was made.
- * \return TRUE to indicate event handled.
- */
-static gboolean
-nsgtk_window_tool_bar_clicked(GtkToolbar *toolbar,
- gint x,
- gint y,
- gint button,
- gpointer data)
+/* exported interface documented in gtk/scaffolding.h */
+nserror nsgtk_scaffolding_toolbar_context_menu(struct nsgtk_scaffolding *gs)
{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
-
/* set visibility for right-click popup menu */
- popup_menu_hide(g->menu_popup, true, false, true, false);
- popup_menu_show(g->menu_popup, false, false, false, true);
+ popup_menu_hide(gs->menu_popup, true, false, true, false);
+ popup_menu_show(gs->menu_popup, false, false, false, true);
- nsgtk_menu_popup_at_pointer(g->menu_popup->popup_menu, NULL);
+ nsgtk_menu_popup_at_pointer(gs->menu_popup->popup_menu, NULL);
- return TRUE;
+ return NSERROR_OK;
}
@@ -574,6 +534,18 @@ nsgtk_window_tabs_remove(GtkNotebook *notebook,
/* signal handlers for menu entries */
/**
+ * handle menu activate signals by calling toolbar item activation
+ */
+#define MENUHANDLER(name, itemid) \
+static gboolean \
+nsgtk_on_##name##_activate_menu(GtkMenuItem *widget, gpointer data) \
+{ \
+ struct nsgtk_scaffolding *gs = (struct nsgtk_scaffolding *)data;\
+ nsgtk_window_item_activate(gs->top_level, itemid); \
+ return TRUE; \
+}
+
+/**
* menu signal handler for activation on new window item
*/
MENUHANDLER(newwindow, NEWWINDOW_BUTTON);
@@ -623,6 +595,165 @@ MENUHANDLER(closewindow, CLOSEWINDOW_BUTTON);
*/
MENUHANDLER(quit, QUIT_BUTTON);
+/**
+ * menu signal handler for activation on cut item
+ */
+MENUHANDLER(cut, CUT_BUTTON);
+
+/**
+ * menu signal handler for activation on copy item
+ */
+MENUHANDLER(copy, COPY_BUTTON);
+
+/**
+ * menu signal handler for activation on paste item
+ */
+MENUHANDLER(paste, PASTE_BUTTON);
+
+/**
+ * menu signal handler for activation on delete item
+ */
+MENUHANDLER(delete, DELETE_BUTTON);
+
+
+
+/**
+ * menu signal handler for activation on selectall item
+ */
+MENUHANDLER(selectall, SELECTALL_BUTTON);
+
+/**
+ * menu signal handler for activation on preferences item
+ */
+MENUHANDLER(preferences, PREFERENCES_BUTTON);
+
+/**
+ * menu signal handler for activation on zoom plus item
+ */
+MENUHANDLER(zoomplus, ZOOMPLUS_BUTTON);
+
+/**
+ * menu signal handler for activation on zoom minus item
+ */
+MENUHANDLER(zoomminus, ZOOMMINUS_BUTTON);
+
+/**
+ * menu signal handler for activation on zoom normal item
+ */
+MENUHANDLER(zoomnormal, ZOOMNORMAL_BUTTON);
+
+/**
+ * menu signal handler for activation on full screen item
+ */
+MENUHANDLER(fullscreen, FULLSCREEN_BUTTON);
+
+/**
+ * menu signal handler for activation on view source item
+ */
+MENUHANDLER(viewsource, VIEWSOURCE_BUTTON);
+
+/**
+ * menu signal handler for activation on downloads item
+ */
+MENUHANDLER(downloads, DOWNLOADS_BUTTON);
+
+/**
+ * menu signal handler for activation on save window size item
+ */
+MENUHANDLER(savewindowsize, SAVEWINDOWSIZE_BUTTON);
+
+/**
+ * menu signal handler for activation on toggle debug render item
+ */
+MENUHANDLER(toggledebugging, TOGGLEDEBUGGING_BUTTON);
+
+/**
+ * menu signal handler for activation on debug box tree item
+ */
+MENUHANDLER(debugboxtree, SAVEBOXTREE_BUTTON);
+
+/**
+ * menu signal handler for activation on debug dom tree item
+ */
+MENUHANDLER(debugdomtree, SAVEDOMTREE_BUTTON);
+
+/**
+ * menu signal handler for activation on stop item
+ */
+MENUHANDLER(stop, STOP_BUTTON);
+
+/**
+ * menu signal handler for activation on reload item
+ */
+MENUHANDLER(reload, RELOAD_BUTTON);
+
+/**
+ * menu signal handler for activation on back item
+ */
+MENUHANDLER(back, BACK_BUTTON);
+
+/**
+ * menu signal handler for activation on forward item
+ */
+MENUHANDLER(forward, FORWARD_BUTTON);
+
+/**
+ * menu signal handler for activation on home item
+ */
+MENUHANDLER(home, HOME_BUTTON);
+
+/**
+ * menu signal handler for activation on localhistory item
+ */
+MENUHANDLER(localhistory, LOCALHISTORY_BUTTON);
+
+/**
+ * menu signal handler for activation on globalhistory item
+ */
+MENUHANDLER(globalhistory, GLOBALHISTORY_BUTTON);
+
+/**
+ * menu signal handler for activation on addbookmarks item
+ */
+MENUHANDLER(addbookmarks, ADDBOOKMARKS_BUTTON);
+
+/**
+ * menu signal handler for activation on showbookmarks item
+ */
+MENUHANDLER(showbookmarks, SHOWBOOKMARKS_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(showcookies, SHOWCOOKIES_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(openlocation, OPENLOCATION_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(contents, CONTENTS_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(guide, GUIDE_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(info, INFO_BUTTON);
+
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(about, ABOUT_BUTTON);
+
+#undef MENUHANDLER
+
static gboolean
nsgtk_on_savelink_activate_menu(GtkMenuItem *widget, gpointer data)
@@ -649,6 +780,7 @@ nsgtk_on_savelink_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
+
/**
* Handler for opening new window from a link. attached to the popup menu.
*/
@@ -672,6 +804,7 @@ nsgtk_on_link_openwin_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
+
/**
* Handler for opening new tab from a link. attached to the popup menu.
*/
@@ -701,6 +834,7 @@ nsgtk_on_link_opentab_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
+
/**
* Handler for bookmarking a link. attached to the popup menu.
*/
@@ -715,6 +849,7 @@ nsgtk_on_link_bookmark_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
+
/**
* Handler for copying a link. attached to the popup menu.
*/
@@ -734,27 +869,6 @@ nsgtk_on_link_copy_activate_menu(GtkMenuItem *widget, gpointer data)
}
-/**
- * menu signal handler for activation on cut item
- */
-MENUHANDLER(cut, CUT_BUTTON);
-
-/**
- * menu signal handler for activation on copy item
- */
-MENUHANDLER(copy, COPY_BUTTON);
-
-/**
- * menu signal handler for activation on paste item
- */
-MENUHANDLER(paste, PASTE_BUTTON);
-
-/**
- * menu signal handler for activation on delete item
- */
-MENUHANDLER(delete, DELETE_BUTTON);
-
-
static gboolean
nsgtk_on_customize_activate_menu(GtkMenuItem *widget, gpointer data)
{
@@ -763,48 +877,15 @@ nsgtk_on_customize_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-/**
- * menu signal handler for activation on selectall item
- */
-MENUHANDLER(selectall, SELECTALL_BUTTON);
-
-MULTIHANDLER(find)
+static gboolean nsgtk_on_find_activate_menu(GtkMenuItem *widget, gpointer data)
{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+
nsgtk_scaffolding_toggle_search_bar_visibility(g);
return TRUE;
}
-/**
- * menu signal handler for activation on preferences item
- */
-MENUHANDLER(preferences, PREFERENCES_BUTTON);
-
-/**
- * menu signal handler for activation on zoom plus item
- */
-MENUHANDLER(zoomplus, ZOOMPLUS_BUTTON);
-
-/**
- * menu signal handler for activation on zoom minus item
- */
-MENUHANDLER(zoomminus, ZOOMMINUS_BUTTON);
-
-/**
- * menu signal handler for activation on zoom normal item
- */
-MENUHANDLER(zoomnormal, ZOOMNORMAL_BUTTON);
-
-/**
- * menu signal handler for activation on full screen item
- */
-MENUHANDLER(fullscreen, FULLSCREEN_BUTTON);
-
-/**
- * menu signal handler for activation on view source item
- */
-MENUHANDLER(viewsource, VIEWSOURCE_BUTTON);
-
static gboolean
nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
@@ -888,102 +969,29 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-/**
- * menu signal handler for activation on downloads item
- */
-MENUHANDLER(downloads, DOWNLOADS_BUTTON);
-
-/**
- * menu signal handler for activation on save window size item
- */
-MENUHANDLER(savewindowsize, SAVEWINDOWSIZE_BUTTON);
-
-/**
- * menu signal handler for activation on toggle debug render item
- */
-MENUHANDLER(toggledebugging, TOGGLEDEBUGGING_BUTTON);
-
-/**
- * menu signal handler for activation on debug box tree item
- */
-MENUHANDLER(debugboxtree, SAVEBOXTREE_BUTTON);
-
-/**
- * menu signal handler for activation on debug dom tree item
- */
-MENUHANDLER(debugdomtree, SAVEDOMTREE_BUTTON);
-
-/**
- * menu signal handler for activation on stop item
- */
-MENUHANDLER(stop, STOP_BUTTON);
-
-/**
- * menu signal handler for activation on reload item
- */
-MENUHANDLER(reload, RELOAD_BUTTON);
-
-/**
- * menu signal handler for activation on back item
- */
-MENUHANDLER(back, BACK_BUTTON);
-
-/**
- * menu signal handler for activation on forward item
- */
-MENUHANDLER(forward, FORWARD_BUTTON);
-/**
- * menu signal handler for activation on home item
- */
-MENUHANDLER(home, HOME_BUTTON);
-
-/**
- * menu signal handler for activation on localhistory item
- */
-MENUHANDLER(localhistory, LOCALHISTORY_BUTTON);
-
-/**
- * menu signal handler for activation on globalhistory item
- */
-MENUHANDLER(globalhistory, GLOBALHISTORY_BUTTON);
-
-/**
- * menu signal handler for activation on addbookmarks item
- */
-MENUHANDLER(addbookmarks, ADDBOOKMARKS_BUTTON);
-
-/**
- * menu signal handler for activation on showbookmarks item
- */
-MENUHANDLER(showbookmarks, SHOWBOOKMARKS_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(showcookies, SHOWCOOKIES_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(openlocation, OPENLOCATION_BUTTON);
-
-
-MULTIHANDLER(nexttab)
+static gboolean
+nsgtk_on_nexttab_activate_menu(GtkMenuItem *widget, gpointer data)
{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+
nsgtk_tab_next(g->notebook);
return TRUE;
}
-MULTIHANDLER(prevtab)
+
+static gboolean
+nsgtk_on_prevtab_activate_menu(GtkMenuItem *widget, gpointer data)
{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
nsgtk_tab_prev(g->notebook);
return TRUE;
}
+
/**
* menu signal handler for activation on close tab item
*/
@@ -991,33 +999,13 @@ static gboolean
nsgtk_on_closetab_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, CLOSETAB_BUTTON);
- return TRUE;
-}
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(contents, CONTENTS_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(guide, GUIDE_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(info, INFO_BUTTON);
-
-/**
- * menu signal handler for activation on showcookies item
- */
-MENUHANDLER(about, ABOUT_BUTTON);
+ nsgtk_tab_close_current(g->notebook);
+ return TRUE;
+}
-#undef MULTIHANDLER
-#undef MENUHANDLER
+/* end of menu callback handlers */
/**
* attach gtk signal handlers for menus
@@ -1322,7 +1310,9 @@ static nserror nsgtk_search_update(struct gtk_search *search)
return NSERROR_OK;
}
-
+/**
+ * create text search context
+ */
static nserror
nsgtk_search_create(GtkBuilder *builder, struct gtk_search **search_out)
{
@@ -1350,6 +1340,50 @@ nsgtk_search_create(GtkBuilder *builder, struct gtk_search **search_out)
nsgtk_search_update(search);
*search_out = search;
+
+ return NSERROR_OK;
+}
+
+/**
+ * connect signals to search bar
+ */
+static nserror nsgtk_search_connect_signals(struct nsgtk_scaffolding *gs)
+{
+ g_signal_connect(gs->search->buttons[1],
+ "clicked",
+ G_CALLBACK(nsgtk_search_forward_button_clicked),
+ gs);
+
+ g_signal_connect(gs->search->buttons[0],
+ "clicked",
+ G_CALLBACK(nsgtk_search_back_button_clicked),
+ gs);
+
+ g_signal_connect(gs->search->entry,
+ "changed",
+ G_CALLBACK(nsgtk_search_entry_changed),
+ gs);
+
+ g_signal_connect(gs->search->entry,
+ "activate",
+ G_CALLBACK(nsgtk_search_entry_activate),
+ gs);
+
+ g_signal_connect(gs->search->entry,
+ "key-press-event",
+ G_CALLBACK(nsgtk_search_entry_key),
+ gs);
+
+ g_signal_connect(gs->search->buttons[2],
+ "clicked",
+ G_CALLBACK(nsgtk_search_close_button_clicked),
+ gs);
+
+ g_signal_connect(gs->search->caseSens,
+ "toggled",
+ G_CALLBACK(nsgtk_search_entry_changed),
+ gs);
+
return NSERROR_OK;
}
@@ -1471,6 +1505,7 @@ nsgtk_scaffolding_set_websearch(struct nsgtk_scaffolding *g, const char *content
#endif
}
+
/**
* GTK UI callback when search provider details are updated.
*
@@ -1789,8 +1824,10 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
gtk_builder_connect_signals(gs->builder, NULL);
- gs->window = GTK_WINDOW(gtk_builder_get_object(gs->builder, "wndBrowser"));
- gs->notebook = GTK_NOTEBOOK(gtk_builder_get_object(gs->builder, "notebook"));
+ gs->window = GTK_WINDOW(gtk_builder_get_object(gs->builder,
+ "wndBrowser"));
+ gs->notebook = GTK_NOTEBOOK(gtk_builder_get_object(gs->builder,
+ "notebook"));
res = nsgtk_search_create(gs->builder, &gs->search);
@@ -1825,50 +1862,38 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
nsgtk_tab_init(gs);
- g_signal_connect_after(gs->notebook, "page-added",
- G_CALLBACK(nsgtk_window_tabs_add), gs);
- g_signal_connect_after(gs->notebook, "page-removed",
- G_CALLBACK(nsgtk_window_tabs_remove), gs);
-
-#define CONNECT(obj, sig, callback, ptr) \
- g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
+ g_signal_connect_after(gs->notebook,
+ "page-added",
+ G_CALLBACK(nsgtk_window_tabs_add),
+ gs);
+ g_signal_connect_after(gs->notebook,
+ "page-removed",
+ G_CALLBACK(nsgtk_window_tabs_remove),
+ gs);
/* connect main window signals to their handlers. */
- CONNECT(gs->window,
- "delete-event",
- scaffolding_window_delete_event,
- gs);
+ g_signal_connect(gs->window,
+ "delete-event",
+ G_CALLBACK(scaffolding_window_delete_event),
+ gs);
- CONNECT(gs->window, "destroy", scaffolding_window_destroy, gs);
+ g_signal_connect(gs->window,
+ "destroy",
+ G_CALLBACK(scaffolding_window_destroy),
+ gs);
/* toolbar URL bar menu bar search bar signal handlers */
- CONNECT(gs->menu_bar->edit_submenu->edit, "show",
- nsgtk_window_edit_menu_shown, gs);
- CONNECT(gs->menu_bar->edit_submenu->edit, "hide",
- nsgtk_window_edit_menu_hidden, gs);
-
- CONNECT(gs->search->buttons[1], "clicked",
- nsgtk_search_forward_button_clicked, gs);
+ g_signal_connect(gs->menu_bar->edit_submenu->edit,
+ "show",
+ G_CALLBACK(nsgtk_window_edit_menu_shown),
+ gs);
- CONNECT(gs->search->buttons[0], "clicked",
- nsgtk_search_back_button_clicked, gs);
-
- CONNECT(gs->search->entry, "changed", nsgtk_search_entry_changed, gs);
-
- CONNECT(gs->search->entry, "activate", nsgtk_search_entry_activate, gs);
-
- CONNECT(gs->search->entry, "key-press-event",
- nsgtk_search_entry_key, gs);
-
- CONNECT(gs->search->buttons[2], "clicked",
- nsgtk_search_close_button_clicked, gs);
-
- CONNECT(gs->search->caseSens, "toggled",
- nsgtk_search_entry_changed, gs);
+ g_signal_connect(gs->menu_bar->edit_submenu->edit,
+ "hide",
+ G_CALLBACK(nsgtk_window_edit_menu_hidden),
+ gs);
- /** \todo fix popup menu */
- //CONNECT(gs->tool_bar, "popup-context-menu",
- // nsgtk_window_tool_bar_clicked, gs);
+ nsgtk_search_connect_signals(gs);
/* create popup menu */
gs->menu_popup = nsgtk_new_scaffolding_popup(gs, group);
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index 666bc50..a8cea20 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -69,6 +69,11 @@ nserror nsgtk_scaffolding_destroy_all(void);
nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active);
/**
+ * open a toolbar context menu
+ */
+nserror nsgtk_scaffolding_toolbar_context_menu(struct nsgtk_scaffolding *gs);
+
+/**
* Obtain the most recently used scaffolding element.
*
* This allows tabs to be opened in the most recently used window
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index fafa194..694c271 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -66,6 +66,7 @@
#include "gtk/preferences.h"
#include "gtk/hotlist.h"
#include "gtk/cookies.h"
+#include "gtk/about.h"
#include "gtk/toolbar.h"
/**
@@ -131,7 +132,7 @@ struct nsgtk_toolbar {
/**
* context passed to get_bw function
*/
- void *get_bw_ctx;
+ void *get_ctx;
};
@@ -1722,7 +1723,7 @@ toolbar_navigate_to_url(struct nsgtk_toolbar *tb, const char *urltxt)
return res;
}
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_navigate(bw,
url,
@@ -1872,7 +1873,7 @@ back_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
if ((bw != NULL) && browser_window_history_back_available(bw)) {
/* clear potential search effects */
@@ -1904,7 +1905,7 @@ forward_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
if ((bw != NULL) && browser_window_history_forward_available(bw)) {
/* clear potential search effects */
@@ -1934,7 +1935,7 @@ stop_button_clicked_cb(GtkWidget *widget, gpointer data)
{
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
- browser_window_stop(tb->get_bw(tb->get_bw_ctx));
+ browser_window_stop(tb->get_bw(tb->get_ctx));
return TRUE;
}
@@ -1953,7 +1954,7 @@ reload_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
/* clear potential search effects */
browser_window_search_clear(bw);
@@ -2013,7 +2014,7 @@ static gboolean url_entry_activate_cb(GtkWidget *widget, gpointer data)
SEARCH_WEB_OMNI_NONE,
&url);
if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_navigate(
bw, url, NULL, BW_NAVIGATE_HISTORY, NULL, NULL, NULL);
nsurl_unref(url);
@@ -2067,7 +2068,7 @@ static gboolean websearch_entry_activate_cb(GtkWidget *widget, gpointer data)
&url);
if (res == NSERROR_OK) {
temp_open_background = 0;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_create(
BW_CREATE_HISTORY | BW_CREATE_TAB,
@@ -2133,7 +2134,7 @@ newwindow_button_clicked_cb(GtkWidget *widget, gpointer data)
res = nsurl_create(addr, &url);
if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_create(BW_CREATE_HISTORY,
url,
NULL,
@@ -2175,7 +2176,7 @@ newtab_button_clicked_cb(GtkWidget *widget, gpointer data)
}
if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_create(BW_CREATE_HISTORY |
BW_CREATE_TAB,
@@ -2234,7 +2235,7 @@ openfile_button_clicked_cb(GtkWidget *widget, gpointer data)
res = nsurl_create(urltxt, &url);
if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = browser_window_navigate(bw,
url,
NULL,
@@ -2261,24 +2262,6 @@ openfile_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
- * handler for close tab tool bar item clicked signal
- *
- * \param widget The widget the signal is being delivered to.
- * \param data The toolbar context passed when the signal was connected
- * \return TRUE
- */
-static gboolean
-closetab_button_clicked_cb(GtkWidget *widget, gpointer data)
-{
- struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
-
- nsgtk_tab_close_current(GTK_NOTEBOOK(tb->widget));
-
- return TRUE;
-}
-
-
-/**
* handler for close window tool bar item clicked signal
*
* \param widget The widget the signal is being delivered to.
@@ -2312,7 +2295,7 @@ savepage_button_clicked_cb(GtkWidget *widget, gpointer data)
nserror res;
GtkWidget *toplevel;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
res = nsgtk_saveas_dialog(bw,
@@ -2363,7 +2346,7 @@ pdf_button_clicked_cb(GtkWidget *widget, gpointer data)
gchar *filename;
nserror res;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
@@ -2415,7 +2398,7 @@ plaintext_button_clicked_cb(GtkWidget *widget, gpointer data)
gchar *filename;
nserror res;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
@@ -2456,7 +2439,7 @@ print_button_clicked_cb(GtkWidget *widget, gpointer data)
char *settings_fname = NULL;
GtkWidget *toplevel;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
@@ -2574,7 +2557,7 @@ cut_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_cut_clipboard(GTK_EDITABLE(focused));
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_CUT_SELECTION);
}
@@ -2605,7 +2588,7 @@ copy_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_copy_clipboard(GTK_EDITABLE(focused));
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_COPY_SELECTION);
}
@@ -2636,7 +2619,7 @@ paste_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_paste_clipboard(GTK_EDITABLE(focused));
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_PASTE);
}
@@ -2667,7 +2650,7 @@ delete_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_delete_selection(GTK_EDITABLE(focused));
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_CLEAR_SELECTION);
}
@@ -2698,7 +2681,7 @@ selectall_button_clicked_cb(GtkWidget *widget, gpointer data)
if (GTK_IS_EDITABLE(focused)) {
gtk_editable_select_region(GTK_EDITABLE(focused), 0, -1);
} else {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_key_press(bw, NS_KEY_SELECT_ALL);
}
@@ -2721,7 +2704,7 @@ preferences_button_clicked_cb(GtkWidget *widget, gpointer data)
GtkWidget *toplevel;
GtkWidget *wndpreferences;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
@@ -2747,7 +2730,7 @@ zoomplus_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_set_scale(bw, 0.05, false);
@@ -2768,7 +2751,7 @@ zoomminus_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_set_scale(bw, -0.05, false);
@@ -2790,7 +2773,7 @@ zoomnormal_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_set_scale(bw, 1.0, true);
@@ -2840,7 +2823,7 @@ viewsource_button_clicked_cb(GtkWidget *widget, gpointer data)
struct browser_window *bw;
GtkWindow *gtkwindow; /* gtk window widget is in */
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
@@ -2917,7 +2900,7 @@ toggledebugging_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_debug(bw, CONTENT_DEBUG_REDRAW);
@@ -2959,7 +2942,7 @@ debugboxtree_button_clicked_cb(GtkWidget *widget, gpointer data)
return TRUE;
}
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_debug_dump(bw, f, CONTENT_DEBUG_RENDER);
@@ -3004,7 +2987,7 @@ debugdomtree_button_clicked_cb(GtkWidget *widget, gpointer data)
return TRUE;
}
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
browser_window_debug_dump(bw, f, CONTENT_DEBUG_DOM);
@@ -3036,7 +3019,7 @@ localhistory_button_clicked_cb(GtkWidget *widget, gpointer data)
toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
if (toplevel != NULL) {
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
res = nsgtk_local_history_present(GTK_WINDOW(toplevel), bw);
if (res != NSERROR_OK) {
@@ -3081,7 +3064,7 @@ addbookmarks_button_clicked_cb(GtkWidget *widget, gpointer data)
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
if (browser_window_has_content(bw)) {
hotlist_add_url(browser_window_access_url(bw));
}
@@ -3366,7 +3349,7 @@ toolbar_connect_signal(struct nsgtk_toolbar *tb, nsgtk_toolbar_button itemid)
nsgtk_completion_connect_signals(entry,
tb->get_bw,
- tb->get_bw_ctx);
+ tb->get_ctx);
break;
@@ -3417,11 +3400,41 @@ static nserror toolbar_connect_signals(struct nsgtk_toolbar *tb)
return NSERROR_OK;
}
+/**
+ * signal handler for toolbar context menu
+ *
+ * \param toolbar The toolbar event is being delivered to
+ * \param x The x coordinate where the click happened
+ * \param y The x coordinate where the click happened
+ * \param button the buttons being pressed
+ * \param data The context pointer passed when the connection was made.
+ * \return TRUE to indicate signal handled.
+ */
+static gboolean
+toolbar_popup_context_menu_cb(GtkToolbar *toolbar,
+ gint x,
+ gint y,
+ gint button,
+ gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct gui_window *gw;
+ struct nsgtk_scaffolding *gs;
+
+ gw = tb->get_ctx; /** \todo stop assuming the context is a gui window */
+
+ gs = nsgtk_get_scaffold(gw);
+
+ nsgtk_scaffolding_toolbar_context_menu(gs);
+
+ return TRUE;
+}
+
/* exported interface documented in toolbar.h */
nserror
nsgtk_toolbar_create(GtkBuilder *builder,
struct browser_window *(*get_bw)(void *ctx),
- void *get_bw_ctx,
+ void *get_ctx,
struct nsgtk_toolbar **tb_out)
{
nserror res;
@@ -3434,13 +3447,18 @@ nsgtk_toolbar_create(GtkBuilder *builder,
}
tb->get_bw = get_bw;
- tb->get_bw_ctx = get_bw_ctx;
+ tb->get_ctx = get_ctx;
/* set the throbber start frame. */
tb->throb_frame = 0;
tb->widget = GTK_TOOLBAR(gtk_builder_get_object(builder, "toolbar"));
gtk_toolbar_set_show_arrow(tb->widget, TRUE);
+ g_signal_connect(tb->widget,
+ "popup-context-menu",
+ G_CALLBACK(toolbar_popup_context_menu_cb),
+ tb);
+
/* allocate button contexts */
for (bidx = BACK_BUTTON; bidx < PLACEHOLDER_BUTTON; bidx++) {
res = toolbar_item_create(bidx, &tb->buttons[bidx]);
@@ -3543,7 +3561,7 @@ nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active)
nserror res;
struct browser_window *bw;
- bw = tb->get_bw(tb->get_bw_ctx);
+ bw = tb->get_bw(tb->get_ctx);
/* when activating the throbber simply schedule the next frame update */
if (active) {
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 9bbb300..fbfa5e5 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -100,7 +100,7 @@ TOOLBAR_ITEM(THROBBER_ITEM, throbber, true, NULL)
TOOLBAR_ITEM(NEWWINDOW_BUTTON, newwindow, true, newwindow_button_clicked_cb)
TOOLBAR_ITEM(NEWTAB_BUTTON, newtab, true, newtab_button_clicked_cb)
TOOLBAR_ITEM(OPENFILE_BUTTON, openfile, true, openfile_button_clicked_cb)
-TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, closetab_button_clicked_cb)
+TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, NULL)
TOOLBAR_ITEM(CLOSEWINDOW_BUTTON, closewindow, true, closewindow_button_clicked_cb)
TOOLBAR_ITEM(SAVEPAGE_BUTTON, savepage, true, savepage_button_clicked_cb)
TOOLBAR_ITEM(PDF_BUTTON, pdf, false, pdf_button_clicked_cb)
--
NetSurf Browser
4 years, 3 months
netsurf: branch vince/gtk-tab-restyle updated. release/3.9-187-gac7a9ae
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/ac7a9aefce8d622df78e9...
...commit http://git.netsurf-browser.org/netsurf.git/commit/ac7a9aefce8d622df78e980...
...tree http://git.netsurf-browser.org/netsurf.git/tree/ac7a9aefce8d622df78e98093...
The branch, vince/gtk-tab-restyle has been updated
via ac7a9aefce8d622df78e980937771bd5bcc7cee0 (commit)
from 5841e373e5d0cb6ae8bb2f6bee776cae1fcf6384 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=ac7a9aefce8d622df78...
commit ac7a9aefce8d622df78e980937771bd5bcc7cee0
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
complete toolbar button click handler implementation
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 62b9c4f..d7e7d59 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -90,10 +90,6 @@ static gboolean nsgtk_on_##q##_activate_menu(GtkMenuItem *widget, gpointer data)
static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g)
-/** Macro to define a handler for button events. */
-#define BUTTONHANDLER(q)\
-static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
-
/**
* handle menu activate signals by calling toolbar item activation
*/
@@ -574,41 +570,6 @@ nsgtk_window_tabs_remove(GtkNotebook *notebook,
nsgtk_scaffolding_set_sensitivity(gs);
}
-/**
- * Handle opening a file path.
- *
- * \param filename The filename to open.
- */
-static void nsgtk_openfile_open(const char *filename)
-{
- struct browser_window *bw;
- char *urltxt;
- nsurl *url;
- nserror error;
-
- bw = nsgtk_get_browser_window(scaf_current->top_level);
-
- urltxt = malloc(strlen(filename) + FILE_SCHEME_PREFIX_LEN + 1);
-
- if (urltxt != NULL) {
- sprintf(urltxt, FILE_SCHEME_PREFIX"%s", filename);
-
- error = nsurl_create(urltxt, &url);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
- free(urltxt);
- }
-}
/* signal handlers for menu entries */
@@ -967,113 +928,46 @@ MENUHANDLER(reload, RELOAD_BUTTON);
*/
MENUHANDLER(back, BACK_BUTTON);
+/**
+ * menu signal handler for activation on forward item
+ */
+MENUHANDLER(forward, FORWARD_BUTTON);
-MULTIHANDLER(forward)
-{
- struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
-
- if ((bw == NULL) || (!browser_window_history_forward_available(bw)))
- return TRUE;
-
- /* clear potential search effects */
- browser_window_search_clear(bw);
-
- browser_window_history_forward(bw, false);
- scaffolding_update_context(g);
-
- return TRUE;
-}
-
-MULTIHANDLER(home)
-{
- static const char *addr = NETSURF_HOMEPAGE;
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nsurl *url;
- nserror error;
-
- if (nsoption_charp(homepage_url) != NULL) {
- addr = nsoption_charp(homepage_url);
- }
-
- error = nsurl_create(addr, &url);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
-
- return TRUE;
-}
-
-MULTIHANDLER(localhistory)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nserror res;
+/**
+ * menu signal handler for activation on home item
+ */
+MENUHANDLER(home, HOME_BUTTON);
- res = nsgtk_local_history_present(g->window, bw);
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO,
- "Unable to initialise local history window.");
- }
- return TRUE;
-}
+/**
+ * menu signal handler for activation on localhistory item
+ */
+MENUHANDLER(localhistory, LOCALHISTORY_BUTTON);
-MULTIHANDLER(globalhistory)
-{
- nserror res;
- res = nsgtk_global_history_present();
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO,
- "Unable to initialise global history window.");
- }
- return TRUE;
-}
+/**
+ * menu signal handler for activation on globalhistory item
+ */
+MENUHANDLER(globalhistory, GLOBALHISTORY_BUTTON);
-MULTIHANDLER(addbookmarks)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
+/**
+ * menu signal handler for activation on addbookmarks item
+ */
+MENUHANDLER(addbookmarks, ADDBOOKMARKS_BUTTON);
- if (bw == NULL || !browser_window_has_content(bw))
- return TRUE;
- hotlist_add_url(browser_window_access_url(bw));
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showbookmarks item
+ */
+MENUHANDLER(showbookmarks, SHOWBOOKMARKS_BUTTON);
-MULTIHANDLER(showbookmarks)
-{
- nserror res;
- res = nsgtk_hotlist_present();
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO, "Unable to initialise bookmark window.");
- }
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(showcookies, SHOWCOOKIES_BUTTON);
-MULTIHANDLER(showcookies)
-{
- nserror res;
- res = nsgtk_cookies_present();
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO, "Unable to initialise cookies window.");
- }
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(openlocation, OPENLOCATION_BUTTON);
-MULTIHANDLER(openlocation)
-{
- #if 0
- gtk_widget_grab_focus(GTK_WIDGET(g->url_bar));
- #endif
- return TRUE;
-}
MULTIHANDLER(nexttab)
{
@@ -1101,86 +995,29 @@ nsgtk_on_closetab_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-MULTIHANDLER(contents)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nsurl *url;
- nserror error;
-
- error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
-
- return TRUE;
-}
-
-MULTIHANDLER(guide)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nsurl *url;
-
- if (nsurl_create("http://www.netsurf-browser.org/documentation/guide", &url) != NSERROR_OK) {
- nsgtk_warning("NoMemory", 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
-
- return TRUE;
-}
-
-MULTIHANDLER(info)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nsurl *url;
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(contents, CONTENTS_BUTTON);
- if (nsurl_create("http://www.netsurf-browser.org/documentation/info", &url) != NSERROR_OK) {
- nsgtk_warning("NoMemory", 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(guide, GUIDE_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(info, INFO_BUTTON);
-MULTIHANDLER(about)
-{
- nsgtk_about_dialog_init(g->window);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(about, ABOUT_BUTTON);
-BUTTONHANDLER(history)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- return nsgtk_on_localhistory_activate(g);
-}
#undef MULTIHANDLER
-#undef CHECKHANDLER
-#undef BUTTONHANDLER
+#undef MENUHANDLER
/**
* attach gtk signal handlers for menus
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 03e07b9..fafa194 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -39,6 +39,7 @@
#include "desktop/save_complete.h"
#include "desktop/save_text.h"
#include "desktop/print.h"
+#include "desktop/hotlist.h"
#include "netsurf/content.h"
#include "netsurf/browser_window.h"
#include "netsurf/keypress.h"
@@ -55,10 +56,16 @@
#include "gtk/resources.h"
#include "gtk/schedule.h"
#include "gtk/local_history.h"
+#include "gtk/global_history.h"
+#include "gtk/viewsource.h"
+#include "gtk/download.h"
+#include "gtk/viewdata.h"
#include "gtk/tabs.h"
#include "gtk/print.h"
#include "gtk/layout_pango.h"
#include "gtk/preferences.h"
+#include "gtk/hotlist.h"
+#include "gtk/cookies.h"
#include "gtk/toolbar.h"
/**
@@ -1697,6 +1704,111 @@ set_item_sensitivity(struct nsgtk_toolbar_item *item, bool sensitivity)
/**
+ * cause the toolbar browsing context to navigate to a new url.
+ *
+ * \param tb the toolbar context.
+ * \param urltxt The url string.
+ * \return NSERROR_OK on success else appropriate error code.
+ */
+static nserror
+toolbar_navigate_to_url(struct nsgtk_toolbar *tb, const char *urltxt)
+{
+ struct browser_window *bw;
+ nsurl *url;
+ nserror res;
+
+ res = nsurl_create(urltxt, &url);
+ if (res != NSERROR_OK) {
+ return res;
+ }
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ res = browser_window_navigate(bw,
+ url,
+ NULL,
+ BW_NAVIGATE_HISTORY,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+
+ return res;
+}
+
+
+/**
+ * run a gtk file chooser as a save dialog to obtain a path
+ */
+static nserror
+nsgtk_saveas_dialog(struct browser_window *bw,
+ const char *title,
+ GtkWindow *parent,
+ bool folder,
+ gchar **path_out)
+{
+ nserror res;
+ GtkWidget *fc; /* file chooser widget */
+ GtkFileChooserAction action;
+ char *path; /* proposed path */
+
+ if (!browser_window_has_content(bw)) {
+ /* cannot save a page with no content */
+ return NSERROR_INVALID;
+ }
+
+ if (folder) {
+ action = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
+ } else {
+ action = GTK_FILE_CHOOSER_ACTION_SAVE;
+ }
+
+ fc = gtk_file_chooser_dialog_new(title,
+ parent,
+ action,
+ NSGTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ NSGTK_STOCK_SAVE,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ /* set a default file name */
+ res = nsurl_nice(browser_window_access_url(bw), &path, false);
+ if (res != NSERROR_OK) {
+ path = strdup(messages_get("SaveText"));
+ if (path == NULL) {
+ gtk_widget_destroy(fc);
+ return NSERROR_NOMEM;
+ }
+ }
+
+ if ((!folder) || (access(path, F_OK) != 0)) {
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), path);
+ }
+ free(path);
+
+ /* confirm overwriting */
+ gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc), TRUE);
+
+ /* run the dialog to let user select path */
+ if (gtk_dialog_run(GTK_DIALOG(fc)) != GTK_RESPONSE_ACCEPT) {
+ gtk_widget_destroy(fc);
+ return NSERROR_NOT_FOUND;
+ }
+
+ *path_out = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
+
+ gtk_widget_destroy(fc);
+
+ return NSERROR_OK;
+}
+
+
+/*
+ * Toolbar button clicked handlers
+ */
+
+/**
* callback for all toolbar items widget size allocation
*
* handler connected to all toolbar items for the size-allocate signal
@@ -1780,35 +1892,6 @@ back_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
- * handler for local history tool bar item clicked signal
- *
- * \param widget The widget the signal is being delivered to.
- * \param data The toolbar context passed when the signal was connected
- * \return TRUE
- */
-static gboolean
-localhistory_button_clicked_cb(GtkWidget *widget, gpointer data)
-{
- nserror res;
- struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
- struct browser_window *bw;
- GtkWidget *toplevel;
-
- toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
- if (toplevel != NULL) {
- bw = tb->get_bw(tb->get_bw_ctx);
-
- res = nsgtk_local_history_present(GTK_WINDOW(toplevel), bw);
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO,
- "Unable to present local history window.");
- }
- }
- return TRUE;
-}
-
-
-/**
* handler for forward tool bar item clicked signal
*
* \param widget The widget the signal is being delivered to.
@@ -1891,11 +1974,9 @@ reload_button_clicked_cb(GtkWidget *widget, gpointer data)
static gboolean
home_button_clicked_cb(GtkWidget *widget, gpointer data)
{
- nserror res;
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ nserror res;
const char *addr;
- struct browser_window *bw;
- nsurl *url;
if (nsoption_charp(homepage_url) != NULL) {
addr = nsoption_charp(homepage_url);
@@ -1903,19 +1984,7 @@ home_button_clicked_cb(GtkWidget *widget, gpointer data)
addr = NETSURF_HOMEPAGE;
}
- res = nsurl_create(addr, &url);
- if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
-
- res = browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
+ res = toolbar_navigate_to_url(tb, addr);
if (res != NSERROR_OK) {
nsgtk_warning(messages_get_errorcode(res), 0);
}
@@ -2226,69 +2295,6 @@ closewindow_button_clicked_cb(GtkWidget *widget, gpointer data)
}
-static nserror
-nsgtk_saveas_dialog(struct browser_window *bw,
- const char *title,
- GtkWindow *parent,
- bool folder,
- gchar **path_out)
-{
- nserror res;
- GtkWidget *fc; /* file chooser widget */
- GtkFileChooserAction action;
- char *path; /* proposed path */
-
- if (!browser_window_has_content(bw)) {
- /* cannot save a page with no content */
- return NSERROR_INVALID;
- }
-
- if (folder) {
- action = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
- } else {
- action = GTK_FILE_CHOOSER_ACTION_SAVE;
- }
-
- fc = gtk_file_chooser_dialog_new(title,
- parent,
- action,
- NSGTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_SAVE,
- GTK_RESPONSE_ACCEPT,
- NULL);
-
- /* set a default file name */
- res = nsurl_nice(browser_window_access_url(bw), &path, false);
- if (res != NSERROR_OK) {
- path = strdup(messages_get("SaveText"));
- if (path == NULL) {
- gtk_widget_destroy(fc);
- return NSERROR_NOMEM;
- }
- }
-
- if ((!folder) || (access(path, F_OK) != 0)) {
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), path);
- }
- free(path);
-
- /* confirm overwriting */
- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc), TRUE);
-
- /* run the dialog to let user select path */
- if (gtk_dialog_run(GTK_DIALOG(fc)) != GTK_RESPONSE_ACCEPT) {
- gtk_widget_destroy(fc);
- return NSERROR_NOT_FOUND;
- }
-
- *path_out = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
-
- gtk_widget_destroy(fc);
-
- return NSERROR_OK;
-}
-
/**
* handler for full save export tool bar item clicked signal
*
@@ -3014,6 +3020,220 @@ debugdomtree_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
+ * handler for local history tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+localhistory_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+ if (toplevel != NULL) {
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ res = nsgtk_local_history_present(GTK_WINDOW(toplevel), bw);
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, INFO,
+ "Unable to present local history window.");
+ }
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for global history tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+globalhistory_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ res = nsgtk_global_history_present();
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, INFO,
+ "Unable to initialise global history window.");
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for add bookmark tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+addbookmarks_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+ if (browser_window_has_content(bw)) {
+ hotlist_add_url(browser_window_access_url(bw));
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for show bookmark tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+showbookmarks_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ res = nsgtk_hotlist_present();
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, INFO, "Unable to initialise bookmark window.");
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for show cookies tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+showcookies_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ res = nsgtk_cookies_present();
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, INFO, "Unable to initialise cookies window.");
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for open location tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+openlocation_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ GtkToolItem *urltitem;
+
+ urltitem = tb->buttons[URL_BAR_ITEM]->button;
+ if (urltitem != NULL) {
+ GtkEntry *entry;
+ entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(urltitem)));
+ gtk_widget_grab_focus(GTK_WIDGET(entry));
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for contents tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+contents_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ nserror res;
+
+ res = toolbar_navigate_to_url(tb, "http://www.netsurf-browser.org/documentation/");
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
+}
+
+/**
+ * handler for contents tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+guide_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ nserror res;
+
+ res = toolbar_navigate_to_url(tb, "http://www.netsurf-browser.org/documentation/guide");
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for contents tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+info_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ nserror res;
+
+ res = toolbar_navigate_to_url(tb, "http://www.netsurf-browser.org/documentation/info");
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for contents tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+about_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWindow *parent; /* gtk window widget is in */
+
+ parent = GTK_WINDOW(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW));
+
+ nsgtk_about_dialog_init(parent);
+ return TRUE;
+}
+
+/**
* create a toolbar item
*
* create a toolbar item and set up its default handlers
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 909b00d..9bbb300 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -128,17 +128,17 @@ TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, toggledebugging_butt
TOOLBAR_ITEM(SAVEBOXTREE_BUTTON, debugboxtree, true, debugboxtree_button_clicked_cb)
TOOLBAR_ITEM(SAVEDOMTREE_BUTTON, debugdomtree, true, debugdomtree_button_clicked_cb)
TOOLBAR_ITEM(LOCALHISTORY_BUTTON, localhistory, true, localhistory_button_clicked_cb)
-TOOLBAR_ITEM(GLOBALHISTORY_BUTTON, globalhistory, true, NULL)
-TOOLBAR_ITEM(ADDBOOKMARKS_BUTTON, addbookmarks, true, NULL)
-TOOLBAR_ITEM(SHOWBOOKMARKS_BUTTON, showbookmarks, true, NULL)
-TOOLBAR_ITEM(SHOWCOOKIES_BUTTON, showcookies, true, NULL)
-TOOLBAR_ITEM(OPENLOCATION_BUTTON, openlocation, true, NULL)
+TOOLBAR_ITEM(GLOBALHISTORY_BUTTON, globalhistory, true, globalhistory_button_clicked_cb)
+TOOLBAR_ITEM(ADDBOOKMARKS_BUTTON, addbookmarks, true, addbookmarks_button_clicked_cb)
+TOOLBAR_ITEM(SHOWBOOKMARKS_BUTTON, showbookmarks, true, showbookmarks_button_clicked_cb)
+TOOLBAR_ITEM(SHOWCOOKIES_BUTTON, showcookies, true, showcookies_button_clicked_cb)
+TOOLBAR_ITEM(OPENLOCATION_BUTTON, openlocation, true, openlocation_button_clicked_cb)
TOOLBAR_ITEM(NEXTTAB_BUTTON, nexttab, false, NULL)
TOOLBAR_ITEM(PREVTAB_BUTTON, prevtab, false, NULL)
-TOOLBAR_ITEM(CONTENTS_BUTTON, contents, true, NULL)
-TOOLBAR_ITEM(GUIDE_BUTTON, guide, true, NULL)
-TOOLBAR_ITEM(INFO_BUTTON, info, true, NULL)
-TOOLBAR_ITEM(ABOUT_BUTTON, about, true, NULL)
+TOOLBAR_ITEM(CONTENTS_BUTTON, contents, true, contents_button_clicked_cb)
+TOOLBAR_ITEM(GUIDE_BUTTON, guide, true, guide_button_clicked_cb)
+TOOLBAR_ITEM(INFO_BUTTON, info, true, info_button_clicked_cb)
+TOOLBAR_ITEM(ABOUT_BUTTON, about, true, about_button_clicked_cb)
#ifdef TOOLBAR_ITEM_SET
#undef TOOLBAR_ITEM
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/scaffolding.c | 261 +++++-------------------
frontends/gtk/toolbar.c | 436 +++++++++++++++++++++++++++++++----------
frontends/gtk/toolbar_items.h | 18 +-
3 files changed, 386 insertions(+), 329 deletions(-)
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 62b9c4f..d7e7d59 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -90,10 +90,6 @@ static gboolean nsgtk_on_##q##_activate_menu(GtkMenuItem *widget, gpointer data)
static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g)
-/** Macro to define a handler for button events. */
-#define BUTTONHANDLER(q)\
-static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
-
/**
* handle menu activate signals by calling toolbar item activation
*/
@@ -574,41 +570,6 @@ nsgtk_window_tabs_remove(GtkNotebook *notebook,
nsgtk_scaffolding_set_sensitivity(gs);
}
-/**
- * Handle opening a file path.
- *
- * \param filename The filename to open.
- */
-static void nsgtk_openfile_open(const char *filename)
-{
- struct browser_window *bw;
- char *urltxt;
- nsurl *url;
- nserror error;
-
- bw = nsgtk_get_browser_window(scaf_current->top_level);
-
- urltxt = malloc(strlen(filename) + FILE_SCHEME_PREFIX_LEN + 1);
-
- if (urltxt != NULL) {
- sprintf(urltxt, FILE_SCHEME_PREFIX"%s", filename);
-
- error = nsurl_create(urltxt, &url);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
- free(urltxt);
- }
-}
/* signal handlers for menu entries */
@@ -967,113 +928,46 @@ MENUHANDLER(reload, RELOAD_BUTTON);
*/
MENUHANDLER(back, BACK_BUTTON);
+/**
+ * menu signal handler for activation on forward item
+ */
+MENUHANDLER(forward, FORWARD_BUTTON);
-MULTIHANDLER(forward)
-{
- struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
-
- if ((bw == NULL) || (!browser_window_history_forward_available(bw)))
- return TRUE;
-
- /* clear potential search effects */
- browser_window_search_clear(bw);
-
- browser_window_history_forward(bw, false);
- scaffolding_update_context(g);
-
- return TRUE;
-}
-
-MULTIHANDLER(home)
-{
- static const char *addr = NETSURF_HOMEPAGE;
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nsurl *url;
- nserror error;
-
- if (nsoption_charp(homepage_url) != NULL) {
- addr = nsoption_charp(homepage_url);
- }
-
- error = nsurl_create(addr, &url);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
-
- return TRUE;
-}
-
-MULTIHANDLER(localhistory)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nserror res;
+/**
+ * menu signal handler for activation on home item
+ */
+MENUHANDLER(home, HOME_BUTTON);
- res = nsgtk_local_history_present(g->window, bw);
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO,
- "Unable to initialise local history window.");
- }
- return TRUE;
-}
+/**
+ * menu signal handler for activation on localhistory item
+ */
+MENUHANDLER(localhistory, LOCALHISTORY_BUTTON);
-MULTIHANDLER(globalhistory)
-{
- nserror res;
- res = nsgtk_global_history_present();
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO,
- "Unable to initialise global history window.");
- }
- return TRUE;
-}
+/**
+ * menu signal handler for activation on globalhistory item
+ */
+MENUHANDLER(globalhistory, GLOBALHISTORY_BUTTON);
-MULTIHANDLER(addbookmarks)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
+/**
+ * menu signal handler for activation on addbookmarks item
+ */
+MENUHANDLER(addbookmarks, ADDBOOKMARKS_BUTTON);
- if (bw == NULL || !browser_window_has_content(bw))
- return TRUE;
- hotlist_add_url(browser_window_access_url(bw));
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showbookmarks item
+ */
+MENUHANDLER(showbookmarks, SHOWBOOKMARKS_BUTTON);
-MULTIHANDLER(showbookmarks)
-{
- nserror res;
- res = nsgtk_hotlist_present();
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO, "Unable to initialise bookmark window.");
- }
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(showcookies, SHOWCOOKIES_BUTTON);
-MULTIHANDLER(showcookies)
-{
- nserror res;
- res = nsgtk_cookies_present();
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO, "Unable to initialise cookies window.");
- }
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(openlocation, OPENLOCATION_BUTTON);
-MULTIHANDLER(openlocation)
-{
- #if 0
- gtk_widget_grab_focus(GTK_WIDGET(g->url_bar));
- #endif
- return TRUE;
-}
MULTIHANDLER(nexttab)
{
@@ -1101,86 +995,29 @@ nsgtk_on_closetab_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-MULTIHANDLER(contents)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nsurl *url;
- nserror error;
-
- error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
-
- return TRUE;
-}
-
-MULTIHANDLER(guide)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nsurl *url;
-
- if (nsurl_create("http://www.netsurf-browser.org/documentation/guide", &url) != NSERROR_OK) {
- nsgtk_warning("NoMemory", 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
-
- return TRUE;
-}
-
-MULTIHANDLER(info)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- nsurl *url;
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(contents, CONTENTS_BUTTON);
- if (nsurl_create("http://www.netsurf-browser.org/documentation/info", &url) != NSERROR_OK) {
- nsgtk_warning("NoMemory", 0);
- } else {
- browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(guide, GUIDE_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(info, INFO_BUTTON);
-MULTIHANDLER(about)
-{
- nsgtk_about_dialog_init(g->window);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on showcookies item
+ */
+MENUHANDLER(about, ABOUT_BUTTON);
-BUTTONHANDLER(history)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- return nsgtk_on_localhistory_activate(g);
-}
#undef MULTIHANDLER
-#undef CHECKHANDLER
-#undef BUTTONHANDLER
+#undef MENUHANDLER
/**
* attach gtk signal handlers for menus
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 03e07b9..fafa194 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -39,6 +39,7 @@
#include "desktop/save_complete.h"
#include "desktop/save_text.h"
#include "desktop/print.h"
+#include "desktop/hotlist.h"
#include "netsurf/content.h"
#include "netsurf/browser_window.h"
#include "netsurf/keypress.h"
@@ -55,10 +56,16 @@
#include "gtk/resources.h"
#include "gtk/schedule.h"
#include "gtk/local_history.h"
+#include "gtk/global_history.h"
+#include "gtk/viewsource.h"
+#include "gtk/download.h"
+#include "gtk/viewdata.h"
#include "gtk/tabs.h"
#include "gtk/print.h"
#include "gtk/layout_pango.h"
#include "gtk/preferences.h"
+#include "gtk/hotlist.h"
+#include "gtk/cookies.h"
#include "gtk/toolbar.h"
/**
@@ -1697,6 +1704,111 @@ set_item_sensitivity(struct nsgtk_toolbar_item *item, bool sensitivity)
/**
+ * cause the toolbar browsing context to navigate to a new url.
+ *
+ * \param tb the toolbar context.
+ * \param urltxt The url string.
+ * \return NSERROR_OK on success else appropriate error code.
+ */
+static nserror
+toolbar_navigate_to_url(struct nsgtk_toolbar *tb, const char *urltxt)
+{
+ struct browser_window *bw;
+ nsurl *url;
+ nserror res;
+
+ res = nsurl_create(urltxt, &url);
+ if (res != NSERROR_OK) {
+ return res;
+ }
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ res = browser_window_navigate(bw,
+ url,
+ NULL,
+ BW_NAVIGATE_HISTORY,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+
+ return res;
+}
+
+
+/**
+ * run a gtk file chooser as a save dialog to obtain a path
+ */
+static nserror
+nsgtk_saveas_dialog(struct browser_window *bw,
+ const char *title,
+ GtkWindow *parent,
+ bool folder,
+ gchar **path_out)
+{
+ nserror res;
+ GtkWidget *fc; /* file chooser widget */
+ GtkFileChooserAction action;
+ char *path; /* proposed path */
+
+ if (!browser_window_has_content(bw)) {
+ /* cannot save a page with no content */
+ return NSERROR_INVALID;
+ }
+
+ if (folder) {
+ action = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
+ } else {
+ action = GTK_FILE_CHOOSER_ACTION_SAVE;
+ }
+
+ fc = gtk_file_chooser_dialog_new(title,
+ parent,
+ action,
+ NSGTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ NSGTK_STOCK_SAVE,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ /* set a default file name */
+ res = nsurl_nice(browser_window_access_url(bw), &path, false);
+ if (res != NSERROR_OK) {
+ path = strdup(messages_get("SaveText"));
+ if (path == NULL) {
+ gtk_widget_destroy(fc);
+ return NSERROR_NOMEM;
+ }
+ }
+
+ if ((!folder) || (access(path, F_OK) != 0)) {
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), path);
+ }
+ free(path);
+
+ /* confirm overwriting */
+ gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc), TRUE);
+
+ /* run the dialog to let user select path */
+ if (gtk_dialog_run(GTK_DIALOG(fc)) != GTK_RESPONSE_ACCEPT) {
+ gtk_widget_destroy(fc);
+ return NSERROR_NOT_FOUND;
+ }
+
+ *path_out = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
+
+ gtk_widget_destroy(fc);
+
+ return NSERROR_OK;
+}
+
+
+/*
+ * Toolbar button clicked handlers
+ */
+
+/**
* callback for all toolbar items widget size allocation
*
* handler connected to all toolbar items for the size-allocate signal
@@ -1780,35 +1892,6 @@ back_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
- * handler for local history tool bar item clicked signal
- *
- * \param widget The widget the signal is being delivered to.
- * \param data The toolbar context passed when the signal was connected
- * \return TRUE
- */
-static gboolean
-localhistory_button_clicked_cb(GtkWidget *widget, gpointer data)
-{
- nserror res;
- struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
- struct browser_window *bw;
- GtkWidget *toplevel;
-
- toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
- if (toplevel != NULL) {
- bw = tb->get_bw(tb->get_bw_ctx);
-
- res = nsgtk_local_history_present(GTK_WINDOW(toplevel), bw);
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO,
- "Unable to present local history window.");
- }
- }
- return TRUE;
-}
-
-
-/**
* handler for forward tool bar item clicked signal
*
* \param widget The widget the signal is being delivered to.
@@ -1891,11 +1974,9 @@ reload_button_clicked_cb(GtkWidget *widget, gpointer data)
static gboolean
home_button_clicked_cb(GtkWidget *widget, gpointer data)
{
- nserror res;
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ nserror res;
const char *addr;
- struct browser_window *bw;
- nsurl *url;
if (nsoption_charp(homepage_url) != NULL) {
addr = nsoption_charp(homepage_url);
@@ -1903,19 +1984,7 @@ home_button_clicked_cb(GtkWidget *widget, gpointer data)
addr = NETSURF_HOMEPAGE;
}
- res = nsurl_create(addr, &url);
- if (res == NSERROR_OK) {
- bw = tb->get_bw(tb->get_bw_ctx);
-
- res = browser_window_navigate(bw,
- url,
- NULL,
- BW_NAVIGATE_HISTORY,
- NULL,
- NULL,
- NULL);
- nsurl_unref(url);
- }
+ res = toolbar_navigate_to_url(tb, addr);
if (res != NSERROR_OK) {
nsgtk_warning(messages_get_errorcode(res), 0);
}
@@ -2226,69 +2295,6 @@ closewindow_button_clicked_cb(GtkWidget *widget, gpointer data)
}
-static nserror
-nsgtk_saveas_dialog(struct browser_window *bw,
- const char *title,
- GtkWindow *parent,
- bool folder,
- gchar **path_out)
-{
- nserror res;
- GtkWidget *fc; /* file chooser widget */
- GtkFileChooserAction action;
- char *path; /* proposed path */
-
- if (!browser_window_has_content(bw)) {
- /* cannot save a page with no content */
- return NSERROR_INVALID;
- }
-
- if (folder) {
- action = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
- } else {
- action = GTK_FILE_CHOOSER_ACTION_SAVE;
- }
-
- fc = gtk_file_chooser_dialog_new(title,
- parent,
- action,
- NSGTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_SAVE,
- GTK_RESPONSE_ACCEPT,
- NULL);
-
- /* set a default file name */
- res = nsurl_nice(browser_window_access_url(bw), &path, false);
- if (res != NSERROR_OK) {
- path = strdup(messages_get("SaveText"));
- if (path == NULL) {
- gtk_widget_destroy(fc);
- return NSERROR_NOMEM;
- }
- }
-
- if ((!folder) || (access(path, F_OK) != 0)) {
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), path);
- }
- free(path);
-
- /* confirm overwriting */
- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc), TRUE);
-
- /* run the dialog to let user select path */
- if (gtk_dialog_run(GTK_DIALOG(fc)) != GTK_RESPONSE_ACCEPT) {
- gtk_widget_destroy(fc);
- return NSERROR_NOT_FOUND;
- }
-
- *path_out = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
-
- gtk_widget_destroy(fc);
-
- return NSERROR_OK;
-}
-
/**
* handler for full save export tool bar item clicked signal
*
@@ -3014,6 +3020,220 @@ debugdomtree_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
+ * handler for local history tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+localhistory_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+ if (toplevel != NULL) {
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ res = nsgtk_local_history_present(GTK_WINDOW(toplevel), bw);
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, INFO,
+ "Unable to present local history window.");
+ }
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for global history tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+globalhistory_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ res = nsgtk_global_history_present();
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, INFO,
+ "Unable to initialise global history window.");
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for add bookmark tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+addbookmarks_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+ if (browser_window_has_content(bw)) {
+ hotlist_add_url(browser_window_access_url(bw));
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for show bookmark tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+showbookmarks_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ res = nsgtk_hotlist_present();
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, INFO, "Unable to initialise bookmark window.");
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for show cookies tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+showcookies_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ res = nsgtk_cookies_present();
+ if (res != NSERROR_OK) {
+ NSLOG(netsurf, INFO, "Unable to initialise cookies window.");
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for open location tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+openlocation_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ GtkToolItem *urltitem;
+
+ urltitem = tb->buttons[URL_BAR_ITEM]->button;
+ if (urltitem != NULL) {
+ GtkEntry *entry;
+ entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(urltitem)));
+ gtk_widget_grab_focus(GTK_WIDGET(entry));
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for contents tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+contents_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ nserror res;
+
+ res = toolbar_navigate_to_url(tb, "http://www.netsurf-browser.org/documentation/");
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
+}
+
+/**
+ * handler for contents tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+guide_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ nserror res;
+
+ res = toolbar_navigate_to_url(tb, "http://www.netsurf-browser.org/documentation/guide");
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for contents tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+info_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ nserror res;
+
+ res = toolbar_navigate_to_url(tb, "http://www.netsurf-browser.org/documentation/info");
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for contents tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+about_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWindow *parent; /* gtk window widget is in */
+
+ parent = GTK_WINDOW(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW));
+
+ nsgtk_about_dialog_init(parent);
+ return TRUE;
+}
+
+/**
* create a toolbar item
*
* create a toolbar item and set up its default handlers
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 909b00d..9bbb300 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -128,17 +128,17 @@ TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, toggledebugging_butt
TOOLBAR_ITEM(SAVEBOXTREE_BUTTON, debugboxtree, true, debugboxtree_button_clicked_cb)
TOOLBAR_ITEM(SAVEDOMTREE_BUTTON, debugdomtree, true, debugdomtree_button_clicked_cb)
TOOLBAR_ITEM(LOCALHISTORY_BUTTON, localhistory, true, localhistory_button_clicked_cb)
-TOOLBAR_ITEM(GLOBALHISTORY_BUTTON, globalhistory, true, NULL)
-TOOLBAR_ITEM(ADDBOOKMARKS_BUTTON, addbookmarks, true, NULL)
-TOOLBAR_ITEM(SHOWBOOKMARKS_BUTTON, showbookmarks, true, NULL)
-TOOLBAR_ITEM(SHOWCOOKIES_BUTTON, showcookies, true, NULL)
-TOOLBAR_ITEM(OPENLOCATION_BUTTON, openlocation, true, NULL)
+TOOLBAR_ITEM(GLOBALHISTORY_BUTTON, globalhistory, true, globalhistory_button_clicked_cb)
+TOOLBAR_ITEM(ADDBOOKMARKS_BUTTON, addbookmarks, true, addbookmarks_button_clicked_cb)
+TOOLBAR_ITEM(SHOWBOOKMARKS_BUTTON, showbookmarks, true, showbookmarks_button_clicked_cb)
+TOOLBAR_ITEM(SHOWCOOKIES_BUTTON, showcookies, true, showcookies_button_clicked_cb)
+TOOLBAR_ITEM(OPENLOCATION_BUTTON, openlocation, true, openlocation_button_clicked_cb)
TOOLBAR_ITEM(NEXTTAB_BUTTON, nexttab, false, NULL)
TOOLBAR_ITEM(PREVTAB_BUTTON, prevtab, false, NULL)
-TOOLBAR_ITEM(CONTENTS_BUTTON, contents, true, NULL)
-TOOLBAR_ITEM(GUIDE_BUTTON, guide, true, NULL)
-TOOLBAR_ITEM(INFO_BUTTON, info, true, NULL)
-TOOLBAR_ITEM(ABOUT_BUTTON, about, true, NULL)
+TOOLBAR_ITEM(CONTENTS_BUTTON, contents, true, contents_button_clicked_cb)
+TOOLBAR_ITEM(GUIDE_BUTTON, guide, true, guide_button_clicked_cb)
+TOOLBAR_ITEM(INFO_BUTTON, info, true, info_button_clicked_cb)
+TOOLBAR_ITEM(ABOUT_BUTTON, about, true, about_button_clicked_cb)
#ifdef TOOLBAR_ITEM_SET
#undef TOOLBAR_ITEM
--
NetSurf Browser
4 years, 3 months
netsurf: branch vince/gtk-tab-restyle updated. release/3.9-186-g5841e37
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/5841e373e5d0cb6ae8bb2...
...commit http://git.netsurf-browser.org/netsurf.git/commit/5841e373e5d0cb6ae8bb2f6...
...tree http://git.netsurf-browser.org/netsurf.git/tree/5841e373e5d0cb6ae8bb2f6be...
The branch, vince/gtk-tab-restyle has been updated
via 5841e373e5d0cb6ae8bb2f6bee776cae1fcf6384 (commit)
from 702f9f2219fd9041419b5f83bf179f15db82fe03 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=5841e373e5d0cb6ae8b...
commit 5841e373e5d0cb6ae8bb2f6bee776cae1fcf6384
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
another five handlers and fix menu sensitivity on throbber state change
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index 2c23364..ba37413 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -249,7 +249,7 @@ static nserror set_defaults(struct nsoption_s *defaults)
nsoption_set_int(button_type, 2);
break;
}
-
+
return NSERROR_OK;
}
@@ -261,7 +261,7 @@ static nserror set_defaults(struct nsoption_s *defaults)
*
* \param argc The number of arguments on the command line
* \param argv A string vector of command line arguments.
- * \respath A string vector of the path elements of resources
+ * \respath A string vector of the path elements of resources
*/
static nserror nsgtk_init(int argc, char** argv, char **respath)
{
@@ -1204,7 +1204,7 @@ int main(int argc, char** argv)
NSLOG(netsurf, INFO, "Unable to load translated messages");
/** \todo decide if message load faliure should be fatal */
}
-
+
/* Locate the correct user cache directory path */
ret = get_cache_home(&cache_home);
if (ret == NSERROR_NOT_FOUND) {
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 685b5d4..62b9c4f 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -927,160 +927,46 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-MULTIHANDLER(downloads)
-{
- nsgtk_download_show(g->window);
-
- return TRUE;
-}
-
-MULTIHANDLER(savewindowsize)
-{
- int x,y,w,h;
- char *choices = NULL;
-
- gtk_window_get_position(g->window, &x, &y);
- gtk_window_get_size(g->window, &w, &h);
-
- nsoption_set_int(window_width, w);
- nsoption_set_int(window_height, h);
- nsoption_set_int(window_x, x);
- nsoption_set_int(window_y, y);
-
- netsurf_mkpath(&choices, NULL, 2, nsgtk_config_home, "Choices");
- if (choices != NULL) {
- nsoption_write(choices, NULL, NULL);
- free(choices);
- }
-
- return TRUE;
-}
-
-MULTIHANDLER(toggledebugging)
-{
- struct browser_window *bw;
-
- bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_debug(bw, CONTENT_DEBUG_REDRAW);
-
- nsgtk_reflow_all_windows();
-
- return TRUE;
-}
-
-MULTIHANDLER(debugboxtree)
-{
- gchar *fname;
- gint handle;
- FILE *f;
- struct browser_window *bw;
-
- handle = g_file_open_tmp("nsgtkboxtreeXXXXXX", &fname, NULL);
- if ((handle == -1) || (fname == NULL)) {
- return TRUE;
- }
- close(handle); /* in case it was binary mode */
-
- /* save data to temporary file */
- f = fopen(fname, "w");
- if (f == NULL) {
- nsgtk_warning("Error saving box tree dump.",
- "Unable to open file for writing.");
- unlink(fname);
- return TRUE;
- }
-
- bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_debug_dump(bw, f, CONTENT_DEBUG_RENDER);
-
- fclose(f);
-
- nsgtk_viewfile("Box Tree Debug", "boxtree", fname);
-
- g_free(fname);
-
- return TRUE;
-}
-
-MULTIHANDLER(debugdomtree)
-{
- gchar *fname;
- gint handle;
- FILE *f;
- struct browser_window *bw;
-
- handle = g_file_open_tmp("nsgtkdomtreeXXXXXX", &fname, NULL);
- if ((handle == -1) || (fname == NULL)) {
- return TRUE;
- }
- close(handle); /* in case it was binary mode */
-
- /* save data to temporary file */
- f = fopen(fname, "w");
- if (f == NULL) {
- nsgtk_warning("Error saving box tree dump.",
- "Unable to open file for writing.");
- unlink(fname);
- return TRUE;
- }
-
- bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_debug_dump(bw, f, CONTENT_DEBUG_DOM);
-
- fclose(f);
-
- nsgtk_viewfile("DOM Tree Debug", "domtree", fname);
-
- g_free(fname);
-
- return TRUE;
-}
-
-
-MULTIHANDLER(stop)
-{
- struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
-
- browser_window_stop(bw);
-
- return TRUE;
-}
-
-MULTIHANDLER(reload)
-{
- struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
- if (bw == NULL)
- return TRUE;
+/**
+ * menu signal handler for activation on downloads item
+ */
+MENUHANDLER(downloads, DOWNLOADS_BUTTON);
- /* clear potential search effects */
- browser_window_search_clear(bw);
+/**
+ * menu signal handler for activation on save window size item
+ */
+MENUHANDLER(savewindowsize, SAVEWINDOWSIZE_BUTTON);
- browser_window_reload(bw, true);
+/**
+ * menu signal handler for activation on toggle debug render item
+ */
+MENUHANDLER(toggledebugging, TOGGLEDEBUGGING_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on debug box tree item
+ */
+MENUHANDLER(debugboxtree, SAVEBOXTREE_BUTTON);
-MULTIHANDLER(back)
-{
- struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
+/**
+ * menu signal handler for activation on debug dom tree item
+ */
+MENUHANDLER(debugdomtree, SAVEDOMTREE_BUTTON);
- if ((bw == NULL) || (!browser_window_history_back_available(bw)))
- return TRUE;
+/**
+ * menu signal handler for activation on stop item
+ */
+MENUHANDLER(stop, STOP_BUTTON);
- /* clear potential search effects */
- browser_window_search_clear(bw);
+/**
+ * menu signal handler for activation on reload item
+ */
+MENUHANDLER(reload, RELOAD_BUTTON);
- browser_window_history_back(bw, false);
- scaffolding_update_context(g);
+/**
+ * menu signal handler for activation on back item
+ */
+MENUHANDLER(back, BACK_BUTTON);
- return TRUE;
-}
MULTIHANDLER(forward)
{
@@ -1675,39 +1561,21 @@ void nsgtk_window_set_title(struct gui_window *gw, const char *title)
}
-
-
-#if 0
-static nserror gui_window_start_throbber(struct gui_window* gw)
-{
- struct nsgtk_scaffolding *g = nsgtk_get_scaffold(_g);
- g->buttons[STOP_BUTTON]->sensitivity = true;
- g->buttons[RELOAD_BUTTON]->sensitivity = false;
- nsgtk_scaffolding_set_sensitivity(g);
-
- scaffolding_update_context(g);
-}
-
-static nserror gui_window_stop_throbber(struct gui_window* gw)
+/* exported interface documented in scaffolding.h */
+nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active)
{
- nserror res;
- GdkPixbuf *pixbuf;
- struct nsgtk_scaffolding *g = nsgtk_get_scaffold(_g);
-
- if (g == NULL) {
- return;
+ struct nsgtk_scaffolding *gs = nsgtk_get_scaffold(gw);
+ if (active) {
+ gs->menus[STOP_BUTTON].sensitivity = true;
+ gs->menus[RELOAD_BUTTON].sensitivity = false;
+ } else {
+ gs->menus[STOP_BUTTON].sensitivity = false;
+ gs->menus[RELOAD_BUTTON].sensitivity = true;
}
+ scaffolding_update_context(gs);
-
- if (g->buttons[STOP_BUTTON] != NULL)
- g->buttons[STOP_BUTTON]->sensitivity = false;
- if (g->buttons[RELOAD_BUTTON] != NULL)
- g->buttons[RELOAD_BUTTON]->sensitivity = true;
-
- nsgtk_scaffolding_set_sensitivity(g);
-
+ return NSERROR_OK;
}
-#endif
static void
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index 0f19a24..666bc50 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -64,6 +64,11 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *gw);
nserror nsgtk_scaffolding_destroy_all(void);
/**
+ * Update scaffolding window when throbber state changes
+ */
+nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active);
+
+/**
* Obtain the most recently used scaffolding element.
*
* This allows tabs to be opened in the most recently used window
diff --git a/frontends/gtk/tabs.c b/frontends/gtk/tabs.c
index 04bd69f..3d21c65 100644
--- a/frontends/gtk/tabs.c
+++ b/frontends/gtk/tabs.c
@@ -180,7 +180,7 @@ nsgtk_tab_switch_page_after(GtkNotebook *notebook,
srcpage = gtk_notebook_get_nth_page(notebook, srcpagenum);
gw = g_object_get_data(G_OBJECT(srcpage), "gui_window");
if ((gw != NULL) && (nsgtk_get_scaffold(gw) != NULL)) {
- error = nsgtk_window_item_activate(gw, NEWTAB_BUTTON);
+ error = nsgtk_window_item_activate(gw, NEWTAB_BUTTON);
if (error != NSERROR_OK) {
NSLOG(netsurf, INFO,
"Failed to open new tab.");
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 8fbdfa1..03e07b9 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -2820,7 +2820,7 @@ fullscreen_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
- * handler for full screen tool bar item clicked signal
+ * handler for view source tool bar item clicked signal
*
* \param widget The widget the signal is being delivered to.
* \param data The toolbar context passed when the signal was connected
@@ -2848,6 +2848,172 @@ viewsource_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
+ * handler for show downloads tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+downloads_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWindow *gtkwindow; /* gtk window widget is in */
+ gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
+ nsgtk_download_show(gtkwindow);
+ return TRUE;
+}
+
+
+/**
+ * handler for show downloads tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+savewindowsize_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWindow *gtkwindow; /* gtk window widget is in */
+ int x,y,w,h;
+ char *choices = NULL;
+
+ gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
+
+ gtk_window_get_position(gtkwindow, &x, &y);
+ gtk_window_get_size(gtkwindow, &w, &h);
+
+ nsoption_set_int(window_width, w);
+ nsoption_set_int(window_height, h);
+ nsoption_set_int(window_x, x);
+ nsoption_set_int(window_y, y);
+
+ netsurf_mkpath(&choices, NULL, 2, nsgtk_config_home, "Choices");
+ if (choices != NULL) {
+ nsoption_write(choices, NULL, NULL);
+ free(choices);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for show downloads tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+toggledebugging_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_debug(bw, CONTENT_DEBUG_REDRAW);
+
+ nsgtk_reflow_all_windows();
+
+ return TRUE;
+
+}
+
+
+/**
+ * handler for debug box tree tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+debugboxtree_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ gchar *fname;
+ gint handle;
+ FILE *f;
+
+ handle = g_file_open_tmp("nsgtkboxtreeXXXXXX", &fname, NULL);
+ if ((handle == -1) || (fname == NULL)) {
+ return TRUE;
+ }
+ close(handle); /* in case it was binary mode */
+
+ /* save data to temporary file */
+ f = fopen(fname, "w");
+ if (f == NULL) {
+ nsgtk_warning("Error saving box tree dump.",
+ "Unable to open file for writing.");
+ unlink(fname);
+ return TRUE;
+ }
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_debug_dump(bw, f, CONTENT_DEBUG_RENDER);
+
+ fclose(f);
+
+ nsgtk_viewfile("Box Tree Debug", "boxtree", fname);
+
+ g_free(fname);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for debug dom tree tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+debugdomtree_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ gchar *fname;
+ gint handle;
+ FILE *f;
+
+ handle = g_file_open_tmp("nsgtkdomtreeXXXXXX", &fname, NULL);
+ if ((handle == -1) || (fname == NULL)) {
+ return TRUE;
+ }
+ close(handle); /* in case it was binary mode */
+
+ /* save data to temporary file */
+ f = fopen(fname, "w");
+ if (f == NULL) {
+ nsgtk_warning("Error saving box tree dump.",
+ "Unable to open file for writing.");
+ unlink(fname);
+ return TRUE;
+ }
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_debug_dump(bw, f, CONTENT_DEBUG_DOM);
+
+ fclose(f);
+
+ nsgtk_viewfile("DOM Tree Debug", "domtree", fname);
+
+ g_free(fname);
+
+ return TRUE;
+
+}
+
+
+/**
* create a toolbar item
*
* create a toolbar item and set up its default handlers
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index ecdd978..909b00d 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -63,7 +63,7 @@ typedef enum {
GLOBALHISTORY_BUTTON,
ADDBOOKMARKS_BUTTON,
SHOWBOOKMARKS_BUTTON,
- SHOWCOOKIES_BUTTON,
+ SHOWCOOKIES_BUTTON,
OPENLOCATION_BUTTON,
NEXTTAB_BUTTON,
PREVTAB_BUTTON,
@@ -122,11 +122,11 @@ TOOLBAR_ITEM(ZOOMMINUS_BUTTON, zoomminus, true, zoomminus_button_clicked_cb)
TOOLBAR_ITEM(ZOOMNORMAL_BUTTON, zoomnormal, true, zoomnormal_button_clicked_cb)
TOOLBAR_ITEM(FULLSCREEN_BUTTON, fullscreen, true, fullscreen_button_clicked_cb)
TOOLBAR_ITEM(VIEWSOURCE_BUTTON, viewsource, true, viewsource_button_clicked_cb)
-TOOLBAR_ITEM(DOWNLOADS_BUTTON, downloads, true, NULL)
-TOOLBAR_ITEM(SAVEWINDOWSIZE_BUTTON, savewindowsize, true, NULL)
-TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, NULL)
-TOOLBAR_ITEM(SAVEBOXTREE_BUTTON, debugboxtree, true, NULL)
-TOOLBAR_ITEM(SAVEDOMTREE_BUTTON, debugdomtree, true, NULL)
+TOOLBAR_ITEM(DOWNLOADS_BUTTON, downloads, true, downloads_button_clicked_cb)
+TOOLBAR_ITEM(SAVEWINDOWSIZE_BUTTON, savewindowsize, true, savewindowsize_button_clicked_cb)
+TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, toggledebugging_button_clicked_cb)
+TOOLBAR_ITEM(SAVEBOXTREE_BUTTON, debugboxtree, true, debugboxtree_button_clicked_cb)
+TOOLBAR_ITEM(SAVEDOMTREE_BUTTON, debugdomtree, true, debugdomtree_button_clicked_cb)
TOOLBAR_ITEM(LOCALHISTORY_BUTTON, localhistory, true, localhistory_button_clicked_cb)
TOOLBAR_ITEM(GLOBALHISTORY_BUTTON, globalhistory, true, NULL)
TOOLBAR_ITEM(ADDBOOKMARKS_BUTTON, addbookmarks, true, NULL)
diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c
index 015b5fa..666e6ea 100644
--- a/frontends/gtk/window.c
+++ b/frontends/gtk/window.c
@@ -1360,12 +1360,12 @@ gui_window_event(struct gui_window *gw, enum gui_window_event event)
case GW_EVENT_START_THROBBER:
nsgtk_toolbar_throbber(gw->toolbar, true);
- /** \todo menu sensitivity for back/reload */
+ nsgtk_scaffolding_throbber(gw, true);
break;
case GW_EVENT_STOP_THROBBER:
nsgtk_toolbar_throbber(gw->toolbar, false);
- /** \todo menu sensitivity for back/reload */
+ nsgtk_scaffolding_throbber(gw, false);
break;
default:
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/gui.c | 6 +-
frontends/gtk/scaffolding.c | 218 ++++++++---------------------------------
frontends/gtk/scaffolding.h | 5 +
frontends/gtk/tabs.c | 2 +-
frontends/gtk/toolbar.c | 168 ++++++++++++++++++++++++++++++-
frontends/gtk/toolbar_items.h | 12 +--
frontends/gtk/window.c | 4 +-
7 files changed, 227 insertions(+), 188 deletions(-)
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index 2c23364..ba37413 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -249,7 +249,7 @@ static nserror set_defaults(struct nsoption_s *defaults)
nsoption_set_int(button_type, 2);
break;
}
-
+
return NSERROR_OK;
}
@@ -261,7 +261,7 @@ static nserror set_defaults(struct nsoption_s *defaults)
*
* \param argc The number of arguments on the command line
* \param argv A string vector of command line arguments.
- * \respath A string vector of the path elements of resources
+ * \respath A string vector of the path elements of resources
*/
static nserror nsgtk_init(int argc, char** argv, char **respath)
{
@@ -1204,7 +1204,7 @@ int main(int argc, char** argv)
NSLOG(netsurf, INFO, "Unable to load translated messages");
/** \todo decide if message load faliure should be fatal */
}
-
+
/* Locate the correct user cache directory path */
ret = get_cache_home(&cache_home);
if (ret == NSERROR_NOT_FOUND) {
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 685b5d4..62b9c4f 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -927,160 +927,46 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-MULTIHANDLER(downloads)
-{
- nsgtk_download_show(g->window);
-
- return TRUE;
-}
-
-MULTIHANDLER(savewindowsize)
-{
- int x,y,w,h;
- char *choices = NULL;
-
- gtk_window_get_position(g->window, &x, &y);
- gtk_window_get_size(g->window, &w, &h);
-
- nsoption_set_int(window_width, w);
- nsoption_set_int(window_height, h);
- nsoption_set_int(window_x, x);
- nsoption_set_int(window_y, y);
-
- netsurf_mkpath(&choices, NULL, 2, nsgtk_config_home, "Choices");
- if (choices != NULL) {
- nsoption_write(choices, NULL, NULL);
- free(choices);
- }
-
- return TRUE;
-}
-
-MULTIHANDLER(toggledebugging)
-{
- struct browser_window *bw;
-
- bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_debug(bw, CONTENT_DEBUG_REDRAW);
-
- nsgtk_reflow_all_windows();
-
- return TRUE;
-}
-
-MULTIHANDLER(debugboxtree)
-{
- gchar *fname;
- gint handle;
- FILE *f;
- struct browser_window *bw;
-
- handle = g_file_open_tmp("nsgtkboxtreeXXXXXX", &fname, NULL);
- if ((handle == -1) || (fname == NULL)) {
- return TRUE;
- }
- close(handle); /* in case it was binary mode */
-
- /* save data to temporary file */
- f = fopen(fname, "w");
- if (f == NULL) {
- nsgtk_warning("Error saving box tree dump.",
- "Unable to open file for writing.");
- unlink(fname);
- return TRUE;
- }
-
- bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_debug_dump(bw, f, CONTENT_DEBUG_RENDER);
-
- fclose(f);
-
- nsgtk_viewfile("Box Tree Debug", "boxtree", fname);
-
- g_free(fname);
-
- return TRUE;
-}
-
-MULTIHANDLER(debugdomtree)
-{
- gchar *fname;
- gint handle;
- FILE *f;
- struct browser_window *bw;
-
- handle = g_file_open_tmp("nsgtkdomtreeXXXXXX", &fname, NULL);
- if ((handle == -1) || (fname == NULL)) {
- return TRUE;
- }
- close(handle); /* in case it was binary mode */
-
- /* save data to temporary file */
- f = fopen(fname, "w");
- if (f == NULL) {
- nsgtk_warning("Error saving box tree dump.",
- "Unable to open file for writing.");
- unlink(fname);
- return TRUE;
- }
-
- bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_debug_dump(bw, f, CONTENT_DEBUG_DOM);
-
- fclose(f);
-
- nsgtk_viewfile("DOM Tree Debug", "domtree", fname);
-
- g_free(fname);
-
- return TRUE;
-}
-
-
-MULTIHANDLER(stop)
-{
- struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
-
- browser_window_stop(bw);
-
- return TRUE;
-}
-
-MULTIHANDLER(reload)
-{
- struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
- if (bw == NULL)
- return TRUE;
+/**
+ * menu signal handler for activation on downloads item
+ */
+MENUHANDLER(downloads, DOWNLOADS_BUTTON);
- /* clear potential search effects */
- browser_window_search_clear(bw);
+/**
+ * menu signal handler for activation on save window size item
+ */
+MENUHANDLER(savewindowsize, SAVEWINDOWSIZE_BUTTON);
- browser_window_reload(bw, true);
+/**
+ * menu signal handler for activation on toggle debug render item
+ */
+MENUHANDLER(toggledebugging, TOGGLEDEBUGGING_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on debug box tree item
+ */
+MENUHANDLER(debugboxtree, SAVEBOXTREE_BUTTON);
-MULTIHANDLER(back)
-{
- struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
+/**
+ * menu signal handler for activation on debug dom tree item
+ */
+MENUHANDLER(debugdomtree, SAVEDOMTREE_BUTTON);
- if ((bw == NULL) || (!browser_window_history_back_available(bw)))
- return TRUE;
+/**
+ * menu signal handler for activation on stop item
+ */
+MENUHANDLER(stop, STOP_BUTTON);
- /* clear potential search effects */
- browser_window_search_clear(bw);
+/**
+ * menu signal handler for activation on reload item
+ */
+MENUHANDLER(reload, RELOAD_BUTTON);
- browser_window_history_back(bw, false);
- scaffolding_update_context(g);
+/**
+ * menu signal handler for activation on back item
+ */
+MENUHANDLER(back, BACK_BUTTON);
- return TRUE;
-}
MULTIHANDLER(forward)
{
@@ -1675,39 +1561,21 @@ void nsgtk_window_set_title(struct gui_window *gw, const char *title)
}
-
-
-#if 0
-static nserror gui_window_start_throbber(struct gui_window* gw)
-{
- struct nsgtk_scaffolding *g = nsgtk_get_scaffold(_g);
- g->buttons[STOP_BUTTON]->sensitivity = true;
- g->buttons[RELOAD_BUTTON]->sensitivity = false;
- nsgtk_scaffolding_set_sensitivity(g);
-
- scaffolding_update_context(g);
-}
-
-static nserror gui_window_stop_throbber(struct gui_window* gw)
+/* exported interface documented in scaffolding.h */
+nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active)
{
- nserror res;
- GdkPixbuf *pixbuf;
- struct nsgtk_scaffolding *g = nsgtk_get_scaffold(_g);
-
- if (g == NULL) {
- return;
+ struct nsgtk_scaffolding *gs = nsgtk_get_scaffold(gw);
+ if (active) {
+ gs->menus[STOP_BUTTON].sensitivity = true;
+ gs->menus[RELOAD_BUTTON].sensitivity = false;
+ } else {
+ gs->menus[STOP_BUTTON].sensitivity = false;
+ gs->menus[RELOAD_BUTTON].sensitivity = true;
}
+ scaffolding_update_context(gs);
-
- if (g->buttons[STOP_BUTTON] != NULL)
- g->buttons[STOP_BUTTON]->sensitivity = false;
- if (g->buttons[RELOAD_BUTTON] != NULL)
- g->buttons[RELOAD_BUTTON]->sensitivity = true;
-
- nsgtk_scaffolding_set_sensitivity(g);
-
+ return NSERROR_OK;
}
-#endif
static void
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index 0f19a24..666bc50 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -64,6 +64,11 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *gw);
nserror nsgtk_scaffolding_destroy_all(void);
/**
+ * Update scaffolding window when throbber state changes
+ */
+nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active);
+
+/**
* Obtain the most recently used scaffolding element.
*
* This allows tabs to be opened in the most recently used window
diff --git a/frontends/gtk/tabs.c b/frontends/gtk/tabs.c
index 04bd69f..3d21c65 100644
--- a/frontends/gtk/tabs.c
+++ b/frontends/gtk/tabs.c
@@ -180,7 +180,7 @@ nsgtk_tab_switch_page_after(GtkNotebook *notebook,
srcpage = gtk_notebook_get_nth_page(notebook, srcpagenum);
gw = g_object_get_data(G_OBJECT(srcpage), "gui_window");
if ((gw != NULL) && (nsgtk_get_scaffold(gw) != NULL)) {
- error = nsgtk_window_item_activate(gw, NEWTAB_BUTTON);
+ error = nsgtk_window_item_activate(gw, NEWTAB_BUTTON);
if (error != NSERROR_OK) {
NSLOG(netsurf, INFO,
"Failed to open new tab.");
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 8fbdfa1..03e07b9 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -2820,7 +2820,7 @@ fullscreen_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
- * handler for full screen tool bar item clicked signal
+ * handler for view source tool bar item clicked signal
*
* \param widget The widget the signal is being delivered to.
* \param data The toolbar context passed when the signal was connected
@@ -2848,6 +2848,172 @@ viewsource_button_clicked_cb(GtkWidget *widget, gpointer data)
/**
+ * handler for show downloads tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+downloads_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWindow *gtkwindow; /* gtk window widget is in */
+ gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
+ nsgtk_download_show(gtkwindow);
+ return TRUE;
+}
+
+
+/**
+ * handler for show downloads tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+savewindowsize_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWindow *gtkwindow; /* gtk window widget is in */
+ int x,y,w,h;
+ char *choices = NULL;
+
+ gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
+
+ gtk_window_get_position(gtkwindow, &x, &y);
+ gtk_window_get_size(gtkwindow, &w, &h);
+
+ nsoption_set_int(window_width, w);
+ nsoption_set_int(window_height, h);
+ nsoption_set_int(window_x, x);
+ nsoption_set_int(window_y, y);
+
+ netsurf_mkpath(&choices, NULL, 2, nsgtk_config_home, "Choices");
+ if (choices != NULL) {
+ nsoption_write(choices, NULL, NULL);
+ free(choices);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for show downloads tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+toggledebugging_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_debug(bw, CONTENT_DEBUG_REDRAW);
+
+ nsgtk_reflow_all_windows();
+
+ return TRUE;
+
+}
+
+
+/**
+ * handler for debug box tree tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+debugboxtree_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ gchar *fname;
+ gint handle;
+ FILE *f;
+
+ handle = g_file_open_tmp("nsgtkboxtreeXXXXXX", &fname, NULL);
+ if ((handle == -1) || (fname == NULL)) {
+ return TRUE;
+ }
+ close(handle); /* in case it was binary mode */
+
+ /* save data to temporary file */
+ f = fopen(fname, "w");
+ if (f == NULL) {
+ nsgtk_warning("Error saving box tree dump.",
+ "Unable to open file for writing.");
+ unlink(fname);
+ return TRUE;
+ }
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_debug_dump(bw, f, CONTENT_DEBUG_RENDER);
+
+ fclose(f);
+
+ nsgtk_viewfile("Box Tree Debug", "boxtree", fname);
+
+ g_free(fname);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for debug dom tree tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+debugdomtree_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ gchar *fname;
+ gint handle;
+ FILE *f;
+
+ handle = g_file_open_tmp("nsgtkdomtreeXXXXXX", &fname, NULL);
+ if ((handle == -1) || (fname == NULL)) {
+ return TRUE;
+ }
+ close(handle); /* in case it was binary mode */
+
+ /* save data to temporary file */
+ f = fopen(fname, "w");
+ if (f == NULL) {
+ nsgtk_warning("Error saving box tree dump.",
+ "Unable to open file for writing.");
+ unlink(fname);
+ return TRUE;
+ }
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_debug_dump(bw, f, CONTENT_DEBUG_DOM);
+
+ fclose(f);
+
+ nsgtk_viewfile("DOM Tree Debug", "domtree", fname);
+
+ g_free(fname);
+
+ return TRUE;
+
+}
+
+
+/**
* create a toolbar item
*
* create a toolbar item and set up its default handlers
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index ecdd978..909b00d 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -63,7 +63,7 @@ typedef enum {
GLOBALHISTORY_BUTTON,
ADDBOOKMARKS_BUTTON,
SHOWBOOKMARKS_BUTTON,
- SHOWCOOKIES_BUTTON,
+ SHOWCOOKIES_BUTTON,
OPENLOCATION_BUTTON,
NEXTTAB_BUTTON,
PREVTAB_BUTTON,
@@ -122,11 +122,11 @@ TOOLBAR_ITEM(ZOOMMINUS_BUTTON, zoomminus, true, zoomminus_button_clicked_cb)
TOOLBAR_ITEM(ZOOMNORMAL_BUTTON, zoomnormal, true, zoomnormal_button_clicked_cb)
TOOLBAR_ITEM(FULLSCREEN_BUTTON, fullscreen, true, fullscreen_button_clicked_cb)
TOOLBAR_ITEM(VIEWSOURCE_BUTTON, viewsource, true, viewsource_button_clicked_cb)
-TOOLBAR_ITEM(DOWNLOADS_BUTTON, downloads, true, NULL)
-TOOLBAR_ITEM(SAVEWINDOWSIZE_BUTTON, savewindowsize, true, NULL)
-TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, NULL)
-TOOLBAR_ITEM(SAVEBOXTREE_BUTTON, debugboxtree, true, NULL)
-TOOLBAR_ITEM(SAVEDOMTREE_BUTTON, debugdomtree, true, NULL)
+TOOLBAR_ITEM(DOWNLOADS_BUTTON, downloads, true, downloads_button_clicked_cb)
+TOOLBAR_ITEM(SAVEWINDOWSIZE_BUTTON, savewindowsize, true, savewindowsize_button_clicked_cb)
+TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, toggledebugging_button_clicked_cb)
+TOOLBAR_ITEM(SAVEBOXTREE_BUTTON, debugboxtree, true, debugboxtree_button_clicked_cb)
+TOOLBAR_ITEM(SAVEDOMTREE_BUTTON, debugdomtree, true, debugdomtree_button_clicked_cb)
TOOLBAR_ITEM(LOCALHISTORY_BUTTON, localhistory, true, localhistory_button_clicked_cb)
TOOLBAR_ITEM(GLOBALHISTORY_BUTTON, globalhistory, true, NULL)
TOOLBAR_ITEM(ADDBOOKMARKS_BUTTON, addbookmarks, true, NULL)
diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c
index 015b5fa..666e6ea 100644
--- a/frontends/gtk/window.c
+++ b/frontends/gtk/window.c
@@ -1360,12 +1360,12 @@ gui_window_event(struct gui_window *gw, enum gui_window_event event)
case GW_EVENT_START_THROBBER:
nsgtk_toolbar_throbber(gw->toolbar, true);
- /** \todo menu sensitivity for back/reload */
+ nsgtk_scaffolding_throbber(gw, true);
break;
case GW_EVENT_STOP_THROBBER:
nsgtk_toolbar_throbber(gw->toolbar, false);
- /** \todo menu sensitivity for back/reload */
+ nsgtk_scaffolding_throbber(gw, false);
break;
default:
--
NetSurf Browser
4 years, 3 months
netsurf: branch vince/gtk-tab-restyle updated. release/3.9-185-g702f9f2
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/702f9f2219fd9041419b5...
...commit http://git.netsurf-browser.org/netsurf.git/commit/702f9f2219fd9041419b5f8...
...tree http://git.netsurf-browser.org/netsurf.git/tree/702f9f2219fd9041419b5f83b...
The branch, vince/gtk-tab-restyle has been updated
via 702f9f2219fd9041419b5f83bf179f15db82fe03 (commit)
from 90bd61944e3e8c790803acfbade09369a9dcc141 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=702f9f2219fd9041419...
commit 702f9f2219fd9041419b5f83bf179f15db82fe03
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
add five more handlers
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 309ee04..685b5d4 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -133,8 +133,6 @@ struct nsgtk_scaffolding {
/** scaffold container window */
GtkWindow *window;
- /** flag for the scaffold window fullscreen status */
- bool fullscreen;
/** tab widget holding displayed pages */
GtkNotebook *notebook;
@@ -819,60 +817,32 @@ MULTIHANDLER(find)
/**
* menu signal handler for activation on preferences item
*/
-MENUHANDLER(preferences,PREFERENCES_BUTTON);
+MENUHANDLER(preferences, PREFERENCES_BUTTON);
+/**
+ * menu signal handler for activation on zoom plus item
+ */
+MENUHANDLER(zoomplus, ZOOMPLUS_BUTTON);
-MULTIHANDLER(zoomplus)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_set_scale(bw, 0.05, false);
-
- return TRUE;
-}
-
-MULTIHANDLER(zoomnormal)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_set_scale(bw, 1.0, true);
-
- return TRUE;
-}
-
-MULTIHANDLER(zoomminus)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_set_scale(bw, -0.05, false);
-
- return TRUE;
-}
-
-MULTIHANDLER(fullscreen)
-{
- if (g->fullscreen) {
- gtk_window_unfullscreen(g->window);
- } else {
- gtk_window_fullscreen(g->window);
- }
-
- g->fullscreen = !g->fullscreen;
-
- return TRUE;
-}
+/**
+ * menu signal handler for activation on zoom minus item
+ */
+MENUHANDLER(zoomminus, ZOOMMINUS_BUTTON);
-MULTIHANDLER(viewsource)
-{
- nserror ret;
+/**
+ * menu signal handler for activation on zoom normal item
+ */
+MENUHANDLER(zoomnormal, ZOOMNORMAL_BUTTON);
- ret = nsgtk_viewsource(g->window, nsgtk_get_browser_window(g->top_level));
- if (ret != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(ret), 0);
- }
+/**
+ * menu signal handler for activation on full screen item
+ */
+MENUHANDLER(fullscreen, FULLSCREEN_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on view source item
+ */
+MENUHANDLER(viewsource, VIEWSOURCE_BUTTON);
static gboolean
@@ -2205,8 +2175,6 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
nsgtk_menu_connect_signals(gs);
nsgtk_menu_set_sensitivity(gs);
- gs->fullscreen = false;
-
/* attach to the list */
if (scaf_list) {
scaf_list->prev = gs;
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 1560a6e..8fbdfa1 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -2725,7 +2725,125 @@ preferences_button_clicked_cb(GtkWidget *widget, gpointer data)
}
return TRUE;
+}
+
+
+/**
+ * handler for zoom plus tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+zoomplus_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_set_scale(bw, 0.05, false);
+
+ return TRUE;
+}
+
+/**
+ * handler for zoom minus tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+zoomminus_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_set_scale(bw, -0.05, false);
+
+ return TRUE;
+
+}
+
+
+/**
+ * handler for zoom normal tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+zoomnormal_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_set_scale(bw, 1.0, true);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for full screen tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+fullscreen_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWindow *gtkwindow; /* gtk window widget is in */
+ GdkWindow *gdkwindow;
+ GdkWindowState state;
+
+ gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
+ gdkwindow = gtk_widget_get_window(GTK_WIDGET(gtkwindow));
+ state = gdk_window_get_state(gdkwindow);
+
+ if (state & GDK_WINDOW_STATE_FULLSCREEN) {
+ gtk_window_unfullscreen(gtkwindow);
+ } else {
+ gtk_window_fullscreen(gtkwindow);
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for full screen tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+viewsource_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWindow *gtkwindow; /* gtk window widget is in */
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
+
+ res = nsgtk_viewsource(gtkwindow, bw);
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
}
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index b4bc91f..ecdd978 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -117,11 +117,11 @@ TOOLBAR_ITEM(DELETE_BUTTON, delete, false, delete_button_clicked_cb)
TOOLBAR_ITEM(SELECTALL_BUTTON, selectall, true, selectall_button_clicked_cb)
TOOLBAR_ITEM(FIND_BUTTON, find, true, NULL)
TOOLBAR_ITEM(PREFERENCES_BUTTON, preferences, true, preferences_button_clicked_cb)
-TOOLBAR_ITEM(ZOOMPLUS_BUTTON, zoomplus, true, NULL)
-TOOLBAR_ITEM(ZOOMMINUS_BUTTON, zoomminus, true, NULL)
-TOOLBAR_ITEM(ZOOMNORMAL_BUTTON, zoomnormal, true, NULL)
-TOOLBAR_ITEM(FULLSCREEN_BUTTON, fullscreen, true, NULL)
-TOOLBAR_ITEM(VIEWSOURCE_BUTTON, viewsource, true, NULL)
+TOOLBAR_ITEM(ZOOMPLUS_BUTTON, zoomplus, true, zoomplus_button_clicked_cb)
+TOOLBAR_ITEM(ZOOMMINUS_BUTTON, zoomminus, true, zoomminus_button_clicked_cb)
+TOOLBAR_ITEM(ZOOMNORMAL_BUTTON, zoomnormal, true, zoomnormal_button_clicked_cb)
+TOOLBAR_ITEM(FULLSCREEN_BUTTON, fullscreen, true, fullscreen_button_clicked_cb)
+TOOLBAR_ITEM(VIEWSOURCE_BUTTON, viewsource, true, viewsource_button_clicked_cb)
TOOLBAR_ITEM(DOWNLOADS_BUTTON, downloads, true, NULL)
TOOLBAR_ITEM(SAVEWINDOWSIZE_BUTTON, savewindowsize, true, NULL)
TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, NULL)
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/scaffolding.c | 74 ++++++++------------------
frontends/gtk/toolbar.c | 118 +++++++++++++++++++++++++++++++++++++++++
frontends/gtk/toolbar_items.h | 10 ++--
3 files changed, 144 insertions(+), 58 deletions(-)
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 309ee04..685b5d4 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -133,8 +133,6 @@ struct nsgtk_scaffolding {
/** scaffold container window */
GtkWindow *window;
- /** flag for the scaffold window fullscreen status */
- bool fullscreen;
/** tab widget holding displayed pages */
GtkNotebook *notebook;
@@ -819,60 +817,32 @@ MULTIHANDLER(find)
/**
* menu signal handler for activation on preferences item
*/
-MENUHANDLER(preferences,PREFERENCES_BUTTON);
+MENUHANDLER(preferences, PREFERENCES_BUTTON);
+/**
+ * menu signal handler for activation on zoom plus item
+ */
+MENUHANDLER(zoomplus, ZOOMPLUS_BUTTON);
-MULTIHANDLER(zoomplus)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_set_scale(bw, 0.05, false);
-
- return TRUE;
-}
-
-MULTIHANDLER(zoomnormal)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_set_scale(bw, 1.0, true);
-
- return TRUE;
-}
-
-MULTIHANDLER(zoomminus)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-
- browser_window_set_scale(bw, -0.05, false);
-
- return TRUE;
-}
-
-MULTIHANDLER(fullscreen)
-{
- if (g->fullscreen) {
- gtk_window_unfullscreen(g->window);
- } else {
- gtk_window_fullscreen(g->window);
- }
-
- g->fullscreen = !g->fullscreen;
-
- return TRUE;
-}
+/**
+ * menu signal handler for activation on zoom minus item
+ */
+MENUHANDLER(zoomminus, ZOOMMINUS_BUTTON);
-MULTIHANDLER(viewsource)
-{
- nserror ret;
+/**
+ * menu signal handler for activation on zoom normal item
+ */
+MENUHANDLER(zoomnormal, ZOOMNORMAL_BUTTON);
- ret = nsgtk_viewsource(g->window, nsgtk_get_browser_window(g->top_level));
- if (ret != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(ret), 0);
- }
+/**
+ * menu signal handler for activation on full screen item
+ */
+MENUHANDLER(fullscreen, FULLSCREEN_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on view source item
+ */
+MENUHANDLER(viewsource, VIEWSOURCE_BUTTON);
static gboolean
@@ -2205,8 +2175,6 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
nsgtk_menu_connect_signals(gs);
nsgtk_menu_set_sensitivity(gs);
- gs->fullscreen = false;
-
/* attach to the list */
if (scaf_list) {
scaf_list->prev = gs;
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 1560a6e..8fbdfa1 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -2725,7 +2725,125 @@ preferences_button_clicked_cb(GtkWidget *widget, gpointer data)
}
return TRUE;
+}
+
+
+/**
+ * handler for zoom plus tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+zoomplus_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_set_scale(bw, 0.05, false);
+
+ return TRUE;
+}
+
+/**
+ * handler for zoom minus tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+zoomminus_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_set_scale(bw, -0.05, false);
+
+ return TRUE;
+
+}
+
+
+/**
+ * handler for zoom normal tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+zoomnormal_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ browser_window_set_scale(bw, 1.0, true);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for full screen tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+fullscreen_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWindow *gtkwindow; /* gtk window widget is in */
+ GdkWindow *gdkwindow;
+ GdkWindowState state;
+
+ gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
+ gdkwindow = gtk_widget_get_window(GTK_WIDGET(gtkwindow));
+ state = gdk_window_get_state(gdkwindow);
+
+ if (state & GDK_WINDOW_STATE_FULLSCREEN) {
+ gtk_window_unfullscreen(gtkwindow);
+ } else {
+ gtk_window_fullscreen(gtkwindow);
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for full screen tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+viewsource_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWindow *gtkwindow; /* gtk window widget is in */
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW));
+
+ res = nsgtk_viewsource(gtkwindow, bw);
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
}
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index b4bc91f..ecdd978 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -117,11 +117,11 @@ TOOLBAR_ITEM(DELETE_BUTTON, delete, false, delete_button_clicked_cb)
TOOLBAR_ITEM(SELECTALL_BUTTON, selectall, true, selectall_button_clicked_cb)
TOOLBAR_ITEM(FIND_BUTTON, find, true, NULL)
TOOLBAR_ITEM(PREFERENCES_BUTTON, preferences, true, preferences_button_clicked_cb)
-TOOLBAR_ITEM(ZOOMPLUS_BUTTON, zoomplus, true, NULL)
-TOOLBAR_ITEM(ZOOMMINUS_BUTTON, zoomminus, true, NULL)
-TOOLBAR_ITEM(ZOOMNORMAL_BUTTON, zoomnormal, true, NULL)
-TOOLBAR_ITEM(FULLSCREEN_BUTTON, fullscreen, true, NULL)
-TOOLBAR_ITEM(VIEWSOURCE_BUTTON, viewsource, true, NULL)
+TOOLBAR_ITEM(ZOOMPLUS_BUTTON, zoomplus, true, zoomplus_button_clicked_cb)
+TOOLBAR_ITEM(ZOOMMINUS_BUTTON, zoomminus, true, zoomminus_button_clicked_cb)
+TOOLBAR_ITEM(ZOOMNORMAL_BUTTON, zoomnormal, true, zoomnormal_button_clicked_cb)
+TOOLBAR_ITEM(FULLSCREEN_BUTTON, fullscreen, true, fullscreen_button_clicked_cb)
+TOOLBAR_ITEM(VIEWSOURCE_BUTTON, viewsource, true, viewsource_button_clicked_cb)
TOOLBAR_ITEM(DOWNLOADS_BUTTON, downloads, true, NULL)
TOOLBAR_ITEM(SAVEWINDOWSIZE_BUTTON, savewindowsize, true, NULL)
TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, NULL)
--
NetSurf Browser
4 years, 3 months
netsurf: branch vince/gtk-tab-restyle updated. release/3.9-184-g90bd619
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/90bd61944e3e8c790803a...
...commit http://git.netsurf-browser.org/netsurf.git/commit/90bd61944e3e8c790803acf...
...tree http://git.netsurf-browser.org/netsurf.git/tree/90bd61944e3e8c790803acfba...
The branch, vince/gtk-tab-restyle has been updated
via 90bd61944e3e8c790803acfbade09369a9dcc141 (commit)
via 23b8c98d43e092549b37d256d163e3613a153ebc (commit)
from 0ddbb21fdf210aae33143f4f3949bf35b6651376 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=90bd61944e3e8c79080...
commit 90bd61944e3e8c790803acfbade09369a9dcc141
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
implemented another seven signal handlers
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index ceccda9..309ee04 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -95,6 +95,19 @@ static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g)
static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
/**
+ * handle menu activate signals by calling toolbar item activation
+ */
+#define MENUHANDLER(name, itemid) \
+static gboolean \
+nsgtk_on_##name##_activate_menu(GtkMenuItem *widget, gpointer data) \
+{ \
+ struct nsgtk_scaffolding *gs = (struct nsgtk_scaffolding *)data;\
+ nsgtk_window_item_activate(gs->top_level, itemid); \
+ return TRUE; \
+}
+
+
+/**
* menu entry context
*/
struct nsgtk_menu {
@@ -604,122 +617,52 @@ static void nsgtk_openfile_open(const char *filename)
/**
* menu signal handler for activation on new window item
*/
-static gboolean
-nsgtk_on_newwindow_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, NEWWINDOW_BUTTON);
- return TRUE;
-}
+MENUHANDLER(newwindow, NEWWINDOW_BUTTON);
/**
* menu signal handler for activation on new tab item
*/
-static gboolean
-nsgtk_on_newtab_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, NEWTAB_BUTTON);
- return TRUE;
-}
+MENUHANDLER(newtab, NEWTAB_BUTTON);
/**
* menu signal handler for activation on open file item
*/
-static gboolean
-nsgtk_on_openfile_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, OPENFILE_BUTTON);
- return TRUE;
-}
-
+MENUHANDLER(openfile, OPENFILE_BUTTON);
/**
* menu signal handler for activation on export complete page item
*/
-static gboolean
-nsgtk_on_savepage_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, SAVEPAGE_BUTTON);
- return TRUE;
-}
-
+MENUHANDLER(savepage, SAVEPAGE_BUTTON);
/**
* menu signal handler for activation on export pdf item
*/
-static gboolean
-nsgtk_on_pdf_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, PDF_BUTTON);
- return TRUE;
-}
+MENUHANDLER(pdf, PDF_BUTTON);
/**
* menu signal handler for activation on export plain text item
*/
-static gboolean
-nsgtk_on_plaintext_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, PLAINTEXT_BUTTON);
- return TRUE;
-}
-
+MENUHANDLER(plaintext, PLAINTEXT_BUTTON);
/**
* menu signal handler for activation on print preview item
*/
-static gboolean
-nsgtk_on_printpreview_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, PRINTPREVIEW_BUTTON);
- return TRUE;
-}
-
+MENUHANDLER(printpreview, PRINTPREVIEW_BUTTON);
/**
* menu signal handler for activation on print item
*/
-static gboolean
-nsgtk_on_print_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, PRINT_BUTTON);
- return TRUE;
-}
-
+MENUHANDLER(print, PRINT_BUTTON);
/**
* menu signal handler for activation on close window item
*/
-static gboolean
-nsgtk_on_closewindow_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, CLOSEWINDOW_BUTTON);
- return TRUE;
-}
-
-
-MULTIHANDLER(quit)
-{
- struct nsgtk_scaffolding *gs;
-
- if (nsgtk_check_for_downloads(g->window) == false) {
- gs = scaf_list;
- while (gs != NULL) {
- gtk_widget_destroy(GTK_WIDGET(gs->window));
- gs = gs->next;
- }
- }
+MENUHANDLER(closewindow, CLOSEWINDOW_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on close window item
+ */
+MENUHANDLER(quit, QUIT_BUTTON);
static gboolean
@@ -832,54 +775,25 @@ nsgtk_on_link_copy_activate_menu(GtkMenuItem *widget, gpointer data)
}
-MULTIHANDLER(cut)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- GtkWidget *focused = gtk_window_get_focus(g->window);
-
- /* If the url bar has focus, let gtk handle it */
- if (GTK_IS_EDITABLE (focused))
- //gtk_editable_cut_clipboard (GTK_EDITABLE(g->url_bar));
- ;
- else
- browser_window_key_press(bw, NS_KEY_CUT_SELECTION);
-
- return TRUE;
-}
-
-MULTIHANDLER(copy)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- GtkWidget *focused = gtk_window_get_focus(g->window);
-
- /* If the url bar has focus, let gtk handle it */
- if (GTK_IS_EDITABLE (focused))
- //gtk_editable_copy_clipboard(GTK_EDITABLE(g->url_bar));
- ;
- else
- browser_window_key_press(bw, NS_KEY_COPY_SELECTION);
-
- return TRUE;
-}
-
-MULTIHANDLER(paste)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- GtkWidget *focused = gtk_window_get_focus(g->window);
+/**
+ * menu signal handler for activation on cut item
+ */
+MENUHANDLER(cut, CUT_BUTTON);
- /* If the url bar has focus, let gtk handle it */
- if (GTK_IS_EDITABLE (focused))
- gtk_editable_paste_clipboard (GTK_EDITABLE (focused));
- else
- browser_window_key_press(bw, NS_KEY_PASTE);
+/**
+ * menu signal handler for activation on copy item
+ */
+MENUHANDLER(copy, COPY_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on paste item
+ */
+MENUHANDLER(paste, PASTE_BUTTON);
-MULTIHANDLER(delete)
-{
- return TRUE;
-}
+/**
+ * menu signal handler for activation on delete item
+ */
+MENUHANDLER(delete, DELETE_BUTTON);
static gboolean
@@ -890,22 +804,11 @@ nsgtk_on_customize_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-MULTIHANDLER(selectall)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-#if 0
- if (nsgtk_widget_has_focus(GTK_WIDGET(g->url_bar))) {
- NSLOG(netsurf, INFO, "Selecting all URL bar text");
- gtk_editable_select_region(GTK_EDITABLE(g->url_bar), 0, -1);
- } else {
-#endif
- NSLOG(netsurf, INFO, "Selecting all document text");
- browser_window_key_press(bw, NS_KEY_SELECT_ALL);
-#if 0
- }
-#endif
- return TRUE;
-}
+/**
+ * menu signal handler for activation on selectall item
+ */
+MENUHANDLER(selectall, SELECTALL_BUTTON);
+
MULTIHANDLER(find)
{
@@ -913,18 +816,11 @@ MULTIHANDLER(find)
return TRUE;
}
-MULTIHANDLER(preferences)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- GtkWidget* wndpreferences;
-
- wndpreferences = nsgtk_preferences(bw, g->window);
- if (wndpreferences != NULL) {
- gtk_widget_show(GTK_WIDGET(wndpreferences));
- }
+/**
+ * menu signal handler for activation on preferences item
+ */
+MENUHANDLER(preferences,PREFERENCES_BUTTON);
- return TRUE;
-}
MULTIHANDLER(zoomplus)
{
@@ -1973,6 +1869,27 @@ static struct gui_search_web_table search_web_table = {
struct gui_search_web_table *nsgtk_search_web_table = &search_web_table;
/* exported interface documented in gtk/scaffolding.h */
+nserror nsgtk_scaffolding_destroy_all(void)
+{
+ struct nsgtk_scaffolding *gs;
+
+ gs = scaf_list;
+ assert(gs != NULL);
+
+ if (nsgtk_check_for_downloads(gs->window) == true) {
+ return NSERROR_INVALID;
+ }
+
+ /* iterate all scaffolding windows and destroy them */
+ while (gs != NULL) {
+ gtk_widget_destroy(GTK_WIDGET(gs->window));
+ gs = gs->next;
+ }
+ return NSERROR_OK;
+}
+
+
+/* exported interface documented in gtk/scaffolding.h */
GtkWindow* nsgtk_scaffolding_window(struct nsgtk_scaffolding *g)
{
return g->window;
@@ -2242,8 +2159,10 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
/* connect main window signals to their handlers. */
- CONNECT(gs->window, "delete-event",
- scaffolding_window_delete_event, gs);
+ CONNECT(gs->window,
+ "delete-event",
+ scaffolding_window_delete_event,
+ gs);
CONNECT(gs->window, "destroy", scaffolding_window_destroy, gs);
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index d5a916f..0f19a24 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -56,6 +56,14 @@ struct gtk_search {
struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *gw);
/**
+ * causes all scaffolding windows to be destroyed.
+ *
+ * \return NSERROR_OK and all scaffolding windows destroyed else
+ * NSERROR_INVALID if download in progress and user continued.
+ */
+nserror nsgtk_scaffolding_destroy_all(void);
+
+/**
* Obtain the most recently used scaffolding element.
*
* This allows tabs to be opened in the most recently used window
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 57cda1e..1560a6e 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -41,6 +41,7 @@
#include "desktop/print.h"
#include "netsurf/content.h"
#include "netsurf/browser_window.h"
+#include "netsurf/keypress.h"
#include "gtk/toolbar_items.h"
#include "gtk/completion.h"
@@ -57,6 +58,7 @@
#include "gtk/tabs.h"
#include "gtk/print.h"
#include "gtk/layout_pango.h"
+#include "gtk/preferences.h"
#include "gtk/toolbar.h"
/**
@@ -2528,6 +2530,204 @@ print_button_clicked_cb(GtkWidget *widget, gpointer data)
return TRUE;
}
+/**
+ * handler for quit tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+quit_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nsgtk_scaffolding_destroy_all();
+ return TRUE;
+}
+
+
+/**
+ * handler for cut tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+cut_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_cut_clipboard(GTK_EDITABLE(focused));
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_CUT_SELECTION);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for copy tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+copy_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_copy_clipboard(GTK_EDITABLE(focused));
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_COPY_SELECTION);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for paste tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+paste_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_paste_clipboard(GTK_EDITABLE(focused));
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_PASTE);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for delete tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+delete_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_delete_selection(GTK_EDITABLE(focused));
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_CLEAR_SELECTION);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for select all tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+selectall_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_select_region(GTK_EDITABLE(focused), 0, -1);
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_SELECT_ALL);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for preferences tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+preferences_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *toplevel;
+ GtkWidget *wndpreferences;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ wndpreferences = nsgtk_preferences(bw, GTK_WINDOW(toplevel));
+ if (wndpreferences != NULL) {
+ gtk_widget_show(wndpreferences);
+ }
+
+ return TRUE;
+
+}
+
/**
* create a toolbar item
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 24afef9..b4bc91f 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -109,14 +109,14 @@ TOOLBAR_ITEM(DRAWFILE_BUTTON, drawfile, false, NULL)
TOOLBAR_ITEM(POSTSCRIPT_BUTTON, postscript, false, NULL)
TOOLBAR_ITEM(PRINTPREVIEW_BUTTON, printpreview, false, NULL)
TOOLBAR_ITEM(PRINT_BUTTON, print, true, print_button_clicked_cb)
-TOOLBAR_ITEM(QUIT_BUTTON, quit, true, NULL)
-TOOLBAR_ITEM(CUT_BUTTON, cut, true, NULL)
-TOOLBAR_ITEM(COPY_BUTTON, copy, true, NULL)
-TOOLBAR_ITEM(PASTE_BUTTON, paste, true, NULL)
-TOOLBAR_ITEM(DELETE_BUTTON, delete, false, NULL)
-TOOLBAR_ITEM(SELECTALL_BUTTON, selectall, true, NULL)
+TOOLBAR_ITEM(QUIT_BUTTON, quit, true, quit_button_clicked_cb)
+TOOLBAR_ITEM(CUT_BUTTON, cut, true, cut_button_clicked_cb)
+TOOLBAR_ITEM(COPY_BUTTON, copy, true, copy_button_clicked_cb)
+TOOLBAR_ITEM(PASTE_BUTTON, paste, true, paste_button_clicked_cb)
+TOOLBAR_ITEM(DELETE_BUTTON, delete, false, delete_button_clicked_cb)
+TOOLBAR_ITEM(SELECTALL_BUTTON, selectall, true, selectall_button_clicked_cb)
TOOLBAR_ITEM(FIND_BUTTON, find, true, NULL)
-TOOLBAR_ITEM(PREFERENCES_BUTTON, preferences, true, NULL)
+TOOLBAR_ITEM(PREFERENCES_BUTTON, preferences, true, preferences_button_clicked_cb)
TOOLBAR_ITEM(ZOOMPLUS_BUTTON, zoomplus, true, NULL)
TOOLBAR_ITEM(ZOOMMINUS_BUTTON, zoomminus, true, NULL)
TOOLBAR_ITEM(ZOOMNORMAL_BUTTON, zoomnormal, true, NULL)
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=23b8c98d43e092549b3...
commit 23b8c98d43e092549b37d256d163e3613a153ebc
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
implement more toolbar item handlers and make menus call them
diff --git a/frontends/gtk/menu.c b/frontends/gtk/menu.c
index 6a60332..909016a 100644
--- a/frontends/gtk/menu.c
+++ b/frontends/gtk/menu.c
@@ -142,21 +142,23 @@ nsgtk_menu_add_image_item(GtkMenu *menu,
static struct nsgtk_export_submenu *
nsgtk_menu_export_submenu(GtkAccelGroup *group)
{
- struct nsgtk_export_submenu *ret = malloc(sizeof(struct
- nsgtk_export_submenu));
+ struct nsgtk_export_submenu *ret;
+ ret = malloc(sizeof(struct nsgtk_export_submenu));
+
if (ret == NULL) {
nsgtk_warning(messages_get("NoMemory"), 0);
return NULL;
}
+
ret->export_menu = GTK_MENU(gtk_menu_new());
if (ret->export_menu == NULL) {
nsgtk_warning(messages_get("NoMemory"), 0);
free(ret);
return NULL;
}
+
+ IMAGE_ITEM(export, savepage, gtkSavePage, ret, group);
IMAGE_ITEM(export, plaintext, gtkPlainText, ret, group);
- IMAGE_ITEM(export, drawfile, gtkDrawFile, ret, group);
- IMAGE_ITEM(export, postscript, gtkPostScript, ret, group);
IMAGE_ITEM(export, pdf, gtkPDF, ret, group);
return ret;
}
@@ -323,7 +325,6 @@ static struct nsgtk_file_menu *nsgtk_menu_file_submenu(GtkAccelGroup *group)
IMAGE_ITEM(file, openfile, gtkOpenFile, fmenu, group);
IMAGE_ITEM(file, closewindow, gtkCloseWindow, fmenu, group);
ADD_SEP(file, fmenu);
- IMAGE_ITEM(file, savepage, gtkSavePage, fmenu, group);
IMAGE_ITEM(file, export, gtkExport, fmenu, group);
ADD_SEP(file, fmenu);
IMAGE_ITEM(file, printpreview, gtkPrintPreview, fmenu, group);
diff --git a/frontends/gtk/menu.h b/frontends/gtk/menu.h
index 5da5cb1..6dbb433 100644
--- a/frontends/gtk/menu.h
+++ b/frontends/gtk/menu.h
@@ -15,24 +15,26 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef _NETSURF_GTK_MENU_H_
-#define _NETSURF_GTK_MENU_H_
+#ifndef NETSURF_GTK_MENU_H_
+#define NETSURF_GTK_MENU_H_
#include <gtk/gtk.h>
+/**
+ * File menu item on menubar
+ */
struct nsgtk_file_menu {
- GtkMenuItem *file; /* File menu item on menubar */
- GtkMenu *file_menu;
- GtkWidget *newwindow_menuitem;
- GtkWidget *newtab_menuitem;
- GtkWidget *openfile_menuitem;
- GtkWidget *closewindow_menuitem;
- GtkWidget *savepage_menuitem;
- GtkWidget *export_menuitem;
- struct nsgtk_export_submenu *export_submenu;
- GtkWidget *printpreview_menuitem;
- GtkWidget *print_menuitem;
- GtkWidget *quit_menuitem;
+ GtkMenuItem *file;
+ GtkMenu *file_menu;
+ GtkWidget *newwindow_menuitem;
+ GtkWidget *newtab_menuitem;
+ GtkWidget *openfile_menuitem;
+ GtkWidget *closewindow_menuitem;
+ GtkWidget *export_menuitem;
+ struct nsgtk_export_submenu *export_submenu;
+ GtkWidget *printpreview_menuitem;
+ GtkWidget *print_menuitem;
+ GtkWidget *quit_menuitem;
};
struct nsgtk_edit_menu {
@@ -88,35 +90,34 @@ struct nsgtk_tools_menu {
};
struct nsgtk_help_menu {
- GtkMenuItem *help; /* Help menu item on menubar */
- GtkMenu *help_menu;
- GtkWidget *contents_menuitem;
- GtkWidget *guide_menuitem;
- GtkWidget *info_menuitem;
- GtkWidget *about_menuitem;
+ GtkMenuItem *help; /* Help menu item on menubar */
+ GtkMenu *help_menu;
+ GtkWidget *contents_menuitem;
+ GtkWidget *guide_menuitem;
+ GtkWidget *info_menuitem;
+ GtkWidget *about_menuitem;
};
struct nsgtk_export_submenu {
- GtkMenu *export_menu;
- GtkWidget *plaintext_menuitem;
- GtkWidget *drawfile_menuitem;
- GtkWidget *postscript_menuitem;
- GtkWidget *pdf_menuitem;
+ GtkMenu *export_menu;
+ GtkWidget *savepage_menuitem;
+ GtkWidget *plaintext_menuitem;
+ GtkWidget *pdf_menuitem;
};
struct nsgtk_scaleview_submenu {
- GtkMenu *scaleview_menu;
- GtkWidget *zoomplus_menuitem;
- GtkWidget *zoomminus_menuitem;
- GtkWidget *zoomnormal_menuitem;
+ GtkMenu *scaleview_menu;
+ GtkWidget *zoomplus_menuitem;
+ GtkWidget *zoomminus_menuitem;
+ GtkWidget *zoomnormal_menuitem;
};
struct nsgtk_tabs_submenu {
- GtkMenu *tabs_menu;
- GtkWidget *nexttab_menuitem;
- GtkWidget *prevtab_menuitem;
- GtkWidget *closetab_menuitem;
+ GtkMenu *tabs_menu;
+ GtkWidget *nexttab_menuitem;
+ GtkWidget *prevtab_menuitem;
+ GtkWidget *closetab_menuitem;
};
struct nsgtk_images_submenu {
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 10d9681..ceccda9 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -624,7 +624,7 @@ nsgtk_on_newtab_activate_menu(GtkMenuItem *widget, gpointer data)
}
/**
- * menu signal handler for activation on openfile item
+ * menu signal handler for activation on open file item
*/
static gboolean
nsgtk_on_openfile_activate_menu(GtkMenuItem *widget, gpointer data)
@@ -636,303 +636,60 @@ nsgtk_on_openfile_activate_menu(GtkMenuItem *widget, gpointer data)
/**
- * callback to determine if a path is a directory.
- *
- * \param info The path information
- * \param data context pointer set to NULL
- * \return TRUE if path is a directory else false
+ * menu signal handler for activation on export complete page item
*/
static gboolean
-nsgtk_filter_directory(const GtkFileFilterInfo *info,
- gpointer data)
-{
- DIR *d = opendir(info->filename);
- if (d == NULL)
- return FALSE;
- closedir(d);
- return TRUE;
-}
-
-MULTIHANDLER(savepage)
+nsgtk_on_savepage_activate_menu(GtkMenuItem *widget, gpointer data)
{
- if (!browser_window_has_content(nsgtk_get_browser_window(g->top_level)))
- return FALSE;
-
- GtkWidget *fc;
- DIR *d;
- char *path;
- nserror res;
- GtkFileFilter *filter;
-
- fc = gtk_file_chooser_dialog_new(
- messages_get("gtkcompleteSave"), g->window,
- GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER,
- NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
- filter = gtk_file_filter_new();
- gtk_file_filter_set_name(filter, "Directories");
- gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_FILENAME,
- nsgtk_filter_directory, NULL, NULL);
- gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fc), filter);
- gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fc), filter);
-
- res = nsurl_nice(browser_window_access_url(
- nsgtk_get_browser_window(g->top_level)), &path, false);
- if (res != NSERROR_OK) {
- path = strdup(messages_get("SaveText"));
- if (path == NULL) {
- nsgtk_warning("NoMemory", 0);
- return FALSE;
- }
- }
-
- if (access(path, F_OK) != 0)
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), path);
- free(path);
-
- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc),
- TRUE);
-
- if (gtk_dialog_run(GTK_DIALOG(fc)) != GTK_RESPONSE_ACCEPT) {
- gtk_widget_destroy(fc);
- return TRUE;
- }
-
- path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
- d = opendir(path);
- if (d == NULL) {
- NSLOG(netsurf, INFO,
- "Unable to open directory %s for complete save: %s",
- path,
- strerror(errno));
- if (errno == ENOTDIR)
- nsgtk_warning("NoDirError", path);
- else
- nsgtk_warning("gtkFileError", path);
- gtk_widget_destroy(fc);
- g_free(path);
- return TRUE;
- }
- closedir(d);
- save_complete(browser_window_get_content(nsgtk_get_browser_window(
- g->top_level)), path, NULL);
- g_free(path);
-
- gtk_widget_destroy(fc);
-
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, SAVEPAGE_BUTTON);
return TRUE;
}
-MULTIHANDLER(pdf)
-{
-#ifdef WITH_PDF_EXPORT
-
- GtkWidget *save_dialog;
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- struct print_settings *settings;
- char filename[PATH_MAX];
- char dirname[PATH_MAX];
- char *url_name;
- nserror res;
-
- NSLOG(netsurf, INFO, "Print preview (generating PDF) started.");
-
- res = nsurl_nice(browser_window_access_url(bw), &url_name, true);
- if (res != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(res), 0);
- return TRUE;
- }
-
- strncpy(filename, url_name, PATH_MAX);
- strncat(filename, ".pdf", PATH_MAX - strlen(filename));
- filename[PATH_MAX - 1] = '\0';
-
- free(url_name);
-
- strncpy(dirname, option_downloads_directory, PATH_MAX);
- strncat(dirname, "/", PATH_MAX - strlen(dirname));
- dirname[PATH_MAX - 1] = '\0';
-
- /* this way the scale used by PDF functions is synchronised with that
- * used by the all-purpose print interface
- */
- haru_nsfont_set_scale((float)option_export_scale / 100);
-
- save_dialog = gtk_file_chooser_dialog_new("Export to PDF", g->window,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
-
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(save_dialog),
- dirname);
-
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(save_dialog),
- filename);
-
- if (gtk_dialog_run(GTK_DIALOG(save_dialog)) == GTK_RESPONSE_ACCEPT) {
- gchar *filename = gtk_file_chooser_get_filename(
- GTK_FILE_CHOOSER(save_dialog));
-
- settings = print_make_settings(PRINT_OPTIONS,
- (const char *) filename, &haru_nsfont);
- g_free(filename);
-
- if (settings == NULL) {
- nsgtk_warning(messages_get("NoMemory"), 0);
- gtk_widget_destroy(save_dialog);
- return TRUE;
- }
-
- /* This will clean up the print_settings object for us */
- print_basic_run(browser_window_get_content(bw),
- &pdf_printer, settings);
- }
-
- gtk_widget_destroy(save_dialog);
-
-#endif /* WITH_PDF_EXPORT */
-
- return TRUE;
-}
-
-MULTIHANDLER(plaintext)
+/**
+ * menu signal handler for activation on export pdf item
+ */
+static gboolean
+nsgtk_on_pdf_activate_menu(GtkMenuItem *widget, gpointer data)
{
- if (!browser_window_has_content(nsgtk_get_browser_window(g->top_level)))
- return FALSE;
-
- GtkWidget *fc = gtk_file_chooser_dialog_new(
- messages_get("gtkplainSave"), g->window,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
- char *filename;
- nserror res;
-
- res = nsurl_nice(browser_window_access_url(
- nsgtk_get_browser_window(g->top_level)),
- &filename, false);
- if (res != NSERROR_OK) {
- filename = strdup(messages_get("SaveText"));
- if (filename == NULL) {
- nsgtk_warning("NoMemory", 0);
- return FALSE;
- }
- }
-
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), filename);
- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc),
- TRUE);
-
- free(filename);
-
- if (gtk_dialog_run(GTK_DIALOG(fc)) == GTK_RESPONSE_ACCEPT) {
- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
- save_as_text(browser_window_get_content(
- nsgtk_get_browser_window(
- g->top_level)), filename);
- g_free(filename);
- }
-
- gtk_widget_destroy(fc);
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, PDF_BUTTON);
return TRUE;
}
-MULTIHANDLER(drawfile)
+/**
+ * menu signal handler for activation on export plain text item
+ */
+static gboolean
+nsgtk_on_plaintext_activate_menu(GtkMenuItem *widget, gpointer data)
{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, PLAINTEXT_BUTTON);
return TRUE;
}
-MULTIHANDLER(postscript)
-{
- return TRUE;
-}
-MULTIHANDLER(printpreview)
+/**
+ * menu signal handler for activation on print preview item
+ */
+static gboolean
+nsgtk_on_printpreview_activate_menu(GtkMenuItem *widget, gpointer data)
{
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, PRINTPREVIEW_BUTTON);
return TRUE;
}
-MULTIHANDLER(print)
+/**
+ * menu signal handler for activation on print item
+ */
+static gboolean
+nsgtk_on_print_activate_menu(GtkMenuItem *widget, gpointer data)
{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-
- GtkPrintOperation *print_op;
- GtkPageSetup *page_setup;
- GtkPrintSettings *print_settings;
- GtkPrintOperationResult res = GTK_PRINT_OPERATION_RESULT_ERROR;
- struct print_settings *nssettings;
- char *settings_fname = NULL;
-
- print_op = gtk_print_operation_new();
- if (print_op == NULL) {
- nsgtk_warning(messages_get("NoMemory"), 0);
- return TRUE;
- }
-
- /* use previously saved settings if any */
- netsurf_mkpath(&settings_fname, NULL, 2, nsgtk_config_home, "Print");
- if (settings_fname != NULL) {
- print_settings = gtk_print_settings_new_from_file(settings_fname, NULL);
- if (print_settings != NULL) {
- gtk_print_operation_set_print_settings(print_op,
- print_settings);
-
- /* We're not interested in the settings any more */
- g_object_unref(print_settings);
- }
- }
-
- content_to_print = browser_window_get_content(bw);
-
- page_setup = gtk_print_run_page_setup_dialog(g->window, NULL, NULL);
- if (page_setup == NULL) {
- nsgtk_warning(messages_get("NoMemory"), 0);
- free(settings_fname);
- g_object_unref(print_op);
- return TRUE;
- }
- gtk_print_operation_set_default_page_setup(print_op, page_setup);
-
- nssettings = print_make_settings(PRINT_DEFAULT, NULL, nsgtk_layout_table);
-
- g_signal_connect(print_op, "begin_print",
- G_CALLBACK(gtk_print_signal_begin_print), nssettings);
- g_signal_connect(print_op, "draw_page",
- G_CALLBACK(gtk_print_signal_draw_page), NULL);
- g_signal_connect(print_op, "end_print",
- G_CALLBACK(gtk_print_signal_end_print), nssettings);
-
- if (content_get_type(browser_window_get_content(bw)) !=
- CONTENT_TEXTPLAIN) {
- res = gtk_print_operation_run(print_op,
- GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
- g->window,
- NULL);
- }
-
- /* if the settings were used save them for future use */
- if (settings_fname != NULL) {
- if (res == GTK_PRINT_OPERATION_RESULT_APPLY) {
- /* Do not increment the settings reference */
- print_settings =
- gtk_print_operation_get_print_settings(print_op);
-
- gtk_print_settings_to_file(print_settings,
- settings_fname,
- NULL);
- }
- free(settings_fname);
- }
-
- /* Our print_settings object is destroyed by the end print handler */
- g_object_unref(page_setup);
- g_object_unref(print_op);
-
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, PRINT_BUTTON);
return TRUE;
}
@@ -1839,16 +1596,20 @@ static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
#define ITEM_POP(p, q) \
g->menus[p##_BUTTON].popup = g->menu_popup->q##_menuitem
-
+ /* file menu */
ITEM_MAIN(NEWWINDOW, file_submenu, newwindow);
ITEM_MAIN(NEWTAB, file_submenu, newtab);
ITEM_MAIN(OPENFILE, file_submenu, openfile);
- ITEM_MAIN(PRINT, file_submenu, print);
ITEM_MAIN(CLOSEWINDOW, file_submenu, closewindow);
- ITEM_MAIN(SAVEPAGE, file_submenu, savepage);
ITEM_MAIN(PRINTPREVIEW, file_submenu, printpreview);
ITEM_MAIN(PRINT, file_submenu, print);
ITEM_MAIN(QUIT, file_submenu, quit);
+ /* file - export submenu */
+ ITEM_SUB(SAVEPAGE, file_submenu, export, savepage);
+ ITEM_SUB(PLAINTEXT, file_submenu, export, plaintext);
+ ITEM_SUB(PDF, file_submenu, export, pdf);
+
+ /* edit menu */
ITEM_MAIN(CUT, edit_submenu, cut);
ITEM_MAIN(COPY, edit_submenu, copy);
ITEM_MAIN(PASTE, edit_submenu, paste);
@@ -1856,45 +1617,52 @@ static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
ITEM_MAIN(SELECTALL, edit_submenu, selectall);
ITEM_MAIN(FIND, edit_submenu, find);
ITEM_MAIN(PREFERENCES, edit_submenu, preferences);
+
+ /* view menu */
ITEM_MAIN(STOP, view_submenu, stop);
- ITEM_POP(STOP, stop);
ITEM_MAIN(RELOAD, view_submenu, reload);
- ITEM_POP(RELOAD, reload);
ITEM_MAIN(FULLSCREEN, view_submenu, fullscreen);
- ITEM_MAIN(DOWNLOADS, tools_submenu, downloads);
ITEM_MAIN(SAVEWINDOWSIZE, view_submenu, savewindowsize);
+ /* view - scale submenu */
+ ITEM_SUB(ZOOMPLUS, view_submenu, scaleview, zoomplus);
+ ITEM_SUB(ZOOMMINUS, view_submenu, scaleview, zoomminus);
+ ITEM_SUB(ZOOMNORMAL, view_submenu, scaleview, zoomnormal);
+ /* view - tabs submenu */
+ ITEM_SUB(NEXTTAB, view_submenu, tabs, nexttab);
+ ITEM_SUB(PREVTAB, view_submenu, tabs, prevtab);
+ ITEM_SUB(CLOSETAB, view_submenu, tabs, closetab);
+
+ /* navigation menu */
ITEM_MAIN(BACK, nav_submenu, back);
- ITEM_POP(BACK, back);
ITEM_MAIN(FORWARD, nav_submenu, forward);
- ITEM_POP(FORWARD, forward);
ITEM_MAIN(HOME, nav_submenu, home);
ITEM_MAIN(LOCALHISTORY, nav_submenu, localhistory);
ITEM_MAIN(GLOBALHISTORY, nav_submenu, globalhistory);
ITEM_MAIN(ADDBOOKMARKS, nav_submenu, addbookmarks);
ITEM_MAIN(SHOWBOOKMARKS, nav_submenu, showbookmarks);
- ITEM_MAIN(SHOWCOOKIES, tools_submenu, showcookies);
ITEM_MAIN(OPENLOCATION, nav_submenu, openlocation);
- ITEM_MAIN(CONTENTS, help_submenu, contents);
- ITEM_MAIN(INFO, help_submenu, info);
- ITEM_MAIN(GUIDE, help_submenu, guide);
- ITEM_MAIN(ABOUT, help_submenu, about);
- ITEM_SUB(PLAINTEXT, file_submenu, export, plaintext);
- ITEM_SUB(PDF, file_submenu, export, pdf);
- ITEM_SUB(DRAWFILE, file_submenu, export, drawfile);
- ITEM_SUB(POSTSCRIPT, file_submenu, export, postscript);
- ITEM_SUB(ZOOMPLUS, view_submenu, scaleview, zoomplus);
- ITEM_SUB(ZOOMMINUS, view_submenu, scaleview, zoomminus);
- ITEM_SUB(ZOOMNORMAL, view_submenu, scaleview, zoomnormal);
- ITEM_SUB(NEXTTAB, view_submenu, tabs, nexttab);
- ITEM_SUB(PREVTAB, view_submenu, tabs, prevtab);
- ITEM_SUB(CLOSETAB, view_submenu, tabs, closetab);
- /* development submenu */
+ /* tools menu */
+ ITEM_MAIN(DOWNLOADS, tools_submenu, downloads);
+ ITEM_MAIN(SHOWCOOKIES, tools_submenu, showcookies);
+ /* tools > developer submenu */
ITEM_SUB(VIEWSOURCE, tools_submenu, developer, viewsource);
ITEM_SUB(TOGGLEDEBUGGING, tools_submenu, developer, toggledebugging);
ITEM_SUB(SAVEBOXTREE, tools_submenu, developer, debugboxtree);
ITEM_SUB(SAVEDOMTREE, tools_submenu, developer, debugdomtree);
+ /* help menu */
+ ITEM_MAIN(CONTENTS, help_submenu, contents);
+ ITEM_MAIN(GUIDE, help_submenu, guide);
+ ITEM_MAIN(INFO, help_submenu, info);
+ ITEM_MAIN(ABOUT, help_submenu, about);
+
+ /* popup menu */
+ ITEM_POP(STOP, stop);
+ ITEM_POP(RELOAD, reload);
+ ITEM_POP(BACK, back);
+ ITEM_POP(FORWARD, forward);
+
#undef ITEM_MAIN
#undef ITEM_SUB
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 4b3f23b..57cda1e 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -24,18 +24,23 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <errno.h>
#include <gtk/gtk.h>
-#include "netsurf/browser_window.h"
-#include "desktop/browser_history.h"
-#include "desktop/searchweb.h"
-#include "desktop/search.h"
#include "utils/log.h"
#include "utils/messages.h"
#include "utils/nsoption.h"
#include "utils/file.h"
#include "utils/nsurl.h"
#include "utils/corestrings.h"
+#include "desktop/browser_history.h"
+#include "desktop/searchweb.h"
+#include "desktop/search.h"
+#include "desktop/save_complete.h"
+#include "desktop/save_text.h"
+#include "desktop/print.h"
+#include "netsurf/content.h"
+#include "netsurf/browser_window.h"
#include "gtk/toolbar_items.h"
#include "gtk/completion.h"
@@ -49,6 +54,9 @@
#include "gtk/resources.h"
#include "gtk/schedule.h"
#include "gtk/local_history.h"
+#include "gtk/tabs.h"
+#include "gtk/print.h"
+#include "gtk/layout_pango.h"
#include "gtk/toolbar.h"
/**
@@ -2193,7 +2201,7 @@ closetab_button_clicked_cb(GtkWidget *widget, gpointer data)
{
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
- nsgtk_tab_close_current(tb->widget);
+ nsgtk_tab_close_current(GTK_NOTEBOOK(tb->widget));
return TRUE;
}
@@ -2216,8 +2224,71 @@ closewindow_button_clicked_cb(GtkWidget *widget, gpointer data)
}
+static nserror
+nsgtk_saveas_dialog(struct browser_window *bw,
+ const char *title,
+ GtkWindow *parent,
+ bool folder,
+ gchar **path_out)
+{
+ nserror res;
+ GtkWidget *fc; /* file chooser widget */
+ GtkFileChooserAction action;
+ char *path; /* proposed path */
+
+ if (!browser_window_has_content(bw)) {
+ /* cannot save a page with no content */
+ return NSERROR_INVALID;
+ }
+
+ if (folder) {
+ action = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
+ } else {
+ action = GTK_FILE_CHOOSER_ACTION_SAVE;
+ }
+
+ fc = gtk_file_chooser_dialog_new(title,
+ parent,
+ action,
+ NSGTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ NSGTK_STOCK_SAVE,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ /* set a default file name */
+ res = nsurl_nice(browser_window_access_url(bw), &path, false);
+ if (res != NSERROR_OK) {
+ path = strdup(messages_get("SaveText"));
+ if (path == NULL) {
+ gtk_widget_destroy(fc);
+ return NSERROR_NOMEM;
+ }
+ }
+
+ if ((!folder) || (access(path, F_OK) != 0)) {
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), path);
+ }
+ free(path);
+
+ /* confirm overwriting */
+ gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc), TRUE);
+
+ /* run the dialog to let user select path */
+ if (gtk_dialog_run(GTK_DIALOG(fc)) != GTK_RESPONSE_ACCEPT) {
+ gtk_widget_destroy(fc);
+ return NSERROR_NOT_FOUND;
+ }
+
+ *path_out = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
+
+ gtk_widget_destroy(fc);
+
+ return NSERROR_OK;
+}
+
/**
- * handler for new window tool bar item clicked signal
+ * handler for full save export tool bar item clicked signal
*
* \param widget The widget the signal is being delivered to.
* \param data The toolbar context passed when the signal was connected
@@ -2226,6 +2297,235 @@ closewindow_button_clicked_cb(GtkWidget *widget, gpointer data)
static gboolean
savepage_button_clicked_cb(GtkWidget *widget, gpointer data)
{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ DIR *d;
+ gchar *path;
+ nserror res;
+ GtkWidget *toplevel;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ res = nsgtk_saveas_dialog(bw,
+ messages_get("gtkcompleteSave"),
+ GTK_WINDOW(toplevel),
+ true,
+ &path);
+ if (res != NSERROR_OK) {
+ return FALSE;
+ }
+
+ d = opendir(path);
+ if (d == NULL) {
+ NSLOG(netsurf, INFO,
+ "Unable to open directory %s for complete save: %s",
+ path,
+ strerror(errno));
+ if (errno == ENOTDIR) {
+ nsgtk_warning("NoDirError", path);
+ } else {
+ nsgtk_warning("gtkFileError", path);
+ }
+ g_free(path);
+ return TRUE;
+ }
+ closedir(d);
+
+ save_complete(browser_window_get_content(bw), path, NULL);
+ g_free(path);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for pdf export tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+pdf_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *toplevel;
+ gchar *filename;
+ nserror res;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ res = nsgtk_saveas_dialog(bw,
+ "Export to PDF",
+ GTK_WINDOW(toplevel),
+ false,
+ &filename);
+ if (res != NSERROR_OK) {
+ return FALSE;
+ }
+
+#ifdef WITH_PDF_EXPORT
+ struct print_settings *settings;
+
+ /* this way the scale used by PDF functions is synchronised with that
+ * used by the all-purpose print interface
+ */
+ haru_nsfont_set_scale((float)option_export_scale / 100);
+
+ settings = print_make_settings(PRINT_OPTIONS,
+ (const char *) filename,
+ &haru_nsfont);
+ g_free(filename);
+ if (settings == NULL) {
+ return TRUE;
+ }
+ /* This will clean up the print_settings object for us */
+ print_basic_run(browser_window_get_content(bw), &pdf_printer, settings);
+#endif
+ return TRUE;
+
+}
+
+
+/**
+ * handler for plain text export tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+plaintext_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *toplevel;
+ gchar *filename;
+ nserror res;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ res = nsgtk_saveas_dialog(bw,
+ messages_get("gtkplainSave"),
+ GTK_WINDOW(toplevel),
+ false,
+ &filename);
+ if (res != NSERROR_OK) {
+ return FALSE;
+ }
+
+
+ save_as_text(browser_window_get_content(bw), filename);
+ g_free(filename);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for print tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+print_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkPrintOperation *print_op;
+ GtkPageSetup *page_setup;
+ GtkPrintSettings *print_settings;
+ GtkPrintOperationResult res = GTK_PRINT_OPERATION_RESULT_ERROR;
+ struct print_settings *nssettings;
+ char *settings_fname = NULL;
+ GtkWidget *toplevel;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ print_op = gtk_print_operation_new();
+ if (print_op == NULL) {
+ nsgtk_warning(messages_get("NoMemory"), 0);
+ return TRUE;
+ }
+
+ /* use previously saved settings if any */
+ netsurf_mkpath(&settings_fname, NULL, 2, nsgtk_config_home, "Print");
+ if (settings_fname != NULL) {
+ print_settings = gtk_print_settings_new_from_file(settings_fname, NULL);
+ if (print_settings != NULL) {
+ gtk_print_operation_set_print_settings(print_op,
+ print_settings);
+
+ /* We're not interested in the settings any more */
+ g_object_unref(print_settings);
+ }
+ }
+
+ content_to_print = browser_window_get_content(bw);
+
+ page_setup = gtk_print_run_page_setup_dialog(GTK_WINDOW(toplevel),
+ NULL,
+ NULL);
+ if (page_setup == NULL) {
+ nsgtk_warning(messages_get("NoMemory"), 0);
+ free(settings_fname);
+ g_object_unref(print_op);
+ return TRUE;
+ }
+ gtk_print_operation_set_default_page_setup(print_op, page_setup);
+
+ nssettings = print_make_settings(PRINT_DEFAULT,
+ NULL,
+ nsgtk_layout_table);
+
+ g_signal_connect(print_op,
+ "begin_print",
+ G_CALLBACK(gtk_print_signal_begin_print),
+ nssettings);
+ g_signal_connect(print_op,
+ "draw_page",
+ G_CALLBACK(gtk_print_signal_draw_page),
+ NULL);
+ g_signal_connect(print_op,
+ "end_print",
+ G_CALLBACK(gtk_print_signal_end_print),
+ nssettings);
+
+ if (content_get_type(browser_window_get_content(bw)) != CONTENT_TEXTPLAIN) {
+ res = gtk_print_operation_run(print_op,
+ GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
+ GTK_WINDOW(toplevel),
+ NULL);
+ }
+
+ /* if the settings were used save them for future use */
+ if (settings_fname != NULL) {
+ if (res == GTK_PRINT_OPERATION_RESULT_APPLY) {
+ /* Do not increment the settings reference */
+ print_settings = gtk_print_operation_get_print_settings(print_op);
+
+ gtk_print_settings_to_file(print_settings,
+ settings_fname,
+ NULL);
+ }
+ free(settings_fname);
+ }
+
+ /* Our print_settings object is destroyed by the end print handler */
+ g_object_unref(page_setup);
+ g_object_unref(print_op);
+
+ return TRUE;
}
@@ -2628,7 +2928,7 @@ nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb,
if (tb->buttons[itemid]->button != NULL) {
widget = GTK_WIDGET(tb->buttons[itemid]->button);
} else {
- widget = tb->widget;
+ widget = GTK_WIDGET(tb->widget);
}
tb->buttons[itemid]->bhandler(widget, tb);
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 03188c2..24afef9 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -103,12 +103,12 @@ TOOLBAR_ITEM(OPENFILE_BUTTON, openfile, true, openfile_button_clicked_cb)
TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, closetab_button_clicked_cb)
TOOLBAR_ITEM(CLOSEWINDOW_BUTTON, closewindow, true, closewindow_button_clicked_cb)
TOOLBAR_ITEM(SAVEPAGE_BUTTON, savepage, true, savepage_button_clicked_cb)
-TOOLBAR_ITEM(PDF_BUTTON, pdf, false, NULL)
-TOOLBAR_ITEM(PLAINTEXT_BUTTON, plaintext, true, NULL)
+TOOLBAR_ITEM(PDF_BUTTON, pdf, false, pdf_button_clicked_cb)
+TOOLBAR_ITEM(PLAINTEXT_BUTTON, plaintext, true, plaintext_button_clicked_cb)
TOOLBAR_ITEM(DRAWFILE_BUTTON, drawfile, false, NULL)
TOOLBAR_ITEM(POSTSCRIPT_BUTTON, postscript, false, NULL)
TOOLBAR_ITEM(PRINTPREVIEW_BUTTON, printpreview, false, NULL)
-TOOLBAR_ITEM(PRINT_BUTTON, print, true, NULL)
+TOOLBAR_ITEM(PRINT_BUTTON, print, true, print_button_clicked_cb)
TOOLBAR_ITEM(QUIT_BUTTON, quit, true, NULL)
TOOLBAR_ITEM(CUT_BUTTON, cut, true, NULL)
TOOLBAR_ITEM(COPY_BUTTON, copy, true, NULL)
diff --git a/resources/FatMessages b/resources/FatMessages
index 54c69b8..008afef 100644
--- a/resources/FatMessages
+++ b/resources/FatMessages
@@ -2872,11 +2872,11 @@ de.gtk.gtkplainSave:Als Text speichern
fr.gtk.gtkplainSave:Enregistrer sans mise en forme
it.gtk.gtkplainSave:Salva come testo
nl.gtk.gtkplainSave:Als tekst bewaren
-en.gtk.gtkcompleteSave:Save webpage complete - select an empty directory
-de.gtk.gtkcompleteSave:Seite komplett speichern - ein leeres Verzeichnis wählen
-fr.gtk.gtkcompleteSave:Enregistrer page web complète - sélectioner un dossier vide
-it.gtk.gtkcompleteSave:Salva l'intera pagina web - seleziona una directory vuota
-nl.gtk.gtkcompleteSave:Complete webpagina bewaren - selecteer een lege map
+en.gtk.gtkcompleteSave:Export complete page as a folder
+de.gtk.gtkcompleteSave:Seite komplett speichern
+fr.gtk.gtkcompleteSave:Enregistrer page web complète
+it.gtk.gtkcompleteSave:Salva l'intera pagina web
+nl.gtk.gtkcompleteSave:Complete webpagina bewaren
en.gtk.gtkSaveConfirm:File saved
de.gtk.gtkSaveConfirm:Datei gespeichert
fr.gtk.gtkSaveConfirm:Fichier enregistré
@@ -2957,16 +2957,16 @@ de.gtk.gtkCloseWindow:Fenster schließen
fr.gtk.gtkCloseWindow:_Fermer la fenêtre
it.gtk.gtkCloseWindow:_Chiudi finestra
nl.gtk.gtkCloseWindow:_Venster sluiten
-en.gtk.gtkSavePage:Save Page…
-de.gtk.gtkSavePage:Seite speichern..
-fr.gtk.gtkSavePage:Enregistrer la Page...
-it.gtk.gtkSavePage:Salva pagina...
-nl.gtk.gtkSavePage:Pagina bewaren...
en.gtk.gtkExport:Export
de.gtk.gtkExport:Exportieren
fr.gtk.gtkExport:Exporter
it.gtk.gtkExport:Esporta
nl.gtk.gtkExport:Exporteren
+en.gtk.gtkSavePage:Complete Page…
+de.gtk.gtkSavePage:Seite speichern..
+fr.gtk.gtkSavePage:Enregistrer la Page...
+it.gtk.gtkSavePage:Salva pagina...
+nl.gtk.gtkSavePage:Pagina bewaren...
en.gtk.gtkPlainText:Plain Text…
de.gtk.gtkPlainText:Reiner Text..
fr.gtk.gtkPlainText:Texte...
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/menu.c | 11 +-
frontends/gtk/menu.h | 67 ++---
frontends/gtk/scaffolding.c | 563 +++++++++--------------------------------
frontends/gtk/scaffolding.h | 8 +
frontends/gtk/toolbar.c | 514 ++++++++++++++++++++++++++++++++++++-
frontends/gtk/toolbar_items.h | 20 +-
resources/FatMessages | 20 +-
7 files changed, 700 insertions(+), 503 deletions(-)
diff --git a/frontends/gtk/menu.c b/frontends/gtk/menu.c
index 6a60332..909016a 100644
--- a/frontends/gtk/menu.c
+++ b/frontends/gtk/menu.c
@@ -142,21 +142,23 @@ nsgtk_menu_add_image_item(GtkMenu *menu,
static struct nsgtk_export_submenu *
nsgtk_menu_export_submenu(GtkAccelGroup *group)
{
- struct nsgtk_export_submenu *ret = malloc(sizeof(struct
- nsgtk_export_submenu));
+ struct nsgtk_export_submenu *ret;
+ ret = malloc(sizeof(struct nsgtk_export_submenu));
+
if (ret == NULL) {
nsgtk_warning(messages_get("NoMemory"), 0);
return NULL;
}
+
ret->export_menu = GTK_MENU(gtk_menu_new());
if (ret->export_menu == NULL) {
nsgtk_warning(messages_get("NoMemory"), 0);
free(ret);
return NULL;
}
+
+ IMAGE_ITEM(export, savepage, gtkSavePage, ret, group);
IMAGE_ITEM(export, plaintext, gtkPlainText, ret, group);
- IMAGE_ITEM(export, drawfile, gtkDrawFile, ret, group);
- IMAGE_ITEM(export, postscript, gtkPostScript, ret, group);
IMAGE_ITEM(export, pdf, gtkPDF, ret, group);
return ret;
}
@@ -323,7 +325,6 @@ static struct nsgtk_file_menu *nsgtk_menu_file_submenu(GtkAccelGroup *group)
IMAGE_ITEM(file, openfile, gtkOpenFile, fmenu, group);
IMAGE_ITEM(file, closewindow, gtkCloseWindow, fmenu, group);
ADD_SEP(file, fmenu);
- IMAGE_ITEM(file, savepage, gtkSavePage, fmenu, group);
IMAGE_ITEM(file, export, gtkExport, fmenu, group);
ADD_SEP(file, fmenu);
IMAGE_ITEM(file, printpreview, gtkPrintPreview, fmenu, group);
diff --git a/frontends/gtk/menu.h b/frontends/gtk/menu.h
index 5da5cb1..6dbb433 100644
--- a/frontends/gtk/menu.h
+++ b/frontends/gtk/menu.h
@@ -15,24 +15,26 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef _NETSURF_GTK_MENU_H_
-#define _NETSURF_GTK_MENU_H_
+#ifndef NETSURF_GTK_MENU_H_
+#define NETSURF_GTK_MENU_H_
#include <gtk/gtk.h>
+/**
+ * File menu item on menubar
+ */
struct nsgtk_file_menu {
- GtkMenuItem *file; /* File menu item on menubar */
- GtkMenu *file_menu;
- GtkWidget *newwindow_menuitem;
- GtkWidget *newtab_menuitem;
- GtkWidget *openfile_menuitem;
- GtkWidget *closewindow_menuitem;
- GtkWidget *savepage_menuitem;
- GtkWidget *export_menuitem;
- struct nsgtk_export_submenu *export_submenu;
- GtkWidget *printpreview_menuitem;
- GtkWidget *print_menuitem;
- GtkWidget *quit_menuitem;
+ GtkMenuItem *file;
+ GtkMenu *file_menu;
+ GtkWidget *newwindow_menuitem;
+ GtkWidget *newtab_menuitem;
+ GtkWidget *openfile_menuitem;
+ GtkWidget *closewindow_menuitem;
+ GtkWidget *export_menuitem;
+ struct nsgtk_export_submenu *export_submenu;
+ GtkWidget *printpreview_menuitem;
+ GtkWidget *print_menuitem;
+ GtkWidget *quit_menuitem;
};
struct nsgtk_edit_menu {
@@ -88,35 +90,34 @@ struct nsgtk_tools_menu {
};
struct nsgtk_help_menu {
- GtkMenuItem *help; /* Help menu item on menubar */
- GtkMenu *help_menu;
- GtkWidget *contents_menuitem;
- GtkWidget *guide_menuitem;
- GtkWidget *info_menuitem;
- GtkWidget *about_menuitem;
+ GtkMenuItem *help; /* Help menu item on menubar */
+ GtkMenu *help_menu;
+ GtkWidget *contents_menuitem;
+ GtkWidget *guide_menuitem;
+ GtkWidget *info_menuitem;
+ GtkWidget *about_menuitem;
};
struct nsgtk_export_submenu {
- GtkMenu *export_menu;
- GtkWidget *plaintext_menuitem;
- GtkWidget *drawfile_menuitem;
- GtkWidget *postscript_menuitem;
- GtkWidget *pdf_menuitem;
+ GtkMenu *export_menu;
+ GtkWidget *savepage_menuitem;
+ GtkWidget *plaintext_menuitem;
+ GtkWidget *pdf_menuitem;
};
struct nsgtk_scaleview_submenu {
- GtkMenu *scaleview_menu;
- GtkWidget *zoomplus_menuitem;
- GtkWidget *zoomminus_menuitem;
- GtkWidget *zoomnormal_menuitem;
+ GtkMenu *scaleview_menu;
+ GtkWidget *zoomplus_menuitem;
+ GtkWidget *zoomminus_menuitem;
+ GtkWidget *zoomnormal_menuitem;
};
struct nsgtk_tabs_submenu {
- GtkMenu *tabs_menu;
- GtkWidget *nexttab_menuitem;
- GtkWidget *prevtab_menuitem;
- GtkWidget *closetab_menuitem;
+ GtkMenu *tabs_menu;
+ GtkWidget *nexttab_menuitem;
+ GtkWidget *prevtab_menuitem;
+ GtkWidget *closetab_menuitem;
};
struct nsgtk_images_submenu {
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 10d9681..309ee04 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -95,6 +95,19 @@ static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g)
static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
/**
+ * handle menu activate signals by calling toolbar item activation
+ */
+#define MENUHANDLER(name, itemid) \
+static gboolean \
+nsgtk_on_##name##_activate_menu(GtkMenuItem *widget, gpointer data) \
+{ \
+ struct nsgtk_scaffolding *gs = (struct nsgtk_scaffolding *)data;\
+ nsgtk_window_item_activate(gs->top_level, itemid); \
+ return TRUE; \
+}
+
+
+/**
* menu entry context
*/
struct nsgtk_menu {
@@ -604,365 +617,52 @@ static void nsgtk_openfile_open(const char *filename)
/**
* menu signal handler for activation on new window item
*/
-static gboolean
-nsgtk_on_newwindow_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, NEWWINDOW_BUTTON);
- return TRUE;
-}
+MENUHANDLER(newwindow, NEWWINDOW_BUTTON);
/**
* menu signal handler for activation on new tab item
*/
-static gboolean
-nsgtk_on_newtab_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, NEWTAB_BUTTON);
- return TRUE;
-}
+MENUHANDLER(newtab, NEWTAB_BUTTON);
/**
- * menu signal handler for activation on openfile item
+ * menu signal handler for activation on open file item
*/
-static gboolean
-nsgtk_on_openfile_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, OPENFILE_BUTTON);
- return TRUE;
-}
-
+MENUHANDLER(openfile, OPENFILE_BUTTON);
/**
- * callback to determine if a path is a directory.
- *
- * \param info The path information
- * \param data context pointer set to NULL
- * \return TRUE if path is a directory else false
+ * menu signal handler for activation on export complete page item
*/
-static gboolean
-nsgtk_filter_directory(const GtkFileFilterInfo *info,
- gpointer data)
-{
- DIR *d = opendir(info->filename);
- if (d == NULL)
- return FALSE;
- closedir(d);
- return TRUE;
-}
-
-MULTIHANDLER(savepage)
-{
- if (!browser_window_has_content(nsgtk_get_browser_window(g->top_level)))
- return FALSE;
-
- GtkWidget *fc;
- DIR *d;
- char *path;
- nserror res;
- GtkFileFilter *filter;
-
- fc = gtk_file_chooser_dialog_new(
- messages_get("gtkcompleteSave"), g->window,
- GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER,
- NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
- filter = gtk_file_filter_new();
- gtk_file_filter_set_name(filter, "Directories");
- gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_FILENAME,
- nsgtk_filter_directory, NULL, NULL);
- gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fc), filter);
- gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fc), filter);
-
- res = nsurl_nice(browser_window_access_url(
- nsgtk_get_browser_window(g->top_level)), &path, false);
- if (res != NSERROR_OK) {
- path = strdup(messages_get("SaveText"));
- if (path == NULL) {
- nsgtk_warning("NoMemory", 0);
- return FALSE;
- }
- }
-
- if (access(path, F_OK) != 0)
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), path);
- free(path);
-
- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc),
- TRUE);
-
- if (gtk_dialog_run(GTK_DIALOG(fc)) != GTK_RESPONSE_ACCEPT) {
- gtk_widget_destroy(fc);
- return TRUE;
- }
-
- path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
- d = opendir(path);
- if (d == NULL) {
- NSLOG(netsurf, INFO,
- "Unable to open directory %s for complete save: %s",
- path,
- strerror(errno));
- if (errno == ENOTDIR)
- nsgtk_warning("NoDirError", path);
- else
- nsgtk_warning("gtkFileError", path);
- gtk_widget_destroy(fc);
- g_free(path);
- return TRUE;
- }
- closedir(d);
- save_complete(browser_window_get_content(nsgtk_get_browser_window(
- g->top_level)), path, NULL);
- g_free(path);
-
- gtk_widget_destroy(fc);
-
- return TRUE;
-}
-
-
-MULTIHANDLER(pdf)
-{
-#ifdef WITH_PDF_EXPORT
-
- GtkWidget *save_dialog;
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- struct print_settings *settings;
- char filename[PATH_MAX];
- char dirname[PATH_MAX];
- char *url_name;
- nserror res;
-
- NSLOG(netsurf, INFO, "Print preview (generating PDF) started.");
-
- res = nsurl_nice(browser_window_access_url(bw), &url_name, true);
- if (res != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(res), 0);
- return TRUE;
- }
-
- strncpy(filename, url_name, PATH_MAX);
- strncat(filename, ".pdf", PATH_MAX - strlen(filename));
- filename[PATH_MAX - 1] = '\0';
-
- free(url_name);
-
- strncpy(dirname, option_downloads_directory, PATH_MAX);
- strncat(dirname, "/", PATH_MAX - strlen(dirname));
- dirname[PATH_MAX - 1] = '\0';
-
- /* this way the scale used by PDF functions is synchronised with that
- * used by the all-purpose print interface
- */
- haru_nsfont_set_scale((float)option_export_scale / 100);
-
- save_dialog = gtk_file_chooser_dialog_new("Export to PDF", g->window,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
+MENUHANDLER(savepage, SAVEPAGE_BUTTON);
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(save_dialog),
- dirname);
-
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(save_dialog),
- filename);
-
- if (gtk_dialog_run(GTK_DIALOG(save_dialog)) == GTK_RESPONSE_ACCEPT) {
- gchar *filename = gtk_file_chooser_get_filename(
- GTK_FILE_CHOOSER(save_dialog));
-
- settings = print_make_settings(PRINT_OPTIONS,
- (const char *) filename, &haru_nsfont);
- g_free(filename);
-
- if (settings == NULL) {
- nsgtk_warning(messages_get("NoMemory"), 0);
- gtk_widget_destroy(save_dialog);
- return TRUE;
- }
-
- /* This will clean up the print_settings object for us */
- print_basic_run(browser_window_get_content(bw),
- &pdf_printer, settings);
- }
-
- gtk_widget_destroy(save_dialog);
-
-#endif /* WITH_PDF_EXPORT */
-
- return TRUE;
-}
-
-MULTIHANDLER(plaintext)
-{
- if (!browser_window_has_content(nsgtk_get_browser_window(g->top_level)))
- return FALSE;
-
- GtkWidget *fc = gtk_file_chooser_dialog_new(
- messages_get("gtkplainSave"), g->window,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
- char *filename;
- nserror res;
-
- res = nsurl_nice(browser_window_access_url(
- nsgtk_get_browser_window(g->top_level)),
- &filename, false);
- if (res != NSERROR_OK) {
- filename = strdup(messages_get("SaveText"));
- if (filename == NULL) {
- nsgtk_warning("NoMemory", 0);
- return FALSE;
- }
- }
-
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), filename);
- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc),
- TRUE);
-
- free(filename);
-
- if (gtk_dialog_run(GTK_DIALOG(fc)) == GTK_RESPONSE_ACCEPT) {
- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
- save_as_text(browser_window_get_content(
- nsgtk_get_browser_window(
- g->top_level)), filename);
- g_free(filename);
- }
-
- gtk_widget_destroy(fc);
- return TRUE;
-}
-
-MULTIHANDLER(drawfile)
-{
- return TRUE;
-}
-
-MULTIHANDLER(postscript)
-{
- return TRUE;
-}
-
-MULTIHANDLER(printpreview)
-{
- return TRUE;
-}
-
-
-MULTIHANDLER(print)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-
- GtkPrintOperation *print_op;
- GtkPageSetup *page_setup;
- GtkPrintSettings *print_settings;
- GtkPrintOperationResult res = GTK_PRINT_OPERATION_RESULT_ERROR;
- struct print_settings *nssettings;
- char *settings_fname = NULL;
-
- print_op = gtk_print_operation_new();
- if (print_op == NULL) {
- nsgtk_warning(messages_get("NoMemory"), 0);
- return TRUE;
- }
-
- /* use previously saved settings if any */
- netsurf_mkpath(&settings_fname, NULL, 2, nsgtk_config_home, "Print");
- if (settings_fname != NULL) {
- print_settings = gtk_print_settings_new_from_file(settings_fname, NULL);
- if (print_settings != NULL) {
- gtk_print_operation_set_print_settings(print_op,
- print_settings);
-
- /* We're not interested in the settings any more */
- g_object_unref(print_settings);
- }
- }
-
- content_to_print = browser_window_get_content(bw);
-
- page_setup = gtk_print_run_page_setup_dialog(g->window, NULL, NULL);
- if (page_setup == NULL) {
- nsgtk_warning(messages_get("NoMemory"), 0);
- free(settings_fname);
- g_object_unref(print_op);
- return TRUE;
- }
- gtk_print_operation_set_default_page_setup(print_op, page_setup);
-
- nssettings = print_make_settings(PRINT_DEFAULT, NULL, nsgtk_layout_table);
-
- g_signal_connect(print_op, "begin_print",
- G_CALLBACK(gtk_print_signal_begin_print), nssettings);
- g_signal_connect(print_op, "draw_page",
- G_CALLBACK(gtk_print_signal_draw_page), NULL);
- g_signal_connect(print_op, "end_print",
- G_CALLBACK(gtk_print_signal_end_print), nssettings);
-
- if (content_get_type(browser_window_get_content(bw)) !=
- CONTENT_TEXTPLAIN) {
- res = gtk_print_operation_run(print_op,
- GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
- g->window,
- NULL);
- }
-
- /* if the settings were used save them for future use */
- if (settings_fname != NULL) {
- if (res == GTK_PRINT_OPERATION_RESULT_APPLY) {
- /* Do not increment the settings reference */
- print_settings =
- gtk_print_operation_get_print_settings(print_op);
-
- gtk_print_settings_to_file(print_settings,
- settings_fname,
- NULL);
- }
- free(settings_fname);
- }
+/**
+ * menu signal handler for activation on export pdf item
+ */
+MENUHANDLER(pdf, PDF_BUTTON);
- /* Our print_settings object is destroyed by the end print handler */
- g_object_unref(page_setup);
- g_object_unref(print_op);
+/**
+ * menu signal handler for activation on export plain text item
+ */
+MENUHANDLER(plaintext, PLAINTEXT_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on print preview item
+ */
+MENUHANDLER(printpreview, PRINTPREVIEW_BUTTON);
+/**
+ * menu signal handler for activation on print item
+ */
+MENUHANDLER(print, PRINT_BUTTON);
/**
* menu signal handler for activation on close window item
*/
-static gboolean
-nsgtk_on_closewindow_activate_menu(GtkMenuItem *widget, gpointer data)
-{
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- nsgtk_window_item_activate(g->top_level, CLOSEWINDOW_BUTTON);
- return TRUE;
-}
-
+MENUHANDLER(closewindow, CLOSEWINDOW_BUTTON);
-MULTIHANDLER(quit)
-{
- struct nsgtk_scaffolding *gs;
-
- if (nsgtk_check_for_downloads(g->window) == false) {
- gs = scaf_list;
- while (gs != NULL) {
- gtk_widget_destroy(GTK_WIDGET(gs->window));
- gs = gs->next;
- }
- }
-
- return TRUE;
-}
+/**
+ * menu signal handler for activation on close window item
+ */
+MENUHANDLER(quit, QUIT_BUTTON);
static gboolean
@@ -1075,54 +775,25 @@ nsgtk_on_link_copy_activate_menu(GtkMenuItem *widget, gpointer data)
}
-MULTIHANDLER(cut)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- GtkWidget *focused = gtk_window_get_focus(g->window);
-
- /* If the url bar has focus, let gtk handle it */
- if (GTK_IS_EDITABLE (focused))
- //gtk_editable_cut_clipboard (GTK_EDITABLE(g->url_bar));
- ;
- else
- browser_window_key_press(bw, NS_KEY_CUT_SELECTION);
-
- return TRUE;
-}
-
-MULTIHANDLER(copy)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- GtkWidget *focused = gtk_window_get_focus(g->window);
-
- /* If the url bar has focus, let gtk handle it */
- if (GTK_IS_EDITABLE (focused))
- //gtk_editable_copy_clipboard(GTK_EDITABLE(g->url_bar));
- ;
- else
- browser_window_key_press(bw, NS_KEY_COPY_SELECTION);
-
- return TRUE;
-}
-
-MULTIHANDLER(paste)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- GtkWidget *focused = gtk_window_get_focus(g->window);
+/**
+ * menu signal handler for activation on cut item
+ */
+MENUHANDLER(cut, CUT_BUTTON);
- /* If the url bar has focus, let gtk handle it */
- if (GTK_IS_EDITABLE (focused))
- gtk_editable_paste_clipboard (GTK_EDITABLE (focused));
- else
- browser_window_key_press(bw, NS_KEY_PASTE);
+/**
+ * menu signal handler for activation on copy item
+ */
+MENUHANDLER(copy, COPY_BUTTON);
- return TRUE;
-}
+/**
+ * menu signal handler for activation on paste item
+ */
+MENUHANDLER(paste, PASTE_BUTTON);
-MULTIHANDLER(delete)
-{
- return TRUE;
-}
+/**
+ * menu signal handler for activation on delete item
+ */
+MENUHANDLER(delete, DELETE_BUTTON);
static gboolean
@@ -1133,22 +804,11 @@ nsgtk_on_customize_activate_menu(GtkMenuItem *widget, gpointer data)
return TRUE;
}
-MULTIHANDLER(selectall)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-#if 0
- if (nsgtk_widget_has_focus(GTK_WIDGET(g->url_bar))) {
- NSLOG(netsurf, INFO, "Selecting all URL bar text");
- gtk_editable_select_region(GTK_EDITABLE(g->url_bar), 0, -1);
- } else {
-#endif
- NSLOG(netsurf, INFO, "Selecting all document text");
- browser_window_key_press(bw, NS_KEY_SELECT_ALL);
-#if 0
- }
-#endif
- return TRUE;
-}
+/**
+ * menu signal handler for activation on selectall item
+ */
+MENUHANDLER(selectall, SELECTALL_BUTTON);
+
MULTIHANDLER(find)
{
@@ -1156,18 +816,11 @@ MULTIHANDLER(find)
return TRUE;
}
-MULTIHANDLER(preferences)
-{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- GtkWidget* wndpreferences;
-
- wndpreferences = nsgtk_preferences(bw, g->window);
- if (wndpreferences != NULL) {
- gtk_widget_show(GTK_WIDGET(wndpreferences));
- }
+/**
+ * menu signal handler for activation on preferences item
+ */
+MENUHANDLER(preferences,PREFERENCES_BUTTON);
- return TRUE;
-}
MULTIHANDLER(zoomplus)
{
@@ -1839,16 +1492,20 @@ static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
#define ITEM_POP(p, q) \
g->menus[p##_BUTTON].popup = g->menu_popup->q##_menuitem
-
+ /* file menu */
ITEM_MAIN(NEWWINDOW, file_submenu, newwindow);
ITEM_MAIN(NEWTAB, file_submenu, newtab);
ITEM_MAIN(OPENFILE, file_submenu, openfile);
- ITEM_MAIN(PRINT, file_submenu, print);
ITEM_MAIN(CLOSEWINDOW, file_submenu, closewindow);
- ITEM_MAIN(SAVEPAGE, file_submenu, savepage);
ITEM_MAIN(PRINTPREVIEW, file_submenu, printpreview);
ITEM_MAIN(PRINT, file_submenu, print);
ITEM_MAIN(QUIT, file_submenu, quit);
+ /* file - export submenu */
+ ITEM_SUB(SAVEPAGE, file_submenu, export, savepage);
+ ITEM_SUB(PLAINTEXT, file_submenu, export, plaintext);
+ ITEM_SUB(PDF, file_submenu, export, pdf);
+
+ /* edit menu */
ITEM_MAIN(CUT, edit_submenu, cut);
ITEM_MAIN(COPY, edit_submenu, copy);
ITEM_MAIN(PASTE, edit_submenu, paste);
@@ -1856,45 +1513,52 @@ static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
ITEM_MAIN(SELECTALL, edit_submenu, selectall);
ITEM_MAIN(FIND, edit_submenu, find);
ITEM_MAIN(PREFERENCES, edit_submenu, preferences);
+
+ /* view menu */
ITEM_MAIN(STOP, view_submenu, stop);
- ITEM_POP(STOP, stop);
ITEM_MAIN(RELOAD, view_submenu, reload);
- ITEM_POP(RELOAD, reload);
ITEM_MAIN(FULLSCREEN, view_submenu, fullscreen);
- ITEM_MAIN(DOWNLOADS, tools_submenu, downloads);
ITEM_MAIN(SAVEWINDOWSIZE, view_submenu, savewindowsize);
+ /* view - scale submenu */
+ ITEM_SUB(ZOOMPLUS, view_submenu, scaleview, zoomplus);
+ ITEM_SUB(ZOOMMINUS, view_submenu, scaleview, zoomminus);
+ ITEM_SUB(ZOOMNORMAL, view_submenu, scaleview, zoomnormal);
+ /* view - tabs submenu */
+ ITEM_SUB(NEXTTAB, view_submenu, tabs, nexttab);
+ ITEM_SUB(PREVTAB, view_submenu, tabs, prevtab);
+ ITEM_SUB(CLOSETAB, view_submenu, tabs, closetab);
+
+ /* navigation menu */
ITEM_MAIN(BACK, nav_submenu, back);
- ITEM_POP(BACK, back);
ITEM_MAIN(FORWARD, nav_submenu, forward);
- ITEM_POP(FORWARD, forward);
ITEM_MAIN(HOME, nav_submenu, home);
ITEM_MAIN(LOCALHISTORY, nav_submenu, localhistory);
ITEM_MAIN(GLOBALHISTORY, nav_submenu, globalhistory);
ITEM_MAIN(ADDBOOKMARKS, nav_submenu, addbookmarks);
ITEM_MAIN(SHOWBOOKMARKS, nav_submenu, showbookmarks);
- ITEM_MAIN(SHOWCOOKIES, tools_submenu, showcookies);
ITEM_MAIN(OPENLOCATION, nav_submenu, openlocation);
- ITEM_MAIN(CONTENTS, help_submenu, contents);
- ITEM_MAIN(INFO, help_submenu, info);
- ITEM_MAIN(GUIDE, help_submenu, guide);
- ITEM_MAIN(ABOUT, help_submenu, about);
- ITEM_SUB(PLAINTEXT, file_submenu, export, plaintext);
- ITEM_SUB(PDF, file_submenu, export, pdf);
- ITEM_SUB(DRAWFILE, file_submenu, export, drawfile);
- ITEM_SUB(POSTSCRIPT, file_submenu, export, postscript);
- ITEM_SUB(ZOOMPLUS, view_submenu, scaleview, zoomplus);
- ITEM_SUB(ZOOMMINUS, view_submenu, scaleview, zoomminus);
- ITEM_SUB(ZOOMNORMAL, view_submenu, scaleview, zoomnormal);
- ITEM_SUB(NEXTTAB, view_submenu, tabs, nexttab);
- ITEM_SUB(PREVTAB, view_submenu, tabs, prevtab);
- ITEM_SUB(CLOSETAB, view_submenu, tabs, closetab);
- /* development submenu */
+ /* tools menu */
+ ITEM_MAIN(DOWNLOADS, tools_submenu, downloads);
+ ITEM_MAIN(SHOWCOOKIES, tools_submenu, showcookies);
+ /* tools > developer submenu */
ITEM_SUB(VIEWSOURCE, tools_submenu, developer, viewsource);
ITEM_SUB(TOGGLEDEBUGGING, tools_submenu, developer, toggledebugging);
ITEM_SUB(SAVEBOXTREE, tools_submenu, developer, debugboxtree);
ITEM_SUB(SAVEDOMTREE, tools_submenu, developer, debugdomtree);
+ /* help menu */
+ ITEM_MAIN(CONTENTS, help_submenu, contents);
+ ITEM_MAIN(GUIDE, help_submenu, guide);
+ ITEM_MAIN(INFO, help_submenu, info);
+ ITEM_MAIN(ABOUT, help_submenu, about);
+
+ /* popup menu */
+ ITEM_POP(STOP, stop);
+ ITEM_POP(RELOAD, reload);
+ ITEM_POP(BACK, back);
+ ITEM_POP(FORWARD, forward);
+
#undef ITEM_MAIN
#undef ITEM_SUB
@@ -2205,6 +1869,27 @@ static struct gui_search_web_table search_web_table = {
struct gui_search_web_table *nsgtk_search_web_table = &search_web_table;
/* exported interface documented in gtk/scaffolding.h */
+nserror nsgtk_scaffolding_destroy_all(void)
+{
+ struct nsgtk_scaffolding *gs;
+
+ gs = scaf_list;
+ assert(gs != NULL);
+
+ if (nsgtk_check_for_downloads(gs->window) == true) {
+ return NSERROR_INVALID;
+ }
+
+ /* iterate all scaffolding windows and destroy them */
+ while (gs != NULL) {
+ gtk_widget_destroy(GTK_WIDGET(gs->window));
+ gs = gs->next;
+ }
+ return NSERROR_OK;
+}
+
+
+/* exported interface documented in gtk/scaffolding.h */
GtkWindow* nsgtk_scaffolding_window(struct nsgtk_scaffolding *g)
{
return g->window;
@@ -2474,8 +2159,10 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr))
/* connect main window signals to their handlers. */
- CONNECT(gs->window, "delete-event",
- scaffolding_window_delete_event, gs);
+ CONNECT(gs->window,
+ "delete-event",
+ scaffolding_window_delete_event,
+ gs);
CONNECT(gs->window, "destroy", scaffolding_window_destroy, gs);
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index d5a916f..0f19a24 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -56,6 +56,14 @@ struct gtk_search {
struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *gw);
/**
+ * causes all scaffolding windows to be destroyed.
+ *
+ * \return NSERROR_OK and all scaffolding windows destroyed else
+ * NSERROR_INVALID if download in progress and user continued.
+ */
+nserror nsgtk_scaffolding_destroy_all(void);
+
+/**
* Obtain the most recently used scaffolding element.
*
* This allows tabs to be opened in the most recently used window
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 4b3f23b..1560a6e 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -24,18 +24,24 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <errno.h>
#include <gtk/gtk.h>
-#include "netsurf/browser_window.h"
-#include "desktop/browser_history.h"
-#include "desktop/searchweb.h"
-#include "desktop/search.h"
#include "utils/log.h"
#include "utils/messages.h"
#include "utils/nsoption.h"
#include "utils/file.h"
#include "utils/nsurl.h"
#include "utils/corestrings.h"
+#include "desktop/browser_history.h"
+#include "desktop/searchweb.h"
+#include "desktop/search.h"
+#include "desktop/save_complete.h"
+#include "desktop/save_text.h"
+#include "desktop/print.h"
+#include "netsurf/content.h"
+#include "netsurf/browser_window.h"
+#include "netsurf/keypress.h"
#include "gtk/toolbar_items.h"
#include "gtk/completion.h"
@@ -49,6 +55,10 @@
#include "gtk/resources.h"
#include "gtk/schedule.h"
#include "gtk/local_history.h"
+#include "gtk/tabs.h"
+#include "gtk/print.h"
+#include "gtk/layout_pango.h"
+#include "gtk/preferences.h"
#include "gtk/toolbar.h"
/**
@@ -2193,7 +2203,7 @@ closetab_button_clicked_cb(GtkWidget *widget, gpointer data)
{
struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
- nsgtk_tab_close_current(tb->widget);
+ nsgtk_tab_close_current(GTK_NOTEBOOK(tb->widget));
return TRUE;
}
@@ -2216,8 +2226,71 @@ closewindow_button_clicked_cb(GtkWidget *widget, gpointer data)
}
+static nserror
+nsgtk_saveas_dialog(struct browser_window *bw,
+ const char *title,
+ GtkWindow *parent,
+ bool folder,
+ gchar **path_out)
+{
+ nserror res;
+ GtkWidget *fc; /* file chooser widget */
+ GtkFileChooserAction action;
+ char *path; /* proposed path */
+
+ if (!browser_window_has_content(bw)) {
+ /* cannot save a page with no content */
+ return NSERROR_INVALID;
+ }
+
+ if (folder) {
+ action = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
+ } else {
+ action = GTK_FILE_CHOOSER_ACTION_SAVE;
+ }
+
+ fc = gtk_file_chooser_dialog_new(title,
+ parent,
+ action,
+ NSGTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ NSGTK_STOCK_SAVE,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ /* set a default file name */
+ res = nsurl_nice(browser_window_access_url(bw), &path, false);
+ if (res != NSERROR_OK) {
+ path = strdup(messages_get("SaveText"));
+ if (path == NULL) {
+ gtk_widget_destroy(fc);
+ return NSERROR_NOMEM;
+ }
+ }
+
+ if ((!folder) || (access(path, F_OK) != 0)) {
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), path);
+ }
+ free(path);
+
+ /* confirm overwriting */
+ gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(fc), TRUE);
+
+ /* run the dialog to let user select path */
+ if (gtk_dialog_run(GTK_DIALOG(fc)) != GTK_RESPONSE_ACCEPT) {
+ gtk_widget_destroy(fc);
+ return NSERROR_NOT_FOUND;
+ }
+
+ *path_out = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fc));
+
+ gtk_widget_destroy(fc);
+
+ return NSERROR_OK;
+}
+
/**
- * handler for new window tool bar item clicked signal
+ * handler for full save export tool bar item clicked signal
*
* \param widget The widget the signal is being delivered to.
* \param data The toolbar context passed when the signal was connected
@@ -2226,6 +2299,433 @@ closewindow_button_clicked_cb(GtkWidget *widget, gpointer data)
static gboolean
savepage_button_clicked_cb(GtkWidget *widget, gpointer data)
{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ DIR *d;
+ gchar *path;
+ nserror res;
+ GtkWidget *toplevel;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ res = nsgtk_saveas_dialog(bw,
+ messages_get("gtkcompleteSave"),
+ GTK_WINDOW(toplevel),
+ true,
+ &path);
+ if (res != NSERROR_OK) {
+ return FALSE;
+ }
+
+ d = opendir(path);
+ if (d == NULL) {
+ NSLOG(netsurf, INFO,
+ "Unable to open directory %s for complete save: %s",
+ path,
+ strerror(errno));
+ if (errno == ENOTDIR) {
+ nsgtk_warning("NoDirError", path);
+ } else {
+ nsgtk_warning("gtkFileError", path);
+ }
+ g_free(path);
+ return TRUE;
+ }
+ closedir(d);
+
+ save_complete(browser_window_get_content(bw), path, NULL);
+ g_free(path);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for pdf export tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+pdf_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *toplevel;
+ gchar *filename;
+ nserror res;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ res = nsgtk_saveas_dialog(bw,
+ "Export to PDF",
+ GTK_WINDOW(toplevel),
+ false,
+ &filename);
+ if (res != NSERROR_OK) {
+ return FALSE;
+ }
+
+#ifdef WITH_PDF_EXPORT
+ struct print_settings *settings;
+
+ /* this way the scale used by PDF functions is synchronised with that
+ * used by the all-purpose print interface
+ */
+ haru_nsfont_set_scale((float)option_export_scale / 100);
+
+ settings = print_make_settings(PRINT_OPTIONS,
+ (const char *) filename,
+ &haru_nsfont);
+ g_free(filename);
+ if (settings == NULL) {
+ return TRUE;
+ }
+ /* This will clean up the print_settings object for us */
+ print_basic_run(browser_window_get_content(bw), &pdf_printer, settings);
+#endif
+ return TRUE;
+
+}
+
+
+/**
+ * handler for plain text export tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+plaintext_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *toplevel;
+ gchar *filename;
+ nserror res;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ res = nsgtk_saveas_dialog(bw,
+ messages_get("gtkplainSave"),
+ GTK_WINDOW(toplevel),
+ false,
+ &filename);
+ if (res != NSERROR_OK) {
+ return FALSE;
+ }
+
+
+ save_as_text(browser_window_get_content(bw), filename);
+ g_free(filename);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for print tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+print_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkPrintOperation *print_op;
+ GtkPageSetup *page_setup;
+ GtkPrintSettings *print_settings;
+ GtkPrintOperationResult res = GTK_PRINT_OPERATION_RESULT_ERROR;
+ struct print_settings *nssettings;
+ char *settings_fname = NULL;
+ GtkWidget *toplevel;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ print_op = gtk_print_operation_new();
+ if (print_op == NULL) {
+ nsgtk_warning(messages_get("NoMemory"), 0);
+ return TRUE;
+ }
+
+ /* use previously saved settings if any */
+ netsurf_mkpath(&settings_fname, NULL, 2, nsgtk_config_home, "Print");
+ if (settings_fname != NULL) {
+ print_settings = gtk_print_settings_new_from_file(settings_fname, NULL);
+ if (print_settings != NULL) {
+ gtk_print_operation_set_print_settings(print_op,
+ print_settings);
+
+ /* We're not interested in the settings any more */
+ g_object_unref(print_settings);
+ }
+ }
+
+ content_to_print = browser_window_get_content(bw);
+
+ page_setup = gtk_print_run_page_setup_dialog(GTK_WINDOW(toplevel),
+ NULL,
+ NULL);
+ if (page_setup == NULL) {
+ nsgtk_warning(messages_get("NoMemory"), 0);
+ free(settings_fname);
+ g_object_unref(print_op);
+ return TRUE;
+ }
+ gtk_print_operation_set_default_page_setup(print_op, page_setup);
+
+ nssettings = print_make_settings(PRINT_DEFAULT,
+ NULL,
+ nsgtk_layout_table);
+
+ g_signal_connect(print_op,
+ "begin_print",
+ G_CALLBACK(gtk_print_signal_begin_print),
+ nssettings);
+ g_signal_connect(print_op,
+ "draw_page",
+ G_CALLBACK(gtk_print_signal_draw_page),
+ NULL);
+ g_signal_connect(print_op,
+ "end_print",
+ G_CALLBACK(gtk_print_signal_end_print),
+ nssettings);
+
+ if (content_get_type(browser_window_get_content(bw)) != CONTENT_TEXTPLAIN) {
+ res = gtk_print_operation_run(print_op,
+ GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
+ GTK_WINDOW(toplevel),
+ NULL);
+ }
+
+ /* if the settings were used save them for future use */
+ if (settings_fname != NULL) {
+ if (res == GTK_PRINT_OPERATION_RESULT_APPLY) {
+ /* Do not increment the settings reference */
+ print_settings = gtk_print_operation_get_print_settings(print_op);
+
+ gtk_print_settings_to_file(print_settings,
+ settings_fname,
+ NULL);
+ }
+ free(settings_fname);
+ }
+
+ /* Our print_settings object is destroyed by the end print handler */
+ g_object_unref(page_setup);
+ g_object_unref(print_op);
+
+ return TRUE;
+}
+
+/**
+ * handler for quit tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+quit_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nsgtk_scaffolding_destroy_all();
+ return TRUE;
+}
+
+
+/**
+ * handler for cut tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+cut_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_cut_clipboard(GTK_EDITABLE(focused));
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_CUT_SELECTION);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for copy tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+copy_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_copy_clipboard(GTK_EDITABLE(focused));
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_COPY_SELECTION);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for paste tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+paste_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_paste_clipboard(GTK_EDITABLE(focused));
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_PASTE);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for delete tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+delete_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_delete_selection(GTK_EDITABLE(focused));
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_CLEAR_SELECTION);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for select all tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+selectall_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *focused;
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ focused = gtk_window_get_focus(GTK_WINDOW(toplevel));
+
+ /* let gtk handle it if focused widget is an editable */
+ if (GTK_IS_EDITABLE(focused)) {
+ gtk_editable_select_region(GTK_EDITABLE(focused), 0, -1);
+ } else {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ browser_window_key_press(bw, NS_KEY_SELECT_ALL);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for preferences tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+preferences_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ GtkWidget *toplevel;
+ GtkWidget *wndpreferences;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ wndpreferences = nsgtk_preferences(bw, GTK_WINDOW(toplevel));
+ if (wndpreferences != NULL) {
+ gtk_widget_show(wndpreferences);
+ }
+
+ return TRUE;
+
}
@@ -2628,7 +3128,7 @@ nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb,
if (tb->buttons[itemid]->button != NULL) {
widget = GTK_WIDGET(tb->buttons[itemid]->button);
} else {
- widget = tb->widget;
+ widget = GTK_WIDGET(tb->widget);
}
tb->buttons[itemid]->bhandler(widget, tb);
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 03188c2..b4bc91f 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -103,20 +103,20 @@ TOOLBAR_ITEM(OPENFILE_BUTTON, openfile, true, openfile_button_clicked_cb)
TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, closetab_button_clicked_cb)
TOOLBAR_ITEM(CLOSEWINDOW_BUTTON, closewindow, true, closewindow_button_clicked_cb)
TOOLBAR_ITEM(SAVEPAGE_BUTTON, savepage, true, savepage_button_clicked_cb)
-TOOLBAR_ITEM(PDF_BUTTON, pdf, false, NULL)
-TOOLBAR_ITEM(PLAINTEXT_BUTTON, plaintext, true, NULL)
+TOOLBAR_ITEM(PDF_BUTTON, pdf, false, pdf_button_clicked_cb)
+TOOLBAR_ITEM(PLAINTEXT_BUTTON, plaintext, true, plaintext_button_clicked_cb)
TOOLBAR_ITEM(DRAWFILE_BUTTON, drawfile, false, NULL)
TOOLBAR_ITEM(POSTSCRIPT_BUTTON, postscript, false, NULL)
TOOLBAR_ITEM(PRINTPREVIEW_BUTTON, printpreview, false, NULL)
-TOOLBAR_ITEM(PRINT_BUTTON, print, true, NULL)
-TOOLBAR_ITEM(QUIT_BUTTON, quit, true, NULL)
-TOOLBAR_ITEM(CUT_BUTTON, cut, true, NULL)
-TOOLBAR_ITEM(COPY_BUTTON, copy, true, NULL)
-TOOLBAR_ITEM(PASTE_BUTTON, paste, true, NULL)
-TOOLBAR_ITEM(DELETE_BUTTON, delete, false, NULL)
-TOOLBAR_ITEM(SELECTALL_BUTTON, selectall, true, NULL)
+TOOLBAR_ITEM(PRINT_BUTTON, print, true, print_button_clicked_cb)
+TOOLBAR_ITEM(QUIT_BUTTON, quit, true, quit_button_clicked_cb)
+TOOLBAR_ITEM(CUT_BUTTON, cut, true, cut_button_clicked_cb)
+TOOLBAR_ITEM(COPY_BUTTON, copy, true, copy_button_clicked_cb)
+TOOLBAR_ITEM(PASTE_BUTTON, paste, true, paste_button_clicked_cb)
+TOOLBAR_ITEM(DELETE_BUTTON, delete, false, delete_button_clicked_cb)
+TOOLBAR_ITEM(SELECTALL_BUTTON, selectall, true, selectall_button_clicked_cb)
TOOLBAR_ITEM(FIND_BUTTON, find, true, NULL)
-TOOLBAR_ITEM(PREFERENCES_BUTTON, preferences, true, NULL)
+TOOLBAR_ITEM(PREFERENCES_BUTTON, preferences, true, preferences_button_clicked_cb)
TOOLBAR_ITEM(ZOOMPLUS_BUTTON, zoomplus, true, NULL)
TOOLBAR_ITEM(ZOOMMINUS_BUTTON, zoomminus, true, NULL)
TOOLBAR_ITEM(ZOOMNORMAL_BUTTON, zoomnormal, true, NULL)
diff --git a/resources/FatMessages b/resources/FatMessages
index 54c69b8..008afef 100644
--- a/resources/FatMessages
+++ b/resources/FatMessages
@@ -2872,11 +2872,11 @@ de.gtk.gtkplainSave:Als Text speichern
fr.gtk.gtkplainSave:Enregistrer sans mise en forme
it.gtk.gtkplainSave:Salva come testo
nl.gtk.gtkplainSave:Als tekst bewaren
-en.gtk.gtkcompleteSave:Save webpage complete - select an empty directory
-de.gtk.gtkcompleteSave:Seite komplett speichern - ein leeres Verzeichnis wählen
-fr.gtk.gtkcompleteSave:Enregistrer page web complète - sélectioner un dossier vide
-it.gtk.gtkcompleteSave:Salva l'intera pagina web - seleziona una directory vuota
-nl.gtk.gtkcompleteSave:Complete webpagina bewaren - selecteer een lege map
+en.gtk.gtkcompleteSave:Export complete page as a folder
+de.gtk.gtkcompleteSave:Seite komplett speichern
+fr.gtk.gtkcompleteSave:Enregistrer page web complète
+it.gtk.gtkcompleteSave:Salva l'intera pagina web
+nl.gtk.gtkcompleteSave:Complete webpagina bewaren
en.gtk.gtkSaveConfirm:File saved
de.gtk.gtkSaveConfirm:Datei gespeichert
fr.gtk.gtkSaveConfirm:Fichier enregistré
@@ -2957,16 +2957,16 @@ de.gtk.gtkCloseWindow:Fenster schließen
fr.gtk.gtkCloseWindow:_Fermer la fenêtre
it.gtk.gtkCloseWindow:_Chiudi finestra
nl.gtk.gtkCloseWindow:_Venster sluiten
-en.gtk.gtkSavePage:Save Page…
-de.gtk.gtkSavePage:Seite speichern..
-fr.gtk.gtkSavePage:Enregistrer la Page...
-it.gtk.gtkSavePage:Salva pagina...
-nl.gtk.gtkSavePage:Pagina bewaren...
en.gtk.gtkExport:Export
de.gtk.gtkExport:Exportieren
fr.gtk.gtkExport:Exporter
it.gtk.gtkExport:Esporta
nl.gtk.gtkExport:Exporteren
+en.gtk.gtkSavePage:Complete Page…
+de.gtk.gtkSavePage:Seite speichern..
+fr.gtk.gtkSavePage:Enregistrer la Page...
+it.gtk.gtkSavePage:Salva pagina...
+nl.gtk.gtkSavePage:Pagina bewaren...
en.gtk.gtkPlainText:Plain Text…
de.gtk.gtkPlainText:Reiner Text..
fr.gtk.gtkPlainText:Texte...
--
NetSurf Browser
4 years, 3 months
netsurf: branch vince/gtk-tab-restyle updated. release/3.9-182-g0ddbb21
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/0ddbb21fdf210aae33143...
...commit http://git.netsurf-browser.org/netsurf.git/commit/0ddbb21fdf210aae33143f4...
...tree http://git.netsurf-browser.org/netsurf.git/tree/0ddbb21fdf210aae33143f4f3...
The branch, vince/gtk-tab-restyle has been updated
via 0ddbb21fdf210aae33143f4f3949bf35b6651376 (commit)
from 39bb4b403e4a45c1cd2e05218599c04a31af1566 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=0ddbb21fdf210aae331...
commit 0ddbb21fdf210aae33143f4f3949bf35b6651376
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
allow menu activation to use the toolbar button implementations
diff --git a/frontends/gtk/completion.c b/frontends/gtk/completion.c
index 983ecab..1a76541 100644
--- a/frontends/gtk/completion.c
+++ b/frontends/gtk/completion.c
@@ -32,6 +32,7 @@
#include "gtk/compat.h"
#include "gtk/warn.h"
#include "gtk/scaffolding.h"
+#include "gtk/toolbar_items.h"
#include "gtk/window.h"
#include "gtk/completion.h"
diff --git a/frontends/gtk/download.c b/frontends/gtk/download.c
index 3eab532..0bb5bb3 100644
--- a/frontends/gtk/download.c
+++ b/frontends/gtk/download.c
@@ -34,6 +34,7 @@
#include "gtk/warn.h"
#include "gtk/scaffolding.h"
+#include "gtk/toolbar_items.h"
#include "gtk/window.h"
#include "gtk/compat.h"
#include "gtk/resources.h"
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index 7f33315..2c23364 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -63,6 +63,7 @@
#include "gtk/global_history.h"
#include "gtk/hotlist.h"
#include "gtk/throbber.h"
+#include "gtk/toolbar_items.h"
#include "gtk/scaffolding.h"
#include "gtk/window.h"
#include "gtk/schedule.h"
diff --git a/frontends/gtk/preferences.c b/frontends/gtk/preferences.c
index 652075c..efef4a2 100644
--- a/frontends/gtk/preferences.c
+++ b/frontends/gtk/preferences.c
@@ -30,6 +30,7 @@
#include "desktop/searchweb.h"
#include "gtk/compat.h"
+#include "gtk/toolbar_items.h"
#include "gtk/window.h"
#include "gtk/gui.h"
#include "gtk/scaffolding.h"
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 13a2ed5..10d9681 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -69,8 +69,8 @@
#include "gtk/print.h"
#include "gtk/search.h"
#include "gtk/throbber.h"
-#include "gtk/toolbar.h"
#include "gtk/toolbar_items.h"
+#include "gtk/toolbar.h"
#include "gtk/window.h"
#include "gtk/gdk.h"
#include "gtk/scaffolding.h"
@@ -601,105 +601,40 @@ static void nsgtk_openfile_open(const char *filename)
/* signal handlers for menu entries */
-MULTIHANDLER(newwindow)
+/**
+ * menu signal handler for activation on new window item
+ */
+static gboolean
+nsgtk_on_newwindow_activate_menu(GtkMenuItem *widget, gpointer data)
{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- const char *addr;
- nsurl *url;
- nserror error;
-
- if (nsoption_charp(homepage_url) != NULL) {
- addr = nsoption_charp(homepage_url);
- } else {
- addr = NETSURF_HOMEPAGE;
- }
-
- error = nsurl_create(addr, &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY,
- url,
- NULL,
- bw,
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- }
-
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, NEWWINDOW_BUTTON);
return TRUE;
}
-/* exported interface documented in gtk/scaffolding.h */
-nserror nsgtk_scaffolding_new_tab(struct gui_window *gw)
-{
- struct browser_window *bw = nsgtk_get_browser_window(gw);
- nsurl *url = NULL;
- nserror error;
-
- if (!nsoption_bool(new_blank)) {
- const char *addr;
- if (nsoption_charp(homepage_url) != NULL) {
- addr = nsoption_charp(homepage_url);
- } else {
- addr = NETSURF_HOMEPAGE;
- }
- error = nsurl_create(addr, &url);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- }
- }
-
- error = browser_window_create(BW_CREATE_HISTORY |
- BW_CREATE_TAB,
- url,
- NULL,
- bw,
- NULL);
- if (url != NULL) {
- nsurl_unref(url);
- }
- return error;
-}
-
-MULTIHANDLER(newtab)
+/**
+ * menu signal handler for activation on new tab item
+ */
+static gboolean
+nsgtk_on_newtab_activate_menu(GtkMenuItem *widget, gpointer data)
{
- nserror error;
-
- error = nsgtk_scaffolding_new_tab(g->top_level);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- }
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, NEWTAB_BUTTON);
return TRUE;
}
-MULTIHANDLER(openfile)
+/**
+ * menu signal handler for activation on openfile item
+ */
+static gboolean
+nsgtk_on_openfile_activate_menu(GtkMenuItem *widget, gpointer data)
{
- GtkWidget *dlgOpen;
- gint response;
-
- scaf_current = g;
- dlgOpen = gtk_file_chooser_dialog_new("Open File",
- scaf_current->window,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_OPEN, GTK_RESPONSE_OK,
- NULL, NULL);
-
- response = gtk_dialog_run(GTK_DIALOG(dlgOpen));
- if (response == GTK_RESPONSE_OK) {
- gchar *filename;
- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlgOpen));
-
- nsgtk_openfile_open((const char *)filename);
-
- g_free(filename);
- }
-
- gtk_widget_destroy(dlgOpen);
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, OPENFILE_BUTTON);
return TRUE;
}
+
/**
* callback to determine if a path is a directory.
*
@@ -1001,12 +936,19 @@ MULTIHANDLER(print)
return TRUE;
}
-MULTIHANDLER(closewindow)
+
+/**
+ * menu signal handler for activation on close window item
+ */
+static gboolean
+nsgtk_on_closewindow_activate_menu(GtkMenuItem *widget, gpointer data)
{
- gtk_widget_destroy(GTK_WIDGET(g->window));
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, CLOSEWINDOW_BUTTON);
return TRUE;
}
+
MULTIHANDLER(quit)
{
struct nsgtk_scaffolding *gs;
@@ -1639,10 +1581,14 @@ MULTIHANDLER(prevtab)
return TRUE;
}
-MULTIHANDLER(closetab)
+/**
+ * menu signal handler for activation on close tab item
+ */
+static gboolean
+nsgtk_on_closetab_activate_menu(GtkMenuItem *widget, gpointer data)
{
- nsgtk_tab_close_current(g->notebook);
-
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, CLOSETAB_BUTTON);
return TRUE;
}
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index 261d2f0..d5a916f 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -155,8 +155,6 @@ void nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g, gdouble x, gdou
gboolean nsgtk_window_url_changed(GtkWidget *, GdkEventKey *, gpointer);
-nserror nsgtk_scaffolding_new_tab(struct gui_window *gw);
-
/* core acessors */
/**
* set the title in the window
diff --git a/frontends/gtk/search.c b/frontends/gtk/search.c
index 40c0253..6baf7f6 100644
--- a/frontends/gtk/search.c
+++ b/frontends/gtk/search.c
@@ -38,6 +38,7 @@
#include "gtk/warn.h"
#include "gtk/compat.h"
#include "gtk/search.h"
+#include "gtk/toolbar_items.h"
#include "gtk/scaffolding.h"
#include "gtk/window.h"
diff --git a/frontends/gtk/selection.c b/frontends/gtk/selection.c
index 228d65d..8715260 100644
--- a/frontends/gtk/selection.c
+++ b/frontends/gtk/selection.c
@@ -24,6 +24,7 @@
#include "netsurf/browser_window.h"
#include "netsurf/clipboard.h"
+#include "gtk/toolbar_items.h"
#include "gtk/window.h"
static GString *current_selection = NULL;
diff --git a/frontends/gtk/tabs.c b/frontends/gtk/tabs.c
index 9e5c1b3..04bd69f 100644
--- a/frontends/gtk/tabs.c
+++ b/frontends/gtk/tabs.c
@@ -25,6 +25,7 @@
#include "desktop/search.h"
#include "gtk/compat.h"
+#include "gtk/toolbar_items.h"
#include "gtk/scaffolding.h"
#include "gtk/window.h"
#include "gtk/search.h"
@@ -179,7 +180,7 @@ nsgtk_tab_switch_page_after(GtkNotebook *notebook,
srcpage = gtk_notebook_get_nth_page(notebook, srcpagenum);
gw = g_object_get_data(G_OBJECT(srcpage), "gui_window");
if ((gw != NULL) && (nsgtk_get_scaffold(gw) != NULL)) {
- error = nsgtk_scaffolding_new_tab(gw);
+ error = nsgtk_window_item_activate(gw, NEWTAB_BUTTON);
if (error != NSERROR_OK) {
NSLOG(netsurf, INFO,
"Failed to open new tab.");
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index b1cd51c..4b3f23b 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -35,7 +35,9 @@
#include "utils/nsoption.h"
#include "utils/file.h"
#include "utils/nsurl.h"
+#include "utils/corestrings.h"
+#include "gtk/toolbar_items.h"
#include "gtk/completion.h"
#include "gtk/gui.h"
#include "gtk/warn.h"
@@ -45,10 +47,9 @@
#include "gtk/window.h"
#include "gtk/compat.h"
#include "gtk/resources.h"
-#include "gtk/toolbar_items.h"
-#include "gtk/toolbar.h"
#include "gtk/schedule.h"
#include "gtk/local_history.h"
+#include "gtk/toolbar.h"
/**
* button location indicating button is not to be shown
@@ -2030,6 +2031,205 @@ websearch_entry_button_press_cb(GtkWidget *widget,
/**
+ * handler for new window tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+newwindow_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ const char *addr;
+ nsurl *url;
+
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
+ }
+
+ res = nsurl_create(addr, &url);
+ if (res == NSERROR_OK) {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ res = browser_window_create(BW_CREATE_HISTORY,
+ url,
+ NULL,
+ bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for new tab tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+newtab_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res = NSERROR_OK;
+ nsurl *url = NULL;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ if (!nsoption_bool(new_blank)) {
+ const char *addr;
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
+ }
+ res = nsurl_create(addr, &url);
+ }
+
+ if (res == NSERROR_OK) {
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ res = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
+ url,
+ NULL,
+ bw,
+ NULL);
+ }
+ if (url != NULL) {
+ nsurl_unref(url);
+ }
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for open file tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+openfile_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWidget *dlgOpen;
+ gint response;
+ GtkWidget *toplevel;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ dlgOpen = gtk_file_chooser_dialog_new("Open File",
+ GTK_WINDOW(toplevel),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NSGTK_STOCK_OPEN, GTK_RESPONSE_OK,
+ NULL, NULL);
+
+ response = gtk_dialog_run(GTK_DIALOG(dlgOpen));
+ if (response == GTK_RESPONSE_OK) {
+ char *urltxt;
+ gchar *filename;
+ nserror res;
+ nsurl *url;
+
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlgOpen));
+
+ urltxt = malloc(strlen(filename) + FILE_SCHEME_PREFIX_LEN + 1);
+ if (urltxt != NULL) {
+ sprintf(urltxt, FILE_SCHEME_PREFIX"%s", filename);
+
+ res = nsurl_create(urltxt, &url);
+ if (res == NSERROR_OK) {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ res = browser_window_navigate(bw,
+ url,
+ NULL,
+ BW_NAVIGATE_HISTORY,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+ free(urltxt);
+ }
+
+
+ g_free(filename);
+ }
+
+ gtk_widget_destroy(dlgOpen);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for close tab tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+closetab_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+
+ nsgtk_tab_close_current(tb->widget);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for close window tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+closewindow_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWidget *toplevel;
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+ gtk_widget_destroy(toplevel);
+ return TRUE;
+}
+
+
+/**
+ * handler for new window tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+savepage_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+}
+
+
+/**
* create a toolbar item
*
* create a toolbar item and set up its default handlers
@@ -2403,3 +2603,35 @@ nserror nsgtk_toolbar_set_url(struct nsgtk_toolbar *tb, nsurl *url)
return NSERROR_OK;
}
+
+
+/* exported interface documented in toolbar.h */
+nserror
+nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb,
+ nsgtk_toolbar_button itemid)
+{
+ GtkWidget *widget;
+
+ /* ensure item id in range */
+ if ((itemid < BACK_BUTTON) || (itemid >= PLACEHOLDER_BUTTON)) {
+ return NSERROR_BAD_PARAMETER;
+ }
+
+ if (tb->buttons[itemid]->bhandler == NULL) {
+ return NSERROR_INVALID;
+ }
+
+ /*
+ * if item has a widget in the current toolbar use that as the
+ * signal source otherwise use the toolbar widget itself.
+ */
+ if (tb->buttons[itemid]->button != NULL) {
+ widget = GTK_WIDGET(tb->buttons[itemid]->button);
+ } else {
+ widget = tb->widget;
+ }
+
+ tb->buttons[itemid]->bhandler(widget, tb);
+
+ return NSERROR_OK;
+}
diff --git a/frontends/gtk/toolbar.h b/frontends/gtk/toolbar.h
index f04d807..b89774b 100644
--- a/frontends/gtk/toolbar.h
+++ b/frontends/gtk/toolbar.h
@@ -70,6 +70,19 @@ nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active);
*/
nserror nsgtk_toolbar_set_url(struct nsgtk_toolbar *tb, nsurl *url);
+
+/**
+ * activate the handler for a toolbar item
+ *
+ * This allows the same action to be performed for menu enties as if
+ * the user had clicked the toolbar widget.
+ *
+ * \param toolbar A toolbar returned from a creation
+ * \param itemid the id of the item to activate
+ * \return NSERROR_OK on success
+ */
+nserror nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb, nsgtk_toolbar_button itemid);
+
/**
* sets up the images for scaffolding.
*/
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 5281ab6..03188c2 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -97,12 +97,12 @@ TOOLBAR_ITEM(HOME_BUTTON, home, true, home_button_clicked_cb)
TOOLBAR_ITEM(URL_BAR_ITEM, url_bar, true, NULL)
TOOLBAR_ITEM(WEBSEARCH_ITEM, websearch, true, NULL)
TOOLBAR_ITEM(THROBBER_ITEM, throbber, true, NULL)
-TOOLBAR_ITEM(NEWWINDOW_BUTTON, newwindow, true, NULL)
-TOOLBAR_ITEM(NEWTAB_BUTTON, newtab, true, NULL)
-TOOLBAR_ITEM(OPENFILE_BUTTON, openfile, true, NULL)
-TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, NULL)
-TOOLBAR_ITEM(CLOSEWINDOW_BUTTON, closewindow, true, NULL)
-TOOLBAR_ITEM(SAVEPAGE_BUTTON, savepage, true, NULL)
+TOOLBAR_ITEM(NEWWINDOW_BUTTON, newwindow, true, newwindow_button_clicked_cb)
+TOOLBAR_ITEM(NEWTAB_BUTTON, newtab, true, newtab_button_clicked_cb)
+TOOLBAR_ITEM(OPENFILE_BUTTON, openfile, true, openfile_button_clicked_cb)
+TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, closetab_button_clicked_cb)
+TOOLBAR_ITEM(CLOSEWINDOW_BUTTON, closewindow, true, closewindow_button_clicked_cb)
+TOOLBAR_ITEM(SAVEPAGE_BUTTON, savepage, true, savepage_button_clicked_cb)
TOOLBAR_ITEM(PDF_BUTTON, pdf, false, NULL)
TOOLBAR_ITEM(PLAINTEXT_BUTTON, plaintext, true, NULL)
TOOLBAR_ITEM(DRAWFILE_BUTTON, drawfile, false, NULL)
diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c
index ce67004..015b5fa 100644
--- a/frontends/gtk/window.c
+++ b/frontends/gtk/window.c
@@ -47,12 +47,12 @@
#include "desktop/textinput.h"
#include "utils/nsurl.h"
-#include "gtk/window.h"
#include "gtk/selection.h"
#include "gtk/warn.h"
#include "gtk/compat.h"
#include "gtk/gui.h"
#include "gtk/scaffolding.h"
+#include "gtk/toolbar_items.h"
#include "gtk/toolbar.h"
#include "gtk/local_history.h"
#include "gtk/plotters.h"
@@ -61,6 +61,7 @@
#include "gtk/bitmap.h"
#include "gtk/gdk.h"
#include "gtk/resources.h"
+#include "gtk/window.h"
static GtkWidget *select_menu;
static struct form_control *select_menu_control;
@@ -894,7 +895,12 @@ 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);
+}
void nsgtk_reflow_all_windows(void)
{
diff --git a/frontends/gtk/window.h b/frontends/gtk/window.h
index 462ed17..a991f03 100644
--- a/frontends/gtk/window.h
+++ b/frontends/gtk/window.h
@@ -92,4 +92,13 @@ GtkWidget *nsgtk_window_get_tab(struct gui_window *gw);
*/
void nsgtk_window_set_tab(struct gui_window *gw, GtkWidget *w);
+/**
+ * activate the handler for a item in a toolbar of a gui window
+ *
+ * \param gw The gui window handle
+ * \param itemid The id of the item to activate
+ */
+nserror nsgtk_window_item_activate(struct gui_window *gw, nsgtk_toolbar_button itemid);
+
+
#endif /* NETSURF_GTK_WINDOW_H */
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/completion.c | 1 +
frontends/gtk/download.c | 1 +
frontends/gtk/gui.c | 1 +
frontends/gtk/preferences.c | 1 +
frontends/gtk/scaffolding.c | 132 +++++++----------------
frontends/gtk/scaffolding.h | 2 -
frontends/gtk/search.c | 1 +
frontends/gtk/selection.c | 1 +
frontends/gtk/tabs.c | 3 +-
frontends/gtk/toolbar.c | 236 ++++++++++++++++++++++++++++++++++++++++-
frontends/gtk/toolbar.h | 13 +++
frontends/gtk/toolbar_items.h | 12 +--
frontends/gtk/window.c | 10 +-
frontends/gtk/window.h | 9 ++
14 files changed, 317 insertions(+), 106 deletions(-)
diff --git a/frontends/gtk/completion.c b/frontends/gtk/completion.c
index 983ecab..1a76541 100644
--- a/frontends/gtk/completion.c
+++ b/frontends/gtk/completion.c
@@ -32,6 +32,7 @@
#include "gtk/compat.h"
#include "gtk/warn.h"
#include "gtk/scaffolding.h"
+#include "gtk/toolbar_items.h"
#include "gtk/window.h"
#include "gtk/completion.h"
diff --git a/frontends/gtk/download.c b/frontends/gtk/download.c
index 3eab532..0bb5bb3 100644
--- a/frontends/gtk/download.c
+++ b/frontends/gtk/download.c
@@ -34,6 +34,7 @@
#include "gtk/warn.h"
#include "gtk/scaffolding.h"
+#include "gtk/toolbar_items.h"
#include "gtk/window.h"
#include "gtk/compat.h"
#include "gtk/resources.h"
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index 7f33315..2c23364 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -63,6 +63,7 @@
#include "gtk/global_history.h"
#include "gtk/hotlist.h"
#include "gtk/throbber.h"
+#include "gtk/toolbar_items.h"
#include "gtk/scaffolding.h"
#include "gtk/window.h"
#include "gtk/schedule.h"
diff --git a/frontends/gtk/preferences.c b/frontends/gtk/preferences.c
index 652075c..efef4a2 100644
--- a/frontends/gtk/preferences.c
+++ b/frontends/gtk/preferences.c
@@ -30,6 +30,7 @@
#include "desktop/searchweb.h"
#include "gtk/compat.h"
+#include "gtk/toolbar_items.h"
#include "gtk/window.h"
#include "gtk/gui.h"
#include "gtk/scaffolding.h"
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 13a2ed5..10d9681 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -69,8 +69,8 @@
#include "gtk/print.h"
#include "gtk/search.h"
#include "gtk/throbber.h"
-#include "gtk/toolbar.h"
#include "gtk/toolbar_items.h"
+#include "gtk/toolbar.h"
#include "gtk/window.h"
#include "gtk/gdk.h"
#include "gtk/scaffolding.h"
@@ -601,105 +601,40 @@ static void nsgtk_openfile_open(const char *filename)
/* signal handlers for menu entries */
-MULTIHANDLER(newwindow)
+/**
+ * menu signal handler for activation on new window item
+ */
+static gboolean
+nsgtk_on_newwindow_activate_menu(GtkMenuItem *widget, gpointer data)
{
- struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
- const char *addr;
- nsurl *url;
- nserror error;
-
- if (nsoption_charp(homepage_url) != NULL) {
- addr = nsoption_charp(homepage_url);
- } else {
- addr = NETSURF_HOMEPAGE;
- }
-
- error = nsurl_create(addr, &url);
- if (error == NSERROR_OK) {
- error = browser_window_create(BW_CREATE_HISTORY,
- url,
- NULL,
- bw,
- NULL);
- nsurl_unref(url);
- }
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- }
-
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, NEWWINDOW_BUTTON);
return TRUE;
}
-/* exported interface documented in gtk/scaffolding.h */
-nserror nsgtk_scaffolding_new_tab(struct gui_window *gw)
-{
- struct browser_window *bw = nsgtk_get_browser_window(gw);
- nsurl *url = NULL;
- nserror error;
-
- if (!nsoption_bool(new_blank)) {
- const char *addr;
- if (nsoption_charp(homepage_url) != NULL) {
- addr = nsoption_charp(homepage_url);
- } else {
- addr = NETSURF_HOMEPAGE;
- }
- error = nsurl_create(addr, &url);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- }
- }
-
- error = browser_window_create(BW_CREATE_HISTORY |
- BW_CREATE_TAB,
- url,
- NULL,
- bw,
- NULL);
- if (url != NULL) {
- nsurl_unref(url);
- }
- return error;
-}
-
-MULTIHANDLER(newtab)
+/**
+ * menu signal handler for activation on new tab item
+ */
+static gboolean
+nsgtk_on_newtab_activate_menu(GtkMenuItem *widget, gpointer data)
{
- nserror error;
-
- error = nsgtk_scaffolding_new_tab(g->top_level);
- if (error != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(error), 0);
- }
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, NEWTAB_BUTTON);
return TRUE;
}
-MULTIHANDLER(openfile)
+/**
+ * menu signal handler for activation on openfile item
+ */
+static gboolean
+nsgtk_on_openfile_activate_menu(GtkMenuItem *widget, gpointer data)
{
- GtkWidget *dlgOpen;
- gint response;
-
- scaf_current = g;
- dlgOpen = gtk_file_chooser_dialog_new("Open File",
- scaf_current->window,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NSGTK_STOCK_OPEN, GTK_RESPONSE_OK,
- NULL, NULL);
-
- response = gtk_dialog_run(GTK_DIALOG(dlgOpen));
- if (response == GTK_RESPONSE_OK) {
- gchar *filename;
- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlgOpen));
-
- nsgtk_openfile_open((const char *)filename);
-
- g_free(filename);
- }
-
- gtk_widget_destroy(dlgOpen);
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, OPENFILE_BUTTON);
return TRUE;
}
+
/**
* callback to determine if a path is a directory.
*
@@ -1001,12 +936,19 @@ MULTIHANDLER(print)
return TRUE;
}
-MULTIHANDLER(closewindow)
+
+/**
+ * menu signal handler for activation on close window item
+ */
+static gboolean
+nsgtk_on_closewindow_activate_menu(GtkMenuItem *widget, gpointer data)
{
- gtk_widget_destroy(GTK_WIDGET(g->window));
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, CLOSEWINDOW_BUTTON);
return TRUE;
}
+
MULTIHANDLER(quit)
{
struct nsgtk_scaffolding *gs;
@@ -1639,10 +1581,14 @@ MULTIHANDLER(prevtab)
return TRUE;
}
-MULTIHANDLER(closetab)
+/**
+ * menu signal handler for activation on close tab item
+ */
+static gboolean
+nsgtk_on_closetab_activate_menu(GtkMenuItem *widget, gpointer data)
{
- nsgtk_tab_close_current(g->notebook);
-
+ struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
+ nsgtk_window_item_activate(g->top_level, CLOSETAB_BUTTON);
return TRUE;
}
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index 261d2f0..d5a916f 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -155,8 +155,6 @@ void nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g, gdouble x, gdou
gboolean nsgtk_window_url_changed(GtkWidget *, GdkEventKey *, gpointer);
-nserror nsgtk_scaffolding_new_tab(struct gui_window *gw);
-
/* core acessors */
/**
* set the title in the window
diff --git a/frontends/gtk/search.c b/frontends/gtk/search.c
index 40c0253..6baf7f6 100644
--- a/frontends/gtk/search.c
+++ b/frontends/gtk/search.c
@@ -38,6 +38,7 @@
#include "gtk/warn.h"
#include "gtk/compat.h"
#include "gtk/search.h"
+#include "gtk/toolbar_items.h"
#include "gtk/scaffolding.h"
#include "gtk/window.h"
diff --git a/frontends/gtk/selection.c b/frontends/gtk/selection.c
index 228d65d..8715260 100644
--- a/frontends/gtk/selection.c
+++ b/frontends/gtk/selection.c
@@ -24,6 +24,7 @@
#include "netsurf/browser_window.h"
#include "netsurf/clipboard.h"
+#include "gtk/toolbar_items.h"
#include "gtk/window.h"
static GString *current_selection = NULL;
diff --git a/frontends/gtk/tabs.c b/frontends/gtk/tabs.c
index 9e5c1b3..04bd69f 100644
--- a/frontends/gtk/tabs.c
+++ b/frontends/gtk/tabs.c
@@ -25,6 +25,7 @@
#include "desktop/search.h"
#include "gtk/compat.h"
+#include "gtk/toolbar_items.h"
#include "gtk/scaffolding.h"
#include "gtk/window.h"
#include "gtk/search.h"
@@ -179,7 +180,7 @@ nsgtk_tab_switch_page_after(GtkNotebook *notebook,
srcpage = gtk_notebook_get_nth_page(notebook, srcpagenum);
gw = g_object_get_data(G_OBJECT(srcpage), "gui_window");
if ((gw != NULL) && (nsgtk_get_scaffold(gw) != NULL)) {
- error = nsgtk_scaffolding_new_tab(gw);
+ error = nsgtk_window_item_activate(gw, NEWTAB_BUTTON);
if (error != NSERROR_OK) {
NSLOG(netsurf, INFO,
"Failed to open new tab.");
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index b1cd51c..4b3f23b 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -35,7 +35,9 @@
#include "utils/nsoption.h"
#include "utils/file.h"
#include "utils/nsurl.h"
+#include "utils/corestrings.h"
+#include "gtk/toolbar_items.h"
#include "gtk/completion.h"
#include "gtk/gui.h"
#include "gtk/warn.h"
@@ -45,10 +47,9 @@
#include "gtk/window.h"
#include "gtk/compat.h"
#include "gtk/resources.h"
-#include "gtk/toolbar_items.h"
-#include "gtk/toolbar.h"
#include "gtk/schedule.h"
#include "gtk/local_history.h"
+#include "gtk/toolbar.h"
/**
* button location indicating button is not to be shown
@@ -2030,6 +2031,205 @@ websearch_entry_button_press_cb(GtkWidget *widget,
/**
+ * handler for new window tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+newwindow_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+ const char *addr;
+ nsurl *url;
+
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
+ }
+
+ res = nsurl_create(addr, &url);
+ if (res == NSERROR_OK) {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ res = browser_window_create(BW_CREATE_HISTORY,
+ url,
+ NULL,
+ bw,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+
+ return TRUE;
+}
+
+
+/**
+ * handler for new tab tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+newtab_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res = NSERROR_OK;
+ nsurl *url = NULL;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ if (!nsoption_bool(new_blank)) {
+ const char *addr;
+ if (nsoption_charp(homepage_url) != NULL) {
+ addr = nsoption_charp(homepage_url);
+ } else {
+ addr = NETSURF_HOMEPAGE;
+ }
+ res = nsurl_create(addr, &url);
+ }
+
+ if (res == NSERROR_OK) {
+ bw = tb->get_bw(tb->get_bw_ctx);
+
+ res = browser_window_create(BW_CREATE_HISTORY |
+ BW_CREATE_TAB,
+ url,
+ NULL,
+ bw,
+ NULL);
+ }
+ if (url != NULL) {
+ nsurl_unref(url);
+ }
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+ return TRUE;
+}
+
+
+/**
+ * handler for open file tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+openfile_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWidget *dlgOpen;
+ gint response;
+ GtkWidget *toplevel;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ struct browser_window *bw;
+
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+
+ dlgOpen = gtk_file_chooser_dialog_new("Open File",
+ GTK_WINDOW(toplevel),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NSGTK_STOCK_OPEN, GTK_RESPONSE_OK,
+ NULL, NULL);
+
+ response = gtk_dialog_run(GTK_DIALOG(dlgOpen));
+ if (response == GTK_RESPONSE_OK) {
+ char *urltxt;
+ gchar *filename;
+ nserror res;
+ nsurl *url;
+
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlgOpen));
+
+ urltxt = malloc(strlen(filename) + FILE_SCHEME_PREFIX_LEN + 1);
+ if (urltxt != NULL) {
+ sprintf(urltxt, FILE_SCHEME_PREFIX"%s", filename);
+
+ res = nsurl_create(urltxt, &url);
+ if (res == NSERROR_OK) {
+ bw = tb->get_bw(tb->get_bw_ctx);
+ res = browser_window_navigate(bw,
+ url,
+ NULL,
+ BW_NAVIGATE_HISTORY,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ if (res != NSERROR_OK) {
+ nsgtk_warning(messages_get_errorcode(res), 0);
+ }
+ free(urltxt);
+ }
+
+
+ g_free(filename);
+ }
+
+ gtk_widget_destroy(dlgOpen);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for close tab tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+closetab_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+
+ nsgtk_tab_close_current(tb->widget);
+
+ return TRUE;
+}
+
+
+/**
+ * handler for close window tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+closewindow_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWidget *toplevel;
+ toplevel = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
+ gtk_widget_destroy(toplevel);
+ return TRUE;
+}
+
+
+/**
+ * handler for new window tool bar item clicked signal
+ *
+ * \param widget The widget the signal is being delivered to.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+savepage_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+}
+
+
+/**
* create a toolbar item
*
* create a toolbar item and set up its default handlers
@@ -2403,3 +2603,35 @@ nserror nsgtk_toolbar_set_url(struct nsgtk_toolbar *tb, nsurl *url)
return NSERROR_OK;
}
+
+
+/* exported interface documented in toolbar.h */
+nserror
+nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb,
+ nsgtk_toolbar_button itemid)
+{
+ GtkWidget *widget;
+
+ /* ensure item id in range */
+ if ((itemid < BACK_BUTTON) || (itemid >= PLACEHOLDER_BUTTON)) {
+ return NSERROR_BAD_PARAMETER;
+ }
+
+ if (tb->buttons[itemid]->bhandler == NULL) {
+ return NSERROR_INVALID;
+ }
+
+ /*
+ * if item has a widget in the current toolbar use that as the
+ * signal source otherwise use the toolbar widget itself.
+ */
+ if (tb->buttons[itemid]->button != NULL) {
+ widget = GTK_WIDGET(tb->buttons[itemid]->button);
+ } else {
+ widget = tb->widget;
+ }
+
+ tb->buttons[itemid]->bhandler(widget, tb);
+
+ return NSERROR_OK;
+}
diff --git a/frontends/gtk/toolbar.h b/frontends/gtk/toolbar.h
index f04d807..b89774b 100644
--- a/frontends/gtk/toolbar.h
+++ b/frontends/gtk/toolbar.h
@@ -70,6 +70,19 @@ nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active);
*/
nserror nsgtk_toolbar_set_url(struct nsgtk_toolbar *tb, nsurl *url);
+
+/**
+ * activate the handler for a toolbar item
+ *
+ * This allows the same action to be performed for menu enties as if
+ * the user had clicked the toolbar widget.
+ *
+ * \param toolbar A toolbar returned from a creation
+ * \param itemid the id of the item to activate
+ * \return NSERROR_OK on success
+ */
+nserror nsgtk_toolbar_item_activate(struct nsgtk_toolbar *tb, nsgtk_toolbar_button itemid);
+
/**
* sets up the images for scaffolding.
*/
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 5281ab6..03188c2 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -97,12 +97,12 @@ TOOLBAR_ITEM(HOME_BUTTON, home, true, home_button_clicked_cb)
TOOLBAR_ITEM(URL_BAR_ITEM, url_bar, true, NULL)
TOOLBAR_ITEM(WEBSEARCH_ITEM, websearch, true, NULL)
TOOLBAR_ITEM(THROBBER_ITEM, throbber, true, NULL)
-TOOLBAR_ITEM(NEWWINDOW_BUTTON, newwindow, true, NULL)
-TOOLBAR_ITEM(NEWTAB_BUTTON, newtab, true, NULL)
-TOOLBAR_ITEM(OPENFILE_BUTTON, openfile, true, NULL)
-TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, NULL)
-TOOLBAR_ITEM(CLOSEWINDOW_BUTTON, closewindow, true, NULL)
-TOOLBAR_ITEM(SAVEPAGE_BUTTON, savepage, true, NULL)
+TOOLBAR_ITEM(NEWWINDOW_BUTTON, newwindow, true, newwindow_button_clicked_cb)
+TOOLBAR_ITEM(NEWTAB_BUTTON, newtab, true, newtab_button_clicked_cb)
+TOOLBAR_ITEM(OPENFILE_BUTTON, openfile, true, openfile_button_clicked_cb)
+TOOLBAR_ITEM(CLOSETAB_BUTTON, closetab, false, closetab_button_clicked_cb)
+TOOLBAR_ITEM(CLOSEWINDOW_BUTTON, closewindow, true, closewindow_button_clicked_cb)
+TOOLBAR_ITEM(SAVEPAGE_BUTTON, savepage, true, savepage_button_clicked_cb)
TOOLBAR_ITEM(PDF_BUTTON, pdf, false, NULL)
TOOLBAR_ITEM(PLAINTEXT_BUTTON, plaintext, true, NULL)
TOOLBAR_ITEM(DRAWFILE_BUTTON, drawfile, false, NULL)
diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c
index ce67004..015b5fa 100644
--- a/frontends/gtk/window.c
+++ b/frontends/gtk/window.c
@@ -47,12 +47,12 @@
#include "desktop/textinput.h"
#include "utils/nsurl.h"
-#include "gtk/window.h"
#include "gtk/selection.h"
#include "gtk/warn.h"
#include "gtk/compat.h"
#include "gtk/gui.h"
#include "gtk/scaffolding.h"
+#include "gtk/toolbar_items.h"
#include "gtk/toolbar.h"
#include "gtk/local_history.h"
#include "gtk/plotters.h"
@@ -61,6 +61,7 @@
#include "gtk/bitmap.h"
#include "gtk/gdk.h"
#include "gtk/resources.h"
+#include "gtk/window.h"
static GtkWidget *select_menu;
static struct form_control *select_menu_control;
@@ -894,7 +895,12 @@ 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);
+}
void nsgtk_reflow_all_windows(void)
{
diff --git a/frontends/gtk/window.h b/frontends/gtk/window.h
index 462ed17..a991f03 100644
--- a/frontends/gtk/window.h
+++ b/frontends/gtk/window.h
@@ -92,4 +92,13 @@ GtkWidget *nsgtk_window_get_tab(struct gui_window *gw);
*/
void nsgtk_window_set_tab(struct gui_window *gw, GtkWidget *w);
+/**
+ * activate the handler for a item in a toolbar of a gui window
+ *
+ * \param gw The gui window handle
+ * \param itemid The id of the item to activate
+ */
+nserror nsgtk_window_item_activate(struct gui_window *gw, nsgtk_toolbar_button itemid);
+
+
#endif /* NETSURF_GTK_WINDOW_H */
--
NetSurf Browser
4 years, 3 months
netsurf: branch vince/gtk-tab-restyle updated. release/3.9-181-g39bb4b4
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/39bb4b403e4a45c1cd2e0...
...commit http://git.netsurf-browser.org/netsurf.git/commit/39bb4b403e4a45c1cd2e052...
...tree http://git.netsurf-browser.org/netsurf.git/tree/39bb4b403e4a45c1cd2e05218...
The branch, vince/gtk-tab-restyle has been updated
via 39bb4b403e4a45c1cd2e05218599c04a31af1566 (commit)
from f03a26d67bb9fee190a20c229849b99df5032285 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=39bb4b403e4a45c1cd2...
commit 39bb4b403e4a45c1cd2e05218599c04a31af1566
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
clean up some more handler code and remove button push
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 74a8043..13a2ed5 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -87,22 +87,16 @@ static gboolean nsgtk_on_##q##_activate_menu(GtkMenuItem *widget, gpointer data)
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;\
return nsgtk_on_##q##_activate(g);\
}\
-static gboolean nsgtk_on_##q##_activate_button(GtkButton *widget, gpointer data)\
-{\
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;\
- return nsgtk_on_##q##_activate(g);\
-}\
static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g)
-/** Macro to define a handler for menu events. */
-#define MENUHANDLER(q)\
-static gboolean nsgtk_on_##q##_activate_menu(GtkMenuItem *widget, gpointer data)
/** Macro to define a handler for button events. */
#define BUTTONHANDLER(q)\
static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
-
+/**
+ * menu entry context
+ */
struct nsgtk_menu {
GtkWidget *main; /* main menu entry */
GtkWidget *rclick; /* right click menu */
@@ -111,7 +105,9 @@ struct nsgtk_menu {
bool sensitivity; /* menu item is sensitive */
};
-/** Core scaffolding structure. */
+/**
+ * Core scaffolding structure.
+ */
struct nsgtk_scaffolding {
/** global linked list of scaffolding for gui interface adjustments */
struct nsgtk_scaffolding *next, *prev;
@@ -146,7 +142,9 @@ struct nsgtk_scaffolding {
struct nsgtk_menu menus[PLACEHOLDER_BUTTON];
};
-/** current scaffold for model dialogue use */
+/**
+ * current scaffold for model dialogue use
+ */
static struct nsgtk_scaffolding *scaf_current;
/** global list for interface changes */
@@ -336,8 +334,6 @@ static void scaffolding_update_context(struct nsgtk_scaffolding *g)
}
-
-
/**
* edit the sensitivity of focused widget
*
@@ -727,16 +723,19 @@ MULTIHANDLER(savepage)
if (!browser_window_has_content(nsgtk_get_browser_window(g->top_level)))
return FALSE;
- GtkWidget *fc = gtk_file_chooser_dialog_new(
+ GtkWidget *fc;
+ DIR *d;
+ char *path;
+ nserror res;
+ GtkFileFilter *filter;
+
+ fc = gtk_file_chooser_dialog_new(
messages_get("gtkcompleteSave"), g->window,
GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER,
NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NSGTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
- DIR *d;
- char *path;
- nserror res;
- GtkFileFilter *filter = gtk_file_filter_new();
+ filter = gtk_file_filter_new();
gtk_file_filter_set_name(filter, "Directories");
gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_FILENAME,
nsgtk_filter_directory, NULL, NULL);
@@ -1023,7 +1022,9 @@ MULTIHANDLER(quit)
return TRUE;
}
-MENUHANDLER(savelink)
+
+static gboolean
+nsgtk_on_savelink_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *) data;
struct gui_window *gui = g->top_level;
@@ -1050,7 +1051,8 @@ MENUHANDLER(savelink)
/**
* Handler for opening new window from a link. attached to the popup menu.
*/
-MENUHANDLER(link_openwin)
+static gboolean
+nsgtk_on_link_openwin_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *) data;
struct gui_window *gui = g->top_level;
@@ -1072,7 +1074,8 @@ MENUHANDLER(link_openwin)
/**
* Handler for opening new tab from a link. attached to the popup menu.
*/
-MENUHANDLER(link_opentab)
+static gboolean
+nsgtk_on_link_opentab_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *) data;
struct gui_window *gui = g->top_level;
@@ -1100,7 +1103,8 @@ MENUHANDLER(link_opentab)
/**
* Handler for bookmarking a link. attached to the popup menu.
*/
-MENUHANDLER(link_bookmark)
+static gboolean
+nsgtk_on_link_bookmark_activate_menu(GtkMenuItem *widget, gpointer data)
{
if (current_menu_features.link == NULL)
return FALSE;
@@ -1113,7 +1117,8 @@ MENUHANDLER(link_bookmark)
/**
* Handler for copying a link. attached to the popup menu.
*/
-MENUHANDLER(link_copy)
+static gboolean
+nsgtk_on_link_copy_activate_menu(GtkMenuItem *widget, gpointer data)
{
GtkClipboard *clipboard;
@@ -1177,7 +1182,9 @@ MULTIHANDLER(delete)
return TRUE;
}
-MENUHANDLER(customize)
+
+static gboolean
+nsgtk_on_customize_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
nsgtk_toolbar_customization_init(g);
@@ -1272,7 +1279,9 @@ MULTIHANDLER(viewsource)
return TRUE;
}
-MENUHANDLER(menubar)
+
+static gboolean
+nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
{
GtkWidget *w;
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
@@ -1318,7 +1327,9 @@ MENUHANDLER(menubar)
return TRUE;
}
-MENUHANDLER(toolbar)
+
+static gboolean
+nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
{
GtkWidget *w;
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
@@ -1751,6 +1762,7 @@ static void nsgtk_menu_connect_signals(struct nsgtk_scaffolding *g)
}
+
/**
* Create and connect handlers to popup menu.
*
@@ -1769,20 +1781,30 @@ nsgtk_new_scaffolding_popup(struct nsgtk_scaffolding *g, GtkAccelGroup *group)
return NULL;
}
- g_signal_connect(nmenu->popup_menu, "hide",
- G_CALLBACK(nsgtk_window_popup_menu_hidden), g);
+ g_signal_connect(nmenu->popup_menu,
+ "hide",
+ G_CALLBACK(nsgtk_window_popup_menu_hidden),
+ g);
- g_signal_connect(nmenu->cut_menuitem, "activate",
- G_CALLBACK(nsgtk_on_cut_activate_menu), g);
+ g_signal_connect(nmenu->cut_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_cut_activate_menu),
+ g);
- g_signal_connect(nmenu->copy_menuitem, "activate",
- G_CALLBACK(nsgtk_on_copy_activate_menu), g);
+ g_signal_connect(nmenu->copy_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_copy_activate_menu),
+ g);
- g_signal_connect(nmenu->paste_menuitem, "activate",
- G_CALLBACK(nsgtk_on_paste_activate_menu), g);
+ g_signal_connect(nmenu->paste_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_paste_activate_menu),
+ g);
- g_signal_connect(nmenu->customize_menuitem, "activate",
- G_CALLBACK(nsgtk_on_customize_activate_menu), g);
+ g_signal_connect(nmenu->customize_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_customize_activate_menu),
+ g);
/* set initial popup menu visibility */
popup_menu_hide(nmenu, true, false, false, true);
@@ -1798,7 +1820,8 @@ nsgtk_new_scaffolding_popup(struct nsgtk_scaffolding *g, GtkAccelGroup *group)
* \return true on success or false on error.
*/
static struct nsgtk_link_menu *
-nsgtk_new_scaffolding_link_popup(struct nsgtk_scaffolding *g, GtkAccelGroup *group)
+nsgtk_new_scaffolding_link_popup(struct nsgtk_scaffolding *g,
+ GtkAccelGroup *group)
{
struct nsgtk_link_menu *nmenu;
@@ -1808,20 +1831,30 @@ nsgtk_new_scaffolding_link_popup(struct nsgtk_scaffolding *g, GtkAccelGroup *gro
return NULL;
}
- g_signal_connect(nmenu->save_menuitem, "activate",
- G_CALLBACK(nsgtk_on_savelink_activate_menu), g);
+ g_signal_connect(nmenu->save_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_savelink_activate_menu),
+ g);
- g_signal_connect(nmenu->opentab_menuitem, "activate",
- G_CALLBACK(nsgtk_on_link_opentab_activate_menu), g);
+ g_signal_connect(nmenu->opentab_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_link_opentab_activate_menu),
+ g);
- g_signal_connect(nmenu->openwin_menuitem, "activate",
- G_CALLBACK(nsgtk_on_link_openwin_activate_menu), g);
+ g_signal_connect(nmenu->openwin_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_link_openwin_activate_menu),
+ g);
- g_signal_connect(nmenu->bookmark_menuitem, "activate",
- G_CALLBACK(nsgtk_on_link_bookmark_activate_menu), g);
+ g_signal_connect(nmenu->bookmark_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_link_bookmark_activate_menu),
+ g);
- g_signal_connect(nmenu->copy_menuitem, "activate",
- G_CALLBACK(nsgtk_on_link_copy_activate_menu), g);
+ g_signal_connect(nmenu->copy_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_link_copy_activate_menu),
+ g);
return nmenu;
}
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index bf7f1ef..b1cd51c 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -65,16 +65,16 @@
*/
struct nsgtk_toolbar_item {
GtkToolItem *button;
- int location; /* in toolbar */
- bool sensitivity;
+ int location; /* in toolbar */
+ bool sensitivity;
/**
* button clicked handler
*/
gboolean (*bhandler)(GtkWidget *widget, gpointer data);
- void *dataplus; /* customization -> toolbar */
- void *dataminus; /* customization -> store */
+ void *dataplus; /* customization -> toolbar */
+ void *dataminus; /* customization -> store */
};
@@ -225,39 +225,39 @@ nsgtk_theme_image_default(nsgtk_toolbar_button tbbutton,
switch(tbbutton) {
-#define BUTTON_IMAGE(p, q) \
+#define BUTTON_IMAGE(p, q) \
case p##_BUTTON: \
image = GTK_IMAGE(nsgtk_image_new_from_stock(q, iconsize)); \
break
- BUTTON_IMAGE(BACK, NSGTK_STOCK_GO_BACK);
- BUTTON_IMAGE(FORWARD, NSGTK_STOCK_GO_FORWARD);
- BUTTON_IMAGE(STOP, NSGTK_STOCK_STOP);
- BUTTON_IMAGE(RELOAD, NSGTK_STOCK_REFRESH);
- BUTTON_IMAGE(HOME, NSGTK_STOCK_HOME);
- BUTTON_IMAGE(NEWWINDOW, "gtk-new");
- BUTTON_IMAGE(NEWTAB, "gtk-new");
- BUTTON_IMAGE(OPENFILE, NSGTK_STOCK_OPEN);
- BUTTON_IMAGE(CLOSETAB, NSGTK_STOCK_CLOSE);
- BUTTON_IMAGE(CLOSEWINDOW, NSGTK_STOCK_CLOSE);
- BUTTON_IMAGE(SAVEPAGE, NSGTK_STOCK_SAVE_AS);
- BUTTON_IMAGE(PRINTPREVIEW, "gtk-print-preview");
- BUTTON_IMAGE(PRINT, "gtk-print");
- BUTTON_IMAGE(QUIT, "gtk-quit");
- BUTTON_IMAGE(CUT, "gtk-cut");
- BUTTON_IMAGE(COPY, "gtk-copy");
- BUTTON_IMAGE(PASTE, "gtk-paste");
- BUTTON_IMAGE(DELETE, "gtk-delete");
- BUTTON_IMAGE(SELECTALL, "gtk-select-all");
- BUTTON_IMAGE(FIND, NSGTK_STOCK_FIND);
- BUTTON_IMAGE(PREFERENCES, "gtk-preferences");
- BUTTON_IMAGE(ZOOMPLUS, "gtk-zoom-in");
- BUTTON_IMAGE(ZOOMMINUS, "gtk-zoom-out");
- BUTTON_IMAGE(ZOOMNORMAL, "gtk-zoom-100");
- BUTTON_IMAGE(FULLSCREEN, "gtk-fullscreen");
- BUTTON_IMAGE(VIEWSOURCE, "gtk-index");
- BUTTON_IMAGE(CONTENTS, "gtk-help");
- BUTTON_IMAGE(ABOUT, "gtk-about");
+ BUTTON_IMAGE(BACK, NSGTK_STOCK_GO_BACK);
+ BUTTON_IMAGE(FORWARD, NSGTK_STOCK_GO_FORWARD);
+ BUTTON_IMAGE(STOP, NSGTK_STOCK_STOP);
+ BUTTON_IMAGE(RELOAD, NSGTK_STOCK_REFRESH);
+ BUTTON_IMAGE(HOME, NSGTK_STOCK_HOME);
+ BUTTON_IMAGE(NEWWINDOW, "gtk-new");
+ BUTTON_IMAGE(NEWTAB, "gtk-new");
+ BUTTON_IMAGE(OPENFILE, NSGTK_STOCK_OPEN);
+ BUTTON_IMAGE(CLOSETAB, NSGTK_STOCK_CLOSE);
+ BUTTON_IMAGE(CLOSEWINDOW, NSGTK_STOCK_CLOSE);
+ BUTTON_IMAGE(SAVEPAGE, NSGTK_STOCK_SAVE_AS);
+ BUTTON_IMAGE(PRINTPREVIEW, "gtk-print-preview");
+ BUTTON_IMAGE(PRINT, "gtk-print");
+ BUTTON_IMAGE(QUIT, "gtk-quit");
+ BUTTON_IMAGE(CUT, "gtk-cut");
+ BUTTON_IMAGE(COPY, "gtk-copy");
+ BUTTON_IMAGE(PASTE, "gtk-paste");
+ BUTTON_IMAGE(DELETE, "gtk-delete");
+ BUTTON_IMAGE(SELECTALL, "gtk-select-all");
+ BUTTON_IMAGE(FIND, NSGTK_STOCK_FIND);
+ BUTTON_IMAGE(PREFERENCES, "gtk-preferences");
+ BUTTON_IMAGE(ZOOMPLUS, "gtk-zoom-in");
+ BUTTON_IMAGE(ZOOMMINUS, "gtk-zoom-out");
+ BUTTON_IMAGE(ZOOMNORMAL, "gtk-zoom-100");
+ BUTTON_IMAGE(FULLSCREEN, "gtk-fullscreen");
+ BUTTON_IMAGE(VIEWSOURCE, "gtk-index");
+ BUTTON_IMAGE(CONTENTS, "gtk-help");
+ BUTTON_IMAGE(ABOUT, "gtk-about");
#undef BUTTON_IMAGE
case HISTORY_BUTTON:
@@ -411,7 +411,8 @@ void nsgtk_theme_implement(struct nsgtk_scaffolding *g)
gtk_widget_show_all(GTK_WIDGET(button->popup));
}
#endif
- if ((button->location != -1) && (button->button != NULL) &&
+ if ((button->location != -1) &&
+ (button->button != NULL) &&
(theme[IMAGE_SET_BUTTONS] != NULL)) {
gtk_tool_button_set_icon_widget(
GTK_TOOL_BUTTON(button->button),
@@ -2017,7 +2018,7 @@ static gboolean websearch_entry_activate_cb(GtkWidget *widget, gpointer data)
* \return TRUE
*/
static gboolean
-websearch_entry_button_press(GtkWidget *widget,
+websearch_entry_button_press_cb(GtkWidget *widget,
GdkEventFocus *f,
gpointer data)
{
@@ -2174,7 +2175,7 @@ toolbar_connect_signal(struct nsgtk_toolbar *tb, nsgtk_toolbar_button itemid)
tb);
g_signal_connect(GTK_WIDGET(entry),
"button-press-event",
- G_CALLBACK(websearch_entry_button_press),
+ G_CALLBACK(websearch_entry_button_press_cb),
tb);
break;
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/scaffolding.c | 127 +++++++++++++++++++++++++++----------------
frontends/gtk/toolbar.c | 73 +++++++++++++------------
2 files changed, 117 insertions(+), 83 deletions(-)
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 74a8043..13a2ed5 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -87,22 +87,16 @@ static gboolean nsgtk_on_##q##_activate_menu(GtkMenuItem *widget, gpointer data)
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;\
return nsgtk_on_##q##_activate(g);\
}\
-static gboolean nsgtk_on_##q##_activate_button(GtkButton *widget, gpointer data)\
-{\
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;\
- return nsgtk_on_##q##_activate(g);\
-}\
static gboolean nsgtk_on_##q##_activate(struct nsgtk_scaffolding *g)
-/** Macro to define a handler for menu events. */
-#define MENUHANDLER(q)\
-static gboolean nsgtk_on_##q##_activate_menu(GtkMenuItem *widget, gpointer data)
/** Macro to define a handler for button events. */
#define BUTTONHANDLER(q)\
static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
-
+/**
+ * menu entry context
+ */
struct nsgtk_menu {
GtkWidget *main; /* main menu entry */
GtkWidget *rclick; /* right click menu */
@@ -111,7 +105,9 @@ struct nsgtk_menu {
bool sensitivity; /* menu item is sensitive */
};
-/** Core scaffolding structure. */
+/**
+ * Core scaffolding structure.
+ */
struct nsgtk_scaffolding {
/** global linked list of scaffolding for gui interface adjustments */
struct nsgtk_scaffolding *next, *prev;
@@ -146,7 +142,9 @@ struct nsgtk_scaffolding {
struct nsgtk_menu menus[PLACEHOLDER_BUTTON];
};
-/** current scaffold for model dialogue use */
+/**
+ * current scaffold for model dialogue use
+ */
static struct nsgtk_scaffolding *scaf_current;
/** global list for interface changes */
@@ -336,8 +334,6 @@ static void scaffolding_update_context(struct nsgtk_scaffolding *g)
}
-
-
/**
* edit the sensitivity of focused widget
*
@@ -727,16 +723,19 @@ MULTIHANDLER(savepage)
if (!browser_window_has_content(nsgtk_get_browser_window(g->top_level)))
return FALSE;
- GtkWidget *fc = gtk_file_chooser_dialog_new(
+ GtkWidget *fc;
+ DIR *d;
+ char *path;
+ nserror res;
+ GtkFileFilter *filter;
+
+ fc = gtk_file_chooser_dialog_new(
messages_get("gtkcompleteSave"), g->window,
GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER,
NSGTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NSGTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
- DIR *d;
- char *path;
- nserror res;
- GtkFileFilter *filter = gtk_file_filter_new();
+ filter = gtk_file_filter_new();
gtk_file_filter_set_name(filter, "Directories");
gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_FILENAME,
nsgtk_filter_directory, NULL, NULL);
@@ -1023,7 +1022,9 @@ MULTIHANDLER(quit)
return TRUE;
}
-MENUHANDLER(savelink)
+
+static gboolean
+nsgtk_on_savelink_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *) data;
struct gui_window *gui = g->top_level;
@@ -1050,7 +1051,8 @@ MENUHANDLER(savelink)
/**
* Handler for opening new window from a link. attached to the popup menu.
*/
-MENUHANDLER(link_openwin)
+static gboolean
+nsgtk_on_link_openwin_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *) data;
struct gui_window *gui = g->top_level;
@@ -1072,7 +1074,8 @@ MENUHANDLER(link_openwin)
/**
* Handler for opening new tab from a link. attached to the popup menu.
*/
-MENUHANDLER(link_opentab)
+static gboolean
+nsgtk_on_link_opentab_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *) data;
struct gui_window *gui = g->top_level;
@@ -1100,7 +1103,8 @@ MENUHANDLER(link_opentab)
/**
* Handler for bookmarking a link. attached to the popup menu.
*/
-MENUHANDLER(link_bookmark)
+static gboolean
+nsgtk_on_link_bookmark_activate_menu(GtkMenuItem *widget, gpointer data)
{
if (current_menu_features.link == NULL)
return FALSE;
@@ -1113,7 +1117,8 @@ MENUHANDLER(link_bookmark)
/**
* Handler for copying a link. attached to the popup menu.
*/
-MENUHANDLER(link_copy)
+static gboolean
+nsgtk_on_link_copy_activate_menu(GtkMenuItem *widget, gpointer data)
{
GtkClipboard *clipboard;
@@ -1177,7 +1182,9 @@ MULTIHANDLER(delete)
return TRUE;
}
-MENUHANDLER(customize)
+
+static gboolean
+nsgtk_on_customize_activate_menu(GtkMenuItem *widget, gpointer data)
{
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
nsgtk_toolbar_customization_init(g);
@@ -1272,7 +1279,9 @@ MULTIHANDLER(viewsource)
return TRUE;
}
-MENUHANDLER(menubar)
+
+static gboolean
+nsgtk_on_menubar_activate_menu(GtkMenuItem *widget, gpointer data)
{
GtkWidget *w;
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
@@ -1318,7 +1327,9 @@ MENUHANDLER(menubar)
return TRUE;
}
-MENUHANDLER(toolbar)
+
+static gboolean
+nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data)
{
GtkWidget *w;
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
@@ -1751,6 +1762,7 @@ static void nsgtk_menu_connect_signals(struct nsgtk_scaffolding *g)
}
+
/**
* Create and connect handlers to popup menu.
*
@@ -1769,20 +1781,30 @@ nsgtk_new_scaffolding_popup(struct nsgtk_scaffolding *g, GtkAccelGroup *group)
return NULL;
}
- g_signal_connect(nmenu->popup_menu, "hide",
- G_CALLBACK(nsgtk_window_popup_menu_hidden), g);
+ g_signal_connect(nmenu->popup_menu,
+ "hide",
+ G_CALLBACK(nsgtk_window_popup_menu_hidden),
+ g);
- g_signal_connect(nmenu->cut_menuitem, "activate",
- G_CALLBACK(nsgtk_on_cut_activate_menu), g);
+ g_signal_connect(nmenu->cut_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_cut_activate_menu),
+ g);
- g_signal_connect(nmenu->copy_menuitem, "activate",
- G_CALLBACK(nsgtk_on_copy_activate_menu), g);
+ g_signal_connect(nmenu->copy_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_copy_activate_menu),
+ g);
- g_signal_connect(nmenu->paste_menuitem, "activate",
- G_CALLBACK(nsgtk_on_paste_activate_menu), g);
+ g_signal_connect(nmenu->paste_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_paste_activate_menu),
+ g);
- g_signal_connect(nmenu->customize_menuitem, "activate",
- G_CALLBACK(nsgtk_on_customize_activate_menu), g);
+ g_signal_connect(nmenu->customize_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_customize_activate_menu),
+ g);
/* set initial popup menu visibility */
popup_menu_hide(nmenu, true, false, false, true);
@@ -1798,7 +1820,8 @@ nsgtk_new_scaffolding_popup(struct nsgtk_scaffolding *g, GtkAccelGroup *group)
* \return true on success or false on error.
*/
static struct nsgtk_link_menu *
-nsgtk_new_scaffolding_link_popup(struct nsgtk_scaffolding *g, GtkAccelGroup *group)
+nsgtk_new_scaffolding_link_popup(struct nsgtk_scaffolding *g,
+ GtkAccelGroup *group)
{
struct nsgtk_link_menu *nmenu;
@@ -1808,20 +1831,30 @@ nsgtk_new_scaffolding_link_popup(struct nsgtk_scaffolding *g, GtkAccelGroup *gro
return NULL;
}
- g_signal_connect(nmenu->save_menuitem, "activate",
- G_CALLBACK(nsgtk_on_savelink_activate_menu), g);
+ g_signal_connect(nmenu->save_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_savelink_activate_menu),
+ g);
- g_signal_connect(nmenu->opentab_menuitem, "activate",
- G_CALLBACK(nsgtk_on_link_opentab_activate_menu), g);
+ g_signal_connect(nmenu->opentab_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_link_opentab_activate_menu),
+ g);
- g_signal_connect(nmenu->openwin_menuitem, "activate",
- G_CALLBACK(nsgtk_on_link_openwin_activate_menu), g);
+ g_signal_connect(nmenu->openwin_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_link_openwin_activate_menu),
+ g);
- g_signal_connect(nmenu->bookmark_menuitem, "activate",
- G_CALLBACK(nsgtk_on_link_bookmark_activate_menu), g);
+ g_signal_connect(nmenu->bookmark_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_link_bookmark_activate_menu),
+ g);
- g_signal_connect(nmenu->copy_menuitem, "activate",
- G_CALLBACK(nsgtk_on_link_copy_activate_menu), g);
+ g_signal_connect(nmenu->copy_menuitem,
+ "activate",
+ G_CALLBACK(nsgtk_on_link_copy_activate_menu),
+ g);
return nmenu;
}
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index bf7f1ef..b1cd51c 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -65,16 +65,16 @@
*/
struct nsgtk_toolbar_item {
GtkToolItem *button;
- int location; /* in toolbar */
- bool sensitivity;
+ int location; /* in toolbar */
+ bool sensitivity;
/**
* button clicked handler
*/
gboolean (*bhandler)(GtkWidget *widget, gpointer data);
- void *dataplus; /* customization -> toolbar */
- void *dataminus; /* customization -> store */
+ void *dataplus; /* customization -> toolbar */
+ void *dataminus; /* customization -> store */
};
@@ -225,39 +225,39 @@ nsgtk_theme_image_default(nsgtk_toolbar_button tbbutton,
switch(tbbutton) {
-#define BUTTON_IMAGE(p, q) \
+#define BUTTON_IMAGE(p, q) \
case p##_BUTTON: \
image = GTK_IMAGE(nsgtk_image_new_from_stock(q, iconsize)); \
break
- BUTTON_IMAGE(BACK, NSGTK_STOCK_GO_BACK);
- BUTTON_IMAGE(FORWARD, NSGTK_STOCK_GO_FORWARD);
- BUTTON_IMAGE(STOP, NSGTK_STOCK_STOP);
- BUTTON_IMAGE(RELOAD, NSGTK_STOCK_REFRESH);
- BUTTON_IMAGE(HOME, NSGTK_STOCK_HOME);
- BUTTON_IMAGE(NEWWINDOW, "gtk-new");
- BUTTON_IMAGE(NEWTAB, "gtk-new");
- BUTTON_IMAGE(OPENFILE, NSGTK_STOCK_OPEN);
- BUTTON_IMAGE(CLOSETAB, NSGTK_STOCK_CLOSE);
- BUTTON_IMAGE(CLOSEWINDOW, NSGTK_STOCK_CLOSE);
- BUTTON_IMAGE(SAVEPAGE, NSGTK_STOCK_SAVE_AS);
- BUTTON_IMAGE(PRINTPREVIEW, "gtk-print-preview");
- BUTTON_IMAGE(PRINT, "gtk-print");
- BUTTON_IMAGE(QUIT, "gtk-quit");
- BUTTON_IMAGE(CUT, "gtk-cut");
- BUTTON_IMAGE(COPY, "gtk-copy");
- BUTTON_IMAGE(PASTE, "gtk-paste");
- BUTTON_IMAGE(DELETE, "gtk-delete");
- BUTTON_IMAGE(SELECTALL, "gtk-select-all");
- BUTTON_IMAGE(FIND, NSGTK_STOCK_FIND);
- BUTTON_IMAGE(PREFERENCES, "gtk-preferences");
- BUTTON_IMAGE(ZOOMPLUS, "gtk-zoom-in");
- BUTTON_IMAGE(ZOOMMINUS, "gtk-zoom-out");
- BUTTON_IMAGE(ZOOMNORMAL, "gtk-zoom-100");
- BUTTON_IMAGE(FULLSCREEN, "gtk-fullscreen");
- BUTTON_IMAGE(VIEWSOURCE, "gtk-index");
- BUTTON_IMAGE(CONTENTS, "gtk-help");
- BUTTON_IMAGE(ABOUT, "gtk-about");
+ BUTTON_IMAGE(BACK, NSGTK_STOCK_GO_BACK);
+ BUTTON_IMAGE(FORWARD, NSGTK_STOCK_GO_FORWARD);
+ BUTTON_IMAGE(STOP, NSGTK_STOCK_STOP);
+ BUTTON_IMAGE(RELOAD, NSGTK_STOCK_REFRESH);
+ BUTTON_IMAGE(HOME, NSGTK_STOCK_HOME);
+ BUTTON_IMAGE(NEWWINDOW, "gtk-new");
+ BUTTON_IMAGE(NEWTAB, "gtk-new");
+ BUTTON_IMAGE(OPENFILE, NSGTK_STOCK_OPEN);
+ BUTTON_IMAGE(CLOSETAB, NSGTK_STOCK_CLOSE);
+ BUTTON_IMAGE(CLOSEWINDOW, NSGTK_STOCK_CLOSE);
+ BUTTON_IMAGE(SAVEPAGE, NSGTK_STOCK_SAVE_AS);
+ BUTTON_IMAGE(PRINTPREVIEW, "gtk-print-preview");
+ BUTTON_IMAGE(PRINT, "gtk-print");
+ BUTTON_IMAGE(QUIT, "gtk-quit");
+ BUTTON_IMAGE(CUT, "gtk-cut");
+ BUTTON_IMAGE(COPY, "gtk-copy");
+ BUTTON_IMAGE(PASTE, "gtk-paste");
+ BUTTON_IMAGE(DELETE, "gtk-delete");
+ BUTTON_IMAGE(SELECTALL, "gtk-select-all");
+ BUTTON_IMAGE(FIND, NSGTK_STOCK_FIND);
+ BUTTON_IMAGE(PREFERENCES, "gtk-preferences");
+ BUTTON_IMAGE(ZOOMPLUS, "gtk-zoom-in");
+ BUTTON_IMAGE(ZOOMMINUS, "gtk-zoom-out");
+ BUTTON_IMAGE(ZOOMNORMAL, "gtk-zoom-100");
+ BUTTON_IMAGE(FULLSCREEN, "gtk-fullscreen");
+ BUTTON_IMAGE(VIEWSOURCE, "gtk-index");
+ BUTTON_IMAGE(CONTENTS, "gtk-help");
+ BUTTON_IMAGE(ABOUT, "gtk-about");
#undef BUTTON_IMAGE
case HISTORY_BUTTON:
@@ -411,7 +411,8 @@ void nsgtk_theme_implement(struct nsgtk_scaffolding *g)
gtk_widget_show_all(GTK_WIDGET(button->popup));
}
#endif
- if ((button->location != -1) && (button->button != NULL) &&
+ if ((button->location != -1) &&
+ (button->button != NULL) &&
(theme[IMAGE_SET_BUTTONS] != NULL)) {
gtk_tool_button_set_icon_widget(
GTK_TOOL_BUTTON(button->button),
@@ -2017,7 +2018,7 @@ static gboolean websearch_entry_activate_cb(GtkWidget *widget, gpointer data)
* \return TRUE
*/
static gboolean
-websearch_entry_button_press(GtkWidget *widget,
+websearch_entry_button_press_cb(GtkWidget *widget,
GdkEventFocus *f,
gpointer data)
{
@@ -2174,7 +2175,7 @@ toolbar_connect_signal(struct nsgtk_toolbar *tb, nsgtk_toolbar_button itemid)
tb);
g_signal_connect(GTK_WIDGET(entry),
"button-press-event",
- G_CALLBACK(websearch_entry_button_press),
+ G_CALLBACK(websearch_entry_button_press_cb),
tb);
break;
--
NetSurf Browser
4 years, 3 months
netsurf: branch vince/gtk-tab-restyle updated. release/3.9-180-gf03a26d
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/f03a26d67bb9fee190a20...
...commit http://git.netsurf-browser.org/netsurf.git/commit/f03a26d67bb9fee190a20c2...
...tree http://git.netsurf-browser.org/netsurf.git/tree/f03a26d67bb9fee190a20c229...
The branch, vince/gtk-tab-restyle has been updated
via f03a26d67bb9fee190a20c229849b99df5032285 (commit)
from 3d62cf2ecb00e6f881d0945394eb1b350bae6a28 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=f03a26d67bb9fee190a...
commit f03a26d67bb9fee190a20c229849b99df5032285
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
make menu sensitivity work
what remains is interfaces to make the toolbar appropriately sensative
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 08dabc3..74a8043 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -104,10 +104,11 @@ static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
struct nsgtk_menu {
- GtkWidget *main; /* main menu entry */
- GtkWidget *rclick; /* right click menu */
- GtkWidget *popup; /* popup menu entry */
- void *mhandler; /* menu item handler */
+ GtkWidget *main; /* main menu entry */
+ GtkWidget *rclick; /* right click menu */
+ GtkWidget *popup; /* popup menu entry */
+ void *mhandler; /* menu item handler */
+ bool sensitivity; /* menu item is sensitive */
};
/** Core scaffolding structure. */
@@ -320,12 +321,12 @@ scaffolding_window_delete_event(GtkWidget *widget,
static void scaffolding_update_context(struct nsgtk_scaffolding *g)
{
struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-#if 0
- g->buttons[BACK_BUTTON]->sensitivity =
- browser_window_history_back_available(bw);
- g->buttons[FORWARD_BUTTON]->sensitivity =
- browser_window_history_forward_available(bw);
-#endif
+
+ g->menus[BACK_BUTTON].sensitivity =
+ browser_window_history_back_available(bw);
+ g->menus[FORWARD_BUTTON].sensitivity =
+ browser_window_history_forward_available(bw);
+
nsgtk_scaffolding_set_sensitivity(g);
/* update the url bar, particularly necessary when tabbing */
@@ -340,61 +341,56 @@ static void scaffolding_update_context(struct nsgtk_scaffolding *g)
/**
* edit the sensitivity of focused widget
*
+ * \todo this needs to update toolbar sensitivity
+ *
* \param g The scaffolding context.
*/
static guint
-nsgtk_scaffolding_update_edit_actions_sensitivity(
- struct nsgtk_scaffolding *g)
+nsgtk_scaffolding_update_edit_actions_sensitivity(struct nsgtk_scaffolding *g)
{
-#if 0
GtkWidget *widget = gtk_window_get_focus(g->window);
- gboolean has_selection;
if (GTK_IS_EDITABLE(widget)) {
+ gboolean has_selection;
has_selection = gtk_editable_get_selection_bounds(
- GTK_EDITABLE (widget), NULL, NULL);
-
- g->buttons[COPY_BUTTON]->sensitivity = has_selection;
- g->buttons[CUT_BUTTON]->sensitivity = has_selection;
- g->buttons[PASTE_BUTTON]->sensitivity = true;
+ GTK_EDITABLE(widget), NULL, NULL);
+ g->menus[COPY_BUTTON].sensitivity = has_selection;
+ g->menus[CUT_BUTTON].sensitivity = has_selection;
+ g->menus[PASTE_BUTTON].sensitivity = true;
} else {
struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
+ nsgtk_get_browser_window(g->top_level);
browser_editor_flags edit_f =
- browser_window_get_editor_flags(bw);
+ browser_window_get_editor_flags(bw);
- g->buttons[COPY_BUTTON]->sensitivity =
- edit_f & BW_EDITOR_CAN_COPY;
- g->buttons[CUT_BUTTON]->sensitivity =
- edit_f & BW_EDITOR_CAN_CUT;
- g->buttons[PASTE_BUTTON]->sensitivity =
- edit_f & BW_EDITOR_CAN_PASTE;
+ g->menus[COPY_BUTTON].sensitivity =
+ edit_f & BW_EDITOR_CAN_COPY;
+ g->menus[CUT_BUTTON].sensitivity =
+ edit_f & BW_EDITOR_CAN_CUT;
+ g->menus[PASTE_BUTTON].sensitivity =
+ edit_f & BW_EDITOR_CAN_PASTE;
}
nsgtk_scaffolding_set_sensitivity(g);
- return ((g->buttons[COPY_BUTTON]->sensitivity) |
- (g->buttons[CUT_BUTTON]->sensitivity) |
- (g->buttons[PASTE_BUTTON]->sensitivity));
-#else
- return 0;
-#endif
+ return ((g->menus[COPY_BUTTON].sensitivity) |
+ (g->menus[CUT_BUTTON].sensitivity) |
+ (g->menus[PASTE_BUTTON].sensitivity));
}
/**
* make edit actions sensitive
*
+ * \todo toolbar sensitivity
+ *
* \param g The scaffolding context.
*/
static void
-nsgtk_scaffolding_enable_edit_actions_sensitivity(
- struct nsgtk_scaffolding *g)
+nsgtk_scaffolding_enable_edit_actions_sensitivity(struct nsgtk_scaffolding *g)
{
-#if 0
- g->buttons[PASTE_BUTTON]->sensitivity = true;
- g->buttons[COPY_BUTTON]->sensitivity = true;
- g->buttons[CUT_BUTTON]->sensitivity = true;
-#endif
+ g->menus[PASTE_BUTTON].sensitivity = true;
+ g->menus[COPY_BUTTON].sensitivity = true;
+ g->menus[CUT_BUTTON].sensitivity = true;
nsgtk_scaffolding_set_sensitivity(g);
popup_menu_show(g->menu_popup, false, false, true, false);
@@ -448,30 +444,6 @@ static gboolean nsgtk_window_popup_menu_hidden(GtkWidget *widget,
return TRUE;
}
-/* exported interface documented in gtk/scaffolding.h */
-gboolean nsgtk_window_url_activate_event(GtkWidget *widget, gpointer data)
-{
-#if 0
- struct nsgtk_scaffolding *g = data;
- nserror ret;
- nsurl *url;
-
- ret = search_web_omni(gtk_entry_get_text(GTK_ENTRY(g->url_bar)),
- SEARCH_WEB_OMNI_NONE,
- &url);
- if (ret == NSERROR_OK) {
- ret = browser_window_navigate(nsgtk_get_browser_window(g->top_level),
- url, NULL, BW_NAVIGATE_HISTORY,
- NULL, NULL, NULL);
- nsurl_unref(url);
- }
- if (ret != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(ret), 0);
- }
-#endif
- return TRUE;
-}
-
/**
* update handler for URL entry widget
@@ -522,6 +494,9 @@ nsgtk_window_tool_bar_clicked(GtkToolbar *toolbar,
/**
* Update the menus when the number of tabs changes.
*
+ * \todo toolbar sensitivity
+ * \todo next/previous tab ought to only be visible if there is such a tab
+ *
* \param notebook The notebook all the tabs are in
* \param page The newly added page container widget
* \param page_num The index of the newly added page
@@ -535,14 +510,18 @@ nsgtk_window_tabs_add(GtkNotebook *notebook,
{
gboolean visible = gtk_notebook_get_show_tabs(g->notebook);
g_object_set(g->menu_bar->view_submenu->tabs_menuitem,
- "visible", visible, NULL);
+ "visible",
+ visible,
+ NULL);
g_object_set(g->menu_popup->view_submenu->tabs_menuitem,
- "visible", visible, NULL);
-#if 0
- g->buttons[NEXTTAB_BUTTON]->sensitivity = visible;
- g->buttons[PREVTAB_BUTTON]->sensitivity = visible;
- g->buttons[CLOSETAB_BUTTON]->sensitivity = visible;
-#endif
+ "visible",
+ visible,
+ NULL);
+
+ g->menus[NEXTTAB_BUTTON].sensitivity = visible;
+ g->menus[PREVTAB_BUTTON].sensitivity = visible;
+ g->menus[CLOSETAB_BUTTON].sensitivity = visible;
+
nsgtk_scaffolding_set_sensitivity(g);
}
@@ -550,6 +529,8 @@ nsgtk_window_tabs_add(GtkNotebook *notebook,
/**
* Update the menus when the number of tabs changes.
*
+ * \todo toolbar sensitivity
+ *
* \param notebook The notebook all the tabs are in
* \param page The page container widget being removed
* \param page_num The index of the removed page
@@ -578,11 +559,11 @@ nsgtk_window_tabs_remove(GtkNotebook *notebook,
gboolean visible = gtk_notebook_get_show_tabs(gs->notebook);
g_object_set(gs->menu_bar->view_submenu->tabs_menuitem, "visible", visible, NULL);
g_object_set(gs->menu_popup->view_submenu->tabs_menuitem, "visible", visible, NULL);
-#if 0
- gs->buttons[NEXTTAB_BUTTON]->sensitivity = visible;
- gs->buttons[PREVTAB_BUTTON]->sensitivity = visible;
- gs->buttons[CLOSETAB_BUTTON]->sensitivity = visible;
-#endif
+
+ gs->menus[NEXTTAB_BUTTON].sensitivity = visible;
+ gs->menus[PREVTAB_BUTTON].sensitivity = visible;
+ gs->menus[CLOSETAB_BUTTON].sensitivity = visible;
+
nsgtk_scaffolding_set_sensitivity(gs);
}
@@ -1738,7 +1719,7 @@ BUTTONHANDLER(history)
/**
* attach gtk signal handlers for menus
*/
-static void nsgtk_attach_menu_handlers(struct nsgtk_scaffolding *g)
+static void nsgtk_menu_connect_signals(struct nsgtk_scaffolding *g)
{
int idx; /* item index */
for (idx = BACK_BUTTON; idx < PLACEHOLDER_BUTTON; idx++) {
@@ -1859,7 +1840,12 @@ struct nsgtk_scaffolding *nsgtk_current_scaffolding(void)
*/
static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
{
-#define ITEM_MAIN(p, q, r)\
+#define TOOLBAR_ITEM(identifier, name, snstvty, clicked) \
+ g->menus[identifier].sensitivity = snstvty;
+#include "gtk/toolbar_items.h"
+#undef TOOLBAR_ITEM
+
+#define ITEM_MAIN(p, q, r) \
g->menus[p##_BUTTON].main = g->menu_bar->q->r##_menuitem;\
g->menus[p##_BUTTON].rclick = g->menu_popup->q->r##_menuitem;\
g->menus[p##_BUTTON].mhandler = nsgtk_on_##r##_activate_menu;
@@ -1869,12 +1855,12 @@ static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
g->menu_bar->q->r##_submenu->s##_menuitem;\
g->menus[p##_BUTTON].rclick =\
g->menu_popup->q->r##_submenu->s##_menuitem;\
- g->menus[p##_BUTTON].mhandler =\
- nsgtk_on_##s##_activate_menu;
+ g->menus[p##_BUTTON].mhandler = nsgtk_on_##s##_activate_menu;
-#define ITEM_POP(p, q) \
+#define ITEM_POP(p, q) \
g->menus[p##_BUTTON].popup = g->menu_popup->q##_menuitem
+
ITEM_MAIN(NEWWINDOW, file_submenu, newwindow);
ITEM_MAIN(NEWTAB, file_submenu, newtab);
ITEM_MAIN(OPENFILE, file_submenu, openfile);
@@ -1939,31 +1925,30 @@ static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
return NSERROR_OK;
}
-#if 0
-static void nsgtk_scaffolding_initial_sensitivity(struct nsgtk_scaffolding *g)
+
+static void nsgtk_menu_set_sensitivity(struct nsgtk_scaffolding *g)
{
+
for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- if (g->buttons[i]->main != NULL)
+ if (g->menus[i].main != NULL) {
gtk_widget_set_sensitive(GTK_WIDGET(
- g->buttons[i]->main),
- g->buttons[i]->sensitivity);
- if (g->buttons[i]->rclick != NULL)
- gtk_widget_set_sensitive(GTK_WIDGET(
- g->buttons[i]->rclick),
- g->buttons[i]->sensitivity);
- if ((g->buttons[i]->location != -1) &&
- (g->buttons[i]->button != NULL))
+ g->menus[i].main),
+ g->menus[i].sensitivity);
+ }
+ if (g->menus[i].rclick != NULL) {
gtk_widget_set_sensitive(GTK_WIDGET(
- g->buttons[i]->button),
- g->buttons[i]->sensitivity);
- if (g->buttons[i]->popup != NULL)
+ g->menus[i].rclick),
+ g->menus[i].sensitivity);
+ }
+ if (g->menus[i].popup != NULL) {
gtk_widget_set_sensitive(GTK_WIDGET(
- g->buttons[i]->popup),
- g->buttons[i]->sensitivity);
+ g->menus[i].popup),
+ g->menus[i].sensitivity);
+ }
}
gtk_widget_set_sensitive(GTK_WIDGET(g->menu_bar->view_submenu->images_menuitem), FALSE);
}
-#endif
+
/**
* update search toolbar size and style
*/
@@ -2363,22 +2348,18 @@ void nsgtk_scaffolding_set_top_level(struct gui_window *gw)
/* exported interface documented in scaffolding.h */
void nsgtk_scaffolding_set_sensitivity(struct nsgtk_scaffolding *g)
{
-#if 0
int i;
-#define SENSITIVITY(q)\
- i = q##_BUTTON;\
- if (g->buttons[i]->main != NULL)\
- gtk_widget_set_sensitive(GTK_WIDGET(\
- g->buttons[i]->main),\
- g->buttons[i]->sensitivity);\
- if (g->buttons[i]->rclick != NULL)\
- gtk_widget_set_sensitive(GTK_WIDGET(\
- g->buttons[i]->rclick),\
- g->buttons[i]->sensitivity);\
- if (g->buttons[i]->popup != NULL)\
- gtk_widget_set_sensitive(GTK_WIDGET(\
- g->buttons[i]->popup),\
- g->buttons[i]->sensitivity);
+#define SENSITIVITY(q) \
+ i = q##_BUTTON; \
+ if (g->menus[i].main != NULL) \
+ gtk_widget_set_sensitive(GTK_WIDGET(g->menus[i].main), \
+ g->menus[i].sensitivity); \
+ if (g->menus[i].rclick != NULL) \
+ gtk_widget_set_sensitive(GTK_WIDGET(g->menus[i].rclick), \
+ g->menus[i].sensitivity); \
+ if (g->menus[i].popup != NULL) \
+ gtk_widget_set_sensitive(GTK_WIDGET(g->menus[i].popup), \
+ g->menus[i].sensitivity);
SENSITIVITY(STOP)
SENSITIVITY(RELOAD)
@@ -2391,7 +2372,7 @@ void nsgtk_scaffolding_set_sensitivity(struct nsgtk_scaffolding *g)
SENSITIVITY(PREVTAB)
SENSITIVITY(CLOSETAB)
#undef SENSITIVITY
-#endif
+
}
@@ -2415,25 +2396,25 @@ void nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g,
gtkmenu = g->menu_popup->popup_menu;
nsgtk_scaffolding_update_edit_actions_sensitivity(g);
-#if 0
- if (!(g->buttons[COPY_BUTTON]->sensitivity)) {
+
+ if (!(g->menus[COPY_BUTTON].sensitivity)) {
gtk_widget_hide(GTK_WIDGET(g->menu_popup->copy_menuitem));
} else {
gtk_widget_show(GTK_WIDGET(g->menu_popup->copy_menuitem));
}
- if (!(g->buttons[CUT_BUTTON]->sensitivity)) {
+ if (!(g->menus[CUT_BUTTON].sensitivity)) {
gtk_widget_hide(GTK_WIDGET(g->menu_popup->cut_menuitem));
} else {
gtk_widget_show(GTK_WIDGET(g->menu_popup->cut_menuitem));
}
- if (!(g->buttons[PASTE_BUTTON]->sensitivity)) {
+ if (!(g->menus[PASTE_BUTTON].sensitivity)) {
gtk_widget_hide(GTK_WIDGET(g->menu_popup->paste_menuitem));
} else {
gtk_widget_show(GTK_WIDGET(g->menu_popup->paste_menuitem));
}
-#endif
+
/* hide customise */
popup_menu_hide(g->menu_popup, false, false, false, true);
}
@@ -2441,41 +2422,6 @@ void nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g,
nsgtk_menu_popup_at_pointer(gtkmenu, NULL);
}
-/**
- * reallocate width for history button, reallocate buttons right of history;
- * memorise base of history button / toolbar
- */
-void nsgtk_scaffolding_toolbar_size_allocate(GtkWidget *widget,
- GtkAllocation *alloc, gpointer data)
-{
- #if 0
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- int i = nsgtk_toolbar_get_id_from_widget(widget, g);
- if (i == -1)
- return;
- if ((g->toolbarmem == alloc->x) ||
- (g->buttons[i]->location < g->buttons[HISTORY_BUTTON]->location))
- /* no reallocation after first adjustment, no reallocation for buttons
- * left of history button */
- return;
- if (widget == GTK_WIDGET(g->buttons[HISTORY_BUTTON]->button)) {
- if (alloc->width == 20)
- return;
-
- g->toolbarbase = alloc->y + alloc->height;
- g->historybase = alloc->x + 20;
- if (g->offset == 0)
- g->offset = alloc->width - 20;
- alloc->width = 20;
- } else if (g->buttons[i]->location <= g->buttons[URL_BAR_ITEM]->location) {
- alloc->x -= g->offset;
- if (i == URL_BAR_ITEM)
- alloc->width += g->offset;
- }
- g->toolbarmem = alloc->x;
- gtk_widget_size_allocate(widget, alloc);
- #endif
-}
/* exported interface documented in gtk/scaffolding.h */
@@ -2590,10 +2536,8 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
/* set up the menu signal handlers */
nsgtk_menu_initialise(gs);
- //nsgtk_toolbar_connect_all(gs);
- nsgtk_attach_menu_handlers(gs);
-
- //nsgtk_scaffolding_initial_sensitivity(gs);
+ nsgtk_menu_connect_signals(gs);
+ nsgtk_menu_set_sensitivity(gs);
gs->fullscreen = false;
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index 19f8681..261d2f0 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -153,10 +153,6 @@ void nsgtk_scaffolding_set_sensitivity(struct nsgtk_scaffolding *g);
*/
void nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g, gdouble x, gdouble y);
-void nsgtk_scaffolding_toolbar_size_allocate(GtkWidget *widget, GtkAllocation *alloc, gpointer data);
-
-gboolean nsgtk_window_url_activate_event(GtkWidget *, gpointer);
-
gboolean nsgtk_window_url_changed(GtkWidget *, GdkEventKey *, gpointer);
nserror nsgtk_scaffolding_new_tab(struct gui_window *gw);
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 6e3459f..bf7f1ef 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -1475,12 +1475,6 @@ void nsgtk_toolbar_connect_all(struct nsgtk_scaffolding *g)
q = nsgtk_toolbar_get_id_at_location(g, i);
if (q == -1)
continue;
- if (nsgtk_scaffolding_button(g, q)->button != NULL)
- g_signal_connect(
- nsgtk_scaffolding_button(g, q)->button,
- "size-allocate", G_CALLBACK(
- nsgtk_scaffolding_toolbar_size_allocate
- ), g);
}
}
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/scaffolding.c | 260 +++++++++++++++++--------------------------
frontends/gtk/scaffolding.h | 4 -
frontends/gtk/toolbar.c | 6 -
3 files changed, 102 insertions(+), 168 deletions(-)
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 08dabc3..74a8043 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -104,10 +104,11 @@ static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
struct nsgtk_menu {
- GtkWidget *main; /* main menu entry */
- GtkWidget *rclick; /* right click menu */
- GtkWidget *popup; /* popup menu entry */
- void *mhandler; /* menu item handler */
+ GtkWidget *main; /* main menu entry */
+ GtkWidget *rclick; /* right click menu */
+ GtkWidget *popup; /* popup menu entry */
+ void *mhandler; /* menu item handler */
+ bool sensitivity; /* menu item is sensitive */
};
/** Core scaffolding structure. */
@@ -320,12 +321,12 @@ scaffolding_window_delete_event(GtkWidget *widget,
static void scaffolding_update_context(struct nsgtk_scaffolding *g)
{
struct browser_window *bw = nsgtk_get_browser_window(g->top_level);
-#if 0
- g->buttons[BACK_BUTTON]->sensitivity =
- browser_window_history_back_available(bw);
- g->buttons[FORWARD_BUTTON]->sensitivity =
- browser_window_history_forward_available(bw);
-#endif
+
+ g->menus[BACK_BUTTON].sensitivity =
+ browser_window_history_back_available(bw);
+ g->menus[FORWARD_BUTTON].sensitivity =
+ browser_window_history_forward_available(bw);
+
nsgtk_scaffolding_set_sensitivity(g);
/* update the url bar, particularly necessary when tabbing */
@@ -340,61 +341,56 @@ static void scaffolding_update_context(struct nsgtk_scaffolding *g)
/**
* edit the sensitivity of focused widget
*
+ * \todo this needs to update toolbar sensitivity
+ *
* \param g The scaffolding context.
*/
static guint
-nsgtk_scaffolding_update_edit_actions_sensitivity(
- struct nsgtk_scaffolding *g)
+nsgtk_scaffolding_update_edit_actions_sensitivity(struct nsgtk_scaffolding *g)
{
-#if 0
GtkWidget *widget = gtk_window_get_focus(g->window);
- gboolean has_selection;
if (GTK_IS_EDITABLE(widget)) {
+ gboolean has_selection;
has_selection = gtk_editable_get_selection_bounds(
- GTK_EDITABLE (widget), NULL, NULL);
-
- g->buttons[COPY_BUTTON]->sensitivity = has_selection;
- g->buttons[CUT_BUTTON]->sensitivity = has_selection;
- g->buttons[PASTE_BUTTON]->sensitivity = true;
+ GTK_EDITABLE(widget), NULL, NULL);
+ g->menus[COPY_BUTTON].sensitivity = has_selection;
+ g->menus[CUT_BUTTON].sensitivity = has_selection;
+ g->menus[PASTE_BUTTON].sensitivity = true;
} else {
struct browser_window *bw =
- nsgtk_get_browser_window(g->top_level);
+ nsgtk_get_browser_window(g->top_level);
browser_editor_flags edit_f =
- browser_window_get_editor_flags(bw);
+ browser_window_get_editor_flags(bw);
- g->buttons[COPY_BUTTON]->sensitivity =
- edit_f & BW_EDITOR_CAN_COPY;
- g->buttons[CUT_BUTTON]->sensitivity =
- edit_f & BW_EDITOR_CAN_CUT;
- g->buttons[PASTE_BUTTON]->sensitivity =
- edit_f & BW_EDITOR_CAN_PASTE;
+ g->menus[COPY_BUTTON].sensitivity =
+ edit_f & BW_EDITOR_CAN_COPY;
+ g->menus[CUT_BUTTON].sensitivity =
+ edit_f & BW_EDITOR_CAN_CUT;
+ g->menus[PASTE_BUTTON].sensitivity =
+ edit_f & BW_EDITOR_CAN_PASTE;
}
nsgtk_scaffolding_set_sensitivity(g);
- return ((g->buttons[COPY_BUTTON]->sensitivity) |
- (g->buttons[CUT_BUTTON]->sensitivity) |
- (g->buttons[PASTE_BUTTON]->sensitivity));
-#else
- return 0;
-#endif
+ return ((g->menus[COPY_BUTTON].sensitivity) |
+ (g->menus[CUT_BUTTON].sensitivity) |
+ (g->menus[PASTE_BUTTON].sensitivity));
}
/**
* make edit actions sensitive
*
+ * \todo toolbar sensitivity
+ *
* \param g The scaffolding context.
*/
static void
-nsgtk_scaffolding_enable_edit_actions_sensitivity(
- struct nsgtk_scaffolding *g)
+nsgtk_scaffolding_enable_edit_actions_sensitivity(struct nsgtk_scaffolding *g)
{
-#if 0
- g->buttons[PASTE_BUTTON]->sensitivity = true;
- g->buttons[COPY_BUTTON]->sensitivity = true;
- g->buttons[CUT_BUTTON]->sensitivity = true;
-#endif
+ g->menus[PASTE_BUTTON].sensitivity = true;
+ g->menus[COPY_BUTTON].sensitivity = true;
+ g->menus[CUT_BUTTON].sensitivity = true;
nsgtk_scaffolding_set_sensitivity(g);
popup_menu_show(g->menu_popup, false, false, true, false);
@@ -448,30 +444,6 @@ static gboolean nsgtk_window_popup_menu_hidden(GtkWidget *widget,
return TRUE;
}
-/* exported interface documented in gtk/scaffolding.h */
-gboolean nsgtk_window_url_activate_event(GtkWidget *widget, gpointer data)
-{
-#if 0
- struct nsgtk_scaffolding *g = data;
- nserror ret;
- nsurl *url;
-
- ret = search_web_omni(gtk_entry_get_text(GTK_ENTRY(g->url_bar)),
- SEARCH_WEB_OMNI_NONE,
- &url);
- if (ret == NSERROR_OK) {
- ret = browser_window_navigate(nsgtk_get_browser_window(g->top_level),
- url, NULL, BW_NAVIGATE_HISTORY,
- NULL, NULL, NULL);
- nsurl_unref(url);
- }
- if (ret != NSERROR_OK) {
- nsgtk_warning(messages_get_errorcode(ret), 0);
- }
-#endif
- return TRUE;
-}
-
/**
* update handler for URL entry widget
@@ -522,6 +494,9 @@ nsgtk_window_tool_bar_clicked(GtkToolbar *toolbar,
/**
* Update the menus when the number of tabs changes.
*
+ * \todo toolbar sensitivity
+ * \todo next/previous tab ought to only be visible if there is such a tab
+ *
* \param notebook The notebook all the tabs are in
* \param page The newly added page container widget
* \param page_num The index of the newly added page
@@ -535,14 +510,18 @@ nsgtk_window_tabs_add(GtkNotebook *notebook,
{
gboolean visible = gtk_notebook_get_show_tabs(g->notebook);
g_object_set(g->menu_bar->view_submenu->tabs_menuitem,
- "visible", visible, NULL);
+ "visible",
+ visible,
+ NULL);
g_object_set(g->menu_popup->view_submenu->tabs_menuitem,
- "visible", visible, NULL);
-#if 0
- g->buttons[NEXTTAB_BUTTON]->sensitivity = visible;
- g->buttons[PREVTAB_BUTTON]->sensitivity = visible;
- g->buttons[CLOSETAB_BUTTON]->sensitivity = visible;
-#endif
+ "visible",
+ visible,
+ NULL);
+
+ g->menus[NEXTTAB_BUTTON].sensitivity = visible;
+ g->menus[PREVTAB_BUTTON].sensitivity = visible;
+ g->menus[CLOSETAB_BUTTON].sensitivity = visible;
+
nsgtk_scaffolding_set_sensitivity(g);
}
@@ -550,6 +529,8 @@ nsgtk_window_tabs_add(GtkNotebook *notebook,
/**
* Update the menus when the number of tabs changes.
*
+ * \todo toolbar sensitivity
+ *
* \param notebook The notebook all the tabs are in
* \param page The page container widget being removed
* \param page_num The index of the removed page
@@ -578,11 +559,11 @@ nsgtk_window_tabs_remove(GtkNotebook *notebook,
gboolean visible = gtk_notebook_get_show_tabs(gs->notebook);
g_object_set(gs->menu_bar->view_submenu->tabs_menuitem, "visible", visible, NULL);
g_object_set(gs->menu_popup->view_submenu->tabs_menuitem, "visible", visible, NULL);
-#if 0
- gs->buttons[NEXTTAB_BUTTON]->sensitivity = visible;
- gs->buttons[PREVTAB_BUTTON]->sensitivity = visible;
- gs->buttons[CLOSETAB_BUTTON]->sensitivity = visible;
-#endif
+
+ gs->menus[NEXTTAB_BUTTON].sensitivity = visible;
+ gs->menus[PREVTAB_BUTTON].sensitivity = visible;
+ gs->menus[CLOSETAB_BUTTON].sensitivity = visible;
+
nsgtk_scaffolding_set_sensitivity(gs);
}
@@ -1738,7 +1719,7 @@ BUTTONHANDLER(history)
/**
* attach gtk signal handlers for menus
*/
-static void nsgtk_attach_menu_handlers(struct nsgtk_scaffolding *g)
+static void nsgtk_menu_connect_signals(struct nsgtk_scaffolding *g)
{
int idx; /* item index */
for (idx = BACK_BUTTON; idx < PLACEHOLDER_BUTTON; idx++) {
@@ -1859,7 +1840,12 @@ struct nsgtk_scaffolding *nsgtk_current_scaffolding(void)
*/
static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
{
-#define ITEM_MAIN(p, q, r)\
+#define TOOLBAR_ITEM(identifier, name, snstvty, clicked) \
+ g->menus[identifier].sensitivity = snstvty;
+#include "gtk/toolbar_items.h"
+#undef TOOLBAR_ITEM
+
+#define ITEM_MAIN(p, q, r) \
g->menus[p##_BUTTON].main = g->menu_bar->q->r##_menuitem;\
g->menus[p##_BUTTON].rclick = g->menu_popup->q->r##_menuitem;\
g->menus[p##_BUTTON].mhandler = nsgtk_on_##r##_activate_menu;
@@ -1869,12 +1855,12 @@ static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
g->menu_bar->q->r##_submenu->s##_menuitem;\
g->menus[p##_BUTTON].rclick =\
g->menu_popup->q->r##_submenu->s##_menuitem;\
- g->menus[p##_BUTTON].mhandler =\
- nsgtk_on_##s##_activate_menu;
+ g->menus[p##_BUTTON].mhandler = nsgtk_on_##s##_activate_menu;
-#define ITEM_POP(p, q) \
+#define ITEM_POP(p, q) \
g->menus[p##_BUTTON].popup = g->menu_popup->q##_menuitem
+
ITEM_MAIN(NEWWINDOW, file_submenu, newwindow);
ITEM_MAIN(NEWTAB, file_submenu, newtab);
ITEM_MAIN(OPENFILE, file_submenu, openfile);
@@ -1939,31 +1925,30 @@ static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
return NSERROR_OK;
}
-#if 0
-static void nsgtk_scaffolding_initial_sensitivity(struct nsgtk_scaffolding *g)
+
+static void nsgtk_menu_set_sensitivity(struct nsgtk_scaffolding *g)
{
+
for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- if (g->buttons[i]->main != NULL)
+ if (g->menus[i].main != NULL) {
gtk_widget_set_sensitive(GTK_WIDGET(
- g->buttons[i]->main),
- g->buttons[i]->sensitivity);
- if (g->buttons[i]->rclick != NULL)
- gtk_widget_set_sensitive(GTK_WIDGET(
- g->buttons[i]->rclick),
- g->buttons[i]->sensitivity);
- if ((g->buttons[i]->location != -1) &&
- (g->buttons[i]->button != NULL))
+ g->menus[i].main),
+ g->menus[i].sensitivity);
+ }
+ if (g->menus[i].rclick != NULL) {
gtk_widget_set_sensitive(GTK_WIDGET(
- g->buttons[i]->button),
- g->buttons[i]->sensitivity);
- if (g->buttons[i]->popup != NULL)
+ g->menus[i].rclick),
+ g->menus[i].sensitivity);
+ }
+ if (g->menus[i].popup != NULL) {
gtk_widget_set_sensitive(GTK_WIDGET(
- g->buttons[i]->popup),
- g->buttons[i]->sensitivity);
+ g->menus[i].popup),
+ g->menus[i].sensitivity);
+ }
}
gtk_widget_set_sensitive(GTK_WIDGET(g->menu_bar->view_submenu->images_menuitem), FALSE);
}
-#endif
+
/**
* update search toolbar size and style
*/
@@ -2363,22 +2348,18 @@ void nsgtk_scaffolding_set_top_level(struct gui_window *gw)
/* exported interface documented in scaffolding.h */
void nsgtk_scaffolding_set_sensitivity(struct nsgtk_scaffolding *g)
{
-#if 0
int i;
-#define SENSITIVITY(q)\
- i = q##_BUTTON;\
- if (g->buttons[i]->main != NULL)\
- gtk_widget_set_sensitive(GTK_WIDGET(\
- g->buttons[i]->main),\
- g->buttons[i]->sensitivity);\
- if (g->buttons[i]->rclick != NULL)\
- gtk_widget_set_sensitive(GTK_WIDGET(\
- g->buttons[i]->rclick),\
- g->buttons[i]->sensitivity);\
- if (g->buttons[i]->popup != NULL)\
- gtk_widget_set_sensitive(GTK_WIDGET(\
- g->buttons[i]->popup),\
- g->buttons[i]->sensitivity);
+#define SENSITIVITY(q) \
+ i = q##_BUTTON; \
+ if (g->menus[i].main != NULL) \
+ gtk_widget_set_sensitive(GTK_WIDGET(g->menus[i].main), \
+ g->menus[i].sensitivity); \
+ if (g->menus[i].rclick != NULL) \
+ gtk_widget_set_sensitive(GTK_WIDGET(g->menus[i].rclick), \
+ g->menus[i].sensitivity); \
+ if (g->menus[i].popup != NULL) \
+ gtk_widget_set_sensitive(GTK_WIDGET(g->menus[i].popup), \
+ g->menus[i].sensitivity);
SENSITIVITY(STOP)
SENSITIVITY(RELOAD)
@@ -2391,7 +2372,7 @@ void nsgtk_scaffolding_set_sensitivity(struct nsgtk_scaffolding *g)
SENSITIVITY(PREVTAB)
SENSITIVITY(CLOSETAB)
#undef SENSITIVITY
-#endif
+
}
@@ -2415,25 +2396,25 @@ void nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g,
gtkmenu = g->menu_popup->popup_menu;
nsgtk_scaffolding_update_edit_actions_sensitivity(g);
-#if 0
- if (!(g->buttons[COPY_BUTTON]->sensitivity)) {
+
+ if (!(g->menus[COPY_BUTTON].sensitivity)) {
gtk_widget_hide(GTK_WIDGET(g->menu_popup->copy_menuitem));
} else {
gtk_widget_show(GTK_WIDGET(g->menu_popup->copy_menuitem));
}
- if (!(g->buttons[CUT_BUTTON]->sensitivity)) {
+ if (!(g->menus[CUT_BUTTON].sensitivity)) {
gtk_widget_hide(GTK_WIDGET(g->menu_popup->cut_menuitem));
} else {
gtk_widget_show(GTK_WIDGET(g->menu_popup->cut_menuitem));
}
- if (!(g->buttons[PASTE_BUTTON]->sensitivity)) {
+ if (!(g->menus[PASTE_BUTTON].sensitivity)) {
gtk_widget_hide(GTK_WIDGET(g->menu_popup->paste_menuitem));
} else {
gtk_widget_show(GTK_WIDGET(g->menu_popup->paste_menuitem));
}
-#endif
+
/* hide customise */
popup_menu_hide(g->menu_popup, false, false, false, true);
}
@@ -2441,41 +2422,6 @@ void nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g,
nsgtk_menu_popup_at_pointer(gtkmenu, NULL);
}
-/**
- * reallocate width for history button, reallocate buttons right of history;
- * memorise base of history button / toolbar
- */
-void nsgtk_scaffolding_toolbar_size_allocate(GtkWidget *widget,
- GtkAllocation *alloc, gpointer data)
-{
- #if 0
- struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
- int i = nsgtk_toolbar_get_id_from_widget(widget, g);
- if (i == -1)
- return;
- if ((g->toolbarmem == alloc->x) ||
- (g->buttons[i]->location < g->buttons[HISTORY_BUTTON]->location))
- /* no reallocation after first adjustment, no reallocation for buttons
- * left of history button */
- return;
- if (widget == GTK_WIDGET(g->buttons[HISTORY_BUTTON]->button)) {
- if (alloc->width == 20)
- return;
-
- g->toolbarbase = alloc->y + alloc->height;
- g->historybase = alloc->x + 20;
- if (g->offset == 0)
- g->offset = alloc->width - 20;
- alloc->width = 20;
- } else if (g->buttons[i]->location <= g->buttons[URL_BAR_ITEM]->location) {
- alloc->x -= g->offset;
- if (i == URL_BAR_ITEM)
- alloc->width += g->offset;
- }
- g->toolbarmem = alloc->x;
- gtk_widget_size_allocate(widget, alloc);
- #endif
-}
/* exported interface documented in gtk/scaffolding.h */
@@ -2590,10 +2536,8 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
/* set up the menu signal handlers */
nsgtk_menu_initialise(gs);
- //nsgtk_toolbar_connect_all(gs);
- nsgtk_attach_menu_handlers(gs);
-
- //nsgtk_scaffolding_initial_sensitivity(gs);
+ nsgtk_menu_connect_signals(gs);
+ nsgtk_menu_set_sensitivity(gs);
gs->fullscreen = false;
diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h
index 19f8681..261d2f0 100644
--- a/frontends/gtk/scaffolding.h
+++ b/frontends/gtk/scaffolding.h
@@ -153,10 +153,6 @@ void nsgtk_scaffolding_set_sensitivity(struct nsgtk_scaffolding *g);
*/
void nsgtk_scaffolding_context_menu(struct nsgtk_scaffolding *g, gdouble x, gdouble y);
-void nsgtk_scaffolding_toolbar_size_allocate(GtkWidget *widget, GtkAllocation *alloc, gpointer data);
-
-gboolean nsgtk_window_url_activate_event(GtkWidget *, gpointer);
-
gboolean nsgtk_window_url_changed(GtkWidget *, GdkEventKey *, gpointer);
nserror nsgtk_scaffolding_new_tab(struct gui_window *gw);
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 6e3459f..bf7f1ef 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -1475,12 +1475,6 @@ void nsgtk_toolbar_connect_all(struct nsgtk_scaffolding *g)
q = nsgtk_toolbar_get_id_at_location(g, i);
if (q == -1)
continue;
- if (nsgtk_scaffolding_button(g, q)->button != NULL)
- g_signal_connect(
- nsgtk_scaffolding_button(g, q)->button,
- "size-allocate", G_CALLBACK(
- nsgtk_scaffolding_toolbar_size_allocate
- ), g);
}
}
--
NetSurf Browser
4 years, 3 months
netsurf: branch vince/gtk-tab-restyle updated. release/3.9-179-g3d62cf2
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/3d62cf2ecb00e6f881d09...
...commit http://git.netsurf-browser.org/netsurf.git/commit/3d62cf2ecb00e6f881d0945...
...tree http://git.netsurf-browser.org/netsurf.git/tree/3d62cf2ecb00e6f881d094539...
The branch, vince/gtk-tab-restyle has been updated
via 3d62cf2ecb00e6f881d0945394eb1b350bae6a28 (commit)
from 3bb70069eb4f3f79b8bbb8688e1bf3892ba60190 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=3d62cf2ecb00e6f881d...
commit 3d62cf2ecb00e6f881d0945394eb1b350bae6a28
Author: Vincent Sanders <vince(a)kyllikki.org>
Commit: Vincent Sanders <vince(a)kyllikki.org>
make menus work again
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index b523645..08dabc3 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -104,9 +104,10 @@ static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
struct nsgtk_menu {
- GtkWidget *main; /* left click menu entry */
+ GtkWidget *main; /* main menu entry */
GtkWidget *rclick; /* right click menu */
GtkWidget *popup; /* popup menu entry */
+ void *mhandler; /* menu item handler */
};
/** Core scaffolding structure. */
@@ -1734,21 +1735,30 @@ BUTTONHANDLER(history)
#undef CHECKHANDLER
#undef BUTTONHANDLER
+/**
+ * attach gtk signal handlers for menus
+ */
static void nsgtk_attach_menu_handlers(struct nsgtk_scaffolding *g)
{
- #if 0
- for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- if (g->buttons[i]->main != NULL) {
- g_signal_connect(g->buttons[i]->main, "activate",
- G_CALLBACK(g->buttons[i]->mhandler), g);
+ int idx; /* item index */
+ for (idx = BACK_BUTTON; idx < PLACEHOLDER_BUTTON; idx++) {
+ if (g->menus[idx].main != NULL) {
+ g_signal_connect(g->menus[idx].main,
+ "activate",
+ G_CALLBACK(g->menus[idx].mhandler),
+ g);
}
- if (g->buttons[i]->rclick != NULL) {
- g_signal_connect(g->buttons[i]->rclick, "activate",
- G_CALLBACK(g->buttons[i]->mhandler), g);
+ if (g->menus[idx].rclick != NULL) {
+ g_signal_connect(g->menus[idx].rclick,
+ "activate",
+ G_CALLBACK(g->menus[idx].mhandler),
+ g);
}
- if (g->buttons[i]->popup != NULL) {
- g_signal_connect(g->buttons[i]->popup, "activate",
- G_CALLBACK(g->buttons[i]->mhandler), g);
+ if (g->menus[idx].popup != NULL) {
+ g_signal_connect(g->menus[idx].popup,
+ "activate",
+ G_CALLBACK(g->menus[idx].mhandler),
+ g);
}
}
#define CONNECT_CHECK(q)\
@@ -1757,7 +1767,7 @@ static void nsgtk_attach_menu_handlers(struct nsgtk_scaffolding *g)
CONNECT_CHECK(menubar);
CONNECT_CHECK(toolbar);
#undef CONNECT_CHECK
-#endif
+
}
/**
@@ -1843,33 +1853,27 @@ struct nsgtk_scaffolding *nsgtk_current_scaffolding(void)
}
return scaf_current;
}
-#if 0
+
/**
- * init the array g->buttons[]
+ * initialiase the menu signal handlers ready for connection
*/
-static void nsgtk_scaffolding_toolbar_init(struct nsgtk_scaffolding *g)
+static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
{
#define ITEM_MAIN(p, q, r)\
- g->buttons[p##_BUTTON]->main = g->menu_bar->q->r##_menuitem;\
- g->buttons[p##_BUTTON]->rclick = g->menu_popup->q->r##_menuitem;\
- g->buttons[p##_BUTTON]->mhandler = nsgtk_on_##r##_activate_menu;\
- g->buttons[p##_BUTTON]->bhandler = nsgtk_on_##r##_activate_button;
+ g->menus[p##_BUTTON].main = g->menu_bar->q->r##_menuitem;\
+ g->menus[p##_BUTTON].rclick = g->menu_popup->q->r##_menuitem;\
+ g->menus[p##_BUTTON].mhandler = nsgtk_on_##r##_activate_menu;
#define ITEM_SUB(p, q, r, s)\
- g->buttons[p##_BUTTON]->main =\
+ g->menus[p##_BUTTON].main =\
g->menu_bar->q->r##_submenu->s##_menuitem;\
- g->buttons[p##_BUTTON]->rclick =\
+ g->menus[p##_BUTTON].rclick =\
g->menu_popup->q->r##_submenu->s##_menuitem;\
- g->buttons[p##_BUTTON]->mhandler =\
- nsgtk_on_##s##_activate_menu;\
- g->buttons[p##_BUTTON]->bhandler =\
- nsgtk_on_##s##_activate_button;
-
-#define ITEM_BUTTON(p, q)\
- g->buttons[p##_BUTTON]->bhandler =\
- nsgtk_on_##q##_activate;
+ g->menus[p##_BUTTON].mhandler =\
+ nsgtk_on_##s##_activate_menu;
+
#define ITEM_POP(p, q) \
- g->buttons[p##_BUTTON]->popup = g->menu_popup->q##_menuitem
+ g->menus[p##_BUTTON].popup = g->menu_popup->q##_menuitem
ITEM_MAIN(NEWWINDOW, file_submenu, newwindow);
ITEM_MAIN(NEWTAB, file_submenu, newtab);
@@ -1925,7 +1929,6 @@ static void nsgtk_scaffolding_toolbar_init(struct nsgtk_scaffolding *g)
ITEM_SUB(TOGGLEDEBUGGING, tools_submenu, developer, toggledebugging);
ITEM_SUB(SAVEBOXTREE, tools_submenu, developer, debugboxtree);
ITEM_SUB(SAVEDOMTREE, tools_submenu, developer, debugdomtree);
- ITEM_BUTTON(HISTORY, history);
#undef ITEM_MAIN
@@ -1933,9 +1936,10 @@ static void nsgtk_scaffolding_toolbar_init(struct nsgtk_scaffolding *g)
#undef ITEM_BUTTON
#undef ITEM_POP
+ return NSERROR_OK;
}
-
+#if 0
static void nsgtk_scaffolding_initial_sensitivity(struct nsgtk_scaffolding *g)
{
for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
@@ -2585,7 +2589,7 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
gs->link_menu = nsgtk_new_scaffolding_link_popup(gs, group);
/* set up the menu signal handlers */
- //nsgtk_scaffolding_toolbar_init(gs);
+ nsgtk_menu_initialise(gs);
//nsgtk_toolbar_connect_all(gs);
nsgtk_attach_menu_handlers(gs);
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 7a91f04..6e3459f 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -73,7 +73,6 @@ struct nsgtk_toolbar_item {
*/
gboolean (*bhandler)(GtkWidget *widget, gpointer data);
- void *mhandler; /* menu item clicked */
void *dataplus; /* customization -> toolbar */
void *dataminus; /* customization -> store */
};
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/scaffolding.c | 72 +++++++++++++++++++++++--------------------
frontends/gtk/toolbar.c | 1 -
2 files changed, 38 insertions(+), 35 deletions(-)
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index b523645..08dabc3 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -104,9 +104,10 @@ static gboolean nsgtk_on_##q##_activate(GtkButton *widget, gpointer data)
struct nsgtk_menu {
- GtkWidget *main; /* left click menu entry */
+ GtkWidget *main; /* main menu entry */
GtkWidget *rclick; /* right click menu */
GtkWidget *popup; /* popup menu entry */
+ void *mhandler; /* menu item handler */
};
/** Core scaffolding structure. */
@@ -1734,21 +1735,30 @@ BUTTONHANDLER(history)
#undef CHECKHANDLER
#undef BUTTONHANDLER
+/**
+ * attach gtk signal handlers for menus
+ */
static void nsgtk_attach_menu_handlers(struct nsgtk_scaffolding *g)
{
- #if 0
- for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- if (g->buttons[i]->main != NULL) {
- g_signal_connect(g->buttons[i]->main, "activate",
- G_CALLBACK(g->buttons[i]->mhandler), g);
+ int idx; /* item index */
+ for (idx = BACK_BUTTON; idx < PLACEHOLDER_BUTTON; idx++) {
+ if (g->menus[idx].main != NULL) {
+ g_signal_connect(g->menus[idx].main,
+ "activate",
+ G_CALLBACK(g->menus[idx].mhandler),
+ g);
}
- if (g->buttons[i]->rclick != NULL) {
- g_signal_connect(g->buttons[i]->rclick, "activate",
- G_CALLBACK(g->buttons[i]->mhandler), g);
+ if (g->menus[idx].rclick != NULL) {
+ g_signal_connect(g->menus[idx].rclick,
+ "activate",
+ G_CALLBACK(g->menus[idx].mhandler),
+ g);
}
- if (g->buttons[i]->popup != NULL) {
- g_signal_connect(g->buttons[i]->popup, "activate",
- G_CALLBACK(g->buttons[i]->mhandler), g);
+ if (g->menus[idx].popup != NULL) {
+ g_signal_connect(g->menus[idx].popup,
+ "activate",
+ G_CALLBACK(g->menus[idx].mhandler),
+ g);
}
}
#define CONNECT_CHECK(q)\
@@ -1757,7 +1767,7 @@ static void nsgtk_attach_menu_handlers(struct nsgtk_scaffolding *g)
CONNECT_CHECK(menubar);
CONNECT_CHECK(toolbar);
#undef CONNECT_CHECK
-#endif
+
}
/**
@@ -1843,33 +1853,27 @@ struct nsgtk_scaffolding *nsgtk_current_scaffolding(void)
}
return scaf_current;
}
-#if 0
+
/**
- * init the array g->buttons[]
+ * initialiase the menu signal handlers ready for connection
*/
-static void nsgtk_scaffolding_toolbar_init(struct nsgtk_scaffolding *g)
+static nserror nsgtk_menu_initialise(struct nsgtk_scaffolding *g)
{
#define ITEM_MAIN(p, q, r)\
- g->buttons[p##_BUTTON]->main = g->menu_bar->q->r##_menuitem;\
- g->buttons[p##_BUTTON]->rclick = g->menu_popup->q->r##_menuitem;\
- g->buttons[p##_BUTTON]->mhandler = nsgtk_on_##r##_activate_menu;\
- g->buttons[p##_BUTTON]->bhandler = nsgtk_on_##r##_activate_button;
+ g->menus[p##_BUTTON].main = g->menu_bar->q->r##_menuitem;\
+ g->menus[p##_BUTTON].rclick = g->menu_popup->q->r##_menuitem;\
+ g->menus[p##_BUTTON].mhandler = nsgtk_on_##r##_activate_menu;
#define ITEM_SUB(p, q, r, s)\
- g->buttons[p##_BUTTON]->main =\
+ g->menus[p##_BUTTON].main =\
g->menu_bar->q->r##_submenu->s##_menuitem;\
- g->buttons[p##_BUTTON]->rclick =\
+ g->menus[p##_BUTTON].rclick =\
g->menu_popup->q->r##_submenu->s##_menuitem;\
- g->buttons[p##_BUTTON]->mhandler =\
- nsgtk_on_##s##_activate_menu;\
- g->buttons[p##_BUTTON]->bhandler =\
- nsgtk_on_##s##_activate_button;
-
-#define ITEM_BUTTON(p, q)\
- g->buttons[p##_BUTTON]->bhandler =\
- nsgtk_on_##q##_activate;
+ g->menus[p##_BUTTON].mhandler =\
+ nsgtk_on_##s##_activate_menu;
+
#define ITEM_POP(p, q) \
- g->buttons[p##_BUTTON]->popup = g->menu_popup->q##_menuitem
+ g->menus[p##_BUTTON].popup = g->menu_popup->q##_menuitem
ITEM_MAIN(NEWWINDOW, file_submenu, newwindow);
ITEM_MAIN(NEWTAB, file_submenu, newtab);
@@ -1925,7 +1929,6 @@ static void nsgtk_scaffolding_toolbar_init(struct nsgtk_scaffolding *g)
ITEM_SUB(TOGGLEDEBUGGING, tools_submenu, developer, toggledebugging);
ITEM_SUB(SAVEBOXTREE, tools_submenu, developer, debugboxtree);
ITEM_SUB(SAVEDOMTREE, tools_submenu, developer, debugdomtree);
- ITEM_BUTTON(HISTORY, history);
#undef ITEM_MAIN
@@ -1933,9 +1936,10 @@ static void nsgtk_scaffolding_toolbar_init(struct nsgtk_scaffolding *g)
#undef ITEM_BUTTON
#undef ITEM_POP
+ return NSERROR_OK;
}
-
+#if 0
static void nsgtk_scaffolding_initial_sensitivity(struct nsgtk_scaffolding *g)
{
for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
@@ -2585,7 +2589,7 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
gs->link_menu = nsgtk_new_scaffolding_link_popup(gs, group);
/* set up the menu signal handlers */
- //nsgtk_scaffolding_toolbar_init(gs);
+ nsgtk_menu_initialise(gs);
//nsgtk_toolbar_connect_all(gs);
nsgtk_attach_menu_handlers(gs);
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 7a91f04..6e3459f 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -73,7 +73,6 @@ struct nsgtk_toolbar_item {
*/
gboolean (*bhandler)(GtkWidget *widget, gpointer data);
- void *mhandler; /* menu item clicked */
void *dataplus; /* customization -> toolbar */
void *dataminus; /* customization -> store */
};
--
NetSurf Browser
4 years, 3 months