summaryrefslogtreecommitdiff
path: root/frontends/riscos/menus.c
diff options
Diffstat (limited to 'frontends/riscos/menus.c')
-rw-r--r--frontends/riscos/menus.c73
1 files changed, 72 insertions, 1 deletions
diff --git a/frontends/riscos/menus.c b/frontends/riscos/menus.c
index a6e978a6c..c4083e2b1 100644
--- a/frontends/riscos/menus.c
+++ b/frontends/riscos/menus.c
@@ -38,6 +38,7 @@
#include "utils/messages.h"
#include "utils/utf8.h"
#include "desktop/cookie_manager.h"
+#include "desktop/searchweb.h"
#include "riscos/dialog.h"
#include "riscos/configure.h"
@@ -101,7 +102,7 @@ wimp_w current_menu_window;
/** Icon that owns the current menu (only valid for popup menus) */
static wimp_i current_menu_icon;
/** The available menus */
-wimp_menu *image_quality_menu, *proxy_type_menu, *languages_menu;
+wimp_menu *image_quality_menu, *proxy_type_menu, *languages_menu, *search_provider_menu;
/* the values given in PRM 3-157 for how to check menus/windows are
* incorrect so we use a hack of checking if the sub-menu has bit 0
@@ -113,6 +114,74 @@ wimp_menu *image_quality_menu, *proxy_type_menu, *languages_menu;
* Create menu structures.
*/
+/**
+ * create a search provider menu.
+ *
+ * The menu is limited to 40 entries which ought to be sufficient
+ */
+static wimp_menu *ro_gui_menu_init_search_provider(void)
+{
+ static struct ns_menu search_provider_definition = {
+ "SearchProvider", {
+ { "searchprovider00", NO_ACTION, 0 },
+ { "searchprovider01", NO_ACTION, 0 },
+ { "searchprovider02", NO_ACTION, 0 },
+ { "searchprovider03", NO_ACTION, 0 },
+ { "searchprovider04", NO_ACTION, 0 },
+ { "searchprovider05", NO_ACTION, 0 },
+ { "searchprovider06", NO_ACTION, 0 },
+ { "searchprovider07", NO_ACTION, 0 },
+ { "searchprovider08", NO_ACTION, 0 },
+ { "searchprovider09", NO_ACTION, 0 },
+ { "searchprovider10", NO_ACTION, 0 },
+ { "searchprovider11", NO_ACTION, 0 },
+ { "searchprovider12", NO_ACTION, 0 },
+ { "searchprovider13", NO_ACTION, 0 },
+ { "searchprovider14", NO_ACTION, 0 },
+ { "searchprovider15", NO_ACTION, 0 },
+ { "searchprovider16", NO_ACTION, 0 },
+ { "searchprovider17", NO_ACTION, 0 },
+ { "searchprovider18", NO_ACTION, 0 },
+ { "searchprovider19", NO_ACTION, 0 },
+ { "searchprovider20", NO_ACTION, 0 },
+ { "searchprovider21", NO_ACTION, 0 },
+ { "searchprovider22", NO_ACTION, 0 },
+ { "searchprovider23", NO_ACTION, 0 },
+ { "searchprovider24", NO_ACTION, 0 },
+ { "searchprovider25", NO_ACTION, 0 },
+ { "searchprovider26", NO_ACTION, 0 },
+ { "searchprovider27", NO_ACTION, 0 },
+ { "searchprovider28", NO_ACTION, 0 },
+ { "searchprovider29", NO_ACTION, 0 },
+ { "searchprovider30", NO_ACTION, 0 },
+ { "searchprovider31", NO_ACTION, 0 },
+ { "searchprovider32", NO_ACTION, 0 },
+ { "searchprovider33", NO_ACTION, 0 },
+ { "searchprovider34", NO_ACTION, 0 },
+ { "searchprovider35", NO_ACTION, 0 },
+ { "searchprovider36", NO_ACTION, 0 },
+ { "searchprovider37", NO_ACTION, 0 },
+ { "searchprovider38", NO_ACTION, 0 },
+ { "searchprovider39", NO_ACTION, 0 },
+ { NULL, 0, 0 }
+ }
+ };
+ ssize_t iter = -1;
+ const char *name;
+ unsigned int provider = 0;
+
+ iter = search_web_iterate_providers(iter, &name);
+ while ((iter != -1) &&
+ (search_provider_definition.entries[provider].text != NULL)) {
+ messages_add_key_value(search_provider_definition.entries[provider].text, name);
+ provider++;
+ iter = search_web_iterate_providers(iter, &name);
+ }
+ search_provider_definition.entries[provider].text = NULL;
+
+ return ro_gui_menu_define_menu(&search_provider_definition);
+}
+
void ro_gui_menu_init(void)
{
/* image quality menu */
@@ -196,6 +265,8 @@ void ro_gui_menu_init(void)
}
};
languages_menu = ro_gui_menu_define_menu(&lang_definition);
+
+ search_provider_menu = ro_gui_menu_init_search_provider();
}
close