diff options
Diffstat (limited to 'riscos/window.c')
-rw-r--r-- | riscos/window.c | 56 |
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); } |