diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2017-01-15 17:51:55 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2017-01-15 17:51:55 +0000 |
commit | b78d6f458e5d5cb9c78d7430aacf10abd227eb32 (patch) | |
tree | 9cd1ad8616923aa47b297deec72a2bc7c701a296 /frontends/amiga/menu.c | |
parent | b8640956d48af03f2f7f6c07e66958fa825a4972 (diff) | |
download | netsurf-b78d6f458e5d5cb9c78d7430aacf10abd227eb32.tar.gz netsurf-b78d6f458e5d5cb9c78d7430aacf10abd227eb32.tar.bz2 |
Attempt hotlist menu refresh
Diffstat (limited to 'frontends/amiga/menu.c')
-rw-r--r-- | frontends/amiga/menu.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/frontends/amiga/menu.c b/frontends/amiga/menu.c index 04c6eb07f..cfbbd8deb 100644 --- a/frontends/amiga/menu.c +++ b/frontends/amiga/menu.c @@ -80,7 +80,7 @@ bool ami_menu_get_selected(struct Menu *menu, struct IntuiMessage *msg) } /* menu creation code */ -static void ami_menu_free_lab_item(struct ami_menu_data **md, int i) +void ami_menu_free_lab_item(struct ami_menu_data **md, int i) { if(md[i] == NULL) return; if(md[i]->menulab && @@ -435,3 +435,38 @@ void ami_menu_free_menu(struct ami_menu_data **md, int max, struct Menu *imenu) } } +void ami_menu_refresh(struct Menu *menu, struct ami_menu_data **md, int menu_item, int max, + nserror (*cb)(struct ami_menu_data **md)) +{ +#ifdef __amigaos4__ + Object *restrict obj; + Object *restrict menu_item_obj; + int i; + + if(menu == NULL) return; + + if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) { + /* find the address of the menu */ + menu_item_obj = (Object *)IDoMethod((Object *)menu, MM_FINDID, 0, menu_item); + + /* remove all children */ + while((obj = (Object *)IDoMethod(menu_item_obj, MM_NEXTCHILD, 0, NULL)) != NULL) { + IDoMethod(menu_item_obj, OM_REMMEMBER, obj); + /* do we need to disposeobject? */ + } + + /* free associated data */ + for(i = (menu_item + 1); i <= max; i++) { + if(md[i] == NULL) continue; + ami_menu_free_lab_item(md, i); + } + + /* get current data */ + cb(md); + + /* re-add items to menu */ + ami_menu_layout_mc_recursive(menu_item_obj, md, NM_ITEM, (menu_item + 1), max); + } +#endif +} + |