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

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

Conversation

@emezeske

@emezeske emezeske commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Dragging a window's bottom-right corner resizer can snap the window instantly to its minimum size, if a CallOutBox happened to be open when the drag started. More generally, any component that captures state in mouseDown then runs its mouseDrag against stale state, because it received the drag without ever receiving the press.

That happens when a modal component consumes the mouse-down but dismisses itself asynchronously, as a CallOutBox with setDismissalMouseClicksAreAlwaysConsumed (true) does via postCommandMessage. The component under the mouse never gets the mouse-down, but 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 anyway. In the resizer case, ResizableCornerComponent::originalBounds was never set.

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