[Switched to devel where this belongs ihmo]
Ok, I think I understand the problem. Killing the beforelight client
doesn't free the root window property _MIT_SCREEN_SAVER_ID, so it's
still there when XScreenSaverGetRegistered() probes it. If the client
is dead XKillClient() will indeed generate an error.
The patch below fixes that, by ignoring the BadValue error, but it
still has a problem, since it can kill a random client started after
the 1st instance of beforelight was killed. Any ideas on how to avoid
that ?
Index: b4light.c
===================================================================
RCS file: /cvs/XF4/xc/programs/beforelight/b4light.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 b4light.c
--- b4light.c 19 Jan 2002 11:07:27 -0000 1.1.1.2
+++ b4light.c 15 Jan 2003 22:43:16 -0000
@@ -290,6 +290,7 @@
XID kill_id;
Atom kill_type;
int i;
+ int (*oldHandler)();
#if !defined(X_NOT_POSIX)
srand((int)time((time_t *)NULL));
@@ -324,9 +325,14 @@
&wm_delete_window, 1);
#endif
- if (XScreenSaverGetRegistered (display, screen, &kill_id, &kill_type))
+ oldHandler = XSetErrorHandler (ignoreError);
+ if (XScreenSaverGetRegistered (display, screen, &kill_id, &kill_type)) {
+ /* Try to clean up existing saver & resources */
XKillClient (display, kill_id);
-
+ XScreenSaverUnregister(display, screen);
+ }
+ XSync(display, FALSE);
+ XSetErrorHandler(oldHandler);
XScreenSaverSelectInput (display, root, ScreenSaverNotifyMask);
#ifdef NOTDEF
cmap = XCreateColormap (display, root, DefaultVisual (display, screen),
AllocNone);
Matthieu
_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/devel