Adapt zoom()
[surf.git] / surf.c
diff --git a/surf.c b/surf.c
index f227d4c..33f5b50 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -65,7 +65,7 @@ typedef struct Client {
        const char *needle;
        gint progress;
        struct Client *next;
-       gboolean zoomed, fullscreen, isinspecting;
+       gboolean fullscreen;
 } Client;
 
 typedef struct {
@@ -144,12 +144,7 @@ static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d,
 static void responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c);
 static void download(Client *c, WebKitURIResponse *r);
 
-static void inspector(Client *c, const Arg *arg);
-static WebKitWebView *inspector_new(WebKitWebInspector *i, WebKitWebView *v,
-                                    Client *c);
-static gboolean inspector_show(WebKitWebInspector *i, Client *c);
-static gboolean inspector_close(WebKitWebInspector *i, Client *c);
-static void inspector_finished(WebKitWebInspector *i, Client *c);
+static void toggleinspector(Client *c, const Arg *a);
 
 static gboolean keypress(GtkAccelGroup *group, GObject *obj, guint key,
                          GdkModifierType mods, Client *c);
@@ -157,14 +152,14 @@ 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);
 static void newwindow(Client *c, const Arg *arg, gboolean noembed);
 static GtkWidget *createwindow(Client *c);
 static void pasteuri(GtkClipboard *clipboard, const char *text, gpointer d);
-static void print(Client *c, const Arg *arg);
+static void print(Client *c, const Arg *a);
 static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event,
                                 gpointer d);
 static gboolean winevent(GtkWidget *w, GdkEvent *e, Client *c);
@@ -172,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);
@@ -184,12 +178,11 @@ 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);
 static void usage(void);
-static void zoom(Client *c, const Arg *arg);
+static void zoom(Client *c, const Arg *a);
 
 /* configuration, allows nested code to access above variables */
 #include "config.h"
@@ -722,60 +715,16 @@ download(Client *c, WebKitURIResponse *r)
 }
 
 void
-inspector(Client *c, const Arg *arg)
+toggleinspector(Client *c, const Arg *a)
 {
        if (enableinspector) {
-               if (c->isinspecting)
+               if (webkit_web_inspector_is_attached(c->inspector))
                        webkit_web_inspector_close(c->inspector);
                else
                        webkit_web_inspector_show(c->inspector);
        }
 }
 
-WebKitWebView *
-inspector_new(WebKitWebInspector *i, WebKitWebView *v, Client *c)
-{
-       return WEBKIT_WEB_VIEW(webkit_web_view_new());
-}
-
-gboolean
-inspector_show(WebKitWebInspector *i, Client *c)
-{
-       WebKitWebView *w;
-
-       if (c->isinspecting)
-               return false;
-
-       w = webkit_web_inspector_get_web_view(i);
-       gtk_paned_pack2(GTK_PANED(c->pane), GTK_WIDGET(w), TRUE, TRUE);
-       gtk_widget_show(GTK_WIDGET(w));
-       c->isinspecting = true;
-
-       return true;
-}
-
-gboolean
-inspector_close(WebKitWebInspector *i, Client *c)
-{
-       GtkWidget *w;
-
-       if (!c->isinspecting)
-               return false;
-
-       w = GTK_WIDGET(webkit_web_inspector_get_web_view(i));
-       gtk_widget_hide(w);
-       gtk_widget_destroy(w);
-       c->isinspecting = false;
-
-       return true;
-}
-
-void
-inspector_finished(WebKitWebInspector *i, Client *c)
-{
-       g_free(c->inspector);
-}
-
 gboolean
 keypress(GtkAccelGroup *group, GObject *obj, guint key, GdkModifierType mods,
          Client *c)
@@ -887,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 *
@@ -1025,6 +976,9 @@ showview(WebKitWebView *v, Client *c)
 
        c->win = createwindow(c);
 
+       if (enableinspector)
+               c->inspector = webkit_web_view_get_inspector(c->view);
+
        if (!kioskmode)
                addaccelgroup(c);
 
@@ -1042,7 +996,6 @@ showview(WebKitWebView *v, Client *c)
        gdk_window_set_events(gwin, GDK_ALL_EVENTS_MASK);
        gdk_window_add_filter(gwin, processx, c);
 
-       /* This might conflict with _zoomto96dpi_. */
        if (zoomlevel != 1.0)
                webkit_web_view_set_zoom_level(c->view, zoomlevel);
 
@@ -1152,9 +1105,10 @@ pasteuri(GtkClipboard *clipboard, const char *text, gpointer d)
 }
 
 void
-print(Client *c, const Arg *arg)
+print(Client *c, const Arg *a)
 {
-       webkit_web_frame_print(webkit_web_view_get_main_frame(c->view));
+       webkit_print_operation_run_dialog(webkit_print_operation_new(c->view),
+           GTK_WINDOW(c->win));
 }
 
 GdkFilterReturn
@@ -1214,40 +1168,17 @@ reload(Client *c, const Arg *arg)
 }
 
 void
-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_h(Client *c, const Arg *a)
 {
-       scroll(gtk_scrolled_window_get_vadjustment(
-              GTK_SCROLLED_WINDOW(c->scroll)), arg);
+       evalscript(c, "window.scrollBy(%d * (window.innerWidth / 100), 0)",
+           a->i);
 }
 
 void
-scroll(GtkAdjustment *a, const Arg *arg)
+scroll_v(Client *c, const Arg *a)
 {
-       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
@@ -1263,7 +1194,6 @@ void
 setup(void)
 {
        int i;
-       char *styledirfile, *stylepath;
        WebKitWebContext *context;
        GError *error = NULL;
 
@@ -1282,6 +1212,7 @@ setup(void)
        cookiefile = buildfile(cookiefile);
        scriptfile = buildfile(scriptfile);
        cachedir   = buildpath(cachedir);
+
        if (stylefile == NULL) {
                styledir = buildpath(styledir);
                for (i = 0; i < LENGTH(styles); i++) {
@@ -1292,19 +1223,12 @@ setup(void)
                                        styles[i].regex);
                                styles[i].regex = NULL;
                        }
-                       styledirfile    = g_strconcat(styledir, "/",
-                                                     styles[i].style, NULL);
-                       stylepath       = buildfile(styledirfile);
-                       styles[i].style = g_strconcat("file://", stylepath,
-                                                     NULL);
-                       g_free(styledirfile);
-                       g_free(stylepath);
+                       styles[i].style = g_strconcat(styledir, "/",
+                           styles[i].style, NULL);
                }
                g_free(styledir);
        } else {
-               stylepath = buildfile(stylefile);
-               stylefile = g_strconcat("file://", stylepath, NULL);
-               g_free(stylepath);
+               stylefile = buildfile(stylefile);
        }
 }
 
@@ -1404,49 +1328,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)
 {
@@ -1541,20 +1422,16 @@ usage(void)
 }
 
 void
-zoom(Client *c, const Arg *arg)
-{
-       c->zoomed = TRUE;
-       if (arg->i < 0) {
-               /* zoom out */
-               webkit_web_view_zoom_out(c->view);
-       } else if (arg->i > 0) {
-               /* zoom in */
-               webkit_web_view_zoom_in(c->view);
-       } else {
-               /* reset */
-               c->zoomed = FALSE;
+zoom(Client *c, const Arg *a)
+{
+       if (a->i > 0)
+               webkit_web_view_set_zoom_level(c->view, zoomlevel + 0.1);
+       else if (a->i < 0)
+               webkit_web_view_set_zoom_level(c->view, zoomlevel - 0.1);
+       else
                webkit_web_view_set_zoom_level(c->view, 1.0);
-       }
+
+       zoomlevel = webkit_web_view_get_zoom_level(c->view);
 }
 
 int