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:
Diffstat (limited to 'release/scripts/startup/bl_ui/space_toolsystem_common.py')
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_common.py34
1 files changed, 24 insertions, 10 deletions
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index 080e66b59e7..50316f50474 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -271,19 +271,24 @@ class ToolSelectPanelHelper:
yield item, i
i += 1
- # Special internal function, gives use items that contain keymaps.
@staticmethod
- def _tools_flatten_with_keymap(tools):
+ def _tools_flatten_with_dynamic(tools, *, context):
+ """
+ Expands dynamic items, indices aren't aligned with other flatten functions.
+ The context may be None, use as signal to return all items.
+ """
for item_parent in tools:
if item_parent is None:
- continue
+ yield None
for item in item_parent if (type(item_parent) is tuple) else (item_parent,):
- # skip None or generator function
- if item is None or _item_is_fn(item):
- continue
- if item.keymap is not None:
+ if item is None:
+ yield None
+ elif _item_is_fn(item):
+ yield from ToolSelectPanelHelper._tools_flatten_with_dynamic(item(context), context=context)
+ else:
yield item
+
@classmethod
def _tool_get_active(cls, context, space_type, mode, with_icon=False):
"""
@@ -484,8 +489,12 @@ class ToolSelectPanelHelper:
else:
context_descr = context_mode.replace("_", " ").title()
- for item in cls._tools_flatten_with_keymap(tools):
+ for item in cls._tools_flatten_with_dynamic(tools, context=None):
+ if item is None:
+ continue
keymap_data = item.keymap
+ if keymap_data is None:
+ continue
if callable(keymap_data[0]):
cls._km_action_simple(kc_default, kc_default, context_descr, item.label, keymap_data)
@@ -498,8 +507,13 @@ class ToolSelectPanelHelper:
for context_mode_test, tools in cls.tools_all():
if context_mode_test == context_mode:
- for item in cls._tools_flatten_with_keymap(tools):
- km_name = item.keymap[0]
+ for item in cls._tools_flatten(tools):
+ if item is None:
+ continue
+ keymap_data = item.keymap
+ if keymap_data is None:
+ continue
+ km_name = keymap_data[0]
# print((km.name, cls.bl_space_type, 'WINDOW', []))
if km_name in visited: