[Bf-blender-cvs] [57f1379104e] master: Fix T92265: Outliner crash clicking override warning buttons

Philipp Oeser noreply at git.blender.org
Tue Oct 19 16:45:50 CEST 2021


Commit: 57f1379104e7e36dd60fc270253e4a4555f0e699
Author: Philipp Oeser
Date:   Tue Oct 19 10:18:54 2021 +0200
Branches: master
https://developer.blender.org/rB57f1379104e7e36dd60fc270253e4a4555f0e699

Fix T92265: Outliner crash clicking override warning buttons

`outliner_draw_overrides_buts` uses `uiDefIconBlockBut` but doing so
without defining a function callback to actually build a block.
This will make the button go down the route of spawning a popup, but
without a menu. Crash then happens later accesing the (missing) menu in
`ui_handler_region_menu`.

So while we could dive into making this usage failsafe (carefully
checking `BUTTON_STATE_MENU_OPEN` in combination with
`uiHandleButtonData->menu` being NULL all over), but it seems much more
straightforward to just use `uiDefIconBut` (instead of
`uiDefIconBlockBut`) since this Override Warning buttons seem not to
intend spawning a menu anyways?

Maniphest Tasks: T92265

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

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

M	source/blender/editors/space_outliner/outliner_draw.c

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

diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index 7cdfb553da5..956c455c545 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -1841,16 +1841,20 @@ static bool outliner_draw_overrides_buts(uiBlock *block,
       if (tip == NULL) {
         tip = TIP_("Some sub-items require attention");
       }
-      uiBut *bt = uiDefIconBlockBut(block,
-                                    NULL,
-                                    NULL,
-                                    1,
-                                    ICON_ERROR,
-                                    (int)(region->v2d.cur.xmax - OL_TOG_USER_BUTS_STATUS),
-                                    te->ys,
-                                    UI_UNIT_X,
-                                    UI_UNIT_Y,
-                                    tip);
+      uiBut *bt = uiDefIconBut(block,
+                               UI_BTYPE_BUT,
+                               1,
+                               ICON_ERROR,
+                               (int)(region->v2d.cur.xmax - OL_TOG_USER_BUTS_STATUS),
+                               te->ys,
+                               UI_UNIT_X,
+                               UI_UNIT_Y,
+                               NULL,
+                               0.0,
+                               0.0,
+                               0.0,
+                               0.0,
+                               tip);
       UI_but_flag_enable(bt, but_flag);
     }
     any_item_has_warnings = any_item_has_warnings || item_has_warnings || any_child_has_warnings;



More information about the Bf-blender-cvs mailing list