The function 'IIntuition->GetAttrs(item, PMIA_ID,&item_ID, PMIA_Title,&item_Title, TAG_END)' should save the menu ID on item_ID (OK) and menu Title on item_Title (I always get and empty string).
Code: Select all
Object *chooseMenu;
struct Hook MenuHandler;
uint32 MenuHandlerFunc(struct Hook *hook, Object *item, APTR reserved);
void OpenDockMenu(struct DockyData *dd)
{
MenuHandler.h_Entry = (HOOKFUNC)MenuHandlerFunc;
chooseMenu = IIntuition->NewObject(NULL, "popupmenu.class",
PMA_MenuHandler,&MenuHandler, TAG_DONE);
Object *item1 = IIntuition->NewObject(NULL, "popupmenuitem.class",
PMIA_Title, dd->keymap1Name, // char [64] to "usa1","gb","e_ISO-8859-15",... (devs:keymaps)
PMIA_ID, MENU_KM1, // 0
PMIA_Icon, OBJ(GID_BITMAP1) = IIntuition->NewObject(NULL, "bitmap.image",
BITMAP_SourceFile, keymap1Flag,
BITMAP_Screen, dd->scr,
BITMAP_Masking, TRUE,
TAG_DONE),
TAG_END);
Object *item2 = IIntuition->NewObject(NULL, "popupmenuitem.class",
PMIA_Title, dd->keymap2Name, // same as dd->keymap1Name
PMIA_ID, MENU_KM2, // 1
PMIA_Disabled, TRUE,
PMIA_Icon, OBJ(GID_BITMAP2) = IIntuition->NewObject(NULL, "bitmap.image",
BITMAP_SourceFile, keymap2Flag,
BITMAP_Screen, dd->scr,
BITMAP_Masking, TRUE,
TAG_DONE),
TAG_END);
// language2 valid/available
if( OBJ(GID_BITMAP2) ) IIntuition->SetAttrs(item2, PMIA_Disabled,FALSE, TAG_DONE);
IIntuition->IDoMethod(chooseMenu, OM_ADDMEMBER, item1); // lang1
IIntuition->IDoMethod(chooseMenu, OM_ADDMEMBER, item2); // lang2
IIntuition->IDoMethod(chooseMenu, PM_OPEN, dd->win);
IIntuition->DisposeObject(chooseMenu);
}
uint32 MenuHandlerFunc(struct Hook *hook, Object *item, APTR reserved)
{
uint32 item_ID = 0;
STRPTR item_Title = NULL;
if( IIntuition->GetAttrs(item, PMIA_ID, &item_ID,
PMIA_Title, &item_Title,
TAG_END) )
{
IDOS->Printf("keymap%ldName: ",item_ID+1);
switch(item_ID)
{
case MENU_KM1:
IDOS->Printf("'%s'\n",item_Title);
break;
case MENU_KM2:
IDOS->Printf("'%s'\n",item_Title);
break;
}
}
return(0);
}