From e4d6d9a972736bbea70eb0af62a430e77cc05ee5 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Sat, 14 Jan 2017 21:04:51 +0000 Subject: Get selected state with MenuClass compatible abstraction --- frontends/amiga/menu.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/frontends/amiga/menu.c b/frontends/amiga/menu.c index 3d2f293b9..175fe1529 100644 --- a/frontends/amiga/menu.c +++ b/frontends/amiga/menu.c @@ -111,6 +111,25 @@ const char * const verdate; static nserror ami_menu_scan(struct ami_menu_data **md); void ami_menu_arexx_scan(struct ami_menu_data **md); +static bool ami_menu_get_selected(struct Menu *menu, struct IntuiMessage *msg) +{ + bool checked = false; + + if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) { +#ifdef __amigaos4__ + ULONG state; + struct ExtIntuiMessage *emsg = (struct ExtIntuiMessage *)msg; + + state = IDoMethod(menu, MM_GETSTATE, 0, emsg->eim_LongCode, MS_CHECKED); + if(state & MS_CHECKED) checked = true; +#endif + } else { + if(ItemAddress(menu, msg->Code)->Flags & CHECKED) checked = true; + } + + return checked; +} + void ami_menu_set_check_toggled(void) { ami_menu_check_toggled = true; @@ -378,8 +397,8 @@ HOOKF(void, ami_menu_item_browser_foreimg, APTR, window, struct IntuiMessage *) bool checked = false; GetAttr(WINDOW_MenuStrip, (Object *)window, (ULONG *)&menustrip); - if(ItemAddress(menustrip, msg->Code)->Flags & CHECKED) checked = true; - + checked = ami_menu_get_selected(menustrip, msg); + nsoption_set_bool(foreground_images, checked); ami_menu_set_check_toggled(); } @@ -390,7 +409,7 @@ HOOKF(void, ami_menu_item_browser_backimg, APTR, window, struct IntuiMessage *) bool checked = false; GetAttr(WINDOW_MenuStrip, (Object *)window, (ULONG *)&menustrip); - if(ItemAddress(menustrip, msg->Code)->Flags & CHECKED) checked = true; + checked = ami_menu_get_selected(menustrip, msg); nsoption_set_bool(background_images, checked); ami_menu_set_check_toggled(); @@ -402,7 +421,7 @@ HOOKF(void, ami_menu_item_browser_enablejs, APTR, window, struct IntuiMessage *) bool checked = false; GetAttr(WINDOW_MenuStrip, (Object *)window, (ULONG *)&menustrip); - if(ItemAddress(menustrip, msg->Code)->Flags & CHECKED) checked = true; + checked = ami_menu_get_selected(menustrip, msg); nsoption_set_bool(enable_javascript, checked); ami_menu_set_check_toggled(); -- cgit v1.2.3