Keep the user's shift; trust the text guess less
- A tapped shift (on or off) survives the field re-reporting its context: it lasts until a character is typed, the hint changes or a field is focused - An input-method reset forgets the guessed text and pending dead key, so double-space can't delete a character the keyboard never saw - Fields that state typing preferences only get capitals if they ask - Trackpad moves in fields without surrounding text make the guess unknown; Backspace removes a whole grapheme cluster from it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -111,6 +111,46 @@ private Q_SLOTS:
|
||||
shift.characterTyped();
|
||||
QCOMPARE(shift.mode(), Mode::Off);
|
||||
}
|
||||
|
||||
void repeatedHintKeepsUserShift()
|
||||
{
|
||||
ShiftState shift;
|
||||
shift.setAutomatic(false);
|
||||
shift.press(0);
|
||||
shift.release();
|
||||
shift.setAutomatic(false); // the field re-reported
|
||||
QCOMPARE(shift.mode(), Mode::Once);
|
||||
}
|
||||
|
||||
void repeatedHintKeepsUserUnshift()
|
||||
{
|
||||
ShiftState shift;
|
||||
shift.setAutomatic(true);
|
||||
shift.press(0); // off at a sentence start
|
||||
shift.release();
|
||||
shift.setAutomatic(true);
|
||||
QCOMPARE(shift.mode(), Mode::Off);
|
||||
}
|
||||
|
||||
void changedHintOverridesUserShift()
|
||||
{
|
||||
ShiftState shift;
|
||||
shift.setAutomatic(true);
|
||||
shift.press(0);
|
||||
shift.release();
|
||||
shift.setAutomatic(false);
|
||||
shift.setAutomatic(true); // e.g. backspaced to a sentence start
|
||||
QCOMPARE(shift.mode(), Mode::Once);
|
||||
}
|
||||
|
||||
void hintAppliesAgainAfterTyping()
|
||||
{
|
||||
ShiftState shift;
|
||||
shift.setAutomatic(true);
|
||||
shift.characterTyped(); // e.g. a space at a sentence start
|
||||
shift.setAutomatic(true);
|
||||
QCOMPARE(shift.mode(), Mode::Once);
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_GUILESS_MAIN(TestShiftState)
|
||||
|
||||
Reference in New Issue
Block a user