tKeybindings for scrolling left and right; code by stanio. - surf - customized build of surf, the suckless webkit browser
 (HTM) git clone git://src.adamsgaard.dk/surf
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 3083ef4031aaf48926497397295b0db639a6a9c1
 (DIR) parent cf75bf2777560d4ded7083517f0c72395052f1f0
 (HTM) Author: Troels Henriksen <athas@sigkill.dk>
       Date:   Thu, 31 May 2012 11:46:24 +0200
       
       Keybindings for scrolling left and right; code by stanio.
       Diffstat:
         M config.def.h                        |      10 ++++++++--
         M surf.c                              |      38 +++++++++++++++++++++++--------
       
       2 files changed, 36 insertions(+), 12 deletions(-)
       ---
 (DIR) diff --git a/config.def.h b/config.def.h
       t@@ -34,8 +34,14 @@ static Key keys[] = {
            { MODKEY|GDK_SHIFT_MASK,GDK_i,      zoom,       { .i = 0  } },
            { MODKEY,               GDK_l,      navigate,   { .i = +1 } },
            { MODKEY,               GDK_h,      navigate,   { .i = -1 } },
       -    { MODKEY,               GDK_j,      scroll,     { .i = +1 } },
       -    { MODKEY,               GDK_k,      scroll,     { .i = -1 } },
       +    { MODKEY,               GDK_j,           scroll_v,   { .i = +1 } },
       +    { MODKEY,               GDK_k,           scroll_v,   { .i = -1 } },
       +    { MODKEY,               GDK_g,           scroll_v,   { .i = -20000 } },
       +    { MODKEY|GDK_SHIFT_MASK,GDK_g,           scroll_v,   { .i = +20000 } },
       +    { MODKEY,               GDK_b,           scroll_v,   { .i = -10000 } },
       +    { MODKEY,               GDK_space,       scroll_v,   { .i = +10000 } },
       +    { MODKEY,               GDK_l,           scroll_h,   { .i = +1 } },
       +    { MODKEY,               GDK_h,           scroll_h,   { .i = -1 } },
            { 0,                    GDK_Escape, stop,       { 0 } },
            { MODKEY,               GDK_o,      source,     { 0 } },
            { MODKEY,               GDK_g,      spawn,      SETPROP("_SURF_URI", "_SURF_GO") },
 (DIR) diff --git a/surf.c b/surf.c
       t@@ -96,7 +96,9 @@ static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, gpointer d);
        static void progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c);
        static void reload(Client *c, const Arg *arg);
        static void resize(GtkWidget *w, GtkAllocation *a, Client *c);
       -static void scroll(Client *c, const Arg *arg);
       +static void scroll_h(Client *c, const Arg *arg);
       +static void scroll_v(Client *c, const Arg *arg);
       +static void scroll(GtkAdjustment *a, const Arg *arg);
        static void setatom(Client *c, int a, const char *v);
        static void setcookie(SoupCookie *c);
        static void setup(void);
       t@@ -662,16 +664,32 @@ resize(GtkWidget *w, GtkAllocation *a, Client *c) {
        }
        
        void
       -scroll(Client *c, const Arg *arg) {
       -        gdouble v;
       -        GtkAdjustment *a;
       +scroll_h(Client *c, const Arg *arg) {
       + scroll(gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(c->scroll)), arg);
       +}
       +
       +void
       +scroll_v(Client *c, const Arg *arg) {
       + scroll(gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(c->scroll)), arg);
       +}
       +
       +void
       +scroll(GtkAdjustment *a, const Arg *arg) {
       + gdouble v;
        
       -        a = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(c->scroll));
       -        v = gtk_adjustment_get_value(a);
       -        v += gtk_adjustment_get_step_increment(a) * arg->i;
       -        v = MAX(v, 0.0);
       -        v = MIN(v, gtk_adjustment_get_upper(a) - gtk_adjustment_get_page_size(a));
       -        gtk_adjustment_set_value(a, v);
       + v = gtk_adjustment_get_value(a);
       + switch (arg->i){
       + case +10000:
       + case -10000:
       + v += gtk_adjustment_get_page_increment(a) * (arg->i / 10000); break;
       + case +20000:
       + case -20000:
       + default:
       + v += gtk_adjustment_get_step_increment(a) * arg->i;
       + }
       + v = MAX(v, 0.0);
       + v = MIN(v, gtk_adjustment_get_upper(a) - gtk_adjustment_get_page_size(a));
       + gtk_adjustment_set_value(a, v);
        }
        
        void