imEvToWire.c revision 61b2299d
1/* $Xorg: imEvToWire.c,v 1.3 2000/08/17 19:45:12 cpqbld Exp $ */ 2/*********************************************************** 3Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, 4 5 All Rights Reserved 6 7Permission to use, copy, modify, and distribute this software and its 8documentation for any purpose and without fee is hereby granted, 9provided that the above copyright notice appear in all copies and that 10both that copyright notice and this permission notice appear in 11supporting documentation, and that the name of Digital not be 12used in advertising or publicity pertaining to distribution of the 13software without specific, written prior permission. 14 15DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 16ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 17DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 18ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 19WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 20ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 21SOFTWARE. 22 23******************************************************************/ 24/* $XFree86$ */ 25 26#define NEED_EVENTS 27#ifdef HAVE_CONFIG_H 28#include <config.h> 29#endif 30#include <X11/Xlibint.h> 31#include <X11/Xlib.h> 32#undef NEED_EVENTS 33#include "Ximint.h" 34 35 36#define sw16(n, s) ((s) ? \ 37 (((n) << 8 & 0xff00) | \ 38 ((n) >> 8 & 0xff) \ 39 ) : n) 40 41#define sw32(n, s) ((s) ? \ 42 (((n) << 24 & 0xff000000) | \ 43 ((n) << 8 & 0xff0000) | \ 44 ((n) >> 8 & 0xff00) | \ 45 ((n) >> 24 & 0xff) \ 46 ) : n) 47 48Status 49_XimProtoEventToWire( 50 register XEvent *re, /* pointer to where event should be reformatted */ 51 register xEvent *event, /* wire protocol event */ 52 Bool sw) /* swap byte? */ 53{ 54 switch (event->u.u.type = re->type) { 55 case KeyPress: 56 case KeyRelease: 57 { 58 register XKeyEvent *ev = (XKeyEvent*) re; 59 event->u.keyButtonPointer.root = sw32(ev->root, sw); 60 event->u.keyButtonPointer.event = 61 sw32(ev->window, sw); 62 event->u.keyButtonPointer.child = 63 sw32(ev->subwindow, sw); 64 event->u.keyButtonPointer.time = sw32(ev->time, sw); 65 event->u.keyButtonPointer.eventX = sw16(ev->x, sw) ; 66 event->u.keyButtonPointer.eventY = sw16(ev->y, sw) ; 67 event->u.keyButtonPointer.rootX = 68 sw16(ev->x_root, sw); 69 event->u.keyButtonPointer.rootY = 70 sw16(ev->y_root, sw); 71 event->u.keyButtonPointer.state = sw16(ev->state, sw); 72 event->u.keyButtonPointer.sameScreen = ev->same_screen; 73 event->u.u.detail = ev->keycode; 74 } 75 break; 76 case ButtonPress: 77 case ButtonRelease: 78 { 79 register XButtonEvent *ev = (XButtonEvent *) re; 80 event->u.keyButtonPointer.root = sw32(ev->root, sw); 81 event->u.keyButtonPointer.event = sw32(ev->window, sw); 82 event->u.keyButtonPointer.child = sw32(ev->subwindow, sw); 83 event->u.keyButtonPointer.time = sw32(ev->time, sw); 84 event->u.keyButtonPointer.eventX = sw16(ev->x, sw); 85 event->u.keyButtonPointer.eventY = sw16(ev->y, sw); 86 event->u.keyButtonPointer.rootX = sw16(ev->x_root, sw); 87 event->u.keyButtonPointer.rootY = sw16(ev->y_root, sw); 88 event->u.keyButtonPointer.state = sw16(ev->state, sw); 89 event->u.keyButtonPointer.sameScreen = ev->same_screen; 90 event->u.u.detail = ev->button; 91 } 92 break; 93 case MotionNotify: 94 { 95 register XMotionEvent *ev = (XMotionEvent *)re; 96 event->u.keyButtonPointer.root = sw32(ev->root, sw); 97 event->u.keyButtonPointer.event = sw32(ev->window, sw); 98 event->u.keyButtonPointer.child = sw32(ev->subwindow, sw); 99 event->u.keyButtonPointer.time = sw32(ev->time, sw); 100 event->u.keyButtonPointer.eventX= sw16(ev->x, sw); 101 event->u.keyButtonPointer.eventY= sw16(ev->y, sw); 102 event->u.keyButtonPointer.rootX = sw16(ev->x_root, sw); 103 event->u.keyButtonPointer.rootY = sw16(ev->y_root, sw); 104 event->u.keyButtonPointer.state = sw16(ev->state, sw); 105 event->u.keyButtonPointer.sameScreen= ev->same_screen; 106 event->u.u.detail = ev->is_hint; 107 } 108 break; 109 case EnterNotify: 110 case LeaveNotify: 111 { 112 register XCrossingEvent *ev = (XCrossingEvent *) re; 113 event->u.enterLeave.root = sw32(ev->root, sw); 114 event->u.enterLeave.event = sw32(ev->window, sw); 115 event->u.enterLeave.child = sw32(ev->subwindow, sw); 116 event->u.enterLeave.time = sw32(ev->time, sw); 117 event->u.enterLeave.eventX = sw16(ev->x, sw); 118 event->u.enterLeave.eventY = sw16(ev->y, sw); 119 event->u.enterLeave.rootX = sw16(ev->x_root, sw); 120 event->u.enterLeave.rootY = sw16(ev->y_root, sw); 121 event->u.enterLeave.state = sw16(ev->state, sw); 122 event->u.enterLeave.mode = ev->mode; 123 event->u.enterLeave.flags = 0; 124 if (ev->same_screen) { 125 event->u.enterLeave.flags |= ELFlagSameScreen; 126 } 127 if (ev->focus) { 128 event->u.enterLeave.flags |= ELFlagFocus; 129 } 130 event->u.u.detail = ev->detail; 131 } 132 break; 133 case FocusIn: 134 case FocusOut: 135 { 136 register XFocusChangeEvent *ev = (XFocusChangeEvent *) re; 137 event->u.focus.window = sw32(ev->window, sw); 138 event->u.focus.mode = ev->mode; 139 event->u.u.detail = ev->detail; 140 } 141 break; 142 case KeymapNotify: 143 { 144 register XKeymapEvent *ev = (XKeymapEvent *) re; 145 memcpy((char *)(((xKeymapEvent *) event)->map), 146 &ev->key_vector[1], 147 sizeof (((xKeymapEvent *) event)->map)); 148 } 149 break; 150 case Expose: 151 { 152 register XExposeEvent *ev = (XExposeEvent *) re; 153 event->u.expose.window = sw32(ev->window, sw); 154 event->u.expose.x = sw16(ev->x, sw); 155 event->u.expose.y = sw16(ev->y, sw); 156 event->u.expose.width = sw16(ev->width, sw); 157 event->u.expose.height = sw16(ev->height, sw); 158 event->u.expose.count = sw16(ev->count, sw); 159 } 160 break; 161 case GraphicsExpose: 162 { 163 register XGraphicsExposeEvent *ev = 164 (XGraphicsExposeEvent *) re; 165 event->u.graphicsExposure.drawable = sw32(ev->drawable, sw); 166 event->u.graphicsExposure.x = sw16(ev->x, sw); 167 event->u.graphicsExposure.y = sw16(ev->y, sw); 168 event->u.graphicsExposure.width = sw16(ev->width, sw); 169 event->u.graphicsExposure.height = sw16(ev->height, sw); 170 event->u.graphicsExposure.count = sw16(ev->count, sw); 171 event->u.graphicsExposure.majorEvent= ev->major_code; 172 event->u.graphicsExposure.minorEvent= sw16(ev->minor_code, sw); 173 } 174 break; 175 case NoExpose: 176 { 177 register XNoExposeEvent *ev = (XNoExposeEvent *) re; 178 event->u.noExposure.drawable = sw32(ev->drawable, sw); 179 event->u.noExposure.majorEvent = ev->major_code; 180 event->u.noExposure.minorEvent = sw16(ev->minor_code, sw); 181 } 182 break; 183 case VisibilityNotify: 184 { 185 register XVisibilityEvent *ev = (XVisibilityEvent *) re; 186 event->u.visibility.window = sw32(ev->window, sw); 187 event->u.visibility.state = ev->state; 188 } 189 break; 190 case CreateNotify: 191 { 192 register XCreateWindowEvent *ev = 193 (XCreateWindowEvent *) re; 194 event->u.createNotify.window = sw32(ev->window, sw); 195 event->u.createNotify.parent = sw32(ev->parent, sw); 196 event->u.createNotify.x = sw16(ev->x, sw); 197 event->u.createNotify.y = sw16(ev->y, sw); 198 event->u.createNotify.width = sw16(ev->width, sw); 199 event->u.createNotify.height = sw16(ev->height, sw); 200 event->u.createNotify.borderWidth = sw16(ev->border_width, sw); 201 event->u.createNotify.override = ev->override_redirect; 202 } 203 break; 204 case DestroyNotify: 205 { 206 register XDestroyWindowEvent *ev = 207 (XDestroyWindowEvent *) re; 208 event->u.destroyNotify.window = sw32(ev->window, sw); 209 event->u.destroyNotify.event = sw32(ev->event, sw); 210 } 211 break; 212 case UnmapNotify: 213 { 214 register XUnmapEvent *ev = (XUnmapEvent *) re; 215 event->u.unmapNotify.window = sw32(ev->window, sw); 216 event->u.unmapNotify.event = sw32(ev->event, sw); 217 event->u.unmapNotify.fromConfigure = ev->from_configure; 218 } 219 break; 220 case MapNotify: 221 { 222 register XMapEvent *ev = (XMapEvent *) re; 223 event->u.mapNotify.window = sw32(ev->window, sw); 224 event->u.mapNotify.event = sw32(ev->event, sw); 225 event->u.mapNotify.override = ev->override_redirect; 226 } 227 break; 228 case MapRequest: 229 { 230 register XMapRequestEvent *ev = (XMapRequestEvent *) re; 231 event->u.mapRequest.window = sw32(ev->window, sw); 232 event->u.mapRequest.parent = sw32(ev->parent, sw); 233 } 234 break; 235 case ReparentNotify: 236 { 237 register XReparentEvent *ev = (XReparentEvent *) re; 238 event->u.reparent.window = sw32(ev->window, sw); 239 event->u.reparent.event = sw32(ev->event, sw); 240 event->u.reparent.parent = sw32(ev->parent, sw); 241 event->u.reparent.x = sw16(ev->x, sw); 242 event->u.reparent.y = sw16(ev->y, sw); 243 event->u.reparent.override = ev->override_redirect; 244 } 245 break; 246 case ConfigureNotify: 247 { 248 register XConfigureEvent *ev = (XConfigureEvent *) re; 249 event->u.configureNotify.window = sw32(ev->window, sw); 250 event->u.configureNotify.event = sw32(ev->event, sw); 251 event->u.configureNotify.aboveSibling = sw32(ev->above, sw); 252 event->u.configureNotify.x = sw16(ev->x, sw); 253 event->u.configureNotify.y = sw16(ev->y, sw); 254 event->u.configureNotify.width = sw16(ev->width, sw); 255 event->u.configureNotify.height = sw16(ev->height, sw); 256 event->u.configureNotify.borderWidth= sw16(ev->border_width, sw); 257 event->u.configureNotify.override = ev->override_redirect; 258 } 259 break; 260 case ConfigureRequest: 261 { 262 register XConfigureRequestEvent *ev = 263 (XConfigureRequestEvent *) re; 264 event->u.configureRequest.window = sw32(ev->window, sw); 265 event->u.configureRequest.parent = sw32(ev->parent, sw); 266 event->u.configureRequest.sibling = sw32(ev->above, sw); 267 event->u.configureRequest.x = sw16(ev->x, sw); 268 event->u.configureRequest.y = sw16(ev->y, sw); 269 event->u.configureRequest.width = sw16(ev->width, sw); 270 event->u.configureRequest.height = sw16(ev->height, sw); 271 event->u.configureRequest.borderWidth= sw16(ev->border_width, sw); 272 event->u.configureRequest.valueMask= sw16(ev->value_mask, sw); 273 event->u.u.detail = ev->detail; 274 } 275 break; 276 case GravityNotify: 277 { 278 register XGravityEvent *ev = (XGravityEvent *) re; 279 event->u.gravity.window = sw32(ev->window, sw); 280 event->u.gravity.event = sw32(ev->event, sw); 281 event->u.gravity.x = sw16(ev->x, sw); 282 event->u.gravity.y = sw16(ev->y, sw); 283 } 284 break; 285 case ResizeRequest: 286 { 287 register XResizeRequestEvent *ev = 288 (XResizeRequestEvent *) re; 289 event->u.resizeRequest.window = sw32(ev->window, sw); 290 event->u.resizeRequest.width = sw16(ev->width, sw); 291 event->u.resizeRequest.height = sw16(ev->height, sw); 292 } 293 break; 294 case CirculateNotify: 295 { 296 register XCirculateEvent *ev = (XCirculateEvent *) re; 297 event->u.circulate.window = sw32(ev->window, sw); 298 event->u.circulate.event = sw32(ev->event, sw); 299 event->u.circulate.place = ev->place; 300 } 301 break; 302 case CirculateRequest: 303 { 304 register XCirculateRequestEvent *ev = 305 (XCirculateRequestEvent *) re; 306 event->u.circulate.window = sw32(ev->window, sw); 307 event->u.circulate.event = sw32(ev->parent, sw); 308 event->u.circulate.place = ev->place; 309 } 310 break; 311 case PropertyNotify: 312 { 313 register XPropertyEvent *ev = (XPropertyEvent *) re; 314 event->u.property.window = sw32(ev->window, sw); 315 event->u.property.atom = sw32(ev->atom, sw); 316 event->u.property.time = sw32(ev->time, sw); 317 event->u.property.state = ev->state; 318 } 319 break; 320 case SelectionClear: 321 { 322 register XSelectionClearEvent *ev = 323 (XSelectionClearEvent *) re; 324 event->u.selectionClear.window = sw32(ev->window, sw); 325 event->u.selectionClear.atom = sw32(ev->selection, sw); 326 event->u.selectionClear.time = sw32(ev->time, sw); 327 } 328 break; 329 case SelectionRequest: 330 { 331 register XSelectionRequestEvent *ev = 332 (XSelectionRequestEvent *) re; 333 event->u.selectionRequest.owner = sw32(ev->owner, sw); 334 event->u.selectionRequest.requestor = sw32(ev->requestor, sw); 335 event->u.selectionRequest.selection = sw32(ev->selection, sw); 336 event->u.selectionRequest.target = sw32(ev->target, sw); 337 event->u.selectionRequest.property = sw32(ev->property, sw); 338 event->u.selectionRequest.time = sw32(ev->time, sw); 339 } 340 break; 341 case SelectionNotify: 342 { 343 register XSelectionEvent *ev = (XSelectionEvent *) re; 344 event->u.selectionNotify.requestor = sw32(ev->requestor, sw); 345 event->u.selectionNotify.selection = sw32(ev->selection, sw); 346 event->u.selectionNotify.target = sw32(ev->target, sw); 347 event->u.selectionNotify.property = sw32(ev->property, sw); 348 event->u.selectionNotify.time = sw32(ev->time, sw); 349 } 350 break; 351 case ColormapNotify: 352 { 353 register XColormapEvent *ev = (XColormapEvent *) re; 354 event->u.colormap.window = sw32(ev->window, sw); 355 event->u.colormap.colormap = sw32(ev->colormap, sw); 356 event->u.colormap.new = ev->new; 357 event->u.colormap.state = ev->state; 358 } 359 break; 360 case ClientMessage: 361 { 362 register int i; 363 register XClientMessageEvent *ev 364 = (XClientMessageEvent *) re; 365 event->u.clientMessage.window = sw32(ev->window, sw); 366 event->u.u.detail = ev->format; 367 switch (ev->format) { 368 case 8: 369 event->u.clientMessage.u.b.type = sw32(ev->message_type, sw); 370 for (i = 0; i < 20; i++) 371 event->u.clientMessage.u.b.bytes[i] = ev->data.b[i]; 372 break; 373 case 16: 374 event->u.clientMessage.u.s.type = sw32(ev->message_type, sw); 375 event->u.clientMessage.u.s.shorts0 = sw16(ev->data.s[0], sw); 376 event->u.clientMessage.u.s.shorts1 = sw16(ev->data.s[1], sw); 377 event->u.clientMessage.u.s.shorts2 = sw16(ev->data.s[2], sw); 378 event->u.clientMessage.u.s.shorts3 = sw16(ev->data.s[3], sw); 379 event->u.clientMessage.u.s.shorts4 = sw16(ev->data.s[4], sw); 380 event->u.clientMessage.u.s.shorts5 = sw16(ev->data.s[5], sw); 381 event->u.clientMessage.u.s.shorts6 = sw16(ev->data.s[6], sw); 382 event->u.clientMessage.u.s.shorts7 = sw16(ev->data.s[7], sw); 383 event->u.clientMessage.u.s.shorts8 = sw16(ev->data.s[8], sw); 384 event->u.clientMessage.u.s.shorts9 = sw16(ev->data.s[9], sw); 385 break; 386 case 32: 387 event->u.clientMessage.u.l.type = sw32(ev->message_type, sw); 388 event->u.clientMessage.u.l.longs0 = sw32(ev->data.l[0], sw); 389 event->u.clientMessage.u.l.longs1 = sw32(ev->data.l[1], sw); 390 event->u.clientMessage.u.l.longs2 = sw32(ev->data.l[2], sw); 391 event->u.clientMessage.u.l.longs3 = sw32(ev->data.l[3], sw); 392 event->u.clientMessage.u.l.longs4 = sw32(ev->data.l[4], sw); 393 break; 394 default: 395 /* client passing bogus data, let server complain */ 396 break; 397 } 398 } 399 break; 400 case MappingNotify: 401 { 402 register XMappingEvent *ev = (XMappingEvent *) re; 403 event->u.mappingNotify.firstKeyCode = ev->first_keycode; 404 event->u.mappingNotify.request = ev->request; 405 event->u.mappingNotify.count = ev->count; 406 } 407 break; 408 409 default: 410 return(0); 411 } 412 /* Common process */ 413 if (((XAnyEvent *)re)->send_event) 414 event->u.u.type |= 0x80; 415 event->u.u.sequenceNumber = 416 ((XAnyEvent *)re)->serial & ~((unsigned long)0xffff); 417 event->u.u.sequenceNumber = sw16(event->u.u.sequenceNumber, sw); 418 return(1); 419} 420 421 422/* 423 * reformat a wire event into an XEvent structure of the right type. 424 */ 425Bool 426_XimProtoWireToEvent( 427 register XEvent *re, /* pointer to where event should be reformatted */ 428 register xEvent *event, /* wire protocol event */ 429 Bool sw) /* swap byte? */ 430{ 431 432 re->type = event->u.u.type & 0x7f; 433 ((XAnyEvent *)re)->serial = sw16(event->u.u.sequenceNumber, sw); 434 ((XAnyEvent *)re)->send_event = ((event->u.u.type & 0x80) != 0); 435 ((XAnyEvent *)re)->display = NULL; 436 437 /* Ignore the leading bit of the event type since it is set when a 438 client sends an event rather than the server. */ 439 440 switch (event-> u.u.type & 0177) { 441 case KeyPress: 442 case KeyRelease: 443 { 444 register XKeyEvent *ev = (XKeyEvent*) re; 445 ev->root = sw32(event->u.keyButtonPointer.root, sw); 446 ev->window = sw32(event->u.keyButtonPointer.event, sw); 447 ev->subwindow = sw32(event->u.keyButtonPointer.child, sw); 448 ev->time = sw32(event->u.keyButtonPointer.time, sw); 449 ev->x = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventX, sw)); 450 ev->y = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventY, sw)); 451 ev->x_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootX, sw)); 452 ev->y_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootY, sw)); 453 ev->state = sw16(event->u.keyButtonPointer.state, sw); 454 ev->same_screen = event->u.keyButtonPointer.sameScreen; 455 ev->keycode = event->u.u.detail; 456 } 457 break; 458 case ButtonPress: 459 case ButtonRelease: 460 { 461 register XButtonEvent *ev = (XButtonEvent *) re; 462 ev->root = sw32(event->u.keyButtonPointer.root, sw); 463 ev->window = sw32(event->u.keyButtonPointer.event, sw); 464 ev->subwindow = sw32(event->u.keyButtonPointer.child, sw); 465 ev->time = sw32(event->u.keyButtonPointer.time, sw); 466 ev->x = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventX, sw)); 467 ev->y = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventY, sw)); 468 ev->x_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootX, sw)); 469 ev->y_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootY, sw)); 470 ev->state = sw16(event->u.keyButtonPointer.state, sw); 471 ev->same_screen = event->u.keyButtonPointer.sameScreen; 472 ev->button = event->u.u.detail; 473 } 474 break; 475 case MotionNotify: 476 { 477 register XMotionEvent *ev = (XMotionEvent *)re; 478 ev->root = sw32(event->u.keyButtonPointer.root, sw); 479 ev->window = sw32(event->u.keyButtonPointer.event, sw); 480 ev->subwindow = sw32(event->u.keyButtonPointer.child, sw); 481 ev->time = sw32(event->u.keyButtonPointer.time, sw); 482 ev->x = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventX, sw)); 483 ev->y = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventY, sw)); 484 ev->x_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootX, sw)); 485 ev->y_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootY, sw)); 486 ev->state = sw16(event->u.keyButtonPointer.state, sw); 487 ev->same_screen = event->u.keyButtonPointer.sameScreen; 488 ev->is_hint = event->u.u.detail; 489 } 490 break; 491 case EnterNotify: 492 case LeaveNotify: 493 { 494 register XCrossingEvent *ev = (XCrossingEvent *) re; 495 ev->root = sw32(event->u.enterLeave.root, sw); 496 ev->window = sw32(event->u.enterLeave.event, sw); 497 ev->subwindow = sw32(event->u.enterLeave.child, sw); 498 ev->time = sw32(event->u.enterLeave.time, sw); 499 ev->x = cvtINT16toInt(sw16(event->u.enterLeave.eventX, sw)); 500 ev->y = cvtINT16toInt(sw16(event->u.enterLeave.eventY, sw)); 501 ev->x_root = cvtINT16toInt(sw16(event->u.enterLeave.rootX, sw)); 502 ev->y_root = cvtINT16toInt(sw16(event->u.enterLeave.rootY, sw)); 503 ev->state = sw16(event->u.enterLeave.state, sw); 504 ev->mode = event->u.enterLeave.mode; 505 ev->same_screen = (event->u.enterLeave.flags & 506 ELFlagSameScreen) && True; 507 ev->focus = (event->u.enterLeave.flags & 508 ELFlagFocus) && True; 509 ev->detail = event->u.u.detail; 510 } 511 break; 512 case FocusIn: 513 case FocusOut: 514 { 515 register XFocusChangeEvent *ev = (XFocusChangeEvent *) re; 516 ev->window = sw32(event->u.focus.window, sw); 517 ev->mode = event->u.focus.mode; 518 ev->detail = event->u.u.detail; 519 } 520 break; 521 case KeymapNotify: 522 { 523 register XKeymapEvent *ev = (XKeymapEvent *) re; 524 ev->window = None; 525 memcpy(&ev->key_vector[1], 526 (char *)((xKeymapEvent *) event)->map, 527 sizeof (((xKeymapEvent *) event)->map)); 528 } 529 break; 530 case Expose: 531 { 532 register XExposeEvent *ev = (XExposeEvent *) re; 533 ev->window = sw32(event->u.expose.window, sw); 534 ev->x = sw16(event->u.expose.x, sw); 535 ev->y = sw16(event->u.expose.y, sw); 536 ev->width = sw16(event->u.expose.width, sw); 537 ev->height = sw16(event->u.expose.height, sw); 538 ev->count = sw16(event->u.expose.count, sw); 539 } 540 break; 541 case GraphicsExpose: 542 { 543 register XGraphicsExposeEvent *ev = 544 (XGraphicsExposeEvent *) re; 545 ev->drawable = sw32(event->u.graphicsExposure.drawable, sw); 546 ev->x = sw16(event->u.graphicsExposure.x, sw); 547 ev->y = sw16(event->u.graphicsExposure.y, sw); 548 ev->width = sw16(event->u.graphicsExposure.width, sw); 549 ev->height = sw16(event->u.graphicsExposure.height, sw); 550 ev->count = sw16(event->u.graphicsExposure.count, sw); 551 ev->major_code = event->u.graphicsExposure.majorEvent; 552 ev->minor_code = sw16(event->u.graphicsExposure.minorEvent, sw); 553 } 554 break; 555 case NoExpose: 556 { 557 register XNoExposeEvent *ev = (XNoExposeEvent *) re; 558 ev->drawable = sw32(event->u.noExposure.drawable, sw); 559 ev->major_code = event->u.noExposure.majorEvent; 560 ev->minor_code = sw16(event->u.noExposure.minorEvent, sw); 561 } 562 break; 563 case VisibilityNotify: 564 { 565 register XVisibilityEvent *ev = (XVisibilityEvent *) re; 566 ev->window = sw32(event->u.visibility.window, sw); 567 ev->state = event->u.visibility.state; 568 } 569 break; 570 case CreateNotify: 571 { 572 register XCreateWindowEvent *ev = 573 (XCreateWindowEvent *) re; 574 ev->window = sw32(event->u.createNotify.window, sw); 575 ev->parent = sw32(event->u.createNotify.parent, sw); 576 ev->x = cvtINT16toInt(sw16(event->u.createNotify.x, sw)); 577 ev->y = cvtINT16toInt(sw16(event->u.createNotify.y, sw)); 578 ev->width = sw16(event->u.createNotify.width, sw); 579 ev->height = sw16(event->u.createNotify.height, sw); 580 ev->border_width = sw16(event->u.createNotify.borderWidth, sw); 581 ev->override_redirect = event->u.createNotify.override; 582 } 583 break; 584 case DestroyNotify: 585 { 586 register XDestroyWindowEvent *ev = 587 (XDestroyWindowEvent *) re; 588 ev->window = sw32(event->u.destroyNotify.window, sw); 589 ev->event = sw32(event->u.destroyNotify.event, sw); 590 } 591 break; 592 case UnmapNotify: 593 { 594 register XUnmapEvent *ev = (XUnmapEvent *) re; 595 ev->window = sw32(event->u.unmapNotify.window, sw); 596 ev->event = sw32(event->u.unmapNotify.event, sw); 597 ev->from_configure = event->u.unmapNotify.fromConfigure; 598 } 599 break; 600 case MapNotify: 601 { 602 register XMapEvent *ev = (XMapEvent *) re; 603 ev->window = sw32(event->u.mapNotify.window, sw); 604 ev->event = sw32(event->u.mapNotify.event, sw); 605 ev->override_redirect = event->u.mapNotify.override; 606 } 607 break; 608 case MapRequest: 609 { 610 register XMapRequestEvent *ev = (XMapRequestEvent *) re; 611 ev->window = sw32(event->u.mapRequest.window, sw); 612 ev->parent = sw32(event->u.mapRequest.parent, sw); 613 } 614 break; 615 case ReparentNotify: 616 { 617 register XReparentEvent *ev = (XReparentEvent *) re; 618 ev->event = sw32(event->u.reparent.event, sw); 619 ev->window = sw32(event->u.reparent.window, sw); 620 ev->parent = sw32(event->u.reparent.parent, sw); 621 ev->x = cvtINT16toInt(sw16(event->u.reparent.x, sw)); 622 ev->y = cvtINT16toInt(sw16(event->u.reparent.y, sw)); 623 ev->override_redirect = event->u.reparent.override; 624 } 625 break; 626 case ConfigureNotify: 627 { 628 register XConfigureEvent *ev = (XConfigureEvent *) re; 629 ev->event = sw32(event->u.configureNotify.event, sw); 630 ev->window = sw32(event->u.configureNotify.window, sw); 631 ev->above = sw32(event->u.configureNotify.aboveSibling, sw); 632 ev->x = cvtINT16toInt(sw16(event->u.configureNotify.x, sw)); 633 ev->y = cvtINT16toInt(sw16(event->u.configureNotify.y, sw)); 634 ev->width = sw16(event->u.configureNotify.width, sw); 635 ev->height = sw16(event->u.configureNotify.height, sw); 636 ev->border_width = sw16(event->u.configureNotify.borderWidth, sw); 637 ev->override_redirect = event->u.configureNotify.override; 638 } 639 break; 640 case ConfigureRequest: 641 { 642 register XConfigureRequestEvent *ev = 643 (XConfigureRequestEvent *) re; 644 ev->window = sw32(event->u.configureRequest.window, sw); 645 ev->parent = sw32(event->u.configureRequest.parent, sw); 646 ev->above = sw32(event->u.configureRequest.sibling, sw); 647 ev->x = cvtINT16toInt(sw16(event->u.configureRequest.x, sw)); 648 ev->y = cvtINT16toInt(sw16(event->u.configureRequest.y, sw)); 649 ev->width = sw16(event->u.configureRequest.width, sw); 650 ev->height = sw16(event->u.configureRequest.height, sw); 651 ev->border_width = sw16(event->u.configureRequest.borderWidth, sw); 652 ev->value_mask = sw16(event->u.configureRequest.valueMask, sw); 653 ev->detail = event->u.u.detail; 654 } 655 break; 656 case GravityNotify: 657 { 658 register XGravityEvent *ev = (XGravityEvent *) re; 659 ev->window = sw32(event->u.gravity.window, sw); 660 ev->event = sw32(event->u.gravity.event, sw); 661 ev->x = cvtINT16toInt(sw16(event->u.gravity.x, sw)); 662 ev->y = cvtINT16toInt(sw16(event->u.gravity.y, sw)); 663 } 664 break; 665 case ResizeRequest: 666 { 667 register XResizeRequestEvent *ev = 668 (XResizeRequestEvent *) re; 669 ev->window = sw32(event->u.resizeRequest.window, sw); 670 ev->width = sw16(event->u.resizeRequest.width, sw); 671 ev->height = sw16(event->u.resizeRequest.height, sw); 672 } 673 break; 674 case CirculateNotify: 675 { 676 register XCirculateEvent *ev = (XCirculateEvent *) re; 677 ev->window = sw32(event->u.circulate.window, sw); 678 ev->event = sw32(event->u.circulate.event, sw); 679 ev->place = event->u.circulate.place; 680 } 681 break; 682 case CirculateRequest: 683 { 684 register XCirculateRequestEvent *ev = 685 (XCirculateRequestEvent *) re; 686 ev->window = sw32(event->u.circulate.window, sw); 687 ev->parent = sw32(event->u.circulate.event, sw); 688 ev->place = event->u.circulate.place; 689 } 690 break; 691 case PropertyNotify: 692 { 693 register XPropertyEvent *ev = (XPropertyEvent *) re; 694 ev->window = sw32(event->u.property.window, sw); 695 ev->atom = sw32(event->u.property.atom, sw); 696 ev->time = sw32(event->u.property.time, sw); 697 ev->state = event->u.property.state; 698 } 699 break; 700 case SelectionClear: 701 { 702 register XSelectionClearEvent *ev = 703 (XSelectionClearEvent *) re; 704 ev->window = sw32(event->u.selectionClear.window, sw); 705 ev->selection = sw32(event->u.selectionClear.atom, sw); 706 ev->time = sw32(event->u.selectionClear.time, sw); 707 } 708 break; 709 case SelectionRequest: 710 { 711 register XSelectionRequestEvent *ev = 712 (XSelectionRequestEvent *) re; 713 ev->owner = sw32(event->u.selectionRequest.owner, sw); 714 ev->requestor = sw32(event->u.selectionRequest.requestor, sw); 715 ev->selection = sw32(event->u.selectionRequest.selection, sw); 716 ev->target = sw32(event->u.selectionRequest.target, sw); 717 ev->property = sw32(event->u.selectionRequest.property, sw); 718 ev->time = sw32(event->u.selectionRequest.time, sw); 719 } 720 break; 721 case SelectionNotify: 722 { 723 register XSelectionEvent *ev = (XSelectionEvent *) re; 724 ev->requestor = sw32(event->u.selectionNotify.requestor, sw); 725 ev->selection = sw32(event->u.selectionNotify.selection, sw); 726 ev->target = sw32(event->u.selectionNotify.target, sw); 727 ev->property = sw32(event->u.selectionNotify.property, sw); 728 ev->time = sw32(event->u.selectionNotify.time, sw); 729 } 730 break; 731 case ColormapNotify: 732 { 733 register XColormapEvent *ev = (XColormapEvent *) re; 734 ev->window = sw32(event->u.colormap.window, sw); 735 ev->colormap = sw32(event->u.colormap.colormap, sw); 736 ev->new = event->u.colormap.new; 737 ev->state = event->u.colormap.state; 738 } 739 break; 740 case ClientMessage: 741 { 742 register int i; 743 register XClientMessageEvent *ev 744 = (XClientMessageEvent *) re; 745 ev->window = sw32(event->u.clientMessage.window, sw); 746 ev->format = event->u.u.detail; 747 switch (ev->format) { 748 case 8: 749 ev->message_type = sw32(event->u.clientMessage.u.b.type, sw); 750 for (i = 0; i < 20; i++) 751 ev->data.b[i] = event->u.clientMessage.u.b.bytes[i]; 752 break; 753 case 16: 754 ev->message_type = sw32(event->u.clientMessage.u.s.type, sw); 755 ev->data.s[0] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts0, sw)); 756 ev->data.s[1] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts1, sw)); 757 ev->data.s[2] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts2, sw)); 758 ev->data.s[3] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts3, sw)); 759 ev->data.s[4] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts4, sw)); 760 ev->data.s[5] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts5, sw)); 761 ev->data.s[6] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts6, sw)); 762 ev->data.s[7] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts7, sw)); 763 ev->data.s[8] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts8, sw)); 764 ev->data.s[9] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts9, sw)); 765 break; 766 case 32: 767 ev->message_type = sw32(event->u.clientMessage.u.l.type, sw); 768 ev->data.l[0] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs0, sw)); 769 ev->data.l[1] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs1, sw)); 770 ev->data.l[2] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs2, sw)); 771 ev->data.l[3] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs3, sw)); 772 ev->data.l[4] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs4, sw)); 773 break; 774 default: /* XXX should never occur */ 775 break; 776 } 777 } 778 break; 779 case MappingNotify: 780 { 781 register XMappingEvent *ev = (XMappingEvent *)re; 782 ev->window = 0; 783 ev->first_keycode = event->u.mappingNotify.firstKeyCode; 784 ev->request = event->u.mappingNotify.request; 785 ev->count = event->u.mappingNotify.count; 786 } 787 break; 788 default: 789 return(False); 790 } 791 return(True); 792} 793