more keymap chaining repairs

svn: r7003
This commit is contained in:
Matthew Flatt 2007-08-02 16:56:05 +00:00
parent 3f58e02472
commit dfdb6f2a82
2 changed files with 31 additions and 30 deletions

View File

@ -134,6 +134,7 @@ void wxKeymap::Reset(void)
int i;
prefix = NULL;
prefixed = 0;
for (i = 0; i < chainCount; i++) {
chainTo[i]->Reset();
@ -760,7 +761,7 @@ void wxKeymap::RemoveGrabKeyFunction(void)
Bool wxKeymap::HandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event)
{
int score, result;
int score, result, was_prefixed;
if (event->keyCode == WXK_SHIFT
|| event->keyCode == WXK_CONTROL
@ -770,7 +771,15 @@ Bool wxKeymap::HandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event)
score = GetBestScore(event);
result = ChainHandleKeyEvent(media, event, NULL, NULL, 0, score);
was_prefixed = prefixed;
result = ChainHandleKeyEvent(media, event, NULL, NULL, prefixed, score);
if (!result && was_prefixed) {
Reset();
/* Try again without prefix: */
result = ChainHandleKeyEvent(media, event, NULL, NULL, 0, score);
}
if (result >= 0)
Reset();
@ -814,10 +823,11 @@ int wxKeymap::OtherHandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event,
int wxKeymap::ChainHandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event,
wxGrabKeyFunction grab, void *grabData,
int try_state, int score)
int only_prefixed, int score)
/* Results: 0 = no match, 1 = match, -1 = matched prefix */
{
char *fname;
int result, found_prefix = 0;
int result, sub_result;
lastTime = event->timeStamp;
lastButton = 0;
@ -827,22 +837,13 @@ int wxKeymap::ChainHandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event,
grabData = grabKeyData;
}
if (!prefix && (try_state >= 0)) {
int r;
r = OtherHandleKeyEvent(media, event, grab, grabData, 1, score);
if (r > 0)
return r;
if (only_prefixed && !prefixed)
return 0;
if (try_state > 0)
return r;
else {
if (r < 0)
found_prefix = -1;
try_state = -1;
}
} else if (prefix && (try_state < 0))
return OtherHandleKeyEvent(media, event, grab, grabData, -1, score);
sub_result = OtherHandleKeyEvent(media, event, grab, grabData, only_prefixed, score);
if (sub_result > 0)
return sub_result;
if (HandleEvent(event->keyCode,
event->otherKeyCode,
@ -865,25 +866,24 @@ int wxKeymap::ChainHandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event,
return CallFunction(fname, media, event) ? 1 : 0;
} else {
if (prefix) {
/* Just found prefix; try others */
int r;
r = OtherHandleKeyEvent(media, event, grab, grabData, try_state, score);
if (r > 0)
return r;
return -1;
prefixed = 1;
return -1;
}
/* Huh? */
result = 0;
}
}
} else
result = 0;
result = OtherHandleKeyEvent(media, event, grab, grabData, try_state, score);
if (sub_result < 0) {
prefixed = 1;
result = -1;
}
if (!result && grabKeyFunction)
if (grabKeyFunction(NULL, this, media, event, grabKeyData))
return 1;
if (!result && found_prefix)
return found_prefix;
return result;
}

View File

@ -56,6 +56,7 @@ class wxKeymap : public wxObject
double lastX, lastY;
class wxKeycode *prefix;
int prefixed;
char *active_mouse_function;