diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-16 13:46:37 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-16 13:46:37 +0200 |
| commit | 516e44c6c87825bfc985cbe6a1e73fce3fa7762a (patch) | |
| tree | eca6909bf1897c7701d0ba2b99200b91c499f9fe /appearance/AppearancePanel.qml | |
| parent | 4d63b1d50a593ea2a2475d79bf17d67240eff969 (diff) | |
| download | quickshell-516e44c6c87825bfc985cbe6a1e73fce3fa7762a.tar.gz quickshell-516e44c6c87825bfc985cbe6a1e73fce3fa7762a.zip | |
feat(appearance): polish the Icons tab previews and apply
Cursor previews were extracted only on hover, so the row stayed blank until
each card was visited. They are now batched on open: one python pass extracts
four shapes per theme (arrow, hand, text, horizontal resize) through the
theme's aliases and every storage form it may use (hyprcursor .hlc, a shape
directory SVG, or a legacy Xcursor binary via xcur2png).
The card rows are Flows so they wrap instead of running off the right edge,
and the tab scrolls. Cards widened and names wrap to two lines. A size
selector (16-64) applies the pointer size live, to gsettings, the GTK
settings.ini files and environment.lua.
gsettings alone does not reliably switch icon/cursor here: both gtk-3.0 and
gtk-4.0 settings.ini carry the names, so apply now rewrites
gtk-icon-theme-name / gtk-cursor-theme-name / gtk-cursor-theme-size there too.
The symlinked `default` cursor alias is skipped in the scan and the current
value resolved through it, so the real theme carries the current marker.
The tab row is centred against the panel so it reads as drawer chrome rather
than the first line of a tab's content.
Diffstat (limited to 'appearance/AppearancePanel.qml')
| -rw-r--r-- | appearance/AppearancePanel.qml | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/appearance/AppearancePanel.qml b/appearance/AppearancePanel.qml index e034fda..42bc454 100644 --- a/appearance/AppearancePanel.qml +++ b/appearance/AppearancePanel.qml @@ -131,19 +131,30 @@ Scope { anchors.margins: 20 spacing: 16 - Row { - spacing: 8 - Repeater { - model: root.tabs - Tab { - required property var modelData - text: root.tabLabels[modelData] - selected: root.tab === modelData - onClicked: root.tab = modelData + // Centred against the panel, not against the hint: the row + // reads as the drawer's own chrome rather than the first + // line of a tab's content. + Item { + width: parent.width + height: tabBar.implicitHeight + + Row { + id: tabBar + anchors.horizontalCenter: parent.horizontalCenter + spacing: 8 + Repeater { + model: root.tabs + Tab { + required property var modelData + text: root.tabLabels[modelData] + selected: root.tab === modelData + onClicked: root.tab = modelData + } } } - Item { width: 12; height: 1 } + Text { + anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter text: "Tab switches · Esc closes" font { family: Theme.fontFamily; pixelSize: Theme.fontSize - 4 } |
