diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-02-25 17:35:00 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-02-25 17:39:20 +0400 |
commit | 03018353f67a1fc5e65585844144cfdf5addd408 (patch) | |
tree | 5561f5b6e181dd63d0a50f57379dbdfc76fa630b /release/scripts/modules/rna_keymap_ui.py | |
parent | 92653fe9449a40ceb14466b8bf1ced4982e0945c (diff) |
Fix T38827: Input preferences can not find Left Mouse or Left Arrow
Diffstat (limited to 'release/scripts/modules/rna_keymap_ui.py')
-rw-r--r-- | release/scripts/modules/rna_keymap_ui.py | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/release/scripts/modules/rna_keymap_ui.py b/release/scripts/modules/rna_keymap_ui.py index e6112cb9571..89e794fd6c2 100644 --- a/release/scripts/modules/rna_keymap_ui.py +++ b/release/scripts/modules/rna_keymap_ui.py @@ -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: |