Fix T83539: 'activate_init' fails with buttons that have popups

Activating buttons was running too early, before the popup was
positioned on the screen,
causing data-selectors to be positioned incorrectly.

As the early button activation isn't needed, remove this call.

Ensure this doesn't happen again with an assert.
This commit is contained in:
Campbell Barton 2021-01-28 16:12:43 +11:00
parent 93412cb4e7
commit 10e093b30d
Notes: blender-bot 2023-02-14 06:00:50 +01:00
Referenced by issue #83539, PointerProperty doesn't activate correctly with 'activate_init'
Referenced by issue #83540, 'activate_init' freezes Blender window when called from operator props_popup
2 changed files with 5 additions and 2 deletions

View File

@ -988,6 +988,11 @@ bool UI_but_active_only(const bContext *C, ARegion *region, uiBlock *block, uiBu
*/
bool UI_block_active_only_flagged_buttons(const bContext *C, ARegion *region, uiBlock *block)
{
/* Running this command before end-block has run, means buttons that open menus
* wont have those menus correctly positioned, see T83539. */
BLI_assert(block->endblock != 0);
bool done = false;
LISTBASE_FOREACH (uiBut *, but, &block->buttons) {
if (but->flag & UI_BUT_ACTIVATE_ON_INIT) {

View File

@ -1403,8 +1403,6 @@ static uiBlock *wm_block_dialog_create(bContext *C, ARegion *region, void *userD
UI_block_bounds_set_popup(
block, 6 * U.dpi_fac, (const int[2]){data->width / -2, data->height / 2});
UI_block_active_only_flagged_buttons(C, region, block);
return block;
}