surf

surf browser, a WebKit2GTK based browser
Log | Files | Refs | README | LICENSE

commit 9c3b5ad35389f1930834bf04341eb0c3514a850f
parent 7c34d5061e372d44e20a27df375d785656614935
Author: Christoph Lohmann <20h@r-36.net>
Date:   Mon, 19 Jan 2015 22:15:18 +0100

Add plumbing functionality.

Diffstat:
config.def.h | 7+++++++
surf.c | 23+++++++++++++++++++++--
2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -53,6 +53,13 @@ static Bool allowgeolocation = TRUE; } \ } +/* PLUMB(URI) */ +#define PLUMB(u) {\ + .v = (char *[]){ "/bin/sh", "-c", \ + "xdg-open \"$0\"", u, NULL \ + } \ +} + /* styles */ /* * The iteration will stop at the first match, beginning at the beginning of diff --git a/surf.c b/surf.c @@ -95,7 +95,7 @@ static SoupCache *diskcache = NULL; static void addaccelgroup(Client *c); static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r, WebKitNetworkRequest *req, - WebKitNetworkResponse *resp, gpointer d); + WebKitNetworkResponse *resp, Client *c); static char *buildpath(const char *path); static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, GList *gl); @@ -138,6 +138,8 @@ static void getpagestat(Client *c); static char *geturi(Client *c); static gchar *getstyle(const char *uri); +static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri); + static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c); static void inspector(Client *c, const Arg *arg); @@ -209,11 +211,19 @@ addaccelgroup(Client *c) { static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r, WebKitNetworkRequest *req, WebKitNetworkResponse *resp, - gpointer d) { + Client *c) { const gchar *uri = webkit_network_request_get_uri(req); if(g_str_has_suffix(uri, "/favicon.ico")) webkit_network_request_set_uri(req, "about:blank"); + + if(!g_str_has_prefix(uri, "http://") \ + && !g_str_has_prefix(uri, "https://") \ + && !g_str_has_prefix(uri, "about:") \ + && strlen(uri) > 0) { + printf("Handle plumb: %s\n", uri); + handleplumb(c, w, uri); + } } static char * @@ -561,6 +571,15 @@ getstyle(const char *uri) { return g_strdup(""); } +static void +handleplumb(Client *c, WebKitWebView *w, const gchar *uri) { + Arg arg; + + webkit_web_view_stop_loading(w); + arg = (Arg)PLUMB((char *)uri); + spawn(c, &arg); +} + static gboolean initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) { Arg arg;