diff --git a/src/lib/fcitx-utils/key.cpp b/src/lib/fcitx-utils/key.cpp index b6b40c90..f9f94625 100644 --- a/src/lib/fcitx-utils/key.cpp +++ b/src/lib/fcitx-utils/key.cpp @@ -470,6 +470,11 @@ bool Key::isVirtual() const { return states_.test(KeyState::Virtual); } Key Key::normalize() const { Key key(*this); + + if (key.sym_ == FcitxKey_ISO_Left_Tab) { + key.sym_ = FcitxKey_Tab; + } + /* key state != 0 */ key.states_ = key.states_ & KeyStates({KeyState::Ctrl_Alt_Shift, KeyState::Super, @@ -495,17 +500,14 @@ Key Key::normalize() const { if ((key.states_ & KeyState::Shift) && (((Key(key.sym_).isSimple() || keySymToUnicode(key.sym_) != 0) && - key.sym_ != FcitxKey_space && key.sym_ != FcitxKey_Return) || + key.sym_ != FcitxKey_space && key.sym_ != FcitxKey_Return && + key.sym_ != FcitxKey_Tab) || (key.sym_ >= FcitxKey_KP_0 && key.sym_ <= FcitxKey_KP_9))) { key.states_ ^= KeyState::Shift; } } } - if (key.sym_ == FcitxKey_ISO_Left_Tab) { - key.sym_ = FcitxKey_Tab; - } - return key; } diff --git a/test/testkey.cpp b/test/testkey.cpp index 1bf761b0..cfd650c9 100644 --- a/test/testkey.cpp +++ b/test/testkey.cpp @@ -74,6 +74,12 @@ int main() { FCITX_ASSERT(fcitx::Key("S").check(fcitx::Key("Shift+S").normalize())); FCITX_ASSERT( fcitx::Key("Shift+F4").check(fcitx::Key("Shift+F4").normalize())); + FCITX_ASSERT( + fcitx::Key("Shift+Tab").check(fcitx::Key("Shift+Tab").normalize())); + FCITX_ASSERT(fcitx::Key("Shift+Return") + .check(fcitx::Key("Shift+Return").normalize())); + FCITX_ASSERT( + fcitx::Key("Shift+space").check(fcitx::Key("Shift+space").normalize())); FCITX_ASSERT( fcitx::Key("Control+A").check(fcitx::Key("Control+a").normalize())); FCITX_ASSERT(fcitx::Key("Alt+exclam")