19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * Copyright 1993-2001 by Xi Graphics, Inc. 39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * All Rights Reserved. 49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * 59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * Please see the LICENSE file accompanying this distribution for licensing 69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * information. 79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * 89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * Please send any bug fixes and modifications to src@xig.com. 99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * 109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * $XiGId: xme.c,v 1.2 2001/11/30 21:56:59 jon Exp $ 119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * 129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall */ 139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define NEED_EVENTS 159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define NEED_REPLIES 169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Apparently some X11 systems can't include this multiple times... */ 189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef SDL_INCLUDED_XLIBINT_H 199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define SDL_INCLUDED_XLIBINT_H 1 209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <X11/Xlibint.h> 219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif 229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <X11/Xthreads.h> 249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <X11/Xmd.h> 259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <X11/Xproto.h> 269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "../extensions/Xext.h" 279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "../extensions/extutil.h" 289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/*****************************************************************************/ 309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XIGMISC_PROTOCOL_NAME "XiG-SUNDRY-NONSTANDARD" 339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XIGMISC_MAJOR_VERSION 2 349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XIGMISC_MINOR_VERSION 0 359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XiGMiscNumberEvents 0 379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define X_XiGMiscQueryVersion 0 399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define X_XiGMiscQueryViews 1 409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define X_XiGMiscQueryResolutions 2 419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define X_XiGMiscChangeResolution 3 429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define X_XiGMiscFullScreen 4 439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define sz_xXiGMiscQueryVersionReq 8 459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define sz_xXiGMiscQueryViewsReq 8 469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define sz_xXiGMiscQueryResolutionsReq 8 479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define sz_xXiGMiscChangeResolutionReq 16 489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define sz_xXiGMiscFullScreenReq 16 499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define sz_xXiGMiscQueryVersionReply 32 519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define sz_xXiGMiscQueryViewsReply 32 529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define sz_xXiGMiscQueryResolutionsReply 32 539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define sz_xXiGMiscQueryFullScreenReply 32 549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/*******************************************************************/ 569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 reqType; /* always codes->major_opcode */ 599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 xigmiscReqType; /* always X_XiGMiscQueryVersion */ 609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 length; 619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 major; 629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 minor; 639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} xXiGMiscQueryVersionReq; 649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 reqType; /* always codes->major_opcode */ 679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 xigmiscReqType; /* always X_XiGMiscQueryViews */ 689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 length; 699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 screen; 709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 pad0; 719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 pad1; 729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} xXiGMiscQueryViewsReq; 739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 reqType; /* always codes->major_opcode */ 769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 xigmiscReqType; /* always X_XiGMiscQueryResolutions */ 779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 length; 789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 screen; 799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 view; 809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 pad0; 819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} xXiGMiscQueryResolutionsReq; 829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 reqType; /* always codes->major_opcode */ 859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 xigmiscReqType; /* always X_XiGMiscChangeResolution */ 869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 length; 879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 screen; 889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 view; 899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 pad0; 909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 width; 919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 height; 929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall INT32 refresh; 939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} xXiGMiscChangeResolutionReq; 949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 reqType; /* always codes->major_opcode */ 979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 xigmiscReqType; /* always X_XiGMiscFullScreen */ 989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 length; 999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 screen; 1009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 pad0; 1019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 pad1; 1029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 window; 1039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 cmap; 1049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} xXiGMiscFullScreenReq; 1059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/*******************************************************************/ 1079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 1099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall BYTE type; /* X_Reply */ 1109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 pad0; 1119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 sequenceNumber; 1129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 length; 1139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 major; 1149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 minor; 1159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad1; 1169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad2; 1179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad3; 1189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad4; 1199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad5; 1209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} xXiGMiscQueryVersionReply; 1219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 1239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall BYTE type; /* X_Reply */ 1249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 pad0; 1259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 sequenceNumber; 1269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 length; 1279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 nviews; 1289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad1; 1299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad2; 1309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad3; 1319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad4; 1329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad5; 1339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} xXiGMiscQueryViewsReply; 1349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 1369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall BYTE type; /* X_Reply */ 1379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD8 pad0; 1389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 sequenceNumber; 1399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 length; 1409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 active; 1419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 nresolutions; 1429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad1; 1439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad2; 1449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad3; 1459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad4; 1469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad5; 1479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} xXiGMiscQueryResolutionsReply; 1489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 1509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall BYTE type; /* X_Reply */ 1519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall BOOL success; 1529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 sequenceNumber; 1539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 length; 1549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad1; 1559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad2; 1569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad3; 1579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad4; 1589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad5; 1599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD32 pad6; 1609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} xXiGMiscFullScreenReply; 1619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/*******************************************************************/ 1639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 1659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall INT16 x; 1669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall INT16 y; 1679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 w; 1689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 h; 1699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} XiGMiscViewInfo; 1709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct { 1729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 width; 1739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CARD16 height; 1749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall INT32 refresh; 1759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} XiGMiscResolutionInfo; 1769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/*****************************************************************************/ 1789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallstatic XExtensionInfo *xigmisc_info = NULL; 1809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallstatic char *xigmisc_extension_name = XIGMISC_PROTOCOL_NAME; 1819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XiGMiscCheckExtension(dpy,i,val) \ 1839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XextCheckExtension (dpy, i, xigmisc_extension_name, val) 1849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XiGMiscSimpleCheckExtension(dpy,i) \ 1859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XextSimpleCheckExtension (dpy, i, xigmisc_extension_name) 1869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#if defined(__STDC__) && !defined(UNIXCPP) 1889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XiGMiscGetReq(name,req,info) GetReq (name, req); \ 1899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->reqType = info->codes->major_opcode; \ 1909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->xigmiscReqType = X_##name; 1919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XiGMiscGetReqExtra(name,n,req,info) GetReqExtra (name, n, req); \ 1939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->reqType = info->codes->major_opcode; \ 1949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->xigmicReqType = X_##name; 1959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#else 1969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XiGMiscGetReq(name,req,info) GetReq (name, req); \ 1979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->reqType = info->codes->major_opcode; \ 1989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->xigmiscReqType = X_/**/name; 1999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define XiGMiscGetReqExtra(name,n,req,info) GetReqExtra (name, n, req); \ 2009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->reqType = info->codes->major_opcode; \ 2019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->xigmiscReqType = X_/**/name; 2029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif 2039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* 2079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall * find_display - locate the display info block 2089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall */ 2099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallstatic int XiGMiscCloseDisplay(); 2109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallstatic XExtensionHooks xigmisc_extension_hooks = { 2129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* create_gc */ 2139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* copy_gc */ 2149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* flush_gc */ 2159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* free_gc */ 2169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* create_font */ 2179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* free_font */ 2189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscCloseDisplay, /* close_display */ 2199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* wire_to_event */ 2209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* event_to_wire */ 2219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* error */ 2229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall NULL, /* error_string */ 2239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}; 2249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallstatic XEXT_GENERATE_CLOSE_DISPLAY (XiGMiscCloseDisplay, xigmisc_info) 2279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallstatic XEXT_GENERATE_FIND_DISPLAY (XiGMiscFindDisplay, xigmisc_info, 2299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xigmisc_extension_name, 2309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall &xigmisc_extension_hooks, XiGMiscNumberEvents, NULL) 2319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/*****************************************************************************/ 2349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallBool XiGMiscQueryVersion(Display *dpy, int *major, int *minor) 2369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{ 2379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall int opcode, event, error; 2389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xXiGMiscQueryVersionReq *req; 2399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xXiGMiscQueryVersionReply rep; 2409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XExtDisplayInfo *info = XiGMiscFindDisplay(dpy); 2419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (!XQueryExtension(dpy, XIGMISC_PROTOCOL_NAME, &opcode, &event, &error)) 2439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return xFalse; 2449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscCheckExtension(dpy, info, xFalse); 2469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall LockDisplay (dpy); 2489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscGetReq (XiGMiscQueryVersion, req, info); 2499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->major = XIGMISC_MAJOR_VERSION; 2519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->minor = XIGMISC_MINOR_VERSION; 2529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (!_XReply (dpy, (xReply *)&rep, 0, xTrue)) { 2549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 2559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 2569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return xFalse; 2579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *major = rep.major; 2609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *minor = rep.minor; 2619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 2629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 2639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return xTrue; 2659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} 2669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallint XiGMiscQueryViews(Display *dpy, int screen, XiGMiscViewInfo **pviews) 2689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{ 2699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall int n, size; 2709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscViewInfo *views; 2719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xXiGMiscQueryViewsReq *req; 2729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xXiGMiscQueryViewsReply rep; 2739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XExtDisplayInfo *info = XiGMiscFindDisplay(dpy); 2749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscCheckExtension(dpy, info, 0); 2759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall LockDisplay (dpy); 2779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscGetReq (XiGMiscQueryViews, req, info); 2789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->screen = screen; 2799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (!_XReply (dpy, (xReply *)&rep, 0, xFalse)) { 2819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 2829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 2839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return 0; 2849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall n = rep.nviews; 2879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (n > 0) { 2899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall size = sizeof(XiGMiscViewInfo) * n; 2909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall views = (XiGMiscViewInfo*)Xmalloc(size); 2919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (!views) { 2929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall _XEatData(dpy, (unsigned long)size); 2939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 2949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 2959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return 0; 2969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall _XReadPad(dpy, (void*)views, size); 2999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *pviews = views; 3019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 3049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 3059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return n; 3079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} 3089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallint XiGMiscQueryResolutions(Display *dpy, int screen, int view, int *pactive, XiGMiscResolutionInfo **presolutions) 3109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{ 3119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall int n, size; 3129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscResolutionInfo *resolutions; 3139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xXiGMiscQueryResolutionsReq *req; 3149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xXiGMiscQueryResolutionsReply rep; 3159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XExtDisplayInfo *info = XiGMiscFindDisplay(dpy); 3169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscCheckExtension(dpy, info, 0); 3179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall LockDisplay (dpy); 3199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscGetReq (XiGMiscQueryResolutions, req, info); 3209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->screen = screen; 3219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->view = view; 3229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (!_XReply (dpy, (xReply *)&rep, 0, xFalse)) { 3249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 3259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 3269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return 0; 3279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall n = rep.nresolutions; 3309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (n > 0) { 3329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall size = sizeof(XiGMiscResolutionInfo) * n; 3339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall resolutions = (XiGMiscResolutionInfo*)Xmalloc(size); 3349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (!resolutions) { 3359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall _XEatData(dpy, (unsigned long)size); 3369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 3379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 3389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return 0; 3399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall _XReadPad(dpy, (void*)resolutions, size); 3429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *presolutions = resolutions; 3449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *pactive = rep.active; 3459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 3489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 3499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return n; 3519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} 3529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid XiGMiscChangeResolution(Display *dpy, int screen, int view, int width, int height, int refresh) 3549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{ 3559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xXiGMiscChangeResolutionReq *req; 3569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XExtDisplayInfo *info = XiGMiscFindDisplay(dpy); 3579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscSimpleCheckExtension(dpy, info); 3599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall LockDisplay (dpy); 3619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscGetReq (XiGMiscChangeResolution, req, info); 3629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->screen = screen; 3639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->view = view; 3649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->width = width; 3659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->height = height; 3669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->refresh = refresh; 3679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 3699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 3709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} 3719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallBool XiGMiscFullScreen(Display *dpy, int screen, XID window, XID cmap) 3749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{ 3759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xXiGMiscFullScreenReq *req; 3769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xXiGMiscFullScreenReply rep; 3779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XExtDisplayInfo *info = XiGMiscFindDisplay(dpy); 3789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscCheckExtension(dpy, info, xFalse); 3809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall LockDisplay (dpy); 3829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XiGMiscGetReq (XiGMiscFullScreen, req, info); 3839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->screen = screen; 3849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->pad0 = 0; 3859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->pad1 = 0; 3869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->window = window; 3879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall req->cmap = cmap; 3889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (!_XReply (dpy, (xReply *)&rep, 0, xTrue)) { 3909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 3919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 3929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return xFalse; 3939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall UnlockDisplay(dpy); 3969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SyncHandle(); 3979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return (rep.success ? xTrue : xFalse); 3999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} 4009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* SDL addition from Ryan: free memory used by xme. */ 4039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid XiGMiscDestroy(void) 4049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{ 4059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (xigmisc_info) { 4069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall XextDestroyExtension(xigmisc_info); 4079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall xigmisc_info = NULL; 4089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} 4109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 411