i3
|
00001 /* 00002 * vim:ts=8:expandtab 00003 * 00004 * i3 - an improved dynamic tiling window manager 00005 * 00006 * © 2009-2010 Michael Stapelberg and contributors 00007 * 00008 * See file LICENSE for license information. 00009 * 00010 * debug.c: Contains debugging functions, especially FormatEvent, which prints unhandled events. 00011 * This code is from xcb-util. 00012 * 00013 */ 00014 #include <stdio.h> 00015 #include <xcb/xcb.h> 00016 00017 #include "log.h" 00018 00019 static const char *labelError[] = { 00020 "Success", 00021 "BadRequest", 00022 "BadValue", 00023 "BadWindow", 00024 "BadPixmap", 00025 "BadAtom", 00026 "BadCursor", 00027 "BadFont", 00028 "BadMatch", 00029 "BadDrawable", 00030 "BadAccess", 00031 "BadAlloc", 00032 "BadColor", 00033 "BadGC", 00034 "BadIDChoice", 00035 "BadName", 00036 "BadLength", 00037 "BadImplementation", 00038 }; 00039 00040 static const char *labelRequest[] = { 00041 "no request", 00042 "CreateWindow", 00043 "ChangeWindowAttributes", 00044 "GetWindowAttributes", 00045 "DestroyWindow", 00046 "DestroySubwindows", 00047 "ChangeSaveSet", 00048 "ReparentWindow", 00049 "MapWindow", 00050 "MapSubwindows", 00051 "UnmapWindow", 00052 "UnmapSubwindows", 00053 "ConfigureWindow", 00054 "CirculateWindow", 00055 "GetGeometry", 00056 "QueryTree", 00057 "InternAtom", 00058 "GetAtomName", 00059 "ChangeProperty", 00060 "DeleteProperty", 00061 "GetProperty", 00062 "ListProperties", 00063 "SetSelectionOwner", 00064 "GetSelectionOwner", 00065 "ConvertSelection", 00066 "SendEvent", 00067 "GrabPointer", 00068 "UngrabPointer", 00069 "GrabButton", 00070 "UngrabButton", 00071 "ChangeActivePointerGrab", 00072 "GrabKeyboard", 00073 "UngrabKeyboard", 00074 "GrabKey", 00075 "UngrabKey", 00076 "AllowEvents", 00077 "GrabServer", 00078 "UngrabServer", 00079 "QueryPointer", 00080 "GetMotionEvents", 00081 "TranslateCoords", 00082 "WarpPointer", 00083 "SetInputFocus", 00084 "GetInputFocus", 00085 "QueryKeymap", 00086 "OpenFont", 00087 "CloseFont", 00088 "QueryFont", 00089 "QueryTextExtents", 00090 "ListFonts", 00091 "ListFontsWithInfo", 00092 "SetFontPath", 00093 "GetFontPath", 00094 "CreatePixmap", 00095 "FreePixmap", 00096 "CreateGC", 00097 "ChangeGC", 00098 "CopyGC", 00099 "SetDashes", 00100 "SetClipRectangles", 00101 "FreeGC", 00102 "ClearArea", 00103 "CopyArea", 00104 "CopyPlane", 00105 "PolyPoint", 00106 "PolyLine", 00107 "PolySegment", 00108 "PolyRectangle", 00109 "PolyArc", 00110 "FillPoly", 00111 "PolyFillRectangle", 00112 "PolyFillArc", 00113 "PutImage", 00114 "GetImage", 00115 "PolyText", 00116 "PolyText", 00117 "ImageText", 00118 "ImageText", 00119 "CreateColormap", 00120 "FreeColormap", 00121 "CopyColormapAndFree", 00122 "InstallColormap", 00123 "UninstallColormap", 00124 "ListInstalledColormaps", 00125 "AllocColor", 00126 "AllocNamedColor", 00127 "AllocColorCells", 00128 "AllocColorPlanes", 00129 "FreeColors", 00130 "StoreColors", 00131 "StoreNamedColor", 00132 "QueryColors", 00133 "LookupColor", 00134 "CreateCursor", 00135 "CreateGlyphCursor", 00136 "FreeCursor", 00137 "RecolorCursor", 00138 "QueryBestSize", 00139 "QueryExtension", 00140 "ListExtensions", 00141 "ChangeKeyboardMapping", 00142 "GetKeyboardMapping", 00143 "ChangeKeyboardControl", 00144 "GetKeyboardControl", 00145 "Bell", 00146 "ChangePointerControl", 00147 "GetPointerControl", 00148 "SetScreenSaver", 00149 "GetScreenSaver", 00150 "ChangeHosts", 00151 "ListHosts", 00152 "SetAccessControl", 00153 "SetCloseDownMode", 00154 "KillClient", 00155 "RotateProperties", 00156 "ForceScreenSaver", 00157 "SetPointerMapping", 00158 "GetPointerMapping", 00159 "SetModifierMapping", 00160 "GetModifierMapping", 00161 "major 120", 00162 "major 121", 00163 "major 122", 00164 "major 123", 00165 "major 124", 00166 "major 125", 00167 "major 126", 00168 "NoOperation", 00169 }; 00170 00171 static const char *labelEvent[] = { 00172 "error", 00173 "reply", 00174 "KeyPress", 00175 "KeyRelease", 00176 "ButtonPress", 00177 "ButtonRelease", 00178 "MotionNotify", 00179 "EnterNotify", 00180 "LeaveNotify", 00181 "FocusIn", 00182 "FocusOut", 00183 "KeymapNotify", 00184 "Expose", 00185 "GraphicsExpose", 00186 "NoExpose", 00187 "VisibilityNotify", 00188 "CreateNotify", 00189 "DestroyNotify", 00190 "UnmapNotify", 00191 "MapNotify", 00192 "MapRequest", 00193 "ReparentNotify", 00194 "ConfigureNotify", 00195 "ConfigureRequest", 00196 "GravityNotify", 00197 "ResizeRequest", 00198 "CirculateNotify", 00199 "CirculateRequest", 00200 "PropertyNotify", 00201 "SelectionClear", 00202 "SelectionRequest", 00203 "SelectionNotify", 00204 "ColormapNotify", 00205 "ClientMessage", 00206 "MappingNotify", 00207 }; 00208 00209 static const char *labelSendEvent[] = { 00210 "", 00211 " (from SendEvent)", 00212 }; 00213 00214 int format_event(xcb_generic_event_t *e) { 00215 uint8_t sendEvent; 00216 uint16_t seqnum; 00217 00218 sendEvent = (e->response_type & 0x80) ? 1 : 0; 00219 e->response_type &= ~0x80; 00220 seqnum = *((uint16_t *) e + 1); 00221 00222 switch(e->response_type) { 00223 case 0: 00224 DLOG("Error %s on seqnum %d (%s).\n", 00225 labelError[*((uint8_t *) e + 1)], 00226 seqnum, 00227 labelRequest[*((uint8_t *) e + 10)]); 00228 break; 00229 default: 00230 if (e->response_type > sizeof(labelEvent) / sizeof(char*)) 00231 break; 00232 DLOG("Event %s following seqnum %d%s.\n", 00233 labelEvent[e->response_type], 00234 seqnum, 00235 labelSendEvent[sendEvent]); 00236 break; 00237 case XCB_KEYMAP_NOTIFY: 00238 DLOG("Event %s%s.\n", 00239 labelEvent[e->response_type], 00240 labelSendEvent[sendEvent]); 00241 break; 00242 } 00243 00244 fflush(stdout); 00245 return 1; 00246 }