| Age | Commit message (Collapse) | Author | Files | Lines |
|
Two bugs that both looked like the panel ignoring input.
Escape did nothing despite the panel saying it closes. Keys.onEscapePressed
was on the PanelWindow, and key events go to a focused item rather than to
a window, so it never fired. A filled Item with focus: true now catches it
and reclaims focus when a delete confirmation's TextInput releases it.
The shell also exited whenever the drawer was closed, which is most of the
time: with the LazyLoader inactive there is no visible window, and
quickshell quits at that point. Since the keybind reaches the panel over
IPC, that left the key talking to nothing. Same 1x1 transparent keepalive
window as volume-osd, for the same reason.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
|
|
Both components had their own copy of the Macchiato colours, and the
second copy appeared the moment there was a second component. Editing the
palette meant editing it in as many places as there were shells, and they
would have drifted.
They now read ~/.cache/wal/udt-palette.qml, which udt-accent generates
from unified-desktop-theme's palette.rasi. The file is watched, so a
palette change reaches a running shell in place, the same way the accent
already did.
What is left in Theme.qml is a fallback, used before the file has been
read and on a machine where unified-desktop-theme is not installed, which
is what keeps each directory runnable on its own.
The file is parsed rather than imported: a generated QML singleton cannot
be imported without a qmldir beside it, and the wal cache has no reason
to carry one.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
|
|
A top drawer on the secondary monitor showing every libvirt machine: its
state, live statistics while it runs, the actions that make sense in that
state, and the snapshot list. SUPER+v toggles it over IPC.
This replaces the menu half of rofi-qemu.sh, which is still in ~/bin but
no longer bound. A dmenu row can only ever be a string, so the script
could not show what a machine is actually doing, and the snapshots it
could create were never listed anywhere.
Everything shells out to virsh, the same commands the script used, so
there is no libvirt binding and no new dependency. State changes arrive
by `virsh event --all --loop` rather than polling, which means a machine
started from virt-manager or the CLI updates the drawer too. Statistics
do need a 2 second timer, but it only runs while the drawer is open.
Memory, filesystem usage and the address come from qemu-guest-agent, so
they are absent for the first seconds after boot and on any machine
without the agent. Those rows show a dash rather than falling back to
libvirt's own figures: balloon.current is memory allocated rather than
used and reads full forever, and block.allocation is qcow2 growth on the
host rather than usage inside the guest. Either would be quietly wrong.
Destructive actions are gated, which the rofi version did not do at all:
Delete VM requires the name typed, since it runs undefine with
--remove-all-storage and erases the disk image, and reset, force stop,
snapshot revert and snapshot delete each take a confirmation click.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
|