input: add special handling for tabbox modifiers

modifiersRelevantForTabBox handles modifiers being consumed, which is wrong for the
tabbox; all it needs is to ignore capslock. To ensure that happens, this commit adds
a separate method for modifiers relevant for the tabbox.

BUG: 473099
master
Xaver Hugl 1 year ago
parent 169257416e
commit 1ace5a4cee

@ -1623,7 +1623,7 @@ public:
passToWaylandServer(event);
if (event->type() == QEvent::KeyPress) {
workspace()->tabbox()->keyPress(event->modifiersRelevantForGlobalShortcuts() | event->key());
workspace()->tabbox()->keyPress(event->modifiersRelevantForTabBox() | event->key());
} else if (static_cast<KeyEvent *>(event)->modifiersRelevantForGlobalShortcuts() == Qt::NoModifier) {
workspace()->tabbox()->modifiersReleased();
}

@ -150,11 +150,22 @@ public:
m_modifiersRelevantForShortcuts = mods;
}
Qt::KeyboardModifiers modifiersRelevantForTabBox() const
{
return m_modifiersRelevantForTabBox;
}
void setModifiersRelevantForTabBox(const Qt::KeyboardModifiers &mods)
{
m_modifiersRelevantForTabBox = mods;
}
std::chrono::microseconds timestamp() const;
private:
InputDevice *m_device;
Qt::KeyboardModifiers m_modifiersRelevantForShortcuts = Qt::KeyboardModifiers();
Qt::KeyboardModifiers m_modifiersRelevantForTabBox = Qt::KeyboardModifiers();
const std::chrono::microseconds m_timestamp;
};

@ -259,6 +259,7 @@ void KeyboardInputRedirection::processKey(uint32_t key, InputRedirection::Keyboa
time,
device);
event.setModifiersRelevantForGlobalShortcuts(globalShortcutsModifiers);
event.setModifiersRelevantForTabBox(m_xkb->modifiersRelevantForTabBox());
m_input->processSpies(std::bind(&InputEventSpy::keyEvent, std::placeholders::_1, &event));
if (!m_inited) {

@ -549,6 +549,27 @@ Qt::KeyboardModifiers Xkb::modifiersRelevantForGlobalShortcuts(uint32_t scanCode
return mods & ~consumedMods;
}
Qt::KeyboardModifiers Xkb::modifiersRelevantForTabBox() const
{
if (!m_state) {
return Qt::NoModifier;
}
Qt::KeyboardModifiers mods = Qt::NoModifier;
if (xkb_state_mod_index_is_active(m_state, m_shiftModifier, XKB_STATE_MODS_EFFECTIVE) == 1) {
mods |= Qt::ShiftModifier;
}
if (xkb_state_mod_index_is_active(m_state, m_altModifier, XKB_STATE_MODS_EFFECTIVE) == 1) {
mods |= Qt::AltModifier;
}
if (xkb_state_mod_index_is_active(m_state, m_controlModifier, XKB_STATE_MODS_EFFECTIVE) == 1) {
mods |= Qt::ControlModifier;
}
if (xkb_state_mod_index_is_active(m_state, m_metaModifier, XKB_STATE_MODS_EFFECTIVE) == 1) {
mods |= Qt::MetaModifier;
}
return mods;
}
xkb_keysym_t Xkb::toKeysym(uint32_t key)
{
if (!m_state) {

@ -61,6 +61,7 @@ public:
bool superAsMeta = false) const;
Qt::KeyboardModifiers modifiers() const;
Qt::KeyboardModifiers modifiersRelevantForGlobalShortcuts(uint32_t scanCode = 0) const;
Qt::KeyboardModifiers modifiersRelevantForTabBox() const;
bool shouldKeyRepeat(quint32 key) const;
void switchToNextLayout();

Loading…
Cancel
Save