From dcabd0239e7bd35bee765f4b88cdf898bd14373d Mon Sep 17 00:00:00 2001 From: Christoph Lohmann <20h@r-36.net> Date: Sun, 5 Feb 2017 08:57:22 +0100 Subject: [PATCH] Add a way to toggle proxy usage while running. --- config.def.h | 2 ++ surf.1 | 3 +++ surf.c | 38 +++++++++++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 1 deletion(-) 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); @@ -1557,6 +1574,25 @@ twitch(Client *c, const Arg *arg) gtk_adjustment_set_value(a, v); } +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) {