Skip to content

Latest commit

 

History

History
71 lines (54 loc) · 3.14 KB

File metadata and controls

71 lines (54 loc) · 3.14 KB

Bar widget

BarWidget.qml — the bar-widget kind, installed in the center section (defaultSection: "center", enabled with omarchy plugin enable io.github.sh1d0w.omatrack). It is the live label for the current task and the host for the quick-start popup.

Display

The label is a single binding that re-evaluates only when its inputs change (service map, running state, and the 1s elapsedLabel while running):

State Label Style
idle (U+F2F2, clock icon) muted
running the entry's description (required) or the client name (legacy, or -), then two spaces + HH:MM:SS Color.accent
paused same as running, plus (paused) — the label is frozen Color.accent

The running client name resolves through the service's clientName(); if it cannot resolve (data edited away out from under a running timer) the label falls back to -.

The idle glyph is drawn slightly smaller than the bar icon size (Math.round(Style.bar.iconFont * 0.9) — 12px at the default 13), since the Nerd Font clock renders larger than the old geometric glyph; the running and paused labels use the body font. Both come from the button's fontSize, which tracks isRunning.

The tooltip (tooltipText) carries the detail the bar label can't:

  • running: Acme — Hero section · 01:02:03 · billable (or non-billable); while paused the same line carries an extra · paused
  • idle with time logged today: Today 04:12 · start a task
  • idle, empty day: No active timer

Service access

The bar widget is a host-injected object: the shell gives it bar, moduleName, and settings. The headless engine is reached through:

readonly property var service:
    bar ? bar.shell.serviceFor("io.github.sh1d0w.omatrack") : null

This binding re-evaluates when the shell reassigns its _services map, so the widget attaches automatically on shell startup even though the bar widget is constructed before the plugin's service finishes loading.

Popup shape contract

The popup is a Loader on Popup.qml. The shell's summon routing inspects the bar-widget root for the opened/open/close shape; the widget implements it (popupLoader.item.opened === true, open()/close() delegating to the loaded popup) and uses popoutSwitchClosing / closeForPopoutSwitch so the bar treats the popup as its popout identity.

Interaction

  • Left clicktogglePanel() (open/close the anchored popup; Esc and focus-out close it).
  • Right click / middle click → ignored by design (no context menu).
  • The popup itself — contents, anchoring, behavior — is documented in popup.md.

Contingency: idle glyph

The idle label uses the Nerd Font clock icon (U+F2F2), covered by the shell font (a Nerd Font build — Caskaydia Mono Nerd Font). If the bar font ever renders it as tofu, switch the idle label to the text idle (one-line change in the label binding) and re-verify with omarchy capture screenshot.