Move xerror_common to x.c
Also rename it to x_print_error Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
parent
915839c3d3
commit
ff27ca4072
108
src/compton.c
108
src/compton.c
|
@ -2434,114 +2434,13 @@ root_damaged(session_t *ps) {
|
||||||
force_repaint(ps);
|
force_repaint(ps);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* X11 error handler function.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
xerror_common(unsigned long serial, uint8_t major, uint8_t minor, uint8_t error_code) {
|
|
||||||
session_t * const ps = ps_g;
|
|
||||||
|
|
||||||
int o = 0;
|
|
||||||
const char *name = "Unknown";
|
|
||||||
|
|
||||||
if (should_ignore(ps, serial)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (major == ps->composite_opcode
|
|
||||||
&& minor == XCB_COMPOSITE_REDIRECT_SUBWINDOWS) {
|
|
||||||
fprintf(stderr, "Another composite manager is already running "
|
|
||||||
"(and does not handle _NET_WM_CM_Sn correctly)\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define CASESTRRET2(s) case s: name = #s; break
|
|
||||||
|
|
||||||
o = error_code - ps->xfixes_error;
|
|
||||||
switch (o) {
|
|
||||||
CASESTRRET2(BadRegion);
|
|
||||||
}
|
|
||||||
|
|
||||||
o = error_code - ps->damage_error;
|
|
||||||
switch (o) {
|
|
||||||
CASESTRRET2(XCB_DAMAGE_BAD_DAMAGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
o = error_code - ps->render_error;
|
|
||||||
switch (o) {
|
|
||||||
CASESTRRET2(XCB_RENDER_PICT_FORMAT);
|
|
||||||
CASESTRRET2(XCB_RENDER_PICTURE);
|
|
||||||
CASESTRRET2(XCB_RENDER_PICT_OP);
|
|
||||||
CASESTRRET2(XCB_RENDER_GLYPH_SET);
|
|
||||||
CASESTRRET2(XCB_RENDER_GLYPH);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_OPENGL
|
|
||||||
if (ps->glx_exists) {
|
|
||||||
o = error_code - ps->glx_error;
|
|
||||||
switch (o) {
|
|
||||||
CASESTRRET2(GLX_BAD_SCREEN);
|
|
||||||
CASESTRRET2(GLX_BAD_ATTRIBUTE);
|
|
||||||
CASESTRRET2(GLX_NO_EXTENSION);
|
|
||||||
CASESTRRET2(GLX_BAD_VISUAL);
|
|
||||||
CASESTRRET2(GLX_BAD_CONTEXT);
|
|
||||||
CASESTRRET2(GLX_BAD_VALUE);
|
|
||||||
CASESTRRET2(GLX_BAD_ENUM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_XSYNC
|
|
||||||
if (ps->xsync_exists) {
|
|
||||||
o = error_code - ps->xsync_error;
|
|
||||||
switch (o) {
|
|
||||||
CASESTRRET2(XSyncBadCounter);
|
|
||||||
CASESTRRET2(XSyncBadAlarm);
|
|
||||||
CASESTRRET2(XSyncBadFence);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (error_code) {
|
|
||||||
CASESTRRET2(BadAccess);
|
|
||||||
CASESTRRET2(BadAlloc);
|
|
||||||
CASESTRRET2(BadAtom);
|
|
||||||
CASESTRRET2(BadColor);
|
|
||||||
CASESTRRET2(BadCursor);
|
|
||||||
CASESTRRET2(BadDrawable);
|
|
||||||
CASESTRRET2(BadFont);
|
|
||||||
CASESTRRET2(BadGC);
|
|
||||||
CASESTRRET2(BadIDChoice);
|
|
||||||
CASESTRRET2(BadImplementation);
|
|
||||||
CASESTRRET2(BadLength);
|
|
||||||
CASESTRRET2(BadMatch);
|
|
||||||
CASESTRRET2(BadName);
|
|
||||||
CASESTRRET2(BadPixmap);
|
|
||||||
CASESTRRET2(BadRequest);
|
|
||||||
CASESTRRET2(BadValue);
|
|
||||||
CASESTRRET2(BadWindow);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef CASESTRRET2
|
|
||||||
|
|
||||||
print_timestamp(ps);
|
|
||||||
{
|
|
||||||
char buf[BUF_LEN] = "";
|
|
||||||
XGetErrorText(ps->dpy, error_code, buf, BUF_LEN);
|
|
||||||
printf("error %4d %-12s request %4d minor %4d serial %6lu: \"%s\"\n",
|
|
||||||
error_code, name, major,
|
|
||||||
minor, serial, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
// print_backtrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Xlib error handler function.
|
* Xlib error handler function.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
xerror(Display __attribute__((unused)) *dpy, XErrorEvent *ev) {
|
xerror(Display __attribute__((unused)) *dpy, XErrorEvent *ev) {
|
||||||
xerror_common(ev->serial, ev->request_code, ev->minor_code, ev->error_code);
|
if (!should_ignore(ps_g, ev->serial))
|
||||||
|
x_print_error(ev->serial, ev->request_code, ev->minor_code, ev->error_code);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2550,7 +2449,8 @@ xerror(Display __attribute__((unused)) *dpy, XErrorEvent *ev) {
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
ev_xcb_error(session_t __attribute__((unused)) *ps, xcb_generic_error_t *err) {
|
ev_xcb_error(session_t __attribute__((unused)) *ps, xcb_generic_error_t *err) {
|
||||||
xerror_common(err->sequence, err->major_code, err->minor_code, err->error_code);
|
if (!should_ignore(ps, err->sequence))
|
||||||
|
x_print_error(err->sequence, err->major_code, err->minor_code, err->error_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
100
src/x.c
100
src/x.c
|
@ -261,3 +261,103 @@ void x_set_picture_clip_region(session_t *ps, xcb_render_picture_t pict,
|
||||||
free(xrects);
|
free(xrects);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* X11 error handler function.
|
||||||
|
*
|
||||||
|
* XXX consider making this error to string
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
x_print_error(unsigned long serial, uint8_t major, uint8_t minor, uint8_t error_code) {
|
||||||
|
session_t * const ps = ps_g;
|
||||||
|
|
||||||
|
int o = 0;
|
||||||
|
const char *name = "Unknown";
|
||||||
|
|
||||||
|
if (major == ps->composite_opcode
|
||||||
|
&& minor == XCB_COMPOSITE_REDIRECT_SUBWINDOWS) {
|
||||||
|
fprintf(stderr, "Another composite manager is already running "
|
||||||
|
"(and does not handle _NET_WM_CM_Sn correctly)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CASESTRRET2(s) case s: name = #s; break
|
||||||
|
|
||||||
|
o = error_code - ps->xfixes_error;
|
||||||
|
switch (o) {
|
||||||
|
CASESTRRET2(BadRegion);
|
||||||
|
}
|
||||||
|
|
||||||
|
o = error_code - ps->damage_error;
|
||||||
|
switch (o) {
|
||||||
|
CASESTRRET2(XCB_DAMAGE_BAD_DAMAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
o = error_code - ps->render_error;
|
||||||
|
switch (o) {
|
||||||
|
CASESTRRET2(XCB_RENDER_PICT_FORMAT);
|
||||||
|
CASESTRRET2(XCB_RENDER_PICTURE);
|
||||||
|
CASESTRRET2(XCB_RENDER_PICT_OP);
|
||||||
|
CASESTRRET2(XCB_RENDER_GLYPH_SET);
|
||||||
|
CASESTRRET2(XCB_RENDER_GLYPH);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_OPENGL
|
||||||
|
if (ps->glx_exists) {
|
||||||
|
o = error_code - ps->glx_error;
|
||||||
|
switch (o) {
|
||||||
|
CASESTRRET2(GLX_BAD_SCREEN);
|
||||||
|
CASESTRRET2(GLX_BAD_ATTRIBUTE);
|
||||||
|
CASESTRRET2(GLX_NO_EXTENSION);
|
||||||
|
CASESTRRET2(GLX_BAD_VISUAL);
|
||||||
|
CASESTRRET2(GLX_BAD_CONTEXT);
|
||||||
|
CASESTRRET2(GLX_BAD_VALUE);
|
||||||
|
CASESTRRET2(GLX_BAD_ENUM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_XSYNC
|
||||||
|
if (ps->xsync_exists) {
|
||||||
|
o = error_code - ps->xsync_error;
|
||||||
|
switch (o) {
|
||||||
|
CASESTRRET2(XSyncBadCounter);
|
||||||
|
CASESTRRET2(XSyncBadAlarm);
|
||||||
|
CASESTRRET2(XSyncBadFence);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
switch (error_code) {
|
||||||
|
CASESTRRET2(BadAccess);
|
||||||
|
CASESTRRET2(BadAlloc);
|
||||||
|
CASESTRRET2(BadAtom);
|
||||||
|
CASESTRRET2(BadColor);
|
||||||
|
CASESTRRET2(BadCursor);
|
||||||
|
CASESTRRET2(BadDrawable);
|
||||||
|
CASESTRRET2(BadFont);
|
||||||
|
CASESTRRET2(BadGC);
|
||||||
|
CASESTRRET2(BadIDChoice);
|
||||||
|
CASESTRRET2(BadImplementation);
|
||||||
|
CASESTRRET2(BadLength);
|
||||||
|
CASESTRRET2(BadMatch);
|
||||||
|
CASESTRRET2(BadName);
|
||||||
|
CASESTRRET2(BadPixmap);
|
||||||
|
CASESTRRET2(BadRequest);
|
||||||
|
CASESTRRET2(BadValue);
|
||||||
|
CASESTRRET2(BadWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef CASESTRRET2
|
||||||
|
|
||||||
|
print_timestamp(ps);
|
||||||
|
{
|
||||||
|
char buf[BUF_LEN] = "";
|
||||||
|
XGetErrorText(ps->dpy, error_code, buf, BUF_LEN);
|
||||||
|
printf("error %4d %-12s request %4d minor %4d serial %6lu: \"%s\"\n",
|
||||||
|
error_code, name, major,
|
||||||
|
minor, serial, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
// print_backtrace();
|
||||||
|
}
|
||||||
|
|
9
src/x.h
9
src/x.h
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
|
@ -76,3 +77,11 @@ bool x_fetch_region(session_t *ps, XserverRegion r, region_t *res);
|
||||||
|
|
||||||
void x_set_picture_clip_region(session_t *ps, xcb_render_picture_t,
|
void x_set_picture_clip_region(session_t *ps, xcb_render_picture_t,
|
||||||
int clip_x_origin, int clip_y_origin, const region_t *);
|
int clip_x_origin, int clip_y_origin, const region_t *);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* X11 error handler function.
|
||||||
|
*
|
||||||
|
* XXX consider making this error to string
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
x_print_error(unsigned long serial, uint8_t major, uint8_t minor, uint8_t error_code);
|
||||||
|
|
Loading…
Reference in New Issue