refactor(quickshell): drop the Persona names from the primitives

P5Panel, P5Button, P5Slider and P5Tooltip become Panel, ActionButton,
LevelSlider and Tooltip. ActionButton and LevelSlider avoid clashing
with QtQuick.Controls, which the ask panel imports.
This commit is contained in:
nvrl committed 2026-10-04 23:39:51 +02:00
1 parent 7b7cd3e575
commit add12ccc76
20 files changed
+29 -29

No files matched your search

+2 -2
View File
@@ -74,7 +74,7 @@ backdrop/ the wallpaper, drawn by the shell
assets/ halftone and stripe tiles, generated with ImageMagick assets/ halftone and stripe tiles, generated with ImageMagick
``` ```
`P5Panel` is the base surface everything sits on. It does not auto-size — `Panel` is the base surface everything sits on. It does not auto-size —
callers set implicit sizes from their own layout (`row.implicitWidth + callers set implicit sizes from their own layout (`row.implicitWidth +
contentPad * 2`), which keeps the shape maths out of binding loops. contentPad * 2`), which keeps the shape maths out of binding loops.
@@ -441,7 +441,7 @@ zones itself, so every piece is placed from the screen edge.
**Soft, everywhere else.** The porthole is the shape the desktop is built **Soft, everywhere else.** The porthole is the shape the desktop is built
around, and every smaller surface is a gentler echo of it. `Theme.skew` and around, and every smaller surface is a gentler echo of it. `Theme.skew` and
`Theme.cut` are `0`; `P5Panel` and `Skew` draw `Geom.roundedRect` with `Theme.cut` are `0`; `Panel` and `Skew` draw `Geom.roundedRect` with
`Theme.radiusS` (pills, chips, meter tracks), `radiusM` (rows, buttons) or `Theme.radiusS` (pills, chips, meter tracks), `radiusM` (rows, buttons) or
`radiusL`. `radiusL` is `frameRadius - padS`: anything inset by `padS` inside `radiusL`. `radiusL` is `frameRadius - padS`: anything inset by `padS` inside
one of the frame's curves — a hovered notification in the drawer's corner — one of the frame's curves — a hovered notification in the drawer's corner —
+1 -1
View File
@@ -73,7 +73,7 @@ Item {
anchors.fill: parent anchors.fill: parent
active: root.standalone active: root.standalone
sourceComponent: P5Panel { sourceComponent: Panel {
lean: root.lean lean: root.lean
leanLeft: root.leanLeft leanLeft: root.leanLeft
chop: root.chop chop: root.chop
+2 -2
View File
@@ -122,7 +122,7 @@ Item {
} }
// Leading-edge wipe. On the rail this runs vertically down the left side, // Leading-edge wipe. On the rail this runs vertically down the left side,
// mirroring the accent bar P5Panel puts on horizontal modules. // mirroring the accent bar Panel puts on horizontal modules.
// //
// Held off the edge by `wipeInset`: the icon spans the rail's full width, so // Held off the edge by `wipeInset`: the icon spans the rail's full width, so
// at x = 0 this landed exactly on the slab's own border. // at x = 0 this landed exactly on the slab's own border.
@@ -162,7 +162,7 @@ Item {
onWheel: event => root.scrolled(event.angleDelta.y) onWheel: event => root.scrolled(event.angleDelta.y)
} }
P5Tooltip { Tooltip {
anchorItem: root anchorItem: root
triggerHovered: root.hovered triggerHovered: root.hovered
title: root.label title: root.label
@@ -48,7 +48,7 @@ FocusScope {
implicitWidth: wide ? 260 : (row.implicitWidth + panel.contentPad * 2) implicitWidth: wide ? 260 : (row.implicitWidth + panel.contentPad * 2)
implicitHeight: 44 implicitHeight: 44
P5Panel { Panel {
id: panel id: panel
anchors.fill: parent anchors.fill: parent
lean: root.lean lean: root.lean
+1 -1
View File
@@ -4,7 +4,7 @@ import "root:/components"
// Calm, permanent-chrome preset. It is deliberately flat and opaque: one // Calm, permanent-chrome preset. It is deliberately flat and opaque: one
// neutral hairline, no texture, no ticks, and no accent unless active. // neutral hairline, no texture, no ticks, and no accent unless active.
P5Panel { Panel {
property bool active: false property bool active: false
property color tone: Theme.treatmentActiveMark property color tone: Theme.treatmentActiveMark
File renamed without changes.
File renamed without changes.
+3 -3
View File
@@ -3,7 +3,7 @@ import QtQuick.Shapes
import "root:/config" import "root:/config"
import "root:/components" import "root:/components"
// A small block — the small-scale counterpart to P5Panel. Upright and rounded // A small block — the small-scale counterpart to Panel. Upright and rounded
// under the YoRHa theme; it still leans if given a lean. // under the YoRHa theme; it still leans if given a lean.
// //
// Every tick, rule, meter segment and slider rail in this shell leans at // Every tick, rule, meter segment and slider rail in this shell leans at
@@ -23,12 +23,12 @@ Shape {
property color borderColor: "transparent" property color borderColor: "transparent"
property real borderWidth: 0 property real borderWidth: 0
// Lean of the vertical edges as a fraction of height, matching P5Panel. // Lean of the vertical edges as a fraction of height, matching Panel.
property real lean: Theme.skew property real lean: Theme.skew
property bool leanLeft: false property bool leanLeft: false
// Wide, short pieces — the rail's hairline rules — slant their horizontal // Wide, short pieces — the rail's hairline rules — slant their horizontal
// edges by a fraction of width instead, exactly as P5Panel does for the // edges by a fraction of width instead, exactly as Panel does for the
// rail slab. // rail slab.
property bool vertical: false property bool vertical: false
File renamed without changes.
+1 -1
View File
@@ -124,7 +124,7 @@ PanelWindow {
} }
} }
P5Panel { Panel {
id: panel id: panel
anchors.fill: parent anchors.fill: parent
anchors.margins: 4 anchors.margins: 4
+2 -2
View File
@@ -50,7 +50,7 @@ Item {
} }
} }
P5Button { ActionButton {
id: muteButton id: muteButton
anchors.right: parent.right anchors.right: parent.right
anchors.top: parent.top anchors.top: parent.top
@@ -59,7 +59,7 @@ Item {
onClicked: Audio.toggleMicMute() onClicked: Audio.toggleMicMute()
} }
P5Slider { LevelSlider {
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
+1 -1
View File
@@ -57,7 +57,7 @@ Item {
} }
} }
P5Slider { LevelSlider {
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
+3 -3
View File
@@ -50,7 +50,7 @@ Popout {
width: parent.width width: parent.width
spacing: Theme.padS spacing: Theme.padS
P5Button { ActionButton {
id: outputMuteButton id: outputMuteButton
width: parent.width width: parent.width
text: Audio.muted ? "Unmute output" : "Mute output" text: Audio.muted ? "Unmute output" : "Mute output"
@@ -58,7 +58,7 @@ Popout {
onClicked: Audio.toggleMute() onClicked: Audio.toggleMute()
} }
P5Button { ActionButton {
width: parent.width width: parent.width
text: "Open audio mixer" text: "Open audio mixer"
icon: "󰕾" icon: "󰕾"
@@ -178,7 +178,7 @@ Popout {
} }
} }
P5Slider { LevelSlider {
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
+1 -1
View File
@@ -123,7 +123,7 @@ Popout {
// Follows the detail line rather than being pinned to the bottom of a // Follows the detail line rather than being pinned to the bottom of a
// fixed-height panel, which is what left a dead band above it. // fixed-height panel, which is what left a dead band above it.
P5Button { ActionButton {
id: suspendButton id: suspendButton
anchors.top: detailText.bottom anchors.top: detailText.bottom
anchors.topMargin: Theme.padL anchors.topMargin: Theme.padL
+2 -2
View File
@@ -40,14 +40,14 @@ Popout {
anchors.left: parent.left anchors.left: parent.left
spacing: Theme.padS spacing: Theme.padS
P5Button { ActionButton {
text: Bt.enabled ? "On" : "Off" text: Bt.enabled ? "On" : "Off"
icon: Bt.enabled ? "󰂯" : "󰂲" icon: Bt.enabled ? "󰂯" : "󰂲"
accent: Bt.enabled ? Theme.accent : Theme.muted accent: Bt.enabled ? Theme.accent : Theme.muted
onClicked: Bt.toggle() onClicked: Bt.toggle()
} }
P5Button { ActionButton {
text: Bt.discovering ? "Scanning" : "Scan" text: Bt.discovering ? "Scanning" : "Scan"
icon: "󰐷" icon: "󰐷"
accent: Bt.discovering ? Theme.accent : Theme.primary accent: Bt.discovering ? Theme.accent : Theme.primary
+1 -1
View File
@@ -172,7 +172,7 @@ Popout {
renderType: Text.NativeRendering renderType: Text.NativeRendering
} }
P5Slider { LevelSlider {
anchors.left: elapsed.right anchors.left: elapsed.right
anchors.right: total.left anchors.right: total.left
anchors.leftMargin: Theme.padS anchors.leftMargin: Theme.padS
+2 -2
View File
@@ -62,14 +62,14 @@ Popout {
anchors.left: parent.left anchors.left: parent.left
spacing: Theme.padS spacing: Theme.padS
P5Button { ActionButton {
text: Net.wifiEnabled ? "Wi-Fi On" : "Wi-Fi Off" text: Net.wifiEnabled ? "Wi-Fi On" : "Wi-Fi Off"
icon: Net.wifiEnabled ? "󰖩" : "󰖪" icon: Net.wifiEnabled ? "󰖩" : "󰖪"
accent: Net.wifiEnabled ? Theme.primary : Theme.muted accent: Net.wifiEnabled ? Theme.primary : Theme.muted
onClicked: Net.toggleWifi() onClicked: Net.toggleWifi()
} }
P5Button { ActionButton {
text: "Settings" text: "Settings"
icon: "󰒓" icon: "󰒓"
onClicked: Actions.openNetworkSettings() onClicked: Actions.openNetworkSettings()
+2 -2
View File
@@ -34,14 +34,14 @@ Popout {
anchors.left: parent.left anchors.left: parent.left
spacing: Theme.padS spacing: Theme.padS
P5Button { ActionButton {
text: Notifs.dnd ? "Silenced" : "Silence" text: Notifs.dnd ? "Silenced" : "Silence"
icon: Notifs.dnd ? "󰂛" : "󰂚" icon: Notifs.dnd ? "󰂛" : "󰂚"
accent: Notifs.dnd ? Theme.treatmentOffText : Theme.primary accent: Notifs.dnd ? Theme.treatmentOffText : Theme.primary
onClicked: Notifs.toggleDnd() onClicked: Notifs.toggleDnd()
} }
P5Button { ActionButton {
text: "Clear" text: "Clear"
icon: "󰎟" icon: "󰎟"
destructive: true destructive: true
+3 -3
View File
@@ -3,8 +3,8 @@ import "root:/config"
import "root:/components" import "root:/components"
// The slab every popout sits on. Pure preset — it declares no children of its // The slab every popout sits on. Pure preset — it declares no children of its
// own, so P5Panel's default content property stays usable by callers. // own, so Panel's default content property stays usable by callers.
P5Panel { Panel {
property color tone: Theme.primary property color tone: Theme.primary
property bool textured: false property bool textured: false
@@ -14,7 +14,7 @@ P5Panel {
readonly property bool attached: parent?.frameAttached ?? false readonly property bool attached: parent?.frameAttached ?? false
fill: attached ? "transparent" : Theme.mantle fill: attached ? "transparent" : Theme.mantle
// Zero, not a transparent fill: P5Panel re-applies this opacity to the // Zero, not a transparent fill: Panel re-applies this opacity to the
// fill colour, which turned "transparent" into 97% black. // fill colour, which turned "transparent" into 97% black.
fillOpacity: attached ? 0 : 0.97 fillOpacity: attached ? 0 : 0.97
// The frame is structure: a neutral hairline. A free-standing panel takes // The frame is structure: a neutral hairline. A free-standing panel takes
+1 -1
View File
@@ -10,7 +10,7 @@ import "root:/components"
// implementation, but that draws a stock widget popup — square corners, system // implementation, but that draws a stock widget popup — square corners, system
// palette, no lean — hanging off the corner of a shell that has none of those // palette, no lean — hanging off the corner of a shell that has none of those
// things. This walks the menu with QsMenuOpener instead and draws it as a // things. This walks the menu with QsMenuOpener instead and draws it as a
// P5Panel, so a right click on a tray icon produces the same object language as // Panel, so a right click on a tray icon produces the same object language as
// everything else on the rail. // everything else on the rail.
// //
// Dismissal is a Hyprland focus grab: click anywhere outside and the compositor // Dismissal is a Hyprland focus grab: click anywhere outside and the compositor