"Fossies" - the Fresh Open Source Software Archive

Member "selenium-selenium-4.8.1/cpp/linux-specific/print_events.h" (17 Feb 2023, 21896 Bytes) of package /linux/www/selenium-selenium-4.8.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "print_events.h" see the Fossies "Dox" file reference documentation.

    1 /* $XConsortium: xev.c,v 1.15 94/04/17 20:45:20 keith Exp $ */
    2 /*
    3 
    4 Copyright (c) 1988  X Consortium
    5 
    6 Permission is hereby granted, free of charge, to any person obtaining
    7 a copy of this software and associated documentation files (the
    8 "Software"), to deal in the Software without restriction, including
    9 without limitation the rights to use, copy, modify, merge, publish,
   10 distribute, sublicense, and/or sell copies of the Software, and to
   11 permit persons to whom the Software is furnished to do so, subject to
   12 the following conditions:
   13 
   14 The above copyright notice and this permission notice shall be included
   15 in all copies or substantial portions of the Software.
   16 
   17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   18 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   19 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   20 IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
   21 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
   22 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
   23 OTHER DEALINGS IN THE SOFTWARE.
   24 
   25 Except as contained in this notice, the name of the X Consortium shall
   26 not be used in advertising or otherwise to promote the sale, use or
   27 other dealings in this Software without prior written authorization
   28 from the X Consortium.
   29 
   30 */
   31 /* $XFree86: xc/programs/xev/xev.c,v 1.13 2003/10/24 20:38:17 tsi Exp $ */
   32 
   33 /*
   34  * Author:  Jim Fulton, MIT X Consortium
   35  */
   36 
   37 #include <stdio.h>
   38 #include <stdlib.h>
   39 #include <ctype.h>
   40 #include <X11/Xlocale.h>
   41 #include <X11/Xos.h>
   42 #include <X11/Xlib.h>
   43 #include <X11/Xutil.h>
   44 #include <X11/Xproto.h>
   45 
   46 #define INNER_WINDOW_WIDTH 50
   47 #define INNER_WINDOW_HEIGHT 50
   48 #define INNER_WINDOW_BORDER 4
   49 #define INNER_WINDOW_X 10
   50 #define INNER_WINDOW_Y 10
   51 #define OUTER_WINDOW_MIN_WIDTH (INNER_WINDOW_WIDTH + \
   52                 2 * (INNER_WINDOW_BORDER + INNER_WINDOW_X))
   53 #define OUTER_WINDOW_MIN_HEIGHT (INNER_WINDOW_HEIGHT + \
   54                 2 * (INNER_WINDOW_BORDER + INNER_WINDOW_Y))
   55 #define OUTER_WINDOW_DEF_WIDTH (OUTER_WINDOW_MIN_WIDTH + 100)
   56 #define OUTER_WINDOW_DEF_HEIGHT (OUTER_WINDOW_MIN_HEIGHT + 100)
   57 #define OUTER_WINDOW_DEF_X 100
   58 #define OUTER_WINDOW_DEF_Y 100
   59                 
   60 
   61 typedef unsigned long Pixel;
   62 
   63 const char *Yes = "YES";
   64 const char *No = "NO";
   65 const char *Unknown = "unknown";
   66 
   67 XIC xic = NULL;
   68 
   69 static void
   70 prologue (FILE* out_f, XEvent *eventp, char *event_name)
   71 {
   72     XAnyEvent *e = (XAnyEvent *) eventp;
   73 
   74     fprintf(out_f, "%s event, serial %ld, synthetic %s, window 0x%lx\n",
   75         event_name, e->serial, e->send_event ? Yes : No, e->window);
   76 }
   77 
   78 static void
   79 do_KeyPress (FILE* out_f, XEvent *eventp)
   80 {
   81     XKeyEvent *e = (XKeyEvent *) eventp;
   82 
   83     fprintf(out_f,"    root 0x%lx, subw 0x%lx, time %lu, (%d,%d), root:(%d,%d),\n",
   84             e->root, e->subwindow, e->time, e->x, e->y, e->x_root, e->y_root);
   85     fprintf(out_f,"    state 0x%x, keycode %u, same_screen %s,\n",
   86             e->state, e->keycode, e->same_screen ? Yes : No);
   87 }
   88 
   89 static void
   90 do_KeyRelease (FILE* out_f, XEvent *eventp)
   91 {
   92     do_KeyPress (out_f, eventp); /* since it has the same info */
   93 }
   94 
   95 static void
   96 do_ButtonPress (FILE* out_f, XEvent *eventp)
   97 {
   98     XButtonEvent *e = (XButtonEvent *) eventp;
   99 
  100     fprintf(out_f,"    root 0x%lx, subw 0x%lx, time %lu, (%d,%d), root:(%d,%d),\n",
  101         e->root, e->subwindow, e->time, e->x, e->y, e->x_root, e->y_root);
  102     fprintf(out_f,"    state 0x%x, button %u, same_screen %s\n",
  103         e->state, e->button, e->same_screen ? Yes : No);
  104 }
  105 
  106 static void
  107 do_ButtonRelease (FILE* out_f, XEvent *eventp)
  108 {
  109     do_ButtonPress (out_f, eventp);     /* since it has the same info */
  110 }
  111 
  112 static void
  113 do_MotionNotify (FILE* out_f, XEvent *eventp)
  114 {
  115     XMotionEvent *e = (XMotionEvent *) eventp;
  116 
  117     fprintf(out_f,"    root 0x%lx, subw 0x%lx, time %lu, (%d,%d), root:(%d,%d),\n",
  118         e->root, e->subwindow, e->time, e->x, e->y, e->x_root, e->y_root);
  119     fprintf(out_f,"    state 0x%x, is_hint %u, same_screen %s\n",
  120         e->state, e->is_hint, e->same_screen ? Yes : No);
  121 }
  122 
  123 static void
  124 do_EnterNotify (FILE* out_f, XEvent *eventp)
  125 {
  126     XCrossingEvent *e = (XCrossingEvent *) eventp;
  127     char *mode, *detail;
  128     char dmode[10], ddetail[10];
  129 
  130     switch (e->mode) {
  131       case NotifyNormal:  mode = "NotifyNormal"; break;
  132       case NotifyGrab:  mode = "NotifyGrab"; break;
  133       case NotifyUngrab:  mode = "NotifyUngrab"; break;
  134       case NotifyWhileGrabbed:  mode = "NotifyWhileGrabbed"; break;
  135       default:  mode = dmode, sprintf(dmode, "%u", e->mode); break;
  136     }
  137 
  138     switch (e->detail) {
  139       case NotifyAncestor:  detail = "NotifyAncestor"; break;
  140       case NotifyVirtual:  detail = "NotifyVirtual"; break;
  141       case NotifyInferior:  detail = "NotifyInferior"; break;
  142       case NotifyNonlinear:  detail = "NotifyNonlinear"; break;
  143       case NotifyNonlinearVirtual:  detail = "NotifyNonlinearVirtual"; break;
  144       case NotifyPointer:  detail = "NotifyPointer"; break;
  145       case NotifyPointerRoot:  detail = "NotifyPointerRoot"; break;
  146       case NotifyDetailNone:  detail = "NotifyDetailNone"; break;
  147       default:  detail = ddetail; sprintf(ddetail, "%u", e->detail); break;
  148     }
  149 
  150     fprintf(out_f,"    root 0x%lx, subw 0x%lx, time %lu, (%d,%d), root:(%d,%d),\n",
  151         e->root, e->subwindow, e->time, e->x, e->y, e->x_root, e->y_root);
  152     fprintf(out_f,"    mode %s, detail %s, same_screen %s,\n",
  153         mode, detail, e->same_screen ? Yes : No);
  154     fprintf(out_f,"    focus %s, state %u\n", e->focus ? Yes : No, e->state);
  155 }
  156 
  157 static void
  158 do_LeaveNotify (FILE* out_f, XEvent *eventp)
  159 {
  160     do_EnterNotify (out_f, eventp);     /* since it has same information */
  161 }
  162 
  163 static void
  164 do_FocusIn (FILE* out_f, XEvent *eventp)
  165 {
  166     XFocusChangeEvent *e = (XFocusChangeEvent *) eventp;
  167     char *mode, *detail;
  168     char dmode[10], ddetail[10];
  169 
  170     switch (e->mode) {
  171       case NotifyNormal:  mode = "NotifyNormal"; break;
  172       case NotifyGrab:  mode = "NotifyGrab"; break;
  173       case NotifyUngrab:  mode = "NotifyUngrab"; break;
  174       case NotifyWhileGrabbed:  mode = "NotifyWhileGrabbed"; break;
  175       default:  mode = dmode, sprintf(dmode, "%u", e->mode); break;
  176     }
  177 
  178     switch (e->detail) {
  179       case NotifyAncestor:  detail = "NotifyAncestor"; break;
  180       case NotifyVirtual:  detail = "NotifyVirtual"; break;
  181       case NotifyInferior:  detail = "NotifyInferior"; break;
  182       case NotifyNonlinear:  detail = "NotifyNonlinear"; break;
  183       case NotifyNonlinearVirtual:  detail = "NotifyNonlinearVirtual"; break;
  184       case NotifyPointer:  detail = "NotifyPointer"; break;
  185       case NotifyPointerRoot:  detail = "NotifyPointerRoot"; break;
  186       case NotifyDetailNone:  detail = "NotifyDetailNone"; break;
  187       default:  detail = ddetail; sprintf(ddetail, "%u", e->detail); break;
  188     }
  189 
  190     fprintf(out_f,"    mode %s, detail %s\n", mode, detail);
  191 }
  192 
  193 static void
  194 do_FocusOut (FILE* out_f, XEvent *eventp)
  195 {
  196     do_FocusIn (out_f, eventp);     /* since it has same information */
  197 }
  198 
  199 static void
  200 do_KeymapNotify (FILE* out_f, XEvent *eventp)
  201 {
  202     XKeymapEvent *e = (XKeymapEvent *) eventp;
  203     int i;
  204 
  205     fprintf(out_f,"    keys:  ");
  206     for (i = 0; i < 32; i++) {
  207     if (i == 16) fprintf(out_f,"\n           ");
  208     fprintf(out_f,"%-3u ", (unsigned int) e->key_vector[i]);
  209     }
  210     fprintf(out_f,"\n");
  211 }
  212 
  213 static void
  214 do_Expose (FILE* out_f, XEvent *eventp)
  215 {
  216     XExposeEvent *e = (XExposeEvent *) eventp;
  217 
  218     fprintf(out_f,"    (%d,%d), width %d, height %d, count %d\n",
  219         e->x, e->y, e->width, e->height, e->count);
  220 }
  221 
  222 static void
  223 do_GraphicsExpose (FILE* out_f, XEvent *eventp)
  224 {
  225     XGraphicsExposeEvent *e = (XGraphicsExposeEvent *) eventp;
  226     char *m;
  227     char mdummy[10];
  228 
  229     switch (e->major_code) {
  230       case X_CopyArea:  m = "CopyArea";  break;
  231       case X_CopyPlane:  m = "CopyPlane";  break;
  232       default:  m = mdummy; sprintf(mdummy, "%d", e->major_code); break;
  233     }
  234 
  235     fprintf(out_f,"    (%d,%d), width %d, height %d, count %d,\n",
  236         e->x, e->y, e->width, e->height, e->count);
  237     fprintf(out_f,"    major %s, minor %d\n", m, e->minor_code);
  238 }
  239 
  240 static void
  241 do_NoExpose (FILE* out_f, XEvent *eventp)
  242 {
  243     XNoExposeEvent *e = (XNoExposeEvent *) eventp;
  244     char *m;
  245     char mdummy[10];
  246 
  247     switch (e->major_code) {
  248       case X_CopyArea:  m = "CopyArea";  break;
  249       case X_CopyPlane:  m = "CopyPlane";  break;
  250       default:  m = mdummy; sprintf(mdummy, "%d", e->major_code); break;
  251     }
  252 
  253     fprintf(out_f,"    major %s, minor %d\n", m, e->minor_code);
  254     return;
  255 }
  256 
  257 static void
  258 do_VisibilityNotify (FILE* out_f, XEvent *eventp)
  259 {
  260     XVisibilityEvent *e = (XVisibilityEvent *) eventp;
  261     char *v;
  262     char vdummy[10];
  263 
  264     switch (e->state) {
  265       case VisibilityUnobscured:  v = "VisibilityUnobscured"; break;
  266       case VisibilityPartiallyObscured:  v = "VisibilityPartiallyObscured"; break;
  267       case VisibilityFullyObscured:  v = "VisibilityFullyObscured"; break;
  268       default:  v = vdummy; sprintf(vdummy, "%d", e->state); break;
  269     }
  270 
  271     fprintf(out_f,"    state %s\n", v);
  272 }
  273 
  274 static void
  275 do_CreateNotify (FILE* out_f, XEvent *eventp)
  276 {
  277     XCreateWindowEvent *e = (XCreateWindowEvent *) eventp;
  278 
  279     fprintf(out_f,"    parent 0x%lx, window 0x%lx, (%d,%d), width %d, height %d\n",
  280         e->parent, e->window, e->x, e->y, e->width, e->height);
  281     fprintf(out_f,"border_width %d, override %s\n",
  282         e->border_width, e->override_redirect ? Yes : No);
  283 }
  284 
  285 static void
  286 do_DestroyNotify (FILE* out_f, XEvent *eventp)
  287 {
  288     XDestroyWindowEvent *e = (XDestroyWindowEvent *) eventp;
  289 
  290     fprintf(out_f,"    event 0x%lx, window 0x%lx\n", e->event, e->window);
  291 }
  292 
  293 static void
  294 do_UnmapNotify (FILE* out_f, XEvent *eventp)
  295 {
  296     XUnmapEvent *e = (XUnmapEvent *) eventp;
  297 
  298     fprintf(out_f,"    event 0x%lx, window 0x%lx, from_configure %s\n",
  299         e->event, e->window, e->from_configure ? Yes : No);
  300 }
  301 
  302 static void
  303 do_MapNotify (FILE* out_f, XEvent *eventp)
  304 {
  305     XMapEvent *e = (XMapEvent *) eventp;
  306 
  307     fprintf(out_f,"    event 0x%lx, window 0x%lx, override %s\n",
  308         e->event, e->window, e->override_redirect ? Yes : No);
  309 }
  310 
  311 static void
  312 do_MapRequest (FILE* out_f, XEvent *eventp)
  313 {
  314     XMapRequestEvent *e = (XMapRequestEvent *) eventp;
  315 
  316     fprintf(out_f,"    parent 0x%lx, window 0x%lx\n", e->parent, e->window);
  317 }
  318 
  319 static void
  320 do_ReparentNotify (FILE* out_f, XEvent *eventp)
  321 {
  322     XReparentEvent *e = (XReparentEvent *) eventp;
  323 
  324     fprintf(out_f,"    event 0x%lx, window 0x%lx, parent 0x%lx,\n",
  325         e->event, e->window, e->parent);
  326     fprintf(out_f,"    (%d,%d), override %s\n", e->x, e->y, 
  327         e->override_redirect ? Yes : No);
  328 }
  329 
  330 static void
  331 do_ConfigureNotify (FILE* out_f, XEvent *eventp)
  332 {
  333     XConfigureEvent *e = (XConfigureEvent *) eventp;
  334 
  335     fprintf(out_f,"    event 0x%lx, window 0x%lx, (%d,%d), width %d, height %d,\n",
  336         e->event, e->window, e->x, e->y, e->width, e->height);
  337     fprintf(out_f,"    border_width %d, above 0x%lx, override %s\n",
  338         e->border_width, e->above, e->override_redirect ? Yes : No);
  339 }
  340 
  341 static void
  342 do_ConfigureRequest (FILE* out_f, XEvent *eventp)
  343 {
  344     XConfigureRequestEvent *e = (XConfigureRequestEvent *) eventp;
  345     char *detail;
  346     char ddummy[10];
  347 
  348     switch (e->detail) {
  349       case Above:  detail = "Above";  break;
  350       case Below:  detail = "Below";  break;
  351       case TopIf:  detail = "TopIf";  break;
  352       case BottomIf:  detail = "BottomIf"; break;
  353       case Opposite:  detail = "Opposite"; break;
  354       default:  detail = ddummy; sprintf(ddummy, "%d", e->detail); break;
  355     }
  356 
  357     fprintf(out_f,"    parent 0x%lx, window 0x%lx, (%d,%d), width %d, height %d,\n",
  358         e->parent, e->window, e->x, e->y, e->width, e->height);
  359     fprintf(out_f,"    border_width %d, above 0x%lx, detail %s, value 0x%lx\n",
  360         e->border_width, e->above, detail, e->value_mask);
  361 }
  362 
  363 static void
  364 do_GravityNotify (FILE* out_f, XEvent *eventp)
  365 {
  366     XGravityEvent *e = (XGravityEvent *) eventp;
  367 
  368     fprintf(out_f,"    event 0x%lx, window 0x%lx, (%d,%d)\n",
  369         e->event, e->window, e->x, e->y);
  370 }
  371 
  372 static void
  373 do_ResizeRequest (FILE* out_f, XEvent *eventp)
  374 {
  375     XResizeRequestEvent *e = (XResizeRequestEvent *) eventp;
  376 
  377     fprintf(out_f,"    width %d, height %d\n", e->width, e->height);
  378 }
  379 
  380 static void
  381 do_CirculateNotify (FILE* out_f, XEvent *eventp)
  382 {
  383     XCirculateEvent *e = (XCirculateEvent *) eventp;
  384     char *p;
  385     char pdummy[10];
  386 
  387     switch (e->place) {
  388       case PlaceOnTop:  p = "PlaceOnTop"; break;
  389       case PlaceOnBottom:  p = "PlaceOnBottom"; break;
  390       default:  p = pdummy; sprintf(pdummy, "%d", e->place); break;
  391     }
  392 
  393     fprintf(out_f,"    event 0x%lx, window 0x%lx, place %s\n",
  394         e->event, e->window, p);
  395 }
  396 
  397 static void
  398 do_CirculateRequest (FILE* out_f, XEvent *eventp)
  399 {
  400     XCirculateRequestEvent *e = (XCirculateRequestEvent *) eventp;
  401     char *p;
  402     char pdummy[10];
  403 
  404     switch (e->place) {
  405       case PlaceOnTop:  p = "PlaceOnTop"; break;
  406       case PlaceOnBottom:  p = "PlaceOnBottom"; break;
  407       default:  p = pdummy; sprintf(pdummy, "%d", e->place); break;
  408     }
  409 
  410     fprintf(out_f,"    parent 0x%lx, window 0x%lx, place %s\n",
  411         e->parent, e->window, p);
  412 }
  413 
  414 static void
  415 do_PropertyNotify (FILE* out_f, XEvent *eventp,Display* dpy)
  416 {
  417     XPropertyEvent *e = (XPropertyEvent *) eventp;
  418     char *aname = NULL;
  419     char *s;
  420     char sdummy[10];
  421 
  422     if (dpy != NULL) {
  423       aname = XGetAtomName (dpy, e->atom);
  424     }
  425     switch (e->state) {
  426       case PropertyNewValue:  s = "PropertyNewValue"; break;
  427       case PropertyDelete:  s = "PropertyDelete"; break;
  428       default:  s = sdummy; sprintf(sdummy, "%d", e->state); break;
  429     }
  430 
  431     fprintf(out_f,"    atom 0x%lx (%s), time %lu, state %s\n",
  432        e->atom, aname ? aname : Unknown, e->time,  s);
  433 
  434     if (aname) XFree (aname);
  435 }
  436 
  437 static void
  438 do_SelectionClear (FILE* out_f, XEvent *eventp, Display* dpy)
  439 {
  440     XSelectionClearEvent *e = (XSelectionClearEvent *) eventp;
  441     char *sname = NULL;
  442 
  443     if (dpy != NULL) {
  444       sname = XGetAtomName (dpy, e->selection);
  445     }
  446 
  447     fprintf(out_f,"    selection 0x%lx (%s), time %lu\n",
  448         e->selection, sname ? sname : Unknown, e->time);
  449 
  450     if (sname) XFree (sname);
  451 }
  452 
  453 static void
  454 do_SelectionRequest (FILE* out_f, XEvent *eventp, Display* dpy)
  455 {
  456     XSelectionRequestEvent *e = (XSelectionRequestEvent *) eventp;
  457     /*
  458     char *sname = XGetAtomName (dpy, e->selection);
  459     char *tname = XGetAtomName (dpy, e->target);
  460     char *pname = XGetAtomName (dpy, e->property);
  461     */
  462     char *sname = NULL;
  463     char *tname = NULL;
  464     char *pname = NULL;
  465 
  466     if (dpy != NULL) {
  467       sname = XGetAtomName (dpy, e->selection);
  468       tname = XGetAtomName (dpy, e->target);
  469       pname = XGetAtomName (dpy, e->property);
  470     }
  471 
  472     fprintf(out_f,"    owner 0x%lx, requestor 0x%lx, selection 0x%lx (%s),\n",
  473         e->owner, e->requestor, e->selection, sname ? sname : Unknown);
  474     fprintf(out_f,"    target 0x%lx (%s), property 0x%lx (%s), time %lu\n",
  475         e->target, tname ? tname : Unknown, e->property,
  476         pname ? pname : Unknown, e->time);
  477 
  478     if (sname) XFree (sname);
  479     if (tname) XFree (tname);
  480     if (pname) XFree (pname);
  481 }
  482 
  483 static void
  484 do_SelectionNotify (FILE* out_f, XEvent *eventp, Display* dpy)
  485 {
  486     XSelectionEvent *e = (XSelectionEvent *) eventp;
  487     char *sname = NULL;
  488     char *tname = NULL;
  489     char *pname = NULL;
  490 
  491     if (dpy != NULL) {
  492       sname = XGetAtomName (dpy, e->selection);
  493       tname = XGetAtomName (dpy, e->target);
  494       pname = XGetAtomName (dpy, e->property);
  495     }
  496 
  497     fprintf(out_f,"    selection 0x%lx (%s), target 0x%lx (%s),\n",
  498         e->selection, sname ? sname : Unknown, e->target,
  499         tname ? tname : Unknown);
  500     fprintf(out_f,"    property 0x%lx (%s), time %lu\n",
  501         e->property, pname ? pname : Unknown, e->time);
  502 
  503     if (sname) XFree (sname);
  504     if (tname) XFree (tname);
  505     if (pname) XFree (pname);
  506 }
  507 
  508 static void
  509 do_ColormapNotify (FILE* out_f, XEvent *eventp)
  510 {
  511     XColormapEvent *e = (XColormapEvent *) eventp;
  512     char *s;
  513     char sdummy[10];
  514 
  515     switch (e->state) {
  516       case ColormapInstalled:  s = "ColormapInstalled"; break;
  517       case ColormapUninstalled:  s = "ColormapUninstalled"; break;
  518       default:  s = sdummy; sprintf(sdummy, "%d", e->state); break;
  519     }
  520 
  521     fprintf(out_f,"    colormap 0x%lx, new %s, state %s\n",
  522         e->colormap, e->new ? Yes : No, s);
  523 }
  524 
  525 static void
  526 do_ClientMessage (FILE* out_f, XEvent *eventp, Display* dpy)
  527 {
  528     XClientMessageEvent *e = (XClientMessageEvent *) eventp;
  529     char *mname = NULL;
  530 
  531     if (dpy != NULL) {
  532       mname = XGetAtomName (dpy, e->message_type);
  533     }
  534 
  535     fprintf(out_f,"    message_type 0x%lx (%s), format %d\n",
  536             e->message_type, mname ? mname : Unknown, e->format);
  537 
  538     if (mname) XFree (mname);
  539 }
  540 
  541 static void
  542 do_MappingNotify (FILE* out_f, XEvent *eventp)
  543 {
  544     XMappingEvent *e = (XMappingEvent *) eventp;
  545     char *r;
  546     char rdummy[10];
  547 
  548     switch (e->request) {
  549       case MappingModifier:  r = "MappingModifier"; break;
  550       case MappingKeyboard:  r = "MappingKeyboard"; break;
  551       case MappingPointer:  r = "MappingPointer"; break;
  552       default:  r = rdummy; sprintf(rdummy, "%d", e->request); break;
  553     }
  554 
  555     fprintf(out_f,"    request %s, first_keycode %d, count %d\n",
  556         r, e->first_keycode, e->count);
  557     XRefreshKeyboardMapping(e);
  558 }
  559 
  560 
  561 
  562 void print_event(FILE* out_f, XEvent* ev, Display *dpy)
  563 {
  564     switch (ev->type) {
  565       case KeyPress:
  566         prologue (out_f, ev, "KeyPress");
  567         do_KeyPress (out_f, ev);
  568         break;
  569       case KeyRelease:
  570         prologue (out_f, ev, "KeyRelease");
  571         do_KeyRelease (out_f, ev);
  572         break;
  573       case ButtonPress:
  574         prologue (out_f, ev, "ButtonPress");
  575         do_ButtonPress (out_f, ev);
  576         break;
  577       case ButtonRelease:
  578         prologue (out_f, ev, "ButtonRelease");
  579         do_ButtonRelease (out_f, ev);
  580         break;
  581       case MotionNotify:
  582         prologue (out_f, ev, "MotionNotify");
  583         do_MotionNotify (out_f, ev);
  584         break;
  585       case EnterNotify:
  586         prologue (out_f, ev, "EnterNotify");
  587         do_EnterNotify (out_f, ev);
  588         break;
  589       case LeaveNotify:
  590         prologue (out_f, ev, "LeaveNotify");
  591         do_LeaveNotify (out_f, ev);
  592         break;
  593       case FocusIn:
  594         prologue (out_f, ev, "FocusIn");
  595         do_FocusIn (out_f, ev);
  596         break;
  597       case FocusOut:
  598         prologue (out_f, ev, "FocusOut");
  599         do_FocusOut (out_f, ev);
  600         break;
  601       case KeymapNotify:
  602         prologue (out_f, ev, "KeymapNotify");
  603         do_KeymapNotify (out_f, ev);
  604         break;
  605       case Expose:
  606         prologue (out_f, ev, "Expose");
  607         do_Expose (out_f, ev);
  608         break;
  609       case GraphicsExpose:
  610         prologue (out_f, ev, "GraphicsExpose");
  611         do_GraphicsExpose (out_f, ev);
  612         break;
  613       case NoExpose:
  614         prologue (out_f, ev, "NoExpose");
  615         do_NoExpose (out_f, ev);
  616         break;
  617       case VisibilityNotify:
  618         prologue (out_f, ev, "VisibilityNotify");
  619         do_VisibilityNotify (out_f, ev);
  620         break;
  621       case CreateNotify:
  622         prologue (out_f, ev, "CreateNotify");
  623         do_CreateNotify (out_f, ev);
  624         break;
  625       case DestroyNotify:
  626         prologue (out_f, ev, "DestroyNotify");
  627         do_DestroyNotify (out_f, ev);
  628         break;
  629       case UnmapNotify:
  630         prologue (out_f, ev, "UnmapNotify");
  631         do_UnmapNotify (out_f, ev);
  632         break;
  633       case MapNotify:
  634         prologue (out_f, ev, "MapNotify");
  635         do_MapNotify (out_f, ev);
  636         break;
  637       case MapRequest:
  638         prologue (out_f, ev, "MapRequest");
  639         do_MapRequest (out_f, ev);
  640         break;
  641       case ReparentNotify:
  642         prologue (out_f, ev, "ReparentNotify");
  643         do_ReparentNotify (out_f, ev);
  644         break;
  645       case ConfigureNotify:
  646         prologue (out_f, ev, "ConfigureNotify");
  647         do_ConfigureNotify (out_f, ev);
  648         break;
  649       case ConfigureRequest:
  650         prologue (out_f, ev, "ConfigureRequest");
  651         do_ConfigureRequest (out_f, ev);
  652         break;
  653       case GravityNotify:
  654         prologue (out_f, ev, "GravityNotify");
  655         do_GravityNotify (out_f, ev);
  656         break;
  657       case ResizeRequest:
  658         prologue (out_f, ev, "ResizeRequest");
  659         do_ResizeRequest (out_f, ev);
  660         break;
  661       case CirculateNotify:
  662         prologue (out_f, ev, "CirculateNotify");
  663         do_CirculateNotify (out_f, ev);
  664         break;
  665       case CirculateRequest:
  666         prologue (out_f, ev, "CirculateRequest");
  667         do_CirculateRequest (out_f, ev);
  668         break;
  669       case PropertyNotify:
  670         prologue (out_f, ev, "PropertyNotify");
  671         do_PropertyNotify (out_f, ev, dpy);
  672         break;
  673       case SelectionClear:
  674         prologue (out_f, ev, "SelectionClear");
  675         do_SelectionClear (out_f, ev, dpy);
  676         break;
  677       case SelectionRequest:
  678         prologue (out_f, ev, "SelectionRequest");
  679         do_SelectionRequest (out_f, ev, dpy);
  680         break;
  681       case SelectionNotify:
  682         prologue (out_f, ev, "SelectionNotify");
  683         do_SelectionNotify (out_f, ev, dpy);
  684         break;
  685       case ColormapNotify:
  686         prologue (out_f, ev, "ColormapNotify");
  687         do_ColormapNotify (out_f, ev);
  688         break;
  689       case ClientMessage:
  690         prologue (out_f, ev, "ClientMessage");
  691         do_ClientMessage (out_f, ev, dpy);
  692         break;
  693       case MappingNotify:
  694         prologue (out_f, ev, "MappingNotify");
  695         do_MappingNotify (out_f, ev);
  696         break;
  697       default:
  698         fprintf(out_f,"Unknown event type %d\n", ev->type);
  699         break;
  700     } // end switch.
  701 
  702 }
  703 
  704 
  705 void print_xquerytree(FILE* out_file, Window win_handle, Display* dpy)
  706 {
  707   if (win_handle == 0) {
  708     return;
  709   }
  710 
  711   Window root_win = 0;
  712   Window parent_win = 0;
  713   Window* childs_list = NULL;
  714   unsigned int num_childs = 0;
  715   int k = 0;
  716 
  717   int queryRes = XQueryTree(dpy, win_handle, &root_win,
  718                             &parent_win, &childs_list, &num_childs);
  719   if (queryRes != 0) {
  720     fprintf(out_file, "Active window: %#lx, root %#lx, parent %#lx ",
  721             win_handle, root_win, parent_win);
  722 
  723     if ((num_childs > 0) && (childs_list != NULL)) {
  724       fprintf(out_file, "Children: ");
  725       for (k = 0; k < num_childs; k++) {
  726         fprintf(out_file, "%#lx ", childs_list[k]);
  727       }
  728       fprintf(out_file, "\n");
  729       XFree(childs_list);
  730       childs_list = NULL;
  731     }
  732   } 
  733 }