From da16b3000b7c34ff078d66a34a6221bb38d6eca4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 7 Jan 2014 19:27:44 +1100 Subject: Fix T38044: Filter Key Binding shows Incorrect result --- release/scripts/modules/rna_keymap_ui.py | 34 +++++++++++++++----------------- 1 file changed, 16 insertions(+), 18 deletions(-) (limited to 'release') diff --git a/release/scripts/modules/rna_keymap_ui.py b/release/scripts/modules/rna_keymap_ui.py index 60590158fbd..f637b06a565 100644 --- a/release/scripts/modules/rna_keymap_ui.py +++ b/release/scripts/modules/rna_keymap_ui.py @@ -251,51 +251,49 @@ def draw_filtered(display_keymaps, filter_type, filter_text, layout): "any": "any", } # KeyMapItem like dict, use for comparing against - # attr: state + # attr: {states, ...} kmi_test_dict = {} # initialize? - so if a if a kmi has a MOD assigned it wont show up. #~ for kv in key_mod.values(): - #~ kmi_test_dict[kv] = False + #~ kmi_test_dict[kv] = {False} # altname: attr for kk, kv in key_mod.items(): if kk in filter_text_split: filter_text_split.remove(kk) - kmi_test_dict[kv] = True + 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() + kmi_type_set = set() - if kmi_type not in _EVENT_TYPES: + if kmi_type in _EVENT_TYPES: + kmi_type_set.add(kmi_type) + else: # replacement table kmi_type_test = _EVENT_TYPE_MAP.get(kmi_type) - if kmi_type_test is None: + if kmi_type_test is not None: + kmi_type_set.add(kmi_type_test) + else: # print("Unknown Type:", kmi_type) # Partial match for k, v in _EVENT_TYPE_MAP.items(): - if kmi_type in k: - kmi_type_test = v - break - if kmi_type in v: - kmi_type_test = v - break - - if kmi_type_test is None: - return False + if (kmi_type in k) or (kmi_type in v): + kmi_type_set.add(v) - kmi_type = kmi_type_test - del kmi_type_test + if not kmi_type_set: + return False - kmi_test_dict["type"] = kmi_type + kmi_test_dict["type"] = kmi_type_set # main filter func, runs many times def filter_func(kmi): for kk, ki in kmi_test_dict.items(): - if getattr(kmi, kk) != ki: + if getattr(kmi, kk) not in ki: return False return True -- cgit v1.2.3