diff options
Diffstat (limited to 'nx-X11/lib/Xss')
-rw-r--r-- | nx-X11/lib/Xss/Imakefile | 47 | ||||
-rw-r--r-- | nx-X11/lib/Xss/XScrnSaver.c | 442 | ||||
-rw-r--r-- | nx-X11/lib/Xss/Xss-def.cpp | 14 | ||||
-rw-r--r-- | nx-X11/lib/Xss/Xss.man | 328 |
4 files changed, 831 insertions, 0 deletions
diff --git a/nx-X11/lib/Xss/Imakefile b/nx-X11/lib/Xss/Imakefile new file mode 100644 index 000000000..bd7f7a8fc --- /dev/null +++ b/nx-X11/lib/Xss/Imakefile @@ -0,0 +1,47 @@ +XCOMM $XFree86: xc/lib/Xss/Imakefile,v 3.5 2003/10/26 18:59:49 herrb Exp $ +#define DoNormalLib NormalLibXss +#define DoSharedLib SharedLibXss +#define DoExtraLib SharedLibXss +#define DoDebugLib DebugLibXss +#define DoProfileLib ProfileLibXss +#define LibName Xss +#define SoRev SOXSSREV +#define LibHeaders NO + +#include <Threads.tmpl> + +#ifdef SharedXssReqs +REQUIREDLIBS = SharedXssReqs +#endif + +SCRNSAVSRC = XScrnSaver.c +SCRNSAVOBJ = XScrnSaver.o + +#if Malloc0ReturnsNull +ALLOC_DEFINES = -DMALLOC_0_RETURNS_NULL +#endif + + DEFINES = $(ALLOC_DEFINES) + SRCS = $(SCRNSAVSRC) + OBJS = $(SCRNSAVOBJ) + LINTLIBS = $(LINTXLIB) + +#define IncludeSharedObjectInNormalLib + +MANSUFFIX=$(LIBMANSUFFIX) +InstallManPage(LibName,$(LIBMANDIR)) +#if ExpandManNames +InstallManPageAliases(LibName,$(LIBMANDIR), XScreenSaverQueryExtension \ @@\ + XScreenSaverQueryVersion \ @@\ + XScreenSaverAllocInfo \ @@\ + XScreenSaverQueryInfo \ @@\ + XScreenSaverSelectInput \ @@\ + XScreenSaverSetAttributes \ @@\ + XScreenSaverUnsetAttributes \ @@\ + XScreenSaverRegister \ @@\ + XScreenSaverUnregister \ @@\ + XScreenSaverGetRegistered) +#endif +#include <Library.tmpl> + +DependTarget() diff --git a/nx-X11/lib/Xss/XScrnSaver.c b/nx-X11/lib/Xss/XScrnSaver.c new file mode 100644 index 000000000..3727ae4f6 --- /dev/null +++ b/nx-X11/lib/Xss/XScrnSaver.c @@ -0,0 +1,442 @@ +/* + * $XConsortium: XScrnSaver.c,v 1.5 94/04/17 20:59:35 rws Exp $ + * +Copyright (c) 1992 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + * + * Author: Keith Packard, MIT X Consortium + */ +/* $XFree86: xc/lib/Xss/XScrnSaver.c,v 3.1 2001/10/28 03:32:40 tsi Exp $ */ + +#define NEED_EVENTS +#define NEED_REPLIES +#include <X11/Xlibint.h> +#include <X11/Xutil.h> +#include <X11/extensions/Xext.h> +#include <X11/extensions/extutil.h> +#include <X11/extensions/saverproto.h> +#include <X11/extensions/scrnsaver.h> + + +static XExtensionInfo _screen_saver_info_data; +static XExtensionInfo *screen_saver_info = &_screen_saver_info_data; +static /* const */ char *screen_saver_extension_name = ScreenSaverName; + +#define ScreenSaverCheckExtension(dpy,i,val) \ + XextCheckExtension (dpy, i, screen_saver_extension_name, val) +#define ScreenSaverSimpleCheckExtension(dpy,i) \ + XextSimpleCheckExtension (dpy, i, screen_saver_extension_name) + +static int close_display(); +static Bool wire_to_event(); +static Status event_to_wire(); +static /* const */ XExtensionHooks screen_saver_extension_hooks = { + NULL, /* create_gc */ + NULL, /* copy_gc */ + NULL, /* flush_gc */ + NULL, /* free_gc */ + NULL, /* create_font */ + NULL, /* free_font */ + close_display, /* close_display */ + wire_to_event, /* wire_to_event */ + event_to_wire, /* event_to_wire */ + NULL, /* error */ + NULL, /* error_string */ +}; + +static XEXT_GENERATE_FIND_DISPLAY (find_display, screen_saver_info, + screen_saver_extension_name, + &screen_saver_extension_hooks, + ScreenSaverNumberEvents, NULL) + +static XEXT_GENERATE_CLOSE_DISPLAY (close_display, screen_saver_info) + + +static Bool wire_to_event (dpy, re, event) + Display *dpy; + XEvent *re; + xEvent *event; +{ + XExtDisplayInfo *info = find_display (dpy); + XScreenSaverNotifyEvent *se; + xScreenSaverNotifyEvent *sevent; + + ScreenSaverCheckExtension (dpy, info, False); + + switch ((event->u.u.type & 0x7f) - info->codes->first_event) { + case ScreenSaverNotify: + se = (XScreenSaverNotifyEvent *) re; + sevent = (xScreenSaverNotifyEvent *) event; + se->type = sevent->type & 0x7f; + se->serial = _XSetLastRequestRead(dpy,(xGenericReply *) event); + se->send_event = (sevent->type & 0x80) != 0; + se->display = dpy; + se->window = sevent->window; + se->window = sevent->root; + se->state = sevent->state; + se->kind = sevent->kind; + se->forced = True; + if (sevent->forced == xFalse) + se->forced = False; + se->time = sevent->timestamp; + return True; + } + return False; +} + +static Status event_to_wire (dpy, re, event) + Display *dpy; + XEvent *re; + xEvent *event; +{ + XExtDisplayInfo *info = find_display (dpy); + XScreenSaverNotifyEvent *se; + xScreenSaverNotifyEvent *sevent; + + ScreenSaverCheckExtension (dpy, info, 0); + + switch ((re->type & 0x7f) - info->codes->first_event) { + case ScreenSaverNotify: + se = (XScreenSaverNotifyEvent *) re; + sevent = (xScreenSaverNotifyEvent *) event; + sevent->type = se->type | (se->send_event ? 0x80 : 0); + sevent->sequenceNumber = se->serial & 0xffff; + sevent->root = se->root; + sevent->window = se->window; + sevent->state = se->state; + sevent->kind = se->kind; + sevent->forced = xFalse; + if (se->forced == True) + sevent->forced = xTrue; + sevent->timestamp = se->time; + return 1; + } + return 0; +} + +/**************************************************************************** + * * + * ScreenSaver public interfaces * + * * + ****************************************************************************/ + +Bool XScreenSaverQueryExtension (dpy, event_basep, error_basep) + Display *dpy; + int *event_basep, *error_basep; +{ + XExtDisplayInfo *info = find_display (dpy); + + if (XextHasExtension(info)) { + *event_basep = info->codes->first_event; + *error_basep = info->codes->first_error; + return True; + } else { + return False; + } +} + + +Status XScreenSaverQueryVersion(dpy, major_versionp, minor_versionp) + Display *dpy; + int *major_versionp, *minor_versionp; +{ + XExtDisplayInfo *info = find_display (dpy); + xScreenSaverQueryVersionReply rep; + register xScreenSaverQueryVersionReq *req; + + ScreenSaverCheckExtension (dpy, info, 0); + + LockDisplay (dpy); + GetReq (ScreenSaverQueryVersion, req); + req->reqType = info->codes->major_opcode; + req->saverReqType = X_ScreenSaverQueryVersion; + req->clientMajor = ScreenSaverMajorVersion; + req->clientMinor = ScreenSaverMinorVersion; + if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { + UnlockDisplay (dpy); + SyncHandle (); + return 0; + } + *major_versionp = rep.majorVersion; + *minor_versionp = rep.minorVersion; + UnlockDisplay (dpy); + SyncHandle (); + return 1; +} + +XScreenSaverInfo *XScreenSaverAllocInfo () +{ + return (XScreenSaverInfo *) Xmalloc (sizeof (XScreenSaverInfo)); +} + +Status XScreenSaverQueryInfo (dpy, drawable, saver_info) + Display *dpy; + Drawable drawable; + XScreenSaverInfo *saver_info; +{ + XExtDisplayInfo *info = find_display (dpy); + xScreenSaverQueryInfoReply rep; + register xScreenSaverQueryInfoReq *req; + + ScreenSaverCheckExtension (dpy, info, 0); + + LockDisplay (dpy); + GetReq (ScreenSaverQueryInfo, req); + req->reqType = info->codes->major_opcode; + req->saverReqType = X_ScreenSaverQueryInfo; + req->drawable = drawable; + if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { + UnlockDisplay (dpy); + SyncHandle (); + return 0; + } + UnlockDisplay (dpy); + SyncHandle (); + saver_info->window = rep.window; + saver_info->state = rep.state; + saver_info->kind = rep.kind; + saver_info->til_or_since = rep.tilOrSince; + saver_info->idle = rep.idle; + saver_info->eventMask = rep.eventMask; + return 1; +} + +void XScreenSaverSelectInput (dpy, drawable, mask) + register Display *dpy; + Drawable drawable; + unsigned long mask; +{ + XExtDisplayInfo *info = find_display (dpy); + register xScreenSaverSelectInputReq *req; + + ScreenSaverSimpleCheckExtension (dpy, info); + + LockDisplay (dpy); + GetReq (ScreenSaverSelectInput, req); + req->reqType = info->codes->major_opcode; + req->saverReqType = X_ScreenSaverSelectInput; + req->drawable = drawable; + req->eventMask = mask; + UnlockDisplay (dpy); + SyncHandle (); +} + +static void +XScreenSaverProcessWindowAttributes (dpy, req, valuemask, attributes) + register Display *dpy; + xChangeWindowAttributesReq *req; + register unsigned long valuemask; + register XSetWindowAttributes *attributes; + { + unsigned long values[32]; + register unsigned long *value = values; + unsigned int nvalues; + + if (valuemask & CWBackPixmap) + *value++ = attributes->background_pixmap; + + if (valuemask & CWBackPixel) + *value++ = attributes->background_pixel; + + if (valuemask & CWBorderPixmap) + *value++ = attributes->border_pixmap; + + if (valuemask & CWBorderPixel) + *value++ = attributes->border_pixel; + + if (valuemask & CWBitGravity) + *value++ = attributes->bit_gravity; + + if (valuemask & CWWinGravity) + *value++ = attributes->win_gravity; + + if (valuemask & CWBackingStore) + *value++ = attributes->backing_store; + + if (valuemask & CWBackingPlanes) + *value++ = attributes->backing_planes; + + if (valuemask & CWBackingPixel) + *value++ = attributes->backing_pixel; + + if (valuemask & CWOverrideRedirect) + *value++ = attributes->override_redirect; + + if (valuemask & CWSaveUnder) + *value++ = attributes->save_under; + + if (valuemask & CWEventMask) + *value++ = attributes->event_mask; + + if (valuemask & CWDontPropagate) + *value++ = attributes->do_not_propagate_mask; + + if (valuemask & CWColormap) + *value++ = attributes->colormap; + + if (valuemask & CWCursor) + *value++ = attributes->cursor; + + req->length += (nvalues = value - values); + + nvalues <<= 2; /* watch out for macros... */ + Data32 (dpy, (long *) values, (long)nvalues); + + } + +void XScreenSaverSetAttributes (dpy, drawable, x, y, width, height, + border_width, depth, class, visual, + valuemask, attributes) + Display* dpy; + Drawable drawable; + int x; + int y; + unsigned int width; + unsigned int height; + unsigned int border_width; + int depth; + unsigned int class; + Visual * visual; + unsigned long valuemask; + XSetWindowAttributes *attributes; +{ + XExtDisplayInfo *info = find_display (dpy); + register xScreenSaverSetAttributesReq *req; + + ScreenSaverSimpleCheckExtension (dpy, info); + + LockDisplay (dpy); + GetReq (ScreenSaverSetAttributes, req); + req->reqType = info->codes->major_opcode; + req->saverReqType = X_ScreenSaverSetAttributes; + req->drawable = drawable; + req->x = x; + req->y = y; + req->width = width; + req->height = height; + req->borderWidth = border_width; + req->c_class = class; + req->depth = depth; + if (visual == CopyFromParent) + req->visualID = CopyFromParent; + else + req->visualID = visual->visualid; + /* abuse an Xlib internal interface - is this legal for us? */ + if ((req->mask = valuemask)) + XScreenSaverProcessWindowAttributes (dpy, + (xChangeWindowAttributesReq *)req, + valuemask, attributes); + UnlockDisplay (dpy); + SyncHandle (); +} + + +void XScreenSaverUnsetAttributes (dpy, drawable) + register Display *dpy; + Drawable drawable; +{ + XExtDisplayInfo *info = find_display (dpy); + register xScreenSaverUnsetAttributesReq *req; + + ScreenSaverSimpleCheckExtension (dpy, info); + + LockDisplay (dpy); + GetReq (ScreenSaverUnsetAttributes, req); + req->reqType = info->codes->major_opcode; + req->saverReqType = X_ScreenSaverUnsetAttributes; + req->drawable = drawable; + UnlockDisplay (dpy); + SyncHandle (); +} + + +Status XScreenSaverRegister (dpy, screen, xid, type) + Display *dpy; + int screen; + XID xid; + Atom type; +{ + Atom prop; + unsigned long ul; + + prop = XInternAtom (dpy, ScreenSaverPropertyName, False); + if (!prop) + return 0; + + ul = (unsigned long) xid; + XChangeProperty (dpy, RootWindow(dpy,screen), prop, type, 32, + PropModeReplace, (unsigned char *) &ul, 1); + return 1; +} + + + +Status XScreenSaverUnregister (dpy, screen) + Display *dpy; + int screen; +{ + Atom prop; + + prop = XInternAtom (dpy, ScreenSaverPropertyName, False); + if (!prop) + return 0; + + XDeleteProperty (dpy, RootWindow(dpy,screen), prop); + return 1; +} + + + +Status XScreenSaverGetRegistered (dpy, screen, xid, type) + Display *dpy; + int screen; + XID *xid; + Atom *type; +{ + Atom actual_type = None; + int actual_format; + unsigned long nitems, bytesafter; + unsigned long *ulp = (unsigned long *) 0; + Atom prop; + int retval = 0; + + prop = XInternAtom (dpy, ScreenSaverPropertyName, False); + if (!prop) + return retval; + + if (XGetWindowProperty (dpy, RootWindow(dpy,screen), prop, 0L, 1L, False, + AnyPropertyType, &actual_type, &actual_format, + &nitems, &bytesafter, (unsigned char **) &ulp) + != Success) + return retval; + + if (ulp) { + if (actual_format == 32) { + *xid = (XID) ulp[0]; + *type = actual_type; + retval = 1; + } + XFree ((char *) ulp); + } + return retval; +} diff --git a/nx-X11/lib/Xss/Xss-def.cpp b/nx-X11/lib/Xss/Xss-def.cpp new file mode 100644 index 000000000..60d529cf1 --- /dev/null +++ b/nx-X11/lib/Xss/Xss-def.cpp @@ -0,0 +1,14 @@ +LIBRARY Xss +EXPORTS + XScreenSaverQueryExtension + XScreenSaverQueryVersion + XScreenSaverAllocInfo + XScreenSaverQueryInfo + XScreenSaverSelectInput + XScreenSaverSetAttributes + XScreenSaverUnsetAttributes + XScreenSaverRegister + XScreenSaverUnregister + XScreenSaverGetRegistered + +/* $XFree86: xc/lib/Xss/Xss-def.cpp,v 1.1 2000/08/09 23:40:13 dawes Exp $ */ diff --git a/nx-X11/lib/Xss/Xss.man b/nx-X11/lib/Xss/Xss.man new file mode 100644 index 000000000..fa1545241 --- /dev/null +++ b/nx-X11/lib/Xss/Xss.man @@ -0,0 +1,328 @@ +.\" +.\" $XFree86: xc/lib/Xss/Xss.man,v 1.1 2003/10/26 19:00:24 herrb Exp $ +.\" $XdotOrg: xc/lib/Xss/Xss.man,v 1.2 2004/04/23 18:43:51 eich Exp $ +.\" +.\" Copyright (C) 2003 The XFree86 Project, Inc. All Rights Reserved. +.\" +.\" Permission is hereby granted, free of charge, to any person obtaining +.\" a copy of this software and associated documentation files (the +.\" "Software"), to deal in the Software without restriction, including +.\" without limitation the rights to use, copy, modify, merge, publish, +.\" distribute, sublicense, and/or sell copies of the Software, and to +.\" permit persons to whom the Software is furnished to do so, subject to +.\" the following conditions: +.\" +.\" The above copyright notice and this permission notice shall be +.\" included in all copies or substantial portions of the Software. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +.\" IN NO EVENT SHALL THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES +.\" OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.\" +.\" Except as contained in this notice, the name of the XFree86 Project +.\" shall not be used in advertising or otherwise to promote the sale, use +.\" or other dealings in this Software without prior written authorization +.\" from the XFree86 Project. +.\" +.TH XScreenSaver __libmansuffix__ __vendorversion__ +.SH NAME +XScreenSaver \- X11 Screen Saver extension client library +.SH SYNOPSIS +.B #include <X11/extension/scrnsaver.h> +.PP +.nf +.ta .5i 2i +typedef struct { + Window window; /\(** screen saver window */ + int state; /\(** ScreenSaver{Off,On,Disabled} */ + int kind; /\(** ScreenSaver{Blanked,Internal,External} */ + unsigned long til_or_since; /\(** milliseconds */ + unsigned long idle; /\(** milliseconds */ + unsigned long event_mask; /\(** events */ +.br +} XScreenSaverInfo; + +typedef struct { + int type; /\(** of event */ + unsigned long serial; /\(** # of last request processed by server */ + Bool send_event; /\(** true if this came frome a SendEvent request */ + Display *display; /\(** Display the event was read from */ + Window window; /\(** screen saver window */ + Window root; /\(** root window of event screen */ + int state; /\(** ScreenSaver{Off,On,Cycle} */ + int kind; /\(** ScreenSaver{Blanked,Internal,External} */ + Bool forced; /\(** extents of new region */ + Time time; /\(** event timestamp */ +.br +} XScreenSaverNotifyEvent; +.fi +.HP +Bool XScreenSaverQueryExtension(Display *\fIdpy\fP, +int *\fIevent_basep\fP, int *\fIerror_basep\fP\^); +.HP +Status XScreenSaverQueryVersion(Display *\fIdpy\fP, int *\fImajor_versionp\fP, +int *\fIminor_versionp\fP\^); +.HP +XScreenSaverInfo *XScreenSaverAllocInfo(\^void\^); +.HP +Status XScreenSaverQueryInfo(\^Display *\fIdpy\fP, Drawable \fIdrawable\fP, +XScreenSaverInfo *\fIsaver_info\fP\^); +.HP +void XScreenSaverSelectInput(Display *\fIdpy\fP, Drawable \fIdrawable\fP, +unsigned long \fImask\fp\^); +.HP +void XScreenSaverSetAttributes(Display *\fIdpy\fP, Drawable \fIdrawable\fP, +int \fIx\fP, +int \fIy\fP, +unsigned int \fIwidth\fP, +unsigned int \fIheight\fP, +unsigned int \fIborder_width\fP, +int \fIdepth\fP, +unsigned int \fIclass\fP, +Visual *\fIvisual\fP, +unsigned long \fIvaluemask\fP, +XSetWindowAttributes *\fIattributes\fP\^); +.HP +void XScreenSaverUnsetAttributes(Display *\fIdpy\fP, +Drawable \fIdrawable\fP\^); +.HP +void XScreenSaverSaverRegister(Display *\fIdpy\fP, int \fIscreen\fP, +XID \fIxid\fP, Atom \fItype\fP\^); +.HP +Status XScreenSaverUnregister(Display *\fIdpy\fP, int \fIscreen\fP\^); +.HP +Status XScreenSaverGetRegistered(Display *\fIdpy\fP, int \fIscreen\fP, +XID *\fIxid\fP, Atom *\fItype\fP\^); +.PP +.SH DESCRIPTION +The X Window System provides support for changing the image on a +display screen after a user-settable period of inactivity to avoid +burning the cathode ray tube phosphors. +However, no interfaces are provided for the user to control the image +that is drawn. +This extension allows an external ``screen saver'' client to detect +when the alternate image is to be displayed and to provide the +graphics. +.PP +Current X server implementations typically provide at least one form of +``screen saver'' image. +Historically, this has been a copy of the X logo drawn against the +root background pattern. +However, many users have asked for the mechanism to allow them to +write screen saver programs that provide capabilities similar to those +provided by other window systems. +In particular, such users often wish to be able to display corporate +logos, instructions on how to reactivate the screen, and automatic +screen-locking utilities. +This extension provides a means for writing such clients. +.SS Assumptions +This extension exports the notion of a special screen saver window that is +mapped above all other windows on a display. +This window has the \fIoverride-redirect\fP attribute set so that it +is not subject to manipulation by the window manager. +Furthermore, the X identifier for the window is never returned by +\fBQueryTree\fP requests on the root window, so it is typically not +visible to other clients. +.PP +.B XScreenSaverQueryExtension +returns +.B True +if the +.I XScreenSaver +extension is available on the given display. +A client must call +.B XScreenSaverQueryExtension +before calling any other XScreenSaver function in order +to negotiate a compatible protocol version; otherwise the client will +get undefined behavior (XScreenSaver may or may not work). +.PP +If the extension is supported, the event number for +.I ScreenSaverNotify +events is returned in the value pointed to by \fIevent_base\fP. +Since no additional errors are defined by this extension, the results +of \fIerror_base\fP are not defined. +.PP +.B XScreenSaverQueryVersion +returns +.B True +if the request succeeded; the values of the major and minor protocol +versions supported by the server are returned in +.I major_versionp +and +.I minor_versionp . +.PP +.B XScreenSaverAllocInfo +allocates and returns an \fBXScreenSaverInfo\fP structure +for use in calls to \fBXScreenSaverQueryInfo\fP. +All fields in the structure are initialized to zero. +If insufficient memory is available, NULL is returned. +The results of this routine can be released using \fIXFree\fP. +.PP +.B XScreenSaverQueryInfo +returns information about the current state of the +screen server in \fIsaver_info\fP and a non-zero value is +returned. +If the extension is not supported, \fIsaver_info\fP is not changed and 0 +is returned. +.br +The \fIstate\fP field specifies whether or not the screen saver is currently +active and how the \fItil-or-since\fP value should be interpreted: +.TP 4 +.I Off +The screen is not currently being saved; \fItil-or-since\fP +specifies the number of milliseconds until the screen saver is expected to +activate. +.TP 4 +.I On +The screen is currently being saved; \fItil-or-since\fP specifies +the number of milliseconds since the screen saver activated. +.TP 4 +.I Disabled +The screen saver is currently disabled; \fItil-or-since\fP is zero. +.br +The \fIkind\fP field specifies the mechanism that either is currently being +used or would have been were the screen being saved: +.TP 4 +.I Blanked +The video signal to the display monitor was disabled. +.TP 4 +.I Internal +A server-dependent, built-in screen saver image was displayed; either no +client had set the screen saver window attributes or a different client +had the server grabbed when the screen saver activated. +.TP 4 +.I External +The screen saver window was mapped with attributes set by a +client using the \fBScreenSaverSetAttributes\fP request. +.PP +The \fIidle\fP field specifies the number of milliseconds since the last +input was received from the user on any of the input devices. +.br +The \fIevent-mask\fP field specifies which, if any, screen saver +events this client has requested using \fBScreenSaverSelectInput\fP. +.PP +.B XScreenSaverSelectInput +asks that events related to +the screen saver be generated for this client. +If +no bits are set in \fIevent-mask\fP, then no events will be generated. +Otherwise, any combination of the following bits may be set: +.TP 8 +.B ScreenSaverNotify +If this bit is set, \fBScreenSaverNotify\fP events are generated whenever +the screen saver is activated or deactivated. +.TP 8 +.B ScreenSaverCycle +If this bit is set, \fBScreenSaverNotify\fP events are generated whenever +the screen saver cycle interval passes. +.PP +.B XScreenSaverSetAttributes +sets the attributes to be used +the next time the external screen saver is activated. +If another client currently has the attributes set, +a BadAccess error is generated and the request is ignored. +.br +Otherwise, the specified window attributes are checked as if +they were used in a core \fBCreateWindow\fP request whose +parent is the root. +The \fIoverride-redirect\fP field is ignored as it is implicitly set +to True. +If the window attributes result in an error according to the rules for +\fBCreateWindow\fP, the request is ignored. +.br +Otherwise, the attributes are stored and will take effect on the next +activation that occurs when the server is not grabbed by another client. +Any resources specified for the +\fIbackground-pixmap\fP or \fIcursor\fP attributes may be +freed immediately. +The server is free to copy the \fIbackground-pixmap\fP or \fIcursor\fP +resources or to use them in place; therefore, the effect of changing +the contents of those resources is undefined. +If the specified \fIcolormap\fP no longer exists when the screen saver +activates, the parent's colormap is used instead. +If no errors are generated by this request, any previous screen saver +window attributes set by this client are released. +.br +When the screen saver next activates and the server is not grabbed by +another client, the screen saver window is +created, if necessary, and set to the specified attributes and events +are generated as usual. +The colormap associated with the screen saver window is installed. +Finally, the screen saver window is mapped. +.br +The window remains mapped and at the top of the stacking order +until the screen saver is deactivated in response to activity on +any of the user input devices, a \fBForceScreenSaver\fP request with +a value of Reset, or any request that would cause the window to be +unmapped. +.br +If the screen saver activates while the server is grabbed by another +client, the internal saver mechanism is used. +The \fBForceScreenSaver\fP request may be used with a value of Active +to deactivate the internal saver and activate the external saver. +.br +If the screen saver client's connection to the server is broken +while the screen saver is activated and the client's close down mode has not +been RetainPermanent or RetainTemporary, the current screen saver +is deactivated and the internal screen saver is immediately activated. +.br +When the screen saver deactivates, the screen saver window's colormap +is uninstalled and the window is unmapped (except as described below). +The screen saver XID is disassociated +with the window and the server may, but is not required to, +destroy the window along with any children. +.br +When the screen saver is being deactivated and then immediately +reactivated (such as when switching screen savers), the server +may leave the screen saver window mapped (typically to avoid +generating exposures). +.PP +.B XScreenSaverUnsetAttributes +instructs the server to discard +any previous screen saver window attributes set by this client. +.PP +.B XScreenSaverRegister +stores the given \fIXID\fP in the \fB_SCREEN_SAVER_ID\fP +property (of the given \fItype\fP) on the +root window of the specified \fIscreen\fP. +It returns zero if an error is encountered and the property is not +changed, otherwise it returns non-zero. +.PP +.B XScreenSaverUnregister +removes any \fB_SCREEN_SAVER_ID\fP from the +root window of the specified \fIscreen\fP. +It returns zero if an error is encountered and the property is +changed, otherwise it returns non-zero. +.PP +.B XScreenSaverGetRegistered +returns the \fIXID\fP and \fItype\fP stored in +the \fB_SCREEN_SAVER_ID\fP property on the +root window of the specified \fIscreen\fP. +It returns zero if an error is encountered or if the property does not +exist or is not of the correct format; otherwise it returns non-zero. +.SH "ERRORS" +.B XScreenSaverSelectInput, +.B XScreenSaverQueryInfo, +.B XScreenSaverSetAttributes +and +.B XScreenSaverUnsetAttributes +will generate a +.I BadDrawable +error if \fIdrawable\fP is not a valid drawable identifier. +If any undefined bits are set in \fIevent-mask\fP, +a BadValue error is generated by +.B XScreenSaverSelectInput . +.PP +.SH "SEE ALSO" +X(__miscmansuffix__) +.SH AUTHORS +Jim Fulton and Keith Packard. +.SH STABILITY +This API is considered as experimental. +The Xss library major revision may be incremented whenever +incompatible changes are done to the API without notice. +Use with care. |