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
This commit is contained in:
Philipp Oeser 2021-10-19 10:18:54 +02:00
parent b3b7319de7
commit 57f1379104
Notes: blender-bot 2023-02-14 08:25:14 +01:00
Referenced by issue #88449: Blender LTS: Maintenance Task 2.93
Referenced by issue #88449, Blender LTS: Maintenance Task 2.93
Referenced by issue #92265, Clicking in Library Overrides Outliner triggers crash in this file
1 changed files with 14 additions and 10 deletions

View File

@ -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;