void IconMenuItem::SetMarked(bool mark) { _inherited::SetMarked(mark); if (!mark) return; // we are marking the item BMenu* menu = Menu(); if (menu == NULL) return; // we have a parent menu BMenu* _menu = menu; while ((_menu = _menu->Supermenu()) != NULL) menu = _menu; // went up the hierarchy to found the topmost menu if (menu == NULL || menu->Parent() == NULL) return; // our topmost menu has a parent if (dynamic_cast<BMenuField*>(menu->Parent()) == NULL) return; // our topmost menu's parent is a BMenuField BMenuItem* topLevelItem = menu->ItemAt((int32)0); if (topLevelItem == NULL) return; // our topmost menu has a menu item IconMenuItem* topLevelIconMenuItem = dynamic_cast<IconMenuItem*>(topLevelItem); if (topLevelIconMenuItem == NULL) return; // our topmost menu's item is an IconMenuItem // update the icon topLevelIconMenuItem->SetIcon(fDeviceIcon); menu->Invalidate(); }