summaryrefslogtreecommitdiff
path: root/riscos/menus.c
diff options
context:
space:
mode:
Diffstat (limited to 'riscos/menus.c')
-rw-r--r--riscos/menus.c248
1 files changed, 140 insertions, 108 deletions
diff --git a/riscos/menus.c b/riscos/menus.c
index 588a0bd50..70c4c8d74 100644
--- a/riscos/menus.c
+++ b/riscos/menus.c
@@ -104,12 +104,13 @@ static void ro_gui_menu_set_entry_shaded(wimp_menu *menu, menu_action action,
static void ro_gui_menu_set_entry_ticked(wimp_menu *menu, menu_action action,
bool ticked);
static void ro_gui_menu_get_window_details(wimp_w w, struct gui_window **g,
- struct browser_window **bw, struct content **content,
+ struct browser_window **bw, hlcache_handle **h,
struct toolbar **toolbar, struct tree **tree);
static int ro_gui_menu_get_checksum(void);
static bool ro_gui_menu_prepare_url_suggest(void);
static void ro_gui_menu_prepare_pageinfo(struct gui_window *g);
-static void ro_gui_menu_prepare_objectinfo(struct content *object, const char *href);
+static void ro_gui_menu_prepare_objectinfo(hlcache_handle *object,
+ const char *href);
static void ro_gui_menu_refresh_toolbar(struct toolbar *toolbar);
static bool ro_gui_menu_translate(struct menu_definition *menu);
@@ -608,7 +609,7 @@ void ro_gui_menu_closed(bool cleanup)
{
struct gui_window *g;
struct browser_window *bw;
- struct content *c;
+ hlcache_handle *h;
struct toolbar *t;
struct tree *tree;
os_error *error;
@@ -622,7 +623,7 @@ void ro_gui_menu_closed(bool cleanup)
warn_user("MenuError", error->errmess);
}
ro_gui_menu_get_window_details(current_menu_window,
- &g, &bw, &c, &t, &tree);
+ &g, &bw, &h, &t, &tree);
current_menu = NULL;
if (cleanup) {
@@ -908,7 +909,7 @@ void ro_gui_prepare_navigate(struct gui_window *gui)
*/
void ro_gui_menu_prepare_pageinfo(struct gui_window *g)
{
- struct hlcache_handle *h = g->bw->current_content;
+ hlcache_handle *h = g->bw->current_content;
char icon_buf[20] = "file_xxx";
char enc_buf[40];
char enc_token[10] = "Encoding0";
@@ -958,24 +959,26 @@ void ro_gui_menu_prepare_pageinfo(struct gui_window *g)
* \param object the object for which information is to be displayed
* \param href corresponding href, if any
*/
-void ro_gui_menu_prepare_objectinfo(struct content *object, const char *href)
+void ro_gui_menu_prepare_objectinfo(hlcache_handle *object, const char *href)
{
char icon_buf[20] = "file_xxx";
- const char *url = "-";
+ const char *url, *mime;
const char *target = "-";
- const char *mime = "-";
sprintf(icon_buf, "file_%.3x",
ro_content_filetype(object));
if (!ro_gui_wimp_sprite_exists(icon_buf))
sprintf(icon_buf, "file_xxx");
- if (object->url)
- url = object->url;
+ url = content_get_url(object);
+ if (url == NULL)
+ url = "-";
+ mime = content_get_mime_type(object);
+ if (mime == NULL)
+ mime = "-";
+
if (href)
target = href;
- if (object->mime_type)
- mime = object->mime_type;
ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_ICON, icon_buf, true);
ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_URL, url, true);
@@ -1463,7 +1466,7 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
wimp_window_state state;
struct gui_window *g = NULL;
struct browser_window *bw = NULL;
- struct content *c = NULL;
+ hlcache_handle *h = NULL;
struct toolbar *t = NULL;
struct tree *tree;
struct node *node;
@@ -1471,7 +1474,7 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
char url[80];
const struct url_data *data;
- ro_gui_menu_get_window_details(owner, &g, &bw, &c, &t, &tree);
+ ro_gui_menu_get_window_details(owner, &g, &bw, &h, &t, &tree);
switch (action) {
@@ -1510,17 +1513,19 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
/* hotlist actions */
case HOTLIST_ADD_URL:
- if ((!hotlist_tree) || (!c) || (!c->url))
+ if ((!hotlist_tree) || (!h) || (!content_get_url(h)))
return false;
- data = urldb_get_url_data(c->url);
+ data = urldb_get_url_data(content_get_url(h));
if (data) {
- node = tree_create_URL_node(hotlist_tree->root, c->url, data, data->title);
+ node = tree_create_URL_node(hotlist_tree->root,
+ content_get_url(h),
+ data, data->title);
if (node) {
tree_redraw_area(hotlist_tree,
node->box.x - NODE_INSTEP, 0,
NODE_INSTEP, 16384);
- tree_handle_node_changed(hotlist_tree, node,
- false, true);
+ tree_handle_node_changed(hotlist_tree,
+ node, false, true);
ro_gui_tree_scroll_visible(hotlist_tree,
&node->data);
ro_gui_hotlist_save();
@@ -1543,28 +1548,29 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
/* page actions */
case BROWSER_PAGE_INFO:
- if (!c)
+ if (!h)
return false;
ro_gui_menu_prepare_action(owner, action, true);
ro_gui_dialog_open_persistent(g->window,
dialog_pageinfo, windows_at_pointer);
return true;
case BROWSER_PRINT:
- if (!c)
+ if (!h)
return false;
ro_gui_menu_prepare_action(owner, action, true);
ro_gui_dialog_open_persistent(g->window,
dialog_print, windows_at_pointer);
return true;
case BROWSER_NEW_WINDOW:
- if (!c)
+ if (!h)
return false;
- browser_window_create(c->url, bw, 0, false, false);
+ browser_window_create(content_get_url(h), bw, 0, false,
+ false);
return true;
case BROWSER_VIEW_SOURCE:
- if (!c)
+ if (!h)
return false;
- ro_gui_view_source(c);
+ ro_gui_view_source(h);
return true;
/* object actions */
@@ -1595,19 +1601,21 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
case BROWSER_LINK_DOWNLOAD:
if (!current_menu_url)
return false;
- browser_window_download(bw, current_menu_url, c->url);
+ browser_window_download(bw, current_menu_url,
+ content_get_url(h));
break;
case BROWSER_LINK_NEW_WINDOW:
if (!current_menu_url)
return false;
- browser_window_create(current_menu_url, bw, c->url, true, false);
+ browser_window_create(current_menu_url, bw,
+ content_get_url(h), true, false);
break;
/* save actions */
case BROWSER_OBJECT_SAVE:
case BROWSER_OBJECT_EXPORT_SPRITE:
case BROWSER_OBJECT_EXPORT_DRAW:
- c = current_menu_object;
+ h = current_menu_object;
/* Fall through */
case BROWSER_SAVE:
case BROWSER_SAVE_COMPLETE:
@@ -1617,7 +1625,7 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
case BROWSER_SAVE_URL_URI:
case BROWSER_SAVE_URL_URL:
case BROWSER_SAVE_URL_TEXT:
- if (!c)
+ if (!h)
return false;
/* Fall through */
case HOTLIST_EXPORT:
@@ -1675,9 +1683,10 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
history_forward(bw, bw->history);
return true;
case BROWSER_NAVIGATE_UP:
- if ((!bw) || (!c))
+ if ((!bw) || (!h))
return false;
- return ro_gui_window_navigate_up(bw->window, c->url);
+ return ro_gui_window_navigate_up(bw->window,
+ content_get_url(h));
case BROWSER_NAVIGATE_RELOAD:
case BROWSER_NAVIGATE_RELOAD_ALL:
if (!bw)
@@ -1698,14 +1707,15 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
/* browser window/display actions */
case BROWSER_SCALE_VIEW:
- if (!c)
+ if (!h)
return false;
ro_gui_menu_prepare_action(owner, action, true);
ro_gui_dialog_open_persistent(g->window, dialog_zoom,
windows_at_pointer);
return true;
case BROWSER_FIND_TEXT:
- if (!c || (c->type != CONTENT_HTML && c->type != CONTENT_TEXTPLAIN))
+ if (!h || (content_get_type(h) != CONTENT_TEXTPLAIN &&
+ content_get_type(h) != CONTENT_HTML))
return false;
ro_gui_menu_prepare_action(owner, action, true);
ro_gui_dialog_open_persistent(g->window,
@@ -1881,7 +1891,7 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
struct menu_definition_entry *entry;
struct gui_window *g;
struct browser_window *bw;
- struct content *c;
+ hlcache_handle *h;
struct toolbar *t;
struct tree *tree;
struct node *node;
@@ -1892,10 +1902,10 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
url_func_result res;
bool compare;
- ro_gui_menu_get_window_details(owner, &g, &bw, &c, &t, &tree);
+ ro_gui_menu_get_window_details(owner, &g, &bw, &h, &t, &tree);
if (current_menu_open)
checksum = ro_gui_menu_get_checksum();
- if (!c) {
+ if (!h) {
current_menu_object = NULL;
current_menu_url = NULL;
}
@@ -1915,7 +1925,7 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
case HISTORY_SHOW_LOCAL:
ro_gui_menu_set_entry_shaded(current_menu, action,
(!bw || (!bw->history) ||
- !(c || history_back_available(bw->history) ||
+ !(h || history_back_available(bw->history) ||
history_forward_available(bw->history))));
break;
case HISTORY_SHOW_GLOBAL:
@@ -1926,7 +1936,7 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
/* hotlist actions */
case HOTLIST_ADD_URL:
ro_gui_menu_set_entry_shaded(current_menu, action,
- (!c || !hotlist_tree));
+ (!h || !hotlist_tree));
break;
case HOTLIST_SHOW:
ro_gui_menu_set_entry_shaded(current_menu, action,
@@ -1952,34 +1962,35 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
/* page actions */
case BROWSER_PAGE:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c || (c->type != CONTENT_HTML &&
- c->type != CONTENT_TEXTPLAIN));
+ action, !h ||
+ (content_get_type(h) != CONTENT_HTML &&
+ content_get_type(h) != CONTENT_TEXTPLAIN));
break;
case BROWSER_PAGE_INFO:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((windows) && (c))
+ action, !h);
+ if ((windows) && (h))
ro_gui_menu_prepare_pageinfo(g);
break;
case BROWSER_PRINT:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
+ action, !h);
if ((t) && (t->type == THEME_BROWSER_TOOLBAR))
ro_gui_set_icon_shaded_state(
t->toolbar_handle,
- ICON_TOOLBAR_PRINT, !c);
- if ((windows) && (c))
+ ICON_TOOLBAR_PRINT, !h);
+ if ((windows) && (h))
ro_gui_print_prepare(g);
if ((t) && (!t->editor) &&
(t->type == THEME_BROWSER_TOOLBAR))
ro_gui_set_icon_shaded_state(
t->toolbar_handle,
- ICON_TOOLBAR_PRINT, !c);
+ ICON_TOOLBAR_PRINT, !h);
break;
case BROWSER_NEW_WINDOW:
case BROWSER_VIEW_SOURCE:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
+ action, !h);
break;
/* object actions */
@@ -2024,10 +2035,10 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
bool exp_draw = false;
if (current_menu_object)
- c = current_menu_object;
+ h = current_menu_object;
- if (c) {
- switch (c->type) {
+ if (h) {
+ switch (content_get_type(h)) {
/* \todo - this classification should prob be done in content_() */
/* bitmap types (Sprite export possible) */
#ifdef WITH_JPEG
@@ -2068,15 +2079,24 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
}
switch (action) {
- case BROWSER_OBJECT_EXPORT_SPRITE: if (!exp_sprite) c = NULL; break;
- case BROWSER_OBJECT_EXPORT_DRAW: if (!exp_draw) c = NULL; break;
- default: if (!exp_sprite && !exp_draw) c = NULL; break;
+ case BROWSER_OBJECT_EXPORT_SPRITE:
+ if (!exp_sprite)
+ h = NULL;
+ break;
+ case BROWSER_OBJECT_EXPORT_DRAW:
+ if (!exp_draw)
+ h = NULL;
+ break;
+ default:
+ if (!exp_sprite && !exp_draw)
+ h = NULL;
+ break;
}
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
- ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE, c, NULL, NULL, NULL);
+ action, !h);
+ if ((h) && (windows))
+ ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE, h, NULL, NULL, NULL);
}
break;
case BROWSER_LINK_SAVE_URI:
@@ -2103,94 +2123,104 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
break;
case BROWSER_SELECTION:
- /* make menu available if there's anything that /could/ be selected */
+ /* make menu available if there's anything that /could/
+ * be selected */
ro_gui_menu_set_entry_shaded(current_menu, action,
- !c || (c->type != CONTENT_HTML && c->type != CONTENT_TEXTPLAIN));
+ !h || (content_get_type(h) != CONTENT_HTML &&
+ content_get_type(h) != CONTENT_TEXTPLAIN));
break;
case BROWSER_SELECTION_SAVE:
- if (c && (!bw->sel || !selection_defined(bw->sel))) c = NULL;
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
- if ((c) && (windows))
+ if (h && (!bw->sel || !selection_defined(bw->sel)))
+ h = NULL;
+ ro_gui_menu_set_entry_shaded(current_menu, action, !h);
+ if ((h) && (windows))
ro_gui_save_prepare(GUI_SAVE_TEXT_SELECTION, NULL, bw->sel, NULL, NULL);
break;
case BROWSER_SELECTION_COPY:
ro_gui_menu_set_entry_shaded(current_menu, action,
- !(c && bw->sel && selection_defined(bw->sel)));
+ !(h && bw->sel && selection_defined(bw->sel)));
break;
case BROWSER_SELECTION_CUT:
ro_gui_menu_set_entry_shaded(current_menu, action,
- !(c && bw->sel && selection_defined(bw->sel)
+ !(h && bw->sel && selection_defined(bw->sel)
&& !selection_read_only(bw->sel)));
break;
case BROWSER_SELECTION_PASTE:
- ro_gui_menu_set_entry_shaded(current_menu, action, !(c && bw->paste_callback));
+ ro_gui_menu_set_entry_shaded(current_menu, action,
+ !(h && bw->paste_callback));
break;
case BROWSER_SAVE:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
- ro_gui_save_prepare(GUI_SAVE_SOURCE, c, NULL, NULL, NULL);
+ action, !h);
+ if ((h) && (windows))
+ ro_gui_save_prepare(GUI_SAVE_SOURCE, h, NULL, NULL, NULL);
if ((t) && (!t->editor) &&
(t->type == THEME_BROWSER_TOOLBAR))
ro_gui_set_icon_shaded_state(
t->toolbar_handle,
- ICON_TOOLBAR_SAVE, !c);
+ ICON_TOOLBAR_SAVE, !h);
break;
case BROWSER_SAVE_COMPLETE:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
- ro_gui_save_prepare(GUI_SAVE_COMPLETE, c, NULL, NULL, NULL);
+ action, !h);
+ if ((h) && (windows))
+ ro_gui_save_prepare(GUI_SAVE_COMPLETE, h, NULL, NULL, NULL);
break;
case BROWSER_EXPORT_DRAW:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
- ro_gui_save_prepare(GUI_SAVE_DRAW, c, NULL, NULL, NULL);
+ action, !h);
+ if ((h) && (windows))
+ ro_gui_save_prepare(GUI_SAVE_DRAW, h, NULL, NULL, NULL);
break;
case BROWSER_EXPORT_PDF:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
- ro_gui_save_prepare(GUI_SAVE_PDF, c, NULL, NULL, NULL);
+ action, !h);
+ if ((h) && (windows))
+ ro_gui_save_prepare(GUI_SAVE_PDF, h, NULL, NULL, NULL);
break;
case BROWSER_EXPORT_TEXT:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
- ro_gui_save_prepare(GUI_SAVE_TEXT, c, NULL, NULL, NULL);
+ action, !h);
+ if ((h) && (windows))
+ ro_gui_save_prepare(GUI_SAVE_TEXT, h, NULL, NULL, NULL);
break;
case BROWSER_OBJECT_SAVE_URL_URI:
- if (c && c->type == CONTENT_HTML)
- c = current_menu_object;
+ if (h && content_get_type(h) == CONTENT_HTML)
+ h = current_menu_object;
/* Fall through */
case BROWSER_SAVE_URL_URI:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
- ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
- c->url, c->title);
+ action, !h);
+ if ((h) && (windows))
+ ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL,
+ NULL,
+ content_get_url(h),
+ content_get_title(h));
break;
case BROWSER_OBJECT_SAVE_URL_URL:
- if (c && c->type == CONTENT_HTML)
- c = current_menu_object;
+ if (h && content_get_type(h) == CONTENT_HTML)
+ h = current_menu_object;
/* Fall through */
case BROWSER_SAVE_URL_URL:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
- ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
- c->url, c->title);
+ action, !h);
+ if ((h) && (windows))
+ ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL,
+ NULL,
+ content_get_url(h),
+ content_get_title(h));
break;
case BROWSER_OBJECT_SAVE_URL_TEXT:
- c = current_menu_object;
+ h = current_menu_object;
/* Fall through */
case BROWSER_SAVE_URL_TEXT:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
- ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
- c->url, c->title);
+ action, !h);
+ if ((h) && (windows))
+ ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL,
+ NULL,
+ content_get_url(h),
+ content_get_title(h));
break;
case HOTLIST_EXPORT:
if ((tree) && (windows))
@@ -2225,12 +2255,13 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
ICON_TOOLBAR_FORWARD, !result);
break;
case BROWSER_NAVIGATE_UP:
- result = (bw && c);
+ result = (bw && h);
if (result) {
- res = url_parent(c->url, &parent);
+ res = url_parent(content_get_url(h), &parent);
if (res == URL_FUNC_OK) {
- res = url_compare(c->url, parent,
- false, &compare);
+ res = url_compare(content_get_url(h),
+ parent, false,
+ &compare);
if (res == URL_FUNC_OK)
result = !compare;
free(parent);
@@ -2275,17 +2306,18 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
/* display actions */
case BROWSER_SCALE_VIEW:
ro_gui_menu_set_entry_shaded(current_menu,
- action, !c);
- if ((c) && (windows))
+ action, !h);
+ if ((h) && (windows))
ro_gui_dialog_prepare_zoom(g);
if ((t) && (!t->editor) &&
(t->type == THEME_BROWSER_TOOLBAR))
ro_gui_set_icon_shaded_state(
t->toolbar_handle,
- ICON_TOOLBAR_SCALE, !c);
+ ICON_TOOLBAR_SCALE, !h);
break;
case BROWSER_FIND_TEXT:
- result = !c || (c->type != CONTENT_HTML && c->type != CONTENT_TEXTPLAIN);
+ result = !h || (content_get_type(h) != CONTENT_HTML &&
+ content_get_type(h) != CONTENT_TEXTPLAIN);
ro_gui_menu_set_entry_shaded(current_menu,
action, result);
if ((!result) && (windows)) {
@@ -2469,7 +2501,7 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
* \param w the window to complete information for
*/
void ro_gui_menu_get_window_details(wimp_w w, struct gui_window **g,
- struct browser_window **bw, struct content **content,
+ struct browser_window **bw, hlcache_handle **h,
struct toolbar **toolbar, struct tree **tree)
{
*g = ro_gui_window_lookup(w);
@@ -2477,11 +2509,11 @@ void ro_gui_menu_get_window_details(wimp_w w, struct gui_window **g,
*bw = (*g)->bw;
*toolbar = (*g)->toolbar;
if (*bw)
- *content = (*bw)->current_content;
+ *h = (*bw)->current_content;
*tree = NULL;
} else {
*bw = NULL;
- *content = NULL;
+ *h = NULL;
if ((hotlist_tree) && (w == (wimp_w)hotlist_tree->handle))
*tree = hotlist_tree;
else if ((global_history_tree) &&