361
xscreensaver_command_event_p (Display *dpy, XEvent *event, XPointer arg)
363
return (event->xany.type == PropertyNotify &&
364
event->xproperty.state == PropertyNewValue &&
365
event->xproperty.atom == XA_SCREENSAVER_RESPONSE);
361
370
xscreensaver_command_response (Display *dpy, Window window,
362
371
Bool verbose_p, Bool exiting_p,
363
372
char **error_ret)
365
int fd = ConnectionNumber (dpy);
376
memset(&tv, 0, sizeof(tv));
378
status = select (fd+1, &fds, 0, &fds, &tv);
385
sprintf (buf, "error waiting for reply");
386
*error_ret = strdup (buf);
390
sprintf (buf, "%s: error waiting for reply", progname);
395
else if (status == 0)
397
sprintf (err, "no response to command.");
399
*error_ret = strdup (err);
401
fprintf (stderr, "%s: %s\n", progname, err);
377
Bool got_event = False;
379
while (!(got_event = XCheckIfEvent(dpy, &event,
380
&xscreensaver_command_event_p, 0)) &&
388
sprintf (err, "no response to command.");
390
*error_ret = strdup (err);
392
fprintf (stderr, "%s: %s\n", progname, err);
401
unsigned long nitems, bytesafter;
402
unsigned char *msg = 0;
405
if (old_handler) abort();
406
old_handler = XSetErrorHandler (BadWindow_ehandler);
407
st2 = XGetWindowProperty (dpy, window,
408
XA_SCREENSAVER_RESPONSE,
411
&type, &format, &nitems, &bytesafter,
414
XSetErrorHandler (old_handler);
422
sprintf (err, "xscreensaver window unexpectedly deleted.");
425
*error_ret = strdup (err);
427
fprintf (stderr, "%s: %s\n", progname, err);
432
if (st2 == Success && type != None)
407
XNextEvent (dpy, &event);
408
if (event.xany.type == PropertyNotify &&
409
event.xproperty.state == PropertyNewValue &&
410
event.xproperty.atom == XA_SCREENSAVER_RESPONSE)
415
unsigned long nitems, bytesafter;
416
unsigned char *msg = 0;
419
if (old_handler) abort();
420
old_handler = XSetErrorHandler (BadWindow_ehandler);
421
st2 = XGetWindowProperty (dpy, window,
422
XA_SCREENSAVER_RESPONSE,
425
&type, &format, &nitems, &bytesafter,
428
XSetErrorHandler (old_handler);
436
sprintf (err, "xscreensaver window unexpectedly deleted.");
439
*error_ret = strdup (err);
441
fprintf (stderr, "%s: %s\n", progname, err);
446
if (st2 == Success && type != None)
448
if (type != XA_STRING || format != 8)
450
sprintf (err, "unrecognized response property.");
453
*error_ret = strdup (err);
455
fprintf (stderr, "%s: %s\n", progname, err);
457
if (msg) XFree (msg);
460
else if (!msg || (msg[0] != '+' && msg[0] != '-'))
462
sprintf (err, "unrecognized response message.");
465
*error_ret = strdup (err);
467
fprintf (stderr, "%s: %s\n", progname, err);
469
if (msg) XFree (msg);
474
int ret = (msg[0] == '+' ? 0 : -1);
475
sprintf (err, "%s: %s\n", progname, (char *) msg+1);
478
*error_ret = strdup (err);
479
else if (verbose_p || ret != 0)
480
fprintf ((ret < 0 ? stderr : stdout), "%s\n", err);
434
if (type != XA_STRING || format != 8)
436
sprintf (err, "unrecognized response property.");
439
*error_ret = strdup (err);
441
fprintf (stderr, "%s: %s\n", progname, err);
443
if (msg) XFree (msg);
446
else if (!msg || (msg[0] != '+' && msg[0] != '-'))
448
sprintf (err, "unrecognized response message.");
451
*error_ret = strdup (err);
453
fprintf (stderr, "%s: %s\n", progname, err);
455
if (msg) XFree (msg);
460
int ret = (msg[0] == '+' ? 0 : -1);
461
sprintf (err, "%s: %s\n", progname, (char *) msg+1);
464
*error_ret = strdup (err);
465
else if (verbose_p || ret != 0)
466
fprintf ((ret < 0 ? stderr : stdout), "%s\n", err);
474
return -1; /* warning suppression: not actually reached */