diff options
author | James Bursa <james@netsurf-browser.org> | 2004-06-27 23:24:11 +0000 |
---|---|---|
committer | James Bursa <james@netsurf-browser.org> | 2004-06-27 23:24:11 +0000 |
commit | a1d73ecd110f6cc252f6146672802f87cc45723d (patch) | |
tree | b7cf1aaa3ca066b9d4281fed890e82c470733fc2 /desktop | |
parent | 79a10e41a4be1a718df36e54036cd1666f967fef (diff) | |
download | netsurf-a1d73ecd110f6cc252f6146672802f87cc45723d.tar.gz netsurf-a1d73ecd110f6cc252f6146672802f87cc45723d.tar.bz2 |
[project @ 2004-06-27 23:24:11 by bursa]
Rewritten download window. Now downloads direct to file. New download window gui.
svn path=/import/netsurf/; revision=1020
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/browser.c | 91 | ||||
-rw-r--r-- | desktop/gui.h | 13 |
2 files changed, 53 insertions, 51 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index 2e9b2cf56..46a7b8443 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -39,8 +39,7 @@ static void browser_window_callback(content_msg msg, struct content *c, void *p1, void *p2, union content_msg_data data); -static void browser_window_convert_to_download(struct browser_window *bw, - content_msg msg); +static void browser_window_convert_to_download(struct browser_window *bw); static void browser_window_start_throbber(struct browser_window *bw); static void browser_window_stop_throbber(struct browser_window *bw); static void browser_window_update(struct browser_window *bw, @@ -48,8 +47,8 @@ static void browser_window_update(struct browser_window *bw, static void browser_window_set_status(struct browser_window *bw, const char *text); static void browser_window_set_pointer(gui_pointer_shape shape); -static void download_window_callback(content_msg msg, struct content *c, - void *p1, void *p2, union content_msg_data data); +static void download_window_callback(fetch_msg msg, void *p, const char *data, + unsigned long size); static void browser_window_text_selection(struct browser_window* bw, unsigned long click_x, unsigned long click_y, int click_type); @@ -194,13 +193,12 @@ void browser_window_callback(content_msg msg, struct content *c, struct browser_window *bw = p1; char status[40]; - if (c->type == CONTENT_OTHER) { - browser_window_convert_to_download(bw, msg); - return; - } - switch (msg) { case CONTENT_MSG_LOADING: + assert(bw->loading_content == c); + + if (c->type == CONTENT_OTHER) + browser_window_convert_to_download(bw); break; case CONTENT_MSG_READY: @@ -294,21 +292,32 @@ void browser_window_callback(content_msg msg, struct content *c, * Transfer the loading_content to a new download window. */ -void browser_window_convert_to_download(struct browser_window *bw, - content_msg msg) +void browser_window_convert_to_download(struct browser_window *bw) { - gui_window *download_window; + struct gui_download_window *download_window; struct content *c = bw->loading_content; - union content_msg_data data; + struct fetch *fetch; + assert(c); - /* create download window and add content to it */ - download_window = gui_create_download_window(c); - content_add_user(c, download_window_callback, download_window, 0); + fetch = c->fetch; - if (msg == CONTENT_MSG_DONE) - download_window_callback(CONTENT_MSG_DONE, c, download_window, - 0, data); + if (fetch) { + /* create download window */ + download_window = gui_download_window_create(c->url, + c->mime_type, fetch, c->total_size); + + if (download_window) { + /* extract fetch from content */ + c->fetch = 0; + c->fresh = false; + fetch_change_callback(fetch, download_window_callback, + download_window); + } + } else { + /* must already be a download window for this fetch */ + /** \todo open it at top of stack */ + } /* remove content from browser window */ bw->loading_content = 0; @@ -466,50 +475,38 @@ void browser_window_destroy(struct browser_window *bw) /** - * Callback for fetchcache() for download window fetches. + * Callback for fetch for download window fetches. */ -void download_window_callback(content_msg msg, struct content *c, - void *p1, void *p2, union content_msg_data data) +void download_window_callback(fetch_msg msg, void *p, const char *data, + unsigned long size) { - gui_window *download_window = p1; + struct gui_download_window *download_window = p; switch (msg) { - case CONTENT_MSG_STATUS: - gui_download_window_update_status(download_window); + case FETCH_DATA: + gui_download_window_data(download_window, data, size); break; - case CONTENT_MSG_DONE: + case FETCH_FINISHED: gui_download_window_done(download_window); break; - case CONTENT_MSG_ERROR: - gui_download_window_error(download_window, data.error); - break; - - case CONTENT_MSG_READY: + case FETCH_ERROR: + gui_download_window_error(download_window, data); break; - case CONTENT_MSG_LOADING: - case CONTENT_MSG_REDIRECT: - /* not possible at this point, handled in - browser_window_callback() */ + case FETCH_TYPE: + case FETCH_REDIRECT: + case FETCH_AUTH: + default: + /* not possible */ assert(0); break; - - case CONTENT_MSG_REFORMAT: - break; - - case CONTENT_MSG_REDRAW: - break; - -#ifdef WITH_AUTH - case CONTENT_MSG_AUTH: - break; -#endif - } + } } + void clear_radio_gadgets(struct browser_window *bw, struct box *box, struct form_control *group) { diff --git a/desktop/gui.h b/desktop/gui.h index 4bf69c6aa..553962ae9 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -14,6 +14,7 @@ #define _NETSURF_DESKTOP_GUI_H_ struct gui_window; +struct gui_download_window; typedef struct gui_window gui_window; typedef enum { GUI_POINTER_DEFAULT, GUI_POINTER_POINT, GUI_POINTER_CARET, GUI_POINTER_MENU, GUI_POINTER_UD, GUI_POINTER_LR, @@ -26,7 +27,6 @@ typedef enum { GUI_POINTER_DEFAULT, GUI_POINTER_POINT, GUI_POINTER_CARET, gui_window *gui_create_browser_window(struct browser_window *bw, struct browser_window *clone); -gui_window *gui_create_download_window(struct content *content); void gui_window_destroy(gui_window* g); void gui_window_redraw(gui_window* g, unsigned long x0, unsigned long y0, unsigned long x1, unsigned long y1); @@ -40,9 +40,14 @@ void gui_window_set_pointer(gui_pointer_shape shape); void gui_window_set_title(gui_window* g, char* title); void gui_window_set_url(gui_window *g, char *url); -void gui_download_window_update_status(gui_window *g); -void gui_download_window_done(gui_window *g); -void gui_download_window_error(gui_window *g, const char *error); +struct gui_download_window *gui_download_window_create(const char *url, + const char *mime_type, struct fetch *fetch, + unsigned int total_size); +void gui_download_window_data(struct gui_download_window *dw, const char *data, + unsigned int size); +void gui_download_window_error(struct gui_download_window *dw, + const char *error_msg); +void gui_download_window_done(struct gui_download_window *dw); void gui_init(int argc, char** argv); void gui_window_clone_options(struct browser_window *new_bw, struct browser_window *old_bw); |