diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-07-20 14:54:49 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-07-20 14:55:48 +0300 |
commit | cbf22782666662b35b4d3ed1b1116d96b586083c (patch) | |
tree | df5ba50457b6c18d79bb1aa818f6debb86de8ef5 /release | |
parent | ac5f011e9c1fa7256b028c4b829f56470b1e8217 (diff) |
Fix T79075: Tool popup fails with experimental vertex colors enabled
Register key-maps from tools in functions.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/startup/bl_ui/space_toolsystem_common.py | 34 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_toolsystem_toolbar.py | 10 |
2 files changed, 30 insertions, 14 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: diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index b7852eb92e0..ce48b92c419 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -2496,15 +2496,17 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_sculpt.cloth_filter, lambda context: ( (_defs_sculpt.color_filter,) - if bpy.context.preferences.view.show_developer_ui and \ - bpy.context.preferences.experimental.use_sculpt_vertex_colors + if context is None or ( + context.preferences.view.show_developer_ui and + context.preferences.experimental.use_sculpt_vertex_colors) else () ), None, lambda context: ( (_defs_sculpt.mask_by_color,) - if bpy.context.preferences.view.show_developer_ui and \ - bpy.context.preferences.experimental.use_sculpt_vertex_colors + if context is None or ( + context.preferences.view.show_developer_ui and + context.preferences.experimental.use_sculpt_vertex_colors) else () ), None, |