summaryrefslogtreecommitdiff
path: root/gtk/gtk_window.c
diff options
context:
space:
mode:
authorRob Kendrick <rjek@netsurf-browser.org>2007-03-06 21:29:51 +0000
committerRob Kendrick <rjek@netsurf-browser.org>2007-03-06 21:29:51 +0000
commit212b92f66e278c6a7f3f92c0c729265718e00929 (patch)
tree3e98c041fad4b4cd35fbfcd06437b4b4ae36999c /gtk/gtk_window.c
parent3dea2a398753c284488dfef8d5d39c58fe323b66 (diff)
downloadnetsurf-212b92f66e278c6a7f3f92c0c729265718e00929.tar.gz
netsurf-212b92f66e278c6a7f3f92c0c729265718e00929.tar.bz2
Reformat and apply Darren Salt's scrollwheel and keyboard scrolling patch, although I still can't get the keyboard scrolling to work.
svn path=/trunk/netsurf/; revision=3199
Diffstat (limited to 'gtk/gtk_window.c')
-rw-r--r--gtk/gtk_window.c92
1 files changed, 91 insertions, 1 deletions
diff --git a/gtk/gtk_window.c b/gtk/gtk_window.c
index 1841290a3..a09ae8931 100644
--- a/gtk/gtk_window.c
+++ b/gtk/gtk_window.c
@@ -360,7 +360,97 @@ gboolean nsgtk_window_keypress_event(GtkWidget *widget, GdkEventKey *event,
struct gui_window *g = data;
wchar_t nskey = gdkkey_to_nskey(event);
- browser_window_key_press(g->bw, nskey);
+ if (browser_window_key_press(g->bw, nskey))
+ return TRUE;
+
+ if (event->state == 0) {
+ double value;
+ GtkAdjustment *vscroll = gtk_range_get_adjustment(
+ g_object_get_data(G_OBJECT(g->viewport), "vScroll"));
+
+ GtkAdjustment *hscroll = gtk_range_get_adjustment(
+ g_object_get_data(G_OBJECT(g->viewport), "hScroll"));
+
+ GtkAdjustment *scroll;
+
+ const GtkAllocation *const alloc =
+ &GTK_WIDGET(g->viewport)->allocation;
+
+ switch (event->keyval) {
+ default:
+ return TRUE;
+
+ case GDK_Home:
+ case GDK_KP_Home:
+ scroll = vscroll;
+ value = scroll->lower;
+ break;
+
+ case GDK_End:
+ case GDK_KP_End:
+ scroll = vscroll;
+ value = scroll->upper - alloc->height;
+ if (value < scroll->lower)
+ value = scroll->lower;
+ break;
+
+ case GDK_Left:
+ case GDK_KP_Left:
+ scroll = hscroll;
+ value = gtk_adjustment_get_value(scroll) -
+ scroll->step_increment;
+ if (value < scroll->lower)
+ value = scroll->lower;
+ break;
+
+ case GDK_Up:
+ case GDK_KP_Up:
+ scroll = vscroll;
+ value = gtk_adjustment_get_value(scroll) -
+ scroll->step_increment;
+ if (value < scroll->lower)
+ value = scroll->lower;
+ break;
+
+ case GDK_Right:
+ case GDK_KP_Right:
+ scroll = hscroll;
+ value = gtk_adjustment_get_value(scroll) +
+ scroll->step_increment;
+ if (value > scroll->upper - alloc->width)
+ value = scroll->upper - alloc->width;
+ break;
+
+ case GDK_Down:
+ case GDK_KP_Down:
+ scroll = vscroll;
+ value = gtk_adjustment_get_value(scroll) +
+ scroll->step_increment;
+ if (value > scroll->upper - alloc->height)
+ value = scroll->upper - alloc->height;
+ break;
+
+ case GDK_Page_Up:
+ case GDK_KP_Page_Up:
+ scroll = vscroll;
+ value = gtk_adjustment_get_value(scroll) -
+ scroll->page_increment;
+ if (value < scroll->lower)
+ value = scroll->lower;
+ break;
+
+ case GDK_Page_Down:
+ case GDK_KP_Page_Down:
+ scroll = vscroll;
+ value = gtk_adjustment_get_value(scroll) +
+ scroll->page_increment;
+ if (value > scroll->upper - alloc->height)
+ value = scroll->upper - alloc->height;
+ break;
+ }
+
+ gtk_adjustment_set_value(scroll, value);
+ }
return TRUE;
}