don't ignore missing non-standard modifiers in _XtMatchUsingDontCareMods
VTInitTranslations() configures some bindings for keys in
a way that requires only the explicitly listed modifiers to be present, but
places no constraints on any other modifiers - e.g.
Shift <KeyPress> Insert, so if the user e.g. presses
Ctrl+Shift+Insert, the action will still fire.
https://www.x.org/releases/X11R7.5/doc/Xt/Xt.html Appendix B, which specifies the Translation Table syntax, says that not only additional modifiers are ignored, but missing modifiers that make up the key are also ignored. As the spec says:
‘‘A’’ and ‘‘a’’ are equivalent
In that example,
A is normally composed as
Shift+A, but the
modifier can be omitted.
On most keyboard layouts, keys such as
don't contain modifiers, so everything works fine. However, in the german
This means that when
VTInitTranslations() says that we want to bind to
Shift+KP_Add and don't care about any other modifiers (other than
Ctrl) being added or removed, the result is that when the user presses
Shift+Q (for capital
ϕ), the terminal's
font size will be changed instead.
While libXt is kind of working as documented here, the behavior doesn't
really make much sense. Let's tweak
_XtMatchUsingDontCareMods such that
missing non-standard modifiers are never ignored.