-
feat(midiviz): a permanent lens — own app id, all desktops, CC numbers · d1dbae36
PLN, after the first look at it: "the midi mon is beautiful! so lets streamline, now it should always oppen, with always on top, all desktops displayed when i switch from desk 1 to 2 3 4" -- and then "would help to see the chan num: 33 or 53 etc so as i press i can wire". Always-on-top needed no change: the WindowStaysOnTopHint at :293 is unconditional and KWin honours it. The other three did. IDENTITY. The Wayland app_id comes from desktopFileName, not applicationName, so KWin saw resourceClass "python3" -- verified by querying workspace.windowList(), not assumed. Two consequences: a window rule keyed on the app id would have matched EVERY python GUI on the box, and launchers.focus_window("midimon") could never match, so clicking the Bridge/tray button on an already-running lens silently did nothing. Set desktopFileName + ship a .desktop (which also silences the portal's "App info not found" warning), and point the launcher's focus at "midiviz". ALL DESKTOPS is a compositor property, not a Qt flag, so it lives in a KWin rule (~/.config/kwinrulesrc, wmclass=midiviz, desktops= empty with desktopsrule=2/Force). Declarative on purpose: it applies at map time, every time, with no post-launch retry racing the window's existence. Verified on the live window rather than inferred from the key names -- onAllDesktops=true keepAbove=true. CC NUMBERS, two layers. Per-cell dim decimals are the map you consult while wiring; they render in their own pass because f_micro is already current there, and a per-cell setFont would add 96 font switches a frame to a path this file keeps to a counted number of drawText calls. They are skipped when a cell is too narrow to hold them beside the value. And the header now prints the last-touched control as ^53=127 -- decimal, with the corpus's caret, so it is the literal token to type into a pattern instead of a hex value to convert mid-set. Autostart as a systemd --user unit bound to graphical-session.target, not default.target: it needs WAYLAND_DISPLAY/XDG_RUNTIME_DIR imported into the user manager first. Registered "login" in rig_units.py. Paint path exercised by the offscreen selftest: 116 paints, PASS.PLN (Algolia) authoredd1dbae36
×