"xdg-screensaver suspend" Can Cause Screen Burn-in When Display Never Sleeps Anymore After An Application Used "xdg-screensaver suspend" And was Then Killed.
"xdg-screensaver suspend" was designed to stop when the window it monitored vanished, and thus allowing the ScreenSaver to resume and allowing the monitor/display to go back to sleep when the session became idle.
However, monitor-window-and-quit functionality is not working, causing displays to never sleep if an application using "xdg-screensaver suspend" was killed.
The effect of this bug is, potentially, very bad, so I'm hoping that this issue can be addressed.
I don't know how this bug happened, but I can speculate a few possibilities:
(1) The "monitor-window-and-quit" functionality was initially working during the initial development, but forking to background xdg-screensaver process feature was added later (pure speculation as I don't know have code history) and since now the xdg-screensaver is no longer a child process, it is not killed when the application exited.
(2) "xprop -id <window id> -spy" used to receive window event and quitted when the monitored window vanished. xprop is no longer subscribing to the window event.
If this is the case, maybe xprop.c's:
XSelectInput(dpy, target_win, PropertyChangeMask);
needs to be changed to:
XSelectInput(dpy, target_win, StructureNotifyMask | PropertyChangeMask);
for it to be notified about the window deletion!
(Just vague repro. steps for now.)
1. Create a HelloWorld GUI application.
2. Calls "xdg-screensaver suspend <The App.'s Main Window ID>" from the application.
3. Kill the application.
4. Observe that xdg-screensaver and xprop don't quit and the display can suffer burn-in.