fix(qt): wheel-lock sweep across plain-Item modal overlays

Plain-Item overlays get no modal grab, so a MouseArea that swallows
presses still lets the wheel scroll the page underneath (the rule and
its wording live in DiscoverConfigModal.qml). Every scrim and panel
swallow across the modal set now accepts the wheel; the modal Popups
(TrackInfo, CastPicker, AlbumInfo, QconnectDev, LocalMediaInfo) already
had the Overlay grab, and CoverLightbox — a non-modal Popup — gets its
own.

cc
This commit is contained in:
vicrodh committed 2026-08-31 11:50:32 -06:00
1 parent bb3a971c0c
commit 69e5066d07
23 files changed
+190 -28

No files matched your search

+7 -1
View File
@@ -52,6 +52,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: if (doc.applying !== true) QbzDiscMeta.close()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -66,7 +68,11 @@ Item {
border.color: theme.borderSubtle
clip: true
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
// ---- Header ---------------------------------------------------
Item {
+14 -2
View File
@@ -138,6 +138,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzFolderEdit.createClose()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -152,7 +154,11 @@ Item {
border.color: theme.borderSubtle
// FIRST child: swallows clicks so they never reach the scrim.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: createCol
@@ -280,6 +286,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzFolderEdit.editClose()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -293,7 +301,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: editCol
@@ -28,6 +28,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzLink.close()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -41,7 +43,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: panel
+21 -3
View File
@@ -89,6 +89,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzMyQbz.createClose()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
Rectangle {
@@ -101,7 +103,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: createCol
@@ -262,6 +268,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzMyQbz.editClose()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
Rectangle {
@@ -274,7 +282,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: editCol
@@ -428,6 +440,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzMyQbz.mixClose()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
Rectangle {
@@ -440,7 +454,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: mixCol
@@ -68,6 +68,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: root.cancel()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -92,7 +94,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: content
@@ -168,6 +168,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzPlaylistEdit.closeCreate()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -182,7 +184,11 @@ Item {
border.color: theme.borderSubtle
// FIRST child: swallows clicks so they never reach the scrim.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: col
@@ -171,6 +171,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzPlaylistEdit.close()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -185,7 +187,11 @@ Item {
border.color: theme.borderSubtle
// FIRST child: swallows clicks so they never reach the scrim.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: col
@@ -90,6 +90,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzPlaylistImport.close()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -106,7 +108,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
// Swallow clicks so they never reach the scrim.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
readonly property int contentWidth: card.width - 48
@@ -129,6 +129,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: root._cancel()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -158,7 +160,11 @@ Item {
// Swallow clicks so they never reach the scrim (the Slint's empty
// panel TouchArea, :1030).
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: panelCol
@@ -40,7 +40,12 @@ Item {
Rectangle {
anchors.fill: parent
color: "#bf000000"
MouseArea { anchors.fill: parent; onClicked: QbzLocal.ripPanel(false) }
MouseArea {
anchors.fill: parent
onClicked: QbzLocal.ripPanel(false)
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
Rectangle {
@@ -54,7 +59,11 @@ Item {
border.color: theme.borderSubtle
clip: true
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
// ---- Header -----------------------------------------------------
Item {
+11 -2
View File
@@ -117,7 +117,12 @@ Item {
Rectangle {
anchors.fill: parent
color: "#bf000000"
MouseArea { anchors.fill: parent; onClicked: QbzLocal.ripWizardClose() }
MouseArea {
anchors.fill: parent
onClicked: QbzLocal.ripWizardClose()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
Rectangle {
@@ -131,7 +136,11 @@ Item {
border.color: theme.borderSubtle
clip: true
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
// ---- Header + step dots ----------------------------------------
Item {
@@ -288,6 +288,8 @@ Item {
anchors.fill: parent
enabled: !root.busy
onClicked: root.closeEditor()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -302,7 +304,11 @@ Item {
border.color: theme.borderStrong
clip: true
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Item {
id: header
@@ -78,6 +78,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: if (!root.applying) QbzTrackReplace.close()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -93,7 +95,11 @@ Item {
clip: true
// Swallow clicks so they never reach the scrim.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: panel
@@ -163,6 +163,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzDacWizard.close()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -178,7 +180,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
// Swallow clicks so they never reach the scrim.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
readonly property int contentWidth: card.width - 48
@@ -96,6 +96,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: root.close()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -121,7 +123,11 @@ Item {
border.color: theme.borderSubtle
// Swallow clicks so they never reach the scrim.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
id: body
+7 -1
View File
@@ -577,6 +577,8 @@ Rectangle {
MouseArea {
anchors.fill: parent
onClicked: root.textModalOpen = false
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Rectangle {
anchors.centerIn: parent
@@ -586,7 +588,11 @@ Rectangle {
color: theme.surfaceCard
border.width: 1
border.color: theme.borderSubtle
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
anchors.fill: parent
anchors.margins: 24
@@ -131,6 +131,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: root._close()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -160,7 +162,11 @@ Item {
border.color: theme.borderSubtle
// FIRST child: swallows clicks so they never reach the scrim.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
// --- Header: title + "N modified" badge + X (Slint :208-261) --
// NO keyboard icon here — the editor header has none (trap 6).
@@ -127,6 +127,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: root._close()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -159,7 +161,11 @@ Item {
// FIRST child: swallows clicks so they never reach the scrim
// (the Slint's empty panel TouchArea, :137).
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
// --- Header: icon + title + X (Slint :143-184) ---------------
Item {
+7 -1
View File
@@ -83,6 +83,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzShell.logClose()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -109,7 +111,11 @@ Item {
border.color: theme.borderSubtle
// Swallow clicks so they never reach the closing backdrop.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
// ANCHORED, not a Column. The body is the only stretch row and its
// height depends on which optional rows are mounted (the advanced
+7 -1
View File
@@ -45,6 +45,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: root.open = false
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -69,7 +71,11 @@ Item {
border.color: theme.borderSubtle
// Swallow clicks so the scrim below does not close the modal.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Column {
anchors.fill: parent
+7 -1
View File
@@ -78,6 +78,8 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: QbzAbout.whatsNewClose()
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
@@ -101,7 +103,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Item {
id: stack
@@ -94,7 +94,11 @@ Item {
// No click-through close. Unlike the other modals this one is the
// first thing a new user sees and says what is not promised; a stray
// click on the scrim should not dismiss it.
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
}
Rectangle {
@@ -115,7 +119,11 @@ Item {
border.width: 1
border.color: theme.borderSubtle
MouseArea { anchors.fill: parent }
MouseArea {
anchors.fill: parent
// Wheel-lock (the DiscoverConfigModal rule).
onWheel: function (wheel) { wheel.accepted = true }
}
Item {
anchors.fill: parent
@@ -56,6 +56,10 @@ Popup {
MouseArea {
anchors.fill: parent
onClicked: root.close()
// Wheel-lock (the DiscoverConfigModal rule): the Popup is not
// `modal`, so nothing grabs the wheel for it — without this the
// page kept scrolling behind the lightbox.
onWheel: function (wheel) { wheel.accepted = true }
}
// The 90% viewport the artwork is fitted into, so it never touches