[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57563] trunk/blender/source/blender/ editors/interface/interface_handlers.c: alternate fix for r57562.
Campbell Barton
ideasman42 at gmail.com
Wed Jun 19 08:31:38 CEST 2013
Revision: 57563
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57563
Author: campbellbarton
Date: 2013-06-19 06:31:37 +0000 (Wed, 19 Jun 2013)
Log Message:
-----------
alternate fix for r57562. check if the mouse is over the parent menu.
Revision Links:
--------------
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57562
Modified Paths:
--------------
trunk/blender/source/blender/editors/interface/interface_handlers.c
Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c 2013-06-19 06:01:38 UTC (rev 57562)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c 2013-06-19 06:31:37 UTC (rev 57563)
@@ -6790,7 +6790,8 @@
return retval;
}
-static int ui_handle_menu_event(bContext *C, const wmEvent *event, uiPopupBlockHandle *menu, int level)
+static int ui_handle_menu_event(bContext *C, const wmEvent *event, uiPopupBlockHandle *menu,
+ int level, const bool is_parent_inside)
{
ARegion *ar;
uiBlock *block;
@@ -7131,7 +7132,7 @@
menu->menuretval = UI_RETURN_CANCEL | UI_RETURN_POPUP_OK;
}
else {
- ui_mouse_motion_towards_check(block, menu, &event->x, (level == 0));
+ ui_mouse_motion_towards_check(block, menu, &event->x, is_parent_inside == false);
/* check mouse moving outside of the menu */
if (inside == 0 && (block->flag & UI_BLOCK_MOVEMOUSE_QUIT)) {
@@ -7234,7 +7235,8 @@
return WM_UI_HANDLER_BREAK;
}
-static int ui_handle_menus_recursive(bContext *C, const wmEvent *event, uiPopupBlockHandle *menu, int level)
+static int ui_handle_menus_recursive(bContext *C, const wmEvent *event, uiPopupBlockHandle *menu,
+ int level, const bool is_parent_inside)
{
uiBut *but;
uiHandleButtonData *data;
@@ -7247,9 +7249,22 @@
data = (but) ? but->active : NULL;
submenu = (data) ? data->menu : NULL;
- if (submenu)
- retval = ui_handle_menus_recursive(C, event, submenu, level + 1);
+ if (submenu) {
+ bool inside = false;
+ if (is_parent_inside == false) {
+ int mx, my;
+ uiBlock *block = menu->region->uiblocks.first;
+
+ mx = event->x;
+ my = event->y;
+ ui_window_to_block(menu->region, block, &mx, &my);
+ inside = BLI_rctf_isect_pt(&block->rect, mx, my);
+ }
+
+ retval = ui_handle_menus_recursive(C, event, submenu, level + 1, is_parent_inside || inside);
+ }
+
/* now handle events for our own menu */
if (retval == WM_UI_HANDLER_CONTINUE || event->type == TIMER) {
const bool do_but_search = (but && ELEM(but->type, SEARCH_MENU, SEARCH_MENU_UNLINK));
@@ -7276,7 +7291,7 @@
}
}
else {
- retval = ui_handle_menu_event(C, event, menu, level);
+ retval = ui_handle_menu_event(C, event, menu, level, is_parent_inside);
}
}
@@ -7372,7 +7387,7 @@
/* 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);
+ retval = ui_handle_menus_recursive(C, event, data->menu, 0, false);
/* handle events for the activated button */
if ((data->menu && (retval == WM_UI_HANDLER_CONTINUE)) ||
@@ -7418,7 +7433,7 @@
retval = WM_UI_HANDLER_CONTINUE;
}
- ui_handle_menus_recursive(C, event, menu, 0);
+ ui_handle_menus_recursive(C, event, menu, 0, false);
/* free if done, does not free handle itself */
if (menu->menuretval) {
More information about the Bf-blender-cvs
mailing list