Live wall window: a translucent toggle

495b6f2 · gmorell · 2026-11-03 19:52

9 files +34 -3
Message
{commit_body(@commit)}

Files changed

modified README.md
+1 −1
@@ -74,7 +74,7 @@ Every job running right now, a card each, tiled to fill the space, the same as G
74 74
75 75 There are two ways to show it:
76 76
77 −- **A window**: the grid button in the popup's header, or right-click the widget → **Open Live CI Wall**. **F11** (or the button) toggles full screen and **Esc** leaves it. Put it on a spare monitor.
77 +- **A window**: the grid button in the popup's header, or right-click the widget → **Open Live CI Wall**. **F11** (or the button) toggles full screen and **Esc** leaves it. **T** (or the opacity button) makes the background see-through and the cards partly so, keeping the text solid. KWin's own *More Actions → Opacity* fades the text too. Put it on a spare monitor.
78 78 - **Wall mode on the desktop**: *Behavior → Live CI wall → Wall mode*. A widget on the desktop (not in a panel) then *is* the wall. Resize it as large as you like. In a panel the widget stays the circles.
79 79
80 80 It needs a GitGud server with the `/api/mobile/v1/ci/live` endpoint and a token with `ci:read`.
modified contents/config/main.xml
+5 −0
@@ -42,6 +42,11 @@
42 42 <default>false</default>
43 43 </entry>
44 44
45 + <entry name="wallTranslucent" type="Bool">
46 + <label>Live wall window: see-through background</label>
47 + <default>false</default>
48 + </entry>
49 +
45 50 <entry name="desktopWall" type="Bool">
46 51 <label>On the desktop, the widget is the live CI wall</label>
47 52 <default>false</default>
modified contents/ui/WallCard.qml
+3 −1
@@ -13,6 +13,7 @@ Rectangle {
13 13
14 14 required property var card
15 15 property double now: Date.now()
16 + property bool translucent: false
16 17
17 18 readonly property var job: card.job || {}
18 19 readonly property var run: card.run || {}
@@ -25,7 +26,8 @@ Rectangle {
25 26 readonly property bool tiny: height < gu * 3
26 27
27 28 radius: Kirigami.Units.cornerRadius
28 − color: Kirigami.Theme.alternateBackgroundColor
29 + color: translucent ? Qt.alpha(Kirigami.Theme.alternateBackgroundColor, 0.6)
30 + : Kirigami.Theme.alternateBackgroundColor
29 31 border.width: 1
30 32 border.color: Qt.alpha(Kirigami.Theme.neutralTextColor, 0.35)
31 33 clip: true
modified contents/ui/WallView.qml
+13 −0
@@ -25,6 +25,7 @@ Item {
25 25 // Leave the header's window-only buttons out on the desktop.
26 26 property bool inWindow: false
27 27 property bool fullScreen: false
28 + property bool translucent: false
28 29 signal toggleFullScreen()
29 30
30 31 readonly property var cards: store.wallCards
@@ -145,6 +146,17 @@ Item {
145 146 PlasmaComponents3.ToolTip { text: i18n("Newest first (R flips the order)") }
146 147 }
147 148
149 + PlasmaComponents3.ToolButton {
150 + visible: wall.inWindow
151 + checkable: true
152 + checked: wall.translucent
153 + icon.name: "transform-opacity"
154 + text: i18n("Translucent")
155 + display: QQC2.AbstractButton.IconOnly
156 + onClicked: wall.store.setWallTranslucent(!wall.translucent)
157 + PlasmaComponents3.ToolTip { text: i18n("See-through background (T)") }
158 + }
159 +
148 160 PlasmaComponents3.ToolButton {
149 161 visible: wall.inWindow
150 162 icon.name: wall.fullScreen ? "view-restore" : "view-fullscreen"
@@ -207,6 +219,7 @@ Item {
207 219 Layout.fillHeight: true
208 220 Layout.preferredHeight: 1 // equal shares
209 221 card: modelData
222 + translucent: wall.translucent
210 223 now: wall.store.now
211 224 }
212 225 }
modified contents/ui/WallWindow.qml
+7 −1
@@ -20,7 +20,11 @@ Window {
20 20
21 21 Kirigami.Theme.colorSet: Kirigami.Theme.Window
22 22 Kirigami.Theme.inherit: false
23 − color: Kirigami.Theme.backgroundColor
23 + // Translucent: the background goes see-through (and the cards
24 + // partly), the text stays solid — unlike KWin's window opacity,
25 + // which fades everything. T toggles it.
26 + readonly property bool translucent: store.wallTranslucent
27 + color: translucent ? Qt.alpha(Kirigami.Theme.backgroundColor, 0.35) : Kirigami.Theme.backgroundColor
24 28
25 29 readonly property bool fullScreen: visibility === Window.FullScreen
26 30
@@ -43,12 +47,14 @@ Window {
43 47
44 48 Shortcut { sequences: [StandardKey.FullScreen]; onActivated: wallWindow.toggleFullScreen() }
45 49 Shortcut { sequence: "Escape"; enabled: wallWindow.fullScreen; onActivated: wallWindow.showNormal() }
50 + Shortcut { sequence: "T"; onActivated: wallWindow.store.setWallTranslucent(!wallWindow.store.wallTranslucent) }
46 51 Shortcut { sequence: "R"; onActivated: wallWindow.store.setWallNewestFirst(!wallWindow.store.wallNewestFirst) }
47 52
48 53 WallView {
49 54 anchors.fill: parent
50 55 store: wallWindow.store
51 56 inWindow: true
57 + translucent: wallWindow.translucent
52 58 fullScreen: wallWindow.fullScreen
53 59 onToggleFullScreen: wallWindow.toggleFullScreen()
54 60 }
modified contents/ui/main.qml
+5 −0
@@ -85,6 +85,7 @@ PlasmoidItem {
85 85 property var wallWindow: null
86 86 readonly property string wallScope: Plasmoid.configuration.wallScope
87 87 readonly property bool wallNewestFirst: Plasmoid.configuration.wallNewestFirst
88 + readonly property bool wallTranslucent: Plasmoid.configuration.wallTranslucent
88 89 readonly property bool wallConfigured: api.configured
89 90 readonly property bool onDesktop: Plasmoid.formFactor !== PlasmaCore.Types.Horizontal
90 91 && Plasmoid.formFactor !== PlasmaCore.Types.Vertical
@@ -702,6 +703,10 @@ PlasmoidItem {
702 703 Plasmoid.configuration.wallNewestFirst = newest
703 704 }
704 705
706 + function setWallTranslucent(on) {
707 + Plasmoid.configuration.wallTranslucent = on
708 + }
709 +
705 710 function wallWebUrl() {
706 711 return api.wallUrl(wallScope)
707 712 }

Parents: 9cdb602