Replace initdownload() and intercept global download requests.

Attach to download requests on WebKitContext, this way we can easily
manage all types of downloads (coming from views or not).
This commit is contained in:
Quentin Rameau 2015-11-18 19:05:59 +01:00
parent 26a2dbac65
commit 96188f83f0

37
surf.c
View file

@ -141,7 +141,10 @@ static void setstyle(Client *c, const char *style);
static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri); static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri);
static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c); static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d,
Client *c);
static void responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c);
static void download(Client *c, WebKitURIResponse *r);
static void inspector(Client *c, const Arg *arg); static void inspector(Client *c, const Arg *arg);
static WebKitWebView *inspector_new(WebKitWebInspector *i, WebKitWebView *v, static WebKitWebView *inspector_new(WebKitWebInspector *i, WebKitWebView *v,
@ -698,15 +701,27 @@ handleplumb(Client *c, WebKitWebView *w, const gchar *uri)
spawn(c, &arg); spawn(c, &arg);
} }
gboolean void
initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c)
{ {
Arg arg; g_signal_connect(G_OBJECT(d), "notify::response",
G_CALLBACK(responsereceived), c);
}
updatewinid(c); void
arg = (Arg)DOWNLOAD((char *)webkit_download_get_uri(o), geturi(c)); responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c)
spawn(c, &arg); {
return FALSE; download(c, webkit_download_get_response(d));
webkit_download_cancel(d);
}
void
download(Client *c, WebKitURIResponse *r)
{
Arg a;
a = (Arg)DOWNLOAD(webkit_uri_response_get_uri(r), geturi(c));
spawn(c, &a);
} }
void void
@ -962,6 +977,9 @@ newview(Client *c, WebKitWebView *rv)
webkit_web_context_get_cookie_manager(context), webkit_web_context_get_cookie_manager(context),
cookiepolicy_get()); cookiepolicy_get());
g_signal_connect(G_OBJECT(context), "download-started",
G_CALLBACK(downloadstarted), c);
v = g_object_new(WEBKIT_TYPE_WEB_VIEW, v = g_object_new(WEBKIT_TYPE_WEB_VIEW,
"settings", settings, "settings", settings,
"user-content-manager", contentmanager, "user-content-manager", contentmanager,
@ -995,9 +1013,6 @@ newview(Client *c, WebKitWebView *rv)
g_signal_connect(G_OBJECT(v), g_signal_connect(G_OBJECT(v),
"notify::estimated-load-progress", "notify::estimated-load-progress",
G_CALLBACK(progresschanged), c); G_CALLBACK(progresschanged), c);
g_signal_connect(G_OBJECT(v),
"download-requested",
G_CALLBACK(initdownload), c);
g_signal_connect(G_OBJECT(v), g_signal_connect(G_OBJECT(v),
"button-release-event", "button-release-event",
G_CALLBACK(buttonrelease), c); G_CALLBACK(buttonrelease), c);