summaryrefslogtreecommitdiff
path: root/riscos
diff options
context:
space:
mode:
authorRichard Wilson <rjw@netsurf-browser.org>2006-12-03 11:38:14 +0000
committerRichard Wilson <rjw@netsurf-browser.org>2006-12-03 11:38:14 +0000
commit0accd55b91ccba8d5e709e3bf34e8b89aad6182f (patch)
tree60656c61769f5ef0fd0ab7ed5a0ff3896bb32596 /riscos
parent50c03b09e4fc0c16fef522ec0a673a84d6a6d775 (diff)
downloadnetsurf-0accd55b91ccba8d5e709e3bf34e8b89aad6182f.tar.gz
netsurf-0accd55b91ccba8d5e709e3bf34e8b89aad6182f.tar.bz2
Fix 1568884.
svn path=/trunk/netsurf/; revision=3094
Diffstat (limited to 'riscos')
-rw-r--r--riscos/menus.c1
-rw-r--r--riscos/window.c44
2 files changed, 34 insertions, 11 deletions
diff --git a/riscos/menus.c b/riscos/menus.c
index 9ab8abffb..b9345a076 100644
--- a/riscos/menus.c
+++ b/riscos/menus.c
@@ -584,6 +584,7 @@ void ro_gui_menu_closed(bool cleanup) {
}
}
+ ro_gui_menu_search_window_menu = false;
current_menu_window = NULL;
current_menu_icon = NULL;
current_menu_open = false;
diff --git a/riscos/window.c b/riscos/window.c
index 72edcceda..ae4dc6238 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -116,6 +116,7 @@ struct ro_gui_pointer_entry ro_gui_pointer_table[] = {
};
+static void ro_gui_window_remove_update_boxes(struct gui_window *g);
static void ro_gui_window_open(wimp_open *open);
static void ro_gui_window_close(wimp_w w);
static void ro_gui_window_redraw(wimp_draw *redraw);
@@ -412,6 +413,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
void gui_window_destroy(struct gui_window *g)
{
os_error *error;
+ wimp_w w;
assert(g);
@@ -432,16 +434,24 @@ void gui_window_destroy(struct gui_window *g)
/* destroy toolbar */
if (g->toolbar)
ro_gui_theme_destroy_toolbar(g->toolbar);
+ if (g->status_bar)
+ ro_gui_status_bar_destroy(g->status_bar);
+
+ w = g->window;
+ ro_gui_url_complete_close(NULL, 0);
+ ro_gui_dialog_close_persistent(w);
+ if (current_menu_window == w)
+ ro_gui_menu_closed(true);
+ ro_gui_window_remove_update_boxes(g);
/* delete window */
- ro_gui_dialog_close(g->window);
- error = xwimp_delete_window(g->window);
+ error = xwimp_delete_window(w);
if (error) {
LOG(("xwimp_delete_window: 0x%x: %s",
error->errnum, error->errmess));
warn_user("WimpError", error->errmess);
}
- ro_gui_wimp_event_finalise(g->window);
+ ro_gui_wimp_event_finalise(w);
free(g);
}
@@ -1502,6 +1512,22 @@ void ro_gui_window_redraw(wimp_draw *redraw)
}
+
+/**
+ * Remove all pending update boxes for a window
+ *
+ * \param g gui_window
+ */
+void ro_gui_window_remove_update_boxes(struct gui_window *g) {
+ struct update_box *cur;
+
+ for (cur = pending_updates; cur != NULL; cur = cur->next) {
+ if (cur->g == g)
+ cur->g = NULL;
+ }
+}
+
+
/**
* Redraw any pending update boxes.
*/
@@ -1519,6 +1545,8 @@ void ro_gui_window_update_boxes(void) {
for (cur = pending_updates; cur != NULL; cur = cur->next) {
g = cur->g;
+ if (!g)
+ continue;
c = g->bw->current_content;
data = &cur->data;
use_buffer = cur->use_buffer;
@@ -1913,14 +1941,8 @@ void ro_gui_window_close(wimp_w w) {
ro_gui_menu_handle_action(w, BROWSER_NAVIGATE_UP, true);
}
}
- if (ro_gui_shift_pressed())
- return;
- ro_gui_url_complete_close(NULL, 0);
- ro_gui_dialog_close_persistent(w);
- ro_gui_wimp_event_finalise(w);
- browser_window_destroy(g->bw);
- return;
-
+ if (!ro_gui_shift_pressed())
+ browser_window_destroy(g->bw);
}