diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-05-20 10:53:01 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-05-20 10:58:46 +0300 |
commit | 8cb6ede2bf78ae711077e3742fdb9b72e79a3b08 (patch) | |
tree | 878dee74168b23781f27389bf320c15238138c3d /source/blender/editors/interface/interface_region_popover.c | |
parent | 7959617fb6d715838f40165c08aeb75d85ebffd4 (diff) |
UI: locate popover w/ active item under cursor
Use when popover has no parent, useful for accessing the toolbar.
Diffstat (limited to 'source/blender/editors/interface/interface_region_popover.c')
-rw-r--r-- | source/blender/editors/interface/interface_region_popover.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/source/blender/editors/interface/interface_region_popover.c b/source/blender/editors/interface/interface_region_popover.c index 6be76572e0e..2f654b4f7cd 100644 --- a/source/blender/editors/interface/interface_region_popover.c +++ b/source/blender/editors/interface/interface_region_popover.c @@ -178,10 +178,23 @@ static uiBlock *ui_block_func_POPOVER(bContext *C, uiPopupBlockHandle *handle, v } else { /* Not attached to a button. */ - int offset[2] = {0, 0}; /* Dummy. */ + int offset[2] = {0, 0}; UI_block_flag_enable(block, UI_BLOCK_LOOP); UI_block_direction_set(block, block->direction); block->minbounds = UI_MENU_WIDTH_MIN; + + uiBut *but = NULL; + for (but = block->buttons.first; but; but = but->next) { + if (but->flag & (UI_SELECT | UI_SELECT_DRAW)) { + break; + } + } + + if (but) { + offset[0] = -(but->rect.xmin + 0.8f * BLI_rctf_size_x(&but->rect)); + offset[1] = -(but->rect.ymin + 0.5f * BLI_rctf_size_y(&but->rect)); + } + UI_block_bounds_set_popup(block, block_margin, offset[0], offset[1]); } |