diff --git a/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp b/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp index 5ecbd9ce95..b1b6519fa1 100644 --- a/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp +++ b/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp @@ -156,50 +156,53 @@ void TooltipWindow::timerCallback() auto* newComp = mouseSource.isTouch() ? nullptr : mouseSource.getComponentUnderMouse(); - auto newTip = newComp != nullptr ? getTipFor (*newComp) : String(); - bool tipChanged = (newTip != lastTipUnderMouse || newComp != lastComponentUnderMouse); - lastComponentUnderMouse = newComp; - lastTipUnderMouse = newTip; + if (newComp == nullptr || getParentComponent() == nullptr || newComp->getPeer() == getPeer()) + { + auto newTip = newComp != nullptr ? getTipFor (*newComp) : String(); + bool tipChanged = (newTip != lastTipUnderMouse || newComp != lastComponentUnderMouse); + lastComponentUnderMouse = newComp; + lastTipUnderMouse = newTip; - auto clickCount = desktop.getMouseButtonClickCounter(); - auto wheelCount = desktop.getMouseWheelMoveCounter(); - bool mouseWasClicked = (clickCount > mouseClicks || wheelCount > mouseWheelMoves); - mouseClicks = clickCount; - mouseWheelMoves = wheelCount; + auto clickCount = desktop.getMouseButtonClickCounter(); + auto wheelCount = desktop.getMouseWheelMoveCounter(); + bool mouseWasClicked = (clickCount > mouseClicks || wheelCount > mouseWheelMoves); + mouseClicks = clickCount; + mouseWheelMoves = wheelCount; - auto mousePos = mouseSource.getScreenPosition(); - bool mouseMovedQuickly = mousePos.getDistanceFrom (lastMousePos) > 12; - lastMousePos = mousePos; + auto mousePos = mouseSource.getScreenPosition(); + bool mouseMovedQuickly = mousePos.getDistanceFrom (lastMousePos) > 12; + lastMousePos = mousePos; - if (tipChanged || mouseWasClicked || mouseMovedQuickly) - lastCompChangeTime = now; + if (tipChanged || mouseWasClicked || mouseMovedQuickly) + lastCompChangeTime = now; - if (isVisible() || now < lastHideTime + 500) - { - // if a tip is currently visible (or has just disappeared), update to a new one - // immediately if needed.. - if (newComp == nullptr || mouseWasClicked || newTip.isEmpty()) + if (isVisible() || now < lastHideTime + 500) { - if (isVisible()) + // if a tip is currently visible (or has just disappeared), update to a new one + // immediately if needed.. + if (newComp == nullptr || mouseWasClicked || newTip.isEmpty()) { - lastHideTime = now; - hideTip(); + if (isVisible()) + { + lastHideTime = now; + hideTip(); + } + } + else if (tipChanged) + { + displayTip (mousePos.roundToInt(), newTip); } } - else if (tipChanged) - { - displayTip (mousePos.roundToInt(), newTip); - } - } - else - { - // if there isn't currently a tip, but one is needed, only let it - // appear after a timeout.. - if (newTip.isNotEmpty() - && newTip != tipShowing - && now > lastCompChangeTime + (uint32) millisecondsBeforeTipAppears) + else { - displayTip (mousePos.roundToInt(), newTip); + // if there isn't currently a tip, but one is needed, only let it + // appear after a timeout.. + if (newTip.isNotEmpty() + && newTip != tipShowing + && now > lastCompChangeTime + (uint32) millisecondsBeforeTipAppears) + { + displayTip (mousePos.roundToInt(), newTip); + } } } }