summaryrefslogtreecommitdiff
path: root/frontends/amiga/menu.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2017-01-15 17:51:55 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2017-01-15 17:51:55 +0000
commitb78d6f458e5d5cb9c78d7430aacf10abd227eb32 (patch)
tree9cd1ad8616923aa47b297deec72a2bc7c701a296 /frontends/amiga/menu.c
parentb8640956d48af03f2f7f6c07e66958fa825a4972 (diff)
downloadnetsurf-b78d6f458e5d5cb9c78d7430aacf10abd227eb32.tar.gz
netsurf-b78d6f458e5d5cb9c78d7430aacf10abd227eb32.tar.bz2
Attempt hotlist menu refresh
Diffstat (limited to 'frontends/amiga/menu.c')
-rw-r--r--frontends/amiga/menu.c37
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
+}
+