[Bf-blender-cvs] [6026295] master: Clicking outside menus wasn't closing when opened from non menu popups
Campbell Barton
noreply at git.blender.org
Thu Apr 3 22:36:12 CEST 2014
Commit: 602629502ca4d307b4791fd3d29e1f7fd4c55bdb
Author: Campbell Barton
Date: Fri Apr 4 07:32:31 2014 +1100
https://developer.blender.org/rB602629502ca4d307b4791fd3d29e1f7fd4c55bdb
Clicking outside menus wasn't closing when opened from non menu popups
===================================================================
M source/blender/editors/interface/interface_handlers.c
===================================================================
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 9568f90..c69472b 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -7704,8 +7704,9 @@ static int ui_handle_menu_button(bContext *C, const wmEvent *event, uiPopupBlock
return retval;
}
-static int ui_handle_menu_event(bContext *C, const wmEvent *event, uiPopupBlockHandle *menu,
- int level, const bool is_parent_inside, const bool is_floating)
+static int ui_handle_menu_event(
+ bContext *C, const wmEvent *event, uiPopupBlockHandle *menu,
+ int level, const bool is_parent_inside, const bool is_parent_menu, const bool is_floating)
{
ARegion *ar;
uiBlock *block;
@@ -8054,7 +8055,7 @@ static int ui_handle_menu_event(bContext *C, const wmEvent *event, uiPopupBlockH
if (ELEM3(event->type, LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE) &&
ELEM(event->val, KM_PRESS, KM_DBL_CLICK))
{
- if ((level == 0) && (U.uiflag & USER_MENUOPENAUTO) == 0) {
+ if ((is_parent_menu == false) && (U.uiflag & USER_MENUOPENAUTO) == 0) {
/* for root menus, allow clicking to close */
if (block->flag & (UI_BLOCK_OUT_1))
menu->menuretval = UI_RETURN_OK;
@@ -8206,8 +8207,9 @@ static int ui_handle_menu_return_submenu(bContext *C, const wmEvent *event, uiPo
return WM_UI_HANDLER_BREAK;
}
-static int ui_handle_menus_recursive(bContext *C, const wmEvent *event, uiPopupBlockHandle *menu,
- int level, const bool is_parent_inside, const bool is_floating)
+static int ui_handle_menus_recursive(
+ bContext *C, const wmEvent *event, uiPopupBlockHandle *menu,
+ int level, const bool is_parent_inside, const bool is_parent_menu, const bool is_floating)
{
uiBut *but;
uiHandleButtonData *data;
@@ -8221,11 +8223,12 @@ static int ui_handle_menus_recursive(bContext *C, const wmEvent *event, uiPopupB
submenu = (data) ? data->menu : NULL;
if (submenu) {
+ uiBlock *block = menu->region->uiblocks.first;
+ const bool is_menu = ui_block_is_menu(block);
bool inside = false;
if (is_parent_inside == false) {
int mx, my;
- uiBlock *block = menu->region->uiblocks.first;
mx = event->x;
my = event->y;
@@ -8233,7 +8236,7 @@ static int ui_handle_menus_recursive(bContext *C, const wmEvent *event, uiPopupB
inside = BLI_rctf_isect_pt(&block->rect, mx, my);
}
- retval = ui_handle_menus_recursive(C, event, submenu, level + 1, is_parent_inside || inside, false);
+ retval = ui_handle_menus_recursive(C, event, submenu, level + 1, is_parent_inside || inside, is_menu, false);
}
/* now handle events for our own menu */
@@ -8266,7 +8269,7 @@ static int ui_handle_menus_recursive(bContext *C, const wmEvent *event, uiPopupB
}
}
else {
- retval = ui_handle_menu_event(C, event, menu, level, is_parent_inside, is_floating);
+ retval = ui_handle_menu_event(C, event, menu, level, is_parent_inside, is_parent_menu, is_floating);
}
}
@@ -8363,7 +8366,7 @@ static int ui_handler_region_menu(bContext *C, const wmEvent *event, void *UNUSE
/* handle events for menus and their buttons recursively,
* this will handle events from the top to the bottom menu */
if (data->menu)
- retval = ui_handle_menus_recursive(C, event, data->menu, 0, false, false);
+ retval = ui_handle_menus_recursive(C, event, data->menu, 0, false, false, false);
/* handle events for the activated button */
if ((data->menu && (retval == WM_UI_HANDLER_CONTINUE)) ||
@@ -8409,7 +8412,7 @@ static int ui_handler_popup(bContext *C, const wmEvent *event, void *userdata)
retval = WM_UI_HANDLER_CONTINUE;
}
- ui_handle_menus_recursive(C, event, menu, 0, false, true);
+ ui_handle_menus_recursive(C, event, menu, 0, false, false, true);
/* free if done, does not free handle itself */
if (menu->menuretval) {
More information about the Bf-blender-cvs
mailing list