Index: menu/m_input.c =================================================================== --- menu/m_input.c (revision 19638) +++ menu/m_input.c (working copy) @@ -352,7 +352,7 @@ sp = mn.menuStackPos; - while (sp > 0) { + while (sp > 0 && !clickedInside) { menu_t *menu = mn.menuStack[--sp]; menuNode_t *execute_node = NULL; for (node = menu->firstNode; node; node = node->next) { @@ -478,8 +478,9 @@ { int mouseOver; int sp = mn.menuStackPos; + qboolean clickedInside = qfalse; - while (sp > 0) { + while (sp > 0 && !clickedInside) { menu_t *menu = mn.menuStack[--sp]; menuNode_t *node; @@ -493,6 +494,8 @@ if (!mouseOver) continue; + clickedInside = qtrue; + /* found a node -> do actions */ switch (node->type) { case MN_CONTAINER: @@ -535,16 +538,19 @@ menuNode_t *node; menu_t *menu; int sp, mouseOver; + qboolean clickedInside = qfalse; sp = mn.menuStackPos; - while (sp > 0) { + while (sp > 0 && !clickedInside) { menu = mn.menuStack[--sp]; for (node = menu->firstNode; node; node = node->next) { /* no middle click for this node defined */ if (!node->mclick) continue; + clickedInside = qtrue; + /* check whether mouse if over this node */ mouseOver = MN_CheckNodeZone(node, x, y); if (!mouseOver) @@ -586,10 +592,11 @@ menuNode_t *node; menu_t *menu; int sp, mouseOver; + qboolean wheelInside = qfalse; sp = mn.menuStackPos; - while (sp > 0) { + while (sp > 0 && !wheelInside) { menu = mn.menuStack[--sp]; for (node = menu->firstNode; node; node = node->next) { /* no middle click for this node defined */ @@ -602,6 +609,8 @@ if (!mouseOver) continue; + wheelInside = qtrue; + /* found a node -> do actions */ switch (node->type) { case MN_MAP: