Making zoom available when used in tabbed.
[surf.git] / surf.c
diff --git a/surf.c b/surf.c
index ec3bee6..a15ed00 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -13,6 +13,7 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
+#include <limits.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <webkit/webkit.h>
@@ -78,7 +79,8 @@ static Client *clients = NULL;
 static GdkNativeWindow embed = 0;
 static gboolean showxid = FALSE;
 static char winid[64];
-static gboolean loadimage = 1, plugin = 1, script = 1, using_proxy = 0;
+static gboolean loadimages = 1, enableplugins = 1, enablescripts = 1,
+               usingproxy = 0;
 static char togglestat[5];
 
 static char *buildpath(const char *path);
@@ -359,13 +361,13 @@ drawindicator(Client *c) {
        width = c->progress * w->allocation.width / 100;
        gc = gdk_gc_new(w->window);
        if(strstr(uri, "https://") == uri) {
-               if(using_proxy) {
+               if(usingproxy) {
                        colorname = c->sslfailed? progress_proxy_untrust : progress_proxy_trust;
                } else {
                        colorname = c->sslfailed? progress_untrust : progress_trust;
                }
        } else {
-               if(using_proxy) {
+               if(usingproxy) {
                        colorname = progress_proxy;
                } else {
                        colorname = progress;
@@ -430,7 +432,7 @@ initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) {
        Arg arg;
 
        updatewinid(c);
-       arg = (Arg)DOWNLOAD((char *)webkit_download_get_uri(o));
+       arg = (Arg)DOWNLOAD((char *)webkit_download_get_uri(o), geturi(c));
        spawn(c, &arg);
        return FALSE;
 }
@@ -496,14 +498,23 @@ loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c) {
 
 void
 loaduri(Client *c, const Arg *arg) {
-       char *u;
+       char *u, *rp;
        const char *uri = (char *)arg->v;
        Arg a = { .b = FALSE };
 
        if(strcmp(uri, "") == 0)
                return;
-       u = g_strrstr(uri, "://") ? g_strdup(uri)
-               : g_strdup_printf("http://%s", uri);
+
+       /* In case it's a file path. */
+       if(uri[0] == '/') {
+               rp = realpath(uri, NULL);
+               u = g_strdup_printf("file://%s", rp);
+               free(rp);
+       } else {
+               u = g_strrstr(uri, "://") ? g_strdup(uri)
+                       : g_strdup_printf("http://%s", uri);
+       }
+
        /* prevents endless loop */
        if(c->uri && strcmp(u, c->uri) == 0) {
                reload(c, &a);
@@ -612,10 +623,11 @@ newclient(void) {
        g_object_set(G_OBJECT(settings), "user-agent", ua, NULL);
        uri = g_strconcat("file://", stylefile, NULL);
        g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL);
-       g_object_set(G_OBJECT(settings), "auto-load-images", loadimage, NULL);
-       g_object_set(G_OBJECT(settings), "enable-plugins", plugin, NULL);
-       g_object_set(G_OBJECT(settings), "enable-scripts", script, NULL);
-       g_object_set(G_OBJECT(settings), "enable-spatial-navigation", spatialbrowsing, NULL);
+       g_object_set(G_OBJECT(settings), "auto-load-images", loadimages, NULL);
+       g_object_set(G_OBJECT(settings), "enable-plugins", enableplugins, NULL);
+       g_object_set(G_OBJECT(settings), "enable-scripts", enablescripts, NULL);
+       g_object_set(G_OBJECT(settings), "enable-spatial-navigation",
+                       spatialbrowsing, NULL);
 
        g_free(uri);
 
@@ -651,11 +663,11 @@ newwindow(Client *c, const Arg *arg, gboolean noembed) {
                snprintf(tmp, LENGTH(tmp), "%u\n", (int)embed);
                cmd[i++] = tmp;
        }
-       if(!script)
+       if(!enablescripts)
                cmd[i++] = "-s";
-       if(!plugin)
+       if(!enableplugins)
                cmd[i++] = "-p";
-       if(!loadimage)
+       if(!loadimages)
                cmd[i++] = "-i";
        if(showxid)
                cmd[i++] = "-x";
@@ -843,7 +855,7 @@ setup(void) {
                g_object_set(G_OBJECT(s), "proxy-uri", puri, NULL);
                soup_uri_free(puri);
                g_free(new_proxy);
-               using_proxy = 1;
+               usingproxy = 1;
        }
 }
 
@@ -914,16 +926,20 @@ gettogglestat(Client *c){
        gboolean value;
        WebKitWebSettings *settings = webkit_web_view_get_settings(c->view);
 
-       togglestat[4] = '\0';
+       g_object_get(G_OBJECT(settings), "enable-caret-browsing",
+                       &value, NULL);
+       togglestat[0] = value? 'C': 'c';
+
        g_object_get(G_OBJECT(settings), "auto-load-images", &value, NULL);
-       togglestat[0] = value?'I':'i';
+       togglestat[1] = value? 'I': 'i';
+
        g_object_get(G_OBJECT(settings), "enable-scripts", &value, NULL);
-       togglestat[1] = value?'S':'s';
+       togglestat[2] = value? 'S': 's';
+
        g_object_get(G_OBJECT(settings), "enable-plugins", &value, NULL);
-       togglestat[2] = value?'V':'v';
-       g_object_get(G_OBJECT(settings), "enable-caret-browsing",
-                       &value, NULL);
-       togglestat[3] = value?'C':'c';
+       togglestat[3] = value? 'V': 'v';
+
+       togglestat[4] = '\0';
 }
 
 
@@ -970,11 +986,14 @@ windowobjectcleared(GtkWidget *w, WebKitWebFrame *frame, JSContextRef js, JSObje
 void
 zoom(Client *c, const Arg *arg) {
        c->zoomed = TRUE;
-       if(arg->i < 0)          /* zoom out */
+       if(arg->i < 0) {
+               /* zoom out */
                webkit_web_view_zoom_out(c->view);
-       else if(arg->i > 0)     /* zoom in */
+       } else if(arg->i > 0) {
+               /* zoom in */
                webkit_web_view_zoom_in(c->view);
-       else {                  /* reset */
+       } else {
+               /* reset */
                c->zoomed = FALSE;
                webkit_web_view_set_zoom_level(c->view, 1.0);
        }
@@ -995,16 +1014,16 @@ main(int argc, char *argv[]) {
                embed = strtol(EARGF(usage()), NULL, 0);
                break;
        case 'i':
-               loadimage = 0;
+               loadimages = 0;
                break;
        case 'p':
-               plugin = 0;
+               enableplugins = 0;
                break;
        case 'r':
                scriptfile = EARGF(usage());
                break;
        case 's':
-               script = 0;
+               enablescripts = 0;
                break;
        case 't':
                stylefile = EARGF(usage());