X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d04995b3a6d56d610d0eb7af9c07ba91eaf4884d..ec5006bdc630dd6b3d4cad1a3b572ab4c695a029:/src/cocoa/menuitem.mm diff --git a/src/cocoa/menuitem.mm b/src/cocoa/menuitem.mm index 5a12767e06..140e2ead44 100644 --- a/src/cocoa/menuitem.mm +++ b/src/cocoa/menuitem.mm @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: menuitem.cpp +// Name: src/cocoa/menuitem.mm // Purpose: wxMenuItem implementation // Author: David Elliott // Modified by: @@ -18,9 +18,13 @@ // ---------------------------------------------------------------------------- #include "wx/wxprec.h" + +#if wxUSE_MENUS + +#include "wx/menuitem.h" + #ifndef WX_PRECOMP #include "wx/menu.h" - #include "wx/menuitem.h" #include "wx/utils.h" #include "wx/frame.h" #include "wx/log.h" @@ -34,8 +38,7 @@ #import #import #import // NSOnState, NSOffState - -#if wxUSE_MENUS +#import // modifier key masks // ---------------------------------------------------------------------------- // functions prototypes @@ -101,6 +104,44 @@ wxString wxMenuItemBase::GetLabelFromText(const wxString& text) return wxStripMenuCodes(text); } +void wxMenuItemCocoa::CocoaSetKeyEquivalent() +{ + wxAcceleratorEntry *accel = GetAccel(); + if(!accel) + return; + + int accelFlags = accel->GetFlags(); + int keyModifierMask = 0; + if(accelFlags & wxACCEL_ALT) + keyModifierMask |= NSAlternateKeyMask; + if(accelFlags & wxACCEL_CTRL) + keyModifierMask |= NSCommandKeyMask; + int keyCode = accel->GetKeyCode(); + if(isalpha(keyCode)) + { // For alpha characters use upper/lower rather than NSShiftKeyMask + char alphaChar; + if(accelFlags & wxACCEL_SHIFT) + alphaChar = toupper(keyCode); + else + alphaChar = tolower(keyCode); + [m_cocoaNSMenuItem setKeyEquivalent:[NSString stringWithCString:&alphaChar length:1]]; + [m_cocoaNSMenuItem setKeyEquivalentModifierMask:keyModifierMask]; + } + else + { + if(accelFlags & wxACCEL_SHIFT) + keyModifierMask |= NSShiftKeyMask; + if(keyCode < 128) // low ASCII includes backspace/tab/etc. + { char alphaChar = keyCode; + [m_cocoaNSMenuItem setKeyEquivalent:[NSString stringWithCString:&alphaChar length:1]]; + } + else + { // TODO + } + [m_cocoaNSMenuItem setKeyEquivalentModifierMask:keyModifierMask]; + } +} + // ---------------------------------------------------------------------------- // ctor & dtor // ---------------------------------------------------------------------------- @@ -134,6 +175,7 @@ wxMenuItemCocoa::wxMenuItemCocoa(wxMenu *pParentMenu, else [m_cocoaNSMenuItem setTarget: sm_cocoaTarget]; [menuTitle release]; + CocoaSetKeyEquivalent(); } } @@ -245,6 +287,7 @@ void wxMenuItem::SetText(const wxString& label) wxMenuItemBase::SetText(label); wxCHECK_RET(m_kind != wxITEM_SEPARATOR, wxT("Separator items do not have titles.")); [m_cocoaNSMenuItem setTitle: wxNSStringWithWxString(wxStripMenuCodes(label))]; + CocoaSetKeyEquivalent(); } void wxMenuItem::SetCheckable(bool checkable)