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:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user