mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
PopupMenu: Add mouse movement timeout back in
This reimplements similar functionality to that removed in
d39789b021.
Unlike the previous implementation, this version will still wait for the
mouse to move over the menu before the countdown timer is allowed to
start. This should avoid the situation where menu items are accidentally
triggered on mouse-up, after a menu opens under the pointer in response
to a mouse-down.
This commit is contained in:
parent
6091dc8807
commit
ac2c863ffa
1 changed files with 15 additions and 9 deletions
|
|
@ -1423,7 +1423,7 @@ public:
|
|||
private:
|
||||
Point<int> lastMousePos;
|
||||
double scrollAcceleration = 0;
|
||||
uint32 lastScrollTime;
|
||||
uint32 lastScrollTime = 0, lastMoveTime = 0;
|
||||
bool isDown = false;
|
||||
|
||||
// Although most mouse movements can be handled inside mouse event callbacks, scrolling of menus
|
||||
|
|
@ -1454,7 +1454,7 @@ private:
|
|||
window.showSubMenuFor (window.currentChild);
|
||||
}
|
||||
|
||||
highlightItemUnderMouse (globalMousePos, localMousePos);
|
||||
highlightItemUnderMouse (globalMousePos, localMousePos, timeNow);
|
||||
|
||||
const bool overScrollArea = scrollIfNecessary (localMousePos, timeNow);
|
||||
const bool isOverAny = window.isOverAnyMenu();
|
||||
|
|
@ -1498,19 +1498,25 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
void highlightItemUnderMouse (Point<int> globalMousePos, Point<int> localMousePos)
|
||||
void highlightItemUnderMouse (Point<int> globalMousePos, Point<int> localMousePos, uint32 timeNow)
|
||||
{
|
||||
const auto mouseTimedOut = lastMoveTime != 0 && 350 < (timeNow - lastMoveTime);
|
||||
const auto mouseHasMoved = 2 < lastMousePos.getDistanceFrom (globalMousePos);
|
||||
|
||||
if (! mouseHasMoved)
|
||||
return;
|
||||
|
||||
const auto isMouseOver = window.reallyContains (localMousePos, true);
|
||||
|
||||
if (isMouseOver)
|
||||
if (mouseHasMoved && isMouseOver)
|
||||
{
|
||||
window.disableMouseMoves = false;
|
||||
lastMoveTime = timeNow;
|
||||
}
|
||||
|
||||
if (window.disableMouseMoves || (window.activeSubMenu != nullptr && window.activeSubMenu->isOverChildren()))
|
||||
if (! mouseHasMoved && ! mouseTimedOut)
|
||||
return;
|
||||
|
||||
if (window.disableMouseMoves)
|
||||
return;
|
||||
|
||||
if (window.activeSubMenu != nullptr && window.activeSubMenu->isOverChildren())
|
||||
return;
|
||||
|
||||
const auto isMovingTowardsMenu = isMouseOver
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue