]> git.sur5r.net Git - i3/i3/blob - src/debug.c
Merge branch 'fix-fullscreen-confreq'
[i3/i3] / src / debug.c
1 /*
2  * vim:ts=4:sw=4:expandtab
3  *
4  * i3 - an improved dynamic tiling window manager
5  * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE)
6  *
7  * debug.c: Debugging functions, especially FormatEvent, which prints unhandled
8  *          events.  This code is from xcb-util.
9  *
10  */
11 #include <stdio.h>
12 #include <xcb/xcb.h>
13
14 #include "log.h"
15
16 static const char *labelError[] = {
17     "Success",
18     "BadRequest",
19     "BadValue",
20     "BadWindow",
21     "BadPixmap",
22     "BadAtom",
23     "BadCursor",
24     "BadFont",
25     "BadMatch",
26     "BadDrawable",
27     "BadAccess",
28     "BadAlloc",
29     "BadColor",
30     "BadGC",
31     "BadIDChoice",
32     "BadName",
33     "BadLength",
34     "BadImplementation",
35 };
36
37 static const char *labelRequest[] = {
38     "no request",
39     "CreateWindow",
40     "ChangeWindowAttributes",
41     "GetWindowAttributes",
42     "DestroyWindow",
43     "DestroySubwindows",
44     "ChangeSaveSet",
45     "ReparentWindow",
46     "MapWindow",
47     "MapSubwindows",
48     "UnmapWindow",
49     "UnmapSubwindows",
50     "ConfigureWindow",
51     "CirculateWindow",
52     "GetGeometry",
53     "QueryTree",
54     "InternAtom",
55     "GetAtomName",
56     "ChangeProperty",
57     "DeleteProperty",
58     "GetProperty",
59     "ListProperties",
60     "SetSelectionOwner",
61     "GetSelectionOwner",
62     "ConvertSelection",
63     "SendEvent",
64     "GrabPointer",
65     "UngrabPointer",
66     "GrabButton",
67     "UngrabButton",
68     "ChangeActivePointerGrab",
69     "GrabKeyboard",
70     "UngrabKeyboard",
71     "GrabKey",
72     "UngrabKey",
73     "AllowEvents",
74     "GrabServer",
75     "UngrabServer",
76     "QueryPointer",
77     "GetMotionEvents",
78     "TranslateCoords",
79     "WarpPointer",
80     "SetInputFocus",
81     "GetInputFocus",
82     "QueryKeymap",
83     "OpenFont",
84     "CloseFont",
85     "QueryFont",
86     "QueryTextExtents",
87     "ListFonts",
88     "ListFontsWithInfo",
89     "SetFontPath",
90     "GetFontPath",
91     "CreatePixmap",
92     "FreePixmap",
93     "CreateGC",
94     "ChangeGC",
95     "CopyGC",
96     "SetDashes",
97     "SetClipRectangles",
98     "FreeGC",
99     "ClearArea",
100     "CopyArea",
101     "CopyPlane",
102     "PolyPoint",
103     "PolyLine",
104     "PolySegment",
105     "PolyRectangle",
106     "PolyArc",
107     "FillPoly",
108     "PolyFillRectangle",
109     "PolyFillArc",
110     "PutImage",
111     "GetImage",
112     "PolyText",
113     "PolyText",
114     "ImageText",
115     "ImageText",
116     "CreateColormap",
117     "FreeColormap",
118     "CopyColormapAndFree",
119     "InstallColormap",
120     "UninstallColormap",
121     "ListInstalledColormaps",
122     "AllocColor",
123     "AllocNamedColor",
124     "AllocColorCells",
125     "AllocColorPlanes",
126     "FreeColors",
127     "StoreColors",
128     "StoreNamedColor",
129     "QueryColors",
130     "LookupColor",
131     "CreateCursor",
132     "CreateGlyphCursor",
133     "FreeCursor",
134     "RecolorCursor",
135     "QueryBestSize",
136     "QueryExtension",
137     "ListExtensions",
138     "ChangeKeyboardMapping",
139     "GetKeyboardMapping",
140     "ChangeKeyboardControl",
141     "GetKeyboardControl",
142     "Bell",
143     "ChangePointerControl",
144     "GetPointerControl",
145     "SetScreenSaver",
146     "GetScreenSaver",
147     "ChangeHosts",
148     "ListHosts",
149     "SetAccessControl",
150     "SetCloseDownMode",
151     "KillClient",
152     "RotateProperties",
153     "ForceScreenSaver",
154     "SetPointerMapping",
155     "GetPointerMapping",
156     "SetModifierMapping",
157     "GetModifierMapping",
158     "major 120",
159     "major 121",
160     "major 122",
161     "major 123",
162     "major 124",
163     "major 125",
164     "major 126",
165     "NoOperation",
166 };
167
168 static const char *labelEvent[] = {
169     "error",
170     "reply",
171     "KeyPress",
172     "KeyRelease",
173     "ButtonPress",
174     "ButtonRelease",
175     "MotionNotify",
176     "EnterNotify",
177     "LeaveNotify",
178     "FocusIn",
179     "FocusOut",
180     "KeymapNotify",
181     "Expose",
182     "GraphicsExpose",
183     "NoExpose",
184     "VisibilityNotify",
185     "CreateNotify",
186     "DestroyNotify",
187     "UnmapNotify",
188     "MapNotify",
189     "MapRequest",
190     "ReparentNotify",
191     "ConfigureNotify",
192     "ConfigureRequest",
193     "GravityNotify",
194     "ResizeRequest",
195     "CirculateNotify",
196     "CirculateRequest",
197     "PropertyNotify",
198     "SelectionClear",
199     "SelectionRequest",
200     "SelectionNotify",
201     "ColormapNotify",
202     "ClientMessage",
203     "MappingNotify",
204 };
205
206 static const char *labelSendEvent[] = {
207     "",
208     " (from SendEvent)",
209 };
210
211 int format_event(xcb_generic_event_t *e) {
212     uint8_t sendEvent;
213     uint16_t seqnum;
214
215     sendEvent = (e->response_type & 0x80) ? 1 : 0;
216     e->response_type &= ~0x80;
217     seqnum = *((uint16_t *) e + 1);
218
219     switch(e->response_type) {
220     case 0:
221         DLOG("Error %s on seqnum %d (%s).\n",
222             labelError[*((uint8_t *) e + 1)],
223             seqnum,
224             labelRequest[*((uint8_t *) e + 10)]);
225         break;
226     default:
227         if (e->response_type > sizeof(labelEvent) / sizeof(char*))
228                 break;
229         DLOG("Event %s following seqnum %d%s.\n",
230             labelEvent[e->response_type],
231             seqnum,
232             labelSendEvent[sendEvent]);
233         break;
234     case XCB_KEYMAP_NOTIFY:
235         DLOG("Event %s%s.\n",
236             labelEvent[e->response_type],
237             labelSendEvent[sendEvent]);
238         break;
239     }
240
241     fflush(stdout);
242     return 1;
243 }