[Bf-blender-cvs] [c8b293ec057] master: Fix T69097: Empty context menu for dimensions

Campbell Barton noreply at git.blender.org
Fri Sep 20 13:06:30 CEST 2019


Commit: c8b293ec057ea9e8fb445ba103cf973cbd03c9f0
Author: Campbell Barton
Date:   Fri Sep 20 19:53:17 2019 +1000
Branches: master
https://developer.blender.org/rBc8b293ec057ea9e8fb445ba103cf973cbd03c9f0

Fix T69097: Empty context menu for dimensions

Adjust empty menu check to skip the menu title.

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

M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface_query.c
M	source/blender/editors/interface/interface_region_menu_popup.c

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

diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 6fc71846cbb..5326888036e 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -524,6 +524,7 @@ bool UI_but_is_tool(const uiBut *but);
 bool UI_but_is_utf8(const uiBut *but);
 #define UI_but_is_decorator(but) ((but)->func == ui_but_anim_decorate_cb)
 
+bool UI_block_is_empty_ex(const uiBlock *block, const bool skip_title);
 bool UI_block_is_empty(const uiBlock *block);
 bool UI_block_can_add_separator(const uiBlock *block);
 
diff --git a/source/blender/editors/interface/interface_query.c b/source/blender/editors/interface/interface_query.c
index 1c3d99d8bd2..457d01c5dc8 100644
--- a/source/blender/editors/interface/interface_query.c
+++ b/source/blender/editors/interface/interface_query.c
@@ -463,14 +463,33 @@ bool ui_block_is_popup_any(const uiBlock *block)
   return (ui_block_is_menu(block) || ui_block_is_popover(block) || ui_block_is_pie_menu(block));
 }
 
-bool UI_block_is_empty(const uiBlock *block)
+static const uiBut *ui_but_next_non_separator(const uiBut *but)
 {
-  for (const uiBut *but = block->buttons.first; but; but = but->next) {
+  for (; but; but = but->next) {
     if (!ELEM(but->type, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE)) {
-      return false;
+      return but;
     }
   }
-  return true;
+  return NULL;
+}
+
+bool UI_block_is_empty_ex(const uiBlock *block, const bool skip_title)
+{
+  const uiBut *but = block->buttons.first;
+  if (skip_title) {
+    /* Skip the first label, since popups often have a title,
+     * we may want to consider the block empty in this case. */
+    but = ui_but_next_non_separator(but);
+    if (but && but->type == UI_BTYPE_LABEL) {
+      but = but->next;
+    }
+  }
+  return (ui_but_next_non_separator(but) == NULL);
+}
+
+bool UI_block_is_empty(const uiBlock *block)
+{
+  return UI_block_is_empty_ex(block, false);
 }
 
 bool UI_block_can_add_separator(const uiBlock *block)
diff --git a/source/blender/editors/interface/interface_region_menu_popup.c b/source/blender/editors/interface/interface_region_menu_popup.c
index ab3a86ec9e1..fed3c0b3d11 100644
--- a/source/blender/editors/interface/interface_region_menu_popup.c
+++ b/source/blender/editors/interface/interface_region_menu_popup.c
@@ -474,7 +474,7 @@ void UI_popup_menu_end(bContext *C, uiPopupMenu *pup)
 
 bool UI_popup_menu_end_or_cancel(bContext *C, uiPopupMenu *pup)
 {
-  if (!UI_block_is_empty(pup->block)) {
+  if (!UI_block_is_empty_ex(pup->block, true)) {
     UI_popup_menu_end(C, pup);
     return true;
   }



More information about the Bf-blender-cvs mailing list