[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