Changeset View
Changeset View
Standalone View
Standalone View
keyboard_input.cpp
Show First 20 Lines • Show All 85 Lines • ▼ Show 20 Line(s) | 83 | Xkb::Xkb(InputRedirection *input) | |||
---|---|---|---|---|---|
86 | , m_keymap(NULL) | 86 | , m_keymap(NULL) | ||
87 | , m_state(NULL) | 87 | , m_state(NULL) | ||
88 | , m_shiftModifier(0) | 88 | , m_shiftModifier(0) | ||
89 | , m_capsModifier(0) | 89 | , m_capsModifier(0) | ||
90 | , m_controlModifier(0) | 90 | , m_controlModifier(0) | ||
91 | , m_altModifier(0) | 91 | , m_altModifier(0) | ||
92 | , m_metaModifier(0) | 92 | , m_metaModifier(0) | ||
93 | , m_modifiers(Qt::NoModifier) | 93 | , m_modifiers(Qt::NoModifier) | ||
94 | , m_consumedModifiers(Qt::NoModifier) | ||||
94 | , m_keysym(XKB_KEY_NoSymbol) | 95 | , m_keysym(XKB_KEY_NoSymbol) | ||
95 | { | 96 | { | ||
96 | if (!m_context) { | 97 | if (!m_context) { | ||
97 | qCDebug(KWIN_XKB) << "Could not create xkb context"; | 98 | qCDebug(KWIN_XKB) << "Could not create xkb context"; | ||
98 | } else { | 99 | } else { | ||
99 | xkb_context_set_log_level(m_context, XKB_LOG_LEVEL_DEBUG); | 100 | xkb_context_set_log_level(m_context, XKB_LOG_LEVEL_DEBUG); | ||
100 | xkb_context_set_log_fn(m_context, &xkbLogHandler); | 101 | xkb_context_set_log_fn(m_context, &xkbLogHandler); | ||
101 | 102 | | |||
▲ Show 20 Lines • Show All 188 Lines • ▼ Show 20 Line(s) | 290 | default: | |||
290 | m_keysym = XKB_KEY_NoSymbol; | 291 | m_keysym = XKB_KEY_NoSymbol; | ||
291 | break; | 292 | break; | ||
292 | } | 293 | } | ||
293 | } else { | 294 | } else { | ||
294 | m_keysym = sym; | 295 | m_keysym = sym; | ||
295 | } | 296 | } | ||
296 | } | 297 | } | ||
297 | updateModifiers(); | 298 | updateModifiers(); | ||
299 | updateConsumedModifiers(key); | ||||
298 | if (state == InputRedirection::KeyboardKeyPressed) { | 300 | if (state == InputRedirection::KeyboardKeyPressed) { | ||
299 | m_modOnlyShortcut.pressCount++; | 301 | m_modOnlyShortcut.pressCount++; | ||
300 | if (m_modOnlyShortcut.pressCount == 1 && | 302 | if (m_modOnlyShortcut.pressCount == 1 && | ||
301 | !ScreenLockerWatcher::self()->isLocked() && | 303 | !ScreenLockerWatcher::self()->isLocked() && | ||
302 | oldMods == Qt::NoModifier && | 304 | oldMods == Qt::NoModifier && | ||
303 | m_input->qtButtonStates() == Qt::NoButton) { | 305 | m_input->qtButtonStates() == Qt::NoButton) { | ||
304 | m_modOnlyShortcut.modifier = Qt::KeyboardModifier(int(m_modifiers)); | 306 | m_modOnlyShortcut.modifier = Qt::KeyboardModifier(int(m_modifiers)); | ||
305 | } else { | 307 | } else { | ||
▲ Show 20 Lines • Show All 57 Lines • ▼ Show 20 Line(s) | 332 | { | |||
363 | if (waylandServer()) { | 365 | if (waylandServer()) { | ||
364 | waylandServer()->seat()->updateKeyboardModifiers(xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_DEPRESSED)), | 366 | waylandServer()->seat()->updateKeyboardModifiers(xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_DEPRESSED)), | ||
365 | xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LATCHED)), | 367 | xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LATCHED)), | ||
366 | xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LOCKED)), | 368 | xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LOCKED)), | ||
367 | layout); | 369 | layout); | ||
368 | } | 370 | } | ||
369 | } | 371 | } | ||
370 | 372 | | |||
373 | void Xkb::updateConsumedModifiers(uint32_t key) | ||||
374 | { | ||||
375 | Qt::KeyboardModifiers mods = Qt::NoModifier; | ||||
376 | if (xkb_state_mod_index_is_consumed(m_state, key + 8, m_shiftModifier) == 1) { | ||||
377 | mods |= Qt::ShiftModifier; | ||||
378 | } | ||||
379 | if (xkb_state_mod_index_is_consumed(m_state, key + 8, m_altModifier) == 1) { | ||||
380 | mods |= Qt::AltModifier; | ||||
381 | } | ||||
382 | if (xkb_state_mod_index_is_consumed(m_state, key + 8, m_controlModifier) == 1) { | ||||
383 | mods |= Qt::ControlModifier; | ||||
384 | } | ||||
385 | if (xkb_state_mod_index_is_consumed(m_state, key + 8, m_metaModifier) == 1) { | ||||
386 | mods |= Qt::MetaModifier; | ||||
387 | } | ||||
388 | m_consumedModifiers = mods; | ||||
389 | } | ||||
390 | | ||||
391 | Qt::KeyboardModifiers Xkb::modifiersRelevantForGlobalShortcuts() const | ||||
392 | { | ||||
393 | Qt::KeyboardModifiers mods = Qt::NoModifier; | ||||
394 | if (xkb_state_mod_index_is_active(m_state, m_shiftModifier, XKB_STATE_MODS_EFFECTIVE) == 1) { | ||||
395 | mods |= Qt::ShiftModifier; | ||||
396 | } | ||||
397 | if (xkb_state_mod_index_is_active(m_state, m_altModifier, XKB_STATE_MODS_EFFECTIVE) == 1) { | ||||
398 | mods |= Qt::AltModifier; | ||||
399 | } | ||||
400 | if (xkb_state_mod_index_is_active(m_state, m_controlModifier, XKB_STATE_MODS_EFFECTIVE) == 1) { | ||||
401 | mods |= Qt::ControlModifier; | ||||
402 | } | ||||
403 | if (xkb_state_mod_index_is_active(m_state, m_metaModifier, XKB_STATE_MODS_EFFECTIVE) == 1) { | ||||
404 | mods |= Qt::MetaModifier; | ||||
405 | } | ||||
406 | return mods & ~m_consumedModifiers; | ||||
407 | } | ||||
408 | | ||||
371 | xkb_keysym_t Xkb::toKeysym(uint32_t key) | 409 | xkb_keysym_t Xkb::toKeysym(uint32_t key) | ||
372 | { | 410 | { | ||
373 | if (!m_state) { | 411 | if (!m_state) { | ||
374 | return XKB_KEY_NoSymbol; | 412 | return XKB_KEY_NoSymbol; | ||
375 | } | 413 | } | ||
376 | return xkb_state_key_get_one_sym(m_state, key + 8); | 414 | return xkb_state_key_get_one_sym(m_state, key + 8); | ||
377 | } | 415 | } | ||
378 | 416 | | |||
▲ Show 20 Lines • Show All 255 Lines • Show Last 20 Lines |