Fix several accelerator key issues from unit tests
* Bad parsing of "Num " keys * No parsing of NUMPAD_F keys * Missing multiply key * No case preservation on non-modifier accelerators * No parsing of F13-24 keys
This commit is contained in:
@@ -80,6 +80,7 @@ static const struct wxKeyName
|
|||||||
{ WXK_SEPARATOR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Separator"), /*Display is the same as key name*/ 0 },
|
{ WXK_SEPARATOR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Separator"), /*Display is the same as key name*/ 0 },
|
||||||
{ WXK_SUBTRACT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Subtract"), /*Display is the same as key name*/ 0 },
|
{ WXK_SUBTRACT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Subtract"), /*Display is the same as key name*/ 0 },
|
||||||
{ WXK_DECIMAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Decimal"), /*Display is the same as key name*/ 0 },
|
{ WXK_DECIMAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Decimal"), /*Display is the same as key name*/ 0 },
|
||||||
|
{ WXK_MULTIPLY, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Multiply"), /*Display is the same as key name*/ 0 },
|
||||||
{ WXK_DIVIDE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Divide"), /*Display is the same as key name*/ 0 },
|
{ WXK_DIVIDE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Divide"), /*Display is the same as key name*/ 0 },
|
||||||
{ WXK_NUMLOCK, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Lock") },
|
{ WXK_NUMLOCK, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Lock") },
|
||||||
{ WXK_SCROLL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll Lock") },
|
{ WXK_SCROLL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll Lock") },
|
||||||
@@ -179,7 +180,8 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut)
|
|||||||
wxString current;
|
wxString current;
|
||||||
for ( size_t n = (size_t)posTab; n < label.length(); n++ )
|
for ( size_t n = (size_t)posTab; n < label.length(); n++ )
|
||||||
{
|
{
|
||||||
if ( (label[n] == '+') || (label[n] == '-') )
|
bool skip = false;
|
||||||
|
if ( !skip && ( (label[n] == '+') || (label[n] == '-') ) )
|
||||||
{
|
{
|
||||||
if ( CompareAccelString(current, wxTRANSLATE("ctrl")) )
|
if ( CompareAccelString(current, wxTRANSLATE("ctrl")) )
|
||||||
accelFlags |= wxACCEL_CTRL;
|
accelFlags |= wxACCEL_CTRL;
|
||||||
@@ -189,6 +191,16 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut)
|
|||||||
accelFlags |= wxACCEL_SHIFT;
|
accelFlags |= wxACCEL_SHIFT;
|
||||||
else if ( CompareAccelString(current, wxTRANSLATE("rawctrl")) )
|
else if ( CompareAccelString(current, wxTRANSLATE("rawctrl")) )
|
||||||
accelFlags |= wxACCEL_RAW_CTRL;
|
accelFlags |= wxACCEL_RAW_CTRL;
|
||||||
|
else if ( CompareAccelString(current, wxTRANSLATE("num ")) )
|
||||||
|
{
|
||||||
|
// This isn't really a modifier, but is part of the name of keys
|
||||||
|
// that have a =/- in them (e.g. num + and num -)
|
||||||
|
// So we want to skip the processing if we see it
|
||||||
|
skip = true;
|
||||||
|
current += label[n];
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
else // not a recognized modifier name
|
else // not a recognized modifier name
|
||||||
{
|
{
|
||||||
// we may have "Ctrl-+", for example, but we still want to
|
// we may have "Ctrl-+", for example, but we still want to
|
||||||
@@ -213,7 +225,8 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut)
|
|||||||
}
|
}
|
||||||
else // not special character
|
else // not special character
|
||||||
{
|
{
|
||||||
current += (wxChar) wxTolower(label[n]);
|
// Preserve case of the key (see comment below)
|
||||||
|
current += label[n];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,7 +257,7 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut)
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
keyCode = IsNumberedAccelKey(current, wxTRANSLATE("F"),
|
keyCode = IsNumberedAccelKey(current, wxTRANSLATE("F"),
|
||||||
WXK_F1, 1, 12);
|
WXK_F1, 1, 24);
|
||||||
if ( !keyCode )
|
if ( !keyCode )
|
||||||
{
|
{
|
||||||
for ( size_t n = 0; n < WXSIZEOF(wxKeyNames); n++ )
|
for ( size_t n = 0; n < WXSIZEOF(wxKeyNames); n++ )
|
||||||
@@ -259,6 +272,9 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !keyCode )
|
||||||
|
keyCode = IsNumberedAccelKey(current, wxTRANSLATE("KP_F"),
|
||||||
|
WXK_NUMPAD_F1, 1, 4);
|
||||||
if ( !keyCode )
|
if ( !keyCode )
|
||||||
keyCode = IsNumberedAccelKey(current, wxTRANSLATE("KP_"),
|
keyCode = IsNumberedAccelKey(current, wxTRANSLATE("KP_"),
|
||||||
WXK_NUMPAD0, 0, 9);
|
WXK_NUMPAD0, 0, 9);
|
||||||
@@ -338,9 +354,12 @@ wxString wxAcceleratorEntry::AsPossiblyLocalizedString(bool localized) const
|
|||||||
|
|
||||||
const int code = GetKeyCode();
|
const int code = GetKeyCode();
|
||||||
|
|
||||||
if ( code >= WXK_F1 && code <= WXK_F12 )
|
if ( code >= WXK_F1 && code <= WXK_F24 )
|
||||||
text << PossiblyLocalize(wxTRANSLATE("F"), localized)
|
text << PossiblyLocalize(wxTRANSLATE("F"), localized)
|
||||||
<< code - WXK_F1 + 1;
|
<< code - WXK_F1 + 1;
|
||||||
|
else if ( code >= WXK_NUMPAD_F1 && code <= WXK_NUMPAD_F4 )
|
||||||
|
text << PossiblyLocalize(wxTRANSLATE("KP_F"), localized)
|
||||||
|
<< code - WXK_NUMPAD_F1 + 1;
|
||||||
else if ( code >= WXK_NUMPAD0 && code <= WXK_NUMPAD9 )
|
else if ( code >= WXK_NUMPAD0 && code <= WXK_NUMPAD9 )
|
||||||
text << PossiblyLocalize(wxTRANSLATE("KP_"), localized)
|
text << PossiblyLocalize(wxTRANSLATE("KP_"), localized)
|
||||||
<< code - WXK_NUMPAD0;
|
<< code - WXK_NUMPAD0;
|
||||||
|
Reference in New Issue
Block a user