home *** CD-ROM | disk | FTP | other *** search
- /*
- * xev - event diagnostics
- *
- * $XConsortium: xev.c,v 1.14 91/05/04 23:15:11 keith Exp $
- *
- * Copyright 1988 Massachusetts Institute of Technology
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of M.I.T. not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. M.I.T. makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * Author: Jim Fulton, MIT X Consortium
- */
-
- #include <stdio.h>
- #include <X11/Xos.h>
- #include <X11/Xlib.h>
- #include <X11/Xutil.h>
- #include <X11/Xproto.h>
- #include <ctype.h>
-
- #define INNER_WINDOW_WIDTH 50
- #define INNER_WINDOW_HEIGHT 50
- #define INNER_WINDOW_BORDER 4
- #define INNER_WINDOW_X 10
- #define INNER_WINDOW_Y 10
- #define OUTER_WINDOW_MIN_WIDTH (INNER_WINDOW_WIDTH + \
- 2 * (INNER_WINDOW_BORDER + INNER_WINDOW_X))
- #define OUTER_WINDOW_MIN_HEIGHT (INNER_WINDOW_HEIGHT + \
- 2 * (INNER_WINDOW_BORDER + INNER_WINDOW_Y))
- #define OUTER_WINDOW_DEF_WIDTH (OUTER_WINDOW_MIN_WIDTH + 100)
- #define OUTER_WINDOW_DEF_HEIGHT (OUTER_WINDOW_MIN_HEIGHT + 100)
- #define OUTER_WINDOW_DEF_X 100
- #define OUTER_WINDOW_DEF_Y 100
-
-
- typedef unsigned long Pixel;
-
- char *Yes = "YES";
- char *No = "NO";
- char *Unknown = "unknown";
-
- char *ProgramName;
- Display *dpy;
- int screen;
-
- usage ()
- {
- static char *msg[] = {
- " -display displayname X server to contact",
- " -geometry geom size and location of window",
- " -bw pixels border width in pixels",
- " -bs {NotUseful,WhenMapped,Always} backingstore attribute",
- " -id windowid use existing window",
- " -s set save-unders attribute",
- " -name string window name",
- " -rv reverse video",
- "",
- NULL};
- char **cpp;
-
- fprintf (stderr, "usage: %s [-options ...]\n", ProgramName);
- fprintf (stderr, "where options include:\n");
-
- for (cpp = msg; *cpp; cpp++) {
- fprintf (stderr, "%s\n", *cpp);
- }
-
- exit (1);
- }
-
- static int parse_backing_store (s)
- char *s;
- {
- int len = strlen (s);
- char *cp;
-
- for (cp = s; *cp; cp++) {
- if (isascii (*cp) && isupper (*cp)) *cp = tolower (*cp);
- }
-
- if (strncmp (s, "notuseful", len) == 0) return (NotUseful);
- if (strncmp (s, "whenmapped", len) == 0) return (WhenMapped);
- if (strncmp (s, "always", len) == 0) return (Always);
-
- usage ();
- }
-
- main (argc, argv)
- int argc;
- char **argv;
- {
- char *displayname = NULL;
- char *geom = NULL;
- int i;
- XSizeHints hints;
- int borderwidth = 2;
- Window w, subw;
- XSetWindowAttributes attr;
- XWindowAttributes wattr;
- unsigned long mask = 0L;
- int done;
- char *name = "Event Tester";
- Bool reverse = False;
- unsigned long back, fore;
-
- w = 0;
- ProgramName = argv[0];
- for (i = 1; i < argc; i++) {
- char *arg = argv[i];
-
- if (arg[0] == '-') {
- switch (arg[1]) {
- case 'd': /* -display host:dpy */
- if (++i >= argc) usage ();
- displayname = argv[i];
- continue;
- case 'g': /* -geometry geom */
- if (++i >= argc) usage ();
- geom = argv[i];
- continue;
- case 'b':
- switch (arg[2]) {
- case 'w': /* -bw pixels */
- if (++i >= argc) usage ();
- borderwidth = atoi (argv[i]);
- continue;
- case 's': /* -bs type */
- if (++i >= argc) usage ();
- attr.backing_store = parse_backing_store (argv[i]);
- mask |= CWBackingStore;
- continue;
- default:
- usage ();
- }
- case 'i': /* -id */
- if (++i >= argc) usage ();
- sscanf(argv[i], "0x%lx", &w);
- if (!w)
- sscanf(argv[i], "%ld", &w);
- if (!w)
- usage ();
- continue;
- case 'n': /* -name */
- if (++i >= argc) usage ();
- name = argv[i];
- continue;
- case 'r': /* -rv */
- reverse = True;
- continue;
- case 's': /* -s */
- attr.save_under = True;
- mask |= CWSaveUnder;
- continue;
- default:
- usage ();
- } /* end switch on - */
- } else
- usage ();
- } /* end for over argc */
-
- dpy = XOpenDisplay (displayname);
- if (!dpy) {
- fprintf (stderr, "%s: unable to open display '%s'\n",
- ProgramName, XDisplayName (displayname));
- exit (1);
- }
-
- screen = DefaultScreen (dpy);
-
- /* select for all events */
- attr.event_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask |
- ButtonReleaseMask | EnterWindowMask |
- LeaveWindowMask | PointerMotionMask |
- Button1MotionMask |
- Button2MotionMask | Button3MotionMask |
- Button4MotionMask | Button5MotionMask |
- ButtonMotionMask | KeymapStateMask |
- ExposureMask | VisibilityChangeMask |
- StructureNotifyMask | /* ResizeRedirectMask | */
- SubstructureNotifyMask | SubstructureRedirectMask |
- FocusChangeMask | PropertyChangeMask |
- ColormapChangeMask | OwnerGrabButtonMask;
-
- if (w) {
- XGetWindowAttributes(dpy, w, &wattr);
- if (wattr.all_event_masks & ButtonPressMask)
- attr.event_mask &= ~ButtonPressMask;
- attr.event_mask &= ~SubstructureRedirectMask;
- XSelectInput(dpy, w, attr.event_mask);
- } else {
- set_sizehints (&hints, OUTER_WINDOW_MIN_WIDTH, OUTER_WINDOW_MIN_HEIGHT,
- OUTER_WINDOW_DEF_WIDTH, OUTER_WINDOW_DEF_HEIGHT,
- OUTER_WINDOW_DEF_X, OUTER_WINDOW_DEF_Y, geom);
-
- if (reverse) {
- back = BlackPixel(dpy,screen);
- fore = WhitePixel(dpy,screen);
- } else {
- back = WhitePixel(dpy,screen);
- fore = BlackPixel(dpy,screen);
- }
-
- attr.background_pixel = back;
- attr.border_pixel = fore;
- mask |= (CWBackPixel | CWBorderPixel | CWEventMask);
-
- w = XCreateWindow (dpy, RootWindow (dpy, screen), hints.x, hints.y,
- hints.width, hints.height, borderwidth, 0,
- InputOutput, (Visual *)CopyFromParent,
- mask, &attr);
-
- XSetStandardProperties (dpy, w, name, NULL, (Pixmap) 0,
- argv, argc, &hints);
-
- subw = XCreateSimpleWindow (dpy, w, INNER_WINDOW_X, INNER_WINDOW_Y,
- INNER_WINDOW_WIDTH, INNER_WINDOW_HEIGHT,
- INNER_WINDOW_BORDER,
- attr.border_pixel, attr.background_pixel);
-
- XMapWindow (dpy, subw); /* map before w so that it appears */
- XMapWindow (dpy, w);
-
- printf ("Outer window is 0x%lx, inner window is 0x%lx\n", w, subw);
- }
-
- for (done = 0; !done; ) {
- XEvent event;
-
- XNextEvent (dpy, &event);
-
- switch (event.type) {
- case KeyPress:
- prologue (&event, "KeyPress");
- do_KeyPress (&event);
- break;
- case KeyRelease:
- prologue (&event, "KeyRelease");
- do_KeyRelease (&event);
- break;
- case ButtonPress:
- prologue (&event, "ButtonPress");
- do_ButtonPress (&event);
- break;
- case ButtonRelease:
- prologue (&event, "ButtonRelease");
- do_ButtonRelease (&event);
- break;
- case MotionNotify:
- prologue (&event, "MotionNotify");
- do_MotionNotify (&event);
- break;
- case EnterNotify:
- prologue (&event, "EnterNotify");
- do_EnterNotify (&event);
- break;
- case LeaveNotify:
- prologue (&event, "LeaveNotify");
- do_LeaveNotify (&event);
- break;
- case FocusIn:
- prologue (&event, "FocusIn");
- do_FocusIn (&event);
- break;
- case FocusOut:
- prologue (&event, "FocusOut");
- do_FocusOut (&event);
- break;
- case KeymapNotify:
- prologue (&event, "KeymapNotify");
- do_KeymapNotify (&event);
- break;
- case Expose:
- prologue (&event, "Expose");
- do_Expose (&event);
- break;
- case GraphicsExpose:
- prologue (&event, "GraphicsExpose");
- do_GraphicsExpose (&event);
- break;
- case NoExpose:
- prologue (&event, "NoExpose");
- do_NoExpose (&event);
- break;
- case VisibilityNotify:
- prologue (&event, "VisibilityNotify");
- do_VisibilityNotify (&event);
- break;
- case CreateNotify:
- prologue (&event, "CreateNotify");
- do_CreateNotify (&event);
- break;
- case DestroyNotify:
- prologue (&event, "DestroyNotify");
- do_DestroyNotify (&event);
- break;
- case UnmapNotify:
- prologue (&event, "UnmapNotify");
- do_UnmapNotify (&event);
- break;
- case MapNotify:
- prologue (&event, "MapNotify");
- do_MapNotify (&event);
- break;
- case MapRequest:
- prologue (&event, "MapRequest");
- do_MapRequest (&event);
- break;
- case ReparentNotify:
- prologue (&event, "ReparentNotify");
- do_ReparentNotify (&event);
- break;
- case ConfigureNotify:
- prologue (&event, "ConfigureNotify");
- do_ConfigureNotify (&event);
- break;
- case ConfigureRequest:
- prologue (&event, "ConfigureRequest");
- do_ConfigureRequest (&event);
- break;
- case GravityNotify:
- prologue (&event, "GravityNotify");
- do_GravityNotify (&event);
- break;
- case ResizeRequest:
- prologue (&event, "ResizeRequest");
- do_ResizeRequest (&event);
- break;
- case CirculateNotify:
- prologue (&event, "CirculateNotify");
- do_CirculateNotify (&event);
- break;
- case CirculateRequest:
- prologue (&event, "CirculateRequest");
- do_CirculateRequest (&event);
- break;
- case PropertyNotify:
- prologue (&event, "PropertyNotify");
- do_PropertyNotify (&event);
- break;
- case SelectionClear:
- prologue (&event, "SelectionClear");
- do_SelectionClear (&event);
- break;
- case SelectionRequest:
- prologue (&event, "SelectionRequest");
- do_SelectionRequest (&event);
- break;
- case SelectionNotify:
- prologue (&event, "SelectionNotify");
- do_SelectionNotify (&event);
- break;
- case ColormapNotify:
- prologue (&event, "ColormapNotify");
- do_ColormapNotify (&event);
- break;
- case ClientMessage:
- prologue (&event, "ClientMessage");
- do_ClientMessage (&event);
- break;
- case MappingNotify:
- prologue (&event, "MappingNotify");
- do_MappingNotify (&event);
- break;
- default:
- printf ("Unknown event type %d\n", event.type);
- break;
- }
- }
-
- XCloseDisplay (dpy);
- exit (0);
- }
-
- prologue (eventp, event_name)
- XEvent *eventp;
- char *event_name;
- {
- XAnyEvent *e = (XAnyEvent *) eventp;
-
- printf ("\n%s event, serial %ld, synthetic %s, window 0x%lx,\n",
- event_name, e->serial, e->send_event ? Yes : No, e->window);
- return;
- }
-
-
- do_KeyPress (eventp)
- XEvent *eventp;
- {
- XKeyEvent *e = (XKeyEvent *) eventp;
- KeySym ks;
- char *ksname;
- int nbytes;
- char str[256+1];
-
- nbytes = XLookupString (e, str, 256, &ks, NULL);
- if (ks == NoSymbol)
- ksname = "NoSymbol";
- else if (!(ksname = XKeysymToString (ks)))
- ksname = "(no name)";
- printf (" root 0x%lx, subw 0x%lx, time %lu, (%d,%d), root:(%d,%d),\n",
- e->root, e->subwindow, e->time, e->x, e->y, e->x_root, e->y_root);
- printf (" state 0x%x, keycode %u (keysym 0x%x, %s), same_screen %s,\n",
- e->state, e->keycode, ks, ksname, e->same_screen ? Yes : No);
- if (nbytes < 0) nbytes = 0;
- if (nbytes > 256) nbytes = 256;
- str[nbytes] = '\0';
- printf (" XLookupString gives %d characters: \"%s\"\n", nbytes, str);
-
- return;
- }
-
- do_KeyRelease (eventp)
- XEvent *eventp;
- {
- do_KeyPress (eventp); /* since it has the same info */
- return;
- }
-
- do_ButtonPress (eventp)
- XEvent *eventp;
- {
- XButtonEvent *e = (XButtonEvent *) eventp;
-
- printf (" root 0x%lx, subw 0x%lx, time %lu, (%d,%d), root:(%d,%d),\n",
- e->root, e->subwindow, e->time, e->x, e->y, e->x_root, e->y_root);
- printf (" state 0x%x, button %u, same_screen %s\n",
- e->state, e->button, e->same_screen ? Yes : No);
-
- return;
- }
-
- do_ButtonRelease (eventp)
- XEvent *eventp;
- {
- do_ButtonPress (eventp); /* since it has the same info */
- return;
- }
-
- do_MotionNotify (eventp)
- XEvent *eventp;
- {
- XMotionEvent *e = (XMotionEvent *) eventp;
-
- printf (" root 0x%lx, subw 0x%lx, time %lu, (%d,%d), root:(%d,%d),\n",
- e->root, e->subwindow, e->time, e->x, e->y, e->x_root, e->y_root);
- printf (" state 0x%x, is_hint %u, same_screen %s\n",
- e->state, e->is_hint, e->same_screen ? Yes : No);
-
- return;
- }
-
- do_EnterNotify (eventp)
- XEvent *eventp;
- {
- XCrossingEvent *e = (XCrossingEvent *) eventp;
- char *mode, *detail;
- char dmode[10], ddetail[10];
-
- switch (e->mode) {
- case NotifyNormal: mode = "NotifyNormal"; break;
- case NotifyGrab: mode = "NotifyGrab"; break;
- case NotifyUngrab: mode = "NotifyUngrab"; break;
- case NotifyWhileGrabbed: mode = "NotifyWhileGrabbed"; break;
- default: mode = dmode, sprintf (dmode, "%u", e->mode); break;
- }
-
- switch (e->detail) {
- case NotifyAncestor: detail = "NotifyAncestor"; break;
- case NotifyVirtual: detail = "NotifyVirtual"; break;
- case NotifyInferior: detail = "NotifyInferior"; break;
- case NotifyNonlinear: detail = "NotifyNonlinear"; break;
- case NotifyNonlinearVirtual: detail = "NotifyNonlinearVirtual"; break;
- case NotifyPointer: detail = "NotifyPointer"; break;
- case NotifyPointerRoot: detail = "NotifyPointerRoot"; break;
- case NotifyDetailNone: detail = "NotifyDetailNone"; break;
- default: detail = ddetail; sprintf (ddetail, "%u", e->detail); break;
- }
-
- printf (" root 0x%lx, subw 0x%lx, time %lu, (%d,%d), root:(%d,%d),\n",
- e->root, e->subwindow, e->time, e->x, e->y, e->x_root, e->y_root);
- printf (" mode %s, detail %s, same_screen %s,\n",
- mode, detail, e->same_screen ? Yes : No);
- printf (" focus %s, state %u\n", e->focus ? Yes : No, e->state);
-
- return;
- }
-
- do_LeaveNotify (eventp)
- XEvent *eventp;
- {
- do_EnterNotify (eventp); /* since it has same information */
- return;
- }
-
- do_FocusIn (eventp)
- XEvent *eventp;
- {
- XFocusChangeEvent *e = (XFocusChangeEvent *) eventp;
- char *mode, *detail;
- char dmode[10], ddetail[10];
-
- switch (e->mode) {
- case NotifyNormal: mode = "NotifyNormal"; break;
- case NotifyGrab: mode = "NotifyGrab"; break;
- case NotifyUngrab: mode = "NotifyUngrab"; break;
- case NotifyWhileGrabbed: mode = "NotifyWhileGrabbed"; break;
- default: mode = dmode, sprintf (dmode, "%u", e->mode); break;
- }
-
- switch (e->detail) {
- case NotifyAncestor: detail = "NotifyAncestor"; break;
- case NotifyVirtual: detail = "NotifyVirtual"; break;
- case NotifyInferior: detail = "NotifyInferior"; break;
- case NotifyNonlinear: detail = "NotifyNonlinear"; break;
- case NotifyNonlinearVirtual: detail = "NotifyNonlinearVirtual"; break;
- case NotifyPointer: detail = "NotifyPointer"; break;
- case NotifyPointerRoot: detail = "NotifyPointerRoot"; break;
- case NotifyDetailNone: detail = "NotifyDetailNone"; break;
- default: detail = ddetail; sprintf (ddetail, "%u", e->detail); break;
- }
-
- printf (" mode %s, detail %s\n", mode, detail);
- return;
- }
-
- do_FocusOut (eventp)
- XEvent *eventp;
- {
- do_FocusIn (eventp); /* since it has same information */
- return;
- }
-
- do_KeymapNotify (eventp)
- XEvent *eventp;
- {
- XKeymapEvent *e = (XKeymapEvent *) eventp;
- int i;
-
- printf (" keys: ");
- for (i = 0; i < 32; i++) {
- if (i == 16) printf ("\n ");
- printf ("%-3u ", (unsigned int) e->key_vector[i]);
- }
- printf ("\n");
- return;
- }
-
- do_Expose (eventp)
- XEvent *eventp;
- {
- XExposeEvent *e = (XExposeEvent *) eventp;
-
- printf (" (%d,%d), width %d, height %d, count %d\n",
- e->x, e->y, e->width, e->height, e->count);
- return;
- }
-
- do_GraphicsExpose (eventp)
- XEvent *eventp;
- {
- XGraphicsExposeEvent *e = (XGraphicsExposeEvent *) eventp;
- char *m;
- char mdummy[10];
-
- switch (e->major_code) {
- case X_CopyArea: m = "CopyArea"; break;
- case X_CopyPlane: m = "CopyPlane"; break;
- default: m = mdummy; sprintf (mdummy, "%d", e->major_code); break;
- }
-
- printf (" (%d,%d), width %d, height %d, count %d,\n",
- e->x, e->y, e->width, e->height, e->count);
- printf (" major %s, minor %d\n", m, e->minor_code);
- return;
- }
-
- do_NoExpose (eventp)
- XEvent *eventp;
- {
- XNoExposeEvent *e = (XNoExposeEvent *) eventp;
- char *m;
- char mdummy[10];
-
- switch (e->major_code) {
- case X_CopyArea: m = "CopyArea"; break;
- case X_CopyPlane: m = "CopyPlane"; break;
- default: m = mdummy; sprintf (mdummy, "%d", e->major_code); break;
- }
-
- printf (" major %s, minor %d\n", m, e->minor_code);
- return;
- }
-
- do_VisibilityNotify (eventp)
- XEvent *eventp;
- {
- XVisibilityEvent *e = (XVisibilityEvent *) eventp;
- char *v;
- char vdummy[10];
-
- switch (e->state) {
- case VisibilityUnobscured: v = "VisibilityUnobscured"; break;
- case VisibilityPartiallyObscured: v = "VisibilityPartiallyObscured"; break;
- case VisibilityFullyObscured: v = "VisibilityFullyObscured"; break;
- default: v = vdummy; sprintf (vdummy, "%d", e->state); break;
- }
-
- printf (" state %s\n", v);
- return;
- }
-
- do_CreateNotify (eventp)
- XEvent *eventp;
- {
- XCreateWindowEvent *e = (XCreateWindowEvent *) eventp;
-
- printf (" parent 0x%lx, window 0x%lx, (%d,%d), width %d, height %d\n",
- e->parent, e->window, e->x, e->y, e->width, e->height);
- printf ("border_width %d, override %s\n",
- e->border_width, e->override_redirect ? Yes : No);
- return;
- }
-
- do_DestroyNotify (eventp)
- XEvent *eventp;
- {
- XDestroyWindowEvent *e = (XDestroyWindowEvent *) eventp;
-
- printf (" event 0x%lx, window 0x%lx\n", e->event, e->window);
- return;
- }
-
- do_UnmapNotify (eventp)
- XEvent *eventp;
- {
- XUnmapEvent *e = (XUnmapEvent *) eventp;
-
- printf (" event 0x%lx, window 0x%lx, from_configure %s\n",
- e->event, e->window, e->from_configure ? Yes : No);
- return;
- }
-
- do_MapNotify (eventp)
- XEvent *eventp;
- {
- XMapEvent *e = (XMapEvent *) eventp;
-
- printf (" event 0x%lx, window 0x%lx, override %s\n",
- e->event, e->window, e->override_redirect ? Yes : No);
- return;
- }
-
- do_MapRequest (eventp)
- XEvent *eventp;
- {
- XMapRequestEvent *e = (XMapRequestEvent *) eventp;
-
- printf (" parent 0x%lx, window 0x%lx\n", e->parent, e->window);
- return;
- }
-
- do_ReparentNotify (eventp)
- XEvent *eventp;
- {
- XReparentEvent *e = (XReparentEvent *) eventp;
-
- printf (" event 0x%lx, window 0x%lx, parent 0x%lx,\n",
- e->event, e->window, e->parent);
- printf (" (%d,%d), override %s\n", e->x, e->y,
- e->override_redirect ? Yes : No);
- return;
- }
-
- do_ConfigureNotify (eventp)
- XEvent *eventp;
- {
- XConfigureEvent *e = (XConfigureEvent *) eventp;
-
- printf (" event 0x%lx, window 0x%lx, (%d,%d), width %d, height %d,\n",
- e->event, e->window, e->x, e->y, e->width, e->height);
- printf (" border_width %d, above 0x%lx, override %s\n",
- e->border_width, e->above, e->override_redirect ? Yes : No);
- return;
- }
-
- do_ConfigureRequest (eventp)
- XEvent *eventp;
- {
- XConfigureRequestEvent *e = (XConfigureRequestEvent *) eventp;
- char *detail;
- char ddummy[10];
-
- switch (e->detail) {
- case Above: detail = "Above"; break;
- case Below: detail = "Below"; break;
- case TopIf: detail = "TopIf"; break;
- case BottomIf: detail = "BottomIf"; break;
- case Opposite: detail = "Opposite"; break;
- default: detail = ddummy; sprintf (ddummy, "%d", e->detail); break;
- }
-
- printf (" parent 0x%lx, window 0x%lx, (%d,%d), width %d, height %d,\n",
- e->parent, e->window, e->x, e->y, e->width, e->height);
- printf (" border_width %d, above 0x%lx, detail %s, value 0x%lx\n",
- e->border_width, e->above, detail, e->value_mask);
- return;
- }
-
- do_GravityNotify (eventp)
- XEvent *eventp;
- {
- XGravityEvent *e = (XGravityEvent *) eventp;
-
- printf (" event 0x%lx, window 0x%lx, (%d,%d)\n",
- e->event, e->window, e->x, e->y);
- return;
- }
-
- do_ResizeRequest (eventp)
- XEvent *eventp;
- {
- XResizeRequestEvent *e = (XResizeRequestEvent *) eventp;
-
- printf (" width %d, height %d\n", e->width, e->height);
- return;
- }
-
- do_CirculateNotify (eventp)
- XEvent *eventp;
- {
- XCirculateEvent *e = (XCirculateEvent *) eventp;
- char *p;
- char pdummy[10];
-
- switch (e->place) {
- case PlaceOnTop: p = "PlaceOnTop"; break;
- case PlaceOnBottom: p = "PlaceOnBottom"; break;
- default: p = pdummy; sprintf (pdummy, "%d", e->place); break;
- }
-
- printf (" event 0x%lx, window 0x%lx, place %s\n",
- e->event, e->window, p);
- return;
- }
-
- do_CirculateRequest (eventp)
- XEvent *eventp;
- {
- XCirculateRequestEvent *e = (XCirculateRequestEvent *) eventp;
- char *p;
- char pdummy[10];
-
- switch (e->place) {
- case PlaceOnTop: p = "PlaceOnTop"; break;
- case PlaceOnBottom: p = "PlaceOnBottom"; break;
- default: p = pdummy; sprintf (pdummy, "%d", e->place); break;
- }
-
- printf (" parent 0x%lx, window 0x%lx, place %s\n",
- e->parent, e->window, p);
- return;
- }
-
- do_PropertyNotify (eventp)
- XEvent *eventp;
- {
- XPropertyEvent *e = (XPropertyEvent *) eventp;
- char *aname = XGetAtomName (dpy, e->atom);
- char *s;
- char sdummy[10];
-
- switch (e->state) {
- case PropertyNewValue: s = "PropertyNewValue"; break;
- case PropertyDelete: s = "PropertyDelete"; break;
- default: s = sdummy; sprintf (sdummy, "%d", e->state); break;
- }
-
- printf (" atom 0x%lx (%s), time %lu, state %s\n",
- e->atom, aname ? aname : Unknown, e->time, s);
-
- if (aname) XFree (aname);
- return;
- }
-
- do_SelectionClear (eventp)
- XEvent *eventp;
- {
- XSelectionClearEvent *e = (XSelectionClearEvent *) eventp;
- char *sname = XGetAtomName (dpy, e->selection);
-
- printf (" selection 0x%lx (%s), time %lu\n",
- e->selection, sname ? sname : Unknown, e->time);
-
- if (sname) XFree (sname);
- return;
- }
-
- do_SelectionRequest (eventp)
- XEvent *eventp;
- {
- XSelectionRequestEvent *e = (XSelectionRequestEvent *) eventp;
- char *sname = XGetAtomName (dpy, e->selection);
- char *tname = XGetAtomName (dpy, e->target);
- char *pname = XGetAtomName (dpy, e->property);
-
- printf (" owner 0x%lx, requestor 0x%lx, selection 0x%lx (%s),\n",
- e->owner, e->requestor, e->selection, sname ? sname : Unknown);
- printf (" target 0x%lx (%s), property 0x%lx (%s), time %lu\n",
- e->target, tname ? tname : Unknown, e->property,
- pname ? pname : Unknown, e->time);
-
- if (sname) XFree (sname);
- if (tname) XFree (tname);
- if (pname) XFree (pname);
-
- return;
- }
-
- do_SelectionNotify (eventp)
- XEvent *eventp;
- {
- XSelectionEvent *e = (XSelectionEvent *) eventp;
- char *sname = XGetAtomName (dpy, e->selection);
- char *tname = XGetAtomName (dpy, e->target);
- char *pname = XGetAtomName (dpy, e->property);
-
- printf (" selection 0x%lx (%s), target 0x%lx (%s),\n",
- e->selection, sname ? sname : Unknown, e->target,
- tname ? tname : Unknown);
- printf (" property 0x%lx (%s), time %lu\n",
- e->property, pname ? pname : Unknown, e->time);
-
- if (sname) XFree (sname);
- if (tname) XFree (tname);
- if (pname) XFree (pname);
-
- return;
- }
-
- do_ColormapNotify (eventp)
- XEvent *eventp;
- {
- XColormapEvent *e = (XColormapEvent *) eventp;
- char *s;
- char sdummy[10];
-
- switch (e->state) {
- case ColormapInstalled: s = "ColormapInstalled"; break;
- case ColormapUninstalled: s = "ColormapUninstalled"; break;
- default: s = sdummy; sprintf (sdummy, "%d", e->state); break;
- }
-
- printf (" colormap 0x%lx, new %s, state %s\n",
- e->colormap, e->new ? Yes : No, s);
- return;
- }
-
- do_ClientMessage (eventp)
- XEvent *eventp;
- {
- XClientMessageEvent *e = (XClientMessageEvent *) eventp;
- char *mname = XGetAtomName (dpy, e->message_type);
-
- printf (" message_type 0x%lx (%s), format %d\n",
- e->message_type, mname ? mname : Unknown, e->format);
-
- if (mname) XFree (mname);
- return;
- }
-
- do_MappingNotify (eventp)
- XEvent *eventp;
- {
- XMappingEvent *e = (XMappingEvent *) eventp;
- char *r;
- char rdummy[10];
-
- switch (e->request) {
- case MappingModifier: r = "MappingModifier"; break;
- case MappingKeyboard: r = "MappingKeyboard"; break;
- case MappingPointer: r = "MappingPointer"; break;
- default: r = rdummy; sprintf (rdummy, "%d", e->request); break;
- }
-
- printf (" request %s, first_keycode %d, count %d\n",
- r, e->first_keycode, e->count);
- XRefreshKeyboardMapping(e);
- return;
- }
-
-
-
- set_sizehints (hintp, min_width, min_height,
- defwidth, defheight, defx, defy, geom)
- XSizeHints *hintp;
- int min_width, min_height, defwidth, defheight, defx, defy;
- char *geom;
- {
- int geom_result;
-
- /* set the size hints, algorithm from xlib xbiff */
-
- hintp->width = hintp->min_width = min_width;
- hintp->height = hintp->min_height = min_height;
- hintp->flags = PMinSize;
- hintp->x = hintp->y = 0;
- geom_result = NoValue;
- if (geom != NULL) {
- geom_result = XParseGeometry (geom, &hintp->x, &hintp->y,
- (unsigned int *)&hintp->width,
- (unsigned int *)&hintp->height);
- if ((geom_result & WidthValue) && (geom_result & HeightValue)) {
- #define max(a,b) ((a) > (b) ? (a) : (b))
- hintp->width = max (hintp->width, hintp->min_width);
- hintp->height = max (hintp->height, hintp->min_height);
- hintp->flags |= USSize;
- }
- if ((geom_result & XValue) && (geom_result & YValue)) {
- hintp->flags += USPosition;
- }
- }
- if (!(hintp->flags & USSize)) {
- hintp->width = defwidth;
- hintp->height = defheight;
- hintp->flags |= PSize;
- }
- /*
- if (!(hintp->flags & USPosition)) {
- hintp->x = defx;
- hintp->y = defy;
- hintp->flags |= PPosition;
- }
- */
- if (geom_result & XNegative) {
- hintp->x = DisplayWidth (dpy, DefaultScreen (dpy)) + hintp->x -
- hintp->width;
- }
- if (geom_result & YNegative) {
- hintp->y = DisplayHeight (dpy, DefaultScreen (dpy)) + hintp->y -
- hintp->height;
- }
- return;
- }
-
-