Fixed the dead key misbehavior when typing fast: we don't change the deadkey status on key up anymore.
I thought there was a ticket about this bug, but couldn't find it. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33750 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -706,7 +706,7 @@ KeyboardDevice::_ControlThread()
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8 newDeadKey = 0;
|
uint8 newDeadKey = 0;
|
||||||
if (activeDeadKey == 0)
|
if (activeDeadKey == 0 || !isKeyDown)
|
||||||
newDeadKey = fKeymap.IsDeadKey(keycode, fModifiers);
|
newDeadKey = fKeymap.IsDeadKey(keycode, fModifiers);
|
||||||
|
|
||||||
if (newDeadKey == 0) {
|
if (newDeadKey == 0) {
|
||||||
@@ -757,11 +757,16 @@ KeyboardDevice::_ControlThread()
|
|||||||
|
|
||||||
delete[] rawString;
|
delete[] rawString;
|
||||||
|
|
||||||
if (isKeyDown && !modifiers && activeDeadKey != 0
|
if (isKeyDown && !modifiers && activeDeadKey != 0) {
|
||||||
&& fInputMethodStarted) {
|
|
||||||
// a dead key was completed
|
// a dead key was completed
|
||||||
_EnqueueInlineInputMethod(B_INPUT_METHOD_CHANGED,
|
activeDeadKey = 0;
|
||||||
string, true, msg);
|
if (fInputMethodStarted) {
|
||||||
|
_EnqueueInlineInputMethod(B_INPUT_METHOD_CHANGED,
|
||||||
|
string, true, msg);
|
||||||
|
_EnqueueInlineInputMethod(B_INPUT_METHOD_STOPPED);
|
||||||
|
fInputMethodStarted = false;
|
||||||
|
} else if (fOwner->EnqueueMessage(msg) != B_OK)
|
||||||
|
delete msg;
|
||||||
} else if (fOwner->EnqueueMessage(msg) != B_OK)
|
} else if (fOwner->EnqueueMessage(msg) != B_OK)
|
||||||
delete msg;
|
delete msg;
|
||||||
} else if (isKeyDown) {
|
} else if (isKeyDown) {
|
||||||
@@ -773,18 +778,10 @@ KeyboardDevice::_ControlThread()
|
|||||||
|
|
||||||
if (_EnqueueInlineInputMethod(B_INPUT_METHOD_CHANGED, string) == B_OK)
|
if (_EnqueueInlineInputMethod(B_INPUT_METHOD_CHANGED, string) == B_OK)
|
||||||
fInputMethodStarted = true;
|
fInputMethodStarted = true;
|
||||||
|
activeDeadKey = newDeadKey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isKeyDown && !modifiers) {
|
|
||||||
if (activeDeadKey != 0) {
|
|
||||||
_EnqueueInlineInputMethod(B_INPUT_METHOD_STOPPED);
|
|
||||||
fInputMethodStarted = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
activeDeadKey = newDeadKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
lastKeyCode = isKeyDown ? keycode : 0;
|
lastKeyCode = isKeyDown ? keycode : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user