Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/24fed9d51ccf3e786e59983ae84b4f13e68b0ea4
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/24fed9d51ccf3e786e59983ae84b4f13e68b0ea4
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/24fed9d51ccf3e786e59983ae84b4f13e68b0ea4

The branch, chris/menuclass has been updated
       via  24fed9d51ccf3e786e59983ae84b4f13e68b0ea4 (commit)
       via  b6f7ea536cececaa07fb2c46c129675d91167177 (commit)
      from  e4d6d9a972736bbea70eb0af62a430e77cc05ee5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=24fed9d51ccf3e786e59983ae84b4f13e68b0ea4
commit 24fed9d51ccf3e786e59983ae84b4f13e68b0ea4
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    Remove excess logging and fix user-added hotlist separator bars

diff --git a/frontends/amiga/menu.c b/frontends/amiga/menu.c
index 253ab3c..cfb3429 100644
--- a/frontends/amiga/menu.c
+++ b/frontends/amiga/menu.c
@@ -636,6 +636,7 @@ void ami_menu_alloc_item(struct ami_menu_data **md, int 
num, UBYTE type,
 
        if((label == NM_BARLABEL) || (strcmp(label, "--") == 0)) {
                md[num]->menulab = NM_BARLABEL;
+               icon = NULL;
        } else { /* horrid non-generic stuff */
                if((num >= AMI_MENU_HOTLIST) && (num <= AMI_MENU_HOTLIST_MAX)) {
                        utf8_from_local_encoding(label,
@@ -890,7 +891,6 @@ static int ami_menu_layout_mc_recursive(Object 
*menu_parent, struct ami_menu_dat
        Object *menu_item = menu_parent;
        
        for(j = i; j < max; j++) {
-               LOG("%d/%d", j, max);
                /* skip empty entries */
                if(md[j] == NULL) continue;
                if(md[j]->menutype == NM_IGNORE) continue;
@@ -924,14 +924,11 @@ static int ami_menu_layout_mc_recursive(Object 
*menu_parent, struct ami_menu_dat
                                        TAG_DONE);
                        }
 
-                       LOG("Adding item %p ID %d (%s) to parent %p", 
menu_item, j, md[j]->menulab, menu_parent);
                        IDoMethod(menu_parent, OM_ADDMEMBER, menu_item);
                        continue;
                } else if (md[j]->menutype > level) {
-LOG("rec");
                        j = ami_menu_layout_mc_recursive(menu_item, md, 
md[j]->menutype, j, max);
                } else {
-LOG("brk");
                        break;
                }
        }
@@ -942,7 +939,7 @@ static struct Menu *ami_menu_layout_mc(struct ami_menu_data 
**md, int max)
 {
        Object *menu_root = NewObject(NULL, "menuclass",
                MA_Type, T_ROOT,
-               MA_FreeImage, FALSE,
+               MA_EmbeddedKey, FALSE,
                TAG_DONE);
 
        ami_menu_layout_mc_recursive(menu_root, md, NM_TITLE, 0, max);
@@ -1109,7 +1106,7 @@ void ami_menu_free_menu(struct ami_menu_data **md, int 
max, struct Menu *imenu)
 struct Menu *ami_menu_create(struct gui_window_2 *gwin)
 {
        ami_init_menulabs(gwin->menu_data);
-       ami_menu_scan(gwin->menu_data); //\todo this needs to be MenuClass 
created
+       ami_menu_scan(gwin->menu_data);
        ami_menu_arexx_scan(gwin->menu_data);
        gwin->imenu = ami_menu_layout(gwin->menu_data, AMI_MENU_AREXX_MAX);
 


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=b6f7ea536cececaa07fb2c46c129675d91167177
commit b6f7ea536cececaa07fb2c46c129675d91167177
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    Fix MenuClass menu creation

diff --git a/frontends/amiga/cookies.c b/frontends/amiga/cookies.c
index 74c89cb..17933d5 100644
--- a/frontends/amiga/cookies.c
+++ b/frontends/amiga/cookies.c
@@ -239,38 +239,38 @@ HOOKF(void, ami_cookies_menu_item_edit_delete, APTR, 
window, struct IntuiMessage
 
 static void ami_cookies_menulabs(struct ami_menu_data **md)
 {
-       ami_menu_alloc_item(md, AMI_COOKIE_M_PROJECT, NM_TITLE, "Tree",       
0, NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND,   NM_ITEM, "Expand", 0, 
"TBImages:list_folderunfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_ALL,   NM_SUB, "All", '+', 
NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_PROJECT, NM_TITLE, "Tree", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND,   NM_ITEM, "Expand", NULL, 
"TBImages:list_folderunfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_ALL,   NM_SUB, "All", "+", 
NULL,
                ami_cookies_menu_item_project_expand_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_DOMAINS,   NM_SUB, 
"Domains", 0, NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_DOMAINS,   NM_SUB, 
"Domains", NULL, NULL,
                ami_cookies_menu_item_project_expand_domains, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_COOKIES,   NM_SUB, 
"Cookies", 0, NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_COOKIES,   NM_SUB, 
"Cookies", NULL, NULL,
                ami_cookies_menu_item_project_expand_cookies, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE,   NM_ITEM, "Collapse", 
0, "TBImages:list_folderfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_ALL,   NM_SUB, "All", 
'-', NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE,   NM_ITEM, "Collapse", 
NULL, "TBImages:list_folderfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_ALL,   NM_SUB, "All", 
"-", NULL,
                ami_cookies_menu_item_project_collapse_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_DOMAINS,   NM_SUB, 
"Domains", 0, NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_DOMAINS,   NM_SUB, 
"Domains", NULL, NULL,
                ami_cookies_menu_item_project_collapse_domains, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_COOKIES,   NM_SUB, 
"Cookies", 0, NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_COOKIES,   NM_SUB, 
"Cookies", NULL, NULL,
                ami_cookies_menu_item_project_collapse_cookies, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_P1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", 0, "TBImages:list_hold",
+       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_P1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", NULL, "TBImages:list_hold",
                ami_cookies_menu_item_project_snapshot, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_P2, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_CLOSE,   NM_ITEM, "CloseWindow", 
'K', "TBImages:list_cancel",
+       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_P2, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_CLOSE,   NM_ITEM, "CloseWindow", 
"K", "TBImages:list_cancel",
                ami_cookies_menu_item_project_close, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EDIT, NM_TITLE, "Edit",       0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", 'A', NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EDIT, NM_TITLE, "Edit", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", "A", NSA_SPACE,
                ami_cookies_menu_item_edit_select_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_CLEAR,   NM_ITEM, "ClearNS", 0, 
NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_CLEAR,   NM_ITEM, "ClearNS", NULL, 
NSA_SPACE,
                ami_cookies_menu_item_edit_clear, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_E1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_DELETE,   NM_ITEM, "TreeDelete", 
0, "TBImages:list_delete",
+       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_E1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_DELETE,   NM_ITEM, "TreeDelete", 
"Del", "TBImages:list_delete",
                ami_cookies_menu_item_edit_delete, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_COOKIE_M_LAST,   NM_END, NULL,     0, NULL, 
NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_LAST,   NM_END, NULL, NULL, NULL, 
NULL, NULL, 0);
 }
 
 static struct Menu *
diff --git a/frontends/amiga/history.c b/frontends/amiga/history.c
index b2a3cc0..a1c6bf6 100644
--- a/frontends/amiga/history.c
+++ b/frontends/amiga/history.c
@@ -308,41 +308,41 @@ HOOKF(void, ami_history_global_menu_item_edit_delete, 
APTR, window, struct Intui
 
 static void ami_history_global_menulabs(struct ami_menu_data **md)
 {
-       ami_menu_alloc_item(md, AMI_HISTORY_M_PROJECT, NM_TITLE, "Tree",       
0, NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPORT,   NM_ITEM, "TreeExport", 
'S', "TBImages:list_save",
+       ami_menu_alloc_item(md, AMI_HISTORY_M_PROJECT, NM_TITLE, "Tree", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPORT,   NM_ITEM, "TreeExport", 
"S", "TBImages:list_save",
                ami_history_global_menu_item_project_export, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND,   NM_ITEM, "Expand", 0, 
"TBImages:list_folderunfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_ALL,   NM_SUB, "All", '+', 
NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND,   NM_ITEM, "Expand", 
NULL, "TBImages:list_folderunfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_ALL,   NM_SUB, "All", "+", 
NULL,
                ami_history_global_menu_item_project_expand_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_FOLDERS,   NM_SUB, 
"Folders", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_FOLDERS,   NM_SUB, 
"Folders", NULL, NULL,
                ami_history_global_menu_item_project_expand_folders, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_LINKS,   NM_SUB, "Links", 
0, NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_LINKS,   NM_SUB, "Links", 
NULL, NULL,
                ami_history_global_menu_item_project_expand_links, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE,   NM_ITEM, "Collapse", 
0, "TBImages:list_folderfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_ALL,   NM_SUB, "All", 
'-', NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE,   NM_ITEM, "Collapse", 
NULL, "TBImages:list_folderfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_ALL,   NM_SUB, "All", 
"-", NULL,
                ami_history_global_menu_item_project_collapse_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_FOLDERS,   NM_SUB, 
"Folders", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_FOLDERS,   NM_SUB, 
"Folders", NULL, NULL,
                ami_history_global_menu_item_project_collapse_folders, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_LINKS,   NM_SUB, 
"Links", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_LINKS,   NM_SUB, 
"Links", NULL, NULL,
                ami_history_global_menu_item_project_collapse_links, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P2, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", 0, "TBImages:list_hold",
+       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P2, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", NULL, "TBImages:list_hold",
                ami_history_global_menu_item_project_snapshot, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P3, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_CLOSE,   NM_ITEM, "CloseWindow", 
'K', "TBImages:list_cancel",
+       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P3, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_CLOSE,   NM_ITEM, "CloseWindow", 
"K", "TBImages:list_cancel",
                ami_history_global_menu_item_project_close, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EDIT, NM_TITLE, "Edit",       0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", 'A', NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EDIT, NM_TITLE, "Edit", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", "A", NSA_SPACE,
                ami_history_global_menu_item_edit_select_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_CLEAR,   NM_ITEM, "ClearNS", 0, 
NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_CLEAR,   NM_ITEM, "ClearNS", 
NULL, NSA_SPACE,
                ami_history_global_menu_item_edit_clear, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_E1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_DELETE,   NM_ITEM, "TreeDelete", 
0, "TBImages:list_delete",
+       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_E1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_DELETE,   NM_ITEM, "TreeDelete", 
"Del", "TBImages:list_delete",
                ami_history_global_menu_item_edit_delete, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HISTORY_M_LAST,   NM_END, NULL,     0, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_LAST,   NM_END, NULL, NULL, NULL, 
NULL, NULL, 0);
 }
 
 static struct Menu *
diff --git a/frontends/amiga/hotlist.c b/frontends/amiga/hotlist.c
index 8aa181b..6d6f7ce 100644
--- a/frontends/amiga/hotlist.c
+++ b/frontends/amiga/hotlist.c
@@ -404,49 +404,49 @@ HOOKF(void, ami_hotlist_menu_item_edit_delete, APTR, 
window, struct IntuiMessage
 
 static void ami_hotlist_menulabs(struct ami_menu_data **md)
 {
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_PROJECT, NM_TITLE, "Tree",       
0, NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPORT,   NM_ITEM, "TreeExport", 
'S', "TBImages:list_save",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_PROJECT, NM_TITLE, "Tree", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPORT,   NM_ITEM, "TreeExport", 
"S", "TBImages:list_save",
                ami_hotlist_menu_item_project_export, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND,   NM_ITEM, "Expand", 0, 
"TBImages:list_folderunfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_ALL,   NM_SUB, "All", '+', 
NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND,   NM_ITEM, "Expand", 
NULL, "TBImages:list_folderunfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_ALL,   NM_SUB, "All", "+", 
NULL,
                ami_hotlist_menu_item_project_expand_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_FOLDERS,   NM_SUB, 
"Folders", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_FOLDERS,   NM_SUB, 
"Folders", NULL, NULL,
                ami_hotlist_menu_item_project_expand_folders, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_LINKS,   NM_SUB, "Links", 
0, NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_LINKS,   NM_SUB, "Links", 
NULL, NULL,
                ami_hotlist_menu_item_project_expand_links, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE,   NM_ITEM, "Collapse", 
0, "TBImages:list_folderfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_ALL,   NM_SUB, "All", 
'-', NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE,   NM_ITEM, "Collapse", 
NULL, "TBImages:list_folderfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_ALL,   NM_SUB, "All", 
"-", NULL,
                ami_hotlist_menu_item_project_collapse_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_FOLDERS,   NM_SUB, 
"Folders", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_FOLDERS,   NM_SUB, 
"Folders", NULL, NULL,
                ami_hotlist_menu_item_project_collapse_folders, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_LINKS,   NM_SUB, 
"Links", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_LINKS,   NM_SUB, 
"Links", NULL, NULL,
                ami_hotlist_menu_item_project_collapse_links, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P2, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", 0, "TBImages:list_hold",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P2, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", NULL, "TBImages:list_hold",
                ami_hotlist_menu_item_project_snapshot, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P3, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_CLOSE,   NM_ITEM, "CloseWindow", 
'K', "TBImages:list_cancel",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P3, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_CLOSE,   NM_ITEM, "CloseWindow", 
"K", "TBImages:list_cancel",
                ami_hotlist_menu_item_project_close, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EDIT, NM_TITLE, "Edit",       0, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EDIT, NM_TITLE, "Edit", NULL, 
NULL, NULL, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_NEWFOLDER,   NM_ITEM, 
"TreeNewFolder", 'N', "TBImages:list_drawer",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_NEWFOLDER,   NM_ITEM, 
"TreeNewFolder", "N", "TBImages:list_drawer",
                ami_hotlist_menu_item_edit_newfolder, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_NEWLINK,   NM_ITEM, 
"TreeNewLink", 0, "TBImages:list_favouriteadd",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_NEWLINK,   NM_ITEM, 
"TreeNewLink", NULL, "TBImages:list_favouriteadd",
                ami_hotlist_menu_item_edit_newlink, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EDIT_EDIT,   NM_ITEM, "TreeEdit", 
'E', "TBImages:list_edit",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EDIT_EDIT,   NM_ITEM, "TreeEdit", 
"E", "TBImages:list_edit",
                ami_hotlist_menu_item_edit_edit, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_E1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", 'A', NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_E1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", "A", NSA_SPACE,
                ami_hotlist_menu_item_edit_select_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_CLEAR,   NM_ITEM, "ClearNS", 0, 
NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_CLEAR,   NM_ITEM, "ClearNS", 
NULL, NSA_SPACE,
                ami_hotlist_menu_item_edit_clear, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_E2, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_DELETE,   NM_ITEM, "TreeDelete", 
0, "TBImages:list_delete",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_E2, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_DELETE,   NM_ITEM, "TreeDelete", 
"Del", "TBImages:list_delete",
                ami_hotlist_menu_item_edit_delete, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_LAST,   NM_END, NULL,     0, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_LAST,   NM_END, NULL, NULL, NULL, 
NULL, NULL, 0);
 }
 
 static struct Menu *
diff --git a/frontends/amiga/menu.c b/frontends/amiga/menu.c
index 175fe15..253ab3c 100644
--- a/frontends/amiga/menu.c
+++ b/frontends/amiga/menu.c
@@ -92,7 +92,7 @@ enum {
 struct ami_menu_data {
        char *restrict menulab;
        Object *restrict menuobj;
-       char menukey;
+       char *restrict menukey;
        char *restrict menuicon;
        struct Hook menu_hook;
        UBYTE menutype;
@@ -120,7 +120,7 @@ static bool ami_menu_get_selected(struct Menu *menu, struct 
IntuiMessage *msg)
                ULONG state;
                struct ExtIntuiMessage *emsg = (struct ExtIntuiMessage *)msg;
 
-               state = IDoMethod(menu, MM_GETSTATE, 0, emsg->eim_LongCode, 
MS_CHECKED);
+               state = IDoMethod((Object *)menu, MM_GETSTATE, 0, 
emsg->eim_LongCode, MS_CHECKED);
                if(state & MS_CHECKED) checked = true;
 #endif 
        } else {
@@ -571,7 +571,9 @@ static void ami_menu_free_labs(struct ami_menu_data **md, 
int max)
 
        for(i = 0; i <= max; i++) {
                if(md[i] == NULL) continue;
-               if(md[i]->menulab && (md[i]->menulab != NM_BARLABEL)) {
+               if(md[i]->menulab &&
+                               (md[i]->menulab != NM_BARLABEL) &&
+                               (md[i]->menulab != ML_SEPARATOR)) {
                        if(md[i]->menutype & MENU_IMAGE) {
                                if(md[i]->menuobj) 
DisposeObject(md[i]->menuobj);
                        }
@@ -579,9 +581,11 @@ static void ami_menu_free_labs(struct ami_menu_data **md, 
int max)
                        ami_utf8_free(md[i]->menulab);
                }
 
+               if(md[i]->menukey != NULL) free(md[i]->menukey);
+
                md[i]->menulab = NULL;
                md[i]->menuobj = NULL;
-               md[i]->menukey = 0;
+               md[i]->menukey = NULL;
                md[i]->menutype = 0;
                free(md[i]);
        }
@@ -593,7 +597,9 @@ void ami_free_menulabs(struct ami_menu_data **md)
 
        for(i=0;i<=AMI_MENU_AREXX_MAX;i++) {
                if(md[i] == NULL) continue;
-               if(md[i]->menulab && (md[i]->menulab != NM_BARLABEL)) {
+               if(md[i]->menulab &&
+                               (md[i]->menulab != NM_BARLABEL) &&
+                               (md[i]->menulab != ML_SEPARATOR)) {
                        if(md[i]->menutype & MENU_IMAGE) {
                                if(md[i]->menuobj) 
DisposeObject(md[i]->menuobj);
                        }
@@ -606,16 +612,18 @@ void ami_free_menulabs(struct ami_menu_data **md)
                        }
                }
 
+               if(md[i]->menukey != NULL) free(md[i]->menukey);
+
                md[i]->menulab = NULL;
                md[i]->menuobj = NULL;
-               md[i]->menukey = 0;
+               md[i]->menukey = NULL;
                md[i]->menutype = 0;
                free(md[i]);
        }
 }
 
 void ami_menu_alloc_item(struct ami_menu_data **md, int num, UBYTE type,
-                       const char *restrict label, char key, const char 
*restrict icon,
+                       const char *restrict label, const char *restrict key, 
const char *restrict icon,
                        void *restrict func, void *restrict hookdata, UWORD 
flags)
 {
        char menu_icon[1024];
@@ -641,7 +649,7 @@ void ami_menu_alloc_item(struct ami_menu_data **md, int 
num, UBYTE type,
        }
 
        md[num]->menuicon = NULL;
-       if(key) md[num]->menukey = key;
+       if(key) md[num]->menukey = strdup(key);
        if(func) md[num]->menu_hook.h_Entry = (HOOKFUNC)func;
        if(hookdata) md[num]->menu_hook.h_Data = hookdata;
 
@@ -673,111 +681,111 @@ static void ami_init_menulabs(struct ami_menu_data **md)
        if(nsoption_bool(background_images) == true)
                imgback_flags |= CHECKED;
 
-       ami_menu_alloc_item(md, M_PROJECT, NM_TITLE, "Project",       0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_NEWWIN,   NM_ITEM, "NewWindowNS", 'N', 
"TBImages:list_app",
+       ami_menu_alloc_item(md, M_PROJECT, NM_TITLE, "Project",      NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_NEWWIN,   NM_ITEM, "NewWindowNS",  "N", 
"TBImages:list_app",
                        ami_menu_item_project_newwin, NULL, 0);
-       ami_menu_alloc_item(md, M_NEWTAB,   NM_ITEM, "NewTab",      'T', 
"TBImages:list_tab",
+       ami_menu_alloc_item(md, M_NEWTAB,   NM_ITEM, "NewTab",       "T", 
"TBImages:list_tab",
                        ami_menu_item_project_newtab, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_P1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_OPEN,     NM_ITEM, "OpenFile",    'O', 
"TBImages:list_folder_misc",
+       ami_menu_alloc_item(md, M_BAR_P1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_OPEN,     NM_ITEM, "OpenFile",     "O", 
"TBImages:list_folder_misc",
                        ami_menu_item_project_open, NULL, 0);
-       ami_menu_alloc_item(md, M_SAVEAS,   NM_ITEM, "SaveAsNS",      0, 
"TBImages:list_saveas", NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SAVESRC,   NM_SUB, "Source",      'S', NULL,
+       ami_menu_alloc_item(md, M_SAVEAS,   NM_ITEM, "SaveAsNS",     NULL, 
"TBImages:list_saveas", NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SAVESRC,   NM_SUB, "Source",       "S", NULL,
                        ami_menu_item_project_save, (void *)AMINS_SAVE_SOURCE, 
0);
-       ami_menu_alloc_item(md, M_SAVETXT,   NM_SUB, "TextNS",        0, NULL,
+       ami_menu_alloc_item(md, M_SAVETXT,   NM_SUB, "TextNS",       NULL, NULL,
                        ami_menu_item_project_save, (void *)AMINS_SAVE_TEXT, 0);
-       ami_menu_alloc_item(md, M_SAVECOMP,  NM_SUB, "SaveCompNS",    0, NULL,
+       ami_menu_alloc_item(md, M_SAVECOMP,  NM_SUB, "SaveCompNS",   NULL, NULL,
                        ami_menu_item_project_save, (void 
*)AMINS_SAVE_COMPLETE, 0);
 #ifdef WITH_PDF_EXPORT
-       ami_menu_alloc_item(md, M_SAVEPDF,   NM_SUB, "PDFNS",         0, NULL,
+       ami_menu_alloc_item(md, M_SAVEPDF,   NM_SUB, "PDFNS",        NULL, NULL,
                        ami_menu_item_project_save, (void *)AMINS_SAVE_PDF, 0);
 #endif
-       ami_menu_alloc_item(md, M_SAVEIFF,   NM_SUB, "IFF",           0, NULL,
+       ami_menu_alloc_item(md, M_SAVEIFF,   NM_SUB, "IFF",          NULL, NULL,
                        ami_menu_item_project_save, (void *)AMINS_SAVE_IFF, 0);
-       ami_menu_alloc_item(md, M_BAR_P2,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_PRINT,    NM_ITEM, "PrintNS",     'P', 
"TBImages:list_print",
+       ami_menu_alloc_item(md, M_BAR_P2,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_PRINT,    NM_ITEM, "PrintNS",      "P", 
"TBImages:list_print",
                        ami_menu_item_project_print, NULL, NM_ITEMDISABLED);
-       ami_menu_alloc_item(md, M_BAR_P3,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_CLOSETAB, NM_ITEM, "CloseTab",    'K', 
"TBImages:list_remove",
+       ami_menu_alloc_item(md, M_BAR_P3,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_CLOSETAB, NM_ITEM, "CloseTab",     "K", 
"TBImages:list_remove",
                        ami_menu_item_project_closetab, NULL, 0);
-       ami_menu_alloc_item(md, M_CLOSEWIN, NM_ITEM, "CloseWindow",   0, 
"TBImages:list_cancel",
+       ami_menu_alloc_item(md, M_CLOSEWIN, NM_ITEM, "CloseWindow",  NULL, 
"TBImages:list_cancel",
                        ami_menu_item_project_closewin, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_P4,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);                          
-       ami_menu_alloc_item(md, M_ABOUT,    NM_ITEM, "About",       '?', 
"TBImages:list_info",
+       ami_menu_alloc_item(md, M_BAR_P4,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);                                
+       ami_menu_alloc_item(md, M_ABOUT,    NM_ITEM, "About",        "?", 
"TBImages:list_info",
                        ami_menu_item_project_about, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_P5,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);                          
-       ami_menu_alloc_item(md, M_QUIT,     NM_ITEM, "Quit",        'Q', 
"TBImages:list_warning",
+       ami_menu_alloc_item(md, M_BAR_P5,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);                                
+       ami_menu_alloc_item(md, M_QUIT,     NM_ITEM, "Quit",         "Q", 
"TBImages:list_warning",
                        ami_menu_item_project_quit, NULL, 0);
 
-       ami_menu_alloc_item(md, M_EDIT,    NM_TITLE, "Edit",          0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_CUT,      NM_ITEM, "CutNS",       'X', 
"TBImages:list_cut",
+       ami_menu_alloc_item(md, M_EDIT,    NM_TITLE, "Edit",         NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_CUT,      NM_ITEM, "CutNS",        "X", 
"TBImages:list_cut",
                        ami_menu_item_edit_cut, NULL, 0);
-       ami_menu_alloc_item(md, M_COPY,     NM_ITEM, "CopyNS",      'C', 
"TBImages:list_copy",
+       ami_menu_alloc_item(md, M_COPY,     NM_ITEM, "CopyNS",       "C", 
"TBImages:list_copy",
                        ami_menu_item_edit_copy, NULL, 0);
-       ami_menu_alloc_item(md, M_PASTE,    NM_ITEM, "PasteNS",     'V', 
"TBImages:list_paste",
+       ami_menu_alloc_item(md, M_PASTE,    NM_ITEM, "PasteNS",      "V", 
"TBImages:list_paste",
                        ami_menu_item_edit_paste, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_E1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SELALL,   NM_ITEM, "SelectAllNS", 'A', 
NSA_SPACE,
+       ami_menu_alloc_item(md, M_BAR_E1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SELALL,   NM_ITEM, "SelectAllNS",  "A", 
NSA_SPACE,
                        ami_menu_item_edit_selectall, NULL, 0);
-       ami_menu_alloc_item(md, M_CLEAR,    NM_ITEM, "ClearNS",       0, 
NSA_SPACE,
+       ami_menu_alloc_item(md, M_CLEAR,    NM_ITEM, "ClearNS",      NULL, 
NSA_SPACE,
                        ami_menu_item_edit_clearsel, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_E2,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_UNDO,     NM_ITEM, "Undo",        'Z', 
"TBImages:list_undo",
+       ami_menu_alloc_item(md, M_BAR_E2,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_UNDO,     NM_ITEM, "Undo",         "Z", 
"TBImages:list_undo",
                        ami_menu_item_edit_undo, NULL, 0);
-       ami_menu_alloc_item(md, M_REDO,     NM_ITEM, "Redo",        'Y', 
"TBImages:list_redo",
+       ami_menu_alloc_item(md, M_REDO,     NM_ITEM, "Redo",         "Y", 
"TBImages:list_redo",
                        ami_menu_item_edit_redo, NULL, 0);
 
-       ami_menu_alloc_item(md, M_BROWSER, NM_TITLE, "Browser",       0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_FIND,     NM_ITEM, "FindTextNS",   'F', 
"TBImages:list_search",
+       ami_menu_alloc_item(md, M_BROWSER, NM_TITLE, "Browser",      NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_FIND,     NM_ITEM, "FindTextNS",   "F", 
"TBImages:list_search",
                        ami_menu_item_browser_find, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_B1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_HISTLOCL, NM_ITEM, "HistLocalNS",   0, 
"TBImages:list_history",
+       ami_menu_alloc_item(md, M_BAR_B1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_HISTLOCL, NM_ITEM, "HistLocalNS",  NULL, 
"TBImages:list_history",
                        ami_menu_item_browser_localhistory, NULL, 0);
-       ami_menu_alloc_item(md, M_HISTGLBL, NM_ITEM, "HistGlobalNS",  0, 
"TBImages:list_history",
+       ami_menu_alloc_item(md, M_HISTGLBL, NM_ITEM, "HistGlobalNS", NULL, 
"TBImages:list_history",
                        ami_menu_item_browser_globalhistory, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_B2,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_COOKIES,  NM_ITEM, "ShowCookiesNS",   0, 
"TBImages:list_internet",
+       ami_menu_alloc_item(md, M_BAR_B2,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_COOKIES,  NM_ITEM, "ShowCookiesNS",NULL, 
"TBImages:list_internet",
                        ami_menu_item_browser_cookies, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_B3,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SCALE,    NM_ITEM, "ScaleNS",       0, 
"TBImages:list_preview", NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SCALEDEC,  NM_SUB, "ScaleDec",    '-', 
"TBImages:list_zoom_out",
+       ami_menu_alloc_item(md, M_BAR_B3,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SCALE,    NM_ITEM, "ScaleNS",      NULL, 
"TBImages:list_preview", NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SCALEDEC,  NM_SUB, "ScaleDec",     "-", 
"TBImages:list_zoom_out",
                        ami_menu_item_browser_scale_decrease, NULL, 0);
-       ami_menu_alloc_item(md, M_SCALENRM,  NM_SUB, "ScaleNorm",   '=', 
"TBImages:list_zoom_100",
+       ami_menu_alloc_item(md, M_SCALENRM,  NM_SUB, "ScaleNorm",    "=", 
"TBImages:list_zoom_100",
                        ami_menu_item_browser_scale_normal, NULL, 0);
-       ami_menu_alloc_item(md, M_SCALEINC,  NM_SUB, "ScaleInc",    '+', 
"TBImages:list_zoom_in",
+       ami_menu_alloc_item(md, M_SCALEINC,  NM_SUB, "ScaleInc",     "+", 
"TBImages:list_zoom_in",
                        ami_menu_item_browser_scale_increase, NULL, 0);
-       ami_menu_alloc_item(md, M_IMAGES,   NM_ITEM, "Images",        0, 
"TBImages:list_image", NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_IMGFORE,   NM_SUB, "ForeImg",       0, NULL,
+       ami_menu_alloc_item(md, M_IMAGES,   NM_ITEM, "Images",       NULL, 
"TBImages:list_image", NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_IMGFORE,   NM_SUB, "ForeImg",      NULL, NULL,
                        ami_menu_item_browser_foreimg, NULL, imgfore_flags);
-       ami_menu_alloc_item(md, M_IMGBACK,   NM_SUB, "BackImg",       0, NULL,
+       ami_menu_alloc_item(md, M_IMGBACK,   NM_SUB, "BackImg",      NULL, NULL,
                        ami_menu_item_browser_backimg, NULL, imgback_flags);
-       ami_menu_alloc_item(md, M_JS,       NM_ITEM, "EnableJS",      0, NULL,
+       ami_menu_alloc_item(md, M_JS,       NM_ITEM, "EnableJS",     NULL, NULL,
                        ami_menu_item_browser_enablejs, NULL, js_flags);
-       ami_menu_alloc_item(md, M_BAR_B4,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_REDRAW,   NM_ITEM, "Redraw",        0, 
"TBImages:list_wand",
+       ami_menu_alloc_item(md, M_BAR_B4,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_REDRAW,   NM_ITEM, "Redraw",       NULL, 
"TBImages:list_wand",
                        ami_menu_item_browser_redraw, NULL, 0);
 
-       ami_menu_alloc_item(md, M_HOTLIST, NM_TITLE, "Hotlist",       0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_HLADD,    NM_ITEM, "HotlistAdd",  'B', 
"TBImages:list_favouriteadd",
+       ami_menu_alloc_item(md, M_HOTLIST, NM_TITLE, "Hotlist",      NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_HLADD,    NM_ITEM, "HotlistAdd",   "B", 
"TBImages:list_favouriteadd",
                        ami_menu_item_hotlist_add, NULL, 0);
-       ami_menu_alloc_item(md, M_HLSHOW,   NM_ITEM,"HotlistShowNS",'H', 
"TBImages:list_favourite",
+       ami_menu_alloc_item(md, M_HLSHOW,   NM_ITEM,"HotlistShowNS", "H", 
"TBImages:list_favourite",
                        ami_menu_item_hotlist_show, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_H1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_BAR_H1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
 
-       ami_menu_alloc_item(md, M_PREFS,   NM_TITLE, "Settings",      0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_PREDIT,   NM_ITEM, "SettingsEdit",  0, 
"TBImages:list_prefs",
+       ami_menu_alloc_item(md, M_PREFS,   NM_TITLE, "Settings",     NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_PREDIT,   NM_ITEM, "SettingsEdit", NULL, 
"TBImages:list_prefs",
                        ami_menu_item_settings_edit, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_S1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SNAPSHOT, NM_ITEM, "SnapshotWindow",0, 
"TBImages:list_hold",
+       ami_menu_alloc_item(md, M_BAR_S1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SNAPSHOT, NM_ITEM, "SnapshotWindow",NULL, 
"TBImages:list_hold",
                        ami_menu_item_settings_snapshot, NULL, 0);
-       ami_menu_alloc_item(md, M_PRSAVE,   NM_ITEM, "SettingsSave",  0, 
"TBImages:list_use",
+       ami_menu_alloc_item(md, M_PRSAVE,   NM_ITEM, "SettingsSave", NULL, 
"TBImages:list_use",
                        ami_menu_item_settings_save, NULL, 0);
 
-       ami_menu_alloc_item(md, M_AREXX,   NM_TITLE, "ARexx",         0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_AREXXEX,  NM_ITEM, "ARexxExecute",'E', 
"TBImages:list_arexx",
+       ami_menu_alloc_item(md, M_AREXX,   NM_TITLE, "ARexx",        NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_AREXXEX,  NM_ITEM, "ARexxExecute", "E", 
"TBImages:list_arexx",
                        ami_menu_item_arexx_execute, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_A1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_MENU_AREXX_MAX,   NM_END, NULL,     0, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_BAR_A1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_MENU_AREXX_MAX,   NM_END, NULL,  NULL, 
NULL, NULL, NULL, 0);
 }
 
 /* Menu refresh for hotlist */
@@ -858,7 +866,7 @@ static int ami_menu_calc_item_width(struct ami_menu_data 
**md, int j, struct Ras
        item_size += space_width;
 
        if(md[j]->menukey) {
-               item_size += TextLength(rp, &md[j]->menukey, 1);
+               item_size += TextLength(rp, md[j]->menukey, 1);
                item_size += menu_glyph_width[NSA_GLYPH_AMIGAKEY];
                /**TODO: take account of the size of other imagery too
                 */
@@ -876,53 +884,68 @@ static int ami_menu_calc_item_width(struct ami_menu_data 
**md, int j, struct Ras
 }
 
 #ifdef __amigaos4__
-static void ami_menu_layout_mc_recursive(Object *menu_parent, struct 
ami_menu_data **md, int level, int *i, int max)
+static int ami_menu_layout_mc_recursive(Object *menu_parent, struct 
ami_menu_data **md, int level, int i, int max)
 {
+       int j;
        Object *menu_item = menu_parent;
-       ULONG item_type = T_ITEM;
-       
-       if(level == NM_TITLE) {
-               item_type = T_MENU;
-       }
        
-       while(*i <= max) {
+       for(j = i; j < max; j++) {
+               LOG("%d/%d", j, max);
                /* skip empty entries */
-               if(md[*i] == NULL) continue;
-               if(md[*i]->menutype == NM_IGNORE) continue;
-
-               if(md[*i]->menutype == level) {
-                       menu_item = NewObject(NULL, "menuclass",
-                               MA_Type, item_type,
-                               MA_ID, *i,
-                               MA_Label, md[*i]->menulab,
-                               MA_Image, md[*i]->menuicon,
-                               MA_Key, &md[*i]->menukey,
-                               MA_UserData, &md[*i]->menu_hook, /* NB: 
Intentionally UserData */
-                               MA_Disabled, (md[*i]->flags & NM_ITEMDISABLED),
-                               MA_Selected, (md[*i]->flags & CHECKED),
-                               MA_Toggle, (md[*i]->flags & MENUTOGGLE),
-                               TAG_DONE); 
+               if(md[j] == NULL) continue;
+               if(md[j]->menutype == NM_IGNORE) continue;
+
+               if(md[j]->menutype == level) {
+                       if(md[j]->menulab == NM_BARLABEL)
+                               md[j]->menulab = ML_SEPARATOR;
+
+                       if(level == NM_TITLE) {
+                               menu_item = NewObject(NULL, "menuclass",
+                                       MA_Type, T_MENU,
+                                       MA_Label, md[j]->menulab,
+                                       TAG_DONE);
+                       } else {
+                               menu_item = NewObject(NULL, "menuclass",
+                                       MA_Type, T_ITEM,
+                                       MA_ID, j,
+                                       MA_Label, md[j]->menulab,
+                                       MA_Image,
+                                               BitMapObj,
+                                                       IA_Scalable, TRUE,
+                                                       BITMAP_Screen, scrn,
+                                                       BITMAP_SourceFile, 
md[j]->menuicon,
+                                                       BITMAP_Masking, TRUE,
+                                               BitMapEnd,
+                                       MA_Key, md[j]->menukey,
+                                       MA_UserData, &md[j]->menu_hook, /* NB: 
Intentionally UserData */
+                                       MA_Disabled, (md[j]->flags & 
NM_ITEMDISABLED),
+                                       MA_Selected, (md[j]->flags & CHECKED),
+                                       MA_Toggle, (md[j]->flags & MENUTOGGLE),
+                                       TAG_DONE);
+                       }
+
+                       LOG("Adding item %p ID %d (%s) to parent %p", 
menu_item, j, md[j]->menulab, menu_parent);
                        IDoMethod(menu_parent, OM_ADDMEMBER, menu_item);
-               } else if (md[*i]->menutype > level) {
-                       ami_menu_layout_mc_recursive(menu_item, md, 
md[*i]->menutype, i, max);
+                       continue;
+               } else if (md[j]->menutype > level) {
+LOG("rec");
+                       j = ami_menu_layout_mc_recursive(menu_item, md, 
md[j]->menutype, j, max);
                } else {
+LOG("brk");
                        break;
                }
-               *i++;
        }
-       return;
+       return (j - 1);
 }
 
 static struct Menu *ami_menu_layout_mc(struct ami_menu_data **md, int max)
 {
-       int i = 0;
-
        Object *menu_root = NewObject(NULL, "menuclass",
                MA_Type, T_ROOT,
                MA_FreeImage, FALSE,
                TAG_DONE);
 
-       ami_menu_layout_mc_recursive(menu_root, md, NM_TITLE, &i, max);
+       ami_menu_layout_mc_recursive(menu_root, md, NM_TITLE, 0, max);
 
        return (struct Menu *)menu_root;
 }
@@ -1029,7 +1052,9 @@ static struct Menu *ami_menu_layout_gt(struct 
ami_menu_data **md, int max)
                else
                        nm[i].nm_Label = md[i]->menulab;
 
-               if(md[i]->menukey) nm[i].nm_CommKey = &md[i]->menukey;
+               if((md[i]->menukey) && (strlen(md[i]->menukey) > 1)) {
+                       nm[i].nm_CommKey = md[i]->menukey;
+               }
                nm[i].nm_Flags = md[i]->flags;
                if(md[i]->menu_hook.h_Entry) nm[i].nm_UserData = 
&md[i]->menu_hook;
 
@@ -1125,7 +1150,7 @@ void ami_menu_arexx_scan(struct ami_menu_data **md)
                                                        else
                                                                menu_lab = 
ead->ed_Name;
 
-                                                       ami_menu_alloc_item(md, 
item, NM_ITEM, menu_lab, 0, NSA_SPACE,
+                                                       ami_menu_alloc_item(md, 
item, NM_ITEM, menu_lab, NULL, NSA_SPACE,
                                                                
ami_menu_item_arexx_entries, (void *)strdup(ead->ed_Name), 0);
 
                                                        item++;
@@ -1139,7 +1164,7 @@ void ami_menu_arexx_scan(struct ami_menu_data **md)
                UnLock(lock);
        }
 
-       ami_menu_alloc_item(md, item, NM_END, NULL, 0, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, item, NM_END, NULL, NULL, NULL, NULL, NULL, 0);
 }
 
 static bool ami_menu_hotlist_add(void *userdata, int level, int item, const 
char *title, nsurl *url, bool is_folder)
@@ -1182,7 +1207,7 @@ static bool ami_menu_hotlist_add(void *userdata, int 
level, int item, const char
        }
 
        ami_menu_alloc_item(md, item, type, title,
-               0, icon, ami_menu_item_hotlist_entries, (void *)url, flags);
+               NULL, icon, ami_menu_item_hotlist_entries, (void *)url, flags);
 
        if(icon) FreeVec(icon);
 
@@ -1195,7 +1220,7 @@ static nserror ami_menu_scan(struct ami_menu_data **md)
 }
 
 #ifdef __amigaos4__
-void ami_menu_set_disabled_mc(struct Window *win, struct Menu *menu, int item, 
bool disable)
+static void ami_menu_set_disabled_mc(struct Window *win, struct Menu *menu, 
int item, bool disable)
 {
        ULONG disable_state = MS_DISABLED;
 
@@ -1203,7 +1228,7 @@ void ami_menu_set_disabled_mc(struct Window *win, struct 
Menu *menu, int item, b
                disable_state = 0;
        }
 
-       IDoMethod(menu, MM_SETSTATE, 0, item, MS_DISABLED, disable_state);
+       IDoMethod((Object *)menu, MM_SETSTATE, 0, item, MS_DISABLED, 
disable_state);
 }
 #endif
 
@@ -1224,7 +1249,7 @@ static ULONG ami_menu_number(int item)
                case M_SAVEIFF:
                        menu_num = FULLMENUNUM(0,4,3);
                break;
-#ifdef WITH_PDF_EXPORT:
+#ifdef WITH_PDF_EXPORT
                case M_SAVEPDF:
                        menu_num = FULLMENUNUM(0,4,4);
                break;
diff --git a/frontends/amiga/menu.h b/frontends/amiga/menu.h
index 43f7e1e..35a0ac7 100644
--- a/frontends/amiga/menu.h
+++ b/frontends/amiga/menu.h
@@ -123,7 +123,7 @@ void ami_menu_free_glyphs(void);
 
 /* generic menu alloc/free/layout */
 void ami_menu_alloc_item(struct ami_menu_data **md, int num, UBYTE type,
-                       const char *restrict label, char key, const char 
*restrict icon,
+                       const char *restrict label, const char *restrict key, 
const char *restrict icon,
                        void *restrict func, void *restrict hookdata, UWORD 
flags);
 struct Menu *ami_menu_layout(struct ami_menu_data **md, int max);
 void ami_menu_free_menu(struct ami_menu_data **md, int max, struct Menu 
*imenu);


-----------------------------------------------------------------------

Summary of changes:
 frontends/amiga/cookies.c |   38 ++++----
 frontends/amiga/history.c |   42 ++++----
 frontends/amiga/hotlist.c |   50 +++++-----
 frontends/amiga/menu.c    |  238 +++++++++++++++++++++++++--------------------
 frontends/amiga/menu.h    |    2 +-
 5 files changed, 196 insertions(+), 174 deletions(-)

diff --git a/frontends/amiga/cookies.c b/frontends/amiga/cookies.c
index 74c89cb..17933d5 100644
--- a/frontends/amiga/cookies.c
+++ b/frontends/amiga/cookies.c
@@ -239,38 +239,38 @@ HOOKF(void, ami_cookies_menu_item_edit_delete, APTR, 
window, struct IntuiMessage
 
 static void ami_cookies_menulabs(struct ami_menu_data **md)
 {
-       ami_menu_alloc_item(md, AMI_COOKIE_M_PROJECT, NM_TITLE, "Tree",       
0, NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND,   NM_ITEM, "Expand", 0, 
"TBImages:list_folderunfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_ALL,   NM_SUB, "All", '+', 
NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_PROJECT, NM_TITLE, "Tree", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND,   NM_ITEM, "Expand", NULL, 
"TBImages:list_folderunfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_ALL,   NM_SUB, "All", "+", 
NULL,
                ami_cookies_menu_item_project_expand_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_DOMAINS,   NM_SUB, 
"Domains", 0, NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_DOMAINS,   NM_SUB, 
"Domains", NULL, NULL,
                ami_cookies_menu_item_project_expand_domains, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_COOKIES,   NM_SUB, 
"Cookies", 0, NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EXPAND_COOKIES,   NM_SUB, 
"Cookies", NULL, NULL,
                ami_cookies_menu_item_project_expand_cookies, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE,   NM_ITEM, "Collapse", 
0, "TBImages:list_folderfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_ALL,   NM_SUB, "All", 
'-', NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE,   NM_ITEM, "Collapse", 
NULL, "TBImages:list_folderfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_ALL,   NM_SUB, "All", 
"-", NULL,
                ami_cookies_menu_item_project_collapse_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_DOMAINS,   NM_SUB, 
"Domains", 0, NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_DOMAINS,   NM_SUB, 
"Domains", NULL, NULL,
                ami_cookies_menu_item_project_collapse_domains, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_COOKIES,   NM_SUB, 
"Cookies", 0, NULL,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_COLLAPSE_COOKIES,   NM_SUB, 
"Cookies", NULL, NULL,
                ami_cookies_menu_item_project_collapse_cookies, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_P1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", 0, "TBImages:list_hold",
+       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_P1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", NULL, "TBImages:list_hold",
                ami_cookies_menu_item_project_snapshot, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_P2, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_CLOSE,   NM_ITEM, "CloseWindow", 
'K', "TBImages:list_cancel",
+       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_P2, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_CLOSE,   NM_ITEM, "CloseWindow", 
"K", "TBImages:list_cancel",
                ami_cookies_menu_item_project_close, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_COOKIE_M_EDIT, NM_TITLE, "Edit",       0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", 'A', NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_EDIT, NM_TITLE, "Edit", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", "A", NSA_SPACE,
                ami_cookies_menu_item_edit_select_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_CLEAR,   NM_ITEM, "ClearNS", 0, 
NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_COOKIE_M_CLEAR,   NM_ITEM, "ClearNS", NULL, 
NSA_SPACE,
                ami_cookies_menu_item_edit_clear, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_E1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_COOKIE_M_DELETE,   NM_ITEM, "TreeDelete", 
0, "TBImages:list_delete",
+       ami_menu_alloc_item(md, AMI_COOKIE_M_BAR_E1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_DELETE,   NM_ITEM, "TreeDelete", 
"Del", "TBImages:list_delete",
                ami_cookies_menu_item_edit_delete, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_COOKIE_M_LAST,   NM_END, NULL,     0, NULL, 
NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_COOKIE_M_LAST,   NM_END, NULL, NULL, NULL, 
NULL, NULL, 0);
 }
 
 static struct Menu *
diff --git a/frontends/amiga/history.c b/frontends/amiga/history.c
index b2a3cc0..a1c6bf6 100644
--- a/frontends/amiga/history.c
+++ b/frontends/amiga/history.c
@@ -308,41 +308,41 @@ HOOKF(void, ami_history_global_menu_item_edit_delete, 
APTR, window, struct Intui
 
 static void ami_history_global_menulabs(struct ami_menu_data **md)
 {
-       ami_menu_alloc_item(md, AMI_HISTORY_M_PROJECT, NM_TITLE, "Tree",       
0, NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPORT,   NM_ITEM, "TreeExport", 
'S', "TBImages:list_save",
+       ami_menu_alloc_item(md, AMI_HISTORY_M_PROJECT, NM_TITLE, "Tree", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPORT,   NM_ITEM, "TreeExport", 
"S", "TBImages:list_save",
                ami_history_global_menu_item_project_export, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND,   NM_ITEM, "Expand", 0, 
"TBImages:list_folderunfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_ALL,   NM_SUB, "All", '+', 
NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND,   NM_ITEM, "Expand", 
NULL, "TBImages:list_folderunfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_ALL,   NM_SUB, "All", "+", 
NULL,
                ami_history_global_menu_item_project_expand_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_FOLDERS,   NM_SUB, 
"Folders", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_FOLDERS,   NM_SUB, 
"Folders", NULL, NULL,
                ami_history_global_menu_item_project_expand_folders, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_LINKS,   NM_SUB, "Links", 
0, NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EXPAND_LINKS,   NM_SUB, "Links", 
NULL, NULL,
                ami_history_global_menu_item_project_expand_links, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE,   NM_ITEM, "Collapse", 
0, "TBImages:list_folderfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_ALL,   NM_SUB, "All", 
'-', NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE,   NM_ITEM, "Collapse", 
NULL, "TBImages:list_folderfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_ALL,   NM_SUB, "All", 
"-", NULL,
                ami_history_global_menu_item_project_collapse_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_FOLDERS,   NM_SUB, 
"Folders", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_FOLDERS,   NM_SUB, 
"Folders", NULL, NULL,
                ami_history_global_menu_item_project_collapse_folders, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_LINKS,   NM_SUB, 
"Links", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_COLLAPSE_LINKS,   NM_SUB, 
"Links", NULL, NULL,
                ami_history_global_menu_item_project_collapse_links, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P2, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", 0, "TBImages:list_hold",
+       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P2, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", NULL, "TBImages:list_hold",
                ami_history_global_menu_item_project_snapshot, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P3, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_CLOSE,   NM_ITEM, "CloseWindow", 
'K', "TBImages:list_cancel",
+       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_P3, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_CLOSE,   NM_ITEM, "CloseWindow", 
"K", "TBImages:list_cancel",
                ami_history_global_menu_item_project_close, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HISTORY_M_EDIT, NM_TITLE, "Edit",       0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", 'A', NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_EDIT, NM_TITLE, "Edit", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", "A", NSA_SPACE,
                ami_history_global_menu_item_edit_select_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_CLEAR,   NM_ITEM, "ClearNS", 0, 
NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_HISTORY_M_CLEAR,   NM_ITEM, "ClearNS", 
NULL, NSA_SPACE,
                ami_history_global_menu_item_edit_clear, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_E1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HISTORY_M_DELETE,   NM_ITEM, "TreeDelete", 
0, "TBImages:list_delete",
+       ami_menu_alloc_item(md, AMI_HISTORY_M_BAR_E1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_DELETE,   NM_ITEM, "TreeDelete", 
"Del", "TBImages:list_delete",
                ami_history_global_menu_item_edit_delete, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HISTORY_M_LAST,   NM_END, NULL,     0, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HISTORY_M_LAST,   NM_END, NULL, NULL, NULL, 
NULL, NULL, 0);
 }
 
 static struct Menu *
diff --git a/frontends/amiga/hotlist.c b/frontends/amiga/hotlist.c
index 8aa181b..6d6f7ce 100644
--- a/frontends/amiga/hotlist.c
+++ b/frontends/amiga/hotlist.c
@@ -404,49 +404,49 @@ HOOKF(void, ami_hotlist_menu_item_edit_delete, APTR, 
window, struct IntuiMessage
 
 static void ami_hotlist_menulabs(struct ami_menu_data **md)
 {
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_PROJECT, NM_TITLE, "Tree",       
0, NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPORT,   NM_ITEM, "TreeExport", 
'S', "TBImages:list_save",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_PROJECT, NM_TITLE, "Tree", NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPORT,   NM_ITEM, "TreeExport", 
"S", "TBImages:list_save",
                ami_hotlist_menu_item_project_export, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND,   NM_ITEM, "Expand", 0, 
"TBImages:list_folderunfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_ALL,   NM_SUB, "All", '+', 
NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND,   NM_ITEM, "Expand", 
NULL, "TBImages:list_folderunfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_ALL,   NM_SUB, "All", "+", 
NULL,
                ami_hotlist_menu_item_project_expand_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_FOLDERS,   NM_SUB, 
"Folders", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_FOLDERS,   NM_SUB, 
"Folders", NULL, NULL,
                ami_hotlist_menu_item_project_expand_folders, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_LINKS,   NM_SUB, "Links", 
0, NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EXPAND_LINKS,   NM_SUB, "Links", 
NULL, NULL,
                ami_hotlist_menu_item_project_expand_links, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE,   NM_ITEM, "Collapse", 
0, "TBImages:list_folderfold", NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_ALL,   NM_SUB, "All", 
'-', NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE,   NM_ITEM, "Collapse", 
NULL, "TBImages:list_folderfold", NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_ALL,   NM_SUB, "All", 
"-", NULL,
                ami_hotlist_menu_item_project_collapse_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_FOLDERS,   NM_SUB, 
"Folders", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_FOLDERS,   NM_SUB, 
"Folders", NULL, NULL,
                ami_hotlist_menu_item_project_collapse_folders, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_LINKS,   NM_SUB, 
"Links", 0, NULL,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_COLLAPSE_LINKS,   NM_SUB, 
"Links", NULL, NULL,
                ami_hotlist_menu_item_project_collapse_links, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P2, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", 0, "TBImages:list_hold",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P2, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_SNAPSHOT,   NM_ITEM, 
"SnapshotWindow", NULL, "TBImages:list_hold",
                ami_hotlist_menu_item_project_snapshot, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P3, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_CLOSE,   NM_ITEM, "CloseWindow", 
'K', "TBImages:list_cancel",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_P3, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_CLOSE,   NM_ITEM, "CloseWindow", 
"K", "TBImages:list_cancel",
                ami_hotlist_menu_item_project_close, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EDIT, NM_TITLE, "Edit",       0, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EDIT, NM_TITLE, "Edit", NULL, 
NULL, NULL, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_NEWFOLDER,   NM_ITEM, 
"TreeNewFolder", 'N', "TBImages:list_drawer",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_NEWFOLDER,   NM_ITEM, 
"TreeNewFolder", "N", "TBImages:list_drawer",
                ami_hotlist_menu_item_edit_newfolder, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_NEWLINK,   NM_ITEM, 
"TreeNewLink", 0, "TBImages:list_favouriteadd",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_NEWLINK,   NM_ITEM, 
"TreeNewLink", NULL, "TBImages:list_favouriteadd",
                ami_hotlist_menu_item_edit_newlink, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_EDIT_EDIT,   NM_ITEM, "TreeEdit", 
'E', "TBImages:list_edit",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_EDIT_EDIT,   NM_ITEM, "TreeEdit", 
"E", "TBImages:list_edit",
                ami_hotlist_menu_item_edit_edit, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_E1, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", 'A', NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_E1, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_SELECTALL,   NM_ITEM, 
"SelectAllNS", "A", NSA_SPACE,
                ami_hotlist_menu_item_edit_select_all, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_CLEAR,   NM_ITEM, "ClearNS", 0, 
NSA_SPACE,
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_CLEAR,   NM_ITEM, "ClearNS", 
NULL, NSA_SPACE,
                ami_hotlist_menu_item_edit_clear, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_E2, NM_ITEM, NM_BARLABEL, 0, 
NULL, NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_DELETE,   NM_ITEM, "TreeDelete", 
0, "TBImages:list_delete",
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_BAR_E2, NM_ITEM, NM_BARLABEL, 
NULL, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_DELETE,   NM_ITEM, "TreeDelete", 
"Del", "TBImages:list_delete",
                ami_hotlist_menu_item_edit_delete, NULL, 0);
 
-       ami_menu_alloc_item(md, AMI_HOTLIST_M_LAST,   NM_END, NULL,     0, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_HOTLIST_M_LAST,   NM_END, NULL, NULL, NULL, 
NULL, NULL, 0);
 }
 
 static struct Menu *
diff --git a/frontends/amiga/menu.c b/frontends/amiga/menu.c
index 175fe15..cfb3429 100644
--- a/frontends/amiga/menu.c
+++ b/frontends/amiga/menu.c
@@ -92,7 +92,7 @@ enum {
 struct ami_menu_data {
        char *restrict menulab;
        Object *restrict menuobj;
-       char menukey;
+       char *restrict menukey;
        char *restrict menuicon;
        struct Hook menu_hook;
        UBYTE menutype;
@@ -120,7 +120,7 @@ static bool ami_menu_get_selected(struct Menu *menu, struct 
IntuiMessage *msg)
                ULONG state;
                struct ExtIntuiMessage *emsg = (struct ExtIntuiMessage *)msg;
 
-               state = IDoMethod(menu, MM_GETSTATE, 0, emsg->eim_LongCode, 
MS_CHECKED);
+               state = IDoMethod((Object *)menu, MM_GETSTATE, 0, 
emsg->eim_LongCode, MS_CHECKED);
                if(state & MS_CHECKED) checked = true;
 #endif 
        } else {
@@ -571,7 +571,9 @@ static void ami_menu_free_labs(struct ami_menu_data **md, 
int max)
 
        for(i = 0; i <= max; i++) {
                if(md[i] == NULL) continue;
-               if(md[i]->menulab && (md[i]->menulab != NM_BARLABEL)) {
+               if(md[i]->menulab &&
+                               (md[i]->menulab != NM_BARLABEL) &&
+                               (md[i]->menulab != ML_SEPARATOR)) {
                        if(md[i]->menutype & MENU_IMAGE) {
                                if(md[i]->menuobj) 
DisposeObject(md[i]->menuobj);
                        }
@@ -579,9 +581,11 @@ static void ami_menu_free_labs(struct ami_menu_data **md, 
int max)
                        ami_utf8_free(md[i]->menulab);
                }
 
+               if(md[i]->menukey != NULL) free(md[i]->menukey);
+
                md[i]->menulab = NULL;
                md[i]->menuobj = NULL;
-               md[i]->menukey = 0;
+               md[i]->menukey = NULL;
                md[i]->menutype = 0;
                free(md[i]);
        }
@@ -593,7 +597,9 @@ void ami_free_menulabs(struct ami_menu_data **md)
 
        for(i=0;i<=AMI_MENU_AREXX_MAX;i++) {
                if(md[i] == NULL) continue;
-               if(md[i]->menulab && (md[i]->menulab != NM_BARLABEL)) {
+               if(md[i]->menulab &&
+                               (md[i]->menulab != NM_BARLABEL) &&
+                               (md[i]->menulab != ML_SEPARATOR)) {
                        if(md[i]->menutype & MENU_IMAGE) {
                                if(md[i]->menuobj) 
DisposeObject(md[i]->menuobj);
                        }
@@ -606,16 +612,18 @@ void ami_free_menulabs(struct ami_menu_data **md)
                        }
                }
 
+               if(md[i]->menukey != NULL) free(md[i]->menukey);
+
                md[i]->menulab = NULL;
                md[i]->menuobj = NULL;
-               md[i]->menukey = 0;
+               md[i]->menukey = NULL;
                md[i]->menutype = 0;
                free(md[i]);
        }
 }
 
 void ami_menu_alloc_item(struct ami_menu_data **md, int num, UBYTE type,
-                       const char *restrict label, char key, const char 
*restrict icon,
+                       const char *restrict label, const char *restrict key, 
const char *restrict icon,
                        void *restrict func, void *restrict hookdata, UWORD 
flags)
 {
        char menu_icon[1024];
@@ -628,6 +636,7 @@ void ami_menu_alloc_item(struct ami_menu_data **md, int 
num, UBYTE type,
 
        if((label == NM_BARLABEL) || (strcmp(label, "--") == 0)) {
                md[num]->menulab = NM_BARLABEL;
+               icon = NULL;
        } else { /* horrid non-generic stuff */
                if((num >= AMI_MENU_HOTLIST) && (num <= AMI_MENU_HOTLIST_MAX)) {
                        utf8_from_local_encoding(label,
@@ -641,7 +650,7 @@ void ami_menu_alloc_item(struct ami_menu_data **md, int 
num, UBYTE type,
        }
 
        md[num]->menuicon = NULL;
-       if(key) md[num]->menukey = key;
+       if(key) md[num]->menukey = strdup(key);
        if(func) md[num]->menu_hook.h_Entry = (HOOKFUNC)func;
        if(hookdata) md[num]->menu_hook.h_Data = hookdata;
 
@@ -673,111 +682,111 @@ static void ami_init_menulabs(struct ami_menu_data **md)
        if(nsoption_bool(background_images) == true)
                imgback_flags |= CHECKED;
 
-       ami_menu_alloc_item(md, M_PROJECT, NM_TITLE, "Project",       0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_NEWWIN,   NM_ITEM, "NewWindowNS", 'N', 
"TBImages:list_app",
+       ami_menu_alloc_item(md, M_PROJECT, NM_TITLE, "Project",      NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_NEWWIN,   NM_ITEM, "NewWindowNS",  "N", 
"TBImages:list_app",
                        ami_menu_item_project_newwin, NULL, 0);
-       ami_menu_alloc_item(md, M_NEWTAB,   NM_ITEM, "NewTab",      'T', 
"TBImages:list_tab",
+       ami_menu_alloc_item(md, M_NEWTAB,   NM_ITEM, "NewTab",       "T", 
"TBImages:list_tab",
                        ami_menu_item_project_newtab, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_P1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_OPEN,     NM_ITEM, "OpenFile",    'O', 
"TBImages:list_folder_misc",
+       ami_menu_alloc_item(md, M_BAR_P1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_OPEN,     NM_ITEM, "OpenFile",     "O", 
"TBImages:list_folder_misc",
                        ami_menu_item_project_open, NULL, 0);
-       ami_menu_alloc_item(md, M_SAVEAS,   NM_ITEM, "SaveAsNS",      0, 
"TBImages:list_saveas", NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SAVESRC,   NM_SUB, "Source",      'S', NULL,
+       ami_menu_alloc_item(md, M_SAVEAS,   NM_ITEM, "SaveAsNS",     NULL, 
"TBImages:list_saveas", NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SAVESRC,   NM_SUB, "Source",       "S", NULL,
                        ami_menu_item_project_save, (void *)AMINS_SAVE_SOURCE, 
0);
-       ami_menu_alloc_item(md, M_SAVETXT,   NM_SUB, "TextNS",        0, NULL,
+       ami_menu_alloc_item(md, M_SAVETXT,   NM_SUB, "TextNS",       NULL, NULL,
                        ami_menu_item_project_save, (void *)AMINS_SAVE_TEXT, 0);
-       ami_menu_alloc_item(md, M_SAVECOMP,  NM_SUB, "SaveCompNS",    0, NULL,
+       ami_menu_alloc_item(md, M_SAVECOMP,  NM_SUB, "SaveCompNS",   NULL, NULL,
                        ami_menu_item_project_save, (void 
*)AMINS_SAVE_COMPLETE, 0);
 #ifdef WITH_PDF_EXPORT
-       ami_menu_alloc_item(md, M_SAVEPDF,   NM_SUB, "PDFNS",         0, NULL,
+       ami_menu_alloc_item(md, M_SAVEPDF,   NM_SUB, "PDFNS",        NULL, NULL,
                        ami_menu_item_project_save, (void *)AMINS_SAVE_PDF, 0);
 #endif
-       ami_menu_alloc_item(md, M_SAVEIFF,   NM_SUB, "IFF",           0, NULL,
+       ami_menu_alloc_item(md, M_SAVEIFF,   NM_SUB, "IFF",          NULL, NULL,
                        ami_menu_item_project_save, (void *)AMINS_SAVE_IFF, 0);
-       ami_menu_alloc_item(md, M_BAR_P2,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_PRINT,    NM_ITEM, "PrintNS",     'P', 
"TBImages:list_print",
+       ami_menu_alloc_item(md, M_BAR_P2,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_PRINT,    NM_ITEM, "PrintNS",      "P", 
"TBImages:list_print",
                        ami_menu_item_project_print, NULL, NM_ITEMDISABLED);
-       ami_menu_alloc_item(md, M_BAR_P3,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_CLOSETAB, NM_ITEM, "CloseTab",    'K', 
"TBImages:list_remove",
+       ami_menu_alloc_item(md, M_BAR_P3,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_CLOSETAB, NM_ITEM, "CloseTab",     "K", 
"TBImages:list_remove",
                        ami_menu_item_project_closetab, NULL, 0);
-       ami_menu_alloc_item(md, M_CLOSEWIN, NM_ITEM, "CloseWindow",   0, 
"TBImages:list_cancel",
+       ami_menu_alloc_item(md, M_CLOSEWIN, NM_ITEM, "CloseWindow",  NULL, 
"TBImages:list_cancel",
                        ami_menu_item_project_closewin, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_P4,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);                          
-       ami_menu_alloc_item(md, M_ABOUT,    NM_ITEM, "About",       '?', 
"TBImages:list_info",
+       ami_menu_alloc_item(md, M_BAR_P4,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);                                
+       ami_menu_alloc_item(md, M_ABOUT,    NM_ITEM, "About",        "?", 
"TBImages:list_info",
                        ami_menu_item_project_about, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_P5,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);                          
-       ami_menu_alloc_item(md, M_QUIT,     NM_ITEM, "Quit",        'Q', 
"TBImages:list_warning",
+       ami_menu_alloc_item(md, M_BAR_P5,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);                                
+       ami_menu_alloc_item(md, M_QUIT,     NM_ITEM, "Quit",         "Q", 
"TBImages:list_warning",
                        ami_menu_item_project_quit, NULL, 0);
 
-       ami_menu_alloc_item(md, M_EDIT,    NM_TITLE, "Edit",          0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_CUT,      NM_ITEM, "CutNS",       'X', 
"TBImages:list_cut",
+       ami_menu_alloc_item(md, M_EDIT,    NM_TITLE, "Edit",         NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_CUT,      NM_ITEM, "CutNS",        "X", 
"TBImages:list_cut",
                        ami_menu_item_edit_cut, NULL, 0);
-       ami_menu_alloc_item(md, M_COPY,     NM_ITEM, "CopyNS",      'C', 
"TBImages:list_copy",
+       ami_menu_alloc_item(md, M_COPY,     NM_ITEM, "CopyNS",       "C", 
"TBImages:list_copy",
                        ami_menu_item_edit_copy, NULL, 0);
-       ami_menu_alloc_item(md, M_PASTE,    NM_ITEM, "PasteNS",     'V', 
"TBImages:list_paste",
+       ami_menu_alloc_item(md, M_PASTE,    NM_ITEM, "PasteNS",      "V", 
"TBImages:list_paste",
                        ami_menu_item_edit_paste, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_E1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SELALL,   NM_ITEM, "SelectAllNS", 'A', 
NSA_SPACE,
+       ami_menu_alloc_item(md, M_BAR_E1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SELALL,   NM_ITEM, "SelectAllNS",  "A", 
NSA_SPACE,
                        ami_menu_item_edit_selectall, NULL, 0);
-       ami_menu_alloc_item(md, M_CLEAR,    NM_ITEM, "ClearNS",       0, 
NSA_SPACE,
+       ami_menu_alloc_item(md, M_CLEAR,    NM_ITEM, "ClearNS",      NULL, 
NSA_SPACE,
                        ami_menu_item_edit_clearsel, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_E2,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_UNDO,     NM_ITEM, "Undo",        'Z', 
"TBImages:list_undo",
+       ami_menu_alloc_item(md, M_BAR_E2,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_UNDO,     NM_ITEM, "Undo",         "Z", 
"TBImages:list_undo",
                        ami_menu_item_edit_undo, NULL, 0);
-       ami_menu_alloc_item(md, M_REDO,     NM_ITEM, "Redo",        'Y', 
"TBImages:list_redo",
+       ami_menu_alloc_item(md, M_REDO,     NM_ITEM, "Redo",         "Y", 
"TBImages:list_redo",
                        ami_menu_item_edit_redo, NULL, 0);
 
-       ami_menu_alloc_item(md, M_BROWSER, NM_TITLE, "Browser",       0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_FIND,     NM_ITEM, "FindTextNS",   'F', 
"TBImages:list_search",
+       ami_menu_alloc_item(md, M_BROWSER, NM_TITLE, "Browser",      NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_FIND,     NM_ITEM, "FindTextNS",   "F", 
"TBImages:list_search",
                        ami_menu_item_browser_find, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_B1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_HISTLOCL, NM_ITEM, "HistLocalNS",   0, 
"TBImages:list_history",
+       ami_menu_alloc_item(md, M_BAR_B1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_HISTLOCL, NM_ITEM, "HistLocalNS",  NULL, 
"TBImages:list_history",
                        ami_menu_item_browser_localhistory, NULL, 0);
-       ami_menu_alloc_item(md, M_HISTGLBL, NM_ITEM, "HistGlobalNS",  0, 
"TBImages:list_history",
+       ami_menu_alloc_item(md, M_HISTGLBL, NM_ITEM, "HistGlobalNS", NULL, 
"TBImages:list_history",
                        ami_menu_item_browser_globalhistory, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_B2,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_COOKIES,  NM_ITEM, "ShowCookiesNS",   0, 
"TBImages:list_internet",
+       ami_menu_alloc_item(md, M_BAR_B2,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_COOKIES,  NM_ITEM, "ShowCookiesNS",NULL, 
"TBImages:list_internet",
                        ami_menu_item_browser_cookies, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_B3,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SCALE,    NM_ITEM, "ScaleNS",       0, 
"TBImages:list_preview", NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SCALEDEC,  NM_SUB, "ScaleDec",    '-', 
"TBImages:list_zoom_out",
+       ami_menu_alloc_item(md, M_BAR_B3,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SCALE,    NM_ITEM, "ScaleNS",      NULL, 
"TBImages:list_preview", NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SCALEDEC,  NM_SUB, "ScaleDec",     "-", 
"TBImages:list_zoom_out",
                        ami_menu_item_browser_scale_decrease, NULL, 0);
-       ami_menu_alloc_item(md, M_SCALENRM,  NM_SUB, "ScaleNorm",   '=', 
"TBImages:list_zoom_100",
+       ami_menu_alloc_item(md, M_SCALENRM,  NM_SUB, "ScaleNorm",    "=", 
"TBImages:list_zoom_100",
                        ami_menu_item_browser_scale_normal, NULL, 0);
-       ami_menu_alloc_item(md, M_SCALEINC,  NM_SUB, "ScaleInc",    '+', 
"TBImages:list_zoom_in",
+       ami_menu_alloc_item(md, M_SCALEINC,  NM_SUB, "ScaleInc",     "+", 
"TBImages:list_zoom_in",
                        ami_menu_item_browser_scale_increase, NULL, 0);
-       ami_menu_alloc_item(md, M_IMAGES,   NM_ITEM, "Images",        0, 
"TBImages:list_image", NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_IMGFORE,   NM_SUB, "ForeImg",       0, NULL,
+       ami_menu_alloc_item(md, M_IMAGES,   NM_ITEM, "Images",       NULL, 
"TBImages:list_image", NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_IMGFORE,   NM_SUB, "ForeImg",      NULL, NULL,
                        ami_menu_item_browser_foreimg, NULL, imgfore_flags);
-       ami_menu_alloc_item(md, M_IMGBACK,   NM_SUB, "BackImg",       0, NULL,
+       ami_menu_alloc_item(md, M_IMGBACK,   NM_SUB, "BackImg",      NULL, NULL,
                        ami_menu_item_browser_backimg, NULL, imgback_flags);
-       ami_menu_alloc_item(md, M_JS,       NM_ITEM, "EnableJS",      0, NULL,
+       ami_menu_alloc_item(md, M_JS,       NM_ITEM, "EnableJS",     NULL, NULL,
                        ami_menu_item_browser_enablejs, NULL, js_flags);
-       ami_menu_alloc_item(md, M_BAR_B4,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_REDRAW,   NM_ITEM, "Redraw",        0, 
"TBImages:list_wand",
+       ami_menu_alloc_item(md, M_BAR_B4,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_REDRAW,   NM_ITEM, "Redraw",       NULL, 
"TBImages:list_wand",
                        ami_menu_item_browser_redraw, NULL, 0);
 
-       ami_menu_alloc_item(md, M_HOTLIST, NM_TITLE, "Hotlist",       0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_HLADD,    NM_ITEM, "HotlistAdd",  'B', 
"TBImages:list_favouriteadd",
+       ami_menu_alloc_item(md, M_HOTLIST, NM_TITLE, "Hotlist",      NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_HLADD,    NM_ITEM, "HotlistAdd",   "B", 
"TBImages:list_favouriteadd",
                        ami_menu_item_hotlist_add, NULL, 0);
-       ami_menu_alloc_item(md, M_HLSHOW,   NM_ITEM,"HotlistShowNS",'H', 
"TBImages:list_favourite",
+       ami_menu_alloc_item(md, M_HLSHOW,   NM_ITEM,"HotlistShowNS", "H", 
"TBImages:list_favourite",
                        ami_menu_item_hotlist_show, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_H1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_BAR_H1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
 
-       ami_menu_alloc_item(md, M_PREFS,   NM_TITLE, "Settings",      0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_PREDIT,   NM_ITEM, "SettingsEdit",  0, 
"TBImages:list_prefs",
+       ami_menu_alloc_item(md, M_PREFS,   NM_TITLE, "Settings",     NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_PREDIT,   NM_ITEM, "SettingsEdit", NULL, 
"TBImages:list_prefs",
                        ami_menu_item_settings_edit, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_S1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_SNAPSHOT, NM_ITEM, "SnapshotWindow",0, 
"TBImages:list_hold",
+       ami_menu_alloc_item(md, M_BAR_S1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_SNAPSHOT, NM_ITEM, "SnapshotWindow",NULL, 
"TBImages:list_hold",
                        ami_menu_item_settings_snapshot, NULL, 0);
-       ami_menu_alloc_item(md, M_PRSAVE,   NM_ITEM, "SettingsSave",  0, 
"TBImages:list_use",
+       ami_menu_alloc_item(md, M_PRSAVE,   NM_ITEM, "SettingsSave", NULL, 
"TBImages:list_use",
                        ami_menu_item_settings_save, NULL, 0);
 
-       ami_menu_alloc_item(md, M_AREXX,   NM_TITLE, "ARexx",         0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, M_AREXXEX,  NM_ITEM, "ARexxExecute",'E', 
"TBImages:list_arexx",
+       ami_menu_alloc_item(md, M_AREXX,   NM_TITLE, "ARexx",        NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_AREXXEX,  NM_ITEM, "ARexxExecute", "E", 
"TBImages:list_arexx",
                        ami_menu_item_arexx_execute, NULL, 0);
-       ami_menu_alloc_item(md, M_BAR_A1,   NM_ITEM, NM_BARLABEL,     0, NULL, 
NULL, NULL, 0);
-       ami_menu_alloc_item(md, AMI_MENU_AREXX_MAX,   NM_END, NULL,     0, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, M_BAR_A1,   NM_ITEM, NM_BARLABEL,    NULL, 
NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, AMI_MENU_AREXX_MAX,   NM_END, NULL,  NULL, 
NULL, NULL, NULL, 0);
 }
 
 /* Menu refresh for hotlist */
@@ -858,7 +867,7 @@ static int ami_menu_calc_item_width(struct ami_menu_data 
**md, int j, struct Ras
        item_size += space_width;
 
        if(md[j]->menukey) {
-               item_size += TextLength(rp, &md[j]->menukey, 1);
+               item_size += TextLength(rp, md[j]->menukey, 1);
                item_size += menu_glyph_width[NSA_GLYPH_AMIGAKEY];
                /**TODO: take account of the size of other imagery too
                 */
@@ -876,53 +885,64 @@ static int ami_menu_calc_item_width(struct ami_menu_data 
**md, int j, struct Ras
 }
 
 #ifdef __amigaos4__
-static void ami_menu_layout_mc_recursive(Object *menu_parent, struct 
ami_menu_data **md, int level, int *i, int max)
+static int ami_menu_layout_mc_recursive(Object *menu_parent, struct 
ami_menu_data **md, int level, int i, int max)
 {
+       int j;
        Object *menu_item = menu_parent;
-       ULONG item_type = T_ITEM;
-       
-       if(level == NM_TITLE) {
-               item_type = T_MENU;
-       }
        
-       while(*i <= max) {
+       for(j = i; j < max; j++) {
                /* skip empty entries */
-               if(md[*i] == NULL) continue;
-               if(md[*i]->menutype == NM_IGNORE) continue;
-
-               if(md[*i]->menutype == level) {
-                       menu_item = NewObject(NULL, "menuclass",
-                               MA_Type, item_type,
-                               MA_ID, *i,
-                               MA_Label, md[*i]->menulab,
-                               MA_Image, md[*i]->menuicon,
-                               MA_Key, &md[*i]->menukey,
-                               MA_UserData, &md[*i]->menu_hook, /* NB: 
Intentionally UserData */
-                               MA_Disabled, (md[*i]->flags & NM_ITEMDISABLED),
-                               MA_Selected, (md[*i]->flags & CHECKED),
-                               MA_Toggle, (md[*i]->flags & MENUTOGGLE),
-                               TAG_DONE); 
+               if(md[j] == NULL) continue;
+               if(md[j]->menutype == NM_IGNORE) continue;
+
+               if(md[j]->menutype == level) {
+                       if(md[j]->menulab == NM_BARLABEL)
+                               md[j]->menulab = ML_SEPARATOR;
+
+                       if(level == NM_TITLE) {
+                               menu_item = NewObject(NULL, "menuclass",
+                                       MA_Type, T_MENU,
+                                       MA_Label, md[j]->menulab,
+                                       TAG_DONE);
+                       } else {
+                               menu_item = NewObject(NULL, "menuclass",
+                                       MA_Type, T_ITEM,
+                                       MA_ID, j,
+                                       MA_Label, md[j]->menulab,
+                                       MA_Image,
+                                               BitMapObj,
+                                                       IA_Scalable, TRUE,
+                                                       BITMAP_Screen, scrn,
+                                                       BITMAP_SourceFile, 
md[j]->menuicon,
+                                                       BITMAP_Masking, TRUE,
+                                               BitMapEnd,
+                                       MA_Key, md[j]->menukey,
+                                       MA_UserData, &md[j]->menu_hook, /* NB: 
Intentionally UserData */
+                                       MA_Disabled, (md[j]->flags & 
NM_ITEMDISABLED),
+                                       MA_Selected, (md[j]->flags & CHECKED),
+                                       MA_Toggle, (md[j]->flags & MENUTOGGLE),
+                                       TAG_DONE);
+                       }
+
                        IDoMethod(menu_parent, OM_ADDMEMBER, menu_item);
-               } else if (md[*i]->menutype > level) {
-                       ami_menu_layout_mc_recursive(menu_item, md, 
md[*i]->menutype, i, max);
+                       continue;
+               } else if (md[j]->menutype > level) {
+                       j = ami_menu_layout_mc_recursive(menu_item, md, 
md[j]->menutype, j, max);
                } else {
                        break;
                }
-               *i++;
        }
-       return;
+       return (j - 1);
 }
 
 static struct Menu *ami_menu_layout_mc(struct ami_menu_data **md, int max)
 {
-       int i = 0;
-
        Object *menu_root = NewObject(NULL, "menuclass",
                MA_Type, T_ROOT,
-               MA_FreeImage, FALSE,
+               MA_EmbeddedKey, FALSE,
                TAG_DONE);
 
-       ami_menu_layout_mc_recursive(menu_root, md, NM_TITLE, &i, max);
+       ami_menu_layout_mc_recursive(menu_root, md, NM_TITLE, 0, max);
 
        return (struct Menu *)menu_root;
 }
@@ -1029,7 +1049,9 @@ static struct Menu *ami_menu_layout_gt(struct 
ami_menu_data **md, int max)
                else
                        nm[i].nm_Label = md[i]->menulab;
 
-               if(md[i]->menukey) nm[i].nm_CommKey = &md[i]->menukey;
+               if((md[i]->menukey) && (strlen(md[i]->menukey) > 1)) {
+                       nm[i].nm_CommKey = md[i]->menukey;
+               }
                nm[i].nm_Flags = md[i]->flags;
                if(md[i]->menu_hook.h_Entry) nm[i].nm_UserData = 
&md[i]->menu_hook;
 
@@ -1084,7 +1106,7 @@ void ami_menu_free_menu(struct ami_menu_data **md, int 
max, struct Menu *imenu)
 struct Menu *ami_menu_create(struct gui_window_2 *gwin)
 {
        ami_init_menulabs(gwin->menu_data);
-       ami_menu_scan(gwin->menu_data); //\todo this needs to be MenuClass 
created
+       ami_menu_scan(gwin->menu_data);
        ami_menu_arexx_scan(gwin->menu_data);
        gwin->imenu = ami_menu_layout(gwin->menu_data, AMI_MENU_AREXX_MAX);
 
@@ -1125,7 +1147,7 @@ void ami_menu_arexx_scan(struct ami_menu_data **md)
                                                        else
                                                                menu_lab = 
ead->ed_Name;
 
-                                                       ami_menu_alloc_item(md, 
item, NM_ITEM, menu_lab, 0, NSA_SPACE,
+                                                       ami_menu_alloc_item(md, 
item, NM_ITEM, menu_lab, NULL, NSA_SPACE,
                                                                
ami_menu_item_arexx_entries, (void *)strdup(ead->ed_Name), 0);
 
                                                        item++;
@@ -1139,7 +1161,7 @@ void ami_menu_arexx_scan(struct ami_menu_data **md)
                UnLock(lock);
        }
 
-       ami_menu_alloc_item(md, item, NM_END, NULL, 0, NULL, NULL, NULL, 0);
+       ami_menu_alloc_item(md, item, NM_END, NULL, NULL, NULL, NULL, NULL, 0);
 }
 
 static bool ami_menu_hotlist_add(void *userdata, int level, int item, const 
char *title, nsurl *url, bool is_folder)
@@ -1182,7 +1204,7 @@ static bool ami_menu_hotlist_add(void *userdata, int 
level, int item, const char
        }
 
        ami_menu_alloc_item(md, item, type, title,
-               0, icon, ami_menu_item_hotlist_entries, (void *)url, flags);
+               NULL, icon, ami_menu_item_hotlist_entries, (void *)url, flags);
 
        if(icon) FreeVec(icon);
 
@@ -1195,7 +1217,7 @@ static nserror ami_menu_scan(struct ami_menu_data **md)
 }
 
 #ifdef __amigaos4__
-void ami_menu_set_disabled_mc(struct Window *win, struct Menu *menu, int item, 
bool disable)
+static void ami_menu_set_disabled_mc(struct Window *win, struct Menu *menu, 
int item, bool disable)
 {
        ULONG disable_state = MS_DISABLED;
 
@@ -1203,7 +1225,7 @@ void ami_menu_set_disabled_mc(struct Window *win, struct 
Menu *menu, int item, b
                disable_state = 0;
        }
 
-       IDoMethod(menu, MM_SETSTATE, 0, item, MS_DISABLED, disable_state);
+       IDoMethod((Object *)menu, MM_SETSTATE, 0, item, MS_DISABLED, 
disable_state);
 }
 #endif
 
@@ -1224,7 +1246,7 @@ static ULONG ami_menu_number(int item)
                case M_SAVEIFF:
                        menu_num = FULLMENUNUM(0,4,3);
                break;
-#ifdef WITH_PDF_EXPORT:
+#ifdef WITH_PDF_EXPORT
                case M_SAVEPDF:
                        menu_num = FULLMENUNUM(0,4,4);
                break;
diff --git a/frontends/amiga/menu.h b/frontends/amiga/menu.h
index 43f7e1e..35a0ac7 100644
--- a/frontends/amiga/menu.h
+++ b/frontends/amiga/menu.h
@@ -123,7 +123,7 @@ void ami_menu_free_glyphs(void);
 
 /* generic menu alloc/free/layout */
 void ami_menu_alloc_item(struct ami_menu_data **md, int num, UBYTE type,
-                       const char *restrict label, char key, const char 
*restrict icon,
+                       const char *restrict label, const char *restrict key, 
const char *restrict icon,
                        void *restrict func, void *restrict hookdata, UWORD 
flags);
 struct Menu *ami_menu_layout(struct ami_menu_data **md, int max);
 void ami_menu_free_menu(struct ami_menu_data **md, int max, struct Menu 
*imenu);


-- 
NetSurf Browser

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to