summaryrefslogtreecommitdiff
path: root/riscos
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2014-11-13 21:52:08 +0000
committerVincent Sanders <vince@kyllikki.org>2014-11-13 21:52:08 +0000
commit79e501075a0c301f435cf579518900e393be6fbf (patch)
tree2a75077894650e493c95d1062cc4945980985309 /riscos
parent9fde3502b659d3858cd1978d2c6535c57efbe924 (diff)
downloadnetsurf-79e501075a0c301f435cf579518900e393be6fbf.tar.gz
netsurf-79e501075a0c301f435cf579518900e393be6fbf.tar.bz2
make the form select menu API smaller.
By hiding all but the form selection menu option structure from code outside of render this reduces the API to the absolute minimum to support this feature.
Diffstat (limited to 'riscos')
-rw-r--r--riscos/gui.h1
-rw-r--r--riscos/window.c37
2 files changed, 23 insertions, 15 deletions
diff --git a/riscos/gui.h b/riscos/gui.h
index 9e7704f39..4e9ce6505 100644
--- a/riscos/gui.h
+++ b/riscos/gui.h
@@ -60,7 +60,6 @@ extern wimp_w current_menu_window;
extern bool current_menu_open;
extern wimp_menu *recent_search_menu; /* search.c */
extern wimp_w history_window;
-extern struct form_control *current_gadget;
extern bool gui_redraw_debug;
extern osspriteop_area *gui_sprites;
extern bool dialog_folder_add, dialog_entry_add, hotlist_insert;
diff --git a/riscos/window.c b/riscos/window.c
index 61d5ea8a0..abb249245 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -4572,7 +4572,7 @@ void ro_gui_window_default_options(struct gui_window *gui)
bool ro_gui_window_prepare_form_select_menu(struct gui_window *g,
struct form_control *control)
{
- unsigned int i, entries;
+ unsigned int item, entries;
char *text_convert, *temp;
struct form_option *option;
bool reopen = true;
@@ -4580,19 +4580,26 @@ bool ro_gui_window_prepare_form_select_menu(struct gui_window *g,
assert(control);
- for (entries = 0, option = control->data.select.items; option;
- option = option->next)
+ /* enumerate the entries */
+ entries = 0;
+ option = form_select_get_option(control, entries);
+ while (option != NULL) {
entries++;
+ option = form_select_get_option(control, item);
+ }
+
if (entries == 0) {
+ /* no menu to display */
ro_gui_menu_destroy();
return false;
}
+ /* free riscos menu if there already is one */
if ((gui_form_select_menu) && (control != gui_form_select_control)) {
- for (i = 0; ; i++) {
- free(gui_form_select_menu->entries[i].data.
+ for (item = 0; ; item++) {
+ free(gui_form_select_menu->entries[item].data.
indirected_text.text);
- if (gui_form_select_menu->entries[i].menu_flags &
+ if (gui_form_select_menu->entries[item].menu_flags &
wimp_MENU_LAST)
break;
}
@@ -4601,6 +4608,7 @@ bool ro_gui_window_prepare_form_select_menu(struct gui_window *g,
gui_form_select_menu = 0;
}
+ /* allocate new riscos menu */
if (!gui_form_select_menu) {
reopen = false;
gui_form_select_menu = malloc(wimp_SIZEOF_MENU(entries));
@@ -4624,11 +4632,12 @@ bool ro_gui_window_prepare_form_select_menu(struct gui_window *g,
ro_gui_menu_init_structure(gui_form_select_menu, entries);
}
- for (i = 0, option = control->data.select.items; option;
- i++, option = option->next) {
- gui_form_select_menu->entries[i].menu_flags = 0;
+ /* initialise menu entries from form control */
+ for (item = 0; item < entries; item++) {
+ option = form_select_get_option(control, item);
+ gui_form_select_menu->entries[item].menu_flags = 0;
if (option->selected)
- gui_form_select_menu->entries[i].menu_flags =
+ gui_form_select_menu->entries[item].menu_flags =
wimp_MENU_TICKED;
if (!reopen) {
@@ -4659,17 +4668,17 @@ bool ro_gui_window_prepare_form_select_menu(struct gui_window *g,
free(temp);
- gui_form_select_menu->entries[i].data.indirected_text.text =
+ gui_form_select_menu->entries[item].data.indirected_text.text =
text_convert;
- gui_form_select_menu->entries[i].data.indirected_text.size =
- strlen(gui_form_select_menu->entries[i].
+ gui_form_select_menu->entries[item].data.indirected_text.size =
+ strlen(gui_form_select_menu->entries[item].
data.indirected_text.text) + 1;
}
}
gui_form_select_menu->entries[0].menu_flags |=
wimp_MENU_TITLE_INDIRECTED;
- gui_form_select_menu->entries[i - 1].menu_flags |= wimp_MENU_LAST;
+ gui_form_select_menu->entries[item - 1].menu_flags |= wimp_MENU_LAST;
return true;
}