commit dcabd0239e7bd35bee765f4b88cdf898bd14373d
Author:     Christoph Lohmann <[email protected]>
AuthorDate: Sun Feb 5 08:57:22 2017 +0100
Commit:     Quentin Rameau <[email protected]>
CommitDate: Mon Feb 6 11:30:44 2017 +0100

    Add a way to toggle proxy usage while running.

diff --git a/config.def.h b/config.def.h
index 7c2b10f..5996854 100644
--- a/config.def.h
+++ b/config.def.h
@@ -127,6 +127,7 @@ static Key keys[] = {
        { MODKEY|GDK_SHIFT_MASK,GDK_m,      togglestyle, { 0 } },
        { MODKEY|GDK_SHIFT_MASK,GDK_b,      togglescrollbars, { 0 } },
        { MODKEY|GDK_SHIFT_MASK,GDK_g,      togglegeolocation, { 0 } },
+       { MODKEY|GDK_SHIFT_MASK,GDK_y,      toggleproxy, { 0 } },
 };
 
 /* button definitions */
@@ -139,3 +140,4 @@ static Button buttons[] = {
        { ClkAny,       0,          8,      navigate,       { .i = -1 } },
        { ClkAny,       0,          9,      navigate,       { .i = +1 } },
 };
+
diff --git a/surf.1 b/surf.1
index 1715f93..b31eae3 100644
--- a/surf.1
+++ b/surf.1
@@ -221,6 +221,9 @@ Toggle script execution. This will reload the page.
 Toggle the enabling of plugins on that surf instance. This will reload the
 page.
 .TP
+.B Ctrl\-Shift\-y
+Toggle if a proxy should be used (if one is set in the environment).
+.TP
 .B F11
 Toggle fullscreen mode.
 .SH INDICATORS OF OPERATION
diff --git a/surf.c b/surf.c
index 46aef68..e8da563 100644
--- a/surf.c
+++ b/surf.c
@@ -198,6 +198,7 @@ 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 setup(void);
+static void setup_proxy(void);
 static void sigchld(int unused);
 static void sighup(int unused);
 static void source(Client *c, const Arg *arg);
@@ -208,6 +209,7 @@ static void titlechangeleave(void *a, void *b, 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 toggleproxy(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);
@@ -1323,7 +1325,6 @@ void
 setup(void)
 {
        int i;
-       char *proxy, *new_proxy, *no_proxy, **new_no_proxy;
        char *styledirfile, *stylepath;
        GProxyResolver *pr;
        SoupSession *s;
@@ -1399,6 +1400,19 @@ setup(void)
        g_object_set(G_OBJECT(s), "tls-database", tlsdb, NULL);
        g_object_set(G_OBJECT(s), "ssl-strict", strictssl, NULL);
 
+       setup_proxy();
+}
+
+void
+setup_proxy(void)
+{
+       char *proxy, *new_proxy, *no_proxy, **new_no_proxy;
+       GProxyResolver *pr;
+       SoupSession *s;
+
+       /* request handler */
+       s = webkit_get_default_session();
+
        /* proxy */
        if ((proxy = getenv("http_proxy")) && strcmp(proxy, "")) {
                new_proxy = g_strrstr(proxy, "http://";)
@@ -1416,6 +1430,8 @@ setup(void)
                g_free(new_proxy);
                g_strfreev(new_no_proxy);
                usingproxy = 1;
+       } else {
+               usingproxy = 0;
        }
 }
 
@@ -1480,6 +1496,7 @@ void
 titlechange(WebKitWebView *view, GParamSpec *pspec, Client *c)
 {
        const gchar *t = webkit_web_view_get_title(view);
+
        if (t) {
                c->title = copystr(&c->title, t);
                updatetitle(c);
@@ -1558,6 +1575,25 @@ twitch(Client *c, const Arg *arg)
 }
 
 void
+toggleproxy(Client *c, const Arg *arg)
+{
+       SoupSession *s;
+
+       /* request handler */
+       s = webkit_get_default_session();
+
+       if (usingproxy) {
+               g_object_set(G_OBJECT(s), "proxy-resolver", NULL, NULL);
+               usingproxy = 0;
+       } else {
+               setup_proxy();
+       }
+
+       updatetitle(c);
+       /* Do not reload. */
+}
+
+void
 togglescrollbars(Client *c, const Arg *arg)
 {
        GtkPolicyType vspolicy;

Reply via email to