From 759ff816db2f64b83fa260b6523f9871feb05d7d Mon Sep 17 00:00:00 2001 From: Richard Wilson Date: Tue, 10 May 2005 22:49:41 +0000 Subject: [project @ 2005-05-10 22:49:41 by rjw] Implement RETURN for search and open url dialogs. Add recent URL menu to open url dialog. svn path=/import/netsurf/; revision=1716 --- riscos/dialog.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- riscos/gui.h | 1 + riscos/menus.c | 15 ++++++++---- 3 files changed, 84 insertions(+), 6 deletions(-) (limited to 'riscos') diff --git a/riscos/dialog.c b/riscos/dialog.c index 599355ebf..53316e71f 100644 --- a/riscos/dialog.c +++ b/riscos/dialog.c @@ -424,12 +424,23 @@ bool ro_gui_dialog_keypress(wimp_key *key) return true; } else if (key->w == dialog_saveas) ro_gui_save_ok(key->w); + else if (key->w == dialog_openurl) { + pointer.w = key->w; + pointer.i = ICON_OPENURL_OPEN; + pointer.buttons = wimp_CLICK_SELECT; + ro_gui_dialog_click_open_url(&pointer); + } else if (key->w == dialog_search) { + pointer.w = key->w; + pointer.i = ICON_SEARCH_FIND; + pointer.buttons = wimp_CLICK_SELECT; + ro_gui_search_click(&pointer); + } } #ifdef WITH_AUTH if (key->w == dialog_401li) return ro_gui_401login_keypress(key); #endif - + return false; } @@ -1251,9 +1262,64 @@ void ro_gui_dialog_prepare_zoom(struct gui_window *g) void ro_gui_dialog_click_open_url(wimp_pointer *pointer) { + wimp_window_state open; url_func_result res; const char *url; char *url2; + bool reopen_window = false; + wimp_caret caret; + os_error *error; + + if (pointer->i == ICON_OPENURL_MENU) { + /* we can't have two open menus, so we close the iconbar menu + * and detach our window from it */ + if (current_menu == iconbar_menu) { + reopen_window = true; + open.w = dialog_openurl; + error = xwimp_get_window_state(&open); + if (error) { + LOG(("xwimp_get_window_state: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + return; + } + error = xwimp_get_caret_position(&caret); + if (error) { + LOG(("xwimp_get_caret_position: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + return; + } + + ro_gui_menu_closed(); + gui_poll(true); + ro_gui_wimp_update_window_furniture(dialog_openurl, + wimp_WINDOW_BACK_ICON, + wimp_WINDOW_BACK_ICON); + error = xwimp_open_window((wimp_open *) &open); + if (error) { + LOG(("xwimp_open_window: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + return; + } + if (caret.w == dialog_openurl) { + error = xwimp_set_caret_position(dialog_openurl, + ICON_OPENURL_URL, + caret.pos.x, caret.pos.y, + -1, caret.index); + if (error) { + LOG(("xwimp_set_caret_position: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + } + } + } + ro_gui_popup_menu(url_suggest_menu, + dialog_openurl, + ICON_OPENURL_MENU); + return; + } if ((pointer->i != ICON_OPENURL_OPEN) && (pointer->i != ICON_OPENURL_CANCEL)) @@ -1288,7 +1354,11 @@ void ro_gui_dialog_click_open_url(wimp_pointer *pointer) void ro_gui_dialog_prepare_open_url(void) { - ro_gui_set_icon_string(dialog_openurl, ICON_OPENURL_URL, "www."); + int suggestions; + ro_gui_set_icon_string(dialog_openurl, ICON_OPENURL_URL, ""); + global_history_get_recent(&suggestions); + ro_gui_set_icon_shaded_state(dialog_openurl, + ICON_OPENURL_MENU, (suggestions <= 0)); } diff --git a/riscos/gui.h b/riscos/gui.h index a24b7653a..cfa96c62f 100644 --- a/riscos/gui.h +++ b/riscos/gui.h @@ -421,5 +421,6 @@ void ro_gui_theme_install_click(wimp_pointer *pointer); #define ICON_OPENURL_URL 1 #define ICON_OPENURL_CANCEL 2 #define ICON_OPENURL_OPEN 3 +#define ICON_OPENURL_MENU 4 #endif diff --git a/riscos/menus.c b/riscos/menus.c index f27db2b70..e5f719e16 100644 --- a/riscos/menus.c +++ b/riscos/menus.c @@ -570,11 +570,18 @@ void ro_gui_menu_selection(wimp_selection *selection) { /* perform non-automated actions */ if (current_menu == url_suggest_menu) { g = ro_gui_toolbar_lookup(current_menu_window); - assert(g); - browser_window_go(g->bw, - url_suggest_menu->entries[selection->items[0]]. + if (g) + browser_window_go(g->bw, + url_suggest_menu->entries[selection->items[0]]. data.indirected_text.text, 0); - global_history_add_recent(url_suggest_menu-> + else + ro_gui_set_icon_string(dialog_openurl, ICON_OPENURL_URL, + url_suggest_menu->entries[selection->items[0]]. + data.indirected_text.text); +/* browser_window_create( + url_suggest_menu->entries[selection->items[0]]. + data.indirected_text.text, 0, 0); +*/ global_history_add_recent(url_suggest_menu-> entries[selection->items[0]]. data.indirected_text.text); } else if (current_menu == proxy_auth_menu) { -- cgit v1.2.3