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

📄 xf86vmode.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 4 页
字号:
/* $XFree86: xc/programs/Xserver/Xext/xf86vmode.c,v 3.30.2.3 1997/06/11 12:08:44 dawes Exp $ *//*Copyright (c) 1995  Kaleb S. KEITHLEYPermission is hereby granted, free of charge, to any person obtaininga copy of this software and associated documentation files (the"Software"), to deal in the Software without restriction, includingwithout limitation the rights to use, copy, modify, merge, publish,distribute, sublicense, and/or sell copies of the Software, and topermit persons to whom the Software is furnished to do so, subject tothe following conditions:The above copyright notice and this permission notice shall beincluded 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 OFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL Kaleb S. KEITHLEY 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 OROTHER DEALINGS IN THE SOFTWARE.Except as contained in this notice, the name of Kaleb S. KEITHLEY shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorizationfrom Kaleb S. KEITHLEY*//* $XConsortium: xf86vmode.c /main/24 1996/10/26 21:56:29 kaleb $ *//* THIS IS NOT AN X CONSORTIUM STANDARD */#define NEED_REPLIES#define NEED_EVENTS#include "X.h"#include "Xproto.h"#include "misc.h"#include "dixstruct.h"#include "extnsionst.h"#include "scrnintstr.h"#include "servermd.h"#define _XF86VIDMODE_SERVER_#include "xf86vmstr.h"#include "Xfuncproto.h"#include "../hw/xfree86/common/xf86.h"#include "../hw/xfree86/common/xf86Priv.h"#include <X11/Xtrans.h>#include "../os/osdep.h"#include <X11/Xauth.h>#ifndef ESIX#ifndef Lynx#include <sys/socket.h>#else#include <socket.h>#endif#else#include <lan/socket.h>#endif#include "swaprep.h"extern int xf86ScreenIndex;extern Bool xf86VidModeEnabled;extern Bool xf86VidModeAllowNonLocal;static int vidmodeErrorBase;static void XF86VidModeResetProc(#if NeedFunctionPrototypes    ExtensionEntry* /* extEntry */#endif);static DISPATCH_PROC(ProcXF86VidModeDispatch);static DISPATCH_PROC(ProcXF86VidModeGetAllModeLines);static DISPATCH_PROC(ProcXF86VidModeGetModeLine);static DISPATCH_PROC(ProcXF86VidModeGetMonitor);static DISPATCH_PROC(ProcXF86VidModeLockModeSwitch);static DISPATCH_PROC(ProcXF86VidModeAddModeLine);static DISPATCH_PROC(ProcXF86VidModeDeleteModeLine);static DISPATCH_PROC(ProcXF86VidModeModModeLine);static DISPATCH_PROC(ProcXF86VidModeValidateModeLine);static DISPATCH_PROC(ProcXF86VidModeQueryVersion);static DISPATCH_PROC(ProcXF86VidModeSwitchMode);static DISPATCH_PROC(ProcXF86VidModeSwitchToMode);static DISPATCH_PROC(ProcXF86VidModeGetViewPort);static DISPATCH_PROC(ProcXF86VidModeSetViewPort);static DISPATCH_PROC(SProcXF86VidModeDispatch);static DISPATCH_PROC(SProcXF86VidModeGetAllModeLines);static DISPATCH_PROC(SProcXF86VidModeGetModeLine);static DISPATCH_PROC(SProcXF86VidModeGetMonitor);static DISPATCH_PROC(SProcXF86VidModeLockModeSwitch);static DISPATCH_PROC(SProcXF86VidModeAddModeLine);static DISPATCH_PROC(SProcXF86VidModeDeleteModeLine);static DISPATCH_PROC(SProcXF86VidModeModModeLine);static DISPATCH_PROC(SProcXF86VidModeValidateModeLine);static DISPATCH_PROC(SProcXF86VidModeQueryVersion);static DISPATCH_PROC(SProcXF86VidModeSwitchMode);static DISPATCH_PROC(SProcXF86VidModeSwitchToMode);static DISPATCH_PROC(SProcXF86VidModeGetViewPort);static DISPATCH_PROC(SProcXF86VidModeSetViewPort);static unsigned char XF86VidModeReqCode = 0;/* The XF86VIDMODE_EVENTS code is far from complete */#ifdef XF86VIDMODE_EVENTSstatic int XF86VidModeEventBase = 0;static void SXF86VidModeNotifyEvent();#if NeedFunctionPrototypes    xXF86VidModeNotifyEvent * /* from */,    xXF86VidModeNotifyEvent * /* to */#endif);extern WindowPtr *WindowTable;static RESTYPE EventType;	/* resource type for event masks */typedef struct _XF86VidModeEvent *XF86VidModeEventPtr;typedef struct _XF86VidModeEvent {    XF86VidModeEventPtr	next;    ClientPtr		client;    ScreenPtr		screen;    XID			resource;    CARD32		mask;} XF86VidModeEventRec;static int XF86VidModeFreeEvents();typedef struct _XF86VidModeScreenPrivate {    XF86VidModeEventPtr	events;    Bool		hasWindow;} XF86VidModeScreenPrivateRec, *XF86VidModeScreenPrivatePtr;   static int ScreenPrivateIndex;#define GetScreenPrivate(s) ((ScreenSaverScreenPrivatePtr)(s)->devPrivates[ScreenPrivateIndex].ptr)#define SetScreenPrivate(s,v) ((s)->devPrivates[ScreenPrivateIndex].ptr = (pointer) v);#define SetupScreen(s)  ScreenSaverScreenPrivatePtr pPriv = GetScreenPrivate(s)#define New(t)  ((t *) xalloc (sizeof (t)))#endifvoidXFree86VidModeExtensionInit(){    ExtensionEntry* extEntry;#ifdef XF86VIDMODE_EVENTS    int		    i;    ScreenPtr	    pScreen;    EventType = CreateNewResourceType(XF86VidModeFreeEvents);    ScreenPrivateIndex = AllocateScreenPrivateIndex ();    for (i = 0; i < screenInfo.numScreens; i++)    {	pScreen = screenInfo.screens[i];	SetScreenPrivate (pScreen, NULL);    }#endif    if (#ifdef XF86VIDMODE_EVENTS        EventType && ScreenPrivateIndex != -1 &&#endif	(extEntry = AddExtension(XF86VIDMODENAME,				XF86VidModeNumberEvents,				XF86VidModeNumberErrors,				ProcXF86VidModeDispatch,				SProcXF86VidModeDispatch,				XF86VidModeResetProc,				StandardMinorOpcode))) {	XF86VidModeReqCode = (unsigned char)extEntry->base;	vidmodeErrorBase = extEntry->errorBase;#ifdef XF86VIDMODE_EVENTS	XF86VidModeEventBase = extEntry->eventBase;	EventSwapVector[XF86VidModeEventBase] = SXF86VidModeNotifyEvent;#endif    }}/*ARGSUSED*/static voidXF86VidModeResetProc (extEntry)    ExtensionEntry* extEntry;{}#ifdef XF86VIDMODE_EVENTSstatic voidCheckScreenPrivate (pScreen)    ScreenPtr	pScreen;{    SetupScreen (pScreen);    if (!pPriv)	return;    if (!pPriv->events && !pPriv->hasWindow) {	xfree (pPriv);	SetScreenPrivate (pScreen, NULL);    }}    static XF86VidModeScreenPrivatePtrMakeScreenPrivate (pScreen)    ScreenPtr	pScreen;{    SetupScreen (pScreen);    if (pPriv)	return pPriv;    pPriv = New (XF86VidModeScreenPrivateRec);    if (!pPriv)	return 0;    pPriv->events = 0;    pPriv->hasWindow = FALSE;    SetScreenPrivate (pScreen, pPriv);    return pPriv;}static unsigned longgetEventMask (pScreen, client)    ScreenPtr	pScreen;    ClientPtr	client;{    SetupScreen(pScreen);    XF86VidModeEventPtr pEv;    if (!pPriv)	return 0;    for (pEv = pPriv->events; pEv; pEv = pEv->next)	if (pEv->client == client)	    return pEv->mask;    return 0;}static BoolsetEventMask (pScreen, client, mask)    ScreenPtr	pScreen;    ClientPtr	client;    unsigned long mask;{    SetupScreen(pScreen);    XF86VidModeEventPtr pEv, *pPrev;    if (getEventMask (pScreen, client) == mask)	return TRUE;    if (!pPriv) {	pPriv = MakeScreenPrivate (pScreen);	if (!pPriv)	    return FALSE;    }    for (pPrev = &pPriv->events; pEv = *pPrev; pPrev = &pEv->next)	if (pEv->client == client)	    break;    if (mask == 0) {	*pPrev = pEv->next;	xfree (pEv);	CheckScreenPrivate (pScreen);    } else {	if (!pEv) {	    pEv = New (ScreenSaverEventRec);	    if (!pEv) {		CheckScreenPrivate (pScreen);		return FALSE;	    }	    *pPrev = pEv;	    pEv->next = NULL;	    pEv->client = client;	    pEv->screen = pScreen;	    pEv->resource = FakeClientID (client->index);	}	pEv->mask = mask;    }    return TRUE;}static intXF86VidModeFreeEvents (value, id)    pointer value;    XID id;{    XF86VidModeEventPtr	pOld = (XF86VidModeEventPtr)value;    ScreenPtr pScreen = pOld->screen;    SetupScreen (pScreen);    XF86VidModeEventPtr	pEv, *pPrev;    if (!pPriv)	return TRUE;    for (pPrev = &pPriv->events; pEv = *pPrev; pPrev = &pEv->next)	if (pEv == pOld)	    break;    if (!pEv)	return TRUE;    *pPrev = pEv->next;    xfree (pEv);    CheckScreenPrivate (pScreen);    return TRUE;}static voidSendXF86VidModeNotify (pScreen, state, forced)    ScreenPtr	pScreen;    int	    state;    Bool    forced;{    XF86VidModeScreenPrivatePtr	pPriv;    XF86VidModeEventPtr		pEv;    unsigned long		mask;    xXF86VidModeNotifyEvent	ev;    ClientPtr			client;    int				kind;    UpdateCurrentTimeIf ();    mask = XF86VidModeNotifyMask;    pScreen = screenInfo.screens[pScreen->myNum];    pPriv = GetScreenPrivate(pScreen);    if (!pPriv)	return;    kind = XF86VidModeModeChange;    for (pEv = pPriv->events; pEv; pEv = pEv->next)    {	client = pEv->client;	if (client->clientGone)	    continue;	if (!(pEv->mask & mask))	    continue;	ev.type = XF86VidModeNotify + XF86VidModeEventBase;	ev.state = state;	ev.sequenceNumber = client->sequence;	ev.timestamp = currentTime.milliseconds;	ev.root = WindowTable[pScreen->myNum]->drawable.id;	ev.kind = kind;	ev.forced = forced;	WriteEventsToClient (client, 1, (xEvent *) &ev);    }}static voidSXF86VidModeNotifyEvent (from, to)    xXF86VidModeNotifyEvent *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);        to->kind = from->kind;    to->forced = from->forced;}#endif	static intProcXF86VidModeQueryVersion(client)    register ClientPtr client;{    xXF86VidModeQueryVersionReply rep;    register int n;    REQUEST_SIZE_MATCH(xXF86VidModeQueryVersionReq);    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.majorVersion = XF86VIDMODE_MAJOR_VERSION;    rep.minorVersion = XF86VIDMODE_MINOR_VERSION;    if (client->swapped) {    	swaps(&rep.sequenceNumber, n);    	swapl(&rep.length, n);    	swaps(&rep.majorVersion, n);    	swaps(&rep.minorVersion, n);    }    WriteToClient(client, sizeof(xXF86VidModeQueryVersionReply), (char *)&rep);    return (client->noClientException);}static intProcXF86VidModeGetModeLine(client)    register ClientPtr client;{    REQUEST(xXF86VidModeGetModeLineReq);    xXF86VidModeGetModeLineReply rep;    register int n;    ScrnInfoPtr vptr;    DisplayModePtr mptr;    int privsize;    if (stuff->screen > screenInfo.numScreens)	return BadValue;    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    mptr = vptr->modes;    if (!mptr->Private)	privsize = 0;    else	privsize = mptr->PrivSize;    REQUEST_SIZE_MATCH(xXF86VidModeGetModeLineReq);    rep.type = X_Reply;

⌨️ 快捷键说明

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