Make sure we have plain keys/modifiers where needed
This commit is contained in:
parent
0ee7fac727
commit
2b84ea9dbe
@ -38,7 +38,18 @@ _MODIFIER_MAP = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _assert_plain_key(key):
|
||||||
|
"""Make sure this is a key without KeyboardModifiers mixed in."""
|
||||||
|
assert not key & Qt.KeyboardModifierMask, hex(key)
|
||||||
|
|
||||||
|
|
||||||
|
def _assert_plain_modifier(key):
|
||||||
|
"""Make sure this is a modifier without a key mixed in."""
|
||||||
|
assert not key & ~Qt.KeyboardModifierMask, hex(key)
|
||||||
|
|
||||||
|
|
||||||
def is_printable(key):
|
def is_printable(key):
|
||||||
|
_assert_plain_key(key)
|
||||||
return key <= 0xff and key not in [Qt.Key_Space, 0x0]
|
return key <= 0xff and key not in [Qt.Key_Space, 0x0]
|
||||||
|
|
||||||
|
|
||||||
@ -48,6 +59,7 @@ def is_modifier_key(key):
|
|||||||
This only considers keys which are part of Qt::KeyboardModifiers, i.e.
|
This only considers keys which are part of Qt::KeyboardModifiers, i.e.
|
||||||
which would interrupt a key chain like "yY" when handled.
|
which would interrupt a key chain like "yY" when handled.
|
||||||
"""
|
"""
|
||||||
|
_assert_plain_key(key)
|
||||||
return key in _MODIFIER_MAP
|
return key in _MODIFIER_MAP
|
||||||
|
|
||||||
|
|
||||||
@ -73,6 +85,7 @@ def _key_to_string(key):
|
|||||||
Return:
|
Return:
|
||||||
A name of the key as a string.
|
A name of the key as a string.
|
||||||
"""
|
"""
|
||||||
|
_assert_plain_key(key)
|
||||||
special_names_str = {
|
special_names_str = {
|
||||||
# Some keys handled in a weird way by QKeySequence::toString.
|
# Some keys handled in a weird way by QKeySequence::toString.
|
||||||
# See https://bugreports.qt.io/browse/QTBUG-40030
|
# See https://bugreports.qt.io/browse/QTBUG-40030
|
||||||
@ -155,6 +168,7 @@ def _modifiers_to_string(modifiers):
|
|||||||
Handles Qt.GroupSwitchModifier because Qt doesn't handle that as a
|
Handles Qt.GroupSwitchModifier because Qt doesn't handle that as a
|
||||||
modifier.
|
modifier.
|
||||||
"""
|
"""
|
||||||
|
_assert_plain_modifier(modifiers)
|
||||||
if modifiers & Qt.GroupSwitchModifier:
|
if modifiers & Qt.GroupSwitchModifier:
|
||||||
modifiers &= ~Qt.GroupSwitchModifier
|
modifiers &= ~Qt.GroupSwitchModifier
|
||||||
result = 'AltGr+'
|
result = 'AltGr+'
|
||||||
@ -446,6 +460,9 @@ class KeySequence:
|
|||||||
key = ev.key()
|
key = ev.key()
|
||||||
modifiers = ev.modifiers()
|
modifiers = ev.modifiers()
|
||||||
|
|
||||||
|
_assert_plain_key(key)
|
||||||
|
_assert_plain_modifier(modifiers)
|
||||||
|
|
||||||
if key == 0x0:
|
if key == 0x0:
|
||||||
raise KeyParseError(None, "Got nil key!")
|
raise KeyParseError(None, "Got nil key!")
|
||||||
|
|
||||||
|
@ -444,7 +444,6 @@ def test_key_info_to_event():
|
|||||||
(Qt.Key_Return, False),
|
(Qt.Key_Return, False),
|
||||||
(Qt.Key_Enter, False),
|
(Qt.Key_Enter, False),
|
||||||
(Qt.Key_Space, False),
|
(Qt.Key_Space, False),
|
||||||
(Qt.Key_X | Qt.ControlModifier, False), # Wrong usage
|
|
||||||
(0x0, False), # Used by Qt for unknown keys
|
(0x0, False), # Used by Qt for unknown keys
|
||||||
|
|
||||||
(Qt.Key_ydiaeresis, True),
|
(Qt.Key_ydiaeresis, True),
|
||||||
@ -461,3 +460,16 @@ def test_is_printable(key, printable):
|
|||||||
])
|
])
|
||||||
def test_is_modifier_key(key, ismodifier):
|
def test_is_modifier_key(key, ismodifier):
|
||||||
assert keyutils.is_modifier_key(key) == ismodifier
|
assert keyutils.is_modifier_key(key) == ismodifier
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('code', [
|
||||||
|
lambda a: keyutils._assert_plain_key(a),
|
||||||
|
lambda a: keyutils._assert_plain_modifier(a),
|
||||||
|
lambda a: keyutils.is_printable(a),
|
||||||
|
lambda a: keyutils.is_modifier_key(a),
|
||||||
|
lambda a: keyutils._key_to_string(a),
|
||||||
|
lambda a: keyutils._modifiers_to_string(a),
|
||||||
|
])
|
||||||
|
def test_non_plain(code):
|
||||||
|
with pytest.raises(AssertionError):
|
||||||
|
code(Qt.Key_X | Qt.ControlModifier)
|
||||||
|
Loading…
Reference in New Issue
Block a user