summaryrefslogtreecommitdiff
path: root/riscos
diff options
context:
space:
mode:
authorSteve Fryatt <stevef@netsurf-browser.org>2014-01-28 23:58:42 +0000
committerSteve Fryatt <stevef@netsurf-browser.org>2014-01-28 23:58:42 +0000
commit654b25ffa1bab41d346f3c55b9257750cd515b78 (patch)
treef327abb6c9f5b716095c0893b91c7b6730b6e79e /riscos
parent7cb0619fe8c39d189dbcfa4ecbd0db573ff250e6 (diff)
downloadnetsurf-654b25ffa1bab41d346f3c55b9257750cd515b78.tar.gz
netsurf-654b25ffa1bab41d346f3c55b9257750cd515b78.tar.bz2
Improve handling of Message_MenusDeleted so that we don't close whatever menu tree is open at the time.
Diffstat (limited to 'riscos')
-rw-r--r--riscos/gui.c3
-rw-r--r--riscos/menus.c23
-rw-r--r--riscos/menus.h1
3 files changed, 26 insertions, 1 deletions
diff --git a/riscos/gui.c b/riscos/gui.c
index 69d5b2932..e862e9345 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -1315,7 +1315,8 @@ void ro_gui_user_message(wimp_event_no event, wimp_message *message)
break;
case message_MENUS_DELETED:
- ro_gui_menu_closed();
+ ro_gui_menu_message_deleted((wimp_message_menus_deleted *)
+ &message->data);
break;
case message_CLAIM_ENTITY:
diff --git a/riscos/menus.c b/riscos/menus.c
index 29d514122..91232a160 100644
--- a/riscos/menus.c
+++ b/riscos/menus.c
@@ -118,6 +118,7 @@ wimp_menu *image_quality_menu, *proxy_type_menu, *languages_menu;
/**
* Create menu structures.
*/
+
void ro_gui_menu_init(void)
{
/* image quality menu */
@@ -439,6 +440,28 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning)
}
}
+
+/**
+ * Handle Message_MenusDeleted, removing our current record of an open menu
+ * if it matches the deleted menu handle.
+ *
+ * \param *deleted The message block.
+ */
+
+void ro_gui_menu_message_deleted(wimp_message_menus_deleted *deleted)
+{
+ if (deleted != NULL && deleted->menu == current_menu) {
+ ro_gui_wimp_event_menus_closed(current_menu_window,
+ current_menu_icon, current_menu);
+
+ current_menu = NULL;
+ current_menu_window = NULL;
+ current_menu_icon = 0;
+ current_menu_open = false;
+ }
+}
+
+
/**
* Update the current menu by sending it a Menu Prepare event through wimp_event
* and then reopening it if the contents has changed.
diff --git a/riscos/menus.h b/riscos/menus.h
index 033b01117..e2269b77c 100644
--- a/riscos/menus.h
+++ b/riscos/menus.h
@@ -173,6 +173,7 @@ void ro_gui_popup_menu(wimp_menu *menu, wimp_w w, wimp_i i);
void ro_gui_menu_window_changed(wimp_w from, wimp_w to);
void ro_gui_menu_selection(wimp_selection* selection);
void ro_gui_menu_warning(wimp_message_menu_warning *warning);
+void ro_gui_menu_message_deleted(wimp_message_menus_deleted *deleted);
void ro_gui_menu_refresh(wimp_menu *menu);
void ro_gui_menu_init_structure(wimp_menu *menu, int entries);
const char *ro_gui_menu_find_menu_entry_key(wimp_menu *menu,