diff --git a/Modules/Bar/Bar.qml b/Modules/Bar/Bar.qml index 1e588dc..4d7ae42 100644 --- a/Modules/Bar/Bar.qml +++ b/Modules/Bar/Bar.qml @@ -81,12 +81,22 @@ Variants { anchors.verticalCenter: bar.verticalCenter spacing: Style.marginSmall * scaling - Tray { + // Screen Recording Indicator + NIconButton { + id: screenRecordingIndicator + icon: "videocam" + tooltipText: "Screen Recording Active" + sizeMultiplier: 0.8 + showBorder: false + showFilled: ScreenRecorder.isRecording + visible: ScreenRecorder.isRecording anchors.verticalCenter: parent.verticalCenter + onClicked: { + ScreenRecorder.toggleRecording() + } } - // TODO: Notification Icon - NotificationHistory { + Tray { anchors.verticalCenter: parent.verticalCenter } diff --git a/Modules/SidePanel/Cards/PowerProfilesCard.qml b/Modules/SidePanel/Cards/PowerProfilesCard.qml index 6b74b24..4f3c141 100644 --- a/Modules/SidePanel/Cards/PowerProfilesCard.qml +++ b/Modules/SidePanel/Cards/PowerProfilesCard.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import Quickshell +import Quickshell.Services.UPower import qs.Services import qs.Widgets @@ -10,6 +11,10 @@ NBox { Layout.fillWidth: true Layout.preferredWidth: 1 implicitHeight: powerRow.implicitHeight + Style.marginMedium * 2 * scaling + + // PowerProfiles service + property var powerProfiles: PowerProfiles + RowLayout { id: powerRow anchors.fill: parent @@ -21,23 +26,33 @@ NBox { // Performance NIconButton { icon: "speed" + enabled: powerProfiles.hasPerformanceProfile + opacity: enabled ? 1.0 : 0.3 + showFilled: powerProfiles.profile === PowerProfile.Performance + showBorder: powerProfiles.profile !== PowerProfile.Performance onClicked: { - - /* TODO: hook to power profile */ } + if (powerProfiles.hasPerformanceProfile) { + powerProfiles.profile = PowerProfile.Performance + } + } } // Balanced NIconButton { icon: "balance" + showFilled: powerProfiles.profile === PowerProfile.Balanced + showBorder: powerProfiles.profile !== PowerProfile.Balanced onClicked: { - - /* TODO: hook to power profile */ } + powerProfiles.profile = PowerProfile.Balanced + } } // Eco NIconButton { icon: "eco" + showFilled: powerProfiles.profile === PowerProfile.PowerSaver + showBorder: powerProfiles.profile !== PowerProfile.PowerSaver onClicked: { - - /* TODO: hook to power profile */ } + powerProfiles.profile = PowerProfile.PowerSaver + } } Item { Layout.fillWidth: true diff --git a/Modules/SidePanel/PowerMenu.qml b/Modules/SidePanel/PowerMenu.qml index 9fcdb6d..fc8f96c 100644 --- a/Modules/SidePanel/PowerMenu.qml +++ b/Modules/SidePanel/PowerMenu.qml @@ -50,7 +50,6 @@ NPanel { anchors.fill: parent onClicked: { - // Prevent event bubbling } } diff --git a/Modules/SidePanel/SidePanel.qml b/Modules/SidePanel/SidePanel.qml index 695d8d8..96de4ce 100644 --- a/Modules/SidePanel/SidePanel.qml +++ b/Modules/SidePanel/SidePanel.qml @@ -15,7 +15,6 @@ NLoader { // Target screen to open on property var targetScreen: null - // Public API to open the panel aligned under a given x coordinate. function openAt(x, screen) { anchorX = x targetScreen = screen