From 086a710478592bc4c93b90c28d4ec88e8ae8b86f Mon Sep 17 00:00:00 2001 From: Chris Holland Date: Fri, 28 Aug 2020 14:24:19 -0400 Subject: [PATCH 1/3] ComboBox3.contentItem must be a QQuickTextInput to fix autocomplete See QQuickComboBoxPrivate::updateEditText() https://github.com/qt/qtquickcontrols2/blob/dev/src/quicktemplates2/qquickcombobox.cpp#L426 By removing the MouseArea previously in the contentItem, we lose the ability to press+hold+drag to select a drop down item. The wheel events still work, as they are captured by the MouseArea in the background component. The combobox previously closed the popup when releasing the click to open the dropdown when editable=true. BUG: 424076 --- .../plasmacomponents3/ComboBox.qml | 148 ++++++------------ 1 file changed, 45 insertions(+), 103 deletions(-) diff --git a/src/declarativeimports/plasmacomponents3/ComboBox.qml b/src/declarativeimports/plasmacomponents3/ComboBox.qml index 70b4c85cb..6661d4a98 100644 --- a/src/declarativeimports/plasmacomponents3/ComboBox.qml +++ b/src/declarativeimports/plasmacomponents3/ComboBox.qml @@ -32,7 +32,7 @@ T.ComboBox { delegate: ItemDelegate { width: control.popup.width text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData - highlighted: mouseArea.pressed ? listView.currentIndex == index : control.highlightedIndex == index + highlighted: control.highlightedIndex == index property bool separatorVisible: false } @@ -51,113 +51,55 @@ T.ComboBox { elementId: "down-arrow" } -// contentItem: Label { -// text: control.displayText -// font: control.font -// color: theme.buttonTextColor -// horizontalAlignment: Text.AlignLeft -// verticalAlignment: Text.AlignVCenter -// elide: Text.ElideRight -// } - contentItem: MouseArea { - id: mouseArea - anchors.fill: parent - acceptedButtons: Qt.LeftButton - preventStealing: true - property int indexUnderMouse: -1 - onWheel: { - if (wheel.pixelDelta.y < 0 || wheel.angleDelta.y < 0) { - control.currentIndex = Math.min(control.currentIndex + 1, delegateModel.count -1); - } else { - control.currentIndex = Math.max(control.currentIndex - 1, 0); - } - control.activated(control.currentIndex); + contentItem: T.TextField { + id: textField + padding: 0 + anchors { + fill:parent + leftMargin: control.leftPadding + rightMargin: control.rightPadding + topMargin: control.topPadding + bottomMargin: control.bottomPadding } - onPressed: { - indexUnderMouse = -1; - listView.currentIndex = control.highlightedIndex - control.down = true; - control.pressed = true; - control.popup.visible = !control.popup.visible; - } - onReleased: { - if (!containsMouse) { - control.down = false; - control.pressed = false; - control.popup.visible = false; - } - if (indexUnderMouse > -1) { - control.currentIndex = indexUnderMouse; + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + + readOnly: control.down || !control.hasOwnProperty("editable") || !control.editable + inputMethodHints: control.inputMethodHints + validator: control.validator + + // Work around Qt bug where NativeRendering breaks for non-integer scale factors + // https://bugreports.qt.io/browse/QTBUG-70481 + renderType: Screen.devicePixelRatio % 1 !== 0 ? Text.QtRendering : Text.NativeRendering + color: PlasmaCore.ColorScope.textColor + selectionColor: Kirigami.Theme.highlightColor + selectedTextColor: Kirigami.Theme.highlightedTextColor + + selectByMouse: !Kirigami.Settings.tabletMode + cursorDelegate: Kirigami.Settings.tabletMode ? mobileCursor : undefined + + font: control.font + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + opacity: control.enabled ? 1 : 0.3 + onFocusChanged: { + if (focus) { + MobileTextSelection.MobileTextActionsToolBar.controlRoot = textField; } } - onCanceled: { - control.down = false; - control.pressed = false; - } - onPositionChanged: { - var pos = listView.mapFromItem(this, mouse.x, mouse.y); - indexUnderMouse = listView.indexAt(pos.x, pos.y); - listView.currentIndex = indexUnderMouse; - controlRoot.activated(indexUnderMouse); - } - Connections { - target: popup - onClosed: { - control.down = false; - control.pressed = false; - } - } - T.TextField { - id: textField - padding: 0 - anchors { - fill:parent - leftMargin: control.leftPadding - rightMargin: control.rightPadding - topMargin: control.topPadding - bottomMargin: control.bottomPadding - } - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - - readOnly: control.down || !control.hasOwnProperty("editable") || !control.editable - inputMethodHints: control.inputMethodHints - validator: control.validator - - // Work around Qt bug where NativeRendering breaks for non-integer scale factors - // https://bugreports.qt.io/browse/QTBUG-70481 - renderType: Screen.devicePixelRatio % 1 !== 0 ? Text.QtRendering : Text.NativeRendering - color: PlasmaCore.ColorScope.textColor - selectionColor: Kirigami.Theme.highlightColor - selectedTextColor: Kirigami.Theme.highlightedTextColor - - selectByMouse: !Kirigami.Settings.tabletMode - cursorDelegate: Kirigami.Settings.tabletMode ? mobileCursor : undefined - - font: control.font - horizontalAlignment: Text.AlignLeft - verticalAlignment: Text.AlignVCenter - opacity: control.enabled ? 1 : 0.3 - onFocusChanged: { - if (focus) { - MobileTextSelection.MobileTextActionsToolBar.controlRoot = textField; - } - } - - onTextChanged: MobileTextSelection.MobileTextActionsToolBar.shouldBeVisible = false; - onPressed: MobileTextSelection.MobileTextActionsToolBar.shouldBeVisible = true; - - onPressAndHold: { - if (!Kirigami.Settings.tabletMode) { - return; - } - forceActiveFocus(); - cursorPosition = positionAt(event.x, event.y); - selectWord(); + onTextChanged: MobileTextSelection.MobileTextActionsToolBar.shouldBeVisible = false; + onPressed: MobileTextSelection.MobileTextActionsToolBar.shouldBeVisible = true; + + onPressAndHold: { + if (!Kirigami.Settings.tabletMode) { + return; } + forceActiveFocus(); + cursorPosition = positionAt(event.x, event.y); + selectWord(); } } From e0e7840a0307deaee7a0b63f341973f8e3508873 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Thu, 8 Oct 2020 16:35:39 +0200 Subject: [PATCH 2/3] BusyIndicator: Do not rotate when invisible It seems like the "visible" property is catching there is the wrong one and would still rotate while invisible. CCBUG: 426746 --- src/declarativeimports/plasmacomponents3/BusyIndicator.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/declarativeimports/plasmacomponents3/BusyIndicator.qml b/src/declarativeimports/plasmacomponents3/BusyIndicator.qml index d081fc43d..ec4ccaf13 100644 --- a/src/declarativeimports/plasmacomponents3/BusyIndicator.qml +++ b/src/declarativeimports/plasmacomponents3/BusyIndicator.qml @@ -25,6 +25,7 @@ T.BusyIndicator { padding: 0 contentItem: Item { + id: baseItem /* implicitWidth and implicitHeight won't work unless they come * from a child of the contentItem. No idea why. */ @@ -61,7 +62,7 @@ T.BusyIndicator { to: 360 duration: 2000 loops: Animation.Infinite - running: visible + running: control.running || baseItem.opacity > 0 } } } From 21b27e90bf938bc66b555f108c8114d74a678bf6 Mon Sep 17 00:00:00 2001 From: Nate Graham Date: Wed, 7 Oct 2020 09:01:30 -0600 Subject: [PATCH 3/3] [ExpandableListItem] Make colored text 100% opaque Otherwise it can be difficult to see, especially with dark backgrounds. Also, let's set the opacity directly rather than using the enabled property to approximate it. BUG: 427171 FIXED-IN: 5.76 --- .../plasmaextracomponents/qml/ExpandableListItem.qml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml b/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml index f9acdfd8b..0bdb579ce 100644 --- a/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml +++ b/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml @@ -421,10 +421,12 @@ Item { PlasmaComponents3.Label { id: listItemSubtitle - enabled: false visible: text.length > 0 font: PlasmaCore.Theme.smallestFont + // Otherwise colored text can be hard to see + opacity: color === PlasmaCore.Theme.textColor ? 0.7 : 1.0 + Layout.fillWidth: true textFormat: listItem.allowStyledText ? Text.StyledText : Text.PlainText