diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp index 7f87d05e91..7f497bc790 100644 --- a/src/kits/interface/Menu.cpp +++ b/src/kits/interface/Menu.cpp @@ -1804,13 +1804,8 @@ BMenu::CalcTriggers() BMenuItem *item = ItemAt(i); if (item->Trigger() == 0) { const char *newTrigger = ChooseTrigger(item->Label(), &triggersList); - if (newTrigger != NULL) { + if (newTrigger != NULL) item->SetAutomaticTrigger(*newTrigger); - // TODO: This is crap. I'd prefer to have - // BMenuItem::SetSysTrigger(const char *) update fTriggerIndex. - // This isn't the case on beos, but it will probably be like that on haiku. - item->fTriggerIndex = newTrigger - item->Label(); - } } } } diff --git a/src/kits/interface/MenuItem.cpp b/src/kits/interface/MenuItem.cpp index 6f53e46b72..54eb5ad7b1 100644 --- a/src/kits/interface/MenuItem.cpp +++ b/src/kits/interface/MenuItem.cpp @@ -276,10 +276,14 @@ BMenuItem::SetTrigger(char trigger) { fUserTrigger = trigger; - if (strchr(fLabel, trigger) != 0) + const char* pos = strchr(Label(), trigger); + if (pos != NULL) { fAutomaticTrigger = trigger; - else - fAutomaticTrigger = -1; + fTriggerIndex = pos - Label(); + } else { + fAutomaticTrigger = 0; + fTriggerIndex = -1; + } if (fSuper != NULL) fSuper->InvalidateLayout(); @@ -821,7 +825,13 @@ BMenuItem::_DrawControlChar(char shortcut, BPoint where) void -BMenuItem::SetAutomaticTrigger(char ch) +BMenuItem::SetAutomaticTrigger(char trigger) { - fAutomaticTrigger = ch; + fAutomaticTrigger = trigger; + + const char* pos = strchr(Label(), trigger); + if (pos != NULL) + fTriggerIndex = pos - Label(); + else + fTriggerIndex = -1; }