|
|
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.