1 /**************************************************************************
5 Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
7 Contact: Boram Park <boram1288.park@samsung.com>
8 Sangjin LEE <lsj119@samsung.com>
10 Permission is hereby granted, free of charge, to any person obtaining a
11 copy of this software and associated documentation files (the
12 "Software"), to deal in the Software without restriction, including
13 without limitation the rights to use, copy, modify, merge, publish,
14 distribute, sub license, and/or sell copies of the Software, and to
15 permit persons to whom the Software is furnished to do so, subject to
16 the following conditions:
18 The above copyright notice and this permission notice (including the
19 next paragraph) shall be included in all copies or substantial portions
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
25 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 **************************************************************************/
39 #include <sys/types.h>
40 #include <sys/fcntl.h>
51 #include <X11/Xatom.h>
53 #include <windowstr.h>
54 #include <X11/Xproto.h>
55 #include <X11/extensions/XI2proto.h>
57 #include "xdbg_types.h"
58 #include "xdbg_evlog_core.h"
59 #include "xdbg_evlog.h"
63 _getWindowAttributeMask (CARD32 mask, char *reply, int *len)
68 for (i = 0 ; i < sizeof(mask) * 4 ; i++)
79 case CWBackPixmap: REPLY("CWBackPixmap"); break;
80 case CWBackPixel: REPLY("CWBackPixel"); break;
81 case CWBorderPixmap: REPLY("CWBorderPixmap"); break;
82 case CWBorderPixel: REPLY("CWBorderPixel"); break;
83 case CWBitGravity: REPLY("CWBitGravity"); break;
84 case CWWinGravity: REPLY("CWWinGravity"); break;
85 case CWBackingStore: REPLY("CWBackingStore"); break;
86 case CWBackingPlanes: REPLY("CWBackingPlanes"); break;
87 case CWBackingPixel: REPLY("CWBackingPixel"); break;
88 case CWOverrideRedirect: REPLY("CWOverrideRedirect"); break;
89 case CWSaveUnder: REPLY("CWSaveUnder"); break;
90 case CWEventMask: REPLY("CWEventMask"); break;
91 case CWDontPropagate: REPLY("CWDontPropagate"); break;
92 case CWColormap: REPLY("CWColormap"); break;
93 case CWCursor: REPLY("CWCursor"); break;
101 #define GET_INT16(m, f) \
104 f = (INT16) *pVlist;\
107 #define GET_CARD16(m, f) \
110 f = (CARD16) *pVlist;\
114 #define GET_CARD8(m, f) \
117 f = (CARD8) *pVlist;\
122 _getConfigureWindowMask (CARD16 mask, char *reply, int *len, XID *vlist)
127 unsigned short w=0, h=0;
134 if ((mask & (CWX | CWY)) && (!(mask & (CWHeight | CWWidth)))) {
138 /* or should be resized */
139 else if (mask & (CWX | CWY | CWWidth | CWHeight)) {
142 GET_CARD16(CWWidth, w);
143 GET_CARD16(CWHeight, h);
147 for (i = 0 ; i < sizeof(mask) * 4 ; i++)
160 case CWX: REPLY("CWX:%d",x); break;
161 case CWY: REPLY("CWY:%d",y); break;
162 case CWWidth: REPLY("CWWidth:%d",w); break;
163 case CWHeight: REPLY("CWHeight:%d",h); break;
164 case CWBorderWidth: REPLY("CWBorderWidth"); break;
165 case CWSibling: REPLY("CWSibling"); break;
166 case CWStackMode: REPLY("CWStackMode"); break;
173 case CWX: REPLY("CWX"); break;
174 case CWY: REPLY("CWY"); break;
175 case CWWidth: REPLY("CWWidth"); break;
176 case CWHeight: REPLY("CWHeight"); break;
177 case CWBorderWidth: REPLY("CWBorderWidth"); break;
178 case CWSibling: REPLY("CWSibling"); break;
179 case CWStackMode: REPLY("CWStackMode"); break;
189 _getKeyMask (CARD16 mask, char *reply, int *len)
194 for (i = 0 ; i < sizeof(mask) * 4 ; i++)
205 case ShiftMask: REPLY("ShiftMask"); break;
206 case LockMask: REPLY("LockMask"); break;
207 case ControlMask: REPLY("ControlMask"); break;
208 case Mod1Mask: REPLY("Mod1Mask"); break;
209 case Mod2Mask: REPLY("Mod2Mask"); break;
210 case Mod3Mask: REPLY("Mod3Mask"); break;
211 case Mod4Mask: REPLY("Mod4Mask"); break;
212 case Mod5Mask: REPLY("Mod5Mask"); break;
213 case Button1Mask: REPLY("Button1Mask"); break;
214 case Button2Mask: REPLY("Button2Mask"); break;
215 case Button3Mask: REPLY("Button3Mask"); break;
216 case Button4Mask: REPLY("Button4Mask"); break;
217 case Button5Mask: REPLY("Button5Mask"); break;
218 case AnyModifier: REPLY("AnyModifier"); break;
227 _getEventMask (CARD32 mask, char *reply, int *len)
232 for (i = 0 ; i < sizeof(mask) * 4 ; i++)
243 case NoEventMask: REPLY("NoEventMask"); break;
244 case KeyPressMask: REPLY("KeyPressMask"); break;
245 case KeyReleaseMask: REPLY("KeyReleaseMask"); break;
246 case ButtonPressMask: REPLY("ButtonPressMask"); break;
247 case ButtonReleaseMask: REPLY("ButtonReleaseMask"); break;
248 case EnterWindowMask: REPLY("EnterWindowMask"); break;
249 case LeaveWindowMask: REPLY("LeaveWindowMask"); break;
250 case PointerMotionMask: REPLY("PointerMotionMask"); break;
251 case PointerMotionHintMask: REPLY("PointerMotionHintMask"); break;
252 case Button1MotionMask: REPLY("Button1MotionMask"); break;
253 case Button2MotionMask: REPLY("Button2MotionMask"); break;
254 case Button3MotionMask: REPLY("Button3MotionMask"); break;
255 case Button4MotionMask: REPLY("Button4MotionMask"); break;
256 case Button5MotionMask: REPLY("Button5MotionMask"); break;
257 case ButtonMotionMask: REPLY("ButtonMotionMask"); break;
258 case KeymapStateMask: REPLY("KeymapStateMask"); break;
259 case ExposureMask: REPLY("ExposureMask"); break;
260 case VisibilityChangeMask: REPLY("VisibilityChangeMask"); break;
261 case StructureNotifyMask: REPLY("StructureNotifyMask"); break;
262 case ResizeRedirectMask: REPLY("ResizeRedirectMask"); break;
263 case SubstructureNotifyMask: REPLY("SubstructureNotifyMask"); break;
264 case SubstructureRedirectMask: REPLY("SubstructureRedirectMask"); break;
265 case FocusChangeMask: REPLY("FocusChangeMask"); break;
266 case PropertyChangeMask: REPLY("PropertyChangeMask"); break;
267 case ColormapChangeMask: REPLY("ColormapChangeMask"); break;
268 case OwnerGrabButtonMask: REPLY("OwnerGrabButtonMask"); break;
276 char * xDbgEvlogRequestCore (EvlogInfo *evinfo, int detail_level, char *reply, int *len)
278 xReq *req = evinfo->req.ptr;
280 switch (req->reqType)
284 xCreateWindowReq *stuff = (xCreateWindowReq *)req;
286 REPLY (": Window(0x%lx) Parent(0x%lx) size(%dx%d) boaderWid(%d) coordinate(%d,%d)",
295 if (detail_level >= EVLOG_PRINT_DETAIL)
297 const char *visual, *class;
298 char dvisual[10], dclass[10];
300 switch (stuff->visual)
302 case CopyFromParent: visual = "CopyFromParent"; break;
303 default: visual = dvisual; snprintf (dvisual, 10, "0x%lx", stuff->visual); break;
306 switch (stuff->class)
308 case CopyFromParent: class = "CopyFromParent"; break;
309 case InputOutput: class = "InputOutput"; break;
310 case InputOnly: class = "InputOnly"; break;
311 default: class = dclass; snprintf (dclass, 10, "0x%x", stuff->class); break;
315 REPLY ("%67s depth(%d) visual_ID(%s) class(%s)\n",
321 \r REPLY ("%67s mask", " ");
323 reply = _getWindowAttributeMask(stuff->mask, reply, len);
330 case X_ChangeWindowAttributes:
332 xChangeWindowAttributesReq *stuff = (xChangeWindowAttributesReq *)req;
333 REPLY (": XID(0x%lx)",
336 if (detail_level >= EVLOG_PRINT_DETAIL)
338 \r REPLY (" value_mask");
340 reply = _getWindowAttributeMask(stuff->valueMask, reply, len);
347 case X_ChangeSaveSet:
349 xChangeSaveSetReq *stuff = (xChangeSaveSetReq *)req;
351 REPLY (": XID(0x%lx)",
354 if (detail_level >= EVLOG_PRINT_DETAIL)
361 case SetModeInsert: mode = "SetModeInsert"; break;
362 case SetModeDelete: mode = "SetModeDelete"; break;
363 default: mode = dmode; snprintf (dmode, 10, "%d", stuff->mode); break;
373 case X_ReparentWindow:
375 xReparentWindowReq *stuff = (xReparentWindowReq *)req;
376 REPLY (": Window(0x%lx) Parent(0x%lx) coord(%d,%d)",
385 case X_ConfigureWindow:
387 xConfigureWindowReq *stuff = (xConfigureWindowReq *)req;
388 REPLY (": XID(0x%lx)",
391 if (detail_level >= EVLOG_PRINT_DETAIL)
395 reply = _getConfigureWindowMask(stuff->mask, reply, len, (XID *)&stuff[1]);
402 case X_CirculateWindow:
404 xCirculateWindowReq *stuff = (xCirculateWindowReq *)req;
406 REPLY (": XID(0x%lx)",
409 if (detail_level >= EVLOG_PRINT_DETAIL)
411 const char *direction;
414 switch (stuff->direction)
416 case RaiseLowest: direction = "RaiseLowest"; break;
417 case LowerHighest: direction = "LowerHighest"; break;
418 default: direction = ddirection; snprintf (ddirection, 10, "%d", stuff->direction); break;
421 REPLY (" direction(%s)",
428 case X_ChangeProperty:
430 xChangePropertyReq *stuff = (xChangePropertyReq *)req;
432 REPLY (": XID(0x%lx)",
436 reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
439 reply = xDbgGetAtom(stuff->type, evinfo, reply, len);
441 if (detail_level >= EVLOG_PRINT_DETAIL)
448 case PropModeReplace: mode = "PropModeReplace"; break;
449 case PropModePrepend: mode = "PropModePrepend"; break;
450 case PropModeAppend: mode = "PropModeAppend"; break;
451 default: mode = dmode; snprintf (dmode, 10, "%d", stuff->mode); break;
455 REPLY ("%67s mode(%s) format(%d) nUnits(%ld)",
465 case X_DeleteProperty:
467 xDeletePropertyReq *stuff = (xDeletePropertyReq *)req;
468 REPLY (": XID(0x%lx)",
472 reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
479 xGetPropertyReq *stuff = (xGetPropertyReq *)req;
481 REPLY (": XID(0x%lx)",
485 reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
487 reply = xDbgGetAtom(stuff->type, evinfo, reply, len);
489 if (detail_level >= EVLOG_PRINT_DETAIL)
492 REPLY ("%67s delete(%s) longOffset(%ld) longLength(%ld)",
494 stuff->delete ? "YES" : "NO",
502 case X_SetSelectionOwner:
504 xSetSelectionOwnerReq *stuff = (xSetSelectionOwnerReq *)req;
505 REPLY (": XID(0x%lx)",
508 REPLY (" Selection");
509 reply = xDbgGetAtom(stuff->selection, evinfo, reply, len);
511 if (detail_level >= EVLOG_PRINT_DETAIL)
513 REPLY (" time(%lums)",
520 case X_ConvertSelection:
522 xConvertSelectionReq *stuff = (xConvertSelectionReq *)req;
523 REPLY (": XID(0x%lx)",
526 REPLY (" Selection");
527 reply = xDbgGetAtom(stuff->selection, evinfo, reply, len);
529 reply = xDbgGetAtom(stuff->target, evinfo, reply, len);
531 reply = xDbgGetAtom(stuff->property, evinfo, reply, len);
533 if (detail_level >= EVLOG_PRINT_DETAIL)
535 REPLY (" time(%lums)",
544 xSendEventReq *stuff = (xSendEventReq *)req;
545 REPLY (": XID(0x%lx)",
548 if (detail_level >= EVLOG_PRINT_DETAIL)
550 REPLY (" propagate(%s)",
551 stuff->propagate ? "YES" : "NO");
553 REPLY (" event_mask");
555 reply = _getEventMask(stuff->eventMask, reply, len);
564 xGrabPointerReq *stuff = (xGrabPointerReq *)req;
566 REPLY (": XID(0x%lx) ConfineTo(0x%lx) Cursor(0x%lx)",
571 if (detail_level >= EVLOG_PRINT_DETAIL)
573 const char *pointer_mode, *keyboard_mode;
574 char dpointer_mode[10], dkeyboard_mode[10];
576 switch (stuff->pointerMode)
578 case GrabModeSync: pointer_mode = "GrabModeSync"; break;
579 case GrabModeAsync: pointer_mode = "GrabModeAsync"; break;
580 default: pointer_mode = dpointer_mode; snprintf (dpointer_mode, 10, "%d", stuff->pointerMode); break;
583 switch (stuff->keyboardMode)
585 case GrabModeSync: keyboard_mode = "GrabModeSync"; break;
586 case GrabModeAsync: keyboard_mode = "GrabModeAsync"; break;
587 default: keyboard_mode = dkeyboard_mode; snprintf (dkeyboard_mode, 10, "%d", stuff->keyboardMode); break;
590 REPLY (" pointer_mode(%s) keyboard_mode(%s) time(%lums)\n",
595 REPLY (" event_mask");
597 reply = _getEventMask(stuff->eventMask, reply, len);
606 xGrabButtonReq *stuff = (xGrabButtonReq *)req;
608 REPLY (": XID(0x%lx) ConfineTo(0x%lx) Cursor(0x%lx)",
613 if (detail_level >= EVLOG_PRINT_DETAIL)
615 const char *pointer_mode, *keyboard_mode, *button;
616 char dpointer_mode[10], dkeyboard_mode[10], dbutton[10];
618 switch (stuff->pointerMode)
620 case GrabModeSync: pointer_mode = "GrabModeSync"; break;
621 case GrabModeAsync: pointer_mode = "GrabModeAsync"; break;
622 default: pointer_mode = dpointer_mode; snprintf (dpointer_mode, 10, "%d", stuff->pointerMode); break;
625 switch (stuff->keyboardMode)
627 case GrabModeSync: keyboard_mode = "GrabModeSync"; break;
628 case GrabModeAsync: keyboard_mode = "GrabModeAsync"; break;
629 default: keyboard_mode = dkeyboard_mode; snprintf (dkeyboard_mode, 10, "%d", stuff->keyboardMode); break;
632 switch (stuff->button)
634 case Button1: button = "Button1"; break;
635 case Button2: button = "Button2"; break;
636 case Button3: button = "Button3"; break;
637 case Button4: button = "Button4"; break;
638 case Button5: button = "Button5"; break;
639 default: button = dbutton; snprintf (dbutton, 10, "%d", stuff->button); break;
643 REPLY ("%67s event_mask(0x%x) pointer_mode(%s) keyboard_mode(%s) button(%s)",
650 REPLY (" modifiers");
652 reply = _getKeyMask(stuff->modifiers, reply, len);
661 xUngrabButtonReq *stuff = (xUngrabButtonReq *)req;
662 REPLY (": XID(0x%lx)",
665 if (detail_level >= EVLOG_PRINT_DETAIL)
667 REPLY (" modifiers");
669 reply = _getKeyMask(stuff->modifiers, reply, len);
676 case X_ChangeActivePointerGrab:
678 xChangeActivePointerGrabReq *stuff = (xChangeActivePointerGrabReq *)req;
679 REPLY (": Cursor(0x%lx)",
682 if (detail_level >= EVLOG_PRINT_DETAIL)
684 REPLY (" time(%lums)",
687 REPLY (" event_mask");
689 reply = _getEventMask(stuff->eventMask, reply, len);
698 xGrabKeyboardReq *stuff = (xGrabKeyboardReq *)req;
700 REPLY (": XID(0x%lx)",
703 if (detail_level >= EVLOG_PRINT_DETAIL)
705 const char *pointer_mode, *keyboard_mode;
706 char dpointer_mode[10], dkeyboard_mode[10];
708 switch (stuff->pointerMode)
710 case GrabModeSync: pointer_mode = "GrabModeSync"; break;
711 case GrabModeAsync: pointer_mode = "GrabModeAsync"; break;
712 default: pointer_mode = dpointer_mode; snprintf (dpointer_mode, 10, "%d", stuff->pointerMode); break;
715 switch (stuff->keyboardMode)
717 case GrabModeSync: keyboard_mode = "GrabModeSync"; break;
718 case GrabModeAsync: keyboard_mode = "GrabModeAsync"; break;
719 default: keyboard_mode = dkeyboard_mode; snprintf (dkeyboard_mode, 10, "%d", stuff->keyboardMode); break;
722 REPLY (" owner_events(%s) pointer_mode(%s) keyboard_mode(%s)",
723 stuff->ownerEvents ? "YES" : "NO",
733 xGrabKeyReq *stuff = (xGrabKeyReq *)req;
735 REPLY (": XID(0x%lx)",
738 if (detail_level >= EVLOG_PRINT_DETAIL)
740 const char *pointer_mode, *keyboard_mode;
741 char dpointer_mode[10], dkeyboard_mode[10];
743 switch (stuff->pointerMode)
745 case GrabModeSync: pointer_mode = "GrabModeSync"; break;
746 case GrabModeAsync: pointer_mode = "GrabModeAsync"; break;
747 default: pointer_mode = dpointer_mode; snprintf (dpointer_mode, 10, "%d", stuff->pointerMode); break;
750 switch (stuff->keyboardMode)
752 case GrabModeSync: keyboard_mode = "GrabModeSync"; break;
753 case GrabModeAsync: keyboard_mode = "GrabModeAsync"; break;
754 default: keyboard_mode = dkeyboard_mode; snprintf (dkeyboard_mode, 10, "%d", stuff->keyboardMode); break;
757 REPLY (" key(%d) pointer_mode(%s) keyboard_mode(%s)\n",
762 REPLY (" modifiers");
764 reply = _getKeyMask(stuff->modifiers, reply, len);
773 xUngrabKeyReq *stuff = (xUngrabKeyReq *)req;
774 REPLY (": XID(0x%lx)",
777 if (detail_level >= EVLOG_PRINT_DETAIL)
782 REPLY (" modifiers");
784 reply = _getKeyMask(stuff->modifiers, reply, len);
791 case X_SetInputFocus:
793 xSetInputFocusReq *stuff = (xSetInputFocusReq *)req;
794 REPLY (": XID(0x%lx)",
797 if (detail_level >= EVLOG_PRINT_DETAIL)
799 REPLY (" reverTo(%d) time(%lums)",
809 xCreatePixmapReq *stuff = (xCreatePixmapReq *)req;
810 REPLY (": Pixmap(0x%lx) Drawable(0x%lx) size(%dx%d)",
816 if (detail_level >= EVLOG_PRINT_DETAIL)
827 xClearAreaReq *stuff = (xClearAreaReq *)req;
828 REPLY (": XID(0x%lx) area(%d,%d %dx%d)",
835 if (detail_level >= EVLOG_PRINT_DETAIL)
837 REPLY (" exposures(%s)",
838 stuff->exposures ? "YES" : "NO");
846 xCopyAreaReq *stuff = (xCopyAreaReq *)req;
847 REPLY (": srcXID(0x%lx) dstXID(0x%lx) gc(0x%lx) size(%dx%d) src(%d,%d) dst(%d,%d)",
863 xCopyPlaneReq *stuff = (xCopyPlaneReq *)req;
864 REPLY (": srcXID(0x%lx) dstXID(0x%lx) gc(0x%lx) size(%dx%d) src(%d,%d) dst(%d,%d)",
875 if (detail_level >= EVLOG_PRINT_DETAIL)
877 REPLY (" bit_plane(0x%lx)",
886 xPolyPointReq *stuff = (xPolyPointReq *)req;
887 REPLY (": XID(0x%lx) gc(0x%lx)",
891 if (detail_level >= EVLOG_PRINT_DETAIL)
893 const char *coord_mode;
894 char dcoord_mode[10];
896 switch (stuff->coordMode)
898 case CoordModeOrigin: coord_mode = "CoordModeOrigin"; break;
899 case CoordModePrevious: coord_mode = "CoordModePrevious"; break;
900 default: coord_mode = dcoord_mode; snprintf (dcoord_mode, 10, "%d", stuff->coordMode); break;
903 REPLY (" coord_mode(%s)",
912 xPolyLineReq *stuff = (xPolyLineReq *)req;
913 REPLY (": XID(0x%lx gc(0x%lx)",
917 if (detail_level >= EVLOG_PRINT_DETAIL)
919 const char *coord_mode;
920 char dcoord_mode[10];
922 switch (stuff->coordMode)
924 case CoordModeOrigin: coord_mode = "CoordModeOrigin"; break;
925 case CoordModePrevious: coord_mode = "CoordModePrevious"; break;
926 default: coord_mode = dcoord_mode; snprintf (dcoord_mode, 10, "%d", stuff->coordMode); break;
929 REPLY (" coord_mode(%s)",
938 xPolySegmentReq *stuff = (xPolySegmentReq *)req;
939 REPLY (": XID(0x%lx) gc(0x%lx)",
946 case X_PolyRectangle:
948 xPolyRectangleReq *stuff = (xPolyRectangleReq *)req;
949 REPLY (": XID(0x%lx) gc(0x%lx)",
958 xPolyArcReq *stuff = (xPolyArcReq *)req;
959 REPLY (": XID(0x%lx) gc(0x%lx)",
968 xFillPolyReq *stuff = (xFillPolyReq *)req;
969 REPLY (": XID(0x%lx) gc(0x%lx)",
973 if (detail_level >= EVLOG_PRINT_DETAIL)
975 const char *shape, *coord_mode;
976 char dshape[10], dcoord_mode[10];
978 switch (stuff->shape)
980 case Complex: shape = "Complex"; break;
981 case Nonconvex: shape = "Nonconvex"; break;
982 case Convex: shape = "Convex"; break;
983 default: shape = dshape; snprintf (dshape, 10, "%d", stuff->shape); break;
986 switch (stuff->coordMode)
988 case CoordModeOrigin: coord_mode = "CoordModeOrigin"; break;
989 case CoordModePrevious: coord_mode = "CoordModePrevious"; break;
990 default: coord_mode = dcoord_mode; snprintf (dcoord_mode, 10, "%d", stuff->coordMode); break;
993 REPLY (" shape(%s) coord_mode(%s)",
1001 case X_PolyFillRectangle:
1003 xPolyFillRectangleReq *stuff = (xPolyFillRectangleReq *)req;
1004 REPLY (": XID(0x%lx) gc(0x%lx)",
1013 xPolyFillArcReq *stuff = (xPolyFillArcReq *)req;
1014 REPLY (": XID(0x%lx) gc(0x%lx)",
1023 xPutImageReq *stuff = (xPutImageReq *)req;
1024 REPLY (": XID(0x%lx) gc(0x%lx) size(%dx%d) dst(%d,%d)",
1032 if (detail_level >= EVLOG_PRINT_DETAIL)
1037 switch (stuff->format)
1039 case XYBitmap: format = "XYBitmap"; break;
1040 case XYPixmap: format = "XYPixmap"; break;
1041 case ZPixmap: format = "ZPixmap"; break;
1042 default: format = dformat; snprintf (dformat, 10, "%d", stuff->format); break;
1045 REPLY (" format(%s) depth(%d)",
1055 xGetImageReq *stuff = (xGetImageReq *)req;
1056 REPLY (": XID(0x%lx) size(%dx%d) dst(%d,%d)",
1063 if (detail_level >= EVLOG_PRINT_DETAIL)
1068 switch (stuff->format)
1070 case XYBitmap: format = "XYBitmap"; break;
1071 case XYPixmap: format = "XYPixmap"; break;
1072 case ZPixmap: format = "ZPixmap"; break;
1073 default: format = dformat; snprintf (dformat, 10, "%d", stuff->format); break;
1076 REPLY (" format(%s) plane_mask(0x%lx)",
1086 xPolyText8Req *stuff = (xPolyText8Req *)req;
1087 REPLY (": XID(0x%lx) gc(0x%lx) coord(%d,%d)",
1098 xPolyText16Req *stuff = (xPolyText16Req *)req;
1099 REPLY (": XID(0x%lx) gc(0x%lx) coord(%d,%d)",
1110 xImageText8Req *stuff = (xImageText8Req *)req;
1111 REPLY (": XID(0x%lx) gc(0x%lx) coord(%d,%d)",
1117 if (detail_level >= EVLOG_PRINT_DETAIL)
1119 REPLY (" nchars(%d)",
1128 xImageText16Req *stuff = (xImageText16Req *)req;
1129 REPLY (": XID(0x%lx) gc(0x%lx) coord(%d,%d)",
1135 if (detail_level >= EVLOG_PRINT_DETAIL)
1137 REPLY (" nchars(%d)",
1144 case X_ChangeKeyboardMapping:
1146 xChangeKeyboardMappingReq *stuff = (xChangeKeyboardMappingReq *)req;
1147 REPLY (": first_key_code(%d) key_syms_per_key_code(%d)",
1148 stuff->firstKeyCode,
1149 stuff->keySymsPerKeyCode);
1151 if (detail_level >= EVLOG_PRINT_DETAIL)
1153 REPLY (" key_codes(%d)",
1160 case X_GetKeyboardMapping:
1162 xGetKeyboardMappingReq *stuff = (xGetKeyboardMappingReq *)req;
1163 REPLY (": first_key_code(%d)",
1164 stuff->firstKeyCode);
1166 if (detail_level >= EVLOG_PRINT_DETAIL)
1168 REPLY (" count(%d)",
1175 case X_ChangePointerControl:
1177 xChangePointerControlReq *stuff = (xChangePointerControlReq *)req;
1178 REPLY (": accelNum(%d) accelDenum(%d) threshold(%d)",
1183 if (detail_level >= EVLOG_PRINT_DETAIL)
1185 REPLY (" do_accel(%s) do_thresh(%s)",
1186 stuff->doAccel ? "YES" : "NO",
1187 stuff->doThresh ? "YES" : "NO");
1193 case X_SetPointerMapping:
1195 xSetPointerMappingReq *stuff = (xSetPointerMappingReq *)req;
1197 if (detail_level >= EVLOG_PRINT_DETAIL)
1199 REPLY (": Elts(%d)",
1206 case X_SetModifierMapping:
1208 xSetModifierMappingReq *stuff =(xSetModifierMappingReq *)req;
1209 REPLY (": num_key_per_modifier(%d)",
1210 stuff->numKeyPerModifier);
1215 case X_ListProperties:
1216 case X_DestroyWindow:
1217 case X_DestroySubwindows:
1219 case X_MapSubwindows:
1221 case X_UnmapSubwindows:
1224 case X_UngrabPointer:
1225 case X_UngrabKeyboard:
1229 xResourceReq *stuff = (xResourceReq *)req;
1230 REPLY (": XID(0x%lx)",
1243 char * xDbgEvlogEventCore (EvlogInfo *evinfo, int detail_level, char *reply, int *len)
1245 xEvent *evt = evinfo->evt.ptr;
1247 switch (evt->u.u.type & 0x7F)
1255 REPLY (": Root(0x%lx %d,%d) Event(0x%lx %d,%d) Child(0x%lx)",
1256 evt->u.keyButtonPointer.root,
1257 evt->u.keyButtonPointer.rootX,
1258 evt->u.keyButtonPointer.rootY,
1259 evt->u.keyButtonPointer.event,
1260 evt->u.keyButtonPointer.eventX,
1261 evt->u.keyButtonPointer.eventY,
1262 evt->u.keyButtonPointer.child);
1264 if (detail_level >= EVLOG_PRINT_DETAIL)
1267 REPLY ("%67s state(0x%x) same_screen(%s)",
1269 evt->u.keyButtonPointer.state,
1270 evt->u.keyButtonPointer.sameScreen ? "YES" : "NO");
1279 REPLY (": Root(0x%lx %d,%d) Event(0x%lx %d,%d) Child(0x%lx)",
1280 evt->u.enterLeave.root,
1281 evt->u.enterLeave.rootX,
1282 evt->u.enterLeave.rootY,
1283 evt->u.enterLeave.event,
1284 evt->u.enterLeave.eventX,
1285 evt->u.enterLeave.eventY,
1286 evt->u.enterLeave.child);
1288 if (detail_level >= EVLOG_PRINT_DETAIL)
1291 REPLY ("%67s time(%lums) state(0x%x) same_screen(%s) focus(%s)",
1293 evt->u.enterLeave.time,
1294 evt->u.enterLeave.state,
1295 evt->u.enterLeave.flags & ELFlagSameScreen ? "YES" : "NO",
1296 evt->u.enterLeave.flags & ELFlagFocus ? "YES" : "NO");
1306 REPLY (": XID(0x%lx)",
1307 evt->u.focus.window);
1309 if (detail_level >= EVLOG_PRINT_DETAIL)
1314 switch (evt->u.focus.mode)
1316 case NotifyNormal: mode = "NotifyNormal"; break;
1317 case NotifyGrab: mode = "NotifyGrab"; break;
1318 case NotifyUngrab: mode = "NotifyUngrab"; break;
1319 case NotifyWhileGrabbed: mode = "NotifyWhileGrabbed"; break;
1320 default: mode = dmode, snprintf (dmode, 10, "%u", evt->u.focus.mode); break;
1332 REPLY (": XID(0x%lx) size(%dx%d) coord(%d,%d)",
1333 evt->u.expose.window,
1334 evt->u.expose.width,
1335 evt->u.expose.height,
1339 if (detail_level >= EVLOG_PRINT_DETAIL)
1341 REPLY (" count(%d)",
1342 evt->u.expose.count);
1348 case GraphicsExpose:
1350 REPLY (": XID(0x%lx) size(%dx%d) coord(%d,%d)",
1351 evt->u.graphicsExposure.drawable,
1352 evt->u.graphicsExposure.width,
1353 evt->u.graphicsExposure.height,
1354 evt->u.graphicsExposure.x,
1355 evt->u.graphicsExposure.y);
1357 if (detail_level >= EVLOG_PRINT_DETAIL)
1362 switch (evt->u.graphicsExposure.majorEvent)
1364 case X_CopyArea: major = "CopyArea"; break;
1365 case X_CopyPlane: major = "CopyPlane"; break;
1366 default: major = dmajor; snprintf (dmajor, 10, "%d", evt->u.graphicsExposure.majorEvent); break;
1369 REPLY (" major_event(%s) minor_event(%d) count(%d)",
1371 evt->u.graphicsExposure.minorEvent,
1372 evt->u.graphicsExposure.count);
1380 REPLY (": XID(0x%lx)",
1381 evt->u.noExposure.drawable);
1383 if (detail_level >= EVLOG_PRINT_DETAIL)
1388 switch (evt->u.noExposure.majorEvent)
1390 case X_CopyArea: major = "CopyArea"; break;
1391 case X_CopyPlane: major = "CopyPlane"; break;
1392 default: major = dmajor; snprintf (dmajor, 10, "%d", evt->u.noExposure.majorEvent); break;
1395 REPLY (" major_event(%s) minor_event(%d)",
1397 evt->u.noExposure.minorEvent);
1403 case VisibilityNotify:
1405 REPLY (": XID(0x%lx)",
1406 evt->u.visibility.window);
1408 if (detail_level >= EVLOG_PRINT_DETAIL)
1413 switch (evt->u.visibility.state)
1415 case VisibilityUnobscured: state = "VisibilityUnobscured"; break;
1416 case VisibilityPartiallyObscured: state = "VisibilityPartiallyObscured"; break;
1417 case VisibilityFullyObscured: state = "VisibilityFullyObscured"; break;
1418 default: state = dstate; snprintf (dstate, 10, "%d", evt->u.visibility.state); break;
1421 REPLY (" state(%s)",
1430 REPLY (": Window(0x%lx) Parent(0x%lx) size(%dx%d) coord(%d,%d) borderWidth(%d)",
1431 evt->u.createNotify.window,
1432 evt->u.createNotify.parent,
1433 evt->u.createNotify.width,
1434 evt->u.createNotify.height,
1435 evt->u.createNotify.x,
1436 evt->u.createNotify.y,
1437 evt->u.createNotify.borderWidth);
1439 if (detail_level >= EVLOG_PRINT_DETAIL)
1441 REPLY (" override(%s)",
1442 evt->u.createNotify.override ? "YES" : "NO");
1450 REPLY (": Window(0x%lx) Event(0x%lx)",
1451 evt->u.destroyNotify.window,
1452 evt->u.destroyNotify.event);
1459 REPLY (": Window(0x%lx) Event(0x%lx)",
1460 evt->u.unmapNotify.window,
1461 evt->u.unmapNotify.event);
1463 if (detail_level >= EVLOG_PRINT_DETAIL)
1465 REPLY (" from_Configure(%s)",
1466 evt->u.unmapNotify.fromConfigure ? "YES" : "NO");
1474 REPLY (": Window(0x%lx) Event(0x%lx)",
1475 evt->u.mapNotify.window,
1476 evt->u.mapNotify.event);
1478 if (detail_level >= EVLOG_PRINT_DETAIL)
1480 REPLY (" override(%s)",
1481 evt->u.mapNotify.override ? "YES" : "NO");
1489 REPLY (": Window(0x%lx) Parent(0x%lx)",
1490 evt->u.mapRequest.window,
1491 evt->u.mapRequest.parent);
1496 case ReparentNotify:
1498 REPLY (": Window(0x%lx) Event(0x%lx) Parent(0x%lx) coord(%d,%d)",
1499 evt->u.reparent.window,
1500 evt->u.reparent.event,
1501 evt->u.reparent.parent,
1505 if (detail_level >= EVLOG_PRINT_DETAIL)
1507 REPLY (" override(%s)",
1508 evt->u.reparent.override ? "YES" : "NO");
1514 case ConfigureNotify:
1516 REPLY (": Window(0x%lx) Event(0x%lx) AboveSibling(0x%lx) size(%dx%d) coord(%d,%d) borderWidth(%d)",
1517 evt->u.configureNotify.window,
1518 evt->u.configureNotify.event,
1519 evt->u.configureNotify.aboveSibling,
1520 evt->u.configureNotify.width,
1521 evt->u.configureNotify.height,
1522 evt->u.configureNotify.x,
1523 evt->u.configureNotify.y,
1524 evt->u.configureNotify.borderWidth);
1526 if (detail_level >= EVLOG_PRINT_DETAIL)
1528 REPLY (" override(%s)",
1529 evt->u.configureNotify.override ? "YES" : "NO");
1535 case ConfigureRequest:
1537 REPLY (": Window(0x%lx) Parent(0x%lx) Sibling(0x%lx) size(%dx%d) coord(%d,%d) borderWidth(%d)",
1538 evt->u.configureRequest.window,
1539 evt->u.configureRequest.parent,
1540 evt->u.configureRequest.sibling,
1541 evt->u.configureRequest.width,
1542 evt->u.configureRequest.height,
1543 evt->u.configureRequest.x,
1544 evt->u.configureRequest.y,
1545 evt->u.configureRequest.borderWidth);
1547 if (detail_level >= EVLOG_PRINT_DETAIL)
1550 REPLY ("%67s value_mask",
1553 reply = _getConfigureWindowMask(evt->u.configureRequest.valueMask, reply, len, NULL);
1562 REPLY (": Window(0x%lx) Event(0x%lx) coord(%d,%d)",
1563 evt->u.gravity.window,
1564 evt->u.gravity.event,
1573 REPLY (": Window(0x%lx) size(%dx%d)",
1574 evt->u.resizeRequest.window,
1575 evt->u.resizeRequest.width,
1576 evt->u.resizeRequest.height);
1581 case CirculateNotify:
1582 case CirculateRequest:
1584 REPLY (": Window(0x%lx) Event(0x%lx) parent(0x%lx)",
1585 evt->u.circulate.window,
1586 evt->u.circulate.event,
1587 evt->u.circulate.parent);
1589 if (detail_level >= EVLOG_PRINT_DETAIL)
1594 switch (evt->u.circulate.place)
1596 case PlaceOnTop: place = "PlaceOnTop"; break;
1597 case PlaceOnBottom: place = "PlaceOnBottom"; break;
1598 default: place = dplace; snprintf (dplace, 10, "%d", evt->u.circulate.place); break;
1601 REPLY (" place(%s)",
1608 case PropertyNotify:
1610 REPLY (": Window(0x%lx)",
1611 evt->u.property.window);
1613 REPLY (" Property");
1614 reply = xDbgGetAtom(evt->u.property.atom, evinfo, reply, len);
1616 if (detail_level >= EVLOG_PRINT_DETAIL)
1621 switch (evt->u.property.state)
1623 case PropertyNewValue: state = "PropertyNewValue"; break;
1624 case PropertyDelete: state = "PropertyDelete"; break;
1625 default: state = dstate; snprintf (dstate, 10, "%d", evt->u.property.state); break;
1629 REPLY ("%67s time(%lums) state(%s)",
1631 evt->u.property.time,
1638 case SelectionClear:
1640 REPLY (": Window(0x%lx)",
1641 evt->u.selectionClear.window);
1644 reply = xDbgGetAtom(evt->u.selectionClear.atom, evinfo, reply, len);
1646 if (detail_level >= EVLOG_PRINT_DETAIL)
1648 REPLY (" time(%lums)",
1649 evt->u.selectionClear.time);
1655 case SelectionRequest:
1657 REPLY (": Owner(0x%lx) Requestor(0x%lx)",
1658 evt->u.selectionRequest.owner,
1659 evt->u.selectionRequest.requestor);
1661 REPLY (" selection");
1662 reply = xDbgGetAtom(evt->u.selectionRequest.selection, evinfo, reply, len);
1664 reply = xDbgGetAtom(evt->u.selectionRequest.target, evinfo, reply, len);
1665 REPLY (" Property");
1666 reply = xDbgGetAtom(evt->u.selectionRequest.property, evinfo, reply, len);
1668 if (detail_level >= EVLOG_PRINT_DETAIL)
1670 REPLY (" time(%lums)",
1671 evt->u.selectionRequest.time);
1677 case SelectionNotify:
1679 REPLY (": Requestor(0x%lx)",
1680 evt->u.selectionNotify.requestor);
1682 REPLY (" selection");
1683 reply = xDbgGetAtom(evt->u.selectionNotify.selection, evinfo, reply, len);
1685 reply = xDbgGetAtom(evt->u.selectionNotify.target, evinfo, reply, len);
1686 REPLY (" Property");
1687 reply = xDbgGetAtom(evt->u.selectionNotify.property, evinfo, reply, len);
1689 if (detail_level >= EVLOG_PRINT_DETAIL)
1691 REPLY (" time(%lums)",
1692 evt->u.selectionNotify.time);
1698 case ColormapNotify:
1700 REPLY (": XID(0x%lx) Colormap(0x%lx)",
1701 evt->u.colormap.window,
1702 evt->u.colormap.colormap);
1704 if (detail_level >= EVLOG_PRINT_DETAIL)
1709 switch (evt->u.colormap.state)
1711 case ColormapInstalled: state = "ColormapInstalled"; break;
1712 case ColormapUninstalled: state = "ColormapUninstalled"; break;
1713 default: state = dstate; snprintf (dstate, 10, "%d", evt->u.colormap.state); break;
1716 REPLY (" new(%s) state(%s)",
1717 evt->u.colormap.new ? "YES" : "NO",
1726 REPLY (": XID(0x%lx)",
1727 evt->u.clientMessage.window);
1730 reply = xDbgGetAtom(evt->u.clientMessage.u.b.type, evinfo, reply, len);
1744 char * xDbgEvlogReplyCore (EvlogInfo *evinfo, int detail_level, char *reply, int *len)
1746 xGenericReply *rep = evinfo->rep.ptr;
1748 switch (evinfo->rep.reqType)
1752 if (evinfo->rep.isStart)
1754 xGetGeometryReply *stuff = (xGetGeometryReply *)rep;
1756 REPLY (": XID(0x%lx) coord(%d,%d %dx%d) borderWidth(%d)",
1762 stuff->borderWidth);
1774 if (evinfo->rep.isStart)
1776 xQueryTreeReply *stuff = (xQueryTreeReply *)rep;
1778 REPLY (": XID(0x%lx) Parent(0x%lx) ChildrenNum(%d)",
1785 Window *stuff = (Window *)rep;
1790 for (i = 0 ; i < evinfo->rep.size / sizeof(Window) ; i++)
1792 REPLY("0x%lx", stuff[i]);
1793 if(i != evinfo->rep.size / sizeof(Window) - 1)
1804 if (evinfo->rep.isStart)
1806 xGetPropertyReply *stuff = (xGetPropertyReply *)rep;
1808 REPLY (": PropertyType");
1809 reply = xDbgGetAtom(stuff->propertyType, evinfo, reply, len);
1811 REPLY (" bytesAfter(0x%lx) format(%d) ItemNum(%ld)",
1824 case X_ListProperties:
1826 if (evinfo->rep.isStart)
1828 xListPropertiesReply *stuff = (xListPropertiesReply *)rep;
1830 REPLY (" PropertieNum(%d)",
1831 stuff->nProperties);
1835 Atom *stuff = (Atom *)rep;
1838 REPLY ("Properties");
1840 for (i = 0 ; i < evinfo->rep.size / sizeof(Atom) ; i ++)
1842 reply = xDbgGetAtom(stuff[i], evinfo, reply, len);
1843 if(i != evinfo->rep.size / sizeof(Atom) - 1)
1854 if (evinfo->rep.isStart)
1856 xGetImageReply *stuff = (xGetImageReply *)rep;
1858 REPLY (": XID(0x%lx)",
1869 case X_GetKeyboardControl:
1871 if (evinfo->rep.isStart)
1873 xGetKeyboardControlReply *stuff = (xGetKeyboardControlReply *)rep;
1875 REPLY (": keyClickPercent(%d) bellPercent(%d), bellPitch(%d) bellDuration(%d)",
1876 stuff->keyClickPercent,
1879 stuff->bellDuration);
1889 case X_GetPointerControl:
1891 if (evinfo->rep.isStart)
1893 xGetPointerControlReply *stuff = (xGetPointerControlReply *)rep;
1895 REPLY (": accelNumerator(%d) accelDenominator(%d), threshold(%d)",
1896 stuff->accelNumerator,
1897 stuff->accelDenominator,