diff options
author | Vincent Sanders <vince@kyllikki.org> | 2016-05-05 22:28:51 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2016-05-15 13:44:34 +0100 |
commit | d21447d096a320a08b3efb2b8768fad0dcdcfd64 (patch) | |
tree | 1a83814b7c9e94b2f13c473261f23dd3a17dee64 /riscos/dialog.c | |
parent | 2cbb337756d9af5bda4d594964d446439f602551 (diff) | |
download | netsurf-d21447d096a320a08b3efb2b8768fad0dcdcfd64.tar.gz netsurf-d21447d096a320a08b3efb2b8768fad0dcdcfd64.tar.bz2 |
move frontends into sub directory
Diffstat (limited to 'riscos/dialog.c')
-rw-r--r-- | riscos/dialog.c | 816 |
1 files changed, 0 insertions, 816 deletions
diff --git a/riscos/dialog.c b/riscos/dialog.c deleted file mode 100644 index d4356086d..000000000 --- a/riscos/dialog.c +++ /dev/null @@ -1,816 +0,0 @@ -/* - * Copyright 2003 Phil Mellor <monkeyson@users.sourceforge.net> - * Copyright 2005 James Bursa <bursa@users.sourceforge.net> - * Copyright 2003 John M Bell <jmb202@ecs.soton.ac.uk> - * Copyright 2005 Richard Wilson <info@tinct.net> - * Copyright 2004 Andrew Timmins <atimmins@blueyonder.co.uk> - * Copyright 2005 Adrian Lees <adrianl@users.sourceforge.net> - * Copyright 2014 Stephen Fryatt <stevef@netsurf-browser.org> - * - * This file is part of NetSurf, http://www.netsurf-browser.org/ - * - * NetSurf is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * NetSurf is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "utils/config.h" - -#include <assert.h> -#include <stddef.h> -#include <stdlib.h> -#include <string.h> -#include <oslib/colourtrans.h> -#include <oslib/osfile.h> -#include <oslib/osgbpb.h> -#include <oslib/osspriteop.h> -#include <oslib/wimp.h> - -#include "utils/nsoption.h" -#include "utils/log.h" -#include "utils/messages.h" -#include "utils/nsurl.h" -#include "desktop/version.h" -#include "desktop/browser.h" - -#include "riscos/configure.h" -#include "riscos/cookies.h" -#include "riscos/dialog.h" -#include "riscos/global_history.h" -#include "riscos/gui.h" -#include "riscos/hotlist.h" -#include "riscos/menus.h" -#include "riscos/save.h" -#include "riscos/sslcert.h" -#include "riscos/toolbar.h" -#include "riscos/url_complete.h" -#include "riscos/url_suggest.h" -#include "riscos/wimp.h" -#include "riscos/wimp_event.h" -#include "riscos/wimputils.h" - -#define ICON_ZOOM_VALUE 1 -#define ICON_ZOOM_DEC 2 -#define ICON_ZOOM_INC 3 -#define ICON_ZOOM_FRAMES 5 -#define ICON_ZOOM_CANCEL 7 -#define ICON_ZOOM_OK 8 - -/* The maximum number of persistent dialogues -*/ -#define MAX_PERSISTENT 64 - - -wimp_w dialog_info, dialog_saveas, - dialog_401li, - dialog_zoom, dialog_pageinfo, dialog_objinfo, dialog_tooltip, - dialog_warning, - dialog_folder, dialog_entry, dialog_search, dialog_print, - dialog_url_complete, dialog_openurl; - -struct gui_window *ro_gui_current_zoom_gui; - - -/* A simple mapping of parent and child -*/ -static struct { - wimp_w dialog; - wimp_w parent; -} 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); - -static bool ro_gui_dialog_zoom_apply(wimp_w w); - -/** - * Load and create dialogs from template file. - */ - -void ro_gui_dialog_init(void) -{ - /* warning dialog */ - dialog_warning = ro_gui_dialog_create("warning"); - ro_gui_wimp_event_register_ok(dialog_warning, ICON_WARNING_CONTINUE, - NULL); - ro_gui_wimp_event_set_help_prefix(dialog_warning, "HelpWarning"); - - /* tooltip for history */ - dialog_tooltip = ro_gui_dialog_create("tooltip"); - - /* configure window */ - ro_gui_configure_initialise(); - - /* 401 login window */ - ro_gui_401login_init(); - - /* theme installation */ - dialog_theme_install = ro_gui_dialog_create("theme_inst"); - ro_gui_wimp_event_register_cancel(dialog_theme_install, - ICON_THEME_INSTALL_CANCEL); - ro_gui_wimp_event_register_ok(dialog_theme_install, - ICON_THEME_INSTALL_INSTALL, - ro_gui_theme_install_apply); - ro_gui_wimp_event_set_help_prefix(dialog_theme_install, "HelpThemeInst"); - - /* search */ - ro_gui_search_init(); - - /* print */ - ro_gui_print_init(); - - /* about us */ - dialog_info = ro_gui_dialog_create("info"); - ro_gui_set_icon_string(dialog_info, 4, netsurf_version, true); - ro_gui_wimp_event_set_help_prefix(dialog_info, "HelpAppInfo"); - - /* page info */ - dialog_pageinfo = ro_gui_dialog_create("pageinfo"); - ro_gui_wimp_event_set_help_prefix(dialog_pageinfo, "HelpPageInfo"); - - /* object info */ - dialog_objinfo = ro_gui_dialog_create("objectinfo"); - ro_gui_wimp_event_set_help_prefix(dialog_objinfo, "HelpObjInfo"); - - /* save as */ - dialog_saveas = ro_gui_saveas_create("saveas"); - ro_gui_wimp_event_register_button(dialog_saveas, ICON_SAVE_ICON, - ro_gui_save_start_drag); - ro_gui_wimp_event_register_text_field(dialog_saveas, ICON_SAVE_PATH); - ro_gui_wimp_event_register_cancel(dialog_saveas, ICON_SAVE_CANCEL); - ro_gui_wimp_event_register_ok(dialog_saveas, ICON_SAVE_OK, - ro_gui_save_ok); - ro_gui_wimp_event_set_help_prefix(dialog_saveas, "HelpSaveAs"); - - /* url suggestion */ - dialog_url_complete = ro_gui_dialog_create("url_suggest"); - ro_gui_wimp_event_register_mouse_click(dialog_url_complete, - ro_gui_url_complete_click); - ro_gui_wimp_event_register_pointer_entering_window(dialog_url_complete, - ro_gui_url_complete_entering); - ro_gui_wimp_event_register_redraw_window(dialog_url_complete, - ro_gui_url_complete_redraw); - ro_gui_wimp_event_set_help_prefix(dialog_url_complete, "HelpAutoURL"); - - /* open URL */ - ro_gui_dialog_open_url_init(); - - /* scale view */ - dialog_zoom = ro_gui_dialog_create("zoom"); - ro_gui_wimp_event_register_numeric_field(dialog_zoom, ICON_ZOOM_VALUE, - ICON_ZOOM_INC, ICON_ZOOM_DEC, 10, 1600, 10, 0); - ro_gui_wimp_event_register_checkbox(dialog_zoom, ICON_ZOOM_FRAMES); - ro_gui_wimp_event_register_cancel(dialog_zoom, ICON_ZOOM_CANCEL); - ro_gui_wimp_event_register_ok(dialog_zoom, ICON_ZOOM_OK, - ro_gui_dialog_zoom_apply); - ro_gui_wimp_event_set_help_prefix(dialog_zoom, "HelpScaleView"); - - /* Treeview initialisation has moved to the end, to allow any - * associated dialogues to be set up first. - */ - - /* certificate verification window */ - ro_gui_cert_preinitialise(); - - /* hotlist window */ - ro_gui_hotlist_preinitialise(); - - /* global history window */ - ro_gui_global_history_preinitialise(); - - /* cookies window */ - ro_gui_cookies_preinitialise(); -} - - -/** - * Create a window from a template. - * - * \param template_name name of template to load - * \return window handle - * - * Exits through die() on error. - */ - -wimp_w ro_gui_dialog_create(const char *template_name) -{ - wimp_window *window; - wimp_w w; - os_error *error; - - window = ro_gui_dialog_load_template(template_name); - - /* create window */ - window->sprite_area = gui_sprites; - error = xwimp_create_window(window, &w); - if (error) { - LOG("xwimp_create_window: 0x%x: %s", error->errnum, error->errmess); - xwimp_close_template(); - die(error->errmess); - } - - /* the window definition is copied by the wimp and may be freed */ - free(window); - - return w; -} - - -/** - * Load a template without creating a window. - * - * \param template_name name of template to load - * \return window block - * - * Exits through die() on error. - */ - -wimp_window * ro_gui_dialog_load_template(const char *template_name) -{ - char name[20]; - int context, window_size, data_size; - char *data; - wimp_window *window; - os_error *error; - - /* Template names must be <= 11 chars long */ - assert(strlen(template_name) <= 11); - - /* wimp_load_template won't accept a const char * */ - strncpy(name, template_name, sizeof name); - - /* find required buffer sizes */ - error = xwimp_load_template(wimp_GET_SIZE, 0, 0, wimp_NO_FONTS, - name, 0, &window_size, &data_size, &context); - if (error) { - LOG("xwimp_load_template: 0x%x: %s", error->errnum, error->errmess); - xwimp_close_template(); - die(error->errmess); - } - if (!context) { - LOG("template '%s' missing", template_name); - xwimp_close_template(); - die("Template"); - } - - /* allocate space for indirected data and temporary window buffer */ - data = malloc(data_size); - window = malloc(window_size); - if (!data || !window) { - xwimp_close_template(); - die("NoMemory"); - } - - /* load template */ - error = xwimp_load_template(window, data, data + data_size, - wimp_NO_FONTS, name, 0, 0, 0, 0); - if (error) { - LOG("xwimp_load_template: 0x%x: %s", error->errnum, error->errmess); - xwimp_close_template(); - die(error->errmess); - } - - return window; -} - - -/** - * Open a dialog box, centred on the screen. - */ - -void ro_gui_dialog_open(wimp_w w) -{ - int screen_x, screen_y, dx, dy; - wimp_window_state state; - os_error *error; - - /* find screen centre in os units */ - ro_gui_screen_size(&screen_x, &screen_y); - screen_x /= 2; - screen_y /= 2; - - /* centre and open */ - state.w = w; - error = xwimp_get_window_state(&state); - if (error) { - LOG("xwimp_get_window_state: 0x%x: %s", error->errnum, error->errmess); - ro_warn_user("WimpError", error->errmess); - return; - } - dx = (state.visible.x1 - state.visible.x0) / 2; - dy = (state.visible.y1 - state.visible.y0) / 2; - state.visible.x0 = screen_x - dx; - state.visible.x1 = screen_x + dx; - state.visible.y0 = screen_y - dy; - state.visible.y1 = screen_y + dy; - state.next = wimp_TOP; - ro_gui_open_window_request(PTR_WIMP_OPEN(&state)); - - /* Set the caret position */ - ro_gui_set_caret_first(w); -} - - -/** - * Close a dialog box. - */ - -void ro_gui_dialog_close(wimp_w close) -{ - int i; - wimp_caret caret; - os_error *error; - - /* Check if we're a persistent window */ - for (i = 0; i < MAX_PERSISTENT; i++) { - if (persistent_dialog[i].dialog == close) { - /* We are => invalidate record */ - persistent_dialog[i].parent = NULL; - persistent_dialog[i].dialog = NULL; - break; - } - } - - /* Close any child windows */ - ro_gui_dialog_close_persistent(close); - - /* Give the caret back to the parent window. This code relies on - the fact that only tree windows and browser windows open - persistent dialogues, as the caret gets placed to no icon. - */ - error = xwimp_get_caret_position(&caret); - if (error) { - LOG("xwimp_get_caret_position: 0x%x: %s", error->errnum, error->errmess); - ro_warn_user("WimpError", error->errmess); - } else if (caret.w == close) { - /* Check if we are a persistent window */ - if (i < MAX_PERSISTENT) { - error = xwimp_set_caret_position( - persistent_dialog[i].parent, - wimp_ICON_WINDOW, -100, -100, - 32, -1); - /* parent may have been closed first */ - if ((error) && (error->errnum != 0x287)) { - LOG("xwimp_set_caret_position: 0x%x: %s", error->errnum, error->errmess); - ro_warn_user("WimpError", error->errmess); - } - } - } - - error = xwimp_close_window(close); - if (error) { - LOG("xwimp_close_window: 0x%x: %s", error->errnum, error->errmess); - ro_warn_user("WimpError", error->errmess); - } -} - - -/** - * Moves a window to the top of the stack. - * - * If the window is currently closed then: - * - * * The window is opened in the centre of the screen (at the supplied size) - * * Any toolbar editing session is stopped - * * The scroll position is set to the top of the window - * - * If the window is currently open then: - * - * * The window is brought to the top of the stack - * - * \param w the window to show - * \param toolbar the toolbar to consider - * \param width the window width if it is currently closed (or 0 to retain) - * \param height the window height if it is currently closed (or 0 to retain) - * \return true if the window was previously open - */ -bool ro_gui_dialog_open_top(wimp_w w, struct toolbar *toolbar, - int width, int height) { - os_error *error; - int screen_width, screen_height; - wimp_window_state state; - bool open; - - state.w = w; - error = xwimp_get_window_state(&state); - if (error) { - ro_warn_user("WimpError", error->errmess); - return false; - } - - /* if we're open we jump to the top of the stack, if not then we - * open in the centre of the screen. */ - open = state.flags & wimp_WINDOW_OPEN; - if (!open) { - int dimension; - int scroll_width; - /* cancel any editing */ - if (ro_toolbar_get_editing(toolbar)) - ro_toolbar_toggle_edit(toolbar); - - /* move to the centre */ - ro_gui_screen_size(&screen_width, &screen_height); - dimension = ((width == 0) ? - (state.visible.x1 - state.visible.x0) : width); - scroll_width = ro_get_vscroll_width(w); - state.visible.x0 = (screen_width - (dimension + scroll_width)) / 2; - state.visible.x1 = state.visible.x0 + dimension; - dimension = ((height == 0) ? - (state.visible.y1 - state.visible.y0) : height); - state.visible.y0 = (screen_height - dimension) / 2; - state.visible.y1 = state.visible.y0 + dimension; - state.xscroll = 0; - state.yscroll = 0; - if (toolbar) - state.yscroll = ro_toolbar_height(toolbar); - } - - /* open the window at the top of the stack */ - state.next = wimp_TOP; - ro_gui_open_window_request(PTR_WIMP_OPEN(&state)); - return open; -} - - -/** - * Open window at the location of the pointer. - */ - -void ro_gui_dialog_open_at_pointer(wimp_w w) -{ - wimp_pointer ptr; - os_error *error; - - /* get the pointer position */ - error = xwimp_get_pointer_info(&ptr); - if (error) { - LOG("xwimp_get_pointer_info: 0x%x: %s", error->errnum, error->errmess); - ro_warn_user("WimpError", error->errmess); - return; - } - - ro_gui_dialog_open_xy(w, ptr.pos.x - 64, ptr.pos.y); -} - - -/** - * Open window at a specified location. - */ - -void ro_gui_dialog_open_xy(wimp_w w, int x, int y) -{ - wimp_window_state state; - os_error *error; - int dx, dy; - - /* move the window */ - state.w = w; - error = xwimp_get_window_state(&state); - if (error) { - LOG("xwimp_get_window_state: 0x%x: %s", error->errnum, error->errmess); - ro_warn_user("WimpError", error->errmess); - return; - } - dx = (state.visible.x1 - state.visible.x0); - dy = (state.visible.y1 - state.visible.y0); - state.visible.x0 = x; - state.visible.x1 = x + dx; - state.visible.y0 = y - dy; - state.visible.y1 = y; - - /* if the window is already open, close it first so that it opens fully - * on screen */ - error = xwimp_close_window(w); - if (error) { - LOG("xwimp_close_window: 0x%x: %s", error->errnum, error->errmess); - ro_warn_user("WimpError", error->errmess); - return; - } - - /* open the window at the top of the stack */ - state.next = wimp_TOP; - ro_gui_open_window_request(PTR_WIMP_OPEN(&state)); -} - - -/** - * Opens a window at the centre of either another window or the screen - * - * /param parent the parent window (NULL for centre of screen) - * /param child the child window - */ -void ro_gui_dialog_open_centre_parent(wimp_w parent, wimp_w child) { - os_error *error; - wimp_window_state state; - int mid_x, mid_y; - int dimension, scroll_width; - - /* get the parent window state */ - if (parent) { - state.w = parent; - error = xwimp_get_window_state(&state); - if (error) { - LOG("xwimp_get_window_state: 0x%x: %s", error->errnum, error->errmess); - ro_warn_user("WimpError", error->errmess); - return; - } - scroll_width = ro_get_vscroll_width(parent); - mid_x = (state.visible.x0 + state.visible.x1 + scroll_width); - mid_y = (state.visible.y0 + state.visible.y1); - } else { - ro_gui_screen_size(&mid_x, &mid_y); - } - mid_x /= 2; - mid_y /= 2; - - /* get the child window state */ - state.w = child; - error = xwimp_get_window_state(&state); - if (error) { - LOG("xwimp_get_window_state: 0x%x: %s", error->errnum, error->errmess); - ro_warn_user("WimpError", error->errmess); - return; - } - - /* move to the centre of the parent at the top of the stack */ - dimension = state.visible.x1 - state.visible.x0; - scroll_width = ro_get_vscroll_width(history_window); - state.visible.x0 = mid_x - (dimension + scroll_width) / 2; - state.visible.x1 = state.visible.x0 + dimension; - dimension = state.visible.y1 - state.visible.y0; - state.visible.y0 = mid_y - dimension / 2; - state.visible.y1 = state.visible.y0 + dimension; - state.next = wimp_TOP; - ro_gui_open_window_request(PTR_WIMP_OPEN(&state)); -} - - -/** - * Open a persistent dialog box relative to the pointer. - * - * \param parent the owning window (NULL for no owner) - * \param w the dialog window - * \param pointer open the window at the pointer (centre of the parent - * otherwise) - */ - -void ro_gui_dialog_open_persistent(wimp_w parent, wimp_w w, bool pointer) { - - if (pointer) - ro_gui_dialog_open_at_pointer(w); - else - ro_gui_dialog_open_centre_parent(parent, w); - - /* todo: use wimp_event definitions rather than special cases */ - if ((w == dialog_pageinfo) || (w == dialog_objinfo)) - ro_gui_wimp_update_window_furniture(w, wimp_WINDOW_CLOSE_ICON, - wimp_WINDOW_CLOSE_ICON); - ro_gui_dialog_add_persistent(parent, w); - ro_gui_set_caret_first(w); -} - - -void ro_gui_dialog_add_persistent(wimp_w parent, wimp_w w) { - int i; - - /* all persistant windows have a back icon */ - ro_gui_wimp_update_window_furniture(w, wimp_WINDOW_BACK_ICON, - wimp_WINDOW_BACK_ICON); - - /* Add a mapping - */ - if ((parent == NULL) || (parent == wimp_ICON_BAR)) - return; - for (i = 0; i < MAX_PERSISTENT; i++) { - if (persistent_dialog[i].dialog == NULL || - persistent_dialog[i].dialog == w) { - persistent_dialog[i].dialog = w; - persistent_dialog[i].parent = parent; - return; - } - } - LOG("Unable to map persistent dialog to parent."); - return; -} - - -/** - * Close persistent dialogs associated with a window. - * - * \param parent the window to close children of - */ - -void ro_gui_dialog_close_persistent(wimp_w parent) { - int i; - wimp_w w; - - /* Check our mappings. - * - * The window handle is copied into w before proceeding, as - * ro_gui_dialog_close() will NULL persistent_dialog[i].dialog as - * part of the closing process. This would mean that the subsequent - * event dispatch would fail. (These events are logged to allow - * side effects to be investigated -- this code hasn't worked before). - */ - for (i = 0; i < MAX_PERSISTENT; i++) { - if (persistent_dialog[i].parent == parent && - persistent_dialog[i].dialog != NULL) { - w = persistent_dialog[i].dialog; - ro_gui_dialog_close(w); - if (ro_gui_wimp_event_close_window(w)) - LOG("Persistent dialog close event: 0x%x", (unsigned)w); - persistent_dialog[i].parent = NULL; - persistent_dialog[i].dialog = NULL; - } - } -} - - -/** - * Save the current options. - */ - -void ro_gui_save_options(void) -{ - nsoption_write("<NetSurf$ChoicesSave>", NULL, NULL); -} - -bool ro_gui_dialog_zoom_apply(wimp_w w) { - unsigned int scale; - bool all; - - scale = atoi(ro_gui_get_icon_string(w, ICON_ZOOM_VALUE)); - all = ro_gui_get_icon_selected_state(w, ICON_ZOOM_FRAMES); - ro_gui_window_set_scale(ro_gui_current_zoom_gui, scale * 0.01); - return true; -} - - -/** - * Prepares the Scale view dialog. - */ - -void ro_gui_dialog_prepare_zoom(struct gui_window *g) -{ - char scale_buffer[8]; - sprintf(scale_buffer, "%.0f", browser_window_get_scale(g->bw) * 100); - ro_gui_set_icon_string(dialog_zoom, ICON_ZOOM_VALUE, scale_buffer, true); - ro_gui_set_icon_selected_state(dialog_zoom, ICON_ZOOM_FRAMES, true); - ro_gui_set_icon_shaded_state(dialog_zoom, ICON_ZOOM_FRAMES, true); - ro_gui_current_zoom_gui = g; - ro_gui_wimp_event_memorise(dialog_zoom); -} - -/** - * Update the Scale View dialog to reflect the current window settings - * - * \param g the gui_window to update for - */ -void ro_gui_dialog_update_zoom(struct gui_window *g) { - if (g == ro_gui_current_zoom_gui) - ro_gui_dialog_prepare_zoom(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; - nsurl *url; - nserror error; - - urltxt = ro_gui_get_icon_string(w, ICON_OPENURL_URL); - url2 = strdup(urltxt); /** @todo why is this copied */ - if (url2 == NULL) { - return false; - } - - error = nsurl_create(url2, &url); - free(url2); - if (error == NSERROR_OK) { - error = browser_window_create(BW_CREATE_HISTORY, - url, - NULL, - NULL, - NULL); - nsurl_unref(url); - } - if (error != NSERROR_OK) { - ro_warn_user(messages_get_errorcode(error), 0); - return false; - } - - return true; - -} - - -/** - * Prepares the Open URL dialog. - */ - -void ro_gui_dialog_prepare_open_url(void) -{ - ro_gui_set_icon_string(dialog_openurl, ICON_OPENURL_URL, "", true); - ro_gui_set_icon_shaded_state(dialog_openurl, - ICON_OPENURL_MENU, !ro_gui_url_suggest_prepare_menu()); - ro_gui_wimp_event_memorise(dialog_openurl); -} - - -/** - * Callback to prepare menus in the Open URL dialog. At present, this - * only has to handle the URL Suggestion pop-up. - * - * \param w The window handle owning the menu. - * \param i The icon handle owning the menu. - * \param *menu The menu to be prepared. - * \param *pointer The associated mouse click event block, or NULL - * on an Adjust-click re-opening. - * \return true if the event was handled; false if not. - */ - -bool ro_gui_dialog_open_url_menu_prepare(wimp_w w, wimp_i i, wimp_menu *menu, - wimp_pointer *pointer) -{ - if (menu != ro_gui_url_suggest_menu || i != ICON_OPENURL_MENU) - return false; - - if (pointer != NULL) - return ro_gui_url_suggest_prepare_menu(); - - return true; -} |