disable/toggle scrollbars
authorCarlos J. Torres <vlaadbrain@gmail.com>
Thu, 21 Feb 2013 14:59:07 +0000 (09:59 -0500)
committerChristoph Lohmann <20h@r-36.net>
Mon, 25 Feb 2013 12:42:19 +0000 (13:42 +0100)
* add flag to main
* add flag to manual
* add signal handler to block default scrollbar policy
* add toggle of scrollbars (hacky - but no reload) with a twitch
* add key map to manual
* add commandline flag to children surfers
* update TODO
* sort stuff alphabetically for the style inquisition

Signed-off-by: Christoph Lohmann <20h@r-36.net>
TODO.md
config.def.h
surf.1
surf.c

diff --git a/TODO.md b/TODO.md
index d236d11..6ffdb3b 100644 (file)
--- a/TODO.md
+++ b/TODO.md
@@ -2,7 +2,7 @@
 
 * suckless adblocking
 * integrate the WebKitWebInspector API
 
 * suckless adblocking
 * integrate the WebKitWebInspector API
-* make scrollbars a switch and allow them to be disabled
+* replace twitch() with proper gtk calls to make scrollbars reappear
 * replace webkit with something sane
 * add video player options
        * play in plugin
 * replace webkit with something sane
 * add video player options
        * play in plugin
index bbfb1ed..d9a2be9 100644 (file)
@@ -10,6 +10,7 @@ static char *cafile         = "/etc/ssl/certs/ca-certificates.crt";
 static char *strictssl      = FALSE; /* Refuse untrusted SSL connections */
 
 /* Webkit default features */
 static char *strictssl      = FALSE; /* Refuse untrusted SSL connections */
 
 /* Webkit default features */
+static Bool enablescrollbars = TRUE;
 static Bool enablespatialbrowsing = TRUE;
 static Bool enableplugins = TRUE;
 static Bool enablescripts = TRUE;
 static Bool enablespatialbrowsing = TRUE;
 static Bool enableplugins = TRUE;
 static Bool enablescripts = TRUE;
@@ -84,5 +85,6 @@ static Key keys[] = {
     { MODKEY|GDK_SHIFT_MASK,GDK_s,      toggle,     { .v = "enable-scripts" } },
     { MODKEY|GDK_SHIFT_MASK,GDK_v,      toggle,     { .v = "enable-plugins" } },
     { MODKEY|GDK_SHIFT_MASK,GDK_m,      togglestyle,{ 0 } },
     { MODKEY|GDK_SHIFT_MASK,GDK_s,      toggle,     { .v = "enable-scripts" } },
     { MODKEY|GDK_SHIFT_MASK,GDK_v,      toggle,     { .v = "enable-plugins" } },
     { MODKEY|GDK_SHIFT_MASK,GDK_m,      togglestyle,{ 0 } },
+    { MODKEY|GDK_SHIFT_MASK,GDK_b,      togglescrollbars,{ 0 } },
 };
 
 };
 
diff --git a/surf.1 b/surf.1
index 1bad494..97c00f0 100644 (file)
--- a/surf.1
+++ b/surf.1
@@ -3,7 +3,7 @@
 surf \- simple webkit-based browser
 .SH SYNOPSIS
 .B surf
 surf \- simple webkit-based browser
 .SH SYNOPSIS
 .B surf
-.RB [-ipnsvx]
+.RB [-bipnsvx]
 .RB [-c\ cookiefile]
 .RB [-e\ xid]
 .RB [-r\ scriptfile]
 .RB [-c\ cookiefile]
 .RB [-e\ xid]
 .RB [-r\ scriptfile]
@@ -17,6 +17,9 @@ which makes it possible to embed it in another application. Furthermore,
 one can point surf to another URI by setting its XProperties.
 .SH OPTIONS
 .TP
 one can point surf to another URI by setting its XProperties.
 .SH OPTIONS
 .TP
