Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-02-25 17:35:00 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-02-25 17:39:20 +0400
commit03018353f67a1fc5e65585844144cfdf5addd408 (patch)
tree5561f5b6e181dd63d0a50f57379dbdfc76fa630b /release/scripts
parent92653fe9449a40ceb14466b8bf1ced4982e0945c (diff)
Fix T38827: Input preferences can not find Left Mouse or Left Arrow
Diffstat (limited to 'release/scripts')
-rw-r--r--release/scripts/modules/rna_keymap_ui.py37
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: