Changeset View
Changeset View
Standalone View
Standalone View
xkb.cpp
Show First 20 Lines • Show All 207 Lines • ▼ Show 20 Line(s) | 189 | { | |||
---|---|---|---|---|---|
208 | m_metaModifier = xkb_keymap_mod_get_index(m_keymap, XKB_MOD_NAME_LOGO); | 208 | m_metaModifier = xkb_keymap_mod_get_index(m_keymap, XKB_MOD_NAME_LOGO); | ||
209 | 209 | | |||
210 | m_numLock = xkb_keymap_led_get_index(m_keymap, XKB_LED_NAME_NUM); | 210 | m_numLock = xkb_keymap_led_get_index(m_keymap, XKB_LED_NAME_NUM); | ||
211 | m_capsLock = xkb_keymap_led_get_index(m_keymap, XKB_LED_NAME_CAPS); | 211 | m_capsLock = xkb_keymap_led_get_index(m_keymap, XKB_LED_NAME_CAPS); | ||
212 | m_scrollLock = xkb_keymap_led_get_index(m_keymap, XKB_LED_NAME_SCROLL); | 212 | m_scrollLock = xkb_keymap_led_get_index(m_keymap, XKB_LED_NAME_SCROLL); | ||
213 | 213 | | |||
214 | m_currentLayout = xkb_state_serialize_layout(m_state, XKB_STATE_LAYOUT_EFFECTIVE); | 214 | m_currentLayout = xkb_state_serialize_layout(m_state, XKB_STATE_LAYOUT_EFFECTIVE); | ||
215 | 215 | | |||
216 | m_modifierState.depressed = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_DEPRESSED)); | ||||
217 | m_modifierState.latched = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LATCHED)); | ||||
218 | m_modifierState.locked = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LOCKED)); | ||||
219 | | ||||
216 | createKeymapFile(); | 220 | createKeymapFile(); | ||
221 | forwardModifiers(); | ||||
217 | } | 222 | } | ||
218 | 223 | | |||
219 | void Xkb::createKeymapFile() | 224 | void Xkb::createKeymapFile() | ||
220 | { | 225 | { | ||
221 | if (!waylandServer()) { | 226 | if (!waylandServer()) { | ||
222 | return; | 227 | return; | ||
223 | } | 228 | } | ||
224 | // TODO: uninstall keymap on server? | 229 | // TODO: uninstall keymap on server? | ||
Show All 30 Lines | |||||
255 | 260 | | |||
256 | void Xkb::updateModifiers(uint32_t modsDepressed, uint32_t modsLatched, uint32_t modsLocked, uint32_t group) | 261 | void Xkb::updateModifiers(uint32_t modsDepressed, uint32_t modsLatched, uint32_t modsLocked, uint32_t group) | ||
257 | { | 262 | { | ||
258 | if (!m_keymap || !m_state) { | 263 | if (!m_keymap || !m_state) { | ||
259 | return; | 264 | return; | ||
260 | } | 265 | } | ||
261 | xkb_state_update_mask(m_state, modsDepressed, modsLatched, modsLocked, 0, 0, group); | 266 | xkb_state_update_mask(m_state, modsDepressed, modsLatched, modsLocked, 0, 0, group); | ||
262 | updateModifiers(); | 267 | updateModifiers(); | ||
268 | forwardModifiers(); | ||||
263 | } | 269 | } | ||
264 | 270 | | |||
265 | void Xkb::updateKey(uint32_t key, InputRedirection::KeyboardKeyState state) | 271 | void Xkb::updateKey(uint32_t key, InputRedirection::KeyboardKeyState state) | ||
266 | { | 272 | { | ||
267 | if (!m_keymap || !m_state) { | 273 | if (!m_keymap || !m_state) { | ||
268 | return; | 274 | return; | ||
269 | } | 275 | } | ||
270 | xkb_state_update_key(m_state, key + 8, static_cast<xkb_key_direction>(state)); | 276 | xkb_state_update_key(m_state, key + 8, static_cast<xkb_key_direction>(state)); | ||
▲ Show 20 Lines • Show All 48 Lines • ▼ Show 20 Line(s) | 300 | { | |||
319 | if (xkb_state_led_index_is_active(m_state, m_scrollLock) == 1) { | 325 | if (xkb_state_led_index_is_active(m_state, m_scrollLock) == 1) { | ||
320 | leds = leds | LED::ScrollLock; | 326 | leds = leds | LED::ScrollLock; | ||
321 | } | 327 | } | ||
322 | if (m_leds != leds) { | 328 | if (m_leds != leds) { | ||
323 | m_leds = leds; | 329 | m_leds = leds; | ||
324 | emit m_input->keyboard()->ledsChanged(m_leds); | 330 | emit m_input->keyboard()->ledsChanged(m_leds); | ||
325 | } | 331 | } | ||
326 | 332 | | |||
327 | const xkb_layout_index_t layout = xkb_state_serialize_layout(m_state, XKB_STATE_LAYOUT_EFFECTIVE); | 333 | m_currentLayout = xkb_state_serialize_layout(m_state, XKB_STATE_LAYOUT_EFFECTIVE); | ||
328 | if (layout != m_currentLayout) { | 334 | m_modifierState.depressed = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_DEPRESSED)); | ||
329 | m_currentLayout = layout; | 335 | m_modifierState.latched = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LATCHED)); | ||
330 | } | 336 | m_modifierState.locked = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LOCKED)); | ||
331 | if (waylandServer()) { | 337 | } | ||
332 | waylandServer()->seat()->updateKeyboardModifiers(xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_DEPRESSED)), | 338 | | ||
333 | xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LATCHED)), | 339 | void Xkb::forwardModifiers() | ||
334 | xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LOCKED)), | 340 | { | ||
335 | layout); | 341 | if (!waylandServer()) { | ||
342 | return; | ||||
336 | } | 343 | } | ||
344 | waylandServer()->seat()->updateKeyboardModifiers(m_modifierState.depressed, | ||||
345 | m_modifierState.latched, | ||||
346 | m_modifierState.locked, | ||||
347 | m_currentLayout); | ||||
337 | } | 348 | } | ||
338 | 349 | | |||
339 | QString Xkb::layoutName() const | 350 | QString Xkb::layoutName() const | ||
340 | { | 351 | { | ||
341 | return layoutName(m_currentLayout); | 352 | return layoutName(m_currentLayout); | ||
342 | } | 353 | } | ||
343 | 354 | | |||
344 | QString Xkb::layoutName(xkb_layout_index_t layout) const | 355 | QString Xkb::layoutName(xkb_layout_index_t layout) const | ||
▲ Show 20 Lines • Show All 122 Lines • ▼ Show 20 Line(s) | 474 | { | |||
467 | if (layout >= numberOfLayouts()) { | 478 | if (layout >= numberOfLayouts()) { | ||
468 | return; | 479 | return; | ||
469 | } | 480 | } | ||
470 | const xkb_mod_mask_t depressed = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_DEPRESSED)); | 481 | const xkb_mod_mask_t depressed = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_DEPRESSED)); | ||
471 | const xkb_mod_mask_t latched = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LATCHED)); | 482 | const xkb_mod_mask_t latched = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LATCHED)); | ||
472 | const xkb_mod_mask_t locked = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LOCKED)); | 483 | const xkb_mod_mask_t locked = xkb_state_serialize_mods(m_state, xkb_state_component(XKB_STATE_MODS_LOCKED)); | ||
473 | xkb_state_update_mask(m_state, depressed, latched, locked, 0, 0, layout); | 484 | xkb_state_update_mask(m_state, depressed, latched, locked, 0, 0, layout); | ||
474 | updateModifiers(); | 485 | updateModifiers(); | ||
486 | forwardModifiers(); | ||||
475 | } | 487 | } | ||
476 | 488 | | |||
477 | quint32 Xkb::numberOfLayouts() const | 489 | quint32 Xkb::numberOfLayouts() const | ||
478 | { | 490 | { | ||
479 | if (!m_keymap) { | 491 | if (!m_keymap) { | ||
480 | return 0; | 492 | return 0; | ||
481 | } | 493 | } | ||
482 | return xkb_keymap_num_layouts(m_keymap); | 494 | return xkb_keymap_num_layouts(m_keymap); | ||
483 | } | 495 | } | ||
484 | 496 | | |||
485 | } | 497 | } |