|
|
1.1 root 1: #include "copyright.h"
2: /* Copyright Massachusetts Institute of Technology 1985, 1986, 1987 */
3:
4: #ifndef lint
5: static char rcsid[] = "$Header: XEvToWire.c,v 11.10 87/09/11 08:08:50 toddb Exp $";
6: #endif
7:
8: /*
9: * XEvToWire.c - Internal support routines for the C subroutine
10: * interface library (Xlib) to the X Window System Protocol V11.0.
11: */
12: #define NEED_EVENTS
13: #define NEED_REPLIES
14:
15: #include <stdio.h>
16: #include "Xlibint.h"
17:
18: /*
19: * reformat a wire event into an XEvent structure of the right type.
20: */
21: /*ARGSUSED*/
22: _XEventToWire(dpy, re, event)
23: register Display *dpy; /* pointer to display structure */
24: register XEvent *re; /* pointer to where event should be reformatted */
25: register xEvent *event; /* wire protocol event */
26: {
27:
28: switch (event->u.u.type = re->type) {
29: case KeyPress:
30: case KeyRelease:
31: {
32: register XKeyEvent *ev = (XKeyEvent*) re;
33: event->u.keyButtonPointer.root = ev->root;
34: ev->window = event->u.keyButtonPointer.event;
35:
36: event->u.keyButtonPointer.event = ev->window;
37: event->u.keyButtonPointer.child = ev->subwindow;
38: event->u.keyButtonPointer.time = ev->time;
39: event->u.keyButtonPointer.eventX = ev->x ;
40: event->u.keyButtonPointer.eventY = ev->y ;
41: event->u.keyButtonPointer.rootX = ev->x_root;
42: event->u.keyButtonPointer.rootY = ev->y_root;
43: event->u.keyButtonPointer.state = ev->state;
44: event->u.keyButtonPointer.sameScreen = ev->same_screen;
45: event->u.u.detail = ev->keycode;
46: }
47: break;
48: case ButtonPress:
49: case ButtonRelease:
50: {
51: register XButtonEvent *ev = (XButtonEvent *) re;
52: event->u.keyButtonPointer.root = ev->root;
53: event->u.keyButtonPointer.event = ev->window;
54: event->u.keyButtonPointer.child = ev->subwindow;
55: event->u.keyButtonPointer.time = ev->time;
56: event->u.keyButtonPointer.eventX = ev->x;
57: event->u.keyButtonPointer.event = ev->y;
58: event->u.keyButtonPointer.rootX = ev->x_root;
59: event->u.keyButtonPointer.rootY = ev->y_root;
60: event->u.keyButtonPointer.state = ev->state;
61: event->u.keyButtonPointer.sameScreen = ev->same_screen;
62: event->u.u.detail = ev->button;
63: }
64: break;
65: case MotionNotify:
66: {
67: register XMotionEvent *ev = (XMotionEvent *)re;
68: event->u.keyButtonPointer.root = ev->root;
69: event->u.keyButtonPointer.event = ev->window;
70: event->u.keyButtonPointer.child = ev->subwindow;
71: event->u.keyButtonPointer.time = ev->time;
72: event->u.keyButtonPointer.eventX= ev->x;
73: event->u.keyButtonPointer.eventY= ev->y;
74: event->u.keyButtonPointer.rootX = ev->x_root;
75: event->u.keyButtonPointer.rootY = ev->y_root;
76: event->u.keyButtonPointer.state = ev->state;
77: event->u.keyButtonPointer.sameScreen= ev->same_screen;
78: event->u.u.detail = ev->is_hint;
79: }
80: break;
81: case EnterNotify:
82: case LeaveNotify:
83: {
84: register XCrossingEvent *ev = (XCrossingEvent *) re;
85: event->u.enterLeave.root = ev->root;
86: event->u.enterLeave.event = ev->window;
87: event->u.enterLeave.child = ev->subwindow;
88: event->u.enterLeave.time = ev->time;
89: event->u.enterLeave.eventX = ev->x;
90: event->u.enterLeave.eventY = ev->y;
91: event->u.enterLeave.rootX = ev->x_root;
92: event->u.enterLeave.rootY = ev->y_root;
93: event->u.enterLeave.state = ev->state;
94: event->u.enterLeave.mode = ev->mode;
95: event->u.enterLeave.flags = 0;
96: if (ev->same_screen) {
97: event->u.enterLeave.flags |= ELFlagSameScreen;
98: }
99: if (ev->focus) {
100: event->u.enterLeave.flags |= ELFlagFocus;
101: }
102: event->u.u.detail = ev->detail;
103: }
104: break;
105: case FocusIn:
106: case FocusOut:
107: {
108: register XFocusChangeEvent *ev = (XFocusChangeEvent *) re;
109: event->u.focus.window = ev->window;
110: event->u.focus.mode = ev->mode;
111: event->u.u.detail = ev->detail;
112: }
113: break;
114: case KeymapNotify:
115: {
116: register XKeymapEvent *ev = (XKeymapEvent *) re;
117: bcopy ( &ev->key_vector[1],
118: (char *)(((xKeymapEvent *) event)->map),
119: sizeof (((xKeymapEvent *) event)->map));
120: }
121: break;
122: case Expose:
123: {
124: register XExposeEvent *ev = (XExposeEvent *) re;
125: event->u.expose.window = ev->window;
126: event->u.expose.x = ev->x;
127: event->u.expose.y = ev->y;
128: event->u.expose.width = ev->width;
129: event->u.expose.height = ev->height;
130: event->u.expose.count = ev->count;
131: }
132: break;
133: case GraphicsExpose:
134: {
135: register XGraphicsExposeEvent *ev =
136: (XGraphicsExposeEvent *) re;
137: event->u.graphicsExposure.drawable = ev->drawable;
138: event->u.graphicsExposure.x = ev->x;
139: event->u.graphicsExposure.y = ev->y;
140: event->u.graphicsExposure.width = ev->width;
141: event->u.graphicsExposure.height = ev->height;
142: event->u.graphicsExposure.count = ev->count;
143: event->u.graphicsExposure.majorEvent= ev->major_code;
144: event->u.graphicsExposure.minorEvent= ev->minor_code;
145: }
146: break;
147: case NoExpose:
148: {
149: register XNoExposeEvent *ev = (XNoExposeEvent *) re;
150: event->u.noExposure.drawable = ev->drawable;
151: event->u.noExposure.majorEvent = ev->major_code;
152: event->u.noExposure.minorEvent = ev->minor_code;
153: }
154: break;
155: case VisibilityNotify:
156: {
157: register XVisibilityEvent *ev = (XVisibilityEvent *) re;
158: event->u.visibility.window = ev->window;
159: event->u.visibility.state = ev->state;
160: }
161: break;
162: case CreateNotify:
163: {
164: register XCreateWindowEvent *ev =
165: (XCreateWindowEvent *) re;
166: event->u.createNotify.window = ev->window;
167: event->u.createNotify.parent = ev->parent;
168: event->u.createNotify.x = ev->x;
169: event->u.createNotify.y = ev->y;
170: event->u.createNotify.width = ev->width;
171: event->u.createNotify.height = ev->height;
172: event->u.createNotify.borderWidth = ev->border_width;
173: event->u.createNotify.override = ev->override_redirect;
174: }
175: break;
176: case DestroyNotify:
177: {
178: register XDestroyWindowEvent *ev =
179: (XDestroyWindowEvent *) re;
180: event->u.destroyNotify.window = ev->window;
181: event->u.destroyNotify.event = ev->event;
182: }
183: break;
184: case UnmapNotify:
185: {
186: register XUnmapEvent *ev = (XUnmapEvent *) re;
187: event->u.unmapNotify.window = ev->window;
188: event->u.unmapNotify.event = ev->event;
189: event->u.unmapNotify.fromConfigure = ev->from_configure;
190: }
191: break;
192: case MapNotify:
193: {
194: register XMapEvent *ev = (XMapEvent *) re;
195: event->u.mapNotify.window = ev->window;
196: event->u.mapNotify.event = ev->event;
197: event->u.mapNotify.override = ev->override_redirect;
198: }
199: break;
200: case MapRequest:
201: {
202: register XMapRequestEvent *ev = (XMapRequestEvent *) re;
203: event->u.mapRequest.window = ev->window;
204: event->u.mapRequest.parent = ev->parent;
205: }
206: break;
207: case ReparentNotify:
208: {
209: register XReparentEvent *ev = (XReparentEvent *) re;
210: event->u.reparent.window = ev->window;
211: event->u.reparent.event = ev->event;
212: event->u.reparent.parent = ev->parent;
213: event->u.reparent.x = ev->x;
214: event->u.reparent.y = ev->y;
215: event->u.reparent.override = ev->override_redirect;
216: }
217: break;
218: case ConfigureNotify:
219: {
220: register XConfigureEvent *ev = (XConfigureEvent *) re;
221: event->u.configureNotify.window = ev->window;
222: event->u.configureNotify.event = ev->event;
223: event->u.configureNotify.aboveSibling = ev->above;
224: event->u.configureNotify.x = ev->x;
225: event->u.configureNotify.y = ev->y;
226: event->u.configureNotify.width = ev->width;
227: event->u.configureNotify.height = ev->height;
228: event->u.configureNotify.borderWidth= ev->border_width;
229: event->u.configureNotify.override = ev->override_redirect;
230: }
231: break;
232: case ConfigureRequest:
233: {
234: register XConfigureRequestEvent *ev =
235: (XConfigureRequestEvent *) re;
236: event->u.configureRequest.window = ev->window;
237: event->u.configureRequest.parent = ev->parent;
238: event->u.configureRequest.sibling = ev->above;
239: event->u.configureRequest.x = ev->x;
240: event->u.configureRequest.y = ev->y;
241: event->u.configureRequest.width = ev->width;
242: event->u.configureRequest.height = ev->height;
243: event->u.configureRequest.borderWidth= ev->border_width;
244: event->u.configureRequest.valueMask= ev->value_mask;
245: event->u.u.detail = ev->detail;
246: }
247: break;
248: case GravityNotify:
249: {
250: register XGravityEvent *ev = (XGravityEvent *) re;
251: event->u.gravity.window = ev->window;
252: event->u.gravity.event = ev->event;
253: event->u.gravity.x = ev->x;
254: event->u.gravity.y = ev->y;
255: }
256: break;
257: case ResizeRequest:
258: {
259: register XResizeRequestEvent *ev =
260: (XResizeRequestEvent *) re;
261: event->u.resizeRequest.window = ev->window;
262: event->u.resizeRequest.width = ev->width;
263: event->u.resizeRequest.height = ev->height;
264: }
265: break;
266: case CirculateNotify:
267: {
268: register XCirculateEvent *ev = (XCirculateEvent *) re;
269: event->u.circulate.window = ev->window;
270: event->u.circulate.event = ev->event;
271: event->u.circulate.place = ev->place;
272: }
273: break;
274: case CirculateRequest:
275: {
276: register XCirculateRequestEvent *ev =
277: (XCirculateRequestEvent *) re;
278: event->u.circulate.window = ev->window;
279: event->u.circulate.event = ev->parent;
280: event->u.circulate.place = ev->place;
281: }
282: break;
283: case PropertyNotify:
284: {
285: register XPropertyEvent *ev = (XPropertyEvent *) re;
286: event->u.property.window = ev->window;
287: event->u.property.atom = ev->atom;
288: event->u.property.time = ev->time;
289: event->u.property.state = ev->state;
290: }
291: break;
292: case SelectionClear:
293: {
294: register XSelectionClearEvent *ev =
295: (XSelectionClearEvent *) re;
296: event->u.selectionClear.window = ev->window;
297: event->u.selectionClear.atom = ev->selection;
298: event->u.selectionClear.time = ev->time;
299: }
300: break;
301: case SelectionRequest:
302: {
303: register XSelectionRequestEvent *ev =
304: (XSelectionRequestEvent *) re;
305: event->u.selectionRequest.owner = ev->owner;
306: event->u.selectionRequest.requestor = ev->requestor;
307: event->u.selectionRequest.selection = ev->selection;
308: event->u.selectionRequest.target = ev->target;
309: event->u.selectionRequest.property = ev->property;
310: event->u.selectionRequest.time = ev->time;
311: }
312: break;
313: case SelectionNotify:
314: {
315: register XSelectionEvent *ev = (XSelectionEvent *) re;
316: event->u.selectionNotify.requestor = ev->requestor;
317: event->u.selectionNotify.selection = ev->selection;
318: event->u.selectionNotify.target = ev->target;
319: event->u.selectionNotify.property = ev->property;
320: event->u.selectionNotify.time = ev->time;
321: }
322: break;
323: case ColormapNotify:
324: {
325: register XColormapEvent *ev = (XColormapEvent *) re;
326: event->u.colormap.window = ev->window;
327: event->u.colormap.colormap = ev->colormap;
328: event->u.colormap.new = ev->new;
329: event->u.colormap.state = ev->state;
330: }
331: break;
332: case ClientMessage:
333: {
334: register int i;
335: register XClientMessageEvent *ev
336: = (XClientMessageEvent *) re;
337: event->u.clientMessage.window = ev->window;
338: event->u.u.detail = ev->format;
339: switch (ev->format) {
340: case 8:
341: event->u.clientMessage.u.b.type = ev->message_type;
342: for (i = 0; i < 20; i++)
343: event->u.clientMessage.u.b.bytes[i] = ev->data.b[i];
344: break;
345: case 16:
346: event->u.clientMessage.u.s.type = ev->message_type;
347: event->u.clientMessage.u.s.shorts0 = ev->data.s[0];
348: event->u.clientMessage.u.s.shorts1 = ev->data.s[1];
349: event->u.clientMessage.u.s.shorts2 = ev->data.s[2];
350: event->u.clientMessage.u.s.shorts3 = ev->data.s[3];
351: event->u.clientMessage.u.s.shorts4 = ev->data.s[4];
352: event->u.clientMessage.u.s.shorts5 = ev->data.s[5];
353: event->u.clientMessage.u.s.shorts6 = ev->data.s[6];
354: event->u.clientMessage.u.s.shorts7 = ev->data.s[7];
355: event->u.clientMessage.u.s.shorts8 = ev->data.s[8];
356: event->u.clientMessage.u.s.shorts9 = ev->data.s[9];
357: break;
358: case 32:
359: event->u.clientMessage.u.l.type = ev->message_type;
360: event->u.clientMessage.u.l.longs0 = ev->data.l[0];
361: event->u.clientMessage.u.l.longs1 = ev->data.l[1];
362: event->u.clientMessage.u.l.longs2 = ev->data.l[2];
363: event->u.clientMessage.u.l.longs3 = ev->data.l[3];
364: event->u.clientMessage.u.l.longs4 = ev->data.l[4];
365: break;
366: default: /* XXX should never occur */
367: break;
368: }
369: }
370: case MappingNotify:
371: {
372: register XMappingEvent *ev = (XMappingEvent *) re;
373: event->u.mappingNotify.firstKeyCode = ev->first_keycode;
374: event->u.mappingNotify.request = ev->request;
375: event->u.mappingNotify.count = ev->count;
376: }
377: break;
378:
379: default:
380: /* XXX should do something about unknown event here */
381: break;
382: }
383: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.