void JXTextMenuData::SetNMShortcut ( const JIndex index, const JCharacter* str ) { TextItemData itemData = itsTextItemData->GetElement(index); const JBoolean strEmpty = JStringEmpty(str); JBoolean changed = kJFalse; if (!strEmpty && itemData.nmShortcut == NULL) { itemData.nmShortcut = new JString(str); assert( itemData.nmShortcut != NULL ); itsTextItemData->SetElement(index, itemData); changed = kJTrue; } else if (!strEmpty) { *(itemData.nmShortcut) = str; changed = kJTrue; } else if (itemData.nmShortcut != NULL) { delete itemData.nmShortcut; itemData.nmShortcut = NULL; itsTextItemData->SetElement(index, itemData); changed = kJTrue; } if (changed) { itsNeedGeomRecalcFlag = kJTrue; JXWindow* window = itsMenu->GetWindow(); window->ClearMenuShortcut(itsMenu, index); int key; JXKeyModifiers modifiers(itsMenu->GetDisplay()); if (itemData.nmShortcut != NULL && ParseNMShortcut(itemData.nmShortcut, &key, &modifiers) && !window->InstallMenuShortcut(itsMenu, index, key, modifiers)) { SetNMShortcut(index, NULL); // don't display if not registered } } }