xigetclientpointer.c revision f7df2e56
1/* 2 * Copyright 2007-2008 Peter Hutterer 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 * 23 * Author: Peter Hutterer, University of South Australia, NICTA 24 */ 25 26#ifdef HAVE_DIX_CONFIG_H 27#include <dix-config.h> 28#endif 29 30#include <X11/X.h> /* for inputstr.h */ 31#include <X11/Xproto.h> /* Request macro */ 32#include "inputstr.h" /* DeviceIntPtr */ 33#include "windowstr.h" /* window structure */ 34#include "scrnintstr.h" /* screen structure */ 35#include <X11/extensions/XI.h> 36#include <X11/extensions/XI2proto.h> 37#include "extnsionst.h" 38#include "extinit.h" /* LookupDeviceIntRec */ 39#include "exevents.h" 40#include "exglobals.h" 41 42#include "xigetclientpointer.h" 43 44/*********************************************************************** 45 * This procedure allows a client to query another client's client pointer 46 * setting. 47 */ 48 49int 50SProcXIGetClientPointer(ClientPtr client) 51{ 52 REQUEST(xXIGetClientPointerReq); 53 REQUEST_SIZE_MATCH(xXIGetClientPointerReq); 54 55 swaps(&stuff->length); 56 swapl(&stuff->win); 57 return ProcXIGetClientPointer(client); 58} 59 60int 61ProcXIGetClientPointer(ClientPtr client) 62{ 63 int rc; 64 ClientPtr winclient; 65 xXIGetClientPointerReply rep; 66 67 REQUEST(xXIGetClientPointerReq); 68 REQUEST_SIZE_MATCH(xXIGetClientPointerReq); 69 70 if (stuff->win != None) { 71 rc = dixLookupClient(&winclient, stuff->win, client, DixGetAttrAccess); 72 73 if (rc != Success) 74 return BadWindow; 75 } 76 else 77 winclient = client; 78 79 rep = (xXIGetClientPointerReply) { 80 .repType = X_Reply, 81 .RepType = X_XIGetClientPointer, 82 .sequenceNumber = client->sequence, 83 .length = 0, 84 .set = (winclient->clientPtr != NULL), 85 .deviceid = (winclient->clientPtr) ? winclient->clientPtr->id : 0 86 }; 87 88 WriteReplyToClient(client, sizeof(xXIGetClientPointerReply), &rep); 89 return Success; 90} 91 92/*********************************************************************** 93 * 94 * This procedure writes the reply for the XGetClientPointer function, 95 * if the client and server have a different byte ordering. 96 * 97 */ 98 99void 100SRepXIGetClientPointer(ClientPtr client, int size, 101 xXIGetClientPointerReply * rep) 102{ 103 swaps(&rep->sequenceNumber); 104 swapl(&rep->length); 105 swaps(&rep->deviceid); 106 WriteToClient(client, size, rep); 107} 108