aboutsummaryrefslogtreecommitdiffstats
path: root/notifications/NotificationBalloon.qml
AgeCommit message (Collapse)AuthorFilesLines
12 hoursfix(notifications): check every img src and uncache previewHEADmasterDanilo M.1-0/+1
The sanitizer matched the first \bsrc anywhere in the tag, so a data-src="file:///tmp/decoy" before a remote src won the match and kept the whole tag while Qt, which ignores data-src, fetched the remote image. Scan every src assignment in the tag and keep it only if all of them are local. Also set cache: false on the balloon preview, since the daemon overwrites the same path on a replace and QQuickPixmapCache keys on URL, so a replaced notification could show the previous image.
12 hoursfeat(notifications): strip remote inline image sourcesDanilo M.1-1/+1
A notification is untrusted input. Inline <img> now renders only for local sources; an http(s) source is removed before the RichText body is shown, so a remote sender cannot make the shell fetch a URL. The row and the balloon share the one sanitizer in the Notify singleton.
12 hoursfeat(notifications): draw the content image in the balloonDanilo M.1-1/+25
The daemon now publishes an image path; the balloon shows it below the text, scaled to the balloon width with a 240px cap. A daemon without the field leaves it hidden, so the renderer and the daemon can ship in either order.
13 hoursfeat(desktop): make the drawer notifications readableDanilo M.1-4/+5
Each row shows when the notification appeared ("Sep 15 14:32", from created), sits on its own rounded card with space between rows instead of reading as one list, and uses the balloon's 16/18/16 sizing rather than 13/11. The close target grows to a 32px hit area in the row and the balloon, since a 20px box was hard to hit.
15 hoursfix(notifications): apply final review fixesDanilo M.1-1/+1
Mirror the balloon's right-click close-all on the drawer row: the spec says the gestures are identical in both forms, and a right-click on a row previously did nothing. The right-button branch precedes the live guard so it behaves the same on history rows. Stop importing the Status singleton into the notification shell. Referencing it instantiated it, and its onPresentationChanged writes status.dnd and runs breaktimer.sh, so a read-only consumer was writing state and shelling out on every presentation toggle, and doubled the dndBeforePresentation race. Notify now reads "/run/user/<uid>/status.dnd" directly through a FileView, the same convention as the notifyd files; a missing file means off. AGENTS.md named Drawer.qml as the drawer's reserved space; it is desktop/NotificationList.qml.
16 hoursfix(notifications): keep the balloon model stable across ticksDanilo M.1-1/+19
The Repeater model was a fresh filter of Notify.queue on every 250ms tick because the filter read now, so Qt Quick recreated every balloon delegate four times a second, reloading icons and resetting hover. Model is now Notify.queue itself, and each balloon drops itself at expiry through its own visible binding, driven by the shared tick. Removing required from the balloon's properties is part of the same fix: a required property makes QML create the delegate in its own context, where modelData and index are undefined, so notification: modelData silently arrived undefined once a live queue item was actually drawn.
16 hoursfeat(notifications): add the balloon shellDanilo M.1-0/+116
Reads the daemon's queue through the Notify singleton and draws a balloon per live notification, bottom-right of DP-1 over conky. Suppression is here, not in the daemon: dnd withholds low and normal, snooze withholds all, and the drawer still lists them.