Skip to content

Component: Avoid sending mouse-drag events to a component whose mouse-down was consumed by a modal component#1683

Open
emezeske wants to merge 1 commit into
juce-framework:developfrom
emezeske:pr/modal-blocked-mouse-drag
Open

Component: Avoid sending mouse-drag events to a component whose mouse-down was consumed by a modal component#1683
emezeske wants to merge 1 commit into
juce-framework:developfrom
emezeske:pr/modal-blocked-mouse-drag

Conversation

@emezeske

Copy link
Copy Markdown
Contributor

When a modal component consumes a mouse-down but dismisses itself asynchronously, the component under the mouse never receives the mouse-down, but it can still receive the rest of the drag. internalMouseDrag only checks whether the target is blocked at the time each drag event arrives, so once the modal component finishes going away mid-gesture, the drags get delivered to a component that never saw the press.

Any component that captures state in mouseDown then runs its mouseDrag with stale state. Where I hit this: a resizable window with a bottom-right corner resizer, plus an open CallOutBox with setDismissalMouseClicksAreAlwaysConsumed (true), which dismisses itself via postCommandMessage, i.e. asynchronously. Pressing the corner resizer dismisses the callout, then the drag events arrive at the ResizableCornerComponent, whose originalBounds was never set, and the window instantly snaps to its minimum size.

Repro:

  1. Make a window resizable with setResizable (true, true) and give it a constrainer with a minimum size
  2. Open a CallOutBox with setDismissalMouseClicksAreAlwaysConsumed (true)
  3. Click and drag the corner resizer
  4. The window snaps to its minimum size instead of ignoring the drag

internalMouseUp already checks mouseDownWasBlocked before delivering, so this just applies the same check to mouseDrag: if the press that started the gesture was swallowed by a modal component, the drags shouldn't be delivered either.

@emezeske
emezeske marked this pull request as ready for review July 12, 2026 23:10
@juce-push-bot

Copy link
Copy Markdown
Collaborator

This pull request has been mentioned on The JUCE Forum. There might be relevant details there:

https://forum.juce.com/t/pr-avoid-sending-mouse-drag-events-to-a-component-whose-mouse-down-was-consumed-by-a-modal-component/69143/1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants