diff options
author | Steve Fryatt <stevef@netsurf-browser.org> | 2014-01-26 14:35:57 +0000 |
---|---|---|
committer | Steve Fryatt <stevef@netsurf-browser.org> | 2014-01-26 14:35:57 +0000 |
commit | def97156d3c0cbeacf2996859f16f727d44eb4e8 (patch) | |
tree | 0a8f663aa182b7815307afde33c55a0d4d1a17df /riscos/dialog.c | |
parent | 89992958d251cbb1cbd634a0dd89d1161de35041 (diff) | |
download | netsurf-def97156d3c0cbeacf2996859f16f727d44eb4e8.tar.gz netsurf-def97156d3c0cbeacf2996859f16f727d44eb4e8.tar.bz2 |
Make Open URL dialogue allocate memory for the URL field.
Add global constant for URL length, to manage both URL Bar and Open URL.
Diffstat (limited to 'riscos/dialog.c')
-rw-r--r-- | riscos/dialog.c | 75 |
1 files changed, 66 insertions, 9 deletions
diff --git a/riscos/dialog.c b/riscos/dialog.c index 147dce9f8..5fe1d27d6 100644 --- a/riscos/dialog.c +++ b/riscos/dialog.c @@ -85,6 +85,7 @@ static struct { } persistent_dialog[MAX_PERSISTENT]; +static bool ro_gui_dialog_open_url_init(void); static bool ro_gui_dialog_openurl_apply(wimp_w w); static bool ro_gui_dialog_open_url_menu_prepare(wimp_w w, wimp_i i, wimp_menu *menu, wimp_pointer *pointer); @@ -161,15 +162,7 @@ void ro_gui_dialog_init(void) ro_gui_wimp_event_set_help_prefix(dialog_url_complete, "HelpAutoURL"); /* open URL */ - dialog_openurl = ro_gui_dialog_create("open_url"); - ro_gui_wimp_event_register_menu_gright(dialog_openurl, ICON_OPENURL_URL, - ICON_OPENURL_MENU, ro_gui_url_suggest_menu); - ro_gui_wimp_event_register_cancel(dialog_openurl, ICON_OPENURL_CANCEL); - ro_gui_wimp_event_register_ok(dialog_openurl, ICON_OPENURL_OPEN, - ro_gui_dialog_openurl_apply); - ro_gui_wimp_event_register_menu_prepare(dialog_openurl, - ro_gui_dialog_open_url_menu_prepare); - ro_gui_wimp_event_set_help_prefix(dialog_openurl, "HelpOpenURL"); + ro_gui_dialog_open_url_init(); /* scale view */ dialog_zoom = ro_gui_dialog_create("zoom"); @@ -702,6 +695,70 @@ void ro_gui_dialog_update_zoom(struct gui_window *g) { } +/** + * Create the Open URL dialogue, allocating storage for the URL field icon + * as we go. + * + * \return true on success; false on failure (although errors with + * the templates or memory allocation will exit via die()). + */ + +static bool ro_gui_dialog_open_url_init(void) +{ + wimp_window *definition; + char *buffer; + os_error *error; + + definition = ro_gui_dialog_load_template("open_url"); + + /* _load_template() should die on any error, so we trust its data. */ + + assert(definition != NULL); + + /* Create the dialogue, with modifications. */ + + if ((definition->icons[ICON_OPENURL_URL].flags & wimp_ICON_INDIRECTED) + == 0) { + LOG(("open_url URL icon not indirected")); + xwimp_close_template(); + die("Template"); + } + + buffer = malloc(RO_GUI_MAX_URL_SIZE); + if (buffer == NULL) { + xwimp_close_template(); + die("NoMemory"); + } + + definition->icons[ICON_OPENURL_URL].data.indirected_text.text = buffer; + definition->icons[ICON_OPENURL_URL].data.indirected_text.size = + RO_GUI_MAX_URL_SIZE; + definition->sprite_area = gui_sprites; + + error = xwimp_create_window(definition, &dialog_openurl); + if (error != NULL) { + LOG(("xwimp_create_window: 0x%x: %s", + error->errnum, error->errmess)); + xwimp_close_template(); + die(error->errmess); + } + + free(definition); + + ro_gui_wimp_event_register_menu_gright(dialog_openurl, ICON_OPENURL_URL, + ICON_OPENURL_MENU, ro_gui_url_suggest_menu); + ro_gui_wimp_event_register_cancel(dialog_openurl, ICON_OPENURL_CANCEL); + ro_gui_wimp_event_register_ok(dialog_openurl, ICON_OPENURL_OPEN, + ro_gui_dialog_openurl_apply); + ro_gui_wimp_event_register_menu_prepare(dialog_openurl, + ro_gui_dialog_open_url_menu_prepare); + ro_gui_wimp_event_set_help_prefix(dialog_openurl, "HelpOpenURL"); + + return true; +} + + + bool ro_gui_dialog_openurl_apply(wimp_w w) { const char *urltxt; char *url2; |