| #include <X11/Intrinsic.h> |
| #include <X11/Xproto.h> |
| |
| Boolean use_separate_lines = True; |
| static char *sep; |
| |
| /******************************************************************************/ |
| /**** Miscellaneous routines to convert values to their string equivalents ****/ |
| /******************************************************************************/ |
| |
| /* Returns the string equivalent of a boolean parameter */ |
| static char *TorF(bool) |
| int bool; |
| { |
| switch (bool) { |
| case True: |
| return ("True"); |
| |
| case False: |
| return ("False"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a property notify state */ |
| static char *PropertyState(state) |
| int state; |
| { |
| switch (state) { |
| case PropertyNewValue: |
| return ("PropertyNewValue"); |
| |
| case PropertyDelete: |
| return ("PropertyDelete"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a visibility notify state */ |
| static char *VisibilityState(state) |
| int state; |
| { |
| switch (state) { |
| case VisibilityUnobscured: |
| return ("VisibilityUnobscured"); |
| |
| case VisibilityPartiallyObscured: |
| return ("VisibilityPartiallyObscured"); |
| |
| case VisibilityFullyObscured: |
| return ("VisibilityFullyObscured"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a timestamp */ |
| static char *ServerTime(time) |
| Time time; |
| { |
| unsigned long msec; |
| unsigned long sec; |
| unsigned long min; |
| unsigned long hr; |
| unsigned long day; |
| static char buffer[32]; |
| |
| msec = time % 1000; |
| time /= 1000; |
| sec = time % 60; |
| time /= 60; |
| min = time % 60; |
| time /= 60; |
| hr = time % 24; |
| time /= 24; |
| day = time; |
| |
| sprintf(buffer, "%ld day%s %02ld:%02ld:%02ld.%03ld", |
| day, day == 1 ? "" : "(s)", hr, min, sec, msec); |
| return (buffer); |
| } |
| |
| /* Simple structure to ease the interpretation of masks */ |
| typedef struct _MaskType { |
| unsigned int value; |
| char *string; |
| } MaskType; |
| |
| /* Returns the string equivalent of a mask of buttons and/or modifier keys */ |
| static char *ButtonAndOrModifierState(state) |
| unsigned int state; |
| { |
| static char buffer[256]; |
| static MaskType masks[] = { |
| {Button1Mask, "Button1Mask"}, |
| {Button2Mask, "Button2Mask"}, |
| {Button3Mask, "Button3Mask"}, |
| {Button4Mask, "Button4Mask"}, |
| {Button5Mask, "Button5Mask"}, |
| {ShiftMask, "ShiftMask"}, |
| {LockMask, "LockMask"}, |
| {ControlMask, "ControlMask"}, |
| {Mod1Mask, "Mod1Mask"}, |
| {Mod2Mask, "Mod2Mask"}, |
| {Mod3Mask, "Mod3Mask"}, |
| {Mod4Mask, "Mod4Mask"}, |
| {Mod5Mask, "Mod5Mask"}, |
| }; |
| int num_masks = sizeof(masks) / sizeof(MaskType); |
| int i; |
| Boolean first = True; |
| |
| buffer[0] = 0; |
| |
| for (i = 0; i < num_masks; i++) |
| if (state & masks[i].value) |
| if (first) { |
| first = False; |
| strcpy(buffer, masks[i].string); |
| } else { |
| strcat(buffer, " | "); |
| strcat(buffer, masks[i].string); |
| } |
| return (buffer); |
| } |
| |
| /* Returns the string equivalent of a mask of configure window values */ |
| static char *ConfigureValueMask(valuemask) |
| unsigned int valuemask; |
| { |
| static char buffer[256]; |
| static MaskType masks[] = { |
| {CWX, "CWX"}, |
| {CWY, "CWY"}, |
| {CWWidth, "CWWidth"}, |
| {CWHeight, "CWHeight"}, |
| {CWBorderWidth, "CWBorderWidth"}, |
| {CWSibling, "CWSibling"}, |
| {CWStackMode, "CWStackMode"}, |
| }; |
| int num_masks = sizeof(masks) / sizeof(MaskType); |
| int i; |
| Boolean first = True; |
| |
| buffer[0] = 0; |
| |
| for (i = 0; i < num_masks; i++) |
| if (valuemask & masks[i].value) |
| if (first) { |
| first = False; |
| strcpy(buffer, masks[i].string); |
| } else { |
| strcat(buffer, " | "); |
| strcat(buffer, masks[i].string); |
| } |
| |
| return (buffer); |
| } |
| |
| /* Returns the string equivalent of a motion hint */ |
| static char *IsHint(is_hint) |
| char is_hint; |
| { |
| switch (is_hint) { |
| case NotifyNormal: |
| return ("NotifyNormal"); |
| |
| case NotifyHint: |
| return ("NotifyHint"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of an id or the value "None" */ |
| static char *MaybeNone(value) |
| int value; |
| { |
| static char buffer[16]; |
| |
| if (value == None) |
| return ("None"); |
| else { |
| sprintf(buffer, "0x%x", value); |
| return (buffer); |
| } |
| } |
| |
| /* Returns the string equivalent of a colormap state */ |
| static char *ColormapState(state) |
| int state; |
| { |
| switch (state) { |
| case ColormapInstalled: |
| return ("ColormapInstalled"); |
| |
| case ColormapUninstalled: |
| return ("ColormapUninstalled"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a crossing detail */ |
| static char *CrossingDetail(detail) |
| int detail; |
| { |
| switch (detail) { |
| case NotifyAncestor: |
| return ("NotifyAncestor"); |
| |
| case NotifyInferior: |
| return ("NotifyInferior"); |
| |
| case NotifyVirtual: |
| return ("NotifyVirtual"); |
| |
| case NotifyNonlinear: |
| return ("NotifyNonlinear"); |
| |
| case NotifyNonlinearVirtual: |
| return ("NotifyNonlinearVirtual"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a focus change detail */ |
| static char *FocusChangeDetail(detail) |
| int detail; |
| { |
| switch (detail) { |
| case NotifyAncestor: |
| return ("NotifyAncestor"); |
| |
| case NotifyInferior: |
| return ("NotifyInferior"); |
| |
| case NotifyVirtual: |
| return ("NotifyVirtual"); |
| |
| case NotifyNonlinear: |
| return ("NotifyNonlinear"); |
| |
| case NotifyNonlinearVirtual: |
| return ("NotifyNonlinearVirtual"); |
| |
| case NotifyPointer: |
| return ("NotifyPointer"); |
| |
| case NotifyPointerRoot: |
| return ("NotifyPointerRoot"); |
| |
| case NotifyDetailNone: |
| return ("NotifyDetailNone"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a configure detail */ |
| static char *ConfigureDetail(detail) |
| int detail; |
| { |
| switch (detail) { |
| case Above: |
| return ("Above"); |
| |
| case Below: |
| return ("Below"); |
| |
| case TopIf: |
| return ("TopIf"); |
| |
| case BottomIf: |
| return ("BottomIf"); |
| |
| case Opposite: |
| return ("Opposite"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a grab mode */ |
| static char *GrabMode(mode) |
| int mode; |
| { |
| switch (mode) { |
| case NotifyNormal: |
| return ("NotifyNormal"); |
| |
| case NotifyGrab: |
| return ("NotifyGrab"); |
| |
| case NotifyUngrab: |
| return ("NotifyUngrab"); |
| |
| case NotifyWhileGrabbed: |
| return ("NotifyWhileGrabbed"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a mapping request */ |
| static char *MappingRequest(request) |
| int request; |
| { |
| switch (request) { |
| case MappingModifier: |
| return ("MappingModifier"); |
| |
| case MappingKeyboard: |
| return ("MappingKeyboard"); |
| |
| case MappingPointer: |
| return ("MappingPointer"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a stacking order place */ |
| static char *Place(place) |
| int place; |
| { |
| switch (place) { |
| case PlaceOnTop: |
| return ("PlaceOnTop"); |
| |
| case PlaceOnBottom: |
| return ("PlaceOnBottom"); |
| |
| default: |
| return ("?"); |
| } |
| } |
| |
| /* Returns the string equivalent of a major code */ |
| static char *MajorCode(code) |
| int code; |
| { |
| static char buffer[32]; |
| |
| switch (code) { |
| case X_CopyArea: |
| return ("X_CopyArea"); |
| |
| case X_CopyPlane: |
| return ("X_CopyPlane"); |
| |
| default: |
| sprintf(buffer, "0x%x", code); |
| return (buffer); |
| } |
| } |
| |
| /* Returns the string equivalent the keycode contained in the key event */ |
| static char *Keycode(ev) |
| XKeyEvent *ev; |
| { |
| static char buffer[256]; |
| KeySym keysym_str; |
| char *keysym_name; |
| char string[256]; |
| |
| XLookupString(ev, string, 64, &keysym_str, NULL); |
| |
| if (keysym_str == NoSymbol) |
| keysym_name = "NoSymbol"; |
| else if (!(keysym_name = XKeysymToString(keysym_str))) |
| keysym_name = "(no name)"; |
| sprintf(buffer, "%u (keysym 0x%x \"%s\")", |
| ev->keycode, (unsigned)keysym_str, keysym_name); |
| return (buffer); |
| } |
| |
| /* Returns the string equivalent of an atom or "None"*/ |
| static char *AtomName(Display *dpy, Atom atom) |
| { |
| static char buffer[256]; |
| char *atom_name; |
| |
| if (atom == None) |
| return ("None"); |
| |
| atom_name = XGetAtomName(dpy, atom); |
| strncpy(buffer, atom_name, 256); |
| XFree(atom_name); |
| return (buffer); |
| } |
| |
| /******************************************************************************/ |
| /**** Routines to print out readable values for the field of various events ***/ |
| /******************************************************************************/ |
| |
| static void VerbMotion(XMotionEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("root=0x%x%s", (unsigned)ev->root, sep); |
| printf("subwindow=0x%x%s", (unsigned)ev->subwindow, sep); |
| printf("time=%s%s", ServerTime(ev->time), sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep); |
| printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep); |
| printf("is_hint=%s%s", IsHint(ev->is_hint), sep); |
| printf("same_screen=%s\n", TorF(ev->same_screen)); |
| } |
| |
| static void VerbButton(XButtonEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("root=0x%x%s", (unsigned)ev->root, sep); |
| printf("subwindow=0x%x%s", (unsigned)ev->subwindow, sep); |
| printf("time=%s%s", ServerTime(ev->time), sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep); |
| printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep); |
| printf("button=%s%s", ButtonAndOrModifierState(ev->button), sep); |
| printf("same_screen=%s\n", TorF(ev->same_screen)); |
| } |
| |
| static void VerbColormap(XColormapEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("colormap=%s%s", MaybeNone(ev->colormap), sep); |
| printf("new=%s%s", TorF(ev->new), sep); |
| printf("state=%s\n", ColormapState(ev->state)); |
| } |
| |
| static void VerbCrossing(XCrossingEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("root=0x%x%s", (unsigned)ev->root, sep); |
| printf("subwindow=0x%x%s", (unsigned)ev->subwindow, sep); |
| printf("time=%s%s", ServerTime(ev->time), sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep); |
| printf("mode=%s%s", GrabMode(ev->mode), sep); |
| printf("detail=%s%s", CrossingDetail(ev->detail), sep); |
| printf("same_screen=%s%s", TorF(ev->same_screen), sep); |
| printf("focus=%s%s", TorF(ev->focus), sep); |
| printf("state=%s\n", ButtonAndOrModifierState(ev->state)); |
| } |
| |
| static void VerbExpose(XExposeEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("width=%d height=%d%s", ev->width, ev->height, sep); |
| printf("count=%d\n", ev->count); |
| } |
| |
| static void VerbGraphicsExpose(XGraphicsExposeEvent *ev) |
| { |
| printf("drawable=0x%x%s", (unsigned)ev->drawable, sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("width=%d height=%d%s", ev->width, ev->height, sep); |
| printf("major_code=%s%s", MajorCode(ev->major_code), sep); |
| printf("minor_code=%d\n", ev->minor_code); |
| } |
| |
| static void VerbNoExpose(XNoExposeEvent *ev) |
| { |
| printf("drawable=0x%x%s", (unsigned)ev->drawable, sep); |
| printf("major_code=%s%s", MajorCode(ev->major_code), sep); |
| printf("minor_code=%d\n", ev->minor_code); |
| } |
| |
| static void VerbFocus(XFocusChangeEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("mode=%s%s", GrabMode(ev->mode), sep); |
| printf("detail=%s\n", FocusChangeDetail(ev->detail)); |
| } |
| |
| static void VerbKeymap(XKeymapEvent *ev) |
| { |
| int i; |
| |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("key_vector="); |
| for (i = 0; i < 32; i++) |
| printf("%02x", ev->key_vector[i]); |
| printf("\n"); |
| } |
| |
| static void VerbKey(XKeyEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("root=0x%x%s", (unsigned)ev->root, sep); |
| printf("subwindow=0x%x%s", (unsigned)ev->subwindow, sep); |
| printf("time=%s%s", ServerTime(ev->time), sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep); |
| printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep); |
| printf("keycode=%s%s", Keycode(ev), sep); |
| printf("same_screen=%s\n", TorF(ev->same_screen)); |
| } |
| |
| static void VerbProperty(XPropertyEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("atom=%s%s", AtomName(ev->display, ev->atom), sep); |
| printf("time=%s%s", ServerTime(ev->time), sep); |
| printf("state=%s\n", PropertyState(ev->state)); |
| } |
| |
| static void VerbResizeRequest(XResizeRequestEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("width=%d height=%d\n", ev->width, ev->height); |
| } |
| |
| static void VerbCirculate(XCirculateEvent *ev) |
| { |
| printf("event=0x%x%s", (unsigned)ev->event, sep); |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("place=%s\n", Place(ev->place)); |
| } |
| |
| static void VerbConfigure(XConfigureEvent *ev) |
| { |
| printf("event=0x%x%s", (unsigned)ev->event, sep); |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("width=%d height=%d%s", ev->width, ev->height, sep); |
| printf("border_width=%d%s", ev->border_width, sep); |
| printf("above=%s%s", MaybeNone(ev->above), sep); |
| printf("override_redirect=%s\n", TorF(ev->override_redirect)); |
| } |
| |
| static void VerbCreateWindow(XCreateWindowEvent *ev) |
| { |
| printf("parent=0x%x%s", (unsigned)ev->parent, sep); |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("width=%d height=%d%s", ev->width, ev->height, sep); |
| printf("border_width=%d%s", ev->border_width, sep); |
| printf("override_redirect=%s\n", TorF(ev->override_redirect)); |
| } |
| |
| static void VerbDestroyWindow(XDestroyWindowEvent *ev) |
| { |
| printf("event=0x%x%s", (unsigned)ev->event, sep); |
| printf("window=0x%x\n", (unsigned)ev->window); |
| } |
| |
| static void VerbGravity(XGravityEvent *ev) |
| { |
| printf("event=0x%x%s", (unsigned)ev->event, sep); |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("x=%d y=%d\n", ev->x, ev->y); |
| } |
| |
| static void VerbMap(XMapEvent *ev) |
| { |
| printf("event=0x%x%s", (unsigned)ev->event, sep); |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("override_redirect=%s\n", TorF(ev->override_redirect)); |
| } |
| |
| static void VerbReparent(XReparentEvent *ev) |
| { |
| printf("event=0x%x%s", (unsigned)ev->event, sep); |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("parent=0x%x%s", (unsigned)ev->parent, sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("override_redirect=%s\n", TorF(ev->override_redirect)); |
| } |
| |
| static void VerbUnmap(XUnmapEvent *ev) |
| { |
| printf("event=0x%x%s", (unsigned)ev->event, sep); |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("from_configure=%s\n", TorF(ev->from_configure)); |
| } |
| |
| static void VerbCirculateRequest(XCirculateRequestEvent *ev) |
| { |
| printf("parent=0x%x%s", (unsigned)ev->parent, sep); |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("place=%s\n", Place(ev->place)); |
| } |
| |
| static void VerbConfigureRequest(XConfigureRequestEvent *ev) |
| { |
| printf("parent=0x%x%s", (unsigned)ev->parent, sep); |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("x=%d y=%d%s", ev->x, ev->y, sep); |
| printf("width=%d height=%d%s", ev->width, ev->height, sep); |
| printf("border_width=%d%s", ev->border_width, sep); |
| printf("above=%s%s", MaybeNone(ev->above), sep); |
| printf("detail=%s%s", ConfigureDetail(ev->detail), sep); |
| printf("value_mask=%s\n", ConfigureValueMask(ev->value_mask)); |
| } |
| |
| static void VerbMapRequest(XMapRequestEvent *ev) |
| { |
| printf("parent=0x%x%s", (unsigned)ev->parent, sep); |
| printf("window=0x%x\n", (unsigned)ev->window); |
| } |
| |
| static void VerbClient(XClientMessageEvent *ev) |
| { |
| int i; |
| |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("message_type=%s%s", AtomName(ev->display, ev->message_type), sep); |
| printf("format=%d\n", ev->format); |
| printf("data (shown as longs)="); |
| for (i = 0; i < 5; i++) |
| printf(" 0x%08lx", ev->data.l[i]); |
| printf("\n"); |
| } |
| |
| static void VerbMapping(XMappingEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("request=%s%s", MappingRequest(ev->request), sep); |
| printf("first_keycode=0x%x%s", ev->first_keycode, sep); |
| printf("count=0x%x\n", ev->count); |
| } |
| |
| static void VerbSelectionClear(XSelectionClearEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("selection=%s%s", AtomName(ev->display, ev->selection), sep); |
| printf("time=%s\n", ServerTime(ev->time)); |
| } |
| |
| static void VerbSelection(XSelectionEvent *ev) |
| { |
| printf("requestor=0x%x%s", (unsigned)ev->requestor, sep); |
| printf("selection=%s%s", AtomName(ev->display, ev->selection), sep); |
| printf("target=%s%s", AtomName(ev->display, ev->target), sep); |
| printf("property=%s%s", AtomName(ev->display, ev->property), sep); |
| printf("time=%s\n", ServerTime(ev->time)); |
| } |
| |
| static void VerbSelectionRequest(XSelectionRequestEvent *ev) |
| { |
| printf("owner=0x%x%s", (unsigned)ev->owner, sep); |
| printf("requestor=0x%x%s", (unsigned)ev->requestor, sep); |
| printf("selection=%s%s", AtomName(ev->display, ev->selection), sep); |
| printf("target=%s%s", AtomName(ev->display, ev->target), sep); |
| printf("property=%s%s", AtomName(ev->display, ev->property), sep); |
| printf("time=%s\n", ServerTime(ev->time)); |
| } |
| |
| static void VerbVisibility(XVisibilityEvent *ev) |
| { |
| printf("window=0x%x%s", (unsigned)ev->window, sep); |
| printf("state=%s\n", VisibilityState(ev->state)); |
| } |
| |
| /******************************************************************************/ |
| /************ Return the string representation for type of an event ***********/ |
| /******************************************************************************/ |
| |
| char *GetType(ev) |
| XEvent *ev; |
| { |
| switch (ev->type) { |
| case KeyPress: |
| return ("KeyPress"); |
| case KeyRelease: |
| return ("KeyRelease"); |
| case ButtonPress: |
| return ("ButtonPress"); |
| case ButtonRelease: |
| return ("ButtonRelease"); |
| case MotionNotify: |
| return ("MotionNotify"); |
| case EnterNotify: |
| return ("EnterNotify"); |
| case LeaveNotify: |
| return ("LeaveNotify"); |
| case FocusIn: |
| return ("FocusIn"); |
| case FocusOut: |
| return ("FocusOut"); |
| case KeymapNotify: |
| return ("KeymapNotify"); |
| case Expose: |
| return ("Expose"); |
| case GraphicsExpose: |
| return ("GraphicsExpose"); |
| case NoExpose: |
| return ("NoExpose"); |
| case VisibilityNotify: |
| return ("VisibilityNotify"); |
| case CreateNotify: |
| return ("CreateNotify"); |
| case DestroyNotify: |
| return ("DestroyNotify"); |
| case UnmapNotify: |
| return ("UnmapNotify"); |
| case MapNotify: |
| return ("MapNotify"); |
| case MapRequest: |
| return ("MapRequest"); |
| case ReparentNotify: |
| return ("ReparentNotify"); |
| case ConfigureNotify: |
| return ("ConfigureNotify"); |
| case ConfigureRequest: |
| return ("ConfigureRequest"); |
| case GravityNotify: |
| return ("GravityNotify"); |
| case ResizeRequest: |
| return ("ResizeRequest"); |
| case CirculateNotify: |
| return ("CirculateNotify"); |
| case CirculateRequest: |
| return ("CirculateRequest"); |
| case PropertyNotify: |
| return ("PropertyNotify"); |
| case SelectionClear: |
| return ("SelectionClear"); |
| case SelectionRequest: |
| return ("SelectionRequest"); |
| case SelectionNotify: |
| return ("SelectionNotify"); |
| case ColormapNotify: |
| return ("ColormapNotify"); |
| case ClientMessage: |
| return ("ClientMessage"); |
| case MappingNotify: |
| return ("MappingNotify"); |
| } |
| return "???"; |
| } |
| |
| /******************************************************************************/ |
| /**************** Print the values of all fields for any event ****************/ |
| /******************************************************************************/ |
| |
| void ShowEvent(XEvent *eev) |
| { |
| XAnyEvent *ev = (XAnyEvent*)eev; |
| /* determine which field separator to use */ |
| if (use_separate_lines) |
| sep = "\n"; |
| else |
| sep = " "; |
| |
| printf("type=%s%s", GetType((XEvent*)ev), sep); |
| printf("serial=%ld%s", ev->serial, sep); |
| printf("send_event=%s%s", TorF(ev->send_event), sep); |
| printf("display=0x%x%s", (unsigned)ev->display, sep); |
| |
| switch (ev->type) { |
| case MotionNotify: |
| VerbMotion((void*)ev); |
| break; |
| |
| case ButtonPress: |
| case ButtonRelease: |
| VerbButton((void*)ev); |
| break; |
| |
| case ColormapNotify: |
| VerbColormap((void*)ev); |
| break; |
| |
| case EnterNotify: |
| case LeaveNotify: |
| VerbCrossing((void*)ev); |
| break; |
| |
| case Expose: |
| VerbExpose((void*)ev); |
| break; |
| |
| case GraphicsExpose: |
| VerbGraphicsExpose((void*)ev); |
| break; |
| |
| case NoExpose: |
| VerbNoExpose((void*)ev); |
| break; |
| |
| case FocusIn: |
| case FocusOut: |
| VerbFocus((void*)ev); |
| break; |
| |
| case KeymapNotify: |
| VerbKeymap((void*)ev); |
| break; |
| |
| case KeyPress: |
| case KeyRelease: |
| VerbKey((void*)ev); |
| break; |
| |
| case PropertyNotify: |
| VerbProperty((void*)ev); |
| break; |
| |
| case ResizeRequest: |
| VerbResizeRequest((void*)ev); |
| break; |
| |
| case CirculateNotify: |
| VerbCirculate((void*)ev); |
| break; |
| |
| case ConfigureNotify: |
| VerbConfigure((void*)ev); |
| break; |
| |
| case CreateNotify: |
| VerbCreateWindow((void*)ev); |
| break; |
| |
| case DestroyNotify: |
| VerbDestroyWindow((void*)ev); |
| break; |
| |
| case GravityNotify: |
| VerbGravity((void*)ev); |
| break; |
| |
| case MapNotify: |
| VerbMap((void*)ev); |
| break; |
| |
| case ReparentNotify: |
| VerbReparent((void*)ev); |
| break; |
| |
| case UnmapNotify: |
| VerbUnmap((void*)ev); |
| break; |
| |
| case CirculateRequest: |
| VerbCirculateRequest((void*)ev); |
| break; |
| |
| case ConfigureRequest: |
| VerbConfigureRequest((void*)ev); |
| break; |
| |
| case MapRequest: |
| VerbMapRequest((void*)ev); |
| break; |
| |
| case ClientMessage: |
| VerbClient((void*)ev); |
| break; |
| |
| case MappingNotify: |
| VerbMapping((void*)ev); |
| break; |
| |
| case SelectionClear: |
| VerbSelectionClear((void*)ev); |
| break; |
| |
| case SelectionNotify: |
| VerbSelection((void*)ev); |
| break; |
| |
| case SelectionRequest: |
| VerbSelectionRequest((void*)ev); |
| break; |
| |
| case VisibilityNotify: |
| VerbVisibility((void*)ev); |
| break; |
| |
| } |
| } |