fix(qt): Shift and Ctrl work on every select-mode click target, not only the row body
Excel-style selection (750c59034) read the modifiers only where a row BODY took the click. Every other target a select-mode surface draws dropped them, so a Shift-click there was a plain toggle: - the track row's checkbox disc passed Qt.NoModifier; - QbzCheckbox and SelectCheck emitted toggled() with no argument, so the Library album rows, the local album rows and the folder rows, which already expected `function (mods)`, received undefined; - AlbumCard emitted selectToggled() with no argument, and the paged local albums grid (299dcde5b) spelled the drop out as Qt.NoModifier. Some targets were never selection targets at all: in select mode the artist and album names on a track row, the artist and label on a Library album row and the artist line of an album card still navigated, leaving the page and the selection mid-gesture. The row links stand down in select mode so the click reaches the row body with its modifiers, and the card's artist line toggles like its artwork and title. A hover-only tooltip on the pulled but cached glyph no longer eats the row's click. Reproduced on the release binary in a nested KWin with injected input: in Local Library Tracks, the checkbox discs of rows 1, Shift 4 and Ctrl 6 selected 3 rows; the same clicks on the row bodies selected 5. No list view, Flickable or wheel code changes; tst_wheel passes unchanged. tst_multi_select clicks each of these targets through the real TrackRow, AlbumListRow, AlbumCard, QbzCheckbox and SelectCheck. cc
This commit is contained in:
12 files changed
+360
-23
No files matched your search
@@ -593,11 +593,14 @@ Item {
|
||||
selected: root.nativeActive
|
||||
? cardCell.slot.selected === true
|
||||
: root.selected[cardCell.slot.id] === true
|
||||
onSelectToggled: {
|
||||
// The card's modifiers, straight through: the
|
||||
// paged grid (299dcde5b) passed NoModifier here,
|
||||
// so a Shift-click on a card was a toggle.
|
||||
onSelectToggled: function (mods) {
|
||||
if (root.nativeActive)
|
||||
root.nativeToggleSelect(cardCell.slot.nativeIndex, Qt.NoModifier)
|
||||
root.nativeToggleSelect(cardCell.slot.nativeIndex, mods)
|
||||
else
|
||||
root.toggleSelect(cardCell.slot.id, Qt.NoModifier)
|
||||
root.toggleSelect(cardCell.slot.id, mods)
|
||||
}
|
||||
// Non-select mode only — the card routes a
|
||||
// select-mode click to `selectToggled` and never
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
// Slint declares this inline inside TreeRow; the Qt port also needs it on
|
||||
// the album cards and the track rows in multi-select, so it is its own file
|
||||
// (three call sites, one shape).
|
||||
//
|
||||
// `toggled` carries the click's modifiers: this disc IS a select-mode click
|
||||
// target, and one that dropped them turned every Shift-click on it into a
|
||||
// plain toggle (controls/SelectionModel.qml).
|
||||
|
||||
import QtQuick
|
||||
import com.blitzfc.qbz
|
||||
@@ -16,7 +20,7 @@ Rectangle {
|
||||
property bool on: false
|
||||
property bool partial: false
|
||||
property int diameter: 13
|
||||
signal toggled()
|
||||
signal toggled(int modifiers)
|
||||
|
||||
QbzTheme { id: theme }
|
||||
|
||||
@@ -52,6 +56,6 @@ Rectangle {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: root.toggled()
|
||||
onClicked: function (mouse) { root.toggled(mouse.modifiers) }
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user