Add plumbing functionality.

This commit is contained in:
Christoph Lohmann 2015-01-19 22:15:18 +01:00
parent 7c34d5061e
commit 9c3b5ad353
2 changed files with 28 additions and 2 deletions

View file

@ -53,6 +53,13 @@ static Bool allowgeolocation = TRUE;
} \ } \
} }
/* PLUMB(URI) */
#define PLUMB(u) {\
.v = (char *[]){ "/bin/sh", "-c", \
"xdg-open \"$0\"", u, NULL \
} \
}
/* styles */ /* styles */
/* /*
* The iteration will stop at the first match, beginning at the beginning of * The iteration will stop at the first match, beginning at the beginning of

23
surf.c
View file

@ -95,7 +95,7 @@ static SoupCache *diskcache = NULL;
static void addaccelgroup(Client *c); static void addaccelgroup(Client *c);
static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, static void beforerequest(WebKitWebView *w, WebKitWebFrame *f,
WebKitWebResource *r, WebKitNetworkRequest *req, WebKitWebResource *r, WebKitNetworkRequest *req,
WebKitNetworkResponse *resp, gpointer d); WebKitNetworkResponse *resp, Client *c);
static char *buildpath(const char *path); static char *buildpath(const char *path);
static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e,
GList *gl); GList *gl);
@ -138,6 +138,8 @@ static void getpagestat(Client *c);
static char *geturi(Client *c); static char *geturi(Client *c);
static gchar *getstyle(const char *uri); 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 gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
static void inspector(Client *c, const Arg *arg); static void inspector(Client *c, const Arg *arg);
@ -209,11 +211,19 @@ addaccelgroup(Client *c) {
static void static void
beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r, beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r,
WebKitNetworkRequest *req, WebKitNetworkResponse *resp, WebKitNetworkRequest *req, WebKitNetworkResponse *resp,
gpointer d) { Client *c) {
const gchar *uri = webkit_network_request_get_uri(req); const gchar *uri = webkit_network_request_get_uri(req);
if(g_str_has_suffix(uri, "/favicon.ico")) if(g_str_has_suffix(uri, "/favicon.ico"))
webkit_network_request_set_uri(req, "about:blank"); 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 * static char *
@ -561,6 +571,15 @@ getstyle(const char *uri) {
return g_strdup(""); 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 static gboolean
initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) { initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) {
Arg arg; Arg arg;