Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Tk_CreateErrorHandler(3)      Tk Library Procedures	Tk_CreateErrorHandler(3)

________________________________________________________________________________

NAME
     Tk_CreateErrorHandler, Tk_DeleteErrorHandler - handle X protocol errors

SYNOPSIS
     #include <tk.h>

     Tk_ErrorHandler
     Tk_CreateErrorHandler(display, error, request, minor, proc, clientData)

     Tk_DeleteErrorHandler(handler)

ARGUMENTS
     Display *display (in)		      Display  whose  errors  are  to be
					      handled.

     int error (in)			      Match only error events with  this
					      value in the error_code field.  If
					      -1,   then  match  any  error_code
					      value.

     int request (in)			      Match only error events with  this
					      value  in  the request_code field.
					      If -1, then match any request_code
					      value.

     int minor (in)			      Match only error events with  this
					      value in the minor_code field.  If
					      -1,   then  match  any  minor_code
					      value.

     Tk_ErrorProc *proc (in)		      Procedure to  invoke  whenever  an
					      error  event  is received for dis-
					      play and matches	error,	request,
					      and  minor.  NULL means ignore any
					      matching errors.

     ClientData clientData (in) 	      Arbitrary one-word value	to  pass
					      to proc.

     Tk_ErrorHandler handler (in)	      Token  for error handler to delete
					      (return value from a previous call
					      to Tk_CreateErrorHandler).
________________________________________________________________________________

DESCRIPTION
     Tk_CreateErrorHandler arranges for a  particular  procedure  (proc)  to  be
     called whenever certain protocol errors occur on a particular display (dis-
     play).  Protocol errors occur when the X protocol is used incorrectly, such
     as attempting to map a window that does not exist.  See the Xlib documenta-
     tion  for XSetErrorHandler for more information on the kinds of errors that
     can occur.  For proc to be invoked  to  handle  a	particular  error,  five
     things must occur:

     [1]    The error must pertain to display.

     [2]    Either  the  error	argument to Tk_CreateErrorHandler must have been
	    -1, or the error argument must match the error_code field  from  the
	    error event.

     [3]    Either  the request argument to Tk_CreateErrorHandler must have been
	    -1, or the request argument must match the request_code  field  from
	    the error event.

     [4]    Either  the  minor	argument to Tk_CreateErrorHandler must have been
	    -1, or the minor argument must match the minor_code field  from  the
	    error event.

     [5]    The protocol request to which the error pertains must have been made
	    when the handler was active (see below for more information).

     Proc should have arguments and result that match the following type:
	    typedef int Tk_ErrorProc(
		    ClientData clientData,
		    XErrorEvent *errEventPtr);
     The clientData parameter to proc is a copy of the clientData argument given
     to  Tcl_CreateErrorHandler  when  the  callback  was  created.   Typically,
     clientData points to a data structure containing  application-specific  in-
     formation	that is needed to deal with the error.	ErrEventPtr is a pointer
     to the X error event.  The procedure proc should return an  integer  value.
     If  it  returns 0 it means that proc handled the error completely and there
     is no need to take any other action for the error.  If it returns	non-zero
     it means proc was unable to handle the error.

     If  a  value of NULL is specified for proc, all matching errors will be ig-
     nored:  this will produce the same result as if a procedure had been speci-
     fied that always returns 0.

     If more than more than one handler matches a particular  error,  then  they
     are invoked in turn.  The handlers will be invoked in reverse order of cre-
     ation:   most  recently  declared handler first.  If any handler returns 0,
     then subsequent (older) handlers will not be invoked.  If	no  handler  re-
     turns  0,	then Tk invokes X's default error handler, which prints an error
     message and aborts the program.  If you wish to have a default handler that
     deals with errors that no other handler can  deal	with,  then  declare  it
     first.

     The  X  documentation  states  that  "the error handler should not call any
     functions (directly or indirectly) on the display that will generate proto-
     col requests or that will look for input events."	This restriction applies
     to handlers declared by Tk_CreateErrorHandler; disobey it at your own risk.

     Tk_DeleteErrorHandler may be called to delete  a  previously-created  error
     handler.	The handler argument identifies the error handler, and should be
     a value returned by a previous call to Tk_CreateEventHandler.

     A particular error handler applies to errors resulting  from  protocol  re-
     quests  generated between the call to Tk_CreateErrorHandler and the call to
     Tk_DeleteErrorHandler.  However, the actual callback to proc may not  occur
     until  after the Tk_DeleteErrorHandler call, due to buffering in the client
     and server.  If an error event pertains to a protocol request made just be-
     fore calling Tk_DeleteErrorHandler, then the error event may not have  been
     processed	before	the  Tk_DeleteErrorHandler  call.   When  this situation
     arises, Tk will save information about the handler and invoke the handler's
     proc later when the error event finally arrives.  If an application  wishes
     to  delete  an  error handler and know for certain that all relevant errors
     have been processed, it should first call	Tk_DeleteErrorHandler  and  then
     call XSync;  this will flush out any buffered requests and errors, but will
     result  in  a  performance penalty because it requires communication to and
     from the X server.  After the XSync call Tk is guaranteed not to  call  any
     error handlers deleted before the XSync call.

     For  the Tk error handling mechanism to work properly, it is essential that
     application code never calls XSetErrorHandler directly; applications should
     use only Tk_CreateErrorHandler.

KEYWORDS
     callback, error, event, handler

Tk							Tk_CreateErrorHandler(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=Tk_CreateErrorHandler.tk86&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help