summaryrefslogtreecommitdiff
path: root/riscos/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'riscos/window.c')
-rw-r--r--riscos/window.c56
1 files changed, 50 insertions, 6 deletions
diff --git a/riscos/window.c b/riscos/window.c
index 35f9b201e..f6b274a20 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -138,6 +138,7 @@ static void ro_gui_window_action_save(struct gui_window *g,
static void ro_gui_window_action_search(struct gui_window *g);
static void ro_gui_window_action_zoom(struct gui_window *g);
static void ro_gui_window_action_add_bookmark(struct gui_window *g);
+static void ro_gui_window_action_remove_bookmark(struct gui_window *g);
static void ro_gui_window_action_print(struct gui_window *g);
static void ro_gui_window_action_page_info(struct gui_window *g);
@@ -188,6 +189,8 @@ static wimp_menu *ro_gui_browser_window_menu = NULL;
static wimp_menu *gui_form_select_menu = NULL;
/** Browser window associated with open select menu. */
static struct browser_window *ro_gui_select_menu_bw = NULL;
+/** Main content object under menu, or 0 if none. */
+static hlcache_handle *current_menu_main = 0;
/** Object under menu, or 0 if no object. */
static hlcache_handle *current_menu_object = 0;
/** URL of link under menu, or 0 if no link. */
@@ -2206,6 +2209,7 @@ bool ro_gui_window_menu_prepare(wimp_w w, wimp_i i, wimp_menu *menu,
if (pointer != NULL && g->window == w) {
ro_gui_url_complete_close();
+ current_menu_main = NULL;
current_menu_object = NULL;
current_menu_url = NULL;
@@ -2214,6 +2218,7 @@ bool ro_gui_window_menu_prepare(wimp_w w, wimp_i i, wimp_menu *menu,
browser_window_get_contextual_content(bw,
pos.x, pos.y, &cont);
+ current_menu_main = cont.main;
current_menu_object = cont.object;
current_menu_url = cont.link_url;
}
@@ -2789,8 +2794,11 @@ bool ro_gui_window_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
ro_gui_window_action_new_window(g);
break;
case BROWSER_VIEW_SOURCE:
- if (h != NULL)
+ if (current_menu_main != NULL) {
+ ro_gui_view_source(current_menu_main);
+ } else if (h != NULL) {
ro_gui_view_source(h);
+ }
break;
/* object actions */
@@ -3604,9 +3612,12 @@ void ro_gui_window_toolbar_click(void *data,
return;
- if (action_type == TOOLBAR_ACTION_URL &&
- action.url == TOOLBAR_URL_DRAG_URL) {
- if (g->bw->current_content) {
+ if (action_type == TOOLBAR_ACTION_URL) {
+ switch (action.url) {
+ case TOOLBAR_URL_DRAG_URL:
+ if (g->bw->current_content == NULL)
+ break;
+
hlcache_handle *h = g->bw->current_content;
if (ro_gui_shift_pressed())
@@ -3617,6 +3628,18 @@ void ro_gui_window_toolbar_click(void *data,
ro_gui_drag_save_link(save_type,
nsurl_access(hlcache_handle_get_url(h)),
content_get_title(h), g);
+ break;
+
+ case TOOLBAR_URL_SELECT_HOTLIST:
+ ro_gui_window_action_add_bookmark(g);
+ break;
+
+ case TOOLBAR_URL_ADJUST_HOTLIST:
+ ro_gui_window_action_remove_bookmark(g);
+ break;
+
+ default:
+ break;
}
return;
@@ -4243,7 +4266,7 @@ void ro_gui_window_action_zoom(struct gui_window *g)
* \param *g The browser window to act on.
*/
-void ro_gui_window_action_add_bookmark(struct gui_window *g)
+static void ro_gui_window_action_add_bookmark(struct gui_window *g)
{
nsurl *url;
@@ -4255,7 +4278,28 @@ void ro_gui_window_action_add_bookmark(struct gui_window *g)
url = hlcache_handle_get_url(g->bw->current_content);
ro_gui_hotlist_add_page(url);
- ro_toolbar_hotlist_modifed(g->toolbar, url);
+ ro_toolbar_update_hotlist(g->toolbar);
+}
+
+
+/**
+ * Remove a hotlist entry for a browser window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+static void ro_gui_window_action_remove_bookmark(struct gui_window *g)
+{
+ nsurl *url;
+
+ if (g == NULL || g->bw == NULL || g->toolbar == NULL ||
+ g->bw->current_content == NULL ||
+ hlcache_handle_get_url(g->bw->current_content) == NULL)
+ return;
+
+ url = hlcache_handle_get_url(g->bw->current_content);
+
+ ro_gui_hotlist_remove_page(url);
}