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 } } } 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(); } } 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 diff --git a/src/plasma/framesvg.cpp b/src/plasma/framesvg.cpp index 48a477720..143ba1137 100644 --- a/src/plasma/framesvg.cpp +++ b/src/plasma/framesvg.cpp @@ -179,7 +179,7 @@ void FrameSvg::resizeFrame(const QSizeF &size) d->pendingFrameSize = size.toSize(); if (!d->repaintBlocked) { - d->updateFrameData(FrameSvgPrivate::UpdateFrame); + d->updateFrameData(Svg::d->lastModified, FrameSvgPrivate::UpdateFrame); } } diff --git a/src/plasma/plasma.h b/src/plasma/plasma.h index a2a5efd70..733fb2bc3 100644 --- a/src/plasma/plasma.h +++ b/src/plasma/plasma.h @@ -51,6 +51,16 @@ public: Q_ENUM(Constraint) Q_DECLARE_FLAGS(Constraints, Constraint) + /** + * This enumeration lists the various hints that an applet can pass to its + * constraint regarding the way that it is represented + */ + enum ConstraintHints { + NoHint = 0, + CanFillArea = 1 /**< The applet can fill the area and ignore constraint margins*/ + }; + Q_ENUM(ConstraintHints) + /** * The FormFactor enumeration describes how a Plasma::Applet should arrange * itself. The value is derived from the container managing the Applet diff --git a/src/scriptengines/qml/plasmoid/appletinterface.cpp b/src/scriptengines/qml/plasmoid/appletinterface.cpp index 634599a27..fc5a3dfcd 100644 --- a/src/scriptengines/qml/plasmoid/appletinterface.cpp +++ b/src/scriptengines/qml/plasmoid/appletinterface.cpp @@ -605,6 +605,16 @@ bool AppletInterface::hideOnWindowDeactivate() const return m_hideOnDeactivate; } +void AppletInterface::setConstraintHints(Plasma::Types::ConstraintHints hints) +{ + m_constraintHints = hints; +} + +Plasma::Types::ConstraintHints AppletInterface::constraintHints() const +{ + return m_constraintHints; +} + QKeySequence AppletInterface::globalShortcut() const { return applet()->globalShortcut(); diff --git a/src/scriptengines/qml/plasmoid/appletinterface.h b/src/scriptengines/qml/plasmoid/appletinterface.h index d16ecaff3..a375676c1 100644 --- a/src/scriptengines/qml/plasmoid/appletinterface.h +++ b/src/scriptengines/qml/plasmoid/appletinterface.h @@ -239,6 +239,11 @@ class AppletInterface : public PlasmaQuick::AppletQuickItem Q_PROPERTY(bool loading MEMBER m_loading NOTIFY isLoadingChanged) + /** + * When false the plasmoid will ignore the margins when contained in a panel + */ + Q_PROPERTY(Plasma::Types::ConstraintHints constraintHints READ constraintHints WRITE setConstraintHints NOTIFY constraintHintsChanged) + /** * The metadata of the applet. * @since 5.73 @@ -410,6 +415,8 @@ public: QString configurationRequiredReason() const; void setConfigurationRequiredReason(const QString &reason); + Plasma::Types::ConstraintHints constraintHints() const; + void setConstraintHints(Plasma::Types::ConstraintHints constraintHints); KPluginMetaData metaData() const; @@ -458,6 +465,7 @@ Q_SIGNALS: void associatedApplicationUrlsChanged(); void availableScreenRegionChanged(); void availableScreenRectChanged(); + void constraintHintsChanged(); void userConfiguringChanged(); void globalShortcutChanged(); @@ -508,6 +516,7 @@ private: friend class ContainmentInterface; //This is used by ContainmentInterface QPointF m_positionBeforeRemoval; + Plasma::Types::ConstraintHints m_constraintHints = Plasma::Types::ConstraintHints::NoHint; }; QML_DECLARE_TYPEINFO(AppletInterface, QML_HAS_ATTACHED_PROPERTIES)