Skip to content

QMenu / QPopupProxy close outright when an ancestor enters fullscreen (gap left open by #18474) #18512

Description

@MILLERMARRU

Following up on #18474 (the QDialog fix for focus escaping into a fullscreen-detached child). That PR's own "Not verified" section says explicitly:

QMenu / QPopupProxy. Unchanged by this PR and still exhibits its own, different fullscreen failure (the popup closes outright). Not fixed, not attempted.

I couldn't find a separate issue tracking that specific symptom, so filing it here so it doesn't get lost now that #18474 merged and closed #13395 for the QDialog side.

I read through use-fullscreen.js to get a sense of the likely mechanism, since the PR doesn't spell it out (it explicitly didn't attempt this one). setFullscreen() does:

proxy.$el.replaceWith(fullscreenFillerNode)
document.body.append(proxy.$el)

which detaches the component's root node from the DOM and re-appends it under <body>. If a QMenu or QPopupProxy is open and anchored to (or nested inside) the element going fullscreen, that detach+reattach looks like exactly the kind of DOM mutation that would trip a "click outside" / anchor-visibility check and close the popup. I haven't traced QMenu's own close logic far enough to point at the exact line responsible, so treat that part as a hypothesis, not a confirmed root cause the way the QDialog fix had.

Repro: open a QSelect (or any QMenu-based component) inside a component that then goes fullscreen via useFullscreen() / the fullscreen mixin while the menu is open. The menu closes as soon as fullscreen is entered, unlike the dialog case which #18474 now keeps working correctly.

I didn't build my own MRE for this one. If it helps, I'm happy to adapt evnchn's self-verdicting HTML repro style from #18474 to this case.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions