[Bf-blender-cvs] [e14de692fc9] master: UI: Only draw node menu search if categories exist

OmarSquircleArt noreply at git.blender.org
Mon Aug 17 13:42:30 CEST 2020


Commit: e14de692fc99b5e66d93c6240ec51410d087cf4d
Author: OmarSquircleArt
Date:   Mon Aug 17 13:43:19 2020 +0200
Branches: master
https://developer.blender.org/rBe14de692fc99b5e66d93c6240ec51410d087cf4d

UI: Only draw node menu search if categories exist

Currently, the search operator in the node add menu NODE_MT_add is drawn
even if no node categories exists. This patch only draws the operator if
at least one node category passes the poll.

This patch is needed because some add-ons use custom search operator and
do not register node categories. In this case, it is undesirable to have
a search operator drawn that do nothing and is not used. One such add-on
is Animation Nodes.

Reviewed By: Jacques Lucke

Differential Revision: https://developer.blender.org/D8576

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

M	release/scripts/modules/nodeitems_utils.py
M	release/scripts/startup/bl_ui/space_node.py

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

diff --git a/release/scripts/modules/nodeitems_utils.py b/release/scripts/modules/nodeitems_utils.py
index 595b6c8ee5f..d1e1cc5e346 100644
--- a/release/scripts/modules/nodeitems_utils.py
+++ b/release/scripts/modules/nodeitems_utils.py
@@ -144,6 +144,14 @@ def node_categories_iter(context):
                 yield cat
 
 
+def has_node_categories(context):
+    for cat_type in _node_categories.values():
+        for cat in cat_type[0]:
+            if cat.poll and ((context is None) or cat.poll(context)):
+                return True
+    return False
+
+
 def node_items_iter(context):
     for cat in node_categories_iter(context):
         for item in cat.items(context):
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index faf4036f9b3..93be870ce73 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -216,13 +216,15 @@ class NODE_MT_add(bpy.types.Menu):
         layout = self.layout
 
         layout.operator_context = 'INVOKE_DEFAULT'
-        props = layout.operator("node.add_search", text="Search...", icon='VIEWZOOM')
-        props.use_transform = True
 
-        layout.separator()
+        if nodeitems_utils.has_node_categories(context):
+            props = layout.operator("node.add_search", text="Search...", icon='VIEWZOOM')
+            props.use_transform = True
+
+            layout.separator()
 
-        # actual node submenus are defined by draw functions from node categories
-        nodeitems_utils.draw_node_categories_menu(self, context)
+            # actual node submenus are defined by draw functions from node categories
+            nodeitems_utils.draw_node_categories_menu(self, context)
 
 
 class NODE_MT_view(Menu):



More information about the Bf-blender-cvs mailing list