Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Eisel <julian@blender.org>2022-01-03 21:20:00 +0300
committerJulian Eisel <julian@blender.org>2022-01-03 21:55:49 +0300
commita42e972e1b9354911d9403840e137915a6c17b15 (patch)
tree3240adef945a660d37fdd51007917703eae3c1a4
parent1b9e103a308c3ba20853487e1297df0653263ac9 (diff)
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()`.
-rw-r--r--source/blender/editors/include/UI_interface.h1
-rw-r--r--source/blender/editors/interface/interface_handlers.c13
-rw-r--r--source/blender/editors/interface/interface_layout.c5
3 files changed, 17 insertions, 2 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 5fd176813e6..cee323bd5c9 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -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
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index d720b52a59e..659ac0ae899 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -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);
}
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index cbdb284c66b..98fcb36b778 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -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;