diff options
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/browser.c | 35 | ||||
-rw-r--r-- | desktop/browser.h | 8 |
2 files changed, 43 insertions, 0 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index 42c8edaff..d9ad417ac 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1974,6 +1974,41 @@ nserror browser_window_navigate(struct browser_window *bw, /* Exported interface, documented in browser.h */ +nserror browser_window_navigate_up(struct browser_window *bw, bool new_window) +{ + nsurl *current, *parent; + nserror err; + + if (bw == NULL) + return NSERROR_BAD_PARAMETER; + + current = browser_window_get_url(bw); + + err = nsurl_parent(current, &parent); + if (err != NSERROR_OK) { + return err; + } + + if (nsurl_compare(current, parent, NSURL_COMPLETE) == true) { + /* Can't go up to parent from here */ + nsurl_unref(parent); + return NSERROR_OK; + } + + if (new_window) { + err = browser_window_create(BW_CREATE_CLONE, + parent, NULL, bw, NULL); + } else { + err = browser_window_navigate(bw, parent, NULL, + BW_NAVIGATE_HISTORY, NULL, NULL, NULL); + } + + nsurl_unref(parent); + return err; +} + + +/* Exported interface, documented in browser.h */ nsurl* browser_window_get_url(struct browser_window *bw) { assert(bw != NULL); diff --git a/desktop/browser.h b/desktop/browser.h index a043f09bd..9cc0ee47a 100644 --- a/desktop/browser.h +++ b/desktop/browser.h @@ -152,6 +152,14 @@ nserror browser_window_navigate(struct browser_window *bw, struct hlcache_handle *parent); /** + * Navigate to a browser_window's parent URL. + * + * \param bw browser window + * \param new_window whether to open parent in a new window, or existing + */ +nserror browser_window_navigate_up(struct browser_window *bw, bool new_window); + +/** * Get a browser window's URL. * * \param bw browser window |