+.B \-b
+Disable Scrollbars
+.TP
 .B \-c cookiefile 
 Specify the
 .I cookiefile
 .B \-c cookiefile 
 Specify the
 .I cookiefile
@@ -127,8 +130,8 @@ Copies current URI to primary selection.
 .B Ctrl\-o
 Show the sourcecode of the current page.
 .TP
 .B Ctrl\-o
 Show the sourcecode of the current page.
 .TP
-.B Ctrl\-Shift\-o
-Open the Web Inspector (Developer Tools) window for the current page.
+.B Ctrl\-Shift\-b
+Toggle scrollbars
 .TP
 .B Ctrl\-Shift\-c
 Toggle caret browsing.
 .TP
 .B Ctrl\-Shift\-c
 Toggle caret browsing.
@@ -141,6 +144,9 @@ Toggle if the
 .I stylefile 
 file should be loaded.
 .TP
 .I stylefile 
 file should be loaded.
 .TP
+.B Ctrl\-Shift\-o
+Open the Web Inspector (Developer Tools) window for the current page.
+.TP
 .B Ctrl\-Shift\-s
 Toggle script execution.
 .TP
 .B Ctrl\-Shift\-s
 Toggle script execution.
 .TP
diff --git a/surf.c b/surf.c
index ba00e5b..214b9c7 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -153,6 +153,7 @@ static void stop(Client *c, const Arg *arg);
 static void titlechange(WebKitWebView *v, WebKitWebFrame *frame,
                const char *title, Client *c);
 static void toggle(Client *c, const Arg *arg);
 static void titlechange(WebKitWebView *v, WebKitWebFrame *frame,
                const char *title, Client *c);
 static void toggle(Client *c, const Arg *arg);
+static void togglescrollbars(Client *c, const Arg *arg);
 static void togglestyle(Client *c, const Arg *arg);
 static void update(Client *c);
 static void updatewinid(Client *c);
 static void togglestyle(Client *c, const Arg *arg);
 static void update(Client *c);
 static void updatewinid(Client *c);
@@ -654,13 +655,9 @@ newclient(void) {
        c->vbox = gtk_vbox_new(FALSE, 0);
        gtk_paned_pack1(GTK_PANED(c->pane), c->vbox, TRUE, TRUE);
 
        c->vbox = gtk_vbox_new(FALSE, 0);
        gtk_paned_pack1(GTK_PANED(c->pane), c->vbox, TRUE, TRUE);
 
-       /* Scrolled Window */
-       c->scroll = gtk_scrolled_window_new(NULL, NULL);
-       gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(c->scroll),
-                       GTK_POLICY_NEVER, GTK_POLICY_NEVER);
-
        /* Webview */
        c->view = WEBKIT_WEB_VIEW(webkit_web_view_new());
        /* Webview */
        c->view = WEBKIT_WEB_VIEW(webkit_web_view_new());
+
        g_signal_connect(G_OBJECT(c->view),
                        "title-changed",
                        G_CALLBACK(titlechange), c);
        g_signal_connect(G_OBJECT(c->view),
                        "title-changed",
                        G_CALLBACK(titlechange), c);
@@ -698,6 +695,21 @@ newclient(void) {
                        "resource-request-starting",
                        G_CALLBACK(beforerequest), c);
 
                        "resource-request-starting",
                        G_CALLBACK(beforerequest), c);
 
+       /* Scrolled Window */
+       c->scroll = gtk_scrolled_window_new(NULL, NULL);
+
+       frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(c->view));
+       g_signal_connect(G_OBJECT(frame), "scrollbars-policy-changed",
+                       G_CALLBACK(gtk_true), NULL);
+
+       if(!enablescrollbars) {
+               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);
+       }
+
        /* Arranging */
        gtk_container_add(GTK_CONTAINER(c->scroll), GTK_WIDGET(c->view));
        gtk_container_add(GTK_CONTAINER(c->win), c->pane);
        /* Arranging */
        gtk_container_add(GTK_CONTAINER(c->scroll), GTK_WIDGET(c->view));
        gtk_container_add(GTK_CONTAINER(c->win), c->pane);
