From 6167b8862d25178fb6fec5f4b9848da758753ee6 Mon Sep 17 00:00:00 2001 From: François Revol Date: Thu, 6 Dec 2012 23:35:16 +0100 Subject: gtk: Handle Back and Forward keys Those extra keys are available on some keyboards, like on thinkpads. --- gtk/scaffolding.c | 2 +- gtk/scaffolding.h | 1 + gtk/window.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c index 91288a22e..687ade890 100644 --- a/gtk/scaffolding.c +++ b/gtk/scaffolding.c @@ -313,7 +313,7 @@ void nsgtk_scaffolding_destroy(nsgtk_scaffolding *g) /** * Update the back and forward button sensitivity. */ -static void nsgtk_window_update_back_forward(struct gtk_scaffolding *g) +void nsgtk_window_update_back_forward(struct gtk_scaffolding *g) { int width, height; struct browser_window *bw = nsgtk_get_browser_window(g->top_level); diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h index cf75f0af3..078158483 100644 --- a/gtk/scaffolding.h +++ b/gtk/scaffolding.h @@ -144,6 +144,7 @@ void nsgtk_scaffolding_set_top_level(struct gui_window *g); void nsgtk_scaffolding_destroy(nsgtk_scaffolding *g); +void nsgtk_window_update_back_forward(struct gtk_scaffolding *g); void nsgtk_scaffolding_set_sensitivity(struct gtk_scaffolding *g); void nsgtk_scaffolding_initial_sensitivity(struct gtk_scaffolding *g); void nsgtk_scaffolding_popup_menu(struct gtk_scaffolding *g, gdouble x, diff --git a/gtk/window.c b/gtk/window.c index 8a3a085f3..42344e627 100644 --- a/gtk/window.c +++ b/gtk/window.c @@ -29,6 +29,7 @@ #include "content/hlcache.h" #include "gtk/window.h" #include "desktop/browser_private.h" +#include "desktop/history_core.h" #include "desktop/mouse.h" #include "desktop/options.h" #include "desktop/searchweb.h" @@ -37,6 +38,7 @@ #include "gtk/compat.h" #include "gtk/gui.h" #include "gtk/scaffolding.h" +#include "gtk/search.h" #include "gtk/plotters.h" #include "gtk/schedule.h" #include "gtk/tabs.h" @@ -579,6 +581,32 @@ static gboolean nsgtk_window_keypress_event(GtkWidget *widget, gtk_adjustment_set_value(vscroll, value); break; + case GDK_KEY(Forward): + if (g->bw && history_back_available(g->bw->history)) { + /* clear potential search effects */ + browser_window_search_destroy_context(g->bw); + + nsgtk_search_set_forward_state(true, g->bw); + nsgtk_search_set_back_state(true, g->bw); + + history_forward(g->bw, g->bw->history); + nsgtk_window_update_back_forward(g->scaffold); + } + break; + + case GDK_KEY(Back): + if (g->bw && history_back_available(g->bw->history)) { + /* clear potential search effects */ + browser_window_search_destroy_context(g->bw); + + nsgtk_search_set_forward_state(true, g->bw); + nsgtk_search_set_back_state(true, g->bw); + + history_back(g->bw, g->bw->history); + nsgtk_window_update_back_forward(g->scaffold); + } + break; + default: break; -- cgit v1.2.3