summaryrefslogtreecommitdiff
path: root/frontends/gtk
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2019-08-22 18:40:38 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2019-09-21 10:53:41 +0100
commit305190fe730cf19e0556ff8e24cbf85e63566de0 (patch)
tree8cde7b6a09981d4c2a645e4e2bfcc22942c86d8c /frontends/gtk
parent07a9d5b3fb1c8d956d453e998c5903527f99f5e4 (diff)
downloadnetsurf-305190fe730cf19e0556ff8e24cbf85e63566de0.tar.gz
netsurf-305190fe730cf19e0556ff8e24cbf85e63566de0.tar.bz2
implement several more button press handlers
Diffstat (limited to 'frontends/gtk')
-rw-r--r--frontends/gtk/scaffolding.c1
-rw-r--r--frontends/gtk/toolbar.c163
-rw-r--r--frontends/gtk/toolbar_items.h6
3 files changed, 140 insertions, 30 deletions
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 5c5701177..b52364542 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -54,6 +54,7 @@
#include "gtk/compat.h"
#include "gtk/warn.h"
#include "gtk/cookies.h"
+#include "gtk/completion.h"
#include "gtk/preferences.h"
#include "gtk/about.h"
#include "gtk/viewsource.h"
diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c
index 49e0af31c..58611bdad 100644
--- a/frontends/gtk/toolbar.c
+++ b/frontends/gtk/toolbar.c
@@ -27,7 +27,9 @@
#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"
@@ -46,6 +48,7 @@
#include "gtk/toolbar_items.h"
#include "gtk/toolbar.h"
#include "gtk/schedule.h"
+#include "gtk/local_history.h"
/**
* button location indicating button is not to be shown
@@ -64,8 +67,13 @@ struct nsgtk_toolbar_item {
GtkToolItem *button;
int location; /* in toolbar */
bool sensitivity;
+
+ /**
+ * button clicked handler
+ */
+ gboolean (*bhandler)(GtkWidget *widget, gpointer data);
+
void *mhandler; /* menu item clicked */
- void *bhandler; /* button clicked */
void *dataplus; /* customization -> toolbar */
void *dataminus; /* customization -> store */
};
@@ -1662,6 +1670,28 @@ itemid_from_gtktoolitem(struct nsgtk_toolbar *tb, GtkToolItem *toolitem)
/**
+ * set a toolbar items sensitivity
+ *
+ * note this does not set menu items sensitivity
+ */
+static nserror
+set_item_sensitivity(struct nsgtk_toolbar_item *item, bool sensitivity)
+{
+ if (item->sensitivity != sensitivity) {
+ /* item requires sensitivity changing */
+ item->sensitivity = sensitivity;
+
+ if ((item->location != -1) && (item->button != NULL)) {
+ gtk_widget_set_sensitive(GTK_WIDGET(item->button),
+ item->sensitivity);
+ }
+ }
+
+ return NSERROR_OK;
+}
+
+
+/**
* callback for all toolbar items widget size allocation
*
* handler connected to all toolbar items for the size-allocate signal
@@ -1763,6 +1793,38 @@ url_entry_changed_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
/**
+ * handler for back 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
+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);
+
+ if ((bw != NULL) && browser_window_history_back_available(bw)) {
+ /* clear potential search effects */
+ browser_window_search_clear(bw);
+
+ browser_window_history_back(bw, false);
+
+ set_item_sensitivity(tb->buttons[BACK_BUTTON],
+ browser_window_history_back_available(bw));
+ set_item_sensitivity(tb->buttons[FORWARD_BUTTON],
+ browser_window_history_forward_available(bw));
+
+ nsgtk_local_history_hide();
+ }
+ return TRUE;
+}
+
+
+/**
* handler for local history tool bar item clicked signal
*
* \param widget The widget the signal is being delivered to.
@@ -1777,12 +1839,46 @@ localhistory_button_clicked_cb(GtkWidget *widget, gpointer data)
struct browser_window *bw;
GtkWidget *toplevel;
- toplevel = gtk_widget_get_toplevel(widget);
+ 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.
+ * \param data The toolbar context passed when the signal was connected
+ * \return TRUE
+ */
+static gboolean
+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);
- res = nsgtk_local_history_present(toplevel, bw);
- if (res != NSERROR_OK) {
- NSLOG(netsurf, INFO, "Unable to present local history window.");
+ if ((bw != NULL) && browser_window_history_forward_available(bw)) {
+ /* clear potential search effects */
+ browser_window_search_clear(bw);
+
+ browser_window_history_forward(bw, false);
+
+ set_item_sensitivity(tb->buttons[BACK_BUTTON],
+ browser_window_history_back_available(bw));
+ set_item_sensitivity(tb->buttons[FORWARD_BUTTON],
+ browser_window_history_forward_available(bw));
+ nsgtk_local_history_hide();
}
return TRUE;
}
@@ -1805,6 +1901,33 @@ stop_button_clicked_cb(GtkWidget *widget, gpointer data)
return TRUE;
}
+
+/**
+ * handler for reload 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
+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);
+
+ /* clear potential search effects */
+ browser_window_search_clear(bw);
+
+ browser_window_reload(bw, true);
+
+ return TRUE;
+}
+
+
+
+
/**
* create a toolbar item
*
@@ -1842,28 +1965,6 @@ toolbar_item_create(nsgtk_toolbar_button id,
return NSERROR_OK;
}
-/**
- * set a toolbar items sensitivity
- *
- * note this does not set menu items sensitivity
- */
-static nserror
-set_item_sensitivity(struct nsgtk_toolbar_item *item, bool sensitivity)
-{
- if (item->sensitivity == sensitivity) {
- /* item does not require sensitivity changing */
- return NSERROR_OK;
- }
- item->sensitivity = sensitivity;
-
- if ((item->location != -1) && (item->button != NULL)) {
- gtk_widget_set_sensitive(GTK_WIDGET(item->button),
- item->sensitivity);
- }
-
- return NSERROR_OK;
-
-}
/**
* set a toolbar item to a throbber frame number
@@ -2121,6 +2222,9 @@ nserror nsgtk_toolbar_update(struct nsgtk_toolbar *tb)
nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active)
{
nserror res;
+ struct browser_window *bw;
+
+ bw = tb->get_bw(tb->get_bw_ctx);
/* when activating the throbber simply schedule the next frame update */
if (active) {
@@ -2141,6 +2245,11 @@ nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active)
/* adjust sensitivity of other items */
set_item_sensitivity(tb->buttons[STOP_BUTTON], false);
set_item_sensitivity(tb->buttons[RELOAD_BUTTON], true);
+ set_item_sensitivity(tb->buttons[BACK_BUTTON],
+ browser_window_history_back_available(bw));
+ set_item_sensitivity(tb->buttons[FORWARD_BUTTON],
+ browser_window_history_forward_available(bw));
+ nsgtk_local_history_hide();
return res;
}
diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h
index 5c6033cc5..d82ca22f4 100644
--- a/frontends/gtk/toolbar_items.h
+++ b/frontends/gtk/toolbar_items.h
@@ -88,11 +88,11 @@ typedef enum {
#define TOOLBAR_ITEM_SET
#endif
-TOOLBAR_ITEM(BACK_BUTTON, back, false, NULL)
+TOOLBAR_ITEM(BACK_BUTTON, back, false, back_button_clicked_cb)
TOOLBAR_ITEM(HISTORY_BUTTON, history, true, localhistory_button_clicked_cb)
-TOOLBAR_ITEM(FORWARD_BUTTON, forward, false, NULL)
+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, NULL)
+TOOLBAR_ITEM(RELOAD_BUTTON, reload, true, reload_button_clicked_cb)
TOOLBAR_ITEM(HOME_BUTTON, home, true, NULL)
TOOLBAR_ITEM(URL_BAR_ITEM, url_bar, true, NULL)
TOOLBAR_ITEM(WEBSEARCH_ITEM, websearch, true, NULL)