Fix T38827: Input preferences can not find Left Mouse or Left Arrow

This commit is contained in:
Campbell Barton 2014-02-26 00:35:00 +11:00
parent 92653fe944
commit 03018353f6
Notes: blender-bot 2023-02-14 11:07:25 +01:00
Referenced by issue #38827, Input preferences can not find Left Mouse or Left Arrow
1 changed files with 26 additions and 11 deletions

View File

@ -255,6 +255,9 @@ def draw_filtered(display_keymaps, filter_type, filter_text, layout):
# KeyMapItem like dict, use for comparing against
# attr: {states, ...}
kmi_test_dict = {}
# Special handling of 'type' using a list if sets,
# keymap items must match against all.
kmi_test_type = []
# initialize? - so if a if a kmi has a MOD assigned it wont show up.
#~ for kv in key_mod.values():
@ -265,11 +268,10 @@ def draw_filtered(display_keymaps, filter_type, filter_text, layout):
if kk in filter_text_split:
filter_text_split.remove(kk)
kmi_test_dict[kv] = {True}
# whats left should be the event type
if len(filter_text_split) > 1:
return False
elif filter_text_split:
kmi_type = filter_text_split[0].upper()
def kmi_type_set_from_string(kmi_type):
kmi_type = kmi_type.upper()
kmi_type_set = set()
if kmi_type in _EVENT_TYPES:
@ -288,25 +290,38 @@ def draw_filtered(display_keymaps, filter_type, filter_text, layout):
for k, v in event_type_map.items():
if (kmi_type in k) or (kmi_type in v):
kmi_type_set.add(v)
return kmi_type_set
kmi_type_set_combine = None
for i, kmi_type in enumerate(filter_text_split):
kmi_type_set = kmi_type_set_from_string(kmi_type)
if not kmi_type_set:
return False
else:
kmi_test_dict["type"] = kmi_type_set
kmi_test_type.append(kmi_type_set)
# tiny optimization, sort sets so the smallest is first
# improve chances of failing early
kmi_test_type.sort(key=lambda kmi_type_set: len(kmi_type_set))
# main filter func, runs many times
def filter_func(kmi):
for kk, ki in kmi_test_dict.items():
val = getattr(kmi, kk)
if val not in ki:
return False
# special handling of 'type'
for ki in kmi_test_type:
val = kmi.type
if val == 'NONE' or val not in ki:
# exception for 'type'
# also inspect 'key_modifier' as a fallback
if kk == "type":
val = getattr(kmi, "key_modifier")
if not (val == 'NONE' or val not in ki):
continue
val = kmi.key_modifier
if not (val == 'NONE' or val not in ki):
continue
return False
return True
for km, kc in display_keymaps: