From ea44d84833942c6de84b4aa58ad594754a0a0ac7 Mon Sep 17 00:00:00 2001 From: Richard Wilson Date: Wed, 5 Jul 2006 16:50:35 +0000 Subject: Make adjust-back/forwards/up open content in a new window (implement 1431600) svn path=/trunk/netsurf/; revision=2717 --- riscos/window.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 6 deletions(-) (limited to 'riscos/window.c') diff --git a/riscos/window.c b/riscos/window.c index 9ffc0dc20..255cee5c0 100644 --- a/riscos/window.c +++ b/riscos/window.c @@ -1374,6 +1374,7 @@ void ro_gui_window_mouse_at(struct gui_window *g, wimp_pointer *pointer) bool ro_gui_toolbar_click(wimp_pointer *pointer) { struct gui_window *g = ro_gui_toolbar_lookup(pointer->w); + struct browser_window *new_bw; /* toolbars in the options window have no gui_window */ if (!g) @@ -1401,13 +1402,27 @@ bool ro_gui_toolbar_click(wimp_pointer *pointer) */ switch (pointer->i) { case ICON_TOOLBAR_BACK: - ro_gui_menu_handle_action(g->window, - BROWSER_NAVIGATE_BACK, true); + if (pointer->buttons == wimp_CLICK_ADJUST) { + new_bw = browser_window_create(NULL, + g->bw, NULL, false); + ro_gui_menu_handle_action(new_bw->window->window, + BROWSER_NAVIGATE_BACK, true); + } else { + ro_gui_menu_handle_action(g->window, + BROWSER_NAVIGATE_BACK, true); + } break; case ICON_TOOLBAR_FORWARD: - ro_gui_menu_handle_action(g->window, - BROWSER_NAVIGATE_FORWARD, true); + if (pointer->buttons == wimp_CLICK_ADJUST) { + new_bw = browser_window_create(NULL, + g->bw, NULL, false); + ro_gui_menu_handle_action(new_bw->window->window, + BROWSER_NAVIGATE_FORWARD, true); + } else { + ro_gui_menu_handle_action(g->window, + BROWSER_NAVIGATE_FORWARD, true); + } break; case ICON_TOOLBAR_STOP: @@ -1469,8 +1484,18 @@ bool ro_gui_toolbar_click(wimp_pointer *pointer) BROWSER_PRINT, true); break; case ICON_TOOLBAR_UP: - ro_gui_menu_handle_action(g->window, - BROWSER_NAVIGATE_UP, true); + if (pointer->buttons == wimp_CLICK_ADJUST) { + if (g->bw && g->bw->current_content) { + new_bw = browser_window_create(NULL, + g->bw, NULL, false); + /* do it without loading the content into the new window */ + ro_gui_window_navigate_up(new_bw->window, + g->bw->current_content->url); + } + } else { + ro_gui_menu_handle_action(g->window, + BROWSER_NAVIGATE_UP, true); + } break; case ICON_TOOLBAR_URL: if (pointer->buttons & (wimp_DRAG_SELECT | wimp_DRAG_ADJUST)) { @@ -3064,3 +3089,28 @@ void ro_gui_window_iconise(struct gui_window *g, wimp_full_message_window_info * free(area); } + + +/** + * Navigate up one level + * + * \param g the gui_window to open the parent link in + * \param url the URL to open the parent of + */ +bool ro_gui_window_navigate_up(struct gui_window *g, const char *url) { + char *parent; + url_func_result res; + bool compare; + + if (!g || (!g->bw)) + return false; + + res = url_parent(url, &parent); + if (res == URL_FUNC_OK) { + res = url_compare(url, parent, &compare); + if (!compare && (res == URL_FUNC_OK)) + browser_window_go(g->bw, parent, 0, true); + free(parent); + } + return true; +} -- cgit v1.2.3