tfixing downloads based on Evan Gates' patch. - surf - customized build of surf… | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a9d733bd9f8d4534ad06ff6467431803df8c7efd | |
parent 1d019cf8af6ffa2cd0f6d0bd9b6344e4924bb510 | |
Author: Enno Boland (tox) <[email protected]> | |
Date: Tue, 27 Oct 2009 08:11:44 +0100 | |
fixing downloads based on Evan Gates' patch. | |
Diffstat: | |
M config.def.h | 1 + | |
M surf.c | 46 ++++++++++++++++++++++++-----… | |
2 files changed, 37 insertions(+), 10 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -42,4 +42,5 @@ static Item items[] = { | |
{ "Stop", stop, { 0 } }, | |
{ "Paste URI", clipboard, { .b = TRUE } }, | |
{ "Copy URI", clipboard, { .b = FALSE } }, | |
+ { "Download", download, { 0 } }, | |
}; | |
diff --git a/surf.c b/surf.c | |
t@@ -76,7 +76,7 @@ static gboolean decidewindow(WebKitWebView *v, WebKitWebFram… | |
static void destroyclient(Client *c); | |
static void destroywin(GtkWidget* w, Client *c); | |
static void die(char *str); | |
-static void download(WebKitDownload *o, GParamSpec *pspec, Client *c); | |
+static void download(Client *c, const Arg *arg); | |
static void drawindicator(Client *c); | |
static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c); | |
static char *geturi(Client *c); | |
t@@ -110,6 +110,7 @@ static void stop(Client *c, const Arg *arg); | |
static void titlechange(WebKitWebView *v, WebKitWebFrame* frame, const char* t… | |
static void usage(void); | |
static void update(Client *c); | |
+static void updatedownload(WebKitDownload *o, GParamSpec *pspec, Client *c); | |
static void updatewinid(Client *c); | |
static void windowobjectcleared(GtkWidget *w, WebKitWebFrame *frame, JSContext… | |
static void zoom(Client *c, const Arg *arg); | |
t@@ -232,6 +233,15 @@ destroyclient(Client *c) { | |
} | |
gboolean | |
+mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRe… | |
+ if(webkit_web_view_can_show_mime_type(web_view, mime_type)) | |
+ webkit_web_policy_decision_use(policy_decision); | |
+ else | |
+ webkit_web_policy_decision_download(policy_decision); | |
+ return TRUE; | |
+} | |
+ | |
+gboolean | |
decidewindow(WebKitWebView *view, WebKitWebFrame *f, WebKitNetworkRequest *r, … | |
Arg arg; | |
t@@ -285,14 +295,18 @@ exposeindicator(GtkWidget *w, GdkEventExpose *e, Client … | |
} | |
void | |
-download(WebKitDownload *o, GParamSpec *pspec, Client *c) { | |
- WebKitDownloadStatus status; | |
+download(Client *c, const Arg *arg) { | |
+ char *uri; | |
+ WebKitNetworkRequest *r; | |
+ WebKitDownload *dl; | |
- status = webkit_download_get_status(c->download); | |
- if(status == WEBKIT_DOWNLOAD_STATUS_STARTED || status == WEBKIT_DOWNLO… | |
- c->progress = (gint)(webkit_download_get_progress(c->download)… | |
- } | |
- update(c); | |
+ if(arg->v) | |
+ uri = (char *)arg->v; | |
+ else | |
+ uri = c->linkhover ? c->linkhover : geturi(c); | |
+ r = webkit_network_request_new(uri); | |
+ dl = webkit_download_new(r); | |
+ initdownload(c->view, dl, c); | |
} | |
const char * | |
t@@ -322,6 +336,8 @@ initdownload(WebKitWebView *view, WebKitDownload *o, Clien… | |
stop(c, NULL); | |
c->download = o; | |
filename = webkit_download_get_suggested_filename(o); | |
+ if(!strcmp("", filename)) | |
+ filename = "index.html"; | |
uri = g_strconcat("file://", dldir, "/", filename, NULL); | |
webkit_download_set_destination_uri(c->download, uri); | |
c->progress = 0; | |
t@@ -329,8 +345,8 @@ initdownload(WebKitWebView *view, WebKitDownload *o, Clien… | |
html = g_strdup_printf("Download <b>%s</b>...", filename); | |
webkit_web_view_load_html_string(c->view, html, | |
webkit_download_get_uri(c->download)); | |
- g_signal_connect(c->download, "notify::progress", G_CALLBACK(download)… | |
- g_signal_connect(c->download, "notify::status", G_CALLBACK(download), … | |
+ g_signal_connect(c->download, "notify::progress", G_CALLBACK(updatedow… | |
+ g_signal_connect(c->download, "notify::status", G_CALLBACK(updatedownl… | |
webkit_download_start(c->download); | |
c->title = copystr(&c->title, filename); | |
t@@ -753,7 +769,17 @@ update(Client *c) { | |
drawindicator(c); | |
gtk_window_set_title(GTK_WINDOW(c->win), t); | |
g_free(t); | |
+} | |
+ | |
+void | |
+updatedownload(WebKitDownload *o, GParamSpec *pspec, Client *c) { | |
+ WebKitDownloadStatus status; | |
+ status = webkit_download_get_status(c->download); | |
+ if(status == WEBKIT_DOWNLOAD_STATUS_STARTED || status == WEBKIT_DOWNLO… | |
+ c->progress = (gint)(webkit_download_get_progress(c->download)… | |
+ } | |
+ update(c); | |
} | |
void |