2 * Copyright 1993-2001 by Xi Graphics, Inc.
5 * Please see the LICENSE file accompanying this distribution for licensing
8 * Please send any bug fixes and modifications to src@xig.com.
10 * $XiGId: xme.c,v 1.2 2001/11/30 21:56:59 jon Exp $
17 /* Apparently some X11 systems can't include this multiple times... */
18 #ifndef SDL_INCLUDED_XLIBINT_H
19 #define SDL_INCLUDED_XLIBINT_H 1
20 #include <X11/Xlibint.h>
23 #include <X11/Xthreads.h>
25 #include <X11/Xproto.h>
26 #include "../extensions/Xext.h"
27 #include "../extensions/extutil.h"
29 /*****************************************************************************/
32 #define XIGMISC_PROTOCOL_NAME "XiG-SUNDRY-NONSTANDARD"
33 #define XIGMISC_MAJOR_VERSION 2
34 #define XIGMISC_MINOR_VERSION 0
36 #define XiGMiscNumberEvents 0
38 #define X_XiGMiscQueryVersion 0
39 #define X_XiGMiscQueryViews 1
40 #define X_XiGMiscQueryResolutions 2
41 #define X_XiGMiscChangeResolution 3
42 #define X_XiGMiscFullScreen 4
44 #define sz_xXiGMiscQueryVersionReq 8
45 #define sz_xXiGMiscQueryViewsReq 8
46 #define sz_xXiGMiscQueryResolutionsReq 8
47 #define sz_xXiGMiscChangeResolutionReq 16
48 #define sz_xXiGMiscFullScreenReq 16
50 #define sz_xXiGMiscQueryVersionReply 32
51 #define sz_xXiGMiscQueryViewsReply 32
52 #define sz_xXiGMiscQueryResolutionsReply 32
53 #define sz_xXiGMiscQueryFullScreenReply 32
55 /*******************************************************************/
58 CARD8 reqType; /* always codes->major_opcode */
59 CARD8 xigmiscReqType; /* always X_XiGMiscQueryVersion */
63 } xXiGMiscQueryVersionReq;
66 CARD8 reqType; /* always codes->major_opcode */
67 CARD8 xigmiscReqType; /* always X_XiGMiscQueryViews */
72 } xXiGMiscQueryViewsReq;
75 CARD8 reqType; /* always codes->major_opcode */
76 CARD8 xigmiscReqType; /* always X_XiGMiscQueryResolutions */
81 } xXiGMiscQueryResolutionsReq;
84 CARD8 reqType; /* always codes->major_opcode */
85 CARD8 xigmiscReqType; /* always X_XiGMiscChangeResolution */
93 } xXiGMiscChangeResolutionReq;
96 CARD8 reqType; /* always codes->major_opcode */
97 CARD8 xigmiscReqType; /* always X_XiGMiscFullScreen */
104 } xXiGMiscFullScreenReq;
106 /*******************************************************************/
109 BYTE type; /* X_Reply */
111 CARD16 sequenceNumber;
120 } xXiGMiscQueryVersionReply;
123 BYTE type; /* X_Reply */
125 CARD16 sequenceNumber;
133 } xXiGMiscQueryViewsReply;
136 BYTE type; /* X_Reply */
138 CARD16 sequenceNumber;
147 } xXiGMiscQueryResolutionsReply;
150 BYTE type; /* X_Reply */
152 CARD16 sequenceNumber;
160 } xXiGMiscFullScreenReply;
162 /*******************************************************************/
175 } XiGMiscResolutionInfo;
177 /*****************************************************************************/
179 static XExtensionInfo *xigmisc_info = NULL;
180 static char *xigmisc_extension_name = XIGMISC_PROTOCOL_NAME;
182 #define XiGMiscCheckExtension(dpy,i,val) \
183 XextCheckExtension (dpy, i, xigmisc_extension_name, val)
184 #define XiGMiscSimpleCheckExtension(dpy,i) \
185 XextSimpleCheckExtension (dpy, i, xigmisc_extension_name)
187 #if defined(__STDC__) && !defined(UNIXCPP)
188 #define XiGMiscGetReq(name,req,info) GetReq (name, req); \
189 req->reqType = info->codes->major_opcode; \
190 req->xigmiscReqType = X_##name;
192 #define XiGMiscGetReqExtra(name,n,req,info) GetReqExtra (name, n, req); \
193 req->reqType = info->codes->major_opcode; \
194 req->xigmicReqType = X_##name;
196 #define XiGMiscGetReq(name,req,info) GetReq (name, req); \
197 req->reqType = info->codes->major_opcode; \
198 req->xigmiscReqType = X_/**/name;
199 #define XiGMiscGetReqExtra(name,n,req,info) GetReqExtra (name, n, req); \
200 req->reqType = info->codes->major_opcode; \
201 req->xigmiscReqType = X_/**/name;
207 * find_display - locate the display info block
209 static int XiGMiscCloseDisplay();
211 static XExtensionHooks xigmisc_extension_hooks = {
212 NULL, /* create_gc */
216 NULL, /* create_font */
217 NULL, /* free_font */
218 XiGMiscCloseDisplay, /* close_display */
219 NULL, /* wire_to_event */
220 NULL, /* event_to_wire */
222 NULL, /* error_string */
226 static XEXT_GENERATE_CLOSE_DISPLAY (XiGMiscCloseDisplay, xigmisc_info)
228 static XEXT_GENERATE_FIND_DISPLAY (XiGMiscFindDisplay, xigmisc_info,
229 xigmisc_extension_name,
230 &xigmisc_extension_hooks, XiGMiscNumberEvents, NULL)
233 /*****************************************************************************/
235 Bool XiGMiscQueryVersion(Display *dpy, int *major, int *minor)
237 int opcode, event, error;
238 xXiGMiscQueryVersionReq *req;
239 xXiGMiscQueryVersionReply rep;
240 XExtDisplayInfo *info = XiGMiscFindDisplay(dpy);
242 if (!XQueryExtension(dpy, XIGMISC_PROTOCOL_NAME, &opcode, &event, &error))
245 XiGMiscCheckExtension(dpy, info, xFalse);
248 XiGMiscGetReq (XiGMiscQueryVersion, req, info);
250 req->major = XIGMISC_MAJOR_VERSION;
251 req->minor = XIGMISC_MINOR_VERSION;
253 if (!_XReply (dpy, (xReply *)&rep, 0, xTrue)) {
267 int XiGMiscQueryViews(Display *dpy, int screen, XiGMiscViewInfo **pviews)
270 XiGMiscViewInfo *views;
271 xXiGMiscQueryViewsReq *req;
272 xXiGMiscQueryViewsReply rep;
273 XExtDisplayInfo *info = XiGMiscFindDisplay(dpy);
274 XiGMiscCheckExtension(dpy, info, 0);
277 XiGMiscGetReq (XiGMiscQueryViews, req, info);
278 req->screen = screen;
280 if (!_XReply (dpy, (xReply *)&rep, 0, xFalse)) {
289 size = sizeof(XiGMiscViewInfo) * n;
290 views = (XiGMiscViewInfo*)Xmalloc(size);
292 _XEatData(dpy, (unsigned long)size);
298 _XReadPad(dpy, (void*)views, size);
309 int XiGMiscQueryResolutions(Display *dpy, int screen, int view, int *pactive, XiGMiscResolutionInfo **presolutions)
312 XiGMiscResolutionInfo *resolutions;
313 xXiGMiscQueryResolutionsReq *req;
314 xXiGMiscQueryResolutionsReply rep;
315 XExtDisplayInfo *info = XiGMiscFindDisplay(dpy);
316 XiGMiscCheckExtension(dpy, info, 0);
319 XiGMiscGetReq (XiGMiscQueryResolutions, req, info);
320 req->screen = screen;
323 if (!_XReply (dpy, (xReply *)&rep, 0, xFalse)) {
329 n = rep.nresolutions;
332 size = sizeof(XiGMiscResolutionInfo) * n;
333 resolutions = (XiGMiscResolutionInfo*)Xmalloc(size);
335 _XEatData(dpy, (unsigned long)size);
341 _XReadPad(dpy, (void*)resolutions, size);
343 *presolutions = resolutions;
344 *pactive = rep.active;
353 void XiGMiscChangeResolution(Display *dpy, int screen, int view, int width, int height, int refresh)
355 xXiGMiscChangeResolutionReq *req;
356 XExtDisplayInfo *info = XiGMiscFindDisplay(dpy);
358 XiGMiscSimpleCheckExtension(dpy, info);
361 XiGMiscGetReq (XiGMiscChangeResolution, req, info);
362 req->screen = screen;
365 req->height = height;
366 req->refresh = refresh;
373 Bool XiGMiscFullScreen(Display *dpy, int screen, XID window, XID cmap)
375 xXiGMiscFullScreenReq *req;
376 xXiGMiscFullScreenReply rep;
377 XExtDisplayInfo *info = XiGMiscFindDisplay(dpy);
379 XiGMiscCheckExtension(dpy, info, xFalse);
382 XiGMiscGetReq (XiGMiscFullScreen, req, info);
383 req->screen = screen;
386 req->window = window;
389 if (!_XReply (dpy, (xReply *)&rep, 0, xTrue)) {
398 return (rep.success ? xTrue : xFalse);
402 /* SDL addition from Ryan: free memory used by xme. */
403 void XiGMiscDestroy(void)
406 XextDestroyExtension(xigmisc_info);