4 Copyright 1985, 1986, 1987, 1998 The Open Group
6 Permission to use, copy, modify, distribute, and sell this software and its
7 documentation for any purpose is hereby granted without fee, provided that
8 the above copyright notice appear in all copies and that both that
9 copyright notice and this permission notice appear in supporting
12 The above copyright notice and this permission notice shall be included
13 in all copies or substantial portions of the Software.
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
19 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21 OTHER DEALINGS IN THE SOFTWARE.
23 Except as contained in this notice, the name of The Open Group shall
24 not be used in advertising or otherwise to promote the sale, use or
25 other dealings in this Software without prior written authorization
31 * XEvToWire.c - Internal support routines for the C subroutine
32 * interface library (Xlib) to the X Window System Protocol V11.0.
41 * Reformat an XEvent structure to a wire event of the right type.
42 * Return True on success. If the type is unrecognized, return what
43 * _XUnknownNativeEvent returns (i.e., False).
47 register Display *dpy,
48 register XEvent *re, /* in: from */
49 register xEvent *event) /* out: to */
51 switch (event->u.u.type = re->type) {
55 register XKeyEvent *ev = (XKeyEvent*) re;
56 event->u.keyButtonPointer.root = ev->root;
57 event->u.keyButtonPointer.event = ev->window;
58 event->u.keyButtonPointer.child = ev->subwindow;
59 event->u.keyButtonPointer.time = ev->time;
60 event->u.keyButtonPointer.eventX = ev->x ;
61 event->u.keyButtonPointer.eventY = ev->y ;
62 event->u.keyButtonPointer.rootX = ev->x_root;
63 event->u.keyButtonPointer.rootY = ev->y_root;
64 event->u.keyButtonPointer.state = ev->state;
65 event->u.keyButtonPointer.sameScreen = ev->same_screen;
66 event->u.u.detail = ev->keycode;
72 register XButtonEvent *ev = (XButtonEvent *) re;
73 event->u.keyButtonPointer.root = ev->root;
74 event->u.keyButtonPointer.event = ev->window;
75 event->u.keyButtonPointer.child = ev->subwindow;
76 event->u.keyButtonPointer.time = ev->time;
77 event->u.keyButtonPointer.eventX = ev->x;
78 event->u.keyButtonPointer.eventY = ev->y;
79 event->u.keyButtonPointer.rootX = ev->x_root;
80 event->u.keyButtonPointer.rootY = ev->y_root;
81 event->u.keyButtonPointer.state = ev->state;
82 event->u.keyButtonPointer.sameScreen = ev->same_screen;
83 event->u.u.detail = ev->button;
88 register XMotionEvent *ev = (XMotionEvent *)re;
89 event->u.keyButtonPointer.root = ev->root;
90 event->u.keyButtonPointer.event = ev->window;
91 event->u.keyButtonPointer.child = ev->subwindow;
92 event->u.keyButtonPointer.time = ev->time;
93 event->u.keyButtonPointer.eventX= ev->x;
94 event->u.keyButtonPointer.eventY= ev->y;
95 event->u.keyButtonPointer.rootX = ev->x_root;
96 event->u.keyButtonPointer.rootY = ev->y_root;
97 event->u.keyButtonPointer.state = ev->state;
98 event->u.keyButtonPointer.sameScreen= ev->same_screen;
99 event->u.u.detail = ev->is_hint;
105 register XCrossingEvent *ev = (XCrossingEvent *) re;
106 event->u.enterLeave.root = ev->root;
107 event->u.enterLeave.event = ev->window;
108 event->u.enterLeave.child = ev->subwindow;
109 event->u.enterLeave.time = ev->time;
110 event->u.enterLeave.eventX = ev->x;
111 event->u.enterLeave.eventY = ev->y;
112 event->u.enterLeave.rootX = ev->x_root;
113 event->u.enterLeave.rootY = ev->y_root;
114 event->u.enterLeave.state = ev->state;
115 event->u.enterLeave.mode = ev->mode;
116 event->u.enterLeave.flags = 0;
117 if (ev->same_screen) {
118 event->u.enterLeave.flags |= ELFlagSameScreen;
121 event->u.enterLeave.flags |= ELFlagFocus;
123 event->u.u.detail = ev->detail;
129 register XFocusChangeEvent *ev = (XFocusChangeEvent *) re;
130 event->u.focus.window = ev->window;
131 event->u.focus.mode = ev->mode;
132 event->u.u.detail = ev->detail;
137 register XKeymapEvent *ev = (XKeymapEvent *) re;
138 memcpy ((char *)(((xKeymapEvent *) event)->map),
140 sizeof (((xKeymapEvent *) event)->map));
145 register XExposeEvent *ev = (XExposeEvent *) re;
146 event->u.expose.window = ev->window;
147 event->u.expose.x = ev->x;
148 event->u.expose.y = ev->y;
149 event->u.expose.width = ev->width;
150 event->u.expose.height = ev->height;
151 event->u.expose.count = ev->count;
156 register XGraphicsExposeEvent *ev =
157 (XGraphicsExposeEvent *) re;
158 event->u.graphicsExposure.drawable = ev->drawable;
159 event->u.graphicsExposure.x = ev->x;
160 event->u.graphicsExposure.y = ev->y;
161 event->u.graphicsExposure.width = ev->width;
162 event->u.graphicsExposure.height = ev->height;
163 event->u.graphicsExposure.count = ev->count;
164 event->u.graphicsExposure.majorEvent= ev->major_code;
165 event->u.graphicsExposure.minorEvent= ev->minor_code;
170 register XNoExposeEvent *ev = (XNoExposeEvent *) re;
171 event->u.noExposure.drawable = ev->drawable;
172 event->u.noExposure.majorEvent = ev->major_code;
173 event->u.noExposure.minorEvent = ev->minor_code;
176 case VisibilityNotify:
178 register XVisibilityEvent *ev = (XVisibilityEvent *) re;
179 event->u.visibility.window = ev->window;
180 event->u.visibility.state = ev->state;
185 register XCreateWindowEvent *ev =
186 (XCreateWindowEvent *) re;
187 event->u.createNotify.window = ev->window;
188 event->u.createNotify.parent = ev->parent;
189 event->u.createNotify.x = ev->x;
190 event->u.createNotify.y = ev->y;
191 event->u.createNotify.width = ev->width;
192 event->u.createNotify.height = ev->height;
193 event->u.createNotify.borderWidth = ev->border_width;
194 event->u.createNotify.override = ev->override_redirect;
199 register XDestroyWindowEvent *ev =
200 (XDestroyWindowEvent *) re;
201 event->u.destroyNotify.window = ev->window;
202 event->u.destroyNotify.event = ev->event;
207 register XUnmapEvent *ev = (XUnmapEvent *) re;
208 event->u.unmapNotify.window = ev->window;
209 event->u.unmapNotify.event = ev->event;
210 event->u.unmapNotify.fromConfigure = ev->from_configure;
215 register XMapEvent *ev = (XMapEvent *) re;
216 event->u.mapNotify.window = ev->window;
217 event->u.mapNotify.event = ev->event;
218 event->u.mapNotify.override = ev->override_redirect;
223 register XMapRequestEvent *ev = (XMapRequestEvent *) re;
224 event->u.mapRequest.window = ev->window;
225 event->u.mapRequest.parent = ev->parent;
230 register XReparentEvent *ev = (XReparentEvent *) re;
231 event->u.reparent.window = ev->window;
232 event->u.reparent.event = ev->event;
233 event->u.reparent.parent = ev->parent;
234 event->u.reparent.x = ev->x;
235 event->u.reparent.y = ev->y;
236 event->u.reparent.override = ev->override_redirect;
239 case ConfigureNotify:
241 register XConfigureEvent *ev = (XConfigureEvent *) re;
242 event->u.configureNotify.window = ev->window;
243 event->u.configureNotify.event = ev->event;
244 event->u.configureNotify.aboveSibling = ev->above;
245 event->u.configureNotify.x = ev->x;
246 event->u.configureNotify.y = ev->y;
247 event->u.configureNotify.width = ev->width;
248 event->u.configureNotify.height = ev->height;
249 event->u.configureNotify.borderWidth= ev->border_width;
250 event->u.configureNotify.override = ev->override_redirect;
253 case ConfigureRequest:
255 register XConfigureRequestEvent *ev =
256 (XConfigureRequestEvent *) re;
257 event->u.configureRequest.window = ev->window;
258 event->u.configureRequest.parent = ev->parent;
259 event->u.configureRequest.sibling = ev->above;
260 event->u.configureRequest.x = ev->x;
261 event->u.configureRequest.y = ev->y;
262 event->u.configureRequest.width = ev->width;
263 event->u.configureRequest.height = ev->height;
264 event->u.configureRequest.borderWidth= ev->border_width;
265 event->u.configureRequest.valueMask= ev->value_mask;
266 event->u.u.detail = ev->detail;
271 register XGravityEvent *ev = (XGravityEvent *) re;
272 event->u.gravity.window = ev->window;
273 event->u.gravity.event = ev->event;
274 event->u.gravity.x = ev->x;
275 event->u.gravity.y = ev->y;
280 register XResizeRequestEvent *ev =
281 (XResizeRequestEvent *) re;
282 event->u.resizeRequest.window = ev->window;
283 event->u.resizeRequest.width = ev->width;
284 event->u.resizeRequest.height = ev->height;
287 case CirculateNotify:
289 register XCirculateEvent *ev = (XCirculateEvent *) re;
290 event->u.circulate.window = ev->window;
291 event->u.circulate.event = ev->event;
292 event->u.circulate.place = ev->place;
295 case CirculateRequest:
297 register XCirculateRequestEvent *ev =
298 (XCirculateRequestEvent *) re;
299 event->u.circulate.window = ev->window;
300 event->u.circulate.event = ev->parent;
301 event->u.circulate.place = ev->place;
306 register XPropertyEvent *ev = (XPropertyEvent *) re;
307 event->u.property.window = ev->window;
308 event->u.property.atom = ev->atom;
309 event->u.property.time = ev->time;
310 event->u.property.state = ev->state;
315 register XSelectionClearEvent *ev =
316 (XSelectionClearEvent *) re;
317 event->u.selectionClear.window = ev->window;
318 event->u.selectionClear.atom = ev->selection;
319 event->u.selectionClear.time = ev->time;
322 case SelectionRequest:
324 register XSelectionRequestEvent *ev =
325 (XSelectionRequestEvent *) re;
326 event->u.selectionRequest.owner = ev->owner;
327 event->u.selectionRequest.requestor = ev->requestor;
328 event->u.selectionRequest.selection = ev->selection;
329 event->u.selectionRequest.target = ev->target;
330 event->u.selectionRequest.property = ev->property;
331 event->u.selectionRequest.time = ev->time;
334 case SelectionNotify:
336 register XSelectionEvent *ev = (XSelectionEvent *) re;
337 event->u.selectionNotify.requestor = ev->requestor;
338 event->u.selectionNotify.selection = ev->selection;
339 event->u.selectionNotify.target = ev->target;
340 event->u.selectionNotify.property = ev->property;
341 event->u.selectionNotify.time = ev->time;
346 register XColormapEvent *ev = (XColormapEvent *) re;
347 event->u.colormap.window = ev->window;
348 event->u.colormap.colormap = ev->colormap;
349 event->u.colormap.new = ev->new;
350 event->u.colormap.state = ev->state;
356 register XClientMessageEvent *ev
357 = (XClientMessageEvent *) re;
358 event->u.clientMessage.window = ev->window;
359 event->u.u.detail = ev->format;
360 switch (ev->format) {
362 event->u.clientMessage.u.b.type = ev->message_type;
363 for (i = 0; i < 20; i++)
364 event->u.clientMessage.u.b.bytes[i] = ev->data.b[i];
367 event->u.clientMessage.u.s.type = ev->message_type;
368 event->u.clientMessage.u.s.shorts0 = ev->data.s[0];
369 event->u.clientMessage.u.s.shorts1 = ev->data.s[1];
370 event->u.clientMessage.u.s.shorts2 = ev->data.s[2];
371 event->u.clientMessage.u.s.shorts3 = ev->data.s[3];
372 event->u.clientMessage.u.s.shorts4 = ev->data.s[4];
373 event->u.clientMessage.u.s.shorts5 = ev->data.s[5];
374 event->u.clientMessage.u.s.shorts6 = ev->data.s[6];
375 event->u.clientMessage.u.s.shorts7 = ev->data.s[7];
376 event->u.clientMessage.u.s.shorts8 = ev->data.s[8];
377 event->u.clientMessage.u.s.shorts9 = ev->data.s[9];
380 event->u.clientMessage.u.l.type = ev->message_type;
381 event->u.clientMessage.u.l.longs0 = ev->data.l[0];
382 event->u.clientMessage.u.l.longs1 = ev->data.l[1];
383 event->u.clientMessage.u.l.longs2 = ev->data.l[2];
384 event->u.clientMessage.u.l.longs3 = ev->data.l[3];
385 event->u.clientMessage.u.l.longs4 = ev->data.l[4];
388 /* client passing bogus data, let server complain */
395 register XMappingEvent *ev = (XMappingEvent *) re;
396 event->u.mappingNotify.firstKeyCode = ev->first_keycode;
397 event->u.mappingNotify.request = ev->request;
398 event->u.mappingNotify.count = ev->count;
403 return(_XUnknownNativeEvent(dpy, re, event));