forked from bartvdbraak/blender
Fix T38827: Input preferences can not find Left Mouse or Left Arrow
This commit is contained in:
parent
92653fe944
commit
03018353f6
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user