summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2003-08-28 19:21:27 +0000
committerJames Bursa <james@netsurf-browser.org>2003-08-28 19:21:27 +0000
commitcef8c477c396458269a91ee756fc711bed74d0f4 (patch)
tree342bc9575240e4051c0784a7d88cc5c0990ab5c1 /desktop
parentb444025e2837843c26e7ea015bda91f5184d5aa0 (diff)
downloadnetsurf-cef8c477c396458269a91ee756fc711bed74d0f4.tar.gz
netsurf-cef8c477c396458269a91ee756fc711bed74d0f4.tar.bz2
[project @ 2003-08-28 19:21:27 by bursa]
Start implementing download window. svn path=/import/netsurf/; revision=255
Diffstat (limited to 'desktop')
-rw-r--r--desktop/browser.c46
-rw-r--r--desktop/gui.h13
2 files changed, 54 insertions, 5 deletions
diff --git a/desktop/browser.c b/desktop/browser.c
index 0782bd6fb..d296ddaea 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -35,6 +35,8 @@ static void browser_window_follow_link(struct browser_window* bw,
unsigned long click_x, unsigned long click_y, int click_type);
static void browser_window_callback(content_msg msg, struct content *c,
void *p1, void *p2, const char *error);
+static void download_window_callback(content_msg msg, struct content *c,
+ void *p1, void *p2, const char *error);
static void clear_radio_gadgets(struct browser_window* bw, struct box* box, struct gui_gadget* group);
static void gui_redraw_gadget2(struct browser_window* bw, struct box* box, struct gui_gadget* g,
unsigned long x, unsigned long y);
@@ -166,7 +168,7 @@ struct browser_window* create_browser_window(int flags, int width, int height)
bw->url = NULL;
- bw->window = create_gui_browser_window(bw);
+ bw->window = gui_create_browser_window(bw);
return bw;
}
@@ -274,9 +276,20 @@ void browser_window_callback(content_msg msg, struct content *c,
{
case CONTENT_MSG_LOADING:
if (c->type == CONTENT_OTHER) {
+ gui_window *download_window;
/* TODO: implement downloads */
/* we probably want to open a new window with a save icon and progress bar,
* and transfer content_loading to it */
+ assert(bw->loading_content == 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);
+
+ /* remove content from browser window */
+ bw->loading_content = 0;
+ content_remove_user(c, browser_window_callback, bw, 0);
+ browser_window_stop_throbber(bw);
}
break;
@@ -347,6 +360,37 @@ void browser_window_callback(content_msg msg, struct content *c,
}
}
+void download_window_callback(content_msg msg, struct content *c,
+ void *p1, void *p2, const char *error)
+{
+ gui_window *download_window = p1;
+
+ switch (msg) {
+ case CONTENT_MSG_STATUS:
+ gui_download_window_update_status(download_window);
+ break;
+
+ case CONTENT_MSG_DONE:
+ gui_download_window_done(download_window);
+ break;
+
+ case CONTENT_MSG_ERROR:
+ gui_download_window_error(download_window, error);
+ break;
+
+ case CONTENT_MSG_READY:
+ /* not possible for CONTENT_OTHER */
+ assert(0);
+ break;
+
+ case CONTENT_MSG_LOADING:
+ case CONTENT_MSG_REDIRECT:
+ /* not possible at this point, handled above */
+ assert(0);
+ break;
+ }
+}
+
void clear_radio_gadgets(struct browser_window* bw, struct box* box, struct gui_gadget* group)
{
struct box* c;
diff --git a/desktop/gui.h b/desktop/gui.h
index 8438e8ee0..a12cb8d5e 100644
--- a/desktop/gui.h
+++ b/desktop/gui.h
@@ -9,11 +9,11 @@
#ifndef _NETSURF_DESKTOP_GUI_H_
#define _NETSURF_DESKTOP_GUI_H_
-typedef enum { GUI_BROWSER_WINDOW } gui_window_type;
+typedef enum { GUI_BROWSER_WINDOW, GUI_DOWNLOAD_WINDOW } gui_window_type;
typedef enum { SAFE, UNSAFE } gui_safety;
-struct ro_gui_window;
-typedef struct ro_gui_window gui_window;
+struct gui_window;
+typedef struct gui_window gui_window;
#include "netsurf/desktop/browser.h"
@@ -29,7 +29,8 @@ struct gui_message
typedef struct gui_message gui_message;
-gui_window* create_gui_browser_window(struct browser_window* bw);
+gui_window *gui_create_browser_window(struct browser_window *bw);
+gui_window *gui_create_download_window(struct content *content);
void gui_window_destroy(gui_window* g);
void gui_window_show(gui_window* g);
void gui_window_hide(gui_window* g);
@@ -44,6 +45,10 @@ void gui_window_set_title(gui_window* g, char* title);
void gui_window_message(gui_window* g, gui_message* msg);
+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);
+
void gui_init(int argc, char** argv);
void gui_multitask(void);
void gui_poll(void);