Fix T94316: Asset catalog tree scrolls away when renaming a catalog
The activation of the text button is a bit special, since it happens during drawing, the layout isn't computed yet then. Comparable cases where the button is added on top don't use the layout system, so this didn't become an issue until now. Trigger a delayed call to `UI_but_ensure_in_view()`.
This commit is contained in:
parent
1b9e103a30
commit
a42e972e1b
Notes:
blender-bot
2023-10-18 15:23:11 +02:00
Referenced by issue #94316, Asset Browser: Window scrolls away when renaming a catalog
|
@ -2044,6 +2044,7 @@ uiLayout *UI_block_layout(uiBlock *block,
|
|||
const struct uiStyle *style);
|
||||
void UI_block_layout_set_current(uiBlock *block, uiLayout *layout);
|
||||
void UI_block_layout_resolve(uiBlock *block, int *r_x, int *r_y);
|
||||
bool UI_block_layout_needs_resolving(const uiBlock *block);
|
||||
/**
|
||||
* Used for property search when the layout process needs to be cancelled in order to avoid
|
||||
* computing the locations for buttons, but the layout items created while adding the buttons
|
||||
|
|
|
@ -3495,8 +3495,17 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data)
|
|||
|
||||
ui_but_update(but);
|
||||
|
||||
/* Popup blocks don't support moving after creation, so don't change the view for them. */
|
||||
if (!data->searchbox) {
|
||||
/* Make sure the edited button is in view. */
|
||||
if (data->searchbox) {
|
||||
/* Popup blocks don't support moving after creation, so don't change the view for them. */
|
||||
}
|
||||
else if (UI_block_layout_needs_resolving(but->block)) {
|
||||
/* Layout isn't resolved yet (may happen when activating while drawing through
|
||||
* #UI_but_active_only()), so can't move it into view yet. This causes
|
||||
* #ui_but_update_view_for_active() to run after the layout is resolved. */
|
||||
but->changed = true;
|
||||
}
|
||||
else {
|
||||
UI_but_ensure_in_view(C, data->region, but);
|
||||
}
|
||||
|
||||
|
|
|
@ -5661,6 +5661,11 @@ void UI_block_layout_resolve(uiBlock *block, int *r_x, int *r_y)
|
|||
}
|
||||
}
|
||||
|
||||
bool UI_block_layout_needs_resolving(const uiBlock *block)
|
||||
{
|
||||
return !BLI_listbase_is_empty(&block->layouts);
|
||||
}
|
||||
|
||||
void uiLayoutSetContextPointer(uiLayout *layout, const char *name, PointerRNA *ptr)
|
||||
{
|
||||
uiBlock *block = layout->root->block;
|
||||
|
|
Loading…
Reference in New Issue