aboutsummaryrefslogtreecommitdiffstats
path: root/docs/superpowers/plans
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-15 14:06:08 +0200
committerDanilo M. <danix@danix.xyz>2026-09-15 14:06:08 +0200
commitee860b6a3e955bc0d625af18168dd079e93ca9e0 (patch)
tree86fb62453990ff27145190a53716ec0b3ee55122 /docs/superpowers/plans
parent18b2cffb1b7e6f8e35152898011c71288e871422 (diff)
downloadquickshell-ee860b6a3e955bc0d625af18168dd079e93ca9e0.tar.gz
quickshell-ee860b6a3e955bc0d625af18168dd079e93ca9e0.zip
docs: fix the expire_timeout direction in the spec and plan
The freedesktop spec says -1 means the server decides and 0 means never; the spec and plan had them reversed, which the shipped code inherited and the live handover test caught. Corrected to match the spec, libnotify's -1 default and dunst.
Diffstat (limited to 'docs/superpowers/plans')
-rw-r--r--docs/superpowers/plans/2026-09-15-notifyd.md24
1 files changed, 14 insertions, 10 deletions
diff --git a/docs/superpowers/plans/2026-09-15-notifyd.md b/docs/superpowers/plans/2026-09-15-notifyd.md
index 9a017d8..afb938f 100644
--- a/docs/superpowers/plans/2026-09-15-notifyd.md
+++ b/docs/superpowers/plans/2026-09-15-notifyd.md
@@ -140,10 +140,10 @@ func TestEffectiveTimeoutMS(t *testing.T) {
u Urgency
want int64
}{
- {"zero uses low default", 0, Low, 10_000},
- {"zero uses normal default", 0, Normal, 10_000},
- {"zero critical never", 0, Critical, 0},
- {"minus one never", -1, Normal, 0},
+ {"minus one uses low default", -1, Low, 10_000},
+ {"minus one uses normal default", -1, Normal, 10_000},
+ {"minus one critical never", -1, Critical, 0},
+ {"zero never", 0, Normal, 0},
{"explicit wins", 3_000, Normal, 3_000},
{"sub second exact", 1, Normal, 1},
}
@@ -228,8 +228,9 @@ const (
Critical Urgency = "critical"
)
-// DefaultTimeoutMS is the balloon lifetime for an urgency when the client sends
-// expire_timeout 0. Critical never expires, which is 0 here.
+// DefaultTimeoutMS is the balloon lifetime for an urgency when the client
+// leaves the choice to the server (expire_timeout -1). Critical never expires,
+// which is 0 here.
func DefaultTimeoutMS(u Urgency) int64 {
switch u {
case Low, Normal:
@@ -239,14 +240,17 @@ func DefaultTimeoutMS(u Urgency) int64 {
}
}
-// EffectiveTimeoutMS resolves the client's expire_timeout: 0 means the urgency
-// default, -1 means never, anything positive is milliseconds and wins.
+// EffectiveTimeoutMS resolves the client's expire_timeout per the freedesktop
+// spec: -1 means the server decides (the urgency default), 0 means never, and
+// anything positive is milliseconds and wins. The spec is precise about the
+// direction and libnotify's default is -1, so getting it backwards would make
+// every plain notify-send immortal.
func EffectiveTimeoutMS(expire int32, u Urgency) int64 {
switch {
case expire == -1:
- return 0
- case expire == 0:
return DefaultTimeoutMS(u)
+ case expire == 0:
+ return 0
default:
return int64(expire)
}