⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saver.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 3 页
字号:
    }    CheckScreenPrivate (pScreen);    return TRUE;}static voidSendScreenSaverNotify (pScreen, state, forced)    ScreenPtr			pScreen;    int	    state;    Bool    forced;{    ScreenSaverScreenPrivatePtr	pPriv;    ScreenSaverEventPtr		pEv;    unsigned long		mask;    xScreenSaverNotifyEvent	ev;    ClientPtr			client;    int				kind;    ScreenSaverStuffPtr		pSaver;    UpdateCurrentTimeIf ();    mask = ScreenSaverNotifyMask;    if (state == ScreenSaverCycle)	mask = ScreenSaverCycleMask;    pScreen = screenInfo.screens[pScreen->myNum];    pPriv = GetScreenPrivate(pScreen);    if (!pPriv)	return;    pSaver = &savedScreenInfo[pScreen->myNum];    if (pPriv->attr)	kind = ScreenSaverExternal;    else if (ScreenSaverBlanking != DontPreferBlanking)	kind = ScreenSaverBlanked;    else	kind = ScreenSaverInternal;    for (pEv = pPriv->events; pEv; pEv = pEv->next)    {	client = pEv->client;	if (client->clientGone)	    continue;	if (!(pEv->mask & mask))	    continue;	ev.type = ScreenSaverNotify + ScreenSaverEventBase;	ev.state = state;	ev.sequenceNumber = client->sequence;	ev.timestamp = currentTime.milliseconds;	ev.root = WindowTable[pScreen->myNum]->drawable.id;	ev.window = savedScreenInfo[pScreen->myNum].wid;	ev.kind = kind;	ev.forced = forced;	WriteEventsToClient (client, 1, (xEvent *) &ev);    }}static voidSScreenSaverNotifyEvent (from, to)    xScreenSaverNotifyEvent *from, *to;{    to->type = from->type;    to->state = from->state;    cpswaps (from->sequenceNumber, to->sequenceNumber);    cpswapl (from->timestamp, to->timestamp);        cpswapl (from->root, to->root);        cpswapl (from->window, to->window);        to->kind = from->kind;    to->forced = from->forced;}static voidUninstallSaverColormap (pScreen)    ScreenPtr	pScreen;{    SetupScreen(pScreen);    ColormapPtr			pCmap;    if (pPriv && pPriv->installedMap != None)    {	pCmap = (ColormapPtr) LookupIDByType (pPriv->installedMap, RT_COLORMAP);	if (pCmap)	    (*pCmap->pScreen->UninstallColormap) (pCmap);	pPriv->installedMap = None;	CheckScreenPrivate (pScreen);    }}static BoolCreateSaverWindow (pScreen)    ScreenPtr	pScreen;{    SetupScreen (pScreen);    ScreenSaverStuffPtr		pSaver;    ScreenSaverAttrPtr		pAttr;    WindowPtr			pWin;    int				result;    unsigned long		mask;    extern int			GrabInProgress;    Colormap			*installedMaps;    int				numInstalled;    int				i;    Colormap			wantMap;    ColormapPtr			pCmap;    pSaver = &savedScreenInfo[pScreen->myNum];    if (pSaver->pWindow)    {	pSaver->pWindow = NullWindow;	FreeResource (pSaver->wid, RT_NONE);	if (pPriv)	{	    UninstallSaverColormap (pScreen);	    pPriv->hasWindow = FALSE;	    CheckScreenPrivate (pScreen);	}    }    if (!pPriv || !(pAttr = pPriv->attr))	return FALSE;    pPriv->installedMap = None;    if (GrabInProgress && GrabInProgress != pAttr->client->index)	return FALSE;    pWin = CreateWindow (pSaver->wid, WindowTable[pScreen->myNum],			 pAttr->x, pAttr->y, pAttr->width, pAttr->height,			 pAttr->borderWidth, pAttr->class, 			 pAttr->mask, (XID *)pAttr->values, 			 pAttr->depth, serverClient, pAttr->visual, 			 &result);    if (!pWin)	return FALSE;    if (!AddResource(pWin->drawable.id, RT_WINDOW, pWin))	return FALSE;    mask = 0;    if (pAttr->pBackgroundPixmap)    {	pWin->backgroundState = BackgroundPixmap;	pWin->background.pixmap = pAttr->pBackgroundPixmap;	pAttr->pBackgroundPixmap->refcnt++;	mask |= CWBackPixmap;    }    if (pAttr->pBorderPixmap)    {	pWin->borderIsPixel = FALSE;	pWin->border.pixmap = pAttr->pBorderPixmap;	pAttr->pBorderPixmap->refcnt++;	mask |= CWBorderPixmap;    }    if (pAttr->pCursor)    {	if (!pWin->optional)	    if (!MakeWindowOptional (pWin))	    {    	    	FreeResource (pWin->drawable.id, RT_NONE);    	    	return FALSE;	    }	if (pWin->optional->cursor)	    FreeCursor (pWin->optional->cursor, (Cursor)0);	pWin->optional->cursor = pAttr->pCursor;	pAttr->pCursor->refcnt++;	pWin->cursorIsNone = FALSE;	CheckWindowOptionalNeed (pWin);	mask |= CWCursor;    }    if (mask)	(*pScreen->ChangeWindowAttributes) (pWin, mask);    if (pAttr->colormap != None)	(void) ChangeWindowAttributes (pWin, CWColormap, &pAttr->colormap,				       serverClient);    MapWindow (pWin, serverClient);    pPriv->hasWindow = TRUE;    pSaver->pWindow = pWin;    /* check and install our own colormap if it isn't installed now */    wantMap = wColormap (pWin);    if (wantMap == None)	return TRUE;    installedMaps = (Colormap *) ALLOCATE_LOCAL (pScreen->maxInstalledCmaps *						 sizeof (Colormap));    numInstalled = (*pWin->drawable.pScreen->ListInstalledColormaps)						    (pScreen, installedMaps);    for (i = 0; i < numInstalled; i++) 	if (installedMaps[i] == wantMap)	    break;    DEALLOCATE_LOCAL ((char *) installedMaps);    if (i < numInstalled)	return TRUE;    pCmap = (ColormapPtr) LookupIDByType (wantMap, RT_COLORMAP);    if (!pCmap)	return TRUE;    pPriv->installedMap = wantMap;    (*pCmap->pScreen->InstallColormap) (pCmap);    return TRUE;}static BoolDestroySaverWindow (pScreen)    ScreenPtr	pScreen;{    SetupScreen(pScreen);    ScreenSaverStuffPtr		pSaver;    if (!pPriv || !pPriv->hasWindow)	return FALSE;    pSaver = &savedScreenInfo[pScreen->myNum];    if (pSaver->pWindow)    {	pSaver->pWindow = NullWindow;	FreeResource (pSaver->wid, RT_NONE);    }    pPriv->hasWindow = FALSE;    CheckScreenPrivate (pScreen);    UninstallSaverColormap (pScreen);    return TRUE;}static BoolScreenSaverHandle (pScreen, xstate, force)    ScreenPtr	pScreen;    int		xstate;    Bool	force;{    int				state;    Bool			ret = FALSE;    ScreenSaverScreenPrivatePtr	pPriv;    switch (xstate)    {    case SCREEN_SAVER_ON:		state = ScreenSaverOn;	ret = CreateSaverWindow (pScreen);	break;    case SCREEN_SAVER_OFF:		state = ScreenSaverOff;	ret = DestroySaverWindow (pScreen);	break;    case SCREEN_SAVER_CYCLE:		state = ScreenSaverCycle;	pPriv = GetScreenPrivate (pScreen);	if (pPriv && pPriv->hasWindow)	    ret = TRUE;	    }    SendScreenSaverNotify (pScreen, state, force);    return ret;}static intProcScreenSaverQueryVersion (client)    register ClientPtr	client;{    xScreenSaverQueryVersionReply	rep;    register int		n;    REQUEST_SIZE_MATCH (xScreenSaverQueryVersionReq);    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.majorVersion = ScreenSaverMajorVersion;    rep.minorVersion = ScreenSaverMinorVersion;    if (client->swapped) {    	swaps(&rep.sequenceNumber, n);    	swapl(&rep.length, n);    }    WriteToClient(client, sizeof (xScreenSaverQueryVersionReply), (char *)&rep);    return (client->noClientException);}intProcScreenSaverQueryInfo (client)    register ClientPtr	client;{    REQUEST(xScreenSaverQueryInfoReq);    xScreenSaverQueryInfoReply	rep;    register int		n;    ScreenSaverStuffPtr		pSaver;    DrawablePtr			pDraw;    CARD32			lastInput;    ScreenSaverScreenPrivatePtr	pPriv;    REQUEST_SIZE_MATCH (xScreenSaverQueryInfoReq);    pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);    if (!pDraw)	return BadDrawable;    pSaver = &savedScreenInfo[pDraw->pScreen->myNum];    pPriv = GetScreenPrivate (pDraw->pScreen);    UpdateCurrentTime ();    lastInput = GetTimeInMillis() - lastDeviceEventTime.milliseconds;    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.window = pSaver->wid;    if (screenIsSaved != SCREEN_SAVER_OFF)    {	rep.state = ScreenSaverOn;	if (ScreenSaverTime)	    rep.tilOrSince = lastInput - ScreenSaverTime;	else	    rep.tilOrSince = 0;    }    else    {	if (ScreenSaverTime)	{	    rep.state = ScreenSaverOff;	    if (ScreenSaverTime < lastInput)		rep.tilOrSince = 0;	    else		rep.tilOrSince = ScreenSaverTime - lastInput;	}	else	{	    rep.state = ScreenSaverDisabled;	    rep.tilOrSince = 0;	}    }    rep.idle = lastInput;    rep.eventMask = getEventMask (pDraw->pScreen, client);    if (pPriv && pPriv->attr)	rep.kind = ScreenSaverExternal;    else if (ScreenSaverBlanking != DontPreferBlanking)	rep.kind = ScreenSaverBlanked;    else	rep.kind = ScreenSaverInternal;    if (client->swapped)    {	swaps (&rep.sequenceNumber, n);	swapl (&rep.length, n);	swapl (&rep.window, n);	swapl (&rep.tilOrSince, n);	swapl (&rep.idle, n);	swapl (&rep.eventMask, n);    }    WriteToClient(client, sizeof (xScreenSaverQueryInfoReply), (char *)&rep);    return (client->noClientException);}static intProcScreenSaverSelectInput (client)    register ClientPtr	client;{    REQUEST(xScreenSaverSelectInputReq);    DrawablePtr			pDraw;    REQUEST_SIZE_MATCH (xScreenSaverSelectInputReq);    pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);    if (!pDraw)	return BadDrawable;    if (!setEventMask (pDraw->pScreen, client, stuff->eventMask))	return BadAlloc;    return Success;}static intProcScreenSaverSetAttributes (client)    register ClientPtr	client;{    REQUEST(xScreenSaverSetAttributesReq);    DrawablePtr			pDraw;    WindowPtr			pParent;    ScreenPtr			pScreen;    ScreenSaverScreenPrivatePtr pPriv = 0;    ScreenSaverAttrPtr		pAttr = 0;    int				ret;    int				len;    int				class, bw, depth;    unsigned long		visual;    int				idepth, ivisual;    Bool			fOK;    DepthPtr			pDepth;    WindowOptPtr		ancwopt;    unsigned long		*pVlist;    unsigned long		*values = 0;    int				valuei;    unsigned long		tmask, imask;    unsigned long		val;    Pixmap			pixID;    PixmapPtr			pPixmap;    Cursor			cursorID;    CursorPtr			pCursor;    Colormap			cmap;    ColormapPtr			pCmap;    REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq);    pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);    if (!pDraw)	return BadDrawable;    pScreen = pDraw->pScreen;    pParent = WindowTable[pScreen->myNum];    len = stuff->length -  (sizeof(xScreenSaverSetAttributesReq) >> 2);    if (Ones(stuff->mask) != len)        return BadLength;    if (!stuff->width || !stuff->height)    {	client->errorValue = 0;        return BadValue;    }    switch (class = stuff->c_class)     {    case CopyFromParent:    case InputOnly:    case InputOutput:	break;    default:	client->errorValue = class;	return BadValue;    }    bw = stuff->borderWidth;    depth = stuff->depth;    visual = stuff->visualID;    /* copied directly from CreateWindow */    if (class == CopyFromParent)	class = pParent->drawable.class;    if ((class != InputOutput) && (class != InputOnly))    {	client->errorValue = class;	return BadValue;    }    if ((class != InputOnly) && (pParent->drawable.class == InputOnly))        return BadMatch;    if ((class == InputOnly) && ((bw != 0) || (depth != 0)))        return BadMatch;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -