Compare commits

..

2 commits

4 changed files with 89 additions and 44 deletions

View file

@ -138,6 +138,51 @@ Column {
}
}
// Overall CPU utilization chart
Item {
width: root.width
height: 44
Text {
id: _totalLabel
anchors.left: parent.left
anchors.leftMargin: 12
anchors.verticalCenter: parent.verticalCenter
text: S.SystemStats.cpuUsage + "%"
color: S.Theme.loadColor(S.SystemStats.cpuUsage)
font.pixelSize: S.Theme.fontSize - 1
font.family: S.Theme.fontFamily
font.bold: true
width: 32
}
SparklineCanvas {
anchors.left: _totalLabel.right
anchors.leftMargin: 6
anchors.right: parent.right
anchors.rightMargin: 12
anchors.verticalCenter: parent.verticalCenter
height: 32
history: root._cpuHistory
strokeColor: root.accentColor
colorAt: v => S.Theme.loadColor(v)
active: root.active
}
}
property var _cpuHistory: []
onActiveChanged: if (active)
_cpuHistory = []
Connections {
target: S.SystemStats
function onCpuUsageChanged() {
if (!root.active)
return;
const h = root._cpuHistory.concat([S.SystemStats.cpuUsage]);
root._cpuHistory = h.length > 60 ? h.slice(h.length - 60) : h;
}
}
Separator {}
Item {

View file

@ -70,19 +70,6 @@ Column {
}
}
// Memory history sparkline
SparklineCanvas {
anchors.left: parent.left
anchors.leftMargin: 12
anchors.right: parent.right
anchors.rightMargin: 12
height: 32
history: S.SystemStats.memHistory
strokeColor: root.accentColor
colorAt: v => S.Theme.loadColor(v)
active: root.active
}
// Breakdown rows
InfoRow {
label: "Used"
@ -101,6 +88,19 @@ Column {
value: root._fmt(root.totalGb)
}
// Memory history sparkline
SparklineCanvas {
anchors.left: parent.left
anchors.leftMargin: 12
anchors.right: parent.right
anchors.rightMargin: 12
height: 32
history: S.SystemStats.memHistory
strokeColor: root.accentColor
colorAt: v => S.Theme.loadColor(v)
active: root.active
}
Separator {}
Item {

View file

@ -13,6 +13,36 @@ WlSessionLockSurface {
color: S.Theme.base00
// Keyboard input via TextInput - engages Qt's full input pipeline including
// text-input protocol, which is more reliable than Keys on a plain Item in
// layer-shell/lock surfaces where raw wl_keyboard delivery can be flaky.
// Declared BEFORE visual content so it's below in z-order - widget TapHandlers
// receive mouse events, while keyboard activeFocus is independent of stacking.
TextInput {
id: _keyInput
anchors.fill: parent
focus: true
color: "transparent"
selectionColor: "transparent"
selectedTextColor: "transparent"
cursorVisible: false
enabled: !root._unlocking && root.auth.state !== "max" && root.auth.state !== "busy"
onTextChanged: if (root.auth)
root.auth.buffer = text
Keys.onReturnPressed: root.auth.submit()
Keys.onEnterPressed: root.auth.submit()
Keys.onEscapePressed: {
text = "";
}
onActiveFocusChanged: {
if (!activeFocus)
forceActiveFocus();
}
}
property real _unlockFade: 1
// Threat level: eased curve so fails 1-2 are subtle, 3+ ramps up.
@ -194,36 +224,6 @@ WlSessionLockSurface {
}
}
// Keyboard input via TextInput - engages Qt's full input pipeline including
// text-input protocol, which is more reliable than Keys on a plain Item in
// layer-shell/lock surfaces where raw wl_keyboard delivery can be flaky.
// Declared before content so it's below in z-order - content TapHandlers
// receive mouse events, while keyboard activeFocus is independent of stacking.
TextInput {
id: _keyInput
anchors.fill: parent
focus: true
color: "transparent"
selectionColor: "transparent"
selectedTextColor: "transparent"
cursorVisible: false
enabled: !root._unlocking && root.auth.state !== "max" && root.auth.state !== "busy"
onTextChanged: if (root.auth)
root.auth.buffer = text
Keys.onReturnPressed: root.auth.submit()
Keys.onEnterPressed: root.auth.submit()
Keys.onEscapePressed: {
text = "";
}
onActiveFocusChanged: {
if (!activeFocus)
forceActiveFocus();
}
}
onVisibleChanged: {
if (visible)
_keyInput.forceActiveFocus();

View file

@ -8,7 +8,7 @@ M.BarModule {
id: root
active: S.Modules.clock.enable
spacing: S.Theme.moduleSpacing
tooltip: Qt.formatDateTime(clock.date, "dddd, dd. MMMM yyyy")
tooltip: Qt.formatDateTime(clock.date, "dddd, dd. MMMM yyyy HH:mm:ss")
panelNamespace: "nova-clock"
panelContentWidth: 220
panelComponent: Component {