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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-04-29 09:45:57 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-04-29 10:18:54 +0300
commitfc32bd729c5b75088db5c7c6ad288a64e7dcf8a6 (patch)
treed132949f0a901173242d838ab8070c26bb7617d1
parentcb53c9bc7b3e8fa5d5e15e18b9286670f3d244ab (diff)
UI: don't flip contents of popovers, avoid closing when size changes.
-rw-r--r--source/blender/editors/interface/interface_intern.h3
-rw-r--r--source/blender/editors/interface/interface_region_popover.c8
-rw-r--r--source/blender/editors/interface/interface_region_popup.c11
3 files changed, 16 insertions, 6 deletions
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index c9ed3c36b22..a10321eb91e 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -572,6 +572,9 @@ struct uiPopupBlockHandle {
/* menu direction */
int direction;
+ /* previous rect for refresh */
+ rctf prev_block_rect;
+
/* #ifdef USE_DRAG_POPUP */
bool is_grab;
int grab_xy_prev[2];
diff --git a/source/blender/editors/interface/interface_region_popover.c b/source/blender/editors/interface/interface_region_popover.c
index 845511b3279..f3a953cfc10 100644
--- a/source/blender/editors/interface/interface_region_popover.c
+++ b/source/blender/editors/interface/interface_region_popover.c
@@ -95,12 +95,8 @@ static void ui_popover_create_block(bContext *C, uiPopover *pup, int opcontext)
uiLayoutContextCopy(pup->layout, pup->but->context);
}
}
- else {
- /* Some enums reversing is strange, currently we have no good way to
- * reverse some enum's but not others, so reverse all so the first menu
- * items are always close to the mouse cursor. */
- pup->block->flag |= UI_BLOCK_NO_FLIP;
- }
+
+ pup->block->flag |= UI_BLOCK_NO_FLIP;
}
static uiBlock *ui_block_func_POPOVER(bContext *C, uiPopupBlockHandle *handle, void *arg_pup)
diff --git a/source/blender/editors/interface/interface_region_popup.c b/source/blender/editors/interface/interface_region_popup.c
index 94e6aa44811..f397c62920b 100644
--- a/source/blender/editors/interface/interface_region_popup.c
+++ b/source/blender/editors/interface/interface_region_popup.c
@@ -591,6 +591,17 @@ uiBlock *ui_popup_block_refresh(
else {
/* clip block with window boundary */
ui_popup_block_clip(window, block);
+
+ /* Avoid menu moving down and losing cursor focus by keeping it at
+ * the same height. */
+ if (block_old && handle->prev_block_rect.ymax > block->rect.ymax) {
+ float offset = handle->prev_block_rect.ymax - block->rect.ymax;
+ ui_block_translate(block, 0, offset);
+ block->rect.ymin = handle->prev_block_rect.ymin;
+ }
+
+ handle->prev_block_rect = block->rect;
+
/* the block and buttons were positioned in window space as in 2.4x, now
* these menu blocks are regions so we bring it back to region space.
* additionally we add some padding for the menu shadow or rounded menus */