28#include "kxerrorhandler.h"
34int KXErrorHandler::pos = 0;
35int KXErrorHandler::size = 0;
38 : user_handler1( NULL ),
39 user_handler2( NULL ),
40 old_handler( XSetErrorHandler( handler_wrapper )),
41 first_request( XNextRequest( dpy )),
49 : user_handler1( handler ),
50 user_handler2( NULL ),
51 old_handler( XSetErrorHandler( handler_wrapper )),
52 first_request( XNextRequest( dpy )),
60 : user_handler1( NULL ),
61 user_handler2( handler ),
62 old_handler( XSetErrorHandler( handler_wrapper )),
63 first_request( XNextRequest( dpy )),
70KXErrorHandler::~KXErrorHandler()
72 XSetErrorHandler( old_handler );
73 assert(
this == handlers[ pos - 1 ] );
77void KXErrorHandler::addHandler()
84 handlers[ pos++ ] =
this;
90 XSync( display, False );
94int KXErrorHandler::handler_wrapper( Display* dpy, XErrorEvent* e )
97 int ret = handlers[ pos ]->handle( dpy, e );
102int KXErrorHandler::handle( Display* dpy, XErrorEvent* e )
109 if( user_handler1 != NULL && user_handler1( e->request_code, e->error_code, e->resourceid ))
111 if( user_handler2 != NULL && user_handler2( dpy, e ) != 0 )
118 return old_handler( dpy, e );
This class simplifies handling of X errors.
KXErrorHandler(Display *dpy=tqt_xdisplay())
Creates error handler that will set error flag after encountering any X error.
bool error(bool sync) const
This function returns true if the error flag is set (i.e.
static int timestampCompare(unsigned long time1, unsigned long time2)
Compares two X timestamps, taking into account wrapping and 64bit architectures.