[Development] Qt/XCB applications and deadkeys (which cease working) (way to reproduce)

René J. V. Bertin rjvbertin at gmail.com
Fri Jun 9 16:29:52 CEST 2017


René J. V. Bertin wrote:

> Evidently one cannot use xev now because it'll involve a focus change. But the

Actually, maybe one can: `xev -id <wid>`

Using that and Qt4:

xev (all ok):
KeyRelease event, serial 22, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126529470, (106,16), root:(680,46),
    state 0x80, keycode 26 (keysym 0xfe51, dead_acute), same_screen YES,
    XLookupString gives 2 bytes: (c2 b4) "´"
    XFilterEvent returns: False

KeyPress event, serial 22, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126529470, (106,16), root:(680,46),
    state 0x80, keycode 26 (keysym 0xfe51, dead_acute), same_screen YES,
    XLookupString gives 2 bytes: (c2 b4) "´"
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: True

KeyRelease event, serial 22, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126529632, (106,16), root:(680,46),
    state 0x80, keycode 26 (keysym 0xfe51, dead_acute), same_screen YES,
    XLookupString gives 2 bytes: (c2 b4) "´"
    XFilterEvent returns: False

KeyRelease event, serial 22, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126529660, (106,16), root:(680,46),
    state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 22, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126529761, (106,16), root:(680,46),
    state 0x0, keycode 26 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: False

KeyPress event, serial 22, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126529761, (106,16), root:(680,46),
    state 0x0, keycode 26 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XmbLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: True

KeyPress event, serial 22, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126529761, (106,16), root:(680,46),
    state 0x0, keycode 0 (keysym 0xe9, eacute), same_screen YES,
    XKeysymToKeycode returns keycode: 11
    XLookupString gives 0 bytes: 
    XmbLookupString gives 2 bytes: (c3 a9) "é"
    XFilterEvent returns: False

KeyRelease event, serial 22, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126529876, (106,16), root:(680,46),
    state 0x0, keycode 26 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: False

qev:
QKeyEvent(ShortcutOverride, key=0x1001103)
QKeyEvent(KeyPress, key=0x1001103)
QKeyEvent(KeyRelease, key=0x1001251, modifiers=0x40000000, text="´")
QKeyEvent(KeyRelease, key=0x1001103, modifiers=0x40000000)
QInputMethodEvent(, commit="U+e9")
QKeyEvent(KeyRelease, key=0x45, text="e")


xev (issue triggered):
KeyRelease event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126954309, (114,-8), root:(688,22),
    state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126954309, (114,-8), root:(688,22),
    state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

PropertyNotify event, serial 24, synthetic NO, window 0x5400023,
    atom 0x15f (_NET_WM_USER_TIME), time 126954318, state PropertyNewValue

KeyRelease event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126954399, (114,-8), root:(688,22),
    state 0x80, keycode 26 (keysym 0xfe51, dead_acute), same_screen YES,
    XLookupString gives 2 bytes: (c2 b4) "´"
    XFilterEvent returns: False

KeyPress event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126954399, (114,-8), root:(688,22),
    state 0x80, keycode 26 (keysym 0xfe51, dead_acute), same_screen YES,
    XLookupString gives 2 bytes: (c2 b4) "´"
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: True

PropertyNotify event, serial 24, synthetic NO, window 0x5400023,
    atom 0x15f (_NET_WM_USER_TIME), time 126954408, state PropertyNewValue

KeyRelease event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126954525, (114,-8), root:(688,22),
    state 0x80, keycode 26 (keysym 0xfe51, dead_acute), same_screen YES,
    XLookupString gives 2 bytes: (c2 b4) "´"
    XFilterEvent returns: False

KeyRelease event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126954621, (114,-8), root:(688,22),
    state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126955120, (114,-8), root:(688,22),
    state 0x0, keycode 26 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: False

KeyPress event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126955120, (114,-8), root:(688,22),
    state 0x0, keycode 26 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XmbLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: True

KeyPress event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126955120, (114,-8), root:(688,22),
    state 0x0, keycode 0 (keysym 0xe9, eacute), same_screen YES,
    XKeysymToKeycode returns keycode: 11
    XLookupString gives 0 bytes: 
    XmbLookupString gives 2 bytes: (c3 a9) "é"
    XFilterEvent returns: False

PropertyNotify event, serial 24, synthetic NO, window 0x5400023,
    atom 0x15f (_NET_WM_USER_TIME), time 126955131, state PropertyNewValue

KeyRelease event, serial 24, synthetic NO, window 0x5400023,
    root 0xf6, subw 0x0, time 126955211, (114,-8), root:(688,22),
    state 0x0, keycode 26 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: False

qev:
QKeyEvent(ShortcutOverride, key=0x1001103)
QKeyEvent(KeyPress, key=0x1001103)
QKeyEvent(ShortcutOverride, key=0x1001251, modifiers=0x40000000, text="´")
QKeyEvent(KeyPress, key=0x1001251, modifiers=0x40000000, text="´")
QKeyEvent(KeyRelease, key=0x1001251, modifiers=0x40000000, text="´")
QKeyEvent(KeyRelease, key=0x1001103, modifiers=0x40000000)
QKeyEvent(ShortcutOverride, key=0x45, text="e")
QKeyEvent(KeyPress, key=0x45, text="e")
QKeyEvent(KeyRelease, key=0x45, text="e")

I don't see any difference in the xev output, but there is a difference in the 
qev output.

Same thing, Qt5 qev only:
OK:
QKeyEvent(ShortcutOverride, Key_AltGr, GroupSwitchModifier) 
QKeyEvent(KeyPress, Key_AltGr, GroupSwitchModifier) 
QKeyEvent(KeyRelease, Key_Dead_Acute, GroupSwitchModifier) 
QKeyEvent(KeyRelease, Key_AltGr) 
QInputMethodEvent(, commit="U+e9") 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QKeyEvent(KeyRelease, Key_E, text="e") 

Issue triggered:
QKeyEvent(ShortcutOverride, Key_AltGr, GroupSwitchModifier) 
QKeyEvent(KeyPress, Key_AltGr, GroupSwitchModifier) 
QKeyEvent(ShortcutOverride, Key_Dead_Acute, GroupSwitchModifier) 
QKeyEvent(KeyPress, Key_Dead_Acute, GroupSwitchModifier) 
QKeyEvent(KeyRelease, Key_Dead_Acute, GroupSwitchModifier) 
QKeyEvent(KeyRelease, Key_AltGr) 
QKeyEvent(ShortcutOverride, Key_E, text="e") 
QKeyEvent(KeyPress, Key_E, text="e") 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QKeyEvent(KeyRelease, Key_E, text="e") 

issue repaired (after focus change):
QKeyEvent(ShortcutOverride, Key_AltGr, GroupSwitchModifier) 
QKeyEvent(KeyPress, Key_AltGr, GroupSwitchModifier) 
QKeyEvent(KeyRelease, Key_Dead_Acute, GroupSwitchModifier) 
QKeyEvent(KeyRelease, Key_AltGr) 
QInputMethodEvent(, commit="U+e9") 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QInputMethodQueryEvent(queries=0x1, {}) 
QInputMethodQueryEvent(queries=0x2, {}) 
QKeyEvent(KeyRelease, Key_E, text="e") 


In both Qt4 and Qt5 cases it seems that the difference is an extra 
Key_Dead_Acute keypress before the intended(?) Key_Dead_Actute key RELEASE.
Qt4 seems to interpret that as "insert just an acute accent", wherease Qt5 
discards the accent completely.

So yes, Allan, we're seeing the same issue.

R.




More information about the Development mailing list