| Age | Commit message (Collapse) | Author | Files | Lines |
|
Popup gains image, and the store calls an injected removeImage when an
entry is dismissed, evicted, replaced or expired, so a daemon-written
PNG does not outlive its balloon. The service decides what is
daemon-owned; the store only names the path.
NewStore now takes the callback as a third parameter, so the service
wires its removeImage in (unlinking only under ImagesDir) and the
existing call sites pass nil.
|
|
The hicolor fallback scanned <theme>/apps/<size>, but freedesktop themes
use <size>/apps, so hicolor never resolved. Both layouts are now
searched, and rasters are ranked by effective pixel size (N@2x is 2N)
with a deterministic name tie-break.
|
|
qt6ct's icon_theme is authoritative on this desktop, with the GTK3
setting and hicolor as fallbacks. The lookup prefers scalable, then the
largest raster, and follows the theme's Inherits chain, so an app that
passes a name instead of a path gets an icon.
|
|
The stride test was Height 1, so the second row and the padding beyond the
used pixels were never reached and rowstride was untested despite the
comment. It is now 2x2 with RowStride 12 and asserts a pixel in row 1,
which fails if the stride is ignored (verified by mutation). Add the
3-channel opaque encode and the short-data rejection, both explicit
requirements of the image-data contract.
|
|
image-data (and the deprecated icon_data) is the (iiibiiay) struct; the
PNG encoder honours rowstride and both 3- and 4-channel data. The path
and data readers are pure, so the service can apply the spec's priority
and the store stays free of image handling.
|
|
The spec says -1 means the server decides and 0 means never; the code had
them swapped, so a plain notify-send (libnotify's default is -1) became
immortal and an explicit never (-t 0) got the urgency default. Found by the
live handover test, where notify-send produced expires 0.
The urgency default is unchanged: low and normal 10s, critical never.
|
|
Remove the temp file on every writeJSON failure path, not just the write
and close ones. A failed rename left the temp behind with no cleanup.
Surface the list path's unmarshal error instead of printing null with exit
0, and make a non-positive history limit print an empty array rather than
falling through to the whole ring.
Assert the evicted item actually lands in the history ring, so the "files
to history" half of eviction is covered rather than just its signal.
Add the missing README License section beside the GPLv2 text and headers.
|
|
The private interface carries what the spec cannot: close-all, invoke action
and clear history. notifyctl reads the published files for list and history,
because the files are the interface, and uses D-Bus only for the mutations.
|
|
|
|
Notify assigns an id and publishes; a replaces_id or stack tag reuses the id.
CloseNotification closes with reason 3. The daemon claims
org.freedesktop.Notifications and exits non-zero if it cannot, which is what
happens while dunst still holds it.
|
|
Both files are written whole through a temporary file and a rename, so a
renderer never reads a half-written value. An empty queue is [] rather than
null, because the renderer parses it as an array.
|
|
The store holds the live queue and the history ring as pure state. Expiry
tells the client and keeps the entry inert; dismissal and eviction file it
in history. Replacing reuses the id and emits nothing.
|
|
|
|
The policy functions are pure so they are tested without a bus: urgency from
the hints, the timeout rule with its urgency defaults, the two stack tag
spellings, and the action pair parse.
|