From 889ae885c66b0278c632090a0e1b89746a895ed4 Mon Sep 17 00:00:00 2001 From: James Bursa Date: Mon, 14 Jul 2003 22:57:45 +0000 Subject: [project @ 2003-07-14 22:57:45 by bursa] Add content instances. svn path=/import/netsurf/; revision=216 --- desktop/browser.c | 20 +++++++++++++------- desktop/browser.h | 3 ++- 2 files changed, 15 insertions(+), 8 deletions(-) (limited to 'desktop') diff --git a/desktop/browser.c b/desktop/browser.c index 5016b9d82..4f9fcc362 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -60,7 +60,7 @@ void browser_window_stop_throbber(struct browser_window* bw) } -void browser_window_reformat(struct browser_window* bw) +void browser_window_reformat(struct browser_window* bw, int scroll_to_top) { LOG(("bw = %p", bw)); @@ -73,7 +73,8 @@ void browser_window_reformat(struct browser_window* bw) else gui_window_set_title(bw->window, bw->current_content->title); gui_window_set_extent(bw->window, bw->current_content->width, bw->current_content->height); - gui_window_set_scroll(bw->window, 0, 0); + if (scroll_to_top) + gui_window_set_scroll(bw->window, 0, 0); gui_window_redraw_window(bw->window); LOG(("done")); @@ -182,8 +183,10 @@ void browser_window_destroy(struct browser_window* bw) LOG(("bw = %p", bw)); assert(bw != 0); - if (bw->current_content != NULL) - content_remove_user(bw->current_content, browser_window_callback, bw, 0, 0); + if (bw->current_content != NULL) { + content_remove_instance(bw->current_content, bw, 0, 0, 0, &bw->current_content_state); + content_remove_user(bw->current_content, browser_window_callback, bw, 0); + } if (bw->history != NULL) { @@ -226,7 +229,7 @@ void browser_window_open_location_historical(struct browser_window* bw, const ch browser_window_start_throbber(bw); bw->time0 = clock(); bw->loading_content = fetchcache(url, 0, browser_window_callback, bw, 0, - gui_window_get_width(bw->window), 0, 0); + gui_window_get_width(bw->window), 0); if (bw->loading_content->status == CONTENT_STATUS_READY) browser_window_callback(CONTENT_MSG_READY, bw->loading_content, bw, 0, 0); else if (bw->loading_content->status == CONTENT_STATUS_DONE) @@ -294,18 +297,21 @@ void browser_window_callback(content_msg msg, struct content *c, gui_remove_gadget(bw->current_content->data.html.elements.gadgets[gc]); } } - content_remove_user(bw->current_content, browser_window_callback, bw, 0, 0); + content_remove_instance(bw->current_content, bw, 0, 0, 0, &bw->current_content_state); + content_remove_user(bw->current_content, browser_window_callback, bw, 0); } bw->current_content = c; bw->loading_content = 0; } - browser_window_reformat(bw); gui_window_set_redraw_safety(bw->window, previous_safety); if (bw->current_content->status == CONTENT_STATUS_DONE) { + content_add_instance(bw->current_content, bw, 0, 0, 0, &bw->current_content_state); + browser_window_reformat(bw, 0); sprintf(status, "Page complete (%gs)", ((float) (clock() - bw->time0)) / CLOCKS_PER_SEC); browser_window_set_status(bw, status); browser_window_stop_throbber(bw); } else { + browser_window_reformat(bw, 1); browser_window_set_status(bw, c->status_message); } break; diff --git a/desktop/browser.h b/desktop/browser.h index d7bd0781b..016f2e636 100644 --- a/desktop/browser.h +++ b/desktop/browser.h @@ -52,6 +52,7 @@ struct browser_window struct { int mult; int div; } scale; struct content* current_content; + void *current_content_state; struct content* loading_content; struct history* history; clock_t time0; @@ -117,6 +118,6 @@ int box_position_distance(struct box_position* x, struct box_position* y); void gui_redraw_gadget(struct browser_window* bw, struct gui_gadget* g); void browser_window_stop_throbber(struct browser_window* bw); -void browser_window_reformat(struct browser_window* bw); +void browser_window_reformat(struct browser_window* bw, int scroll_to_top); #endif -- cgit v1.2.3