aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Uli Schlachter <psychon@znc.in>2009-05-26 18:35:42 +0200
committerGravatar Uli Schlachter <psychon@znc.in>2009-05-28 11:51:46 +0200
commit7d736c38eb82399aee003ce1602a72da8a56d22c (patch)
tree387624ba81c0919fed032cf121d1dd6377f8d094
parent16987b4c01df41cb85c7a9ecfc06c571110efacc (diff)
Fix downloads
This adds mime-type-policy-decision-requested callback which simply downloads everything which can't be displayed. Without this, nothing is ever downloaded. Google lead me to this: http://gitorious.org/qtwebkit/qtwebkit/commit/1f30e169cd379ac8917040e4734e11d8283bab5d https://bugs.webkit.org/show_bug.cgi?id=25987 Signed-off-by: Uli Schlachter <psychon@znc.in>
-rw-r--r--uzbl.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/uzbl.c b/uzbl.c
index 5a96d2b..6a6f77f 100644
--- a/uzbl.c
+++ b/uzbl.c
@@ -348,6 +348,23 @@ new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequ
return (FALSE);
}
+static gboolean
+mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, gchar *mime_type, WebKitWebPolicyDecision *policy_decision, gpointer user_data) {
+ (void) frame;
+ (void) request;
+ (void) user_data;
+
+ /* If we can display it, let's display it... */
+ if (webkit_web_view_can_show_mime_type (web_view, mime_type)) {
+ webkit_web_policy_decision_use (policy_decision);
+ return TRUE;
+ }
+
+ /* ...everything we can't displayed is downloaded */
+ webkit_web_policy_decision_download (policy_decision);
+ return TRUE;
+}
+
WebKitWebView*
create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data) {
(void) web_view;
@@ -1948,6 +1965,7 @@ create_browser () {
g_signal_connect (G_OBJECT (g->web_view), "new-window-policy-decision-requested", G_CALLBACK (new_window_cb), g->web_view);
g_signal_connect (G_OBJECT (g->web_view), "download-requested", G_CALLBACK (download_cb), g->web_view);
g_signal_connect (G_OBJECT (g->web_view), "create-web-view", G_CALLBACK (create_web_view_cb), g->web_view);
+ g_signal_connect (G_OBJECT (g->web_view), "mime-type-policy-decision-requested", G_CALLBACK (mime_policy_cb), g->web_view);
return scrolled_window;
}