Changelog
Mirrored from
services/compd/CHANGELOG.md, where releases update it. The component's page is compd. This page describes the currentmainbranch of MixOS.
0.2.0
-
The user keys belong to the user. compd enforces the rule itself, ahead of its own bindings, because on a MixOS VT it reads the keyboard itself. The user keys are bare F1–F12 and Right Ctrl, Right Alt or Right Shift with an arrow, matched side-exact with inputd's classifier and press-latched disposition. A user key fires the session user's binding, or goes to the focused client when the user bound it
passthrough; otherwise it is swallowed, and no client sees its press, repeat or release. Under a session lock every user key is swallowed and nothing fires.- The bindings are read from keymap.v1 (
inputd/keymap.jsonin the user's MixOS config dir, or$MIXOS_USER_KEYMAP) and reloaded when the file changes. A bad file keeps the last good keymap, and a missing one binds nothing. - A
comp.*verb runs as its Bus request does. Any other verb is sent to its service fire-and-forget, with the row's args as the body.repeat: allowrows repeat at the seat's rate while held. bindings.userlists the rows.- compd ships no user-key binding. The opt-in bare-F9 Bus key can no longer fire.
- The bindings are read from keymap.v1 (
-
comp.region.select0.2.0: a click (under 4 logical px of travel, with no drag on the way) and Enter or keypad Enter now select the whole output under the pointer, answering exactly as a drag from corner to corner does; a click used to re-arm the selection. A drag stays a drag even if it returns to its start. The overlay dims the output (clear inside a drag), outlines the selection in the theme's focus-ring colour and shows a hint ("Drag to select an area · Click or Enter for the whole screen · Esc to cancel"), only on the selected output, in the session look (followed on every change); a selected reply waits for a frame of that output without the overlay. -
While a
comp.region.selectrun holds the seat the cursor is a crosshair (the theme'scrosshair, elsecrossortcross, else the arrow); the normal cursor is back on the frame that ends the run, however it ends, so the clean frame never shows the crosshair. A cursor's hotspot is now read after its shape is chosen, so a change of shape lands in place on its first frame. -
The capture panels (the setup chooser, region border and dim, Stop buttons and the Continue, Save, Encoding and error dialogs) draw in the session theme, followed on every change like the region overlay, with the embedded theme until the shell delivers one. Open panels repaint at once.
-
Workspaces:
comp.workspaces.list,comp.workspaces.set_count {count, persist}andcomp.workspace.rename {index, name, persist}, and thecomp.workspace.changedtopic. The count and names persist inpreferences.json(workspaces_count,workspace_names) and compd starts with them.workspaces.listrows carryname. -
The pointer moves at the same logical speed at every output scale: a relative delta is multiplied by the output scale as well as
cursor_sensitivity, so a scale-2.5 output no longer needs a sensitivity of 2.5. -
compd's own UI is egui: capture overlays and dialogs, the frame-rate overlay, notifications and the Mix Scenes shell are egui programs painted with egui-wgpu into textures on compd's own EGL context, on the same MixOS look the apps draw with (
toolkit). -
Mix Scenes are laid out as flexbox with taffy, as Quoin lays them out;
shell.scene.layoutreports the rectangles each node was drawn and hit-tested at. -
The session look follows settingsd through the shared consumer on the scene host's own connection (compact schema-2 deliveries, offline cache), and window decorations take their themes from the same look.
-
A UI surface off screen is suspended: its animations stop waking the compositor until it is shown again.
-
The whole
comp.*verb catalogue is registered, and a registry test keeps it exact. -
Window titles are shaped with cosmic-text over the apps' embedded faces, so they match the apps' type and need no fonts installed.