[Bf-blender-cvs] [8eb5aa1] pie-menus: Fix recursive menus respawning on selection
Antony Riakiotakis
noreply at git.blender.org
Fri Jun 20 03:12:13 CEST 2014
Commit: 8eb5aa1c355736e1f1e53dbfd93dbf37238221c5
Author: Antony Riakiotakis
Date: Fri Jun 20 04:11:43 2014 +0300
https://developer.blender.org/rB8eb5aa1c355736e1f1e53dbfd93dbf37238221c5
Fix recursive menus respawning on selection
Fix here is a bit hacky, we do not draw the menu and we simply await for
key release to stop the handler, or else the pie menu gets respawned
immediately.
===================================================================
M source/blender/editors/interface/interface.c
M source/blender/editors/interface/interface_handlers.c
===================================================================
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index c16abca..0e8ff0a 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -1278,6 +1278,10 @@ void uiDrawBlock(const bContext *C, uiBlock *block)
rcti rect;
int multisample_enabled;
+ /* early exit if cancelled */
+ if (block->flag & UI_BLOCK_RADIAL && block->pie_data.flags & UI_PIE_CANCELLED)
+ return;
+
/* get menu region or area region */
ar = CTX_wm_menu(C);
if (!ar)
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index cae0a38..0fad988 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -8308,9 +8308,15 @@ static int ui_handle_menu_return_submenu(bContext *C, const wmEvent *event, uiPo
ui_mouse_motion_towards_reinit(menu, &event->x);
}
- if (menu->menuretval)
+ if (menu->menuretval) {
+ /* pie menus should not close but wait for release instead */
+ if (block->flag & UI_BLOCK_RADIAL) {
+ menu->menuretval = 0;
+ block->pie_data.flags |= UI_PIE_CANCELLED;
+ }
+
return WM_UI_HANDLER_CONTINUE;
- else
+ } else
return WM_UI_HANDLER_BREAK;
}
@@ -8395,6 +8401,14 @@ static int ui_handler_pie(bContext *C, const wmEvent *event, uiPopupBlockHandle
ui_block_calculate_pie_segment(block, mx, my);
+ if (block->pie_data.flags & UI_PIE_CANCELLED) {
+ if (event->type == block->pie_data.event && event->val == KM_RELEASE) {
+ menu->menuretval = UI_RETURN_OK;
+ }
+
+ return WM_UI_HANDLER_BREAK;
+ }
+
if (event->type == block->pie_data.event) {
if (event->val != KM_RELEASE) {
ui_handle_menu_button(C, event, menu);
More information about the Bf-blender-cvs
mailing list