summaryrefslogtreecommitdiff
path: root/riscos/menus.c
diff options
context:
space:
mode:
authorRichard Wilson <rjw@netsurf-browser.org>2006-07-03 21:07:02 +0000
committerRichard Wilson <rjw@netsurf-browser.org>2006-07-03 21:07:02 +0000
commitde0c4e2c32c1ecbef75293653adff4e4ceffeffe (patch)
tree105483179bd2e38a08774cd63baf2137c5d6a0ff /riscos/menus.c
parent79cd7b86a91e86951d989ec341a839bdb0aa57d9 (diff)
downloadnetsurf-de0c4e2c32c1ecbef75293653adff4e4ceffeffe.tar.gz
netsurf-de0c4e2c32c1ecbef75293653adff4e4ceffeffe.tar.bz2
Implement up toolbar icon and menu option.
svn path=/trunk/netsurf/; revision=2705
Diffstat (limited to 'riscos/menus.c')
-rw-r--r--riscos/menus.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/riscos/menus.c b/riscos/menus.c
index 83fc09e3b..4e5cfc98a 100644
--- a/riscos/menus.c
+++ b/riscos/menus.c
@@ -194,7 +194,8 @@ void ro_gui_menu_init(void)
{ "Navigate", NO_ACTION, 0 },
{ "Navigate.Home", BROWSER_NAVIGATE_HOME, 0 },
{ "Navigate.Back", BROWSER_NAVIGATE_BACK, 0 },
- { "_Navigate.Forward", BROWSER_NAVIGATE_FORWARD, 0 },
+ { "Navigate.Forward", BROWSER_NAVIGATE_FORWARD, 0 },
+ { "_Navigate.UpLevel", BROWSER_NAVIGATE_UP, 0 },
{ "Navigate.Reload", BROWSER_NAVIGATE_RELOAD_ALL, 0 },
{ "Navigate.Stop", BROWSER_NAVIGATE_STOP, 0 },
{ "View", NO_ACTION, 0 },
@@ -809,6 +810,7 @@ void ro_gui_prepare_navigate(struct gui_window *gui) {
ro_gui_menu_prepare_action(gui->window, BROWSER_NAVIGATE_BACK, false);
ro_gui_menu_prepare_action(gui->window, BROWSER_NAVIGATE_FORWARD,
false);
+ ro_gui_menu_prepare_action(gui->window, BROWSER_NAVIGATE_UP, false);
ro_gui_menu_prepare_action(gui->window, HOTLIST_SHOW, false);
ro_gui_menu_prepare_action(gui->window, BROWSER_SAVE, false);
ro_gui_menu_prepare_action(gui->window, BROWSER_PRINT, false);
@@ -1370,6 +1372,9 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
os_error *error;
char url[80];
const struct url_data *data;
+ char *parent;
+ url_func_result res;
+ bool compare;
ro_gui_menu_get_window_details(owner, &g, &bw, &c, &t, &tree);
@@ -1518,6 +1523,17 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
return false;
history_forward(bw, bw->history);
return true;
+ case BROWSER_NAVIGATE_UP:
+ if ((!bw) || (!c))
+ return false;
+ res = url_parent(c->url, &parent);
+ if (res == URL_FUNC_OK) {
+ res = url_compare(c->url, parent, &compare);
+ if (!compare && (res == URL_FUNC_OK))
+ browser_window_go(g->bw, parent, 0, true);
+ free(parent);
+ }
+ return true;
case BROWSER_NAVIGATE_RELOAD:
case BROWSER_NAVIGATE_RELOAD_ALL:
if (!bw)
@@ -1734,6 +1750,9 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
bool result = false;
int checksum = 0;
os_error *error;
+ char *parent;
+ url_func_result res;
+ bool compare;
ro_gui_menu_get_window_details(owner, &g, &bw, &c, &t, &tree);
if (current_menu_open)
@@ -1930,6 +1949,27 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
t->toolbar_handle,
ICON_TOOLBAR_FORWARD, result);
break;
+ case BROWSER_NAVIGATE_UP:
+ result = (bw && c);
+ if (result) {
+ res = url_parent(c->url, &parent);
+ if (res == URL_FUNC_OK) {
+ res = url_compare(c->url, parent, &compare);
+ result = !compare;
+ free(parent);
+ } else {
+ result = false;
+ }
+ }
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !result);
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
+ ICON_TOOLBAR_UP, !result);
+ result = true;
+ break;
case BROWSER_NAVIGATE_RELOAD:
case BROWSER_NAVIGATE_RELOAD_ALL:
result = (bw->current_content && !bw->loading_content);