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