KDE 5.27.5 在wayland下无法通过alt+shift+tab反向切换窗口的原因与解决方法
这是一个bug。见:https://bugs.kde.org/438991
5.27.11修复了这个bug https://kde.org/announcements/plasma/5/5.27.11/
原因:kwin在反向切换窗口时只处理了Qt::Key_Backtab,而没有处理Qt::Key_Tab,从而不匹配快捷键。
https://invent.kde.org/plasma/kwin/-/commit/c8b7717953a28ac43f1fa5e69c9eceae4ea7e868
diff --git a/src/tabbox/tabbox.cpp b/src/tabbox/tabbox.cpp
index 8ac998d310459bcf1c08cb38476cc9222ba9c41d..6883112c60135f6219ad335528e0f4de81de3b65 100644
--- a/src/tabbox/tabbox.cpp
+++ b/src/tabbox/tabbox.cpp
@@ -1329,15 +1329,16 @@ void TabBox::keyPress(int keyQt)
return Steady;
}
- // Before testing the unshifted key (Ctrl+A vs. Ctrl+Shift+a etc.), see whether this is +Shift+Tab
- // and check that against +Shift+Backtab (as well)
+ // Before testing the unshifted key (Ctrl+A vs. Ctrl+Shift+a etc.),
+ // see whether this is +Shift+Tab/Backtab and test that against
+ // +Shift+Backtab/Tab as well
Qt::KeyboardModifiers mods = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier | Qt::KeypadModifier | Qt::GroupSwitchModifier;
mods &= keyQt;
- if ((keyQt & ~mods) == Qt::Key_Tab) {
- if (contains(forward, mods | Qt::Key_Backtab)) {
+ if (((keyQt & ~mods) == Qt::Key_Tab) || ((keyQt & ~mods) == Qt::Key_Backtab)) {
+ if (contains(forward, mods | Qt::Key_Backtab) || contains(forward, mods | Qt::Key_Tab)) {
return Forward;
}
- if (contains(backward, mods | Qt::Key_Backtab)) {
+ if (contains(backward, mods | Qt::Key_Backtab) || contains(backward, mods | Qt::Key_Tab)) {
return Backward;
}
}
解决方法:
1、修改~/.config/kglobalshortcutsrc
,将Alt+Shift+Tab修改为Alt+Shift+BackTab;
-Walk Through Windows (Reverse)=Alt+Shift+Tab,Alt+Shift+Backtab,遍历窗口(反向)
+Walk Through Windows (Reverse)=Alt+Shift+Backtab,Alt+Shift+Backtab,遍历窗口(反向)
2、升级到5.27.11以后的版本。