XIfEvent, XCheckIfEvent, XPeekIfEvent − check the event queue with a predicate procedure


int XIfEvent(Display *display, XEvent *event_return, Bool (*predicate)(), XPointer arg);

Bool XCheckIfEvent(Display *display, XEvent *event_return, Bool (*predicate)(), XPointer arg);

int XPeekIfEvent(Display *display, XEvent *event_return, Bool (*predicate)(), XPointer arg);



Specifies the user-supplied argument that will be passed to the predicate procedure.


Specifies the connection to the X server.


Returns either a copy of or the matched event’s associated structure.


Specifies the procedure that is to be called to determine if the next event in the queue matches what you want.


The XIfEvent function completes only when the specified predicate procedure returns True for an event, which indicates an event in the queue matches. XIfEvent flushes the output buffer if it blocks waiting for additional events. XIfEvent removes the matching event from the queue and copies the structure into the client-supplied XEvent structure.

When the predicate procedure finds a match, XCheckIfEvent copies the matched event into the client-supplied XEvent structure and returns True. (This event is removed from the queue.) If the predicate procedure finds no match, XCheckIfEvent returns False, and the output buffer will have been flushed. All earlier events stored in the queue are not discarded.

The XPeekIfEvent function returns only when the specified predicate procedure returns True for an event. After the predicate procedure finds a match, XPeekIfEvent copies the matched event into the client-supplied XEvent structure without removing the event from the queue. XPeekIfEvent flushes the output buffer if it blocks waiting for additional events.

Each of these functions requires you to pass a predicate procedure that determines if an event matches what you want. Your predicate procedure must decide if the event is useful without calling any Xlib functions. If the predicate directly or indirectly causes the state of the event queue to change, the result is not defined. If Xlib has been initialized for threads, the predicate is called with the display locked and the result of a call by the predicate to any Xlib function that locks the display is not defined unless the caller has first called XLockDisplay.

The predicate procedure and its associated arguments are:

Bool (*predicate)(Display *display, XEvent *event, XPointer arg)


Specifies the connection to the X server.


Specifies the XEvent structure.


Specifies the argument passed in from the XIfEvent, XCheckIfEvent, or XPeekIfEvent function.

The predicate procedure is called once for each event in the queue until it finds a match. After finding a match, the predicate procedure must return True. If it did not find a match, it must return False.


XAnyEvent(3), XNextEvent(3), XPutBackEvent(3) XSendEvent(3)
Xlib − C Language X Interface

More Linux Commands

XML::DOM::ElementDecl(3pm) - An XML ELEMENT declaration in X
XML::DOM::ElementDecl extends XML::DOM::Node but is not part of the DOM Level 1 specification. This node represents an Element declaration, e.g. <!ELEMENT addre

XShmQueryExtension(3) - X Shared Memory extension functions
XShmQueryExtension checks to see if the shared memory extensions are available for the specified display. XShmQueryVersion returns the version numbers of the ex

vitmp(1) - edit temporary files (Commands - Linux man page)
vitmp is a wrapper around the VIM editor which may be used to invoke the editor in a way that is guaranteed to be suitable for editing temporary files used with

IO::Seekable(3pm) - supply seek based methods for I/O object
IO::Seekable does not have a constructor of its own as it is intended to be inherited by other IO::Handle based objects. It provides methods which allow seeking

jrand48(3) - generate uniformly distributed pseudo-random nu
These functions generate pseudo-random numbers using the linear congruential algorithm and 48-bit integer arithmetic. The drand48() and erand48() functions retu

rev(1) - reverse lines of a file or files - Linux man page
The rev utility copies the specified files to standard output, reversing the order of characters in every line. If no files are specified, standard input is rea

sane-hp3500(5) - SANE backend for Hewlett-Packard ScanJet 35
The sane-hp3500 library implements a SANE (Scanner Access Now Easy) backend that provides access to the following Hewlett-Packard USB flatbed scanners: ScanJet

xmodmap(1) - utility for modifying keymaps and pointer butto
The xmodmap program is used to edit and display the keyboard modifier map and keymap table that are used by client applications to convert event keycodes into k

gnutls_pkcs12_bag_decrypt(3) - API function - Linux man page
This function will decrypt the given encrypted bag and return 0 on success. RETURNS On success, GNUTLS_E_SUCCESS (0) is returned, otherwise a negative error cod

Thread(3pm) - Manipulate threads in Perl (for old code only)
The Thread module provides multithreading support for Perl. FUNCTIONS $thread = Thread->new(\&start_sub) $thread = Thread->new(\&start_sub, LIST ) new starts a

glOrtho(3gl) - multiply the current matrix with an orthograp
glOrtho describes a transformation that produces a parallel projection. The current matrix (see glMatrixMode) is multiplied by this matrix and the result replac

pamsumm(1) - Summarize the samples in a Netpbm image arithme
This program is part of Netpbm(1) pamsumm reads a Netpbm image (PNM or PAM) and performs a summary function over all the samples in all the rows, columns, and p

We can't live, work or learn in freedom unless the software we use is free.