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
This commit is contained in:
Omar Emara 2020-08-17 13:43:19 +02:00
parent 8fda93a405
commit e14de692fc
2 changed files with 15 additions and 5 deletions

View File

@ -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):

View File

@ -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
# actual node submenus are defined by draw functions from node categories
nodeitems_utils.draw_node_categories_menu(self, context)
layout.separator()
# actual node submenus are defined by draw functions from node categories
nodeitems_utils.draw_node_categories_menu(self, context)
class NODE_MT_view(Menu):