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)
|
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;
|
bool done = false;
|
||||||
LISTBASE_FOREACH (uiBut *, but, &block->buttons) {
|
LISTBASE_FOREACH (uiBut *, but, &block->buttons) {
|
||||||
if (but->flag & UI_BUT_ACTIVATE_ON_INIT) {
|
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(
|
UI_block_bounds_set_popup(
|
||||||
block, 6 * U.dpi_fac, (const int[2]){data->width / -2, data->height / 2});
|
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;
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user