[Bf-blender-cvs] [cbf22782666] master: Fix T79075: Tool popup fails with experimental vertex colors enabled

Campbell Barton noreply at git.blender.org
Mon Jul 20 13:56:57 CEST 2020


Commit: cbf22782666662b35b4d3ed1b1116d96b586083c
Author: Campbell Barton
Date:   Mon Jul 20 21:54:49 2020 +1000
Branches: master
https://developer.blender.org/rBcbf22782666662b35b4d3ed1b1116d96b586083c

Fix T79075: Tool popup fails with experimental vertex colors enabled

Register key-maps from tools in functions.

===================================================================

M	release/scripts/startup/bl_ui/space_toolsystem_common.py
M	release/scripts/startup/bl_ui/space_toolsystem_toolbar.py

===================================================================

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,



More information about the Bf-blender-cvs mailing list