Files
omarchycn/default/quickshell/bar/widgets/powerProfile.qml
T
Ryan Hughes 55a9075415 Address reviewer follow-ups: powerProfile detect, slider live-value, glyphs
- powerProfile now hides on machines without power-profiles-daemon by
  checking against the published profile set rather than a never-undefined
  enum, and uses mdi-scale-balance for Balanced (not battery-charging).
- networkPanel renames the QML-keyword-shadowing 'signal' property to
  'signalStrength'; ethernet glyph corrected to mdi-ethernet (not the
  access-point icon).
- workspacesPro indicator color guards against null bar during construction.
- Common.Slider keeps an internal liveValue so external value bindings
  survive a drag; sliders fed from PipeWire/brightnessctl now follow
  external changes after the user interacts.
- audioPanel drops the redundant default-sink PwObjectTracker since the
  candidate-sinks tracker already covers it.
- networkPanel guards scan/connect commands against re-entry while the
  previous Process is running.
- notificationCenter only instantiates its NotificationServer when the
  module is opted in via settings.replaceMako (default off) so it does
  not collide with mako out of the box.
- PopupCard fully opaque while open (previously 0.98) — removes a
  visible ghost outline on first render.
- Drop dead code: calendar trailing MouseArea, weatherFlyout's unused
  parseForecast/forecast property, idleInhibitor's holdSeconds,
  media's scrollAnim.position; gate media's scroll animation off in
  vertical bar mode.
2026-05-14 02:21:47 -04:00

95 lines
2.6 KiB
QML

import QtQuick
import Quickshell
import Quickshell.Services.UPower
import "../common" as Common
Item {
id: root
property QtObject bar: null
property string moduleName: "powerProfile"
property var settings: ({})
property bool popupOpen: false
function closePopout() { popupOpen = false }
readonly property var profileGlyphs: ({
[PowerProfile.PowerSaver]: "󰌪",
[PowerProfile.Balanced]: "󰗑",
[PowerProfile.Performance]: "󰓅"
})
readonly property var profileLabels: ({
[PowerProfile.PowerSaver]: "Power Saver",
[PowerProfile.Balanced]: "Balanced",
[PowerProfile.Performance]: "Performance"
})
readonly property bool available: PowerProfiles.hasPerformanceProfile || PowerProfiles.profile === PowerProfile.PowerSaver || PowerProfiles.profile === PowerProfile.Balanced
readonly property int current: PowerProfiles.profile
visible: available
implicitWidth: button.implicitWidth
implicitHeight: button.implicitHeight
function setProfile(profile) {
PowerProfiles.profile = profile
}
Common.WidgetButton {
id: button
anchors.fill: parent
bar: root.bar
text: root.profileGlyphs[root.current] || ""
tooltipText: "Power profile: " + (root.profileLabels[root.current] || "Unknown")
onPressed: function() { root.popupOpen = !root.popupOpen }
}
Common.PopupCard {
anchorItem: button
owner: root
bar: root.bar
open: root.popupOpen
contentWidth: 240
contentHeight: column.implicitHeight + 28
Column {
id: column
anchors.fill: parent
spacing: 6
Text {
text: "Power Profile"
color: root.bar.foreground
font.family: root.bar.fontFamily
font.pixelSize: 12
font.bold: true
}
Repeater {
model: [
{ profile: PowerProfile.PowerSaver, label: "Power Saver", glyph: "󰌪" },
{ profile: PowerProfile.Balanced, label: "Balanced", glyph: "󰗑" },
{ profile: PowerProfile.Performance, label: "Performance", glyph: "󰓅" }
]
Common.PillButton {
required property var modelData
width: parent.width
iconText: modelData.glyph
text: modelData.label
foreground: root.bar.foreground
horizontalPadding: 10
verticalPadding: 8
active: root.current === modelData.profile
enabled: modelData.profile !== PowerProfile.Performance || PowerProfiles.hasPerformanceProfile
opacity: enabled ? 1 : 0.4
onClicked: { root.setProfile(modelData.profile); root.popupOpen = false }
}
}
}
}
}