@@ -718,8 +730,8 @@ newclient(void) {
        gdk_window_add_filter(GTK_WIDGET(c->win)->window, processx, c);
        webkit_web_view_set_full_content_zoom(c->view, TRUE);
 
        gdk_window_add_filter(GTK_WIDGET(c->win)->window, processx, c);
        webkit_web_view_set_full_content_zoom(c->view, TRUE);
 
-       frame = webkit_web_view_get_main_frame(c->view);
        runscript(frame);
        runscript(frame);
+
        settings = webkit_web_view_get_settings(c->view);
        if(!(ua = getenv("SURF_USERAGENT")))
                ua = useragent;
        settings = webkit_web_view_get_settings(c->view);
        if(!(ua = getenv("SURF_USERAGENT")))
                ua = useragent;
@@ -778,22 +790,24 @@ newclient(void) {
 static void
 newwindow(Client *c, const Arg *arg, gboolean noembed) {
        guint i = 0;
 static void
 newwindow(Client *c, const Arg *arg, gboolean noembed) {
        guint i = 0;
-       const char *cmd[10], *uri;
+       const char *cmd[11], *uri;
        const Arg a = { .v = (void *)cmd };
        char tmp[64];
 
        cmd[i++] = argv0;
        const Arg a = { .v = (void *)cmd };
        char tmp[64];
 
        cmd[i++] = argv0;
+       if(!enablescrollbars)
+               cmd[i++] = "-b";
        if(embed && !noembed) {
                cmd[i++] = "-e";
                snprintf(tmp, LENGTH(tmp), "%u\n", (int)embed);
                cmd[i++] = tmp;
        }
        if(embed && !noembed) {
                cmd[i++] = "-e";
                snprintf(tmp, LENGTH(tmp), "%u\n", (int)embed);
                cmd[i++] = tmp;
        }
-       if(!enablescripts)
-               cmd[i++] = "-s";
-       if(!enableplugins)
-               cmd[i++] = "-p";
        if(!loadimages)
                cmd[i++] = "-i";
        if(!loadimages)
                cmd[i++] = "-i";
+       if(!enableplugins)
+               cmd[i++] = "-p";
+       if(!enablescripts)
+               cmd[i++] = "-s";
        if(showxid)
                cmd[i++] = "-x";
        cmd[i++] = "--";
        if(showxid)
                cmd[i++] = "-x";
        cmd[i++] = "--";
@@ -1047,6 +1061,44 @@ toggle(Client *c, const Arg *arg) {
        reload(c,&a);
 }
 
        reload(c,&a);
 }
 
+static 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);
+}
+
+static 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);
+       }
+}
+
 static void
 togglestyle(Client *c, const Arg *arg) {
        WebKitWebSettings *settings;
 static void
 togglestyle(Client *c, const Arg *arg) {
        WebKitWebSettings *settings;
@@ -1128,7 +1180,7 @@ updatewinid(Client *c) {
 
 static void
 usage(void) {
 
 static void
 usage(void) {
-       die("usage: %s [-inpsvx] [-c cookiefile] [-e xid] [-r scriptfile]"
+       die("usage: %s [-binpsvx] [-c cookiefile] [-e xid] [-r scriptfile]"
                " [-t stylefile] [-u useragent] [uri]\n", basename(argv0));
 }
 
                " [-t stylefile] [-u useragent] [uri]\n", basename(argv0));
 }
 
@@ -1162,6 +1214,9 @@ main(int argc, char *argv[]) {
 
        /* command line args */
        ARGBEGIN {
 
        /* command line args */
        ARGBEGIN {
+       case 'b':
+               enablescrollbars = 0;
+               break;
        case 'c':
                cookiefile = EARGF(usage());
                break;
        case 'c':
                cookiefile = EARGF(usage());
                break;