X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/944f641cf9e822770d667be45926e58deb339482..08670ea85abf4b4946a9ce64971b591d7b1ee30b:/src/common/accelcmn.cpp?ds=sidebyside diff --git a/src/common/accelcmn.cpp b/src/common/accelcmn.cpp index 718275e160..1ed6c5947d 100644 --- a/src/common/accelcmn.cpp +++ b/src/common/accelcmn.cpp @@ -26,13 +26,15 @@ #if wxUSE_ACCEL #ifndef WX_PRECOMP + #include "wx/accel.h" #include "wx/string.h" #include "wx/intl.h" #include "wx/log.h" - #include "wx/accel.h" #include "wx/crt.h" #endif //WX_PRECOMP +wxAcceleratorTable wxNullAcceleratorTable; + // ============================================================================ // wxAcceleratorEntry implementation // ============================================================================ @@ -158,11 +160,13 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) { // the parser won't like trailing spaces wxString label = text; - label.Trim(true); // the initial \t must be preserved so don't strip leading whitespaces + label.Trim(true); - // If we're passed the entire menu item label instead of just the - // accelerator, skip the label part and only look after the TAB. - // check for accelerators: they are given after '\t' + // For compatibility with the old wx versions which accepted (and actually + // even required) a TAB character in the string passed to this function we + // ignore anything up to the first TAB. Notice however that the correct + // input consists of just the accelerator itself and nothing else, this is + // done for compatibility and compatibility only. int posTab = label.Find(wxT('\t')); if ( posTab == wxNOT_FOUND ) posTab = 0; @@ -182,6 +186,8 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) accelFlags |= wxACCEL_ALT; else if ( CompareAccelString(current, wxTRANSLATE("shift")) ) accelFlags |= wxACCEL_SHIFT; + else if ( CompareAccelString(current, wxTRANSLATE("rawctrl")) ) + accelFlags |= wxACCEL_RAW_CTRL; else // not a recognized modifier name { // we may have "Ctrl-+", for example, but we still want to @@ -274,9 +280,18 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) /* static */ wxAcceleratorEntry *wxAcceleratorEntry::Create(const wxString& str) { + const wxString accelStr = str.AfterFirst('\t'); + if ( accelStr.empty() ) + { + // It's ok to pass strings not containing any accelerators at all to + // this function, wxMenuItem code does it and we should just return + // NULL in this case. + return NULL; + } + int flags, keyCode; - if ( !ParseAccel(str, &flags, &keyCode) ) + if ( !ParseAccel(accelStr, &flags, &keyCode) ) return NULL; return new wxAcceleratorEntry(flags, keyCode); @@ -298,7 +313,11 @@ wxString wxAcceleratorEntry::ToString() const text += _("Ctrl+"); if ( flags & wxACCEL_SHIFT ) text += _("Shift+"); - +#if defined(__WXMAC__) || defined(__WXCOCOA__) + if ( flags & wxACCEL_RAW_CTRL ) + text += _("RawCtrl+"); +#endif + const int code = GetKeyCode(); if ( code >= WXK_F1 && code <= WXK_F12 ) @@ -329,7 +348,7 @@ wxString wxAcceleratorEntry::ToString() const // build as they're only defined for the ASCII range (or EOF) wxIsascii(code) && #endif // ANSI - wxIsalnum(code) ) + wxIsprint(code) ) { text << (wxChar)code; }