The hyprland IPC fixture was no longer used by the current test setup.
I removed the dead fixture so the test code reflects the actual execution path
and is easier to maintain.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Hyprland tests did not explicitly verify descriptor behavior on key failure
paths.
I added focused tests for missing instance signature and connect-failure paths
that assert file descriptor counts stay stable across repeated attempts.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Hyprland IPC had fd lifecycle risks on failure/shutdown paths and used a
spin-sleep listener model.
I initialized fd state defensively, tightened connect/close/shutdown handling,
moved to blocking read with newline framing, and added RAII-style fd cleanup in
socket1 reply paths.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
SafeSignal could queue events forever when worker threads emitted faster than
the main loop could consume, which risks memory growth and stale updates.
I added a queue cap with a drop-oldest policy so growth stays bounded under
burst load, plus a regression test that validates bounded delivery.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
SleeperThread concurrency paths needed stress coverage around wake/stop races.
I added a subprocess stress test that repeatedly interleaves wake_up() and
stop() and verifies the worker exits cleanly.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
SleeperThread control flags were shared across threads without consistent
synchronization.
I converted the run/signal flags to atomics and updated wait predicates and
lifecycle transitions to use explicit atomic loads/stores.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We needed a regression test for reassignment safety after lifecycle fixes.
I added a subprocess test that reassigns SleeperThread workers and verifies the
process exits normally instead of terminating.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Reassigning SleeperThread could replace a joinable std::thread and trigger
std::terminate.
I now stop and join any existing worker before reassignment, then reset control
state before starting the replacement worker.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
PR #4390 enabled millisecond intervals but changed image interval parsing so a missing interval could resolve to 1ms. That creates a hot update loop and can spike CPU and destabilize rendering in drawer/group setups (issue #4835).
Use explicit semantics: missing, null, non-numeric, or <=0 interval is treated as "once" (max sleep), while positive numeric values still support ms precision with a 1ms floor. This keeps the intended feature (sub-second polling when requested) without defaulting to busy looping.
Also align waybar-image(5) docs with runtime behavior.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Recently introduced for ISO 8601 calendar compatibility. But, lib
differences causing the explicit type to break freebsd.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
meson will skip building, if not needed, but we want to make sure we're
actually testing what we expect.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We aren't including the hover detection on the revealer, so when the
animation fires we fire the leave event which starts an infinite loop of
enter/leave while we watch boxes move back and forth.
Allows us to disable modules entirely when socket connection isn't
working. This is similar to how sway handles their socket connections
disabling modules. This supports a single waybar config for multiple
IPCs.
Gracefully handle lack of response from the IPC. If socket isn't
available, we already log the IPC isn't running. We dont need to crash
program just because we couldn't get responses. We can just return an
empty object.
I'd like to ignore some windows from having icons or empty space taken
on the bar. By filtering out empty repr we can supply rewrite rules that
will ignore them from being processed and showing an empty space or
default icon.