quicksettings: port BrightnessItem away from dataengine

This commit is contained in:
Fushan Wen 2024-03-01 23:51:35 +08:00
parent 1799b03c02
commit f3f66a5d07

View file

@ -11,80 +11,22 @@ import QtQuick.Layouts 1.1
import org.kde.kirigami 2.20 as Kirigami import org.kde.kirigami 2.20 as Kirigami
import org.kde.plasma.core as PlasmaCore import org.kde.plasma.core as PlasmaCore
import org.kde.plasma.plasma5support 2.0 as P5Support
import org.kde.plasma.components 3.0 as PC3 import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.private.brightnesscontrolplugin as BC
Item { Item {
id: root id: root
implicitHeight: brightnessRow.implicitHeight implicitHeight: brightnessRow.implicitHeight
property int screenBrightness BC.ScreenBrightnessControl {
property bool disableBrightnessUpdate: true id: screenBrightnessControl
readonly property int maximumScreenBrightness: pmSource.data["PowerDevil"] ? pmSource.data["PowerDevil"]["Maximum Screen Brightness"] || 0 : 0
property QtObject updateScreenBrightnessJob
function updateBrightnessUI() {
if (updateScreenBrightnessJob)
return;
root.disableBrightnessUpdate = true;
root.screenBrightness = pmSource.data["PowerDevil"]["Screen Brightness"];
root.disableBrightnessUpdate = false;
}
onScreenBrightnessChanged: {
if (!brightnessSlider.pressed && !brightnessTimer.running) {
brightnessSlider.value = root.screenBrightness;
}
if (!disableBrightnessUpdate) {
var service = pmSource.serviceForSource("PowerDevil");
var operation = service.operationDescription("setBrightness");
operation.brightness = screenBrightness;
operation.silent = true; // don't show OSD
updateScreenBrightnessJob = service.startOperationCall(operation);
updateScreenBrightnessJob.finished.connect(function (job) {
root.updateBrightnessUI();
});
}
}
P5Support.DataSource {
id: pmSource
engine: "powermanagement"
connectedSources: ["PowerDevil"]
onSourceAdded: {
if (source === "PowerDevil") {
disconnectSource(source);
connectSource(source);
}
}
onDataChanged: root.updateBrightnessUI()
} }
// we want to smoothen the slider so it doesn't jump immediately after you let go
Timer {
id: brightnessTimer
interval: 500
onTriggered: {
brightnessSlider.value = root.screenBrightness;
}
}
// send brightness events a maximum of 5 times a second
Timer {
id: sendEventTimer
interval: 200
onTriggered: root.screenBrightness = brightnessSlider.value
}
RowLayout { RowLayout {
id: brightnessRow id: brightnessRow
spacing: Kirigami.Units.smallSpacing * 2 spacing: Kirigami.Units.smallSpacing * 2
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.top: parent.top anchors.top: parent.top
@ -102,25 +44,14 @@ Item {
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
from: 1 from: 1
to: root.maximumScreenBrightness to: screenBrightnessControl.brightnessMax
value: root.screenBrightness value: screenBrightnessControl.brightness
onMoved: {
if (!sendEventTimer.running) {
root.screenBrightness = value;
sendEventTimer.restart();
}
}
onPressedChanged: { onMoved: {
if (!pressed) { screenBrightnessControl.brightness = value;
brightnessTimer.restart();
} else {
brightnessTimer.stop();
}
} }
} }
Kirigami.Icon { Kirigami.Icon {
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
Layout.rightMargin: Kirigami.Units.smallSpacing Layout.rightMargin: Kirigami.Units.smallSpacing