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:
authorCampbell Barton <ideasman42@gmail.com>2018-05-19 20:16:47 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-05-19 20:16:47 +0300
commit06737a82584c6be60a25b5f289e3fcd5c26b7aac (patch)
tree4753076b35cbbc36db947fe12a229110a4f92dcb /source/blender/editors/interface/interface_region_popover.c
parente65643b9a3e90866b05f032fec1bc05f7d6ac999 (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.c20
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 */