summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2019-08-23 20:29:03 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2019-09-21 10:53:41 +0100
commitf3a68771e34511a07a42374c0c0a656ed8d47905 (patch)
tree8946f9b304d8d5ffd068d6d9fa904a7972f16c58
parent305190fe730cf19e0556ff8e24cbf85e63566de0 (diff)
downloadnetsurf-f3a68771e34511a07a42374c0c0a656ed8d47905.tar.gz
netsurf-f3a68771e34511a07a42374c0c0a656ed8d47905.tar.bz2
add home button clicked handler
-rw-r--r--frontends/gtk/toolbar.c224
-rw-r--r--frontends/gtk/toolbar_items.h2
2 files changed, 155 insertions, 71 deletions
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 58611bdad..c543eed4e 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -542,6 +542,108 @@ static char *remove_underscores(const char *s, bool replacespace)
/**
+ * create throbber toolbar item widget
+ *
+ * create a gtk entry widget with a completion attached
+ */
+static GtkToolItem *
+make_toolbar_item_throbber(void)
+{
+ nserror res;
+ GtkToolItem *item;
+ GdkPixbuf *pixbuf;
+ GtkWidget *image;
+
+ res = nsgtk_throbber_get_frame(0, &pixbuf);
+ if (res != NSERROR_OK) {
+ return NULL;
+ }
+
+ if (edit_mode) {
+ item = gtk_tool_button_new(
+ GTK_WIDGET(gtk_image_new_from_pixbuf(pixbuf)),
+ "[throbber]");
+ } else {
+ item = gtk_tool_item_new();
+
+ image = gtk_image_new_from_pixbuf(pixbuf);
+ if (image != NULL) {
+ nsgtk_widget_set_alignment(image,
+ GTK_ALIGN_CENTER,
+ GTK_ALIGN_CENTER);
+ nsgtk_widget_set_margins(image, 3, 0);
+
+ gtk_container_add(GTK_CONTAINER(item), image);
+ }
+ }
+ return item;
+}
+
+/**
+ * create url bar toolbar item widget
+ *
+ * create a gtk entry widget with a completion attached
+ */
+static GtkToolItem *
+make_toolbar_item_url_bar(void)
+{
+ GtkToolItem *item;
+ GtkWidget *entry;
+ GtkEntryCompletion *completion;
+
+ item = gtk_tool_item_new();
+ entry = nsgtk_entry_new();
+ completion = gtk_entry_completion_new();
+
+ if ((entry == NULL) || (completion == NULL) || (item == NULL)) {
+ return NULL;
+ }
+
+ gtk_entry_set_completion(GTK_ENTRY(entry), completion);
+ gtk_container_add(GTK_CONTAINER(item), entry);
+ gtk_tool_item_set_expand(item, TRUE);
+
+ return item;
+}
+
+
+/**
+ * create web search toolbar item widget
+ */
+static GtkToolItem *
+make_toolbar_item_websearch(void)
+{
+ GtkToolItem *item;
+
+ if (edit_mode) {
+ item = gtk_tool_button_new(
+ GTK_WIDGET(nsgtk_image_new_from_stock(
+ NSGTK_STOCK_FIND,
+ GTK_ICON_SIZE_LARGE_TOOLBAR)),
+ "[websearch]");
+ } else {
+ GtkWidget *entry = nsgtk_entry_new();
+
+ item = gtk_tool_item_new();
+
+ if ((entry == NULL) || (item == NULL)) {
+ return NULL;
+ }
+
+ gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1);
+
+ nsgtk_entry_set_icon_from_stock(entry,
+ GTK_ENTRY_ICON_PRIMARY,
+ NSGTK_STOCK_INFO);
+
+ gtk_container_add(GTK_CONTAINER(item), entry);
+ }
+
+ return item;
+}
+
+
+/**
* widget factory for creation of toolbar item widgets
*
* \param i the id of the widget
@@ -585,81 +687,17 @@ make_toolbar_item(nsgtk_toolbar_button i, struct nsgtk_theme *theme)
theme->image[HISTORY_BUTTON]), "H"));
break;
- case URL_BAR_ITEM: {
- /* create a gtk entry widget with a completion attached */
- GtkWidget *entry;
- GtkEntryCompletion *completion;
-
- w = GTK_WIDGET(gtk_tool_item_new());
- entry = nsgtk_entry_new();
- completion = gtk_entry_completion_new();
-
- if ((entry == NULL) || (completion == NULL) || (w == NULL)) {
- nsgtk_warning(messages_get("NoMemory"), 0);
- return NULL;
- }
-
- gtk_entry_set_completion(GTK_ENTRY(entry), completion);
- gtk_container_add(GTK_CONTAINER(w), entry);
- gtk_tool_item_set_expand(GTK_TOOL_ITEM(w), TRUE);
+ case URL_BAR_ITEM:
+ w = GTK_WIDGET(make_toolbar_item_url_bar());
break;
- }
-
- case THROBBER_ITEM: {
- nserror res;
- GdkPixbuf *pixbuf;
- res = nsgtk_throbber_get_frame(0, &pixbuf);
- if (res != NSERROR_OK) {
- return NULL;
- }
-
- if (edit_mode) {
- w = GTK_WIDGET(gtk_tool_button_new(
- GTK_WIDGET(gtk_image_new_from_pixbuf(pixbuf)),
- "[throbber]"));
- } else {
- GtkWidget *image;
-
- w = GTK_WIDGET(gtk_tool_item_new());
-
- image = gtk_image_new_from_pixbuf(pixbuf);
- if (image != NULL) {
- nsgtk_widget_set_alignment(image,
- GTK_ALIGN_CENTER,
- GTK_ALIGN_CENTER);
- nsgtk_widget_set_margins(image, 3, 0);
-
- gtk_container_add(GTK_CONTAINER(w), image);
- }
- }
+ case THROBBER_ITEM:
+ w = GTK_WIDGET(make_toolbar_item_throbber());
break;
- }
-
- case WEBSEARCH_ITEM: {
- if (edit_mode)
- return GTK_WIDGET(gtk_tool_button_new(GTK_WIDGET(
- nsgtk_image_new_from_stock(NSGTK_STOCK_FIND,
- GTK_ICON_SIZE_LARGE_TOOLBAR)),
- "[websearch]"));
-
- GtkWidget *entry = nsgtk_entry_new();
-
- w = GTK_WIDGET(gtk_tool_item_new());
-
- if ((entry == NULL) || (w == NULL)) {
- nsgtk_warning(messages_get("NoMemory"), 0);
- return NULL;
- }
-
- gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1);
-
- nsgtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_PRIMARY,
- NSGTK_STOCK_INFO);
- gtk_container_add(GTK_CONTAINER(w), entry);
+ case WEBSEARCH_ITEM:
+ w = GTK_WIDGET(make_toolbar_item_websearch());
break;
- }
/* gtk_tool_button_new accepts NULL args */
#define MAKE_MENUBUTTON(p, q) \
@@ -723,6 +761,11 @@ make_toolbar_item(nsgtk_toolbar_button i, struct nsgtk_theme *theme)
break;
}
+
+ if (w == NULL) {
+ nsgtk_warning(messages_get("NoMemory"), 0);
+ }
+
return w;
}
@@ -1926,6 +1969,47 @@ reload_button_clicked_cb(GtkWidget *widget, gpointer data)
}
+/**
+ * handler for home 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
+home_button_clicked_cb(GtkWidget *widget, gpointer data)
+{
+ nserror res;
+ struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data;
+ const char *addr;
+ struct browser_window *bw;
+ 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_navigate(bw,
+ url,
+ NULL,
+ BW_NAVIGATE_HISTORY,
+ NULL,
+ NULL,
+ NULL);
+ nsurl_unref(url);
+ }
+ 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 d82ca22f4..5281ab696 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -93,7 +93,7 @@ TOOLBAR_ITEM(HISTORY_BUTTON, history, true, localhistory_button_clicked_cb)
TOOLBAR_ITEM(FORWARD_BUTTON, forward, false, forward_button_clicked_cb)
TOOLBAR_ITEM(STOP_BUTTON, stop, false, stop_button_clicked_cb)
TOOLBAR_ITEM(RELOAD_BUTTON, reload, true, reload_button_clicked_cb)
-TOOLBAR_ITEM(HOME_BUTTON, home, true, NULL)
+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)