Xevie.c revision d9c7fc6c
1d9c7fc6cSmrg/* $XdotOrg: xc/lib/Xevie/Xevie.c,v 1.2 2005/05/22 01:20:14 alanc Exp $ */ 2d9c7fc6cSmrg/************************************************************ 3d9c7fc6cSmrg 4d9c7fc6cSmrgCopyright 2003 Sun Microsystems, Inc. 5d9c7fc6cSmrg 6d9c7fc6cSmrgAll rights reserved. 7d9c7fc6cSmrg 8d9c7fc6cSmrgPermission is hereby granted, free of charge, to any person obtaining a 9d9c7fc6cSmrgcopy of this software and associated documentation files (the 10d9c7fc6cSmrg"Software"), to deal in the Software without restriction, including 11d9c7fc6cSmrgwithout limitation the rights to use, copy, modify, merge, publish, 12d9c7fc6cSmrgdistribute, and/or sell copies of the Software, and to permit persons 13d9c7fc6cSmrgto whom the Software is furnished to do so, provided that the above 14d9c7fc6cSmrgcopyright notice(s) and this permission notice appear in all copies of 15d9c7fc6cSmrgthe Software and that both the above copyright notice(s) and this 16d9c7fc6cSmrgpermission notice appear in supporting documentation. 17d9c7fc6cSmrg 18d9c7fc6cSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19d9c7fc6cSmrgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20d9c7fc6cSmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 21d9c7fc6cSmrgOF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 22d9c7fc6cSmrgHOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL 23d9c7fc6cSmrgINDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING 24d9c7fc6cSmrgFROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 25d9c7fc6cSmrgNEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 26d9c7fc6cSmrgWITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 27d9c7fc6cSmrg 28d9c7fc6cSmrgExcept as contained in this notice, the name of a copyright holder 29d9c7fc6cSmrgshall not be used in advertising or otherwise to promote the sale, use 30d9c7fc6cSmrgor other dealings in this Software without prior written authorization 31d9c7fc6cSmrgof the copyright holder. 32d9c7fc6cSmrg 33d9c7fc6cSmrg************************************************************/ 34d9c7fc6cSmrg 35d9c7fc6cSmrg#define NEED_EVENTS 36d9c7fc6cSmrg#define NEED_REPLIES 37d9c7fc6cSmrg#include <X11/Xlibint.h> 38d9c7fc6cSmrg#include <X11/extensions/Xevie.h> 39d9c7fc6cSmrg#include <X11/extensions/Xeviestr.h> 40d9c7fc6cSmrg#include <X11/extensions/Xext.h> 41d9c7fc6cSmrg#include <X11/extensions/extutil.h> 42d9c7fc6cSmrg 43d9c7fc6cSmrgstatic XExtensionInfo _xevie_info_data; 44d9c7fc6cSmrgstatic XExtensionInfo *xevie_info = &_xevie_info_data; 45d9c7fc6cSmrgstatic char *xevie_extension_name = XEVIENAME; 46d9c7fc6cSmrgstatic int major_opcode = 0; 47d9c7fc6cSmrgstatic long xevie_mask = 0; 48d9c7fc6cSmrg 49d9c7fc6cSmrg 50d9c7fc6cSmrg/***************************************************************************** 51d9c7fc6cSmrg * * 52d9c7fc6cSmrg * private utility routines * 53d9c7fc6cSmrg * * 54d9c7fc6cSmrg *****************************************************************************/ 55d9c7fc6cSmrg 56d9c7fc6cSmrgstatic int close_display(); 57d9c7fc6cSmrgstatic /* const */ XExtensionHooks xevie_extension_hooks = { 58d9c7fc6cSmrg NULL, /* create_gc */ 59d9c7fc6cSmrg NULL, /* copy_gc */ 60d9c7fc6cSmrg NULL, /* flush_gc */ 61d9c7fc6cSmrg NULL, /* free_gc */ 62d9c7fc6cSmrg NULL, /* create_font */ 63d9c7fc6cSmrg NULL, /* free_font */ 64d9c7fc6cSmrg close_display, /* close_display */ 65d9c7fc6cSmrg NULL, /* wire_to_event */ 66d9c7fc6cSmrg NULL, /* event_to_wire */ 67d9c7fc6cSmrg NULL, /* error */ 68d9c7fc6cSmrg NULL, /* error_string */ 69d9c7fc6cSmrg}; 70d9c7fc6cSmrg 71d9c7fc6cSmrgstatic XEXT_GENERATE_FIND_DISPLAY (find_display, xevie_info, 72d9c7fc6cSmrg xevie_extension_name, 73d9c7fc6cSmrg &xevie_extension_hooks, 74d9c7fc6cSmrg 0, NULL) 75d9c7fc6cSmrg 76d9c7fc6cSmrgstatic XEXT_GENERATE_CLOSE_DISPLAY (close_display, xevie_info) 77d9c7fc6cSmrg 78d9c7fc6cSmrg/***************************************************************************** 79d9c7fc6cSmrg * * 80d9c7fc6cSmrg * public Xevie Extension routines * 81d9c7fc6cSmrg * * 82d9c7fc6cSmrg *****************************************************************************/ 83d9c7fc6cSmrg 84d9c7fc6cSmrgStatus 85d9c7fc6cSmrgXevieQueryVersion(dpy, major_version_return, minor_version_return) 86d9c7fc6cSmrg Display* dpy; 87d9c7fc6cSmrg int* major_version_return; 88d9c7fc6cSmrg int* minor_version_return; 89d9c7fc6cSmrg{ 90d9c7fc6cSmrg XExtDisplayInfo *info = find_display (dpy); 91d9c7fc6cSmrg xXevieQueryVersionReply rep; 92d9c7fc6cSmrg xXevieQueryVersionReq *req; 93d9c7fc6cSmrg 94d9c7fc6cSmrg XextCheckExtension(dpy, info, xevie_extension_name, False); 95d9c7fc6cSmrg 96d9c7fc6cSmrg major_opcode = info->codes->major_opcode; 97d9c7fc6cSmrg LockDisplay(dpy); 98d9c7fc6cSmrg GetReq(XevieQueryVersion, req); 99d9c7fc6cSmrg req->reqType = major_opcode; 100d9c7fc6cSmrg req->xevieReqType = X_XevieQueryVersion; 101d9c7fc6cSmrg req->client_major_version = XEVIE_MAJOR_VERSION; 102d9c7fc6cSmrg req->client_minor_version = XEVIE_MINOR_VERSION; 103d9c7fc6cSmrg if (!_XReply(dpy, (xReply *)&rep, 0, xTrue)) { 104d9c7fc6cSmrg UnlockDisplay(dpy); 105d9c7fc6cSmrg SyncHandle(); 106d9c7fc6cSmrg return False; 107d9c7fc6cSmrg } 108d9c7fc6cSmrg *major_version_return = rep.server_major_version; 109d9c7fc6cSmrg *minor_version_return = rep.server_minor_version; 110d9c7fc6cSmrg UnlockDisplay(dpy); 111d9c7fc6cSmrg SyncHandle(); 112d9c7fc6cSmrg return True; 113d9c7fc6cSmrg} 114d9c7fc6cSmrg 115d9c7fc6cSmrg/* Win32 reserves 20 colormap entries for its desktop */ 116d9c7fc6cSmrg#ifndef TYP_RESERVED_ENTRIES 117d9c7fc6cSmrg#define TYP_RESERVED_ENTRIES 20 118d9c7fc6cSmrg#endif 119d9c7fc6cSmrg 120d9c7fc6cSmrgStatus 121d9c7fc6cSmrg#if NeedFunctionPrototypes 122d9c7fc6cSmrgXevieStart( 123d9c7fc6cSmrg Display* dpy) 124d9c7fc6cSmrg#else 125d9c7fc6cSmrgXevieStart(dpy) 126d9c7fc6cSmrg Display* dpy; 127d9c7fc6cSmrg#endif 128d9c7fc6cSmrg{ 129d9c7fc6cSmrg XExtDisplayInfo *info = find_display (dpy); 130d9c7fc6cSmrg xXevieStartReply rep; 131d9c7fc6cSmrg xXevieStartReq *req; 132d9c7fc6cSmrg 133d9c7fc6cSmrg XextCheckExtension(dpy, info, xevie_extension_name, False); 134d9c7fc6cSmrg 135d9c7fc6cSmrg major_opcode = info->codes->major_opcode; 136d9c7fc6cSmrg LockDisplay(dpy); 137d9c7fc6cSmrg GetReq(XevieStart, req); 138d9c7fc6cSmrg req->reqType = major_opcode; 139d9c7fc6cSmrg req->xevieReqType = X_XevieStart; 140d9c7fc6cSmrg if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 141d9c7fc6cSmrg } 142d9c7fc6cSmrg UnlockDisplay(dpy); 143d9c7fc6cSmrg SyncHandle(); 144d9c7fc6cSmrg return(rep.pad1); 145d9c7fc6cSmrg} 146d9c7fc6cSmrg 147d9c7fc6cSmrgStatus 148d9c7fc6cSmrgXevieEnd(dpy) 149d9c7fc6cSmrg Display* dpy; 150d9c7fc6cSmrg{ 151d9c7fc6cSmrg XExtDisplayInfo *info = find_display (dpy); 152d9c7fc6cSmrg xXevieEndReply rep; 153d9c7fc6cSmrg xXevieEndReq *req; 154d9c7fc6cSmrg 155d9c7fc6cSmrg XextCheckExtension (dpy, info, xevie_extension_name, False); 156d9c7fc6cSmrg 157d9c7fc6cSmrg LockDisplay(dpy); 158d9c7fc6cSmrg GetReq(XevieEnd, req); 159d9c7fc6cSmrg req->reqType = info->codes->major_opcode; 160d9c7fc6cSmrg req->xevieReqType = X_XevieEnd; 161d9c7fc6cSmrg 162d9c7fc6cSmrg if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 163d9c7fc6cSmrg } 164d9c7fc6cSmrg UnlockDisplay(dpy); 165d9c7fc6cSmrg SyncHandle(); 166d9c7fc6cSmrg return True; 167d9c7fc6cSmrg} 168d9c7fc6cSmrg 169d9c7fc6cSmrgStatus 170d9c7fc6cSmrgXevieSendEvent(dpy, event, dataType) 171d9c7fc6cSmrg Display* dpy; 172d9c7fc6cSmrg XEvent* event; 173d9c7fc6cSmrg char dataType; 174d9c7fc6cSmrg{ 175d9c7fc6cSmrg xXevieSendReply rep; 176d9c7fc6cSmrg xXevieSendReq *req; 177d9c7fc6cSmrg 178d9c7fc6cSmrg LockDisplay(dpy); 179d9c7fc6cSmrg GetReq(XevieSend, req); 180d9c7fc6cSmrg req->reqType = major_opcode; 181d9c7fc6cSmrg req->xevieReqType = X_XevieSend; 182d9c7fc6cSmrg req->dataType = dataType; 183d9c7fc6cSmrg _XEventToWire(dpy, event, &req->event); 184d9c7fc6cSmrg if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 185d9c7fc6cSmrg } 186d9c7fc6cSmrg UnlockDisplay(dpy); 187d9c7fc6cSmrg SyncHandle(); 188d9c7fc6cSmrg return True; 189d9c7fc6cSmrg} 190d9c7fc6cSmrg 191d9c7fc6cSmrgStatus 192d9c7fc6cSmrgXevieSelectInput(dpy, event_mask) 193d9c7fc6cSmrg Display* dpy; 194d9c7fc6cSmrg long event_mask; 195d9c7fc6cSmrg{ 196d9c7fc6cSmrg xXevieSelectInputReply rep; 197d9c7fc6cSmrg xXevieSelectInputReq *req; 198d9c7fc6cSmrg 199d9c7fc6cSmrg LockDisplay(dpy); 200d9c7fc6cSmrg GetReq(XevieSelectInput, req); 201d9c7fc6cSmrg req->reqType = major_opcode; 202d9c7fc6cSmrg req->xevieReqType = X_XevieSelectInput; 203d9c7fc6cSmrg req->event_mask = event_mask; 204d9c7fc6cSmrg xevie_mask = event_mask; 205d9c7fc6cSmrg if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) { 206d9c7fc6cSmrg } 207d9c7fc6cSmrg UnlockDisplay(dpy); 208d9c7fc6cSmrg SyncHandle(); 209d9c7fc6cSmrg return True; 210d9c7fc6cSmrg} 211d9c7fc6cSmrg 212