Adapt navigate()
[surf.git] / surf.c
diff --git a/surf.c b/surf.c
index 726369a..e04f531 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -152,7 +152,7 @@ static void mousetargetchanged(WebKitWebView *v, WebKitHitTestResult *h,
                guint modifiers, Client *c);
 static void loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c);
 static void loaduri(Client *c, const Arg *arg);
-static void navigate(Client *c, const Arg *arg);
+static void navigate(Client *c, const Arg *a);
 static Client *newclient(Client *c);
 static WebKitWebView *newview(Client *c, WebKitWebView *rv);
 static void showview(WebKitWebView *v, Client *c);
@@ -167,9 +167,8 @@ static void progresschanged(WebKitWebView *v, GParamSpec *ps, Client *c);
 static void linkopen(Client *c, const Arg *arg);
 static void linkopenembed(Client *c, const Arg *arg);
 static void reload(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 scroll_h(Client *c, const Arg *a);
+static void scroll_v(Client *c, const Arg *a);
 static void setatom(Client *c, int a, const char *v);
 static void setup(void);
 static void sigchld(int unused);
@@ -179,7 +178,6 @@ static void titlechanged(WebKitWebView *view, GParamSpec *ps, Client *c);
 static void toggle(Client *c, const Arg *arg);
 static void togglecookiepolicy(Client *c, const Arg *arg);
 static void togglegeolocation(Client *c, const Arg *arg);
-static void togglescrollbars(Client *c, const Arg *arg);
 static void togglestyle(Client *c, const Arg *arg);
 static void updatetitle(Client *c);
 static void updatewinid(Client *c);
@@ -838,10 +836,12 @@ loaduri(Client *c, const Arg *arg)
 }
 
 void
-navigate(Client *c, const Arg *arg)
+navigate(Client *c, const Arg *a)
 {
-       int steps = *(int *)arg;
-       webkit_web_view_go_back_or_forward(c->view, steps);
+       if (a->i < 0)
+               webkit_web_view_go_back(c->view);
+       else if (a->i > 0)
+               webkit_web_view_go_forward(c->view);
 }
 
 Client *
@@ -1169,40 +1169,17 @@ reload(Client *c, const Arg *arg)
 }
 
 void
-scroll_h(Client *c, const Arg *arg)
+scroll_h(Client *c, const Arg *a)
 {
-       scroll(gtk_scrolled_window_get_hadjustment(
-              GTK_SCROLLED_WINDOW(c->scroll)), arg);
+       evalscript(c, "window.scrollBy(%d * (window.innerWidth / 100), 0)",
+           a->i);
 }
 
 void
-scroll_v(Client *c, const Arg *arg)
+scroll_v(Client *c, const Arg *a)
 {
-       scroll(gtk_scrolled_window_get_vadjustment(
-              GTK_SCROLLED_WINDOW(c->scroll)), arg);
-}
-
-void
-scroll(GtkAdjustment *a, const Arg *arg)
-{
-       gdouble 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);
+       evalscript(c, "window.scrollBy(0, %d * (window.innerHeight / 100))",
+           a->i);
 }
 
 void
@@ -1352,49 +1329,6 @@ togglegeolocation(Client *c, const Arg *arg)
        reload(c, &a);
 }
 
-void
-twitch(Client *c, const Arg *arg)
-{
-       GtkAdjustment *a;
-       gdouble v;
-
-       a = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(
-                                               c->scroll));
-
-       v = gtk_adjustment_get_value(a);
-
-       v += 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
-togglescrollbars(Client *c, const Arg *arg)
-{
-       GtkPolicyType vspolicy;
-       Arg a;
-
-       gtk_scrolled_window_get_policy(GTK_SCROLLED_WINDOW(c->scroll), NULL,
-                                      &vspolicy);
-
-       if (vspolicy == GTK_POLICY_AUTOMATIC) {
-               gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(c->scroll),
-                                              GTK_POLICY_NEVER,
-                                              GTK_POLICY_NEVER);
-       } else {
-               gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(c->scroll),
-                                              GTK_POLICY_AUTOMATIC,
-                                              GTK_POLICY_AUTOMATIC);
-               a.i = +1;
-               twitch(c, &a);
-               a.i = -1;
-               twitch(c, &a);
-       }
-}
-
 void
 togglestyle(Client *c, const Arg *arg)
 {