Four places in the entire shell could reach Settings. The bar, where a person looks first, was not one of them -- and Pill has routed right-click to a secondaryActivated signal all along, which nothing connected, so the gesture did nothing on every widget in the bar. Each widget now opens the page that owns its settings: the clock and the calendar reminder open Date & Time, weather opens Home, the vitals readout opens Appearance, the status glyphs open Network & Devices, the media readout opens Sound, and the privacy indicator opens Privacy & Security. Left-click behaviour is untouched. Two routing bugs found while picking those destinations, both of the same kind and both invisible from the code, since each page reads perfectly well on its own: weather routed to Appearance while every weather control lives on Home, so searching "temperature unit" opened a page without it. vitals routed to Appearance, but the refresh interval sat on Home while the toggles it governs sat on Appearance -- one concept split across two pages, which is exactly what the ownership rule forbids. The interval now sits beside the toggles and Home's stub card is gone. The jump contract guards the failure mode these share. openSettings() falls back to Home for an unknown page, sensibly and completely silently, so a typo or a later rename turns a right-click into "opens the wrong page" with nothing logged. It also fails a Pill-based bar widget that leaves right-click unconnected, since that is how the gesture came to be inert everywhere in the first place. A third instance of the routing bug is still open: followMouse and pointerSensitivity sit in the input group, which routes to Keyboard, while both render on Mouse. Fixing it is a two-line group change in PreferenceSchema.qml, which codex currently owns, so the contract that catches all three lands with that fix rather than red. Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L
46 lines
1.6 KiB
QML
46 lines
1.6 KiB
QML
// The centre clock, kept in the same place and the same format GNOME had it:
|
|
// weekday, date, 12-hour time with seconds. Clicking it opens the calendar,
|
|
// exactly like GNOME's date menu.
|
|
|
|
import Quickshell
|
|
import QtQuick
|
|
import qs.config
|
|
import qs.services
|
|
import qs.widgets
|
|
|
|
Pill {
|
|
id: root
|
|
|
|
// Seconds are only ticked when they are actually shown — a per-second wake
|
|
// for a clock that displays minutes would be pure waste.
|
|
SystemClock {
|
|
id: clock
|
|
precision: Settings.showSeconds ? SystemClock.Seconds : SystemClock.Minutes
|
|
}
|
|
|
|
readonly property string format: {
|
|
const date = Settings.showWeekday ? "ddd MMM d " : "MMM d ";
|
|
const time = Settings.use24Hour ? (Settings.showSeconds ? "HH:mm:ss" : "HH:mm") : (Settings.showSeconds ? "h:mm:ss AP" : "h:mm AP");
|
|
return date + time;
|
|
}
|
|
|
|
onActivated: ShellState.toggleDateMenu("agenda")
|
|
|
|
// Right-click opens the settings that govern this widget. Timezone and clock format live on Date & Time. The
|
|
// format toggles are mirrored on Appearance, but someone right-clicking a
|
|
// clock is far more often after the time itself than its typography.
|
|
onSecondaryActivated: ShellState.openSettings("datetime")
|
|
|
|
Text {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: Qt.formatDateTime(clock.date, root.format)
|
|
font.family: Theme.fontFamily
|
|
// Seconds tick once a second in the centre of the bar; without tabular
|
|
// figures the whole clock shifts sideways on every digit change.
|
|
font.features: Theme.tabularFigures
|
|
font.pixelSize: Theme.fontSize
|
|
color: Theme.fg
|
|
}
|
|
|
|
}
|