diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-05-19 20:16:47 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-05-19 20:16:47 +0300 |
commit | 06737a82584c6be60a25b5f289e3fcd5c26b7aac (patch) | |
tree | 4753076b35cbbc36db947fe12a229110a4f92dcb /source/blender/editors/interface/interface_region_popover.c | |
parent | e65643b9a3e90866b05f032fec1bc05f7d6ac999 (diff) |
UI: popover-once (click-drag for single actions)
Experimental support for using popovers like menus,
use this when the user hold the mouse down
(previously this did nothing).
This means turning frequently accessed menu items into
popovers doesn't add more clicks to the existing use case.
Diffstat (limited to 'source/blender/editors/interface/interface_region_popover.c')
-rw-r--r-- | source/blender/editors/interface/interface_region_popover.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/source/blender/editors/interface/interface_region_popover.c b/source/blender/editors/interface/interface_region_popover.c index fcfbc3027d0..6be76572e0e 100644 --- a/source/blender/editors/interface/interface_region_popover.c +++ b/source/blender/editors/interface/interface_region_popover.c @@ -79,6 +79,10 @@ struct uiPopover { uiMenuCreateFunc menu_func; void *menu_arg; + +#ifdef USE_POPOVER_ONCE + bool is_once; +#endif }; static void ui_popover_create_block(bContext *C, uiPopover *pup, int opcontext) @@ -125,6 +129,11 @@ static uiBlock *ui_block_func_POPOVER(bContext *C, uiPopupBlockHandle *handle, v UI_block_region_set(block, handle->region); UI_block_layout_resolve(block, &width, &height); UI_block_flag_enable(block, UI_BLOCK_MOVEMOUSE_QUIT | UI_BLOCK_KEEP_OPEN | UI_BLOCK_POPOVER); +#ifdef USE_POPOVER_ONCE + if (pup->is_once) { + UI_block_flag_enable(block, UI_BLOCK_POPOVER_ONCE); + } +#endif UI_block_direction_set(block, UI_DIR_DOWN | UI_DIR_CENTER_X); const int block_margin = U.widget_unit / 2; @@ -195,6 +204,10 @@ uiPopupBlockHandle *ui_popover_panel_create( pup->menu_func = menu_func; pup->menu_arg = arg; +#ifdef USE_POPOVER_ONCE + pup->is_once = true; +#endif + /* Create popup block. */ uiPopupBlockHandle *handle; handle = ui_popup_block_create(C, butregion, but, NULL, ui_block_func_POPOVER, pup); @@ -262,6 +275,13 @@ uiLayout *UI_popover_layout(uiPopover *pup) return pup->layout; } +#ifdef USE_POPOVER_ONCE +void UI_popover_once_clear(uiPopover *pup) +{ + pup->is_once = false; +} +#endif + /** \} */ /* We may want to support this in future */ |