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