diff --git a/modules/Backlight.qml b/modules/Backlight.qml index 4fed877..46e9477 100644 --- a/modules/Backlight.qml +++ b/modules/Backlight.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell.Io +import QtQuick.Controls import "." as M Row { @@ -52,4 +53,9 @@ Row { WheelHandler { onWheel: event => root.adjust(event.angleDelta.y) } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: "Brightness: " + root.percent + "%" + } } diff --git a/modules/Battery.qml b/modules/Battery.qml index 4290633..90397d4 100644 --- a/modules/Battery.qml +++ b/modules/Battery.qml @@ -1,4 +1,5 @@ import QtQuick +import QtQuick.Controls import Quickshell.Services.UPower import "." as M @@ -26,4 +27,16 @@ Row { color: root.pct < 15 ? M.Theme.base08 : M.Theme.base05 anchors.verticalCenter: parent.verticalCenter } + + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: { + const state = root.charging ? "Charging" : "Discharging"; + const t = root.charging ? root.dev?.timeToFull : root.dev?.timeToEmpty; + const mins = t ? Math.round(t / 60) : 0; + const timeStr = mins > 0 ? "\n" + Math.floor(mins / 60) + "h " + (mins % 60) + "m " + (root.charging ? "until full" : "remaining") : ""; + return state + " — " + Math.round(root.pct) + "%" + timeStr; + } + } } diff --git a/modules/Bluetooth.qml b/modules/Bluetooth.qml index a7ac784..556d928 100644 --- a/modules/Bluetooth.qml +++ b/modules/Bluetooth.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell.Io +import QtQuick.Controls import "." as M Row { @@ -41,4 +42,9 @@ Row { font.family: M.Theme.fontFamily anchors.verticalCenter: parent.verticalCenter } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: root.status === "connected" ? "Bluetooth: " + root.device : "Bluetooth: on" + } } diff --git a/modules/Clock.qml b/modules/Clock.qml index 340da86..0b2a7f9 100644 --- a/modules/Clock.qml +++ b/modules/Clock.qml @@ -1,11 +1,12 @@ import QtQuick +import QtQuick.Controls import Quickshell import "." as M Text { SystemClock { id: clock - precision: SystemClock.Minutes + precision: SystemClock.Seconds } text: Qt.formatDateTime(clock.date, "ddd, dd. MMM HH:mm") @@ -13,4 +14,10 @@ Text { font.pixelSize: M.Theme.fontSize + 1 font.family: M.Theme.fontFamily verticalAlignment: Text.AlignVCenter + + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: Qt.formatDateTime(clock.date, "dddd, dd. MMMM yyyy\nHH:mm:ss") + } } diff --git a/modules/Cpu.qml b/modules/Cpu.qml index bb0a860..0cc3100 100644 --- a/modules/Cpu.qml +++ b/modules/Cpu.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell.Io +import QtQuick.Controls import "." as M Row { @@ -63,4 +64,9 @@ Row { font.family: M.Theme.fontFamily verticalAlignment: Text.AlignVCenter } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: "CPU: " + root.usage + "%\n" + root.freqGhz.toFixed(2) + " GHz" + } } diff --git a/modules/Disk.qml b/modules/Disk.qml index d1e0417..0ac0758 100644 --- a/modules/Disk.qml +++ b/modules/Disk.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell.Io +import QtQuick.Controls import "." as M Row { @@ -42,4 +43,9 @@ Row { font.family: M.Theme.fontFamily verticalAlignment: Text.AlignVCenter } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: root.freePct + "% free of " + root.totalTb.toFixed(1) + " TB" + } } diff --git a/modules/IdleInhibitor.qml b/modules/IdleInhibitor.qml index 41423f1..1ab30fd 100644 --- a/modules/IdleInhibitor.qml +++ b/modules/IdleInhibitor.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell.Io +import QtQuick.Controls import "." as M M.BarIcon { @@ -22,4 +23,9 @@ M.BarIcon { toggle.running = true; } } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: "Idle inhibition: " + (root.active ? "active" : "inactive") + } } diff --git a/modules/Memory.qml b/modules/Memory.qml index 9711d86..039f8ee 100644 --- a/modules/Memory.qml +++ b/modules/Memory.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell.Io +import QtQuick.Controls import "." as M Row { @@ -42,4 +43,9 @@ Row { font.family: M.Theme.fontFamily verticalAlignment: Text.AlignVCenter } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: "Memory: " + root.percent + "% used" + } } diff --git a/modules/Mpris.qml b/modules/Mpris.qml index 52e34f5..5e9412c 100644 --- a/modules/Mpris.qml +++ b/modules/Mpris.qml @@ -1,4 +1,5 @@ import QtQuick +import QtQuick.Controls import Quickshell.Services.Mpris import "." as M @@ -19,6 +20,20 @@ Row { anchors.verticalCenter: parent.verticalCenter } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: { + const p = root.player; + if (!p) return ""; + const parts = []; + if (p.trackTitle) parts.push(p.trackTitle); + if (p.trackArtists?.length) parts.push(p.trackArtists.join(", ")); + if (p.trackAlbum) parts.push(p.trackAlbum); + return parts.join("\n") || p.identity; + } + } + TapHandler { onTapped: root.player?.togglePlaying() } diff --git a/modules/Network.qml b/modules/Network.qml index 74589e5..dc7fb7c 100644 --- a/modules/Network.qml +++ b/modules/Network.qml @@ -1,4 +1,5 @@ import QtQuick +import QtQuick.Controls import Quickshell.Io import "." as M @@ -62,4 +63,15 @@ Row { font.family: M.Theme.fontFamily anchors.verticalCenter: parent.verticalCenter } + + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: { + if (root.state === "wifi") return "WiFi: " + root.essid + (root.ifname ? "\nInterface: " + root.ifname : ""); + if (root.state === "eth") return "Ethernet: " + root.ifname; + if (root.state === "linked") return "Linked: " + root.ifname; + return "Disconnected"; + } + } } diff --git a/modules/Notifications.qml b/modules/Notifications.qml index 63f3890..ba15fe2 100644 --- a/modules/Notifications.qml +++ b/modules/Notifications.qml @@ -1,4 +1,5 @@ import QtQuick +import QtQuick.Controls import Quickshell.Io import "." as M @@ -58,4 +59,15 @@ Row { Process { id: clicker } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: { + const parts = []; + parts.push(root.count + " notification" + (root.count !== 1 ? "s" : "")); + if (root.dnd) parts.push("Do not disturb"); + if (root.inhibited) parts.push("Inhibited"); + return parts.join("\n"); + } + } } diff --git a/modules/PowerProfile.qml b/modules/PowerProfile.qml index c20b01a..f15542d 100644 --- a/modules/PowerProfile.qml +++ b/modules/PowerProfile.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell.Io +import QtQuick.Controls import "." as M M.BarIcon { @@ -44,4 +45,9 @@ M.BarIcon { setter.running = true; } } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: "Power profile: " + (root.profile || "unknown") + } } diff --git a/modules/Temperature.qml b/modules/Temperature.qml index 62d5dd1..facee92 100644 --- a/modules/Temperature.qml +++ b/modules/Temperature.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell.Io +import QtQuick.Controls import "." as M Row { @@ -32,4 +33,9 @@ Row { font.family: M.Theme.fontFamily verticalAlignment: Text.AlignVCenter } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: "Temperature: " + root.celsius + "\u00B0C" + } } diff --git a/modules/Volume.qml b/modules/Volume.qml index 29fac1d..c82a960 100644 --- a/modules/Volume.qml +++ b/modules/Volume.qml @@ -1,4 +1,5 @@ import QtQuick +import QtQuick.Controls import Quickshell.Services.Pipewire import "." as M @@ -23,6 +24,14 @@ Row { anchors.verticalCenter: parent.verticalCenter } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: (root.sink?.description ?? root.sink?.name ?? "Unknown sink") + + "\nVolume: " + Math.round(root.volume * 100) + "%" + + (root.muted ? "\nMuted" : "") + } + TapHandler { onTapped: if (root.sink?.audio) root.sink.audio.muted = !root.sink.audio.muted } diff --git a/modules/Wlogout.qml b/modules/Wlogout.qml index dfcae8b..47bc260 100644 --- a/modules/Wlogout.qml +++ b/modules/Wlogout.qml @@ -1,5 +1,6 @@ import QtQuick import Quickshell.Io +import QtQuick.Controls import "." as M M.BarIcon { @@ -15,4 +16,9 @@ M.BarIcon { cursorShape: Qt.PointingHandCursor onClicked: proc.running = true } + HoverHandler { id: hover } + ToolTip { + visible: hover.hovered + text: "Open logout menu" + } }