Add an AltGr key; full-mode letters flick to their AltGr symbol
The right alt in full mode is now AltGr: sticky like the other modifiers, it types the keymap's third/fourth level (sk: AltGr+J = ') instead of an Alt shortcut. In hold-keys mode it holds the physical right alt, since KWin resets the modifier state after an ISO_Level3_Shift keysym. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -328,6 +328,29 @@ private Q_SLOTS:
|
||||
QCOMPARE(controller->modifierModes().value(u"alt"_s).toInt(), int(KeyboardController::ShiftMode::Off));
|
||||
}
|
||||
|
||||
void altGrTypesTheThirdLevel()
|
||||
{
|
||||
KeyDef j = makeKey(KeyType::Character, u"j"_s);
|
||||
j.altGr = u"'"_s;
|
||||
tap(modifierKey(u"altgr"_s));
|
||||
tap(j);
|
||||
QCOMPARE(engine.output, u"'");
|
||||
QVERIFY(engine.keysyms.isEmpty()); // text, not an Alt shortcut
|
||||
tap(j); // one-shot
|
||||
QCOMPARE(engine.output, u"'j");
|
||||
}
|
||||
|
||||
void altGrDeadKeyComposes()
|
||||
{
|
||||
KeyDef three = makeKey(KeyType::Character, u"3"_s);
|
||||
three.altGr = u"^"_s;
|
||||
three.deadAltGr = XKB_KEY_dead_circumflex;
|
||||
tap(modifierKey(u"altgr"_s));
|
||||
tap(three);
|
||||
tap(makeKey(KeyType::Character, u"a"_s));
|
||||
QCOMPARE(engine.output, u"â");
|
||||
}
|
||||
|
||||
void tappedShiftAppliesToFunctionKeys()
|
||||
{
|
||||
tap(makeKey(KeyType::Character, u"a"_s)); // mid-sentence: no auto-shift
|
||||
|
||||
@@ -137,6 +137,19 @@ private Q_SLOTS:
|
||||
QCOMPARE(letterKey(sk, u"l"_s).alternates.first(), u"ľ");
|
||||
}
|
||||
|
||||
void fullModeLettersFlickToTheirAltGrSymbol()
|
||||
{
|
||||
const Layout sk = TestLayouts::build("sk", KeyboardMode::Full);
|
||||
const KeyDef j = letterKey(sk, u"j"_s);
|
||||
QCOMPARE(j.altGr, u"'");
|
||||
QCOMPARE(j.flick, u"'");
|
||||
QCOMPARE(j.text({ShiftLevel::None, true}), u"'");
|
||||
QCOMPARE(letterKey(sk, u"ô"_s).flick, u"\""); // keys with a shifted symbol keep it
|
||||
const KeyDef plus = letterKey(sk, u"+"_s);
|
||||
QCOMPARE(plus.deadAt({ShiftLevel::Shifted, true}), quint32(XKB_KEY_dead_tilde));
|
||||
QCOMPARE(plus.text({ShiftLevel::None, true}), u"!");
|
||||
}
|
||||
|
||||
void noPlaceholdersRemain()
|
||||
{
|
||||
for (const Layer &layer : TestLayouts::build("us").layers) {
|
||||
|
||||
Reference in New Issue
Block a user