CH11.xml revision e9fcaa8a
1e9fcaa8aSmrg<?xml version="1.0" encoding="UTF-8" ?> 2e9fcaa8aSmrg<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" 3e9fcaa8aSmrg "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> 4e9fcaa8aSmrg<chapter id="event_handling_functions"> 5e9fcaa8aSmrg<title>Event Handling Functions</title> 6e9fcaa8aSmrg 7e9fcaa8aSmrg<para> 8e9fcaa8aSmrgThis chapter discusses the Xlib functions you can use to: 9e9fcaa8aSmrg</para> 10e9fcaa8aSmrg<itemizedlist> 11e9fcaa8aSmrg <listitem><para>Select events</para></listitem> 12e9fcaa8aSmrg <listitem><para>Handle the output buffer and the event queue</para></listitem> 13e9fcaa8aSmrg <listitem><para>Select events from the event queue</para></listitem> 14e9fcaa8aSmrg <listitem><para>Send and get events</para></listitem> 15e9fcaa8aSmrg <listitem><para>Handle protocol errors</para></listitem> 16e9fcaa8aSmrg</itemizedlist> 17e9fcaa8aSmrg<note><para> 18e9fcaa8aSmrgSome toolkits use their own event-handling functions and do not allow you to 19e9fcaa8aSmrginterchange these event-handling functions with those in Xlib. For further 20e9fcaa8aSmrginformation, see the documentation supplied with the toolkit. 21e9fcaa8aSmrg</para></note> 22e9fcaa8aSmrg 23e9fcaa8aSmrg<para> 24e9fcaa8aSmrgMost applications simply are event loops: they wait for an event, decide what to do with it, 25e9fcaa8aSmrgexecute some amount of code that results in changes to the display, and then wait for the next 26e9fcaa8aSmrgevent. 27e9fcaa8aSmrg</para> 28e9fcaa8aSmrg 29e9fcaa8aSmrg<sect1 id="Selecting_Events"> 30e9fcaa8aSmrg<title>Selecting Events</title> 31e9fcaa8aSmrg<!-- .XS --> 32e9fcaa8aSmrg<!-- (SN Selecting Events --> 33e9fcaa8aSmrg<!-- .XE --> 34e9fcaa8aSmrg<para> 35e9fcaa8aSmrg<!-- .LP --> 36e9fcaa8aSmrgThere are two ways to select the events you want reported to your client 37e9fcaa8aSmrgapplication. 38e9fcaa8aSmrgOne way is to set the event_mask member of the 39e9fcaa8aSmrg<structname>XSetWindowAttributes</structname> 40e9fcaa8aSmrgstructure when you call 41e9fcaa8aSmrg<function>XCreateWindow</function> 42e9fcaa8aSmrgand 43e9fcaa8aSmrg<function>XChangeWindowAttributes</function>. 44e9fcaa8aSmrgAnother way is to use 45e9fcaa8aSmrg<function>XSelectInput</function>. 46e9fcaa8aSmrg<indexterm significance="preferred"><primary>XSelectInput</primary></indexterm> 47e9fcaa8aSmrg<!-- .sM --> 48e9fcaa8aSmrg<funcsynopsis> 49e9fcaa8aSmrg<funcprototype> 50e9fcaa8aSmrg <funcdef><function>XSelectInput</function></funcdef> 51e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 52e9fcaa8aSmrg <paramdef>Window<parameter> w</parameter></paramdef> 53e9fcaa8aSmrg <paramdef>long<parameter> event_mask</parameter></paramdef> 54e9fcaa8aSmrg</funcprototype> 55e9fcaa8aSmrg</funcsynopsis> 56e9fcaa8aSmrg<!-- .FN --> 57e9fcaa8aSmrg<variablelist> 58e9fcaa8aSmrg <varlistentry> 59e9fcaa8aSmrg <term> 60e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 61e9fcaa8aSmrg </term> 62e9fcaa8aSmrg <listitem> 63e9fcaa8aSmrg <para> 64e9fcaa8aSmrgSpecifies the connection to the X server. 65e9fcaa8aSmrg<!-- .ds Wi whose events you are interested in --> 66e9fcaa8aSmrg </para> 67e9fcaa8aSmrg </listitem> 68e9fcaa8aSmrg </varlistentry> 69e9fcaa8aSmrg <varlistentry> 70e9fcaa8aSmrg <term> 71e9fcaa8aSmrg <emphasis remap='I'>w</emphasis> 72e9fcaa8aSmrg </term> 73e9fcaa8aSmrg <listitem> 74e9fcaa8aSmrg <para> 75e9fcaa8aSmrgSpecifies the window (Wi. 76e9fcaa8aSmrg </para> 77e9fcaa8aSmrg </listitem> 78e9fcaa8aSmrg </varlistentry> 79e9fcaa8aSmrg <varlistentry> 80e9fcaa8aSmrg <term> 81e9fcaa8aSmrg <emphasis remap='I'>event_mask</emphasis> 82e9fcaa8aSmrg </term> 83e9fcaa8aSmrg <listitem> 84e9fcaa8aSmrg <para> 85e9fcaa8aSmrgSpecifies the event mask. 86e9fcaa8aSmrg </para> 87e9fcaa8aSmrg </listitem> 88e9fcaa8aSmrg </varlistentry> 89e9fcaa8aSmrg</variablelist> 90e9fcaa8aSmrg</para> 91e9fcaa8aSmrg<para> 92e9fcaa8aSmrg<!-- .LP --> 93e9fcaa8aSmrg<!-- .eM --> 94e9fcaa8aSmrgThe 95e9fcaa8aSmrg<function>XSelectInput</function> 96e9fcaa8aSmrgfunction requests that the X server report the events associated with the 97e9fcaa8aSmrgspecified event mask. 98e9fcaa8aSmrgInitially, X will not report any of these events. 99e9fcaa8aSmrgEvents are reported relative to a window. 100e9fcaa8aSmrgIf a window is not interested in a device event, it usually propagates to 101e9fcaa8aSmrgthe closest ancestor that is interested, 102e9fcaa8aSmrgunless the do_not_propagate mask prohibits it. 103e9fcaa8aSmrg<indexterm><primary>Event</primary><secondary>propagation</secondary></indexterm> 104e9fcaa8aSmrg</para> 105e9fcaa8aSmrg<para> 106e9fcaa8aSmrg<!-- .LP --> 107e9fcaa8aSmrgSetting the event-mask attribute of a window overrides any previous call 108e9fcaa8aSmrgfor the same window but not for other clients. 109e9fcaa8aSmrgMultiple clients can select for the same events on the same window 110e9fcaa8aSmrgwith the following restrictions: 111e9fcaa8aSmrg</para> 112e9fcaa8aSmrg<itemizedlist> 113e9fcaa8aSmrg <listitem> 114e9fcaa8aSmrg <para> 115e9fcaa8aSmrgMultiple clients can select events on the same window because their event masks 116e9fcaa8aSmrgare disjoint. 117e9fcaa8aSmrgWhen the X server generates an event, it reports it 118e9fcaa8aSmrgto all interested clients. 119e9fcaa8aSmrg </para> 120e9fcaa8aSmrg </listitem> 121e9fcaa8aSmrg <listitem> 122e9fcaa8aSmrg <para> 123e9fcaa8aSmrgOnly one client at a time can select 124e9fcaa8aSmrg<symbol>CirculateRequest</symbol>, 125e9fcaa8aSmrg<symbol>ConfigureRequest</symbol>, 126e9fcaa8aSmrgor 127e9fcaa8aSmrg<symbol>MapRequest</symbol> 128e9fcaa8aSmrgevents, which are associated with 129e9fcaa8aSmrgthe event mask 130e9fcaa8aSmrg<symbol>SubstructureRedirectMask</symbol>. 131e9fcaa8aSmrg </para> 132e9fcaa8aSmrg </listitem> 133e9fcaa8aSmrg <listitem> 134e9fcaa8aSmrg <para> 135e9fcaa8aSmrgOnly one client at a time can select 136e9fcaa8aSmrga 137e9fcaa8aSmrg<symbol>ResizeRequest</symbol> 138e9fcaa8aSmrgevent, which is associated with 139e9fcaa8aSmrgthe event mask 140e9fcaa8aSmrg<symbol>ResizeRedirectMask</symbol>. 141e9fcaa8aSmrg </para> 142e9fcaa8aSmrg </listitem> 143e9fcaa8aSmrg <listitem> 144e9fcaa8aSmrg <para> 145e9fcaa8aSmrgOnly one client at a time can select a 146e9fcaa8aSmrg<symbol>ButtonPress</symbol> 147e9fcaa8aSmrgevent, which is associated with 148e9fcaa8aSmrgthe event mask 149e9fcaa8aSmrg<symbol>ButtonPressMask</symbol>. 150e9fcaa8aSmrg </para> 151e9fcaa8aSmrg </listitem> 152e9fcaa8aSmrg</itemizedlist> 153e9fcaa8aSmrg<para> 154e9fcaa8aSmrg<!-- .LP --> 155e9fcaa8aSmrgThe server reports the event to all interested clients. 156e9fcaa8aSmrg</para> 157e9fcaa8aSmrg<para> 158e9fcaa8aSmrg<!-- .LP --> 159e9fcaa8aSmrg<function>XSelectInput</function> 160e9fcaa8aSmrgcan generate a 161e9fcaa8aSmrg<errorname>BadWindow</errorname> 162e9fcaa8aSmrgerror. 163e9fcaa8aSmrg</para> 164e9fcaa8aSmrg</sect1> 165e9fcaa8aSmrg<sect1 id="Handling_the_Output_Buffer"> 166e9fcaa8aSmrg<title>Handling the Output Buffer</title> 167e9fcaa8aSmrg<!-- .XS --> 168e9fcaa8aSmrg<!-- (SN Handling the Output Buffer --> 169e9fcaa8aSmrg<!-- .XE --> 170e9fcaa8aSmrg<para> 171e9fcaa8aSmrg<!-- .LP --> 172e9fcaa8aSmrgThe output buffer is an area used by Xlib to store requests. 173e9fcaa8aSmrgThe functions described in this section flush the output buffer 174e9fcaa8aSmrgif the function would block or not return an event. 175e9fcaa8aSmrgThat is, all requests residing in the output buffer that 176e9fcaa8aSmrghave not yet been sent are transmitted to the X server. 177e9fcaa8aSmrgThese functions differ in the additional tasks they might perform. 178e9fcaa8aSmrg</para> 179e9fcaa8aSmrg<para> 180e9fcaa8aSmrg<!-- .LP --> 181e9fcaa8aSmrg<!-- .sp --> 182e9fcaa8aSmrgTo flush the output buffer, use 183e9fcaa8aSmrg<function>XFlush</function>. 184e9fcaa8aSmrg<indexterm significance="preferred"><primary>XFlush</primary></indexterm> 185e9fcaa8aSmrg<!-- .sM --> 186e9fcaa8aSmrg<funcsynopsis> 187e9fcaa8aSmrg<funcprototype> 188e9fcaa8aSmrg <funcdef><function>XFlush</function></funcdef> 189e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 190e9fcaa8aSmrg</funcprototype> 191e9fcaa8aSmrg</funcsynopsis> 192e9fcaa8aSmrg<!-- .FN --> 193e9fcaa8aSmrg<variablelist> 194e9fcaa8aSmrg <varlistentry> 195e9fcaa8aSmrg <term> 196e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 197e9fcaa8aSmrg </term> 198e9fcaa8aSmrg <listitem> 199e9fcaa8aSmrg <para> 200e9fcaa8aSmrgSpecifies the connection to the X server. 201e9fcaa8aSmrg </para> 202e9fcaa8aSmrg </listitem> 203e9fcaa8aSmrg </varlistentry> 204e9fcaa8aSmrg</variablelist> 205e9fcaa8aSmrg</para> 206e9fcaa8aSmrg<para> 207e9fcaa8aSmrg<!-- .LP --> 208e9fcaa8aSmrg<!-- .eM --> 209e9fcaa8aSmrgThe 210e9fcaa8aSmrg<function>XFlush</function> 211e9fcaa8aSmrgfunction 212e9fcaa8aSmrgflushes the output buffer. 213e9fcaa8aSmrgMost client applications need not use this function because the output 214e9fcaa8aSmrgbuffer is automatically flushed as needed by calls to 215e9fcaa8aSmrg<function>XPending</function>, 216e9fcaa8aSmrg<function>XNextEvent</function>, 217e9fcaa8aSmrgand 218e9fcaa8aSmrg<function>XWindowEvent</function>. 219e9fcaa8aSmrg<indexterm><primary>XPending</primary></indexterm> 220e9fcaa8aSmrg<indexterm><primary>XNextEvent</primary></indexterm> 221e9fcaa8aSmrg<indexterm><primary>XWindowEvent</primary></indexterm> 222e9fcaa8aSmrgEvents generated by the server may be enqueued into the library's event queue. 223e9fcaa8aSmrg</para> 224e9fcaa8aSmrg<para> 225e9fcaa8aSmrg<!-- .LP --> 226e9fcaa8aSmrg<!-- .sp --> 227e9fcaa8aSmrgTo flush the output buffer and then wait until all requests have been processed, 228e9fcaa8aSmrguse 229e9fcaa8aSmrg<function>XSync</function>. 230e9fcaa8aSmrg<indexterm significance="preferred"><primary>XSync</primary></indexterm> 231e9fcaa8aSmrg<!-- .sM --> 232e9fcaa8aSmrg<funcsynopsis> 233e9fcaa8aSmrg<funcprototype> 234e9fcaa8aSmrg <funcdef><function>XSync</function></funcdef> 235e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 236e9fcaa8aSmrg <paramdef>Bool<parameter> discard</parameter></paramdef> 237e9fcaa8aSmrg</funcprototype> 238e9fcaa8aSmrg</funcsynopsis> 239e9fcaa8aSmrg<!-- .FN --> 240e9fcaa8aSmrg<variablelist> 241e9fcaa8aSmrg <varlistentry> 242e9fcaa8aSmrg <term> 243e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 244e9fcaa8aSmrg </term> 245e9fcaa8aSmrg <listitem> 246e9fcaa8aSmrg <para> 247e9fcaa8aSmrgSpecifies the connection to the X server. 248e9fcaa8aSmrg </para> 249e9fcaa8aSmrg </listitem> 250e9fcaa8aSmrg </varlistentry> 251e9fcaa8aSmrg <varlistentry> 252e9fcaa8aSmrg <term> 253e9fcaa8aSmrg <emphasis remap='I'>discard</emphasis> 254e9fcaa8aSmrg </term> 255e9fcaa8aSmrg <listitem> 256e9fcaa8aSmrg <para> 257e9fcaa8aSmrgSpecifies a Boolean value that indicates whether 258e9fcaa8aSmrg<function>XSync</function> 259e9fcaa8aSmrgdiscards all events on the event queue. 260e9fcaa8aSmrg </para> 261e9fcaa8aSmrg </listitem> 262e9fcaa8aSmrg </varlistentry> 263e9fcaa8aSmrg</variablelist> 264e9fcaa8aSmrg</para> 265e9fcaa8aSmrg<para> 266e9fcaa8aSmrg<!-- .LP --> 267e9fcaa8aSmrg<!-- .eM --> 268e9fcaa8aSmrgThe 269e9fcaa8aSmrg<function>XSync</function> 270e9fcaa8aSmrgfunction 271e9fcaa8aSmrgflushes the output buffer and then waits until all requests have been received 272e9fcaa8aSmrgand processed by the X server. 273e9fcaa8aSmrgAny errors generated must be handled by the error handler. 274e9fcaa8aSmrgFor each protocol error received by Xlib, 275e9fcaa8aSmrg<function>XSync</function> 276e9fcaa8aSmrgcalls the client application's error handling routine (see section 11.8.2). 277e9fcaa8aSmrgAny events generated by the server are enqueued into the library's 278e9fcaa8aSmrgevent queue. 279e9fcaa8aSmrg</para> 280e9fcaa8aSmrg<para> 281e9fcaa8aSmrg<!-- .LP --> 282e9fcaa8aSmrgFinally, if you passed 283e9fcaa8aSmrg<symbol>False</symbol>, 284e9fcaa8aSmrg<function>XSync</function> 285e9fcaa8aSmrgdoes not discard the events in the queue. 286e9fcaa8aSmrgIf you passed 287e9fcaa8aSmrg<symbol>True</symbol>, 288e9fcaa8aSmrg<function>XSync</function> 289e9fcaa8aSmrgdiscards all events in the queue, 290e9fcaa8aSmrgincluding those events that were on the queue before 291e9fcaa8aSmrg<function>XSync</function> 292e9fcaa8aSmrgwas called. 293e9fcaa8aSmrgClient applications seldom need to call 294e9fcaa8aSmrg<function>XSync</function>. 295e9fcaa8aSmrg</para> 296e9fcaa8aSmrg</sect1> 297e9fcaa8aSmrg<sect1 id="Event_Queue_Management"> 298e9fcaa8aSmrg<title>Event Queue Management</title> 299e9fcaa8aSmrg<!-- .XS --> 300e9fcaa8aSmrg<!-- (SN Event Queue Management --> 301e9fcaa8aSmrg<!-- .XE --> 302e9fcaa8aSmrg<para> 303e9fcaa8aSmrg<!-- .LP --> 304e9fcaa8aSmrgXlib maintains an event queue. 305e9fcaa8aSmrgHowever, the operating system also may be buffering data 306e9fcaa8aSmrgin its network connection that is not yet read into the event queue. 307e9fcaa8aSmrg</para> 308e9fcaa8aSmrg<para> 309e9fcaa8aSmrg<!-- .LP --> 310e9fcaa8aSmrg<!-- .sp --> 311e9fcaa8aSmrgTo check the number of events in the event queue, use 312e9fcaa8aSmrg<function>XEventsQueued</function>. 313e9fcaa8aSmrg<indexterm significance="preferred"><primary>XEventsQueued</primary></indexterm> 314e9fcaa8aSmrg<!-- .sM --> 315e9fcaa8aSmrg<funcsynopsis> 316e9fcaa8aSmrg<funcprototype> 317e9fcaa8aSmrg <funcdef>int <function>XEventsQueued</function></funcdef> 318e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 319e9fcaa8aSmrg <paramdef>int<parameter> mode</parameter></paramdef> 320e9fcaa8aSmrg</funcprototype> 321e9fcaa8aSmrg</funcsynopsis> 322e9fcaa8aSmrg<!-- .FN --> 323e9fcaa8aSmrg<variablelist> 324e9fcaa8aSmrg <varlistentry> 325e9fcaa8aSmrg <term> 326e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 327e9fcaa8aSmrg </term> 328e9fcaa8aSmrg <listitem> 329e9fcaa8aSmrg <para> 330e9fcaa8aSmrgSpecifies the connection to the X server. 331e9fcaa8aSmrg </para> 332e9fcaa8aSmrg </listitem> 333e9fcaa8aSmrg </varlistentry> 334e9fcaa8aSmrg <varlistentry> 335e9fcaa8aSmrg <term> 336e9fcaa8aSmrg <emphasis remap='I'>mode</emphasis> 337e9fcaa8aSmrg </term> 338e9fcaa8aSmrg <listitem> 339e9fcaa8aSmrg <para> 340e9fcaa8aSmrgSpecifies the mode. 341e9fcaa8aSmrgYou can pass 342e9fcaa8aSmrg<symbol>QueuedAlready</symbol>, 343e9fcaa8aSmrg<symbol>QueuedAfterFlush</symbol>, 344e9fcaa8aSmrgor 345e9fcaa8aSmrg<symbol>QueuedAfterReading</symbol>. 346e9fcaa8aSmrg </para> 347e9fcaa8aSmrg </listitem> 348e9fcaa8aSmrg </varlistentry> 349e9fcaa8aSmrg</variablelist> 350e9fcaa8aSmrg</para> 351e9fcaa8aSmrg<para> 352e9fcaa8aSmrg<!-- .LP --> 353e9fcaa8aSmrg<!-- .eM --> 354e9fcaa8aSmrgIf mode is 355e9fcaa8aSmrg<symbol>QueuedAlready</symbol>, 356e9fcaa8aSmrg<function>XEventsQueued</function> 357e9fcaa8aSmrgreturns the number of events 358e9fcaa8aSmrgalready in the event queue (and never performs a system call). 359e9fcaa8aSmrgIf mode is 360e9fcaa8aSmrg<symbol>QueuedAfterFlush</symbol>, 361e9fcaa8aSmrg<function>XEventsQueued</function> 362e9fcaa8aSmrgreturns the number of events already in the queue if the number is nonzero. 363e9fcaa8aSmrgIf there are no events in the queue, 364e9fcaa8aSmrg<function>XEventsQueued</function> 365e9fcaa8aSmrgflushes the output buffer, 366e9fcaa8aSmrgattempts to read more events out of the application's connection, 367e9fcaa8aSmrgand returns the number read. 368e9fcaa8aSmrgIf mode is 369e9fcaa8aSmrg<symbol>QueuedAfterReading</symbol>, 370e9fcaa8aSmrg<function>XEventsQueued</function> 371e9fcaa8aSmrgreturns the number of events already in the queue if the number is nonzero. 372e9fcaa8aSmrgIf there are no events in the queue, 373e9fcaa8aSmrg<function>XEventsQueued</function> 374e9fcaa8aSmrgattempts to read more events out of the application's connection 375e9fcaa8aSmrgwithout flushing the output buffer and returns the number read. 376e9fcaa8aSmrg</para> 377e9fcaa8aSmrg<para> 378e9fcaa8aSmrg<!-- .LP --> 379e9fcaa8aSmrg<function>XEventsQueued</function> 380e9fcaa8aSmrgalways returns immediately without I/O if there are events already in the 381e9fcaa8aSmrgqueue. 382e9fcaa8aSmrg<function>XEventsQueued</function> 383e9fcaa8aSmrgwith mode 384e9fcaa8aSmrg<symbol>QueuedAfterFlush</symbol> 385e9fcaa8aSmrgis identical in behavior to 386e9fcaa8aSmrg<function>XPending</function>. 387e9fcaa8aSmrg<function>XEventsQueued</function> 388e9fcaa8aSmrgwith mode 389e9fcaa8aSmrg<symbol>QueuedAlready</symbol> 390e9fcaa8aSmrgis identical to the 391e9fcaa8aSmrg<function>XQLength</function> 392e9fcaa8aSmrgfunction. 393e9fcaa8aSmrg</para> 394e9fcaa8aSmrg<para> 395e9fcaa8aSmrg<!-- .LP --> 396e9fcaa8aSmrg<!-- .sp --> 397e9fcaa8aSmrgTo return the number of events that are pending, use 398e9fcaa8aSmrg<function>XPending</function>. 399e9fcaa8aSmrg<indexterm significance="preferred"><primary>XPending</primary></indexterm> 400e9fcaa8aSmrg<!-- .sM --> 401e9fcaa8aSmrg<funcsynopsis> 402e9fcaa8aSmrg<funcprototype> 403e9fcaa8aSmrg <funcdef>int <function>XPending</function></funcdef> 404e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 405e9fcaa8aSmrg</funcprototype> 406e9fcaa8aSmrg</funcsynopsis> 407e9fcaa8aSmrg<!-- .FN --> 408e9fcaa8aSmrg<variablelist> 409e9fcaa8aSmrg <varlistentry> 410e9fcaa8aSmrg <term> 411e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 412e9fcaa8aSmrg </term> 413e9fcaa8aSmrg <listitem> 414e9fcaa8aSmrg <para> 415e9fcaa8aSmrgSpecifies the connection to the X server. 416e9fcaa8aSmrg </para> 417e9fcaa8aSmrg </listitem> 418e9fcaa8aSmrg </varlistentry> 419e9fcaa8aSmrg</variablelist> 420e9fcaa8aSmrg</para> 421e9fcaa8aSmrg<para> 422e9fcaa8aSmrg<!-- .LP --> 423e9fcaa8aSmrg<!-- .eM --> 424e9fcaa8aSmrgThe 425e9fcaa8aSmrg<function>XPending</function> 426e9fcaa8aSmrgfunction returns the number of events that have been received from the 427e9fcaa8aSmrgX server but have not been removed from the event queue. 428e9fcaa8aSmrg<function>XPending</function> 429e9fcaa8aSmrgis identical to 430e9fcaa8aSmrg<function>XEventsQueued</function> 431e9fcaa8aSmrgwith the mode 432e9fcaa8aSmrg<symbol>QueuedAfterFlush</symbol> 433e9fcaa8aSmrgspecified. 434e9fcaa8aSmrg</para> 435e9fcaa8aSmrg</sect1> 436e9fcaa8aSmrg<sect1 id="Manipulating_the_Event_Queue"> 437e9fcaa8aSmrg<title>Manipulating the Event Queue</title> 438e9fcaa8aSmrg<!-- .XS --> 439e9fcaa8aSmrg<!-- (SN Manipulating the Event Queue --> 440e9fcaa8aSmrg<!-- .XE --> 441e9fcaa8aSmrg<para> 442e9fcaa8aSmrg<!-- .LP --> 443e9fcaa8aSmrgXlib provides functions that let you manipulate the event queue. 444e9fcaa8aSmrgThis section discusses how to: 445e9fcaa8aSmrg</para> 446e9fcaa8aSmrg<itemizedlist> 447e9fcaa8aSmrg <listitem> 448e9fcaa8aSmrg <para> 449e9fcaa8aSmrgObtain events, in order, and remove them from the queue 450e9fcaa8aSmrg </para> 451e9fcaa8aSmrg </listitem> 452e9fcaa8aSmrg <listitem> 453e9fcaa8aSmrg <para> 454e9fcaa8aSmrgPeek at events in the queue without removing them 455e9fcaa8aSmrg </para> 456e9fcaa8aSmrg </listitem> 457e9fcaa8aSmrg <listitem> 458e9fcaa8aSmrg <para> 459e9fcaa8aSmrgObtain events that match the event mask or the arbitrary 460e9fcaa8aSmrgpredicate procedures that you provide 461e9fcaa8aSmrg </para> 462e9fcaa8aSmrg </listitem> 463e9fcaa8aSmrg</itemizedlist> 464e9fcaa8aSmrg<sect2 id="Returning_the_Next_Event"> 465e9fcaa8aSmrg<title>Returning the Next Event</title> 466e9fcaa8aSmrg<!-- .XS --> 467e9fcaa8aSmrg<!-- (SN Returning the Next Event --> 468e9fcaa8aSmrg<!-- .XE --> 469e9fcaa8aSmrg<para> 470e9fcaa8aSmrg<!-- .LP --> 471e9fcaa8aSmrgTo get the next event and remove it from the queue, use 472e9fcaa8aSmrg<function>XNextEvent</function>. 473e9fcaa8aSmrg<indexterm significance="preferred"><primary>XNextEvent</primary></indexterm> 474e9fcaa8aSmrg<!-- .sM --> 475e9fcaa8aSmrg<funcsynopsis> 476e9fcaa8aSmrg<funcprototype> 477e9fcaa8aSmrg <funcdef><function>XNextEvent</function></funcdef> 478e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 479e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 480e9fcaa8aSmrg</funcprototype> 481e9fcaa8aSmrg</funcsynopsis> 482e9fcaa8aSmrg<!-- .FN --> 483e9fcaa8aSmrg<variablelist> 484e9fcaa8aSmrg <varlistentry> 485e9fcaa8aSmrg <term> 486e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 487e9fcaa8aSmrg </term> 488e9fcaa8aSmrg <listitem> 489e9fcaa8aSmrg <para> 490e9fcaa8aSmrgSpecifies the connection to the X server. 491e9fcaa8aSmrg </para> 492e9fcaa8aSmrg </listitem> 493e9fcaa8aSmrg </varlistentry> 494e9fcaa8aSmrg <varlistentry> 495e9fcaa8aSmrg <term> 496e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 497e9fcaa8aSmrg </term> 498e9fcaa8aSmrg <listitem> 499e9fcaa8aSmrg <para> 500e9fcaa8aSmrgReturns the next event in the queue. 501e9fcaa8aSmrg </para> 502e9fcaa8aSmrg </listitem> 503e9fcaa8aSmrg </varlistentry> 504e9fcaa8aSmrg</variablelist> 505e9fcaa8aSmrg</para> 506e9fcaa8aSmrg<para> 507e9fcaa8aSmrg<!-- .LP --> 508e9fcaa8aSmrg<!-- .eM --> 509e9fcaa8aSmrgThe 510e9fcaa8aSmrg<function>XNextEvent</function> 511e9fcaa8aSmrgfunction copies the first event from the event queue into the specified 512e9fcaa8aSmrg<structname>XEvent</structname> 513e9fcaa8aSmrgstructure and then removes it from the queue. 514e9fcaa8aSmrgIf the event queue is empty, 515e9fcaa8aSmrg<function>XNextEvent</function> 516e9fcaa8aSmrgflushes the output buffer and blocks until an event is received. 517e9fcaa8aSmrg</para> 518e9fcaa8aSmrg<para> 519e9fcaa8aSmrg<!-- .LP --> 520e9fcaa8aSmrg<!-- .sp --> 521e9fcaa8aSmrgTo peek at the event queue, use 522e9fcaa8aSmrg<function>XPeekEvent</function>. 523e9fcaa8aSmrg<indexterm significance="preferred"><primary>XPeekEvent</primary></indexterm> 524e9fcaa8aSmrg<!-- .sM --> 525e9fcaa8aSmrg<funcsynopsis> 526e9fcaa8aSmrg<funcprototype> 527e9fcaa8aSmrg <funcdef><function>XPeekEvent</function></funcdef> 528e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 529e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 530e9fcaa8aSmrg</funcprototype> 531e9fcaa8aSmrg</funcsynopsis> 532e9fcaa8aSmrg<!-- .FN --> 533e9fcaa8aSmrg<variablelist> 534e9fcaa8aSmrg <varlistentry> 535e9fcaa8aSmrg <term> 536e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 537e9fcaa8aSmrg </term> 538e9fcaa8aSmrg <listitem> 539e9fcaa8aSmrg <para> 540e9fcaa8aSmrgSpecifies the connection to the X server. 541e9fcaa8aSmrg </para> 542e9fcaa8aSmrg </listitem> 543e9fcaa8aSmrg </varlistentry> 544e9fcaa8aSmrg <varlistentry> 545e9fcaa8aSmrg <term> 546e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 547e9fcaa8aSmrg </term> 548e9fcaa8aSmrg <listitem> 549e9fcaa8aSmrg <para> 550e9fcaa8aSmrgReturns a copy of the matched event's associated structure. 551e9fcaa8aSmrg </para> 552e9fcaa8aSmrg </listitem> 553e9fcaa8aSmrg </varlistentry> 554e9fcaa8aSmrg</variablelist> 555e9fcaa8aSmrg</para> 556e9fcaa8aSmrg<para> 557e9fcaa8aSmrg<!-- .LP --> 558e9fcaa8aSmrg<!-- .eM --> 559e9fcaa8aSmrgThe 560e9fcaa8aSmrg<function>XPeekEvent</function> 561e9fcaa8aSmrgfunction returns the first event from the event queue, 562e9fcaa8aSmrgbut it does not remove the event from the queue. 563e9fcaa8aSmrgIf the queue is empty, 564e9fcaa8aSmrg<function>XPeekEvent</function> 565e9fcaa8aSmrgflushes the output buffer and blocks until an event is received. 566e9fcaa8aSmrgIt then copies the event into the client-supplied 567e9fcaa8aSmrg<structname>XEvent</structname> 568e9fcaa8aSmrgstructure without removing it from the event queue. 569e9fcaa8aSmrg</para> 570e9fcaa8aSmrg</sect2> 571e9fcaa8aSmrg<sect2 id="Selecting_Events_Using_a_Predicate_Procedure"> 572e9fcaa8aSmrg<title>Selecting Events Using a Predicate Procedure</title> 573e9fcaa8aSmrg<!-- .XS --> 574e9fcaa8aSmrg<!-- (SN Selecting Events Using a Predicate Procedure --> 575e9fcaa8aSmrg<!-- .XE --> 576e9fcaa8aSmrg<para> 577e9fcaa8aSmrg<!-- .LP --> 578e9fcaa8aSmrgEach of the functions discussed in this section requires you to 579e9fcaa8aSmrgpass a predicate procedure that determines if an event matches 580e9fcaa8aSmrgwhat you want. 581e9fcaa8aSmrgYour predicate procedure must decide if the event is useful 582e9fcaa8aSmrgwithout calling any Xlib functions. 583e9fcaa8aSmrgIf the predicate directly or indirectly causes the state of the event queue 584e9fcaa8aSmrgto change, the result is not defined. 585e9fcaa8aSmrgIf Xlib has been initialized for threads, the predicate is called with 586e9fcaa8aSmrgthe display locked and the result of a call by the predicate to any 587e9fcaa8aSmrgXlib function that locks the display is not defined unless the caller 588e9fcaa8aSmrghas first called 589e9fcaa8aSmrg<function>XLockDisplay</function>. 590e9fcaa8aSmrg</para> 591e9fcaa8aSmrg<para> 592e9fcaa8aSmrg<!-- .LP --> 593e9fcaa8aSmrgThe predicate procedure and its associated arguments are: 594e9fcaa8aSmrg<!-- .sM --> 595e9fcaa8aSmrg<funcsynopsis> 596e9fcaa8aSmrg<funcprototype> 597e9fcaa8aSmrg <funcdef><type>Bool</type></funcdef> 598e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 599e9fcaa8aSmrg <paramdef>XEvent<parameter> *event</parameter></paramdef> 600e9fcaa8aSmrg <paramdef>XPointer<parameter> arg</parameter></paramdef> 601e9fcaa8aSmrg</funcprototype> 602e9fcaa8aSmrg</funcsynopsis> 603e9fcaa8aSmrg<!-- .FN --> 604e9fcaa8aSmrg<variablelist> 605e9fcaa8aSmrg <varlistentry> 606e9fcaa8aSmrg <term> 607e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 608e9fcaa8aSmrg </term> 609e9fcaa8aSmrg <listitem> 610e9fcaa8aSmrg <para> 611e9fcaa8aSmrgSpecifies the connection to the X server. 612e9fcaa8aSmrg </para> 613e9fcaa8aSmrg </listitem> 614e9fcaa8aSmrg </varlistentry> 615e9fcaa8aSmrg <varlistentry> 616e9fcaa8aSmrg <term> 617e9fcaa8aSmrg <emphasis remap='I'>event</emphasis> 618e9fcaa8aSmrg </term> 619e9fcaa8aSmrg <listitem> 620e9fcaa8aSmrg <para> 621e9fcaa8aSmrgSpecifies the 622e9fcaa8aSmrg<structname>XEvent</structname> 623e9fcaa8aSmrgstructure. 624e9fcaa8aSmrg </para> 625e9fcaa8aSmrg </listitem> 626e9fcaa8aSmrg </varlistentry> 627e9fcaa8aSmrg <varlistentry> 628e9fcaa8aSmrg <term> 629e9fcaa8aSmrg <emphasis remap='I'>arg</emphasis> 630e9fcaa8aSmrg </term> 631e9fcaa8aSmrg <listitem> 632e9fcaa8aSmrg <para> 633e9fcaa8aSmrgSpecifies the argument passed in from the 634e9fcaa8aSmrg<function>XIfEvent</function>, 635e9fcaa8aSmrg<function>XCheckIfEvent</function>, 636e9fcaa8aSmrgor 637e9fcaa8aSmrg<function>XPeekIfEvent</function> 638e9fcaa8aSmrgfunction. 639e9fcaa8aSmrg </para> 640e9fcaa8aSmrg </listitem> 641e9fcaa8aSmrg </varlistentry> 642e9fcaa8aSmrg</variablelist> 643e9fcaa8aSmrg</para> 644e9fcaa8aSmrg<para> 645e9fcaa8aSmrg<!-- .LP --> 646e9fcaa8aSmrg<!-- .eM --> 647e9fcaa8aSmrgThe predicate procedure is called once for each 648e9fcaa8aSmrgevent in the queue until it finds a match. 649e9fcaa8aSmrgAfter finding a match, the predicate procedure must return 650e9fcaa8aSmrg<symbol>True</symbol>. 651e9fcaa8aSmrgIf it did not find a match, it must return 652e9fcaa8aSmrg<symbol>False</symbol>. 653e9fcaa8aSmrg</para> 654e9fcaa8aSmrg<para> 655e9fcaa8aSmrg<!-- .LP --> 656e9fcaa8aSmrg<!-- .sp --> 657e9fcaa8aSmrgTo check the event queue for a matching event 658e9fcaa8aSmrgand, if found, remove the event from the queue, use 659e9fcaa8aSmrg<function>XIfEvent</function>. 660e9fcaa8aSmrg<indexterm significance="preferred"><primary>XIfEvent</primary></indexterm> 661e9fcaa8aSmrg<!-- .sM --> 662e9fcaa8aSmrg<funcsynopsis> 663e9fcaa8aSmrg<funcprototype> 664e9fcaa8aSmrg <funcdef><function>XIfEvent</function></funcdef> 665e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 666e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 667e9fcaa8aSmrg <paramdef>Bool<parameter> (*predicate)()</parameter></paramdef> 668e9fcaa8aSmrg <paramdef>XPointer<parameter> arg</parameter></paramdef> 669e9fcaa8aSmrg</funcprototype> 670e9fcaa8aSmrg</funcsynopsis> 671e9fcaa8aSmrg<!-- .FN --> 672e9fcaa8aSmrg<variablelist> 673e9fcaa8aSmrg <varlistentry> 674e9fcaa8aSmrg <term> 675e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 676e9fcaa8aSmrg </term> 677e9fcaa8aSmrg <listitem> 678e9fcaa8aSmrg <para> 679e9fcaa8aSmrgSpecifies the connection to the X server. 680e9fcaa8aSmrg </para> 681e9fcaa8aSmrg </listitem> 682e9fcaa8aSmrg </varlistentry> 683e9fcaa8aSmrg <varlistentry> 684e9fcaa8aSmrg <term> 685e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 686e9fcaa8aSmrg </term> 687e9fcaa8aSmrg <listitem> 688e9fcaa8aSmrg <para> 689e9fcaa8aSmrgReturns the matched event's associated structure. 690e9fcaa8aSmrg </para> 691e9fcaa8aSmrg </listitem> 692e9fcaa8aSmrg </varlistentry> 693e9fcaa8aSmrg <varlistentry> 694e9fcaa8aSmrg <term> 695e9fcaa8aSmrg <emphasis remap='I'>predicate</emphasis> 696e9fcaa8aSmrg </term> 697e9fcaa8aSmrg <listitem> 698e9fcaa8aSmrg <para> 699e9fcaa8aSmrgSpecifies the procedure that is to be called to determine 700e9fcaa8aSmrgif the next event in the queue matches what you want. 701e9fcaa8aSmrg </para> 702e9fcaa8aSmrg </listitem> 703e9fcaa8aSmrg </varlistentry> 704e9fcaa8aSmrg <varlistentry> 705e9fcaa8aSmrg <term> 706e9fcaa8aSmrg <emphasis remap='I'>arg</emphasis> 707e9fcaa8aSmrg </term> 708e9fcaa8aSmrg <listitem> 709e9fcaa8aSmrg <para> 710e9fcaa8aSmrgSpecifies the user-supplied argument that will be passed to the predicate procedure. 711e9fcaa8aSmrg </para> 712e9fcaa8aSmrg </listitem> 713e9fcaa8aSmrg </varlistentry> 714e9fcaa8aSmrg</variablelist> 715e9fcaa8aSmrg</para> 716e9fcaa8aSmrg<para> 717e9fcaa8aSmrg<!-- .LP --> 718e9fcaa8aSmrg<!-- .eM --> 719e9fcaa8aSmrgThe 720e9fcaa8aSmrg<function>XIfEvent</function> 721e9fcaa8aSmrgfunction completes only when the specified predicate 722e9fcaa8aSmrgprocedure returns 723e9fcaa8aSmrg<symbol>True</symbol> 724e9fcaa8aSmrgfor an event, 725e9fcaa8aSmrgwhich indicates an event in the queue matches. 726e9fcaa8aSmrg<function>XIfEvent</function> 727e9fcaa8aSmrgflushes the output buffer if it blocks waiting for additional events. 728e9fcaa8aSmrg<function>XIfEvent</function> 729e9fcaa8aSmrgremoves the matching event from the queue 730e9fcaa8aSmrgand copies the structure into the client-supplied 731e9fcaa8aSmrg<structname>XEvent</structname> 732e9fcaa8aSmrgstructure. 733e9fcaa8aSmrg</para> 734e9fcaa8aSmrg<para> 735e9fcaa8aSmrg<!-- .LP --> 736e9fcaa8aSmrg<!-- .sp --> 737e9fcaa8aSmrgTo check the event queue for a matching event without blocking, use 738e9fcaa8aSmrg<function>XCheckIfEvent</function>. 739e9fcaa8aSmrg<indexterm significance="preferred"><primary>XCheckIfEvent</primary></indexterm> 740e9fcaa8aSmrg<!-- .sM --> 741e9fcaa8aSmrg<funcsynopsis> 742e9fcaa8aSmrg<funcprototype> 743e9fcaa8aSmrg <funcdef>Bool <function>XCheckIfEvent</function></funcdef> 744e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 745e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 746e9fcaa8aSmrg <paramdef>Bool<parameter> (*predicate)()</parameter></paramdef> 747e9fcaa8aSmrg <paramdef>XPointer<parameter> arg</parameter></paramdef> 748e9fcaa8aSmrg</funcprototype> 749e9fcaa8aSmrg</funcsynopsis> 750e9fcaa8aSmrg<!-- .FN --> 751e9fcaa8aSmrg<variablelist> 752e9fcaa8aSmrg <varlistentry> 753e9fcaa8aSmrg <term> 754e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 755e9fcaa8aSmrg </term> 756e9fcaa8aSmrg <listitem> 757e9fcaa8aSmrg <para> 758e9fcaa8aSmrgSpecifies the connection to the X server. 759e9fcaa8aSmrg </para> 760e9fcaa8aSmrg </listitem> 761e9fcaa8aSmrg </varlistentry> 762e9fcaa8aSmrg <varlistentry> 763e9fcaa8aSmrg <term> 764e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 765e9fcaa8aSmrg </term> 766e9fcaa8aSmrg <listitem> 767e9fcaa8aSmrg <para> 768e9fcaa8aSmrgReturns a copy of the matched event's associated structure. 769e9fcaa8aSmrg </para> 770e9fcaa8aSmrg </listitem> 771e9fcaa8aSmrg </varlistentry> 772e9fcaa8aSmrg <varlistentry> 773e9fcaa8aSmrg <term> 774e9fcaa8aSmrg <emphasis remap='I'>predicate</emphasis> 775e9fcaa8aSmrg </term> 776e9fcaa8aSmrg <listitem> 777e9fcaa8aSmrg <para> 778e9fcaa8aSmrgSpecifies the procedure that is to be called to determine 779e9fcaa8aSmrgif the next event in the queue matches what you want. 780e9fcaa8aSmrg </para> 781e9fcaa8aSmrg </listitem> 782e9fcaa8aSmrg </varlistentry> 783e9fcaa8aSmrg <varlistentry> 784e9fcaa8aSmrg <term> 785e9fcaa8aSmrg <emphasis remap='I'>arg</emphasis> 786e9fcaa8aSmrg </term> 787e9fcaa8aSmrg <listitem> 788e9fcaa8aSmrg <para> 789e9fcaa8aSmrgSpecifies the user-supplied argument that will be passed to the predicate procedure. 790e9fcaa8aSmrg </para> 791e9fcaa8aSmrg </listitem> 792e9fcaa8aSmrg </varlistentry> 793e9fcaa8aSmrg</variablelist> 794e9fcaa8aSmrg</para> 795e9fcaa8aSmrg<para> 796e9fcaa8aSmrg<!-- .LP --> 797e9fcaa8aSmrg<!-- .eM --> 798e9fcaa8aSmrgWhen the predicate procedure finds a match, 799e9fcaa8aSmrg<function>XCheckIfEvent</function> 800e9fcaa8aSmrgcopies the matched event into the client-supplied 801e9fcaa8aSmrg<structname>XEvent</structname> 802e9fcaa8aSmrgstructure and returns 803e9fcaa8aSmrg<symbol>True</symbol>. 804e9fcaa8aSmrg(This event is removed from the queue.) 805e9fcaa8aSmrgIf the predicate procedure finds no match, 806e9fcaa8aSmrg<function>XCheckIfEvent</function> 807e9fcaa8aSmrgreturns 808e9fcaa8aSmrg<symbol>False</symbol>, 809e9fcaa8aSmrgand the output buffer will have been flushed. 810e9fcaa8aSmrgAll earlier events stored in the queue are not discarded. 811e9fcaa8aSmrg</para> 812e9fcaa8aSmrg<para> 813e9fcaa8aSmrg<!-- .LP --> 814e9fcaa8aSmrg<!-- .sp --> 815e9fcaa8aSmrgTo check the event queue for a matching event 816e9fcaa8aSmrgwithout removing the event from the queue, use 817e9fcaa8aSmrg<function>XPeekIfEvent</function>. 818e9fcaa8aSmrg<indexterm significance="preferred"><primary>XPeekIfEvent</primary></indexterm> 819e9fcaa8aSmrg<!-- .sM --> 820e9fcaa8aSmrg<funcsynopsis> 821e9fcaa8aSmrg<funcprototype> 822e9fcaa8aSmrg <funcdef><function>XPeekIfEvent</function></funcdef> 823e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 824e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 825e9fcaa8aSmrg <paramdef>Bool<parameter> (*predicate)()</parameter></paramdef> 826e9fcaa8aSmrg <paramdef>XPointer<parameter> arg</parameter></paramdef> 827e9fcaa8aSmrg</funcprototype> 828e9fcaa8aSmrg</funcsynopsis> 829e9fcaa8aSmrg<!-- .FN --> 830e9fcaa8aSmrg<variablelist> 831e9fcaa8aSmrg <varlistentry> 832e9fcaa8aSmrg <term> 833e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 834e9fcaa8aSmrg </term> 835e9fcaa8aSmrg <listitem> 836e9fcaa8aSmrg <para> 837e9fcaa8aSmrgSpecifies the connection to the X server. 838e9fcaa8aSmrg </para> 839e9fcaa8aSmrg </listitem> 840e9fcaa8aSmrg </varlistentry> 841e9fcaa8aSmrg <varlistentry> 842e9fcaa8aSmrg <term> 843e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 844e9fcaa8aSmrg </term> 845e9fcaa8aSmrg <listitem> 846e9fcaa8aSmrg <para> 847e9fcaa8aSmrgReturns a copy of the matched event's associated structure. 848e9fcaa8aSmrg </para> 849e9fcaa8aSmrg </listitem> 850e9fcaa8aSmrg </varlistentry> 851e9fcaa8aSmrg <varlistentry> 852e9fcaa8aSmrg <term> 853e9fcaa8aSmrg <emphasis remap='I'>predicate</emphasis> 854e9fcaa8aSmrg </term> 855e9fcaa8aSmrg <listitem> 856e9fcaa8aSmrg <para> 857e9fcaa8aSmrgSpecifies the procedure that is to be called to determine 858e9fcaa8aSmrgif the next event in the queue matches what you want. 859e9fcaa8aSmrg </para> 860e9fcaa8aSmrg </listitem> 861e9fcaa8aSmrg </varlistentry> 862e9fcaa8aSmrg <varlistentry> 863e9fcaa8aSmrg <term> 864e9fcaa8aSmrg <emphasis remap='I'>arg</emphasis> 865e9fcaa8aSmrg </term> 866e9fcaa8aSmrg <listitem> 867e9fcaa8aSmrg <para> 868e9fcaa8aSmrgSpecifies the user-supplied argument that will be passed to the predicate procedure. 869e9fcaa8aSmrg </para> 870e9fcaa8aSmrg </listitem> 871e9fcaa8aSmrg </varlistentry> 872e9fcaa8aSmrg</variablelist> 873e9fcaa8aSmrg</para> 874e9fcaa8aSmrg<para> 875e9fcaa8aSmrg<!-- .LP --> 876e9fcaa8aSmrg<!-- .eM --> 877e9fcaa8aSmrgThe 878e9fcaa8aSmrg<function>XPeekIfEvent</function> 879e9fcaa8aSmrgfunction returns only when the specified predicate 880e9fcaa8aSmrgprocedure returns 881e9fcaa8aSmrg<symbol>True</symbol> 882e9fcaa8aSmrgfor an event. 883e9fcaa8aSmrgAfter the predicate procedure finds a match, 884e9fcaa8aSmrg<function>XPeekIfEvent</function> 885e9fcaa8aSmrgcopies the matched event into the client-supplied 886e9fcaa8aSmrg<structname>XEvent</structname> 887e9fcaa8aSmrgstructure without removing the event from the queue. 888e9fcaa8aSmrg<function>XPeekIfEvent</function> 889e9fcaa8aSmrgflushes the output buffer if it blocks waiting for additional events. 890e9fcaa8aSmrg</para> 891e9fcaa8aSmrg</sect2> 892e9fcaa8aSmrg<sect2 id="Selecting_Events_Using_a_Window_or_Event_Mask"> 893e9fcaa8aSmrg<title>Selecting Events Using a Window or Event Mask</title> 894e9fcaa8aSmrg<!-- .XS --> 895e9fcaa8aSmrg<!-- (SN Selecting Events Using a Window or Event Mask --> 896e9fcaa8aSmrg<!-- .XE --> 897e9fcaa8aSmrg<para> 898e9fcaa8aSmrg<!-- .LP --> 899e9fcaa8aSmrgThe functions discussed in this section let you select events by window 900e9fcaa8aSmrgor event types, allowing you to process events out of order. 901e9fcaa8aSmrg</para> 902e9fcaa8aSmrg<para> 903e9fcaa8aSmrg<!-- .LP --> 904e9fcaa8aSmrg<!-- .sp --> 905e9fcaa8aSmrgTo remove the next event that matches both a window and an event mask, use 906e9fcaa8aSmrg<function>XWindowEvent</function>. 907e9fcaa8aSmrg<indexterm significance="preferred"><primary>XWindowEvent</primary></indexterm> 908e9fcaa8aSmrg<!-- .sM --> 909e9fcaa8aSmrg<funcsynopsis> 910e9fcaa8aSmrg<funcprototype> 911e9fcaa8aSmrg <funcdef><function>XWindowEvent</function></funcdef> 912e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 913e9fcaa8aSmrg <paramdef>Window<parameter> w</parameter></paramdef> 914e9fcaa8aSmrg <paramdef>long<parameter> event_mask</parameter></paramdef> 915e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 916e9fcaa8aSmrg</funcprototype> 917e9fcaa8aSmrg</funcsynopsis> 918e9fcaa8aSmrg<!-- .FN --> 919e9fcaa8aSmrg<variablelist> 920e9fcaa8aSmrg <varlistentry> 921e9fcaa8aSmrg <term> 922e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 923e9fcaa8aSmrg </term> 924e9fcaa8aSmrg <listitem> 925e9fcaa8aSmrg <para> 926e9fcaa8aSmrgSpecifies the connection to the X server. 927e9fcaa8aSmrg<!-- .ds Wi whose events you are interested in --> 928e9fcaa8aSmrg </para> 929e9fcaa8aSmrg </listitem> 930e9fcaa8aSmrg </varlistentry> 931e9fcaa8aSmrg <varlistentry> 932e9fcaa8aSmrg <term> 933e9fcaa8aSmrg <emphasis remap='I'>w</emphasis> 934e9fcaa8aSmrg </term> 935e9fcaa8aSmrg <listitem> 936e9fcaa8aSmrg <para> 937e9fcaa8aSmrgSpecifies the window (Wi. 938e9fcaa8aSmrg </para> 939e9fcaa8aSmrg </listitem> 940e9fcaa8aSmrg </varlistentry> 941e9fcaa8aSmrg <varlistentry> 942e9fcaa8aSmrg <term> 943e9fcaa8aSmrg <emphasis remap='I'>event_mask</emphasis> 944e9fcaa8aSmrg </term> 945e9fcaa8aSmrg <listitem> 946e9fcaa8aSmrg <para> 947e9fcaa8aSmrgSpecifies the event mask. 948e9fcaa8aSmrg </para> 949e9fcaa8aSmrg </listitem> 950e9fcaa8aSmrg </varlistentry> 951e9fcaa8aSmrg <varlistentry> 952e9fcaa8aSmrg <term> 953e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 954e9fcaa8aSmrg </term> 955e9fcaa8aSmrg <listitem> 956e9fcaa8aSmrg <para> 957e9fcaa8aSmrgReturns the matched event's associated structure. 958e9fcaa8aSmrg </para> 959e9fcaa8aSmrg </listitem> 960e9fcaa8aSmrg </varlistentry> 961e9fcaa8aSmrg</variablelist> 962e9fcaa8aSmrg</para> 963e9fcaa8aSmrg<para> 964e9fcaa8aSmrg<!-- .LP --> 965e9fcaa8aSmrg<!-- .eM --> 966e9fcaa8aSmrgThe 967e9fcaa8aSmrg<function>XWindowEvent</function> 968e9fcaa8aSmrgfunction searches the event queue for an event that matches both the specified 969e9fcaa8aSmrgwindow and event mask. 970e9fcaa8aSmrgWhen it finds a match, 971e9fcaa8aSmrg<function>XWindowEvent</function> 972e9fcaa8aSmrgremoves that event from the queue and copies it into the specified 973e9fcaa8aSmrg<structname>XEvent</structname> 974e9fcaa8aSmrgstructure. 975e9fcaa8aSmrgThe other events stored in the queue are not discarded. 976e9fcaa8aSmrgIf a matching event is not in the queue, 977e9fcaa8aSmrg<function>XWindowEvent</function> 978e9fcaa8aSmrgflushes the output buffer and blocks until one is received. 979e9fcaa8aSmrg</para> 980e9fcaa8aSmrg<para> 981e9fcaa8aSmrg<!-- .LP --> 982e9fcaa8aSmrg<!-- .sp --> 983e9fcaa8aSmrgTo remove the next event that matches both a window and an event mask (if any), 984e9fcaa8aSmrguse 985e9fcaa8aSmrg<function>XCheckWindowEvent</function>. 986e9fcaa8aSmrg<indexterm><primary>XCheckWindowEvent</primary></indexterm> 987e9fcaa8aSmrgThis function is similar to 988e9fcaa8aSmrg<function>XWindowEvent</function> 989e9fcaa8aSmrgexcept that it never blocks and it returns a 990e9fcaa8aSmrg<type>Bool</type> 991e9fcaa8aSmrgindicating if the event was returned. 992e9fcaa8aSmrg<indexterm significance="preferred"><primary>XCheckWindowEvent</primary></indexterm> 993e9fcaa8aSmrg<!-- .sM --> 994e9fcaa8aSmrg<funcsynopsis> 995e9fcaa8aSmrg<funcprototype> 996e9fcaa8aSmrg <funcdef>Bool <function>XCheckWindowEvent</function></funcdef> 997e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 998e9fcaa8aSmrg <paramdef>Window<parameter> w</parameter></paramdef> 999e9fcaa8aSmrg <paramdef>long<parameter> event_mask</parameter></paramdef> 1000e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 1001e9fcaa8aSmrg</funcprototype> 1002e9fcaa8aSmrg</funcsynopsis> 1003e9fcaa8aSmrg<!-- .FN --> 1004e9fcaa8aSmrg<variablelist> 1005e9fcaa8aSmrg <varlistentry> 1006e9fcaa8aSmrg <term> 1007e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1008e9fcaa8aSmrg </term> 1009e9fcaa8aSmrg <listitem> 1010e9fcaa8aSmrg <para> 1011e9fcaa8aSmrgSpecifies the connection to the X server. 1012e9fcaa8aSmrg<!-- .ds Wi whose events you are interested in --> 1013e9fcaa8aSmrg </para> 1014e9fcaa8aSmrg </listitem> 1015e9fcaa8aSmrg </varlistentry> 1016e9fcaa8aSmrg <varlistentry> 1017e9fcaa8aSmrg <term> 1018e9fcaa8aSmrg <emphasis remap='I'>w</emphasis> 1019e9fcaa8aSmrg </term> 1020e9fcaa8aSmrg <listitem> 1021e9fcaa8aSmrg <para> 1022e9fcaa8aSmrgSpecifies the window (Wi. 1023e9fcaa8aSmrg </para> 1024e9fcaa8aSmrg </listitem> 1025e9fcaa8aSmrg </varlistentry> 1026e9fcaa8aSmrg <varlistentry> 1027e9fcaa8aSmrg <term> 1028e9fcaa8aSmrg <emphasis remap='I'>event_mask</emphasis> 1029e9fcaa8aSmrg </term> 1030e9fcaa8aSmrg <listitem> 1031e9fcaa8aSmrg <para> 1032e9fcaa8aSmrgSpecifies the event mask. 1033e9fcaa8aSmrg </para> 1034e9fcaa8aSmrg </listitem> 1035e9fcaa8aSmrg </varlistentry> 1036e9fcaa8aSmrg <varlistentry> 1037e9fcaa8aSmrg <term> 1038e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 1039e9fcaa8aSmrg </term> 1040e9fcaa8aSmrg <listitem> 1041e9fcaa8aSmrg <para> 1042e9fcaa8aSmrgReturns the matched event's associated structure. 1043e9fcaa8aSmrg </para> 1044e9fcaa8aSmrg </listitem> 1045e9fcaa8aSmrg </varlistentry> 1046e9fcaa8aSmrg</variablelist> 1047e9fcaa8aSmrg</para> 1048e9fcaa8aSmrg<para> 1049e9fcaa8aSmrg<!-- .LP --> 1050e9fcaa8aSmrg<!-- .eM --> 1051e9fcaa8aSmrgThe 1052e9fcaa8aSmrg<function>XCheckWindowEvent</function> 1053e9fcaa8aSmrgfunction searches the event queue and then the events available 1054e9fcaa8aSmrgon the server connection for the first event that matches the specified window 1055e9fcaa8aSmrgand event mask. 1056e9fcaa8aSmrgIf it finds a match, 1057e9fcaa8aSmrg<function>XCheckWindowEvent</function> 1058e9fcaa8aSmrgremoves that event, copies it into the specified 1059e9fcaa8aSmrg<structname>XEvent</structname> 1060e9fcaa8aSmrgstructure, and returns 1061e9fcaa8aSmrg<symbol>True</symbol>. 1062e9fcaa8aSmrgThe other events stored in the queue are not discarded. 1063e9fcaa8aSmrgIf the event you requested is not available, 1064e9fcaa8aSmrg<function>XCheckWindowEvent</function> 1065e9fcaa8aSmrgreturns 1066e9fcaa8aSmrg<symbol>False</symbol>, 1067e9fcaa8aSmrgand the output buffer will have been flushed. 1068e9fcaa8aSmrg</para> 1069e9fcaa8aSmrg<para> 1070e9fcaa8aSmrg<!-- .LP --> 1071e9fcaa8aSmrg<!-- .sp --> 1072e9fcaa8aSmrgTo remove the next event that matches an event mask, use 1073e9fcaa8aSmrg<function>XMaskEvent</function>. 1074e9fcaa8aSmrg<indexterm significance="preferred"><primary>XMaskEvent</primary></indexterm> 1075e9fcaa8aSmrg<!-- .sM --> 1076e9fcaa8aSmrg<funcsynopsis> 1077e9fcaa8aSmrg<funcprototype> 1078e9fcaa8aSmrg <funcdef><function>XMaskEvent</function></funcdef> 1079e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1080e9fcaa8aSmrg <paramdef>long<parameter> event_mask</parameter></paramdef> 1081e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 1082e9fcaa8aSmrg</funcprototype> 1083e9fcaa8aSmrg</funcsynopsis> 1084e9fcaa8aSmrg<!-- .FN --> 1085e9fcaa8aSmrg<variablelist> 1086e9fcaa8aSmrg <varlistentry> 1087e9fcaa8aSmrg <term> 1088e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1089e9fcaa8aSmrg </term> 1090e9fcaa8aSmrg <listitem> 1091e9fcaa8aSmrg <para> 1092e9fcaa8aSmrgSpecifies the connection to the X server. 1093e9fcaa8aSmrg </para> 1094e9fcaa8aSmrg </listitem> 1095e9fcaa8aSmrg </varlistentry> 1096e9fcaa8aSmrg <varlistentry> 1097e9fcaa8aSmrg <term> 1098e9fcaa8aSmrg <emphasis remap='I'>event_mask</emphasis> 1099e9fcaa8aSmrg </term> 1100e9fcaa8aSmrg <listitem> 1101e9fcaa8aSmrg <para> 1102e9fcaa8aSmrgSpecifies the event mask. 1103e9fcaa8aSmrg </para> 1104e9fcaa8aSmrg </listitem> 1105e9fcaa8aSmrg </varlistentry> 1106e9fcaa8aSmrg <varlistentry> 1107e9fcaa8aSmrg <term> 1108e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 1109e9fcaa8aSmrg </term> 1110e9fcaa8aSmrg <listitem> 1111e9fcaa8aSmrg <para> 1112e9fcaa8aSmrgReturns the matched event's associated structure. 1113e9fcaa8aSmrg </para> 1114e9fcaa8aSmrg </listitem> 1115e9fcaa8aSmrg </varlistentry> 1116e9fcaa8aSmrg</variablelist> 1117e9fcaa8aSmrg</para> 1118e9fcaa8aSmrg<para> 1119e9fcaa8aSmrg<!-- .LP --> 1120e9fcaa8aSmrg<!-- .eM --> 1121e9fcaa8aSmrgThe 1122e9fcaa8aSmrg<function>XMaskEvent</function> 1123e9fcaa8aSmrgfunction searches the event queue for the events associated with the 1124e9fcaa8aSmrgspecified mask. 1125e9fcaa8aSmrgWhen it finds a match, 1126e9fcaa8aSmrg<function>XMaskEvent</function> 1127e9fcaa8aSmrgremoves that event and copies it into the specified 1128e9fcaa8aSmrg<structname>XEvent</structname> 1129e9fcaa8aSmrgstructure. 1130e9fcaa8aSmrgThe other events stored in the queue are not discarded. 1131e9fcaa8aSmrgIf the event you requested is not in the queue, 1132e9fcaa8aSmrg<function>XMaskEvent</function> 1133e9fcaa8aSmrgflushes the output buffer and blocks until one is received. 1134e9fcaa8aSmrg</para> 1135e9fcaa8aSmrg<para> 1136e9fcaa8aSmrg<!-- .LP --> 1137e9fcaa8aSmrg<!-- .sp --> 1138e9fcaa8aSmrgTo return and remove the next event that matches an event mask (if any), use 1139e9fcaa8aSmrg<function>XCheckMaskEvent</function>. 1140e9fcaa8aSmrgThis function is similar to 1141e9fcaa8aSmrg<function>XMaskEvent</function> 1142e9fcaa8aSmrgexcept that it never blocks and it returns a 1143e9fcaa8aSmrg<type>Bool</type> 1144e9fcaa8aSmrgindicating if the event was returned. 1145e9fcaa8aSmrg<indexterm significance="preferred"><primary>XCheckMaskEvent</primary></indexterm> 1146e9fcaa8aSmrg<!-- .sM --> 1147e9fcaa8aSmrg<funcsynopsis> 1148e9fcaa8aSmrg<funcprototype> 1149e9fcaa8aSmrg <funcdef>Bool <function>XCheckMaskEvent</function></funcdef> 1150e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1151e9fcaa8aSmrg <paramdef>long<parameter> event_mask</parameter></paramdef> 1152e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 1153e9fcaa8aSmrg</funcprototype> 1154e9fcaa8aSmrg</funcsynopsis> 1155e9fcaa8aSmrg<!-- .FN --> 1156e9fcaa8aSmrg<variablelist> 1157e9fcaa8aSmrg <varlistentry> 1158e9fcaa8aSmrg <term> 1159e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1160e9fcaa8aSmrg </term> 1161e9fcaa8aSmrg <listitem> 1162e9fcaa8aSmrg <para> 1163e9fcaa8aSmrgSpecifies the connection to the X server. 1164e9fcaa8aSmrg </para> 1165e9fcaa8aSmrg </listitem> 1166e9fcaa8aSmrg </varlistentry> 1167e9fcaa8aSmrg <varlistentry> 1168e9fcaa8aSmrg <term> 1169e9fcaa8aSmrg <emphasis remap='I'>event_mask</emphasis> 1170e9fcaa8aSmrg </term> 1171e9fcaa8aSmrg <listitem> 1172e9fcaa8aSmrg <para> 1173e9fcaa8aSmrgSpecifies the event mask. 1174e9fcaa8aSmrg </para> 1175e9fcaa8aSmrg </listitem> 1176e9fcaa8aSmrg </varlistentry> 1177e9fcaa8aSmrg <varlistentry> 1178e9fcaa8aSmrg <term> 1179e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 1180e9fcaa8aSmrg </term> 1181e9fcaa8aSmrg <listitem> 1182e9fcaa8aSmrg <para> 1183e9fcaa8aSmrgReturns the matched event's associated structure. 1184e9fcaa8aSmrg </para> 1185e9fcaa8aSmrg </listitem> 1186e9fcaa8aSmrg </varlistentry> 1187e9fcaa8aSmrg</variablelist> 1188e9fcaa8aSmrg</para> 1189e9fcaa8aSmrg<para> 1190e9fcaa8aSmrg<!-- .LP --> 1191e9fcaa8aSmrg<!-- .eM --> 1192e9fcaa8aSmrgThe 1193e9fcaa8aSmrg<function>XCheckMaskEvent</function> 1194e9fcaa8aSmrgfunction searches the event queue and then any events available on the 1195e9fcaa8aSmrgserver connection for the first event that matches the specified mask. 1196e9fcaa8aSmrgIf it finds a match, 1197e9fcaa8aSmrg<function>XCheckMaskEvent</function> 1198e9fcaa8aSmrgremoves that event, copies it into the specified 1199e9fcaa8aSmrg<structname>XEvent</structname> 1200e9fcaa8aSmrgstructure, and returns 1201e9fcaa8aSmrg<symbol>True</symbol>. 1202e9fcaa8aSmrgThe other events stored in the queue are not discarded. 1203e9fcaa8aSmrgIf the event you requested is not available, 1204e9fcaa8aSmrg<function>XCheckMaskEvent</function> 1205e9fcaa8aSmrgreturns 1206e9fcaa8aSmrg<symbol>False</symbol>, 1207e9fcaa8aSmrgand the output buffer will have been flushed. 1208e9fcaa8aSmrg</para> 1209e9fcaa8aSmrg<para> 1210e9fcaa8aSmrg<!-- .LP --> 1211e9fcaa8aSmrg<!-- .sp --> 1212e9fcaa8aSmrgTo return and remove the next event in the queue that matches an event type, use 1213e9fcaa8aSmrg<function>XCheckTypedEvent</function>. 1214e9fcaa8aSmrg<indexterm significance="preferred"><primary>XCheckTypedEvent</primary></indexterm> 1215e9fcaa8aSmrg<!-- .sM --> 1216e9fcaa8aSmrg<funcsynopsis> 1217e9fcaa8aSmrg<funcprototype> 1218e9fcaa8aSmrg <funcdef>Bool <function>XCheckTypedEvent</function></funcdef> 1219e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1220e9fcaa8aSmrg <paramdef>int<parameter> event_type</parameter></paramdef> 1221e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 1222e9fcaa8aSmrg</funcprototype> 1223e9fcaa8aSmrg</funcsynopsis> 1224e9fcaa8aSmrg<!-- .FN --> 1225e9fcaa8aSmrg<variablelist> 1226e9fcaa8aSmrg <varlistentry> 1227e9fcaa8aSmrg <term> 1228e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1229e9fcaa8aSmrg </term> 1230e9fcaa8aSmrg <listitem> 1231e9fcaa8aSmrg <para> 1232e9fcaa8aSmrgSpecifies the connection to the X server. 1233e9fcaa8aSmrg </para> 1234e9fcaa8aSmrg </listitem> 1235e9fcaa8aSmrg </varlistentry> 1236e9fcaa8aSmrg <varlistentry> 1237e9fcaa8aSmrg <term> 1238e9fcaa8aSmrg <emphasis remap='I'>event_type</emphasis> 1239e9fcaa8aSmrg </term> 1240e9fcaa8aSmrg <listitem> 1241e9fcaa8aSmrg <para> 1242e9fcaa8aSmrgSpecifies the event type to be compared. 1243e9fcaa8aSmrg 1244e9fcaa8aSmrg </para> 1245e9fcaa8aSmrg </listitem> 1246e9fcaa8aSmrg </varlistentry> 1247e9fcaa8aSmrg <varlistentry> 1248e9fcaa8aSmrg <term> 1249e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 1250e9fcaa8aSmrg </term> 1251e9fcaa8aSmrg <listitem> 1252e9fcaa8aSmrg <para> 1253e9fcaa8aSmrgReturns the matched event's associated structure. 1254e9fcaa8aSmrg </para> 1255e9fcaa8aSmrg </listitem> 1256e9fcaa8aSmrg </varlistentry> 1257e9fcaa8aSmrg</variablelist> 1258e9fcaa8aSmrg</para> 1259e9fcaa8aSmrg<para> 1260e9fcaa8aSmrg<!-- .LP --> 1261e9fcaa8aSmrg<!-- .eM --> 1262e9fcaa8aSmrgThe 1263e9fcaa8aSmrg<function>XCheckTypedEvent</function> 1264e9fcaa8aSmrgfunction searches the event queue and then any events available 1265e9fcaa8aSmrgon the server connection for the first event that matches the specified type. 1266e9fcaa8aSmrgIf it finds a match, 1267e9fcaa8aSmrg<function>XCheckTypedEvent</function> 1268e9fcaa8aSmrgremoves that event, copies it into the specified 1269e9fcaa8aSmrg<structname>XEvent</structname> 1270e9fcaa8aSmrgstructure, and returns 1271e9fcaa8aSmrg<symbol>True</symbol>. 1272e9fcaa8aSmrgThe other events in the queue are not discarded. 1273e9fcaa8aSmrgIf the event is not available, 1274e9fcaa8aSmrg<function>XCheckTypedEvent</function> 1275e9fcaa8aSmrgreturns 1276e9fcaa8aSmrg<symbol>False</symbol>, 1277e9fcaa8aSmrgand the output buffer will have been flushed. 1278e9fcaa8aSmrg</para> 1279e9fcaa8aSmrg<para> 1280e9fcaa8aSmrg<!-- .LP --> 1281e9fcaa8aSmrg<!-- .sp --> 1282e9fcaa8aSmrgTo return and remove the next event in the queue that matches an event type 1283e9fcaa8aSmrgand a window, use 1284e9fcaa8aSmrg<function>XCheckTypedWindowEvent</function>. 1285e9fcaa8aSmrg<indexterm significance="preferred"><primary>XCheckTypedWindowEvent</primary></indexterm> 1286e9fcaa8aSmrg<!-- .sM --> 1287e9fcaa8aSmrg<funcsynopsis> 1288e9fcaa8aSmrg<funcprototype> 1289e9fcaa8aSmrg <funcdef>Bool <function>XCheckTypedWindowEvent</function></funcdef> 1290e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1291e9fcaa8aSmrg <paramdef>Window<parameter> w</parameter></paramdef> 1292e9fcaa8aSmrg <paramdef>int<parameter> event_type</parameter></paramdef> 1293e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_return</parameter></paramdef> 1294e9fcaa8aSmrg</funcprototype> 1295e9fcaa8aSmrg</funcsynopsis> 1296e9fcaa8aSmrg<!-- .FN --> 1297e9fcaa8aSmrg<variablelist> 1298e9fcaa8aSmrg <varlistentry> 1299e9fcaa8aSmrg <term> 1300e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1301e9fcaa8aSmrg </term> 1302e9fcaa8aSmrg <listitem> 1303e9fcaa8aSmrg <para> 1304e9fcaa8aSmrgSpecifies the connection to the X server. 1305e9fcaa8aSmrg </para> 1306e9fcaa8aSmrg </listitem> 1307e9fcaa8aSmrg </varlistentry> 1308e9fcaa8aSmrg <varlistentry> 1309e9fcaa8aSmrg <term> 1310e9fcaa8aSmrg <emphasis remap='I'>w</emphasis> 1311e9fcaa8aSmrg </term> 1312e9fcaa8aSmrg <listitem> 1313e9fcaa8aSmrg <para> 1314e9fcaa8aSmrgSpecifies the window. 1315e9fcaa8aSmrg </para> 1316e9fcaa8aSmrg </listitem> 1317e9fcaa8aSmrg </varlistentry> 1318e9fcaa8aSmrg <varlistentry> 1319e9fcaa8aSmrg <term> 1320e9fcaa8aSmrg <emphasis remap='I'>event_type</emphasis> 1321e9fcaa8aSmrg </term> 1322e9fcaa8aSmrg <listitem> 1323e9fcaa8aSmrg <para> 1324e9fcaa8aSmrgSpecifies the event type to be compared. 1325e9fcaa8aSmrg 1326e9fcaa8aSmrg </para> 1327e9fcaa8aSmrg </listitem> 1328e9fcaa8aSmrg </varlistentry> 1329e9fcaa8aSmrg <varlistentry> 1330e9fcaa8aSmrg <term> 1331e9fcaa8aSmrg <emphasis remap='I'>event_return</emphasis> 1332e9fcaa8aSmrg </term> 1333e9fcaa8aSmrg <listitem> 1334e9fcaa8aSmrg <para> 1335e9fcaa8aSmrgReturns the matched event's associated structure. 1336e9fcaa8aSmrg </para> 1337e9fcaa8aSmrg </listitem> 1338e9fcaa8aSmrg </varlistentry> 1339e9fcaa8aSmrg</variablelist> 1340e9fcaa8aSmrg</para> 1341e9fcaa8aSmrg<para> 1342e9fcaa8aSmrg<!-- .LP --> 1343e9fcaa8aSmrg<!-- .eM --> 1344e9fcaa8aSmrgThe 1345e9fcaa8aSmrg<function>XCheckTypedWindowEvent</function> 1346e9fcaa8aSmrgfunction searches the event queue and then any events available 1347e9fcaa8aSmrgon the server connection for the first event that matches the specified 1348e9fcaa8aSmrgtype and window. 1349e9fcaa8aSmrgIf it finds a match, 1350e9fcaa8aSmrg<function>XCheckTypedWindowEvent</function> 1351e9fcaa8aSmrgremoves the event from the queue, copies it into the specified 1352e9fcaa8aSmrg<structname>XEvent</structname> 1353e9fcaa8aSmrgstructure, and returns 1354e9fcaa8aSmrg<symbol>True</symbol>. 1355e9fcaa8aSmrgThe other events in the queue are not discarded. 1356e9fcaa8aSmrgIf the event is not available, 1357e9fcaa8aSmrg<function>XCheckTypedWindowEvent</function> 1358e9fcaa8aSmrgreturns 1359e9fcaa8aSmrg<symbol>False</symbol>, 1360e9fcaa8aSmrgand the output buffer will have been flushed. 1361e9fcaa8aSmrg</para> 1362e9fcaa8aSmrg</sect2> 1363e9fcaa8aSmrg</sect1> 1364e9fcaa8aSmrg<sect1 id="Putting_an_Event_Back_into_the_Queue"> 1365e9fcaa8aSmrg<title>Putting an Event Back into the Queue</title> 1366e9fcaa8aSmrg<!-- .XS --> 1367e9fcaa8aSmrg<!-- (SN Putting an Event Back into the Queue --> 1368e9fcaa8aSmrg<!-- .XE --> 1369e9fcaa8aSmrg<para> 1370e9fcaa8aSmrg<!-- .LP --> 1371e9fcaa8aSmrgTo push an event back into the event queue, use 1372e9fcaa8aSmrg<function>XPutBackEvent</function>. 1373e9fcaa8aSmrg<indexterm significance="preferred"><primary>XPutBackEvent</primary></indexterm> 1374e9fcaa8aSmrg<!-- .sM --> 1375e9fcaa8aSmrg<funcsynopsis> 1376e9fcaa8aSmrg<funcprototype> 1377e9fcaa8aSmrg <funcdef><function>XPutBackEvent</function></funcdef> 1378e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1379e9fcaa8aSmrg <paramdef>XEvent<parameter> *event</parameter></paramdef> 1380e9fcaa8aSmrg</funcprototype> 1381e9fcaa8aSmrg</funcsynopsis> 1382e9fcaa8aSmrg<!-- .FN --> 1383e9fcaa8aSmrg<variablelist> 1384e9fcaa8aSmrg <varlistentry> 1385e9fcaa8aSmrg <term> 1386e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1387e9fcaa8aSmrg </term> 1388e9fcaa8aSmrg <listitem> 1389e9fcaa8aSmrg <para> 1390e9fcaa8aSmrgSpecifies the connection to the X server. 1391e9fcaa8aSmrg </para> 1392e9fcaa8aSmrg </listitem> 1393e9fcaa8aSmrg </varlistentry> 1394e9fcaa8aSmrg <varlistentry> 1395e9fcaa8aSmrg <term> 1396e9fcaa8aSmrg <emphasis remap='I'>event</emphasis> 1397e9fcaa8aSmrg </term> 1398e9fcaa8aSmrg <listitem> 1399e9fcaa8aSmrg <para> 1400e9fcaa8aSmrgSpecifies the event. 1401e9fcaa8aSmrg </para> 1402e9fcaa8aSmrg </listitem> 1403e9fcaa8aSmrg </varlistentry> 1404e9fcaa8aSmrg</variablelist> 1405e9fcaa8aSmrg</para> 1406e9fcaa8aSmrg<para> 1407e9fcaa8aSmrg<!-- .LP --> 1408e9fcaa8aSmrg<!-- .eM --> 1409e9fcaa8aSmrgThe 1410e9fcaa8aSmrg<function>XPutBackEvent</function> 1411e9fcaa8aSmrgfunction pushes an event back onto the head of the display's event queue 1412e9fcaa8aSmrgby copying the event into the queue. 1413e9fcaa8aSmrgThis can be useful if you read an event and then decide that you 1414e9fcaa8aSmrgwould rather deal with it later. 1415e9fcaa8aSmrgThere is no limit to the number of times in succession that you can call 1416e9fcaa8aSmrg<function>XPutBackEvent</function>. 1417e9fcaa8aSmrg</para> 1418e9fcaa8aSmrg</sect1> 1419e9fcaa8aSmrg<sect1 id="Sending_Events_to_Other_Applications"> 1420e9fcaa8aSmrg<title>Sending Events to Other Applications</title> 1421e9fcaa8aSmrg<!-- .XS --> 1422e9fcaa8aSmrg<!-- (SN Sending Events to Other Applications --> 1423e9fcaa8aSmrg<!-- .XE --> 1424e9fcaa8aSmrg<para> 1425e9fcaa8aSmrg<!-- .LP --> 1426e9fcaa8aSmrgTo send an event to a specified window, use 1427e9fcaa8aSmrg<function>XSendEvent</function>. 1428e9fcaa8aSmrg<indexterm><primary>XSendEvent</primary></indexterm> 1429e9fcaa8aSmrgThis function is often used in selection processing. 1430e9fcaa8aSmrgFor example, the owner of a selection should use 1431e9fcaa8aSmrg<function>XSendEvent</function> 1432e9fcaa8aSmrgto send a 1433e9fcaa8aSmrg<symbol>SelectionNotify</symbol> 1434e9fcaa8aSmrgevent to a requestor when a selection has been converted 1435e9fcaa8aSmrgand stored as a property. 1436e9fcaa8aSmrg<indexterm significance="preferred"><primary>XSendEvent</primary></indexterm> 1437e9fcaa8aSmrg<!-- .sM --> 1438e9fcaa8aSmrg<funcsynopsis> 1439e9fcaa8aSmrg<funcprototype> 1440e9fcaa8aSmrg <funcdef>Status <function>XSendEvent</function></funcdef> 1441e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1442e9fcaa8aSmrg <paramdef>Window<parameter> w</parameter></paramdef> 1443e9fcaa8aSmrg <paramdef>Bool<parameter> propagate</parameter></paramdef> 1444e9fcaa8aSmrg <paramdef>long<parameter> event_mask</parameter></paramdef> 1445e9fcaa8aSmrg <paramdef>XEvent<parameter> *event_send</parameter></paramdef> 1446e9fcaa8aSmrg</funcprototype> 1447e9fcaa8aSmrg</funcsynopsis> 1448e9fcaa8aSmrg<!-- .FN --> 1449e9fcaa8aSmrg<variablelist> 1450e9fcaa8aSmrg <varlistentry> 1451e9fcaa8aSmrg <term> 1452e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1453e9fcaa8aSmrg </term> 1454e9fcaa8aSmrg <listitem> 1455e9fcaa8aSmrg <para> 1456e9fcaa8aSmrgSpecifies the connection to the X server. 1457e9fcaa8aSmrg </para> 1458e9fcaa8aSmrg </listitem> 1459e9fcaa8aSmrg </varlistentry> 1460e9fcaa8aSmrg <varlistentry> 1461e9fcaa8aSmrg <term> 1462e9fcaa8aSmrg <emphasis remap='I'>w</emphasis> 1463e9fcaa8aSmrg </term> 1464e9fcaa8aSmrg <listitem> 1465e9fcaa8aSmrg <para> 1466e9fcaa8aSmrgSpecifies the window the event is to be sent to, or 1467e9fcaa8aSmrg<symbol>PointerWindow</symbol>, 1468e9fcaa8aSmrgor 1469e9fcaa8aSmrg<symbol>InputFocus</symbol>. 1470e9fcaa8aSmrg </para> 1471e9fcaa8aSmrg </listitem> 1472e9fcaa8aSmrg </varlistentry> 1473e9fcaa8aSmrg <varlistentry> 1474e9fcaa8aSmrg <term> 1475e9fcaa8aSmrg <emphasis remap='I'>propagate</emphasis> 1476e9fcaa8aSmrg </term> 1477e9fcaa8aSmrg <listitem> 1478e9fcaa8aSmrg <para> 1479e9fcaa8aSmrgSpecifies a Boolean value. 1480e9fcaa8aSmrg </para> 1481e9fcaa8aSmrg </listitem> 1482e9fcaa8aSmrg </varlistentry> 1483e9fcaa8aSmrg <varlistentry> 1484e9fcaa8aSmrg <term> 1485e9fcaa8aSmrg <emphasis remap='I'>event_mask</emphasis> 1486e9fcaa8aSmrg </term> 1487e9fcaa8aSmrg <listitem> 1488e9fcaa8aSmrg <para> 1489e9fcaa8aSmrgSpecifies the event mask. 1490e9fcaa8aSmrg </para> 1491e9fcaa8aSmrg </listitem> 1492e9fcaa8aSmrg </varlistentry> 1493e9fcaa8aSmrg <varlistentry> 1494e9fcaa8aSmrg <term> 1495e9fcaa8aSmrg <emphasis remap='I'>event_send</emphasis> 1496e9fcaa8aSmrg </term> 1497e9fcaa8aSmrg <listitem> 1498e9fcaa8aSmrg <para> 1499e9fcaa8aSmrgSpecifies the event that is to be sent. 1500e9fcaa8aSmrg </para> 1501e9fcaa8aSmrg </listitem> 1502e9fcaa8aSmrg </varlistentry> 1503e9fcaa8aSmrg</variablelist> 1504e9fcaa8aSmrg</para> 1505e9fcaa8aSmrg<para> 1506e9fcaa8aSmrg<!-- .LP --> 1507e9fcaa8aSmrg<!-- .eM --> 1508e9fcaa8aSmrgThe 1509e9fcaa8aSmrg<function>XSendEvent</function> 1510e9fcaa8aSmrgfunction identifies the destination window, 1511e9fcaa8aSmrgdetermines which clients should receive the specified events, 1512e9fcaa8aSmrgand ignores any active grabs. 1513e9fcaa8aSmrgThis function requires you to pass an event mask. 1514e9fcaa8aSmrgFor a discussion of the valid event mask names, 1515e9fcaa8aSmrgsee section 10.3. 1516e9fcaa8aSmrgThis function uses the w argument to identify the destination window as follows: 1517e9fcaa8aSmrg</para> 1518e9fcaa8aSmrg<itemizedlist> 1519e9fcaa8aSmrg <listitem> 1520e9fcaa8aSmrg <para> 1521e9fcaa8aSmrgIf w is 1522e9fcaa8aSmrg<symbol>PointerWindow</symbol>, 1523e9fcaa8aSmrgthe destination window is the window that contains the pointer. 1524e9fcaa8aSmrg </para> 1525e9fcaa8aSmrg </listitem> 1526e9fcaa8aSmrg <listitem> 1527e9fcaa8aSmrg <para> 1528e9fcaa8aSmrgIf w is 1529e9fcaa8aSmrg<symbol>InputFocus</symbol> 1530e9fcaa8aSmrgand if the focus window contains the pointer, 1531e9fcaa8aSmrgthe destination window is the window that contains the pointer; 1532e9fcaa8aSmrgotherwise, the destination window is the focus window. 1533e9fcaa8aSmrg </para> 1534e9fcaa8aSmrg </listitem> 1535e9fcaa8aSmrg</itemizedlist> 1536e9fcaa8aSmrg<para> 1537e9fcaa8aSmrg<!-- .LP --> 1538e9fcaa8aSmrgTo determine which clients should receive the specified events, 1539e9fcaa8aSmrg<function>XSendEvent</function> 1540e9fcaa8aSmrguses the propagate argument as follows: 1541e9fcaa8aSmrg</para> 1542e9fcaa8aSmrg<itemizedlist> 1543e9fcaa8aSmrg <listitem> 1544e9fcaa8aSmrg <para> 1545e9fcaa8aSmrgIf event_mask is the empty set, 1546e9fcaa8aSmrgthe event is sent to the client that created the destination window. 1547e9fcaa8aSmrgIf that client no longer exists, 1548e9fcaa8aSmrgno event is sent. 1549e9fcaa8aSmrg </para> 1550e9fcaa8aSmrg </listitem> 1551e9fcaa8aSmrg <listitem> 1552e9fcaa8aSmrg <para> 1553e9fcaa8aSmrgIf propagate is 1554e9fcaa8aSmrg<symbol>False</symbol>, 1555e9fcaa8aSmrgthe event is sent to every client selecting on destination any of the event 1556e9fcaa8aSmrgtypes in the event_mask argument. 1557e9fcaa8aSmrg </para> 1558e9fcaa8aSmrg </listitem> 1559e9fcaa8aSmrg <listitem> 1560e9fcaa8aSmrg <para> 1561e9fcaa8aSmrgIf propagate is 1562e9fcaa8aSmrg<symbol>True</symbol> 1563e9fcaa8aSmrgand no clients have selected on destination any of 1564e9fcaa8aSmrgthe event types in event-mask, the destination is replaced with the 1565e9fcaa8aSmrgclosest ancestor of destination for which some client has selected a 1566e9fcaa8aSmrgtype in event-mask and for which no intervening window has that type in its 1567e9fcaa8aSmrgdo-not-propagate-mask. 1568e9fcaa8aSmrgIf no such window exists or if the window is 1569e9fcaa8aSmrgan ancestor of the focus window and 1570e9fcaa8aSmrg<symbol>InputFocus</symbol> 1571e9fcaa8aSmrgwas originally specified 1572e9fcaa8aSmrgas the destination, the event is not sent to any clients. 1573e9fcaa8aSmrgOtherwise, the event is reported to every client selecting on the final 1574e9fcaa8aSmrgdestination any of the types specified in event_mask. 1575e9fcaa8aSmrg </para> 1576e9fcaa8aSmrg </listitem> 1577e9fcaa8aSmrg</itemizedlist> 1578e9fcaa8aSmrg<para> 1579e9fcaa8aSmrg<!-- .LP --> 1580e9fcaa8aSmrgThe event in the 1581e9fcaa8aSmrg<structname>XEvent</structname> 1582e9fcaa8aSmrgstructure must be one of the core events or one of the events 1583e9fcaa8aSmrgdefined by an extension (or a 1584e9fcaa8aSmrg<errorname>BadValue</errorname> 1585e9fcaa8aSmrgerror results) so that the X server can correctly byte-swap 1586e9fcaa8aSmrgthe contents as necessary. 1587e9fcaa8aSmrgThe contents of the event are 1588e9fcaa8aSmrgotherwise unaltered and unchecked by the X server except to force send_event to 1589e9fcaa8aSmrg<symbol>True</symbol> 1590e9fcaa8aSmrgin the forwarded event and to set the serial number in the event correctly; 1591e9fcaa8aSmrgtherefore these fields 1592e9fcaa8aSmrgand the display field are ignored by 1593e9fcaa8aSmrg<function>XSendEvent</function>. 1594e9fcaa8aSmrg</para> 1595e9fcaa8aSmrg<para> 1596e9fcaa8aSmrg<!-- .LP --> 1597e9fcaa8aSmrg<function>XSendEvent</function> 1598e9fcaa8aSmrgreturns zero if the conversion to wire protocol format failed 1599e9fcaa8aSmrgand returns nonzero otherwise. 1600e9fcaa8aSmrg</para> 1601e9fcaa8aSmrg<para> 1602e9fcaa8aSmrg<!-- .LP --> 1603e9fcaa8aSmrg<function>XSendEvent</function> 1604e9fcaa8aSmrgcan generate 1605e9fcaa8aSmrg<errorname>BadValue</errorname> 1606e9fcaa8aSmrgand 1607e9fcaa8aSmrg<errorname>BadWindow</errorname> 1608e9fcaa8aSmrgerrors. 1609e9fcaa8aSmrg</para> 1610e9fcaa8aSmrg</sect1> 1611e9fcaa8aSmrg<sect1 id="Getting_Pointer_Motion_History"> 1612e9fcaa8aSmrg<title>Getting Pointer Motion History</title> 1613e9fcaa8aSmrg<!-- .XS --> 1614e9fcaa8aSmrg<!-- (SN Getting Pointer Motion History --> 1615e9fcaa8aSmrg<!-- .XE --> 1616e9fcaa8aSmrg<para> 1617e9fcaa8aSmrg<!-- .LP --> 1618e9fcaa8aSmrgSome X server implementations will maintain a more complete 1619e9fcaa8aSmrghistory of pointer motion than is reported by event notification. 1620e9fcaa8aSmrgThe pointer position at each pointer hardware interrupt may be 1621e9fcaa8aSmrgstored in a buffer for later retrieval. 1622e9fcaa8aSmrgThis buffer is called the motion history buffer. 1623e9fcaa8aSmrgFor example, a few applications, such as paint programs, 1624e9fcaa8aSmrgwant to have a precise history of where the pointer 1625e9fcaa8aSmrgtraveled. 1626e9fcaa8aSmrgHowever, this historical information is highly excessive for most applications. 1627e9fcaa8aSmrg</para> 1628e9fcaa8aSmrg<para> 1629e9fcaa8aSmrg<!-- .LP --> 1630e9fcaa8aSmrg<!-- .sp --> 1631e9fcaa8aSmrgTo determine the approximate maximum number of elements in the motion buffer, 1632e9fcaa8aSmrguse 1633e9fcaa8aSmrg<function>XDisplayMotionBufferSize</function>. 1634e9fcaa8aSmrg<indexterm significance="preferred"><primary>XDisplayMotionBufferSize</primary></indexterm> 1635e9fcaa8aSmrg<!-- .sM --> 1636e9fcaa8aSmrg<funcsynopsis> 1637e9fcaa8aSmrg<funcprototype> 1638e9fcaa8aSmrg <funcdef>unsigned <type>long</type></funcdef> 1639e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1640e9fcaa8aSmrg</funcprototype> 1641e9fcaa8aSmrg</funcsynopsis> 1642e9fcaa8aSmrg<!-- .FN --> 1643e9fcaa8aSmrg<variablelist> 1644e9fcaa8aSmrg <varlistentry> 1645e9fcaa8aSmrg <term> 1646e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1647e9fcaa8aSmrg </term> 1648e9fcaa8aSmrg <listitem> 1649e9fcaa8aSmrg <para> 1650e9fcaa8aSmrgSpecifies the connection to the X server. 1651e9fcaa8aSmrg </para> 1652e9fcaa8aSmrg </listitem> 1653e9fcaa8aSmrg </varlistentry> 1654e9fcaa8aSmrg</variablelist> 1655e9fcaa8aSmrg</para> 1656e9fcaa8aSmrg<para> 1657e9fcaa8aSmrg<!-- .LP --> 1658e9fcaa8aSmrg<!-- .eM --> 1659e9fcaa8aSmrgThe server may retain the recent history of the pointer motion 1660e9fcaa8aSmrgand do so to a finer granularity than is reported by 1661e9fcaa8aSmrg<symbol>MotionNotify</symbol> 1662e9fcaa8aSmrgevents. 1663e9fcaa8aSmrgThe 1664e9fcaa8aSmrg<function>XGetMotionEvents</function> 1665e9fcaa8aSmrgfunction makes this history available. 1666e9fcaa8aSmrg</para> 1667e9fcaa8aSmrg<para> 1668e9fcaa8aSmrg<!-- .LP --> 1669e9fcaa8aSmrg<!-- .sp --> 1670e9fcaa8aSmrgTo get the motion history for a specified window and time, use 1671e9fcaa8aSmrg<function>XGetMotionEvents</function>. 1672e9fcaa8aSmrg<indexterm significance="preferred"><primary>XGetMotionEvents</primary></indexterm> 1673e9fcaa8aSmrg<!-- .sM --> 1674e9fcaa8aSmrg<funcsynopsis> 1675e9fcaa8aSmrg<funcprototype> 1676e9fcaa8aSmrg <funcdef>XTimeCoord *<function>XGetMotionEvents</function></funcdef> 1677e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1678e9fcaa8aSmrg <paramdef>Window<parameter> w</parameter></paramdef> 1679e9fcaa8aSmrg <paramdef>Timestart,<parameter> stop</parameter></paramdef> 1680e9fcaa8aSmrg <paramdef>int<parameter> *nevents_return</parameter></paramdef> 1681e9fcaa8aSmrg</funcprototype> 1682e9fcaa8aSmrg</funcsynopsis> 1683e9fcaa8aSmrg<!-- .FN --> 1684e9fcaa8aSmrg<variablelist> 1685e9fcaa8aSmrg <varlistentry> 1686e9fcaa8aSmrg <term> 1687e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1688e9fcaa8aSmrg </term> 1689e9fcaa8aSmrg <listitem> 1690e9fcaa8aSmrg <para> 1691e9fcaa8aSmrgSpecifies the connection to the X server. 1692e9fcaa8aSmrg </para> 1693e9fcaa8aSmrg </listitem> 1694e9fcaa8aSmrg </varlistentry> 1695e9fcaa8aSmrg <varlistentry> 1696e9fcaa8aSmrg <term> 1697e9fcaa8aSmrg <emphasis remap='I'>w</emphasis> 1698e9fcaa8aSmrg </term> 1699e9fcaa8aSmrg <listitem> 1700e9fcaa8aSmrg <para> 1701e9fcaa8aSmrgSpecifies the window. 1702e9fcaa8aSmrg </para> 1703e9fcaa8aSmrg </listitem> 1704e9fcaa8aSmrg </varlistentry> 1705e9fcaa8aSmrg <varlistentry> 1706e9fcaa8aSmrg <term> 1707e9fcaa8aSmrg <emphasis remap='I'>start</emphasis> 1708e9fcaa8aSmrg </term> 1709e9fcaa8aSmrg <listitem> 1710e9fcaa8aSmrg <para> 1711e9fcaa8aSmrg<!-- .br --> 1712e9fcaa8aSmrg<!-- .ns --> 1713e9fcaa8aSmrg </para> 1714e9fcaa8aSmrg </listitem> 1715e9fcaa8aSmrg </varlistentry> 1716e9fcaa8aSmrg <varlistentry> 1717e9fcaa8aSmrg <term> 1718e9fcaa8aSmrg <emphasis remap='I'>stop</emphasis> 1719e9fcaa8aSmrg </term> 1720e9fcaa8aSmrg <listitem> 1721e9fcaa8aSmrg <para> 1722e9fcaa8aSmrgSpecify the time interval in which the events are returned from the motion 1723e9fcaa8aSmrghistory buffer. 1724e9fcaa8aSmrgYou can pass a timestamp or 1725e9fcaa8aSmrg<symbol>CurrentTime</symbol>. 1726e9fcaa8aSmrg </para> 1727e9fcaa8aSmrg </listitem> 1728e9fcaa8aSmrg </varlistentry> 1729e9fcaa8aSmrg <varlistentry> 1730e9fcaa8aSmrg <term> 1731e9fcaa8aSmrg <emphasis remap='I'>nevents_return</emphasis> 1732e9fcaa8aSmrg </term> 1733e9fcaa8aSmrg <listitem> 1734e9fcaa8aSmrg <para> 1735e9fcaa8aSmrgReturns the number of events from the motion history buffer. 1736e9fcaa8aSmrg </para> 1737e9fcaa8aSmrg </listitem> 1738e9fcaa8aSmrg </varlistentry> 1739e9fcaa8aSmrg</variablelist> 1740e9fcaa8aSmrg</para> 1741e9fcaa8aSmrg<para> 1742e9fcaa8aSmrg<!-- .LP --> 1743e9fcaa8aSmrg<!-- .eM --> 1744e9fcaa8aSmrgThe 1745e9fcaa8aSmrg<function>XGetMotionEvents</function> 1746e9fcaa8aSmrgfunction returns all events in the motion history buffer that fall between the 1747e9fcaa8aSmrgspecified start and stop times, inclusive, and that have coordinates 1748e9fcaa8aSmrgthat lie within the specified window (including its borders) at its present 1749e9fcaa8aSmrgplacement. 1750e9fcaa8aSmrgIf the server does not support motion history, 1751e9fcaa8aSmrgif the start time is later than the stop time, 1752e9fcaa8aSmrgor if the start time is in the future, 1753e9fcaa8aSmrgno events are returned; 1754e9fcaa8aSmrg<function>XGetMotionEvents</function> 1755e9fcaa8aSmrgreturns NULL. 1756e9fcaa8aSmrgIf the stop time is in the future, it is equivalent to specifying 1757e9fcaa8aSmrg<symbol>CurrentTime</symbol>. 1758e9fcaa8aSmrgThe return type for this function is a structure defined as follows: 1759e9fcaa8aSmrg</para> 1760e9fcaa8aSmrg<para> 1761e9fcaa8aSmrg<!-- .LP --> 1762e9fcaa8aSmrg<indexterm significance="preferred"><primary>XTimeCoord</primary></indexterm> 1763e9fcaa8aSmrg<!-- .sM --> 1764e9fcaa8aSmrg<literallayout class="monospaced"> 1765e9fcaa8aSmrg<!-- .TA .5i --> 1766e9fcaa8aSmrg<!-- .ta .5i --> 1767e9fcaa8aSmrgtypedef struct { 1768e9fcaa8aSmrg Time time; 1769e9fcaa8aSmrg short x, y; 1770e9fcaa8aSmrg} XTimeCoord; 1771e9fcaa8aSmrg</literallayout> 1772e9fcaa8aSmrg</para> 1773e9fcaa8aSmrg<para> 1774e9fcaa8aSmrg<!-- .LP --> 1775e9fcaa8aSmrg<!-- .eM --> 1776e9fcaa8aSmrgThe time member is set to the time, in milliseconds. 1777e9fcaa8aSmrgThe x and y members are set to the coordinates of the pointer and 1778e9fcaa8aSmrgare reported relative to the origin 1779e9fcaa8aSmrgof the specified window. 1780e9fcaa8aSmrgTo free the data returned from this call, use 1781e9fcaa8aSmrg<function>XFree</function>. 1782e9fcaa8aSmrg</para> 1783e9fcaa8aSmrg<para> 1784e9fcaa8aSmrg<!-- .LP --> 1785e9fcaa8aSmrg<function>XGetMotionEvents</function> 1786e9fcaa8aSmrgcan generate a 1787e9fcaa8aSmrg<errorname>BadWindow</errorname> 1788e9fcaa8aSmrgerror. 1789e9fcaa8aSmrg</para> 1790e9fcaa8aSmrg</sect1> 1791e9fcaa8aSmrg<sect1 id="Handling_Protocol_Errors"> 1792e9fcaa8aSmrg<title>Handling Protocol Errors</title> 1793e9fcaa8aSmrg<!-- .XS --> 1794e9fcaa8aSmrg<!-- (SN Handling Protocol Errors --> 1795e9fcaa8aSmrg<!-- .XE --> 1796e9fcaa8aSmrg<para> 1797e9fcaa8aSmrg<!-- .LP --> 1798e9fcaa8aSmrgXlib provides functions that you can use to enable or disable synchronization 1799e9fcaa8aSmrgand to use the default error handlers. 1800e9fcaa8aSmrg</para> 1801e9fcaa8aSmrg<sect2 id="Enabling_or_Disabling_Synchronization"> 1802e9fcaa8aSmrg<title>Enabling or Disabling Synchronization</title> 1803e9fcaa8aSmrg<!-- .XS --> 1804e9fcaa8aSmrg<!-- (SN Enabling or Disabling Synchronization --> 1805e9fcaa8aSmrg<!-- .XE --> 1806e9fcaa8aSmrg<para> 1807e9fcaa8aSmrg<!-- .LP --> 1808e9fcaa8aSmrgWhen debugging X applications, 1809e9fcaa8aSmrgit often is very convenient to require Xlib to behave synchronously 1810e9fcaa8aSmrgso that errors are reported as they occur. 1811e9fcaa8aSmrgThe following function lets you disable or enable synchronous behavior. 1812e9fcaa8aSmrgNote that graphics may occur 30 or more times more slowly when 1813e9fcaa8aSmrgsynchronization is enabled. 1814e9fcaa8aSmrg<indexterm><primary>_Xdebug</primary></indexterm> 1815e9fcaa8aSmrgOn <acronym>POSIX</acronym>-conformant systems, 1816e9fcaa8aSmrgthere is also a global variable 1817e9fcaa8aSmrg<varname>_Xdebug</varname> 1818e9fcaa8aSmrgthat, if set to nonzero before starting a program under a debugger, will force 1819e9fcaa8aSmrgsynchronous library behavior. 1820e9fcaa8aSmrg</para> 1821e9fcaa8aSmrg<para> 1822e9fcaa8aSmrg<!-- .LP --> 1823e9fcaa8aSmrgAfter completing their work, 1824e9fcaa8aSmrgall Xlib functions that generate protocol requests call what is known as 1825e9fcaa8aSmrgan after function. 1826e9fcaa8aSmrg<function>XSetAfterFunction</function> 1827e9fcaa8aSmrgsets which function is to be called. 1828e9fcaa8aSmrg<indexterm significance="preferred"><primary>XSetAfterFunction</primary></indexterm> 1829e9fcaa8aSmrg<!-- .sM --> 1830e9fcaa8aSmrg<funcsynopsis> 1831e9fcaa8aSmrg<funcprototype> 1832e9fcaa8aSmrg <funcdef><type>int</type></funcdef> 1833e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1834e9fcaa8aSmrg <paramdef>int<parameter> (*procedure)()</parameter></paramdef> 1835e9fcaa8aSmrg</funcprototype> 1836e9fcaa8aSmrg</funcsynopsis> 1837e9fcaa8aSmrg<!-- .FN --> 1838e9fcaa8aSmrg<variablelist> 1839e9fcaa8aSmrg <varlistentry> 1840e9fcaa8aSmrg <term> 1841e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1842e9fcaa8aSmrg </term> 1843e9fcaa8aSmrg <listitem> 1844e9fcaa8aSmrg <para> 1845e9fcaa8aSmrgSpecifies the connection to the X server. 1846e9fcaa8aSmrg </para> 1847e9fcaa8aSmrg </listitem> 1848e9fcaa8aSmrg </varlistentry> 1849e9fcaa8aSmrg <varlistentry> 1850e9fcaa8aSmrg <term> 1851e9fcaa8aSmrg <emphasis remap='I'>procedure</emphasis> 1852e9fcaa8aSmrg </term> 1853e9fcaa8aSmrg <listitem> 1854e9fcaa8aSmrg <para> 1855e9fcaa8aSmrgSpecifies the procedure to be called. 1856e9fcaa8aSmrg </para> 1857e9fcaa8aSmrg </listitem> 1858e9fcaa8aSmrg </varlistentry> 1859e9fcaa8aSmrg</variablelist> 1860e9fcaa8aSmrg</para> 1861e9fcaa8aSmrg<para> 1862e9fcaa8aSmrg<!-- .LP --> 1863e9fcaa8aSmrg<!-- .eM --> 1864e9fcaa8aSmrgThe specified procedure is called with only a display pointer. 1865e9fcaa8aSmrg<function>XSetAfterFunction</function> 1866e9fcaa8aSmrgreturns the previous after function. 1867e9fcaa8aSmrg</para> 1868e9fcaa8aSmrg<para> 1869e9fcaa8aSmrg<!-- .LP --> 1870e9fcaa8aSmrgTo enable or disable synchronization, use 1871e9fcaa8aSmrg<function>XSynchronize</function>. 1872e9fcaa8aSmrg<indexterm><primary>Debugging</primary><secondary>synchronous mode</secondary></indexterm> 1873e9fcaa8aSmrg<indexterm significance="preferred"><primary>XSynchronize</primary></indexterm> 1874e9fcaa8aSmrg<!-- .sM --> 1875e9fcaa8aSmrg<funcsynopsis> 1876e9fcaa8aSmrg<funcprototype> 1877e9fcaa8aSmrg <funcdef><type>int</type></funcdef> 1878e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 1879e9fcaa8aSmrg <paramdef>Bool<parameter> onoff</parameter></paramdef> 1880e9fcaa8aSmrg</funcprototype> 1881e9fcaa8aSmrg</funcsynopsis> 1882e9fcaa8aSmrg<!-- .FN --> 1883e9fcaa8aSmrg<variablelist> 1884e9fcaa8aSmrg <varlistentry> 1885e9fcaa8aSmrg <term> 1886e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 1887e9fcaa8aSmrg </term> 1888e9fcaa8aSmrg <listitem> 1889e9fcaa8aSmrg <para> 1890e9fcaa8aSmrgSpecifies the connection to the X server. 1891e9fcaa8aSmrg </para> 1892e9fcaa8aSmrg </listitem> 1893e9fcaa8aSmrg </varlistentry> 1894e9fcaa8aSmrg <varlistentry> 1895e9fcaa8aSmrg <term> 1896e9fcaa8aSmrg <emphasis remap='I'>onoff</emphasis> 1897e9fcaa8aSmrg </term> 1898e9fcaa8aSmrg <listitem> 1899e9fcaa8aSmrg <para> 1900e9fcaa8aSmrgSpecifies a Boolean value that indicates whether to enable 1901e9fcaa8aSmrgor disable synchronization. 1902e9fcaa8aSmrg </para> 1903e9fcaa8aSmrg </listitem> 1904e9fcaa8aSmrg </varlistentry> 1905e9fcaa8aSmrg</variablelist> 1906e9fcaa8aSmrg</para> 1907e9fcaa8aSmrg<para> 1908e9fcaa8aSmrg<!-- .LP --> 1909e9fcaa8aSmrg<!-- .eM --> 1910e9fcaa8aSmrgThe 1911e9fcaa8aSmrg<function>XSynchronize</function> 1912e9fcaa8aSmrgfunction returns 1913e9fcaa8aSmrgthe previous after function. 1914e9fcaa8aSmrgIf onoff is 1915e9fcaa8aSmrg<symbol>True</symbol>, 1916e9fcaa8aSmrg<function>XSynchronize</function> 1917e9fcaa8aSmrgturns on synchronous behavior. 1918e9fcaa8aSmrgIf onoff is 1919e9fcaa8aSmrg<symbol>False</symbol>, 1920e9fcaa8aSmrg<function>XSynchronize</function> 1921e9fcaa8aSmrgturns off synchronous behavior. 1922e9fcaa8aSmrg</para> 1923e9fcaa8aSmrg</sect2> 1924e9fcaa8aSmrg<sect2 id="Using_the_Default_Error_Handlers"> 1925e9fcaa8aSmrg<title>Using the Default Error Handlers</title> 1926e9fcaa8aSmrg<!-- .XS --> 1927e9fcaa8aSmrg<!-- (SN Using the Default Error Handlers --> 1928e9fcaa8aSmrg<!-- .XE --> 1929e9fcaa8aSmrg<para> 1930e9fcaa8aSmrg<!-- .LP --> 1931e9fcaa8aSmrg<indexterm><primary>Debugging</primary><secondary>error handlers</secondary></indexterm> 1932e9fcaa8aSmrg<indexterm><primary>Error</primary><secondary>handlers</secondary></indexterm> 1933e9fcaa8aSmrgThere are two default error handlers in Xlib: 1934e9fcaa8aSmrgone to handle typically fatal conditions (for example, 1935e9fcaa8aSmrgthe connection to a display server dying because a machine crashed) 1936e9fcaa8aSmrgand one to handle protocol errors from the X server. 1937e9fcaa8aSmrgThese error handlers can be changed to user-supplied routines if you 1938e9fcaa8aSmrgprefer your own error handling and can be changed as often as you like. 1939e9fcaa8aSmrgIf either function is passed a NULL pointer, it will 1940e9fcaa8aSmrgreinvoke the default handler. 1941e9fcaa8aSmrgThe action of the default handlers is to print an explanatory 1942e9fcaa8aSmrgmessage and exit. 1943e9fcaa8aSmrg</para> 1944e9fcaa8aSmrg<para> 1945e9fcaa8aSmrg<!-- .LP --> 1946e9fcaa8aSmrg<!-- .sp --> 1947e9fcaa8aSmrgTo set the error handler, use 1948e9fcaa8aSmrg<function>XSetErrorHandler</function>. 1949e9fcaa8aSmrg<indexterm significance="preferred"><primary>XSetErrorHandler</primary></indexterm> 1950e9fcaa8aSmrg<!-- .sM --> 1951e9fcaa8aSmrg<funcsynopsis> 1952e9fcaa8aSmrg<funcprototype> 1953e9fcaa8aSmrg <funcdef>int *<function>XSetErrorHandler</function></funcdef> 1954e9fcaa8aSmrg <paramdef>int <parameter> *handler</parameter></paramdef> 1955e9fcaa8aSmrg</funcprototype> 1956e9fcaa8aSmrg</funcsynopsis> 1957e9fcaa8aSmrg<!-- .FN --> 1958e9fcaa8aSmrg<variablelist> 1959e9fcaa8aSmrg <varlistentry> 1960e9fcaa8aSmrg <term> 1961e9fcaa8aSmrg <emphasis remap='I'>handler</emphasis> 1962e9fcaa8aSmrg </term> 1963e9fcaa8aSmrg <listitem> 1964e9fcaa8aSmrg <para> 1965e9fcaa8aSmrgSpecifies the program's supplied error handler. 1966e9fcaa8aSmrg </para> 1967e9fcaa8aSmrg </listitem> 1968e9fcaa8aSmrg </varlistentry> 1969e9fcaa8aSmrg</variablelist> 1970e9fcaa8aSmrg</para> 1971e9fcaa8aSmrg<para> 1972e9fcaa8aSmrg<!-- .LP --> 1973e9fcaa8aSmrg<!-- .eM --> 1974e9fcaa8aSmrgXlib generally calls the program's 1975e9fcaa8aSmrgsupplied error handler whenever an error is received. 1976e9fcaa8aSmrgIt is not called on 1977e9fcaa8aSmrg<errorname>BadName</errorname> 1978e9fcaa8aSmrgerrors from 1979e9fcaa8aSmrg<systemitem>OpenFont</systemitem>, 1980e9fcaa8aSmrg<systemitem>LookupColor</systemitem>, 1981e9fcaa8aSmrgor 1982e9fcaa8aSmrg<systemitem>AllocNamedColor</systemitem> 1983e9fcaa8aSmrgprotocol requests or on 1984e9fcaa8aSmrg<errorname>BadFont</errorname> 1985e9fcaa8aSmrgerrors from a 1986e9fcaa8aSmrg<systemitem>QueryFont</systemitem> 1987e9fcaa8aSmrgprotocol request. 1988e9fcaa8aSmrgThese errors generally are reflected back to the program through the 1989e9fcaa8aSmrgprocedural interface. 1990e9fcaa8aSmrgBecause this condition is not assumed to be fatal, 1991e9fcaa8aSmrgit is acceptable for your error handler to return; 1992e9fcaa8aSmrgthe returned value is ignored. 1993e9fcaa8aSmrgHowever, the error handler should not 1994e9fcaa8aSmrgcall any functions (directly or indirectly) on the display 1995e9fcaa8aSmrgthat will generate protocol requests or that will look for input events. 1996e9fcaa8aSmrgThe previous error handler is returned. 1997e9fcaa8aSmrg</para> 1998e9fcaa8aSmrg<para> 1999e9fcaa8aSmrg<!-- .LP --> 2000e9fcaa8aSmrgThe 2001e9fcaa8aSmrg<structname>XErrorEvent</structname> 2002e9fcaa8aSmrgstructure contains: 2003e9fcaa8aSmrg<indexterm><primary>Debugging</primary><secondary>error event</secondary></indexterm> 2004e9fcaa8aSmrg</para> 2005e9fcaa8aSmrg<para> 2006e9fcaa8aSmrg<!-- .LP --> 2007e9fcaa8aSmrg<indexterm significance="preferred"><primary>XErrorEvent</primary></indexterm> 2008e9fcaa8aSmrg<literallayout class="monospaced"> 2009e9fcaa8aSmrg<!-- .TA .5i 2.5i --> 2010e9fcaa8aSmrg<!-- .ta .5i 2.5i --> 2011e9fcaa8aSmrgtypedef struct { 2012e9fcaa8aSmrg int type; 2013e9fcaa8aSmrg Display *display; /* Display the event was read from */ 2014e9fcaa8aSmrg unsigned long serial; /* serial number of failed request */ 2015e9fcaa8aSmrg unsigned char error_code; /* error code of failed request */ 2016e9fcaa8aSmrg unsigned char request_code; /* Major op-code of failed request */ 2017e9fcaa8aSmrg unsigned char minor_code; /* Minor op-code of failed request */ 2018e9fcaa8aSmrg XID resourceid; /* resource id */ 2019e9fcaa8aSmrg} XErrorEvent; 2020e9fcaa8aSmrg</literallayout> 2021e9fcaa8aSmrg</para> 2022e9fcaa8aSmrg<para> 2023e9fcaa8aSmrg<!-- .LP --> 2024e9fcaa8aSmrg<indexterm><primary>Serial Number</primary></indexterm> 2025e9fcaa8aSmrgThe serial member is the number of requests, starting from one, 2026e9fcaa8aSmrgsent over the network connection since it was opened. 2027e9fcaa8aSmrgIt is the number that was the value of 2028e9fcaa8aSmrg<function>NextRequest</function> 2029e9fcaa8aSmrgimmediately before the failing call was made. 2030e9fcaa8aSmrgThe request_code member is a protocol request 2031e9fcaa8aSmrgof the procedure that failed, as defined in 2032e9fcaa8aSmrg< X11/Xproto.h .> 2033e9fcaa8aSmrgThe following error codes can be returned by the functions described in this 2034e9fcaa8aSmrgchapter: 2035e9fcaa8aSmrg</para> 2036e9fcaa8aSmrg<!-- .br --> 2037e9fcaa8aSmrg<!-- .ne 13 --> 2038e9fcaa8aSmrg<indexterm><primary>Debugging</primary><secondary>error numbers</secondary></indexterm> 2039e9fcaa8aSmrg<indexterm><primary>Error</primary><secondary>codes</secondary></indexterm> 2040e9fcaa8aSmrg<!-- .\".CP T 3 --> 2041e9fcaa8aSmrg<!-- .\"Error Codes --> 2042e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadAccess</primary></indexterm> 2043e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadAlloc</primary></indexterm> 2044e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadAtom</primary></indexterm> 2045e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadColor</primary></indexterm> 2046e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadCursor</primary></indexterm> 2047e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadDrawable</primary></indexterm> 2048e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadFont</primary></indexterm> 2049e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadGC</primary></indexterm> 2050e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadIDChoice</primary></indexterm> 2051e9fcaa8aSmrg<informaltable> 2052e9fcaa8aSmrg <tgroup cols='2' align='center'> 2053e9fcaa8aSmrg <colspec colname='c1'/> 2054e9fcaa8aSmrg <colspec colname='c2'/> 2055e9fcaa8aSmrg <thead> 2056e9fcaa8aSmrg <row> 2057e9fcaa8aSmrg <entry>Error Code</entry> 2058e9fcaa8aSmrg <entry>Description</entry> 2059e9fcaa8aSmrg </row> 2060e9fcaa8aSmrg </thead> 2061e9fcaa8aSmrg <tbody> 2062e9fcaa8aSmrg <row> 2063e9fcaa8aSmrg <entry><errorname>BadAccess</errorname></entry> 2064e9fcaa8aSmrg <entry>A client attempts to grab a key/button combination already grabbed 2065e9fcaa8aSmrg by another client.</entry> 2066e9fcaa8aSmrg </row> 2067e9fcaa8aSmrg <row> 2068e9fcaa8aSmrg <entry></entry> 2069e9fcaa8aSmrg <entry>A client attempts to free a colormap entry that it had not already allocated 2070e9fcaa8aSmrg or to free an entry in a colormap that was created with all entries writable.</entry> 2071e9fcaa8aSmrg </row> 2072e9fcaa8aSmrg <row> 2073e9fcaa8aSmrg <entry></entry> 2074e9fcaa8aSmrg <entry>A client attempts to store into a read-only or unallocated colormap entry.</entry> 2075e9fcaa8aSmrg </row> 2076e9fcaa8aSmrg <row> 2077e9fcaa8aSmrg <entry></entry> 2078e9fcaa8aSmrg <entry>A client attempts to modify the access control list from other than the local 2079e9fcaa8aSmrg (or otherwise authorized) host.</entry> 2080e9fcaa8aSmrg </row> 2081e9fcaa8aSmrg <row> 2082e9fcaa8aSmrg <entry></entry> 2083e9fcaa8aSmrg <entry>A client attempts to select an event type that another client 2084e9fcaa8aSmrg has already selected.</entry> 2085e9fcaa8aSmrg </row> 2086e9fcaa8aSmrg <row> 2087e9fcaa8aSmrg <entry><errorname>BadAlloc</errorname></entry> 2088e9fcaa8aSmrg <entry>The server fails to allocate the requested resource. 2089e9fcaa8aSmrg Note that the explicit listing of 2090e9fcaa8aSmrg <errorname>BadAlloc</errorname> 2091e9fcaa8aSmrg errors in requests only covers allocation errors at a very coarse level 2092e9fcaa8aSmrg and is not intended to (nor can it in practice hope to) cover all cases of 2093e9fcaa8aSmrg a server running out of allocation space in the middle of service. 2094e9fcaa8aSmrg The semantics when a server runs out of allocation space are left unspecified, 2095e9fcaa8aSmrg but a server may generate a 2096e9fcaa8aSmrg <errorname>BadAlloc</errorname> 2097e9fcaa8aSmrg error on any request for this reason, 2098e9fcaa8aSmrg and clients should be prepared to receive such errors and handle or discard 2099e9fcaa8aSmrg them.</entry> 2100e9fcaa8aSmrg </row> 2101e9fcaa8aSmrg <row> 2102e9fcaa8aSmrg <entry><errorname>BadAtom</errorname></entry> 2103e9fcaa8aSmrg <entry>A value for an atom argument does not name a defined atom.</entry> 2104e9fcaa8aSmrg </row> 2105e9fcaa8aSmrg <row> 2106e9fcaa8aSmrg <entry><errorname>BadColor</errorname></entry> 2107e9fcaa8aSmrg <entry>A value for a colormap argument does not name a defined colormap.</entry> 2108e9fcaa8aSmrg </row> 2109e9fcaa8aSmrg <row> 2110e9fcaa8aSmrg <entry><errorname>BadCursor</errorname></entry> 2111e9fcaa8aSmrg <entry>A value for a cursor argument does not name a defined cursor.</entry> 2112e9fcaa8aSmrg </row> 2113e9fcaa8aSmrg <row> 2114e9fcaa8aSmrg <entry><errorname>BadDrawable</errorname></entry> 2115e9fcaa8aSmrg <entry>A value for a drawable argument does not name a defined window or pixmap.</entry> 2116e9fcaa8aSmrg </row> 2117e9fcaa8aSmrg <row> 2118e9fcaa8aSmrg <entry><errorname>BadFont</errorname></entry> 2119e9fcaa8aSmrg <entry>A value for a font argument does not name a defined font (or, in some cases, 2120e9fcaa8aSmrg <type>GContext</type>).</entry> 2121e9fcaa8aSmrg </row> 2122e9fcaa8aSmrg <row> 2123e9fcaa8aSmrg <entry><errorname>BadGC</errorname></entry> 2124e9fcaa8aSmrg <entry>A value for a 2125e9fcaa8aSmrg <type>GContext</type> 2126e9fcaa8aSmrg argument does not name a defined 2127e9fcaa8aSmrg <type>GContext</type>.</entry> 2128e9fcaa8aSmrg </row> 2129e9fcaa8aSmrg <row> 2130e9fcaa8aSmrg <entry><errorname>BadIDChoice</errorname></entry> 2131e9fcaa8aSmrg <entry>The value chosen for a resource identifier either is not included in the 2132e9fcaa8aSmrg range assigned to the client or is already in use. 2133e9fcaa8aSmrg Under normal circumstances, 2134e9fcaa8aSmrg this cannot occur and should be considered a server or Xlib error.</entry> 2135e9fcaa8aSmrg </row> 2136e9fcaa8aSmrg <row> 2137e9fcaa8aSmrg <entry><errorname>BadImplementation</errorname></entry> 2138e9fcaa8aSmrg <entry>The server does not implement some aspect of the request. 2139e9fcaa8aSmrg A server that generates this error for a core request is deficient. 2140e9fcaa8aSmrg As such, this error is not listed for any of the requests, 2141e9fcaa8aSmrg but clients should be prepared to receive such errors 2142e9fcaa8aSmrg and handle or discard them.</entry> 2143e9fcaa8aSmrg </row> 2144e9fcaa8aSmrg <row> 2145e9fcaa8aSmrg <entry><errorname>BadLength</errorname></entry> 2146e9fcaa8aSmrg <entry>The length of a request is shorter or longer than that required to 2147e9fcaa8aSmrg contain the arguments. 2148e9fcaa8aSmrg This is an internal Xlib or server error.</entry> 2149e9fcaa8aSmrg </row> 2150e9fcaa8aSmrg <row> 2151e9fcaa8aSmrg <entry></entry> 2152e9fcaa8aSmrg <entry> 2153e9fcaa8aSmrg The length of a request exceeds the maximum length accepted by the server.</entry> 2154e9fcaa8aSmrg </row> 2155e9fcaa8aSmrg <row> 2156e9fcaa8aSmrg <entry><errorname>BadMatch</errorname></entry> 2157e9fcaa8aSmrg <entry>In a graphics request, 2158e9fcaa8aSmrg the root and depth of the graphics context do not match those of the drawable.</entry> 2159e9fcaa8aSmrg </row> 2160e9fcaa8aSmrg <row> 2161e9fcaa8aSmrg <entry></entry> 2162e9fcaa8aSmrg <entry>An <symbol>InputOnly</symbol> window is used as a drawable.</entry> 2163e9fcaa8aSmrg </row> 2164e9fcaa8aSmrg <row> 2165e9fcaa8aSmrg <entry></entry> 2166e9fcaa8aSmrg <entry> 2167e9fcaa8aSmrg Some argument or pair of arguments has the correct type and range, 2168e9fcaa8aSmrg but it fails to match in some other way required by the request.</entry> 2169e9fcaa8aSmrg </row> 2170e9fcaa8aSmrg <row> 2171e9fcaa8aSmrg <entry></entry> 2172e9fcaa8aSmrg <entry>An <symbol>InputOnly</symbol> 2173e9fcaa8aSmrg window lacks this attribute.</entry> 2174e9fcaa8aSmrg </row> 2175e9fcaa8aSmrg <row> 2176e9fcaa8aSmrg <entry><errorname>BadName</errorname></entry> 2177e9fcaa8aSmrg <entry>A font or color of the specified name does not exist.</entry> 2178e9fcaa8aSmrg </row> 2179e9fcaa8aSmrg <row> 2180e9fcaa8aSmrg <entry><errorname>BadPixmap</errorname></entry> 2181e9fcaa8aSmrg <entry>A value for a pixmap argument does not name a defined pixmap.</entry> 2182e9fcaa8aSmrg </row> 2183e9fcaa8aSmrg <row> 2184e9fcaa8aSmrg <entry><errorname>BadRequest</errorname></entry> 2185e9fcaa8aSmrg <entry>The major or minor opcode does not specify a valid request. 2186e9fcaa8aSmrg This usually is an Xlib or server error.</entry> 2187e9fcaa8aSmrg </row> 2188e9fcaa8aSmrg <row> 2189e9fcaa8aSmrg <entry><errorname>BadValue</errorname></entry> 2190e9fcaa8aSmrg <entry>Some numeric value falls outside of the range of values accepted 2191e9fcaa8aSmrg by the request. 2192e9fcaa8aSmrg Unless a specific range is specified for an argument, 2193e9fcaa8aSmrg the full range defined by the argument's type is accepted. 2194e9fcaa8aSmrg Any argument defined as a set of alternatives typically can generate 2195e9fcaa8aSmrg this error (due to the encoding).</entry> 2196e9fcaa8aSmrg </row> 2197e9fcaa8aSmrg <row> 2198e9fcaa8aSmrg <entry><errorname>BadWindow</errorname></entry> 2199e9fcaa8aSmrg <entry>A value for a window argument does not name a defined window.</entry> 2200e9fcaa8aSmrg </row> 2201e9fcaa8aSmrg </tbody> 2202e9fcaa8aSmrg </tgroup> 2203e9fcaa8aSmrg</informaltable> 2204e9fcaa8aSmrg 2205e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadImplementation</primary></indexterm> 2206e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadLength</primary></indexterm> 2207e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadMatch</primary></indexterm> 2208e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadName</primary></indexterm> 2209e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadPixmap</primary></indexterm> 2210e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadRequest</primary></indexterm> 2211e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadValue</primary></indexterm> 2212e9fcaa8aSmrg<indexterm significance="preferred"><primary>BadWindow</primary></indexterm> 2213e9fcaa8aSmrg<!-- .NT Note --> 2214e9fcaa8aSmrg 2215e9fcaa8aSmrg<note> 2216e9fcaa8aSmrg<para> 2217e9fcaa8aSmrgThe 2218e9fcaa8aSmrg<errorname>BadAtom</errorname>, 2219e9fcaa8aSmrg<errorname>BadColor</errorname>, 2220e9fcaa8aSmrg<errorname>BadCursor</errorname>, 2221e9fcaa8aSmrg<errorname>BadDrawable</errorname>, 2222e9fcaa8aSmrg<errorname>BadFont</errorname>, 2223e9fcaa8aSmrg<errorname>BadGC</errorname>, 2224e9fcaa8aSmrg<errorname>BadPixmap</errorname>, 2225e9fcaa8aSmrgand 2226e9fcaa8aSmrg<errorname>BadWindow</errorname> 2227e9fcaa8aSmrgerrors are also used when the argument type is extended by a set of 2228e9fcaa8aSmrgfixed alternatives. 2229e9fcaa8aSmrg</para> 2230e9fcaa8aSmrg</note> 2231e9fcaa8aSmrg 2232e9fcaa8aSmrg<!-- .NE --> 2233e9fcaa8aSmrg<!-- .sp --> 2234e9fcaa8aSmrg<para> 2235e9fcaa8aSmrg<!-- .LP --> 2236e9fcaa8aSmrgTo obtain textual descriptions of the specified error code, use 2237e9fcaa8aSmrg<function>XGetErrorText</function>. 2238e9fcaa8aSmrg<indexterm significance="preferred"><primary>XGetErrorText</primary></indexterm> 2239e9fcaa8aSmrg<indexterm><primary>Debugging</primary><secondary>error message strings</secondary></indexterm> 2240e9fcaa8aSmrg<!-- .sM --> 2241e9fcaa8aSmrg<funcsynopsis> 2242e9fcaa8aSmrg<funcprototype> 2243e9fcaa8aSmrg <funcdef><function>XGetErrorText</function></funcdef> 2244e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 2245e9fcaa8aSmrg <paramdef>int<parameter> code</parameter></paramdef> 2246e9fcaa8aSmrg <paramdef>char<parameter> *buffer_return</parameter></paramdef> 2247e9fcaa8aSmrg <paramdef>int<parameter> length</parameter></paramdef> 2248e9fcaa8aSmrg</funcprototype> 2249e9fcaa8aSmrg</funcsynopsis> 2250e9fcaa8aSmrg<!-- .FN --> 2251e9fcaa8aSmrg<variablelist> 2252e9fcaa8aSmrg <varlistentry> 2253e9fcaa8aSmrg <term> 2254e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 2255e9fcaa8aSmrg </term> 2256e9fcaa8aSmrg <listitem> 2257e9fcaa8aSmrg <para> 2258e9fcaa8aSmrgSpecifies the connection to the X server. 2259e9fcaa8aSmrg </para> 2260e9fcaa8aSmrg </listitem> 2261e9fcaa8aSmrg </varlistentry> 2262e9fcaa8aSmrg <varlistentry> 2263e9fcaa8aSmrg <term> 2264e9fcaa8aSmrg <emphasis remap='I'>code</emphasis> 2265e9fcaa8aSmrg </term> 2266e9fcaa8aSmrg <listitem> 2267e9fcaa8aSmrg <para> 2268e9fcaa8aSmrgSpecifies the error code for which you want to obtain a description. 2269e9fcaa8aSmrg </para> 2270e9fcaa8aSmrg </listitem> 2271e9fcaa8aSmrg </varlistentry> 2272e9fcaa8aSmrg <varlistentry> 2273e9fcaa8aSmrg <term> 2274e9fcaa8aSmrg <emphasis remap='I'>buffer_return</emphasis> 2275e9fcaa8aSmrg </term> 2276e9fcaa8aSmrg <listitem> 2277e9fcaa8aSmrg <para> 2278e9fcaa8aSmrgReturns the error description. 2279e9fcaa8aSmrg </para> 2280e9fcaa8aSmrg </listitem> 2281e9fcaa8aSmrg </varlistentry> 2282e9fcaa8aSmrg <varlistentry> 2283e9fcaa8aSmrg <term> 2284e9fcaa8aSmrg <emphasis remap='I'>length</emphasis> 2285e9fcaa8aSmrg </term> 2286e9fcaa8aSmrg <listitem> 2287e9fcaa8aSmrg <para> 2288e9fcaa8aSmrgSpecifies the size of the buffer. 2289e9fcaa8aSmrg </para> 2290e9fcaa8aSmrg </listitem> 2291e9fcaa8aSmrg </varlistentry> 2292e9fcaa8aSmrg</variablelist> 2293e9fcaa8aSmrg</para> 2294e9fcaa8aSmrg<para> 2295e9fcaa8aSmrg<!-- .LP --> 2296e9fcaa8aSmrg<!-- .eM --> 2297e9fcaa8aSmrgThe 2298e9fcaa8aSmrg<function>XGetErrorText</function> 2299e9fcaa8aSmrgfunction copies a null-terminated string describing the specified error code 2300e9fcaa8aSmrginto the specified buffer. 2301e9fcaa8aSmrgThe returned text is in the encoding of the current locale. 2302e9fcaa8aSmrgIt is recommended that you use this function to obtain an error description 2303e9fcaa8aSmrgbecause extensions to Xlib may define their own error codes 2304e9fcaa8aSmrgand error strings. 2305e9fcaa8aSmrg</para> 2306e9fcaa8aSmrg<para> 2307e9fcaa8aSmrg<!-- .LP --> 2308e9fcaa8aSmrg<!-- .sp --> 2309e9fcaa8aSmrgTo obtain error messages from the error database, use 2310e9fcaa8aSmrg<function>XGetErrorDatabaseText</function>. 2311e9fcaa8aSmrg<indexterm significance="preferred"><primary>XGetErrorDatabaseText</primary></indexterm> 2312e9fcaa8aSmrg<!-- .sM --> 2313e9fcaa8aSmrg<funcsynopsis> 2314e9fcaa8aSmrg<funcprototype> 2315e9fcaa8aSmrg <funcdef><function>XGetErrorDatabaseText</function></funcdef> 2316e9fcaa8aSmrg <paramdef>Display<parameter> *display</parameter></paramdef> 2317e9fcaa8aSmrg <paramdef>char*name,<parameter> *message</parameter></paramdef> 2318e9fcaa8aSmrg <paramdef>char<parameter> *default_string</parameter></paramdef> 2319e9fcaa8aSmrg <paramdef>char<parameter> *buffer_return</parameter></paramdef> 2320e9fcaa8aSmrg <paramdef>int<parameter> length</parameter></paramdef> 2321e9fcaa8aSmrg</funcprototype> 2322e9fcaa8aSmrg</funcsynopsis> 2323e9fcaa8aSmrg<!-- .FN --> 2324e9fcaa8aSmrg<variablelist> 2325e9fcaa8aSmrg <varlistentry> 2326e9fcaa8aSmrg <term> 2327e9fcaa8aSmrg <emphasis remap='I'>display</emphasis> 2328e9fcaa8aSmrg </term> 2329e9fcaa8aSmrg <listitem> 2330e9fcaa8aSmrg <para> 2331e9fcaa8aSmrgSpecifies the connection to the X server. 2332e9fcaa8aSmrg </para> 2333e9fcaa8aSmrg </listitem> 2334e9fcaa8aSmrg </varlistentry> 2335e9fcaa8aSmrg <varlistentry> 2336e9fcaa8aSmrg <term> 2337e9fcaa8aSmrg <emphasis remap='I'>name</emphasis> 2338e9fcaa8aSmrg </term> 2339e9fcaa8aSmrg <listitem> 2340e9fcaa8aSmrg <para> 2341e9fcaa8aSmrgSpecifies the name of the application. 2342e9fcaa8aSmrg </para> 2343e9fcaa8aSmrg </listitem> 2344e9fcaa8aSmrg </varlistentry> 2345e9fcaa8aSmrg <varlistentry> 2346e9fcaa8aSmrg <term> 2347e9fcaa8aSmrg <emphasis remap='I'>message</emphasis> 2348e9fcaa8aSmrg </term> 2349e9fcaa8aSmrg <listitem> 2350e9fcaa8aSmrg <para> 2351e9fcaa8aSmrgSpecifies the type of the error message. 2352e9fcaa8aSmrg </para> 2353e9fcaa8aSmrg </listitem> 2354e9fcaa8aSmrg </varlistentry> 2355e9fcaa8aSmrg <varlistentry> 2356e9fcaa8aSmrg <term> 2357e9fcaa8aSmrg <emphasis remap='I'>default_string</emphasis> 2358e9fcaa8aSmrg </term> 2359e9fcaa8aSmrg <listitem> 2360e9fcaa8aSmrg <para> 2361e9fcaa8aSmrgSpecifies the default error message if none is found in the database. 2362e9fcaa8aSmrg </para> 2363e9fcaa8aSmrg </listitem> 2364e9fcaa8aSmrg </varlistentry> 2365e9fcaa8aSmrg <varlistentry> 2366e9fcaa8aSmrg <term> 2367e9fcaa8aSmrg <emphasis remap='I'>buffer_return</emphasis> 2368e9fcaa8aSmrg </term> 2369e9fcaa8aSmrg <listitem> 2370e9fcaa8aSmrg <para> 2371e9fcaa8aSmrgReturns the error description. 2372e9fcaa8aSmrg </para> 2373e9fcaa8aSmrg </listitem> 2374e9fcaa8aSmrg </varlistentry> 2375e9fcaa8aSmrg <varlistentry> 2376e9fcaa8aSmrg <term> 2377e9fcaa8aSmrg <emphasis remap='I'>length</emphasis> 2378e9fcaa8aSmrg </term> 2379e9fcaa8aSmrg <listitem> 2380e9fcaa8aSmrg <para> 2381e9fcaa8aSmrgSpecifies the size of the buffer. 2382e9fcaa8aSmrg </para> 2383e9fcaa8aSmrg </listitem> 2384e9fcaa8aSmrg </varlistentry> 2385e9fcaa8aSmrg</variablelist> 2386e9fcaa8aSmrg</para> 2387e9fcaa8aSmrg<para> 2388e9fcaa8aSmrg<!-- .LP --> 2389e9fcaa8aSmrg<!-- .eM --> 2390e9fcaa8aSmrgThe 2391e9fcaa8aSmrg<function>XGetErrorDatabaseText</function> 2392e9fcaa8aSmrgfunction returns a null-terminated message 2393e9fcaa8aSmrg(or the default message) from the error message 2394e9fcaa8aSmrgdatabase. 2395e9fcaa8aSmrgXlib uses this function internally to look up its error messages. 2396e9fcaa8aSmrgThe text in the default_string argument is assumed 2397e9fcaa8aSmrgto be in the encoding of the current locale, 2398e9fcaa8aSmrgand the text stored in the buffer_return argument 2399e9fcaa8aSmrgis in the encoding of the current locale. 2400e9fcaa8aSmrg</para> 2401e9fcaa8aSmrg<para> 2402e9fcaa8aSmrg<!-- .LP --> 2403e9fcaa8aSmrgThe name argument should generally be the name of your application. 2404e9fcaa8aSmrgThe message argument should indicate which type of error message you want. 2405e9fcaa8aSmrgIf the name and message are not in the Host Portable Character Encoding, 2406e9fcaa8aSmrgthe result is implementation-dependent. 2407e9fcaa8aSmrgXlib uses three predefined ``application names'' to report errors. 2408e9fcaa8aSmrgIn these names, 2409e9fcaa8aSmrguppercase and lowercase matter. 2410e9fcaa8aSmrg<variablelist> 2411e9fcaa8aSmrg <varlistentry> 2412e9fcaa8aSmrg <term> 2413e9fcaa8aSmrg XProtoError 2414e9fcaa8aSmrg </term> 2415e9fcaa8aSmrg <listitem> 2416e9fcaa8aSmrg <para> 2417e9fcaa8aSmrgThe protocol error number is used as a string for the message argument. 2418e9fcaa8aSmrg </para> 2419e9fcaa8aSmrg </listitem> 2420e9fcaa8aSmrg </varlistentry> 2421e9fcaa8aSmrg <varlistentry> 2422e9fcaa8aSmrg <term> 2423e9fcaa8aSmrg XlibMessage 2424e9fcaa8aSmrg </term> 2425e9fcaa8aSmrg <listitem> 2426e9fcaa8aSmrg <para> 2427e9fcaa8aSmrgThese are the message strings that are used internally by the library. 2428e9fcaa8aSmrg </para> 2429e9fcaa8aSmrg </listitem> 2430e9fcaa8aSmrg </varlistentry> 2431e9fcaa8aSmrg <varlistentry> 2432e9fcaa8aSmrg <term> 2433e9fcaa8aSmrg XRequest 2434e9fcaa8aSmrg </term> 2435e9fcaa8aSmrg <listitem> 2436e9fcaa8aSmrg <para> 2437e9fcaa8aSmrgFor a core protocol request, 2438e9fcaa8aSmrgthe major request protocol number is used for the message argument. 2439e9fcaa8aSmrgFor an extension request, 2440e9fcaa8aSmrgthe extension name (as given by 2441e9fcaa8aSmrg<function>InitExtension</function>) 2442e9fcaa8aSmrgfollowed by a period (.) and the minor request protocol number 2443e9fcaa8aSmrgis used for the message argument. 2444e9fcaa8aSmrgIf no string is found in the error database, 2445e9fcaa8aSmrgthe default_string is returned to the buffer argument. 2446e9fcaa8aSmrg </para> 2447e9fcaa8aSmrg </listitem> 2448e9fcaa8aSmrg </varlistentry> 2449e9fcaa8aSmrg</variablelist> 2450e9fcaa8aSmrg</para> 2451e9fcaa8aSmrg<para> 2452e9fcaa8aSmrg<!-- .LP --> 2453e9fcaa8aSmrg<!-- .sp --> 2454e9fcaa8aSmrgTo report an error to the user when the requested display does not exist, use 2455e9fcaa8aSmrg<function>XDisplayName</function>. 2456e9fcaa8aSmrg<indexterm significance="preferred"><primary>XDisplayName</primary></indexterm> 2457e9fcaa8aSmrg<!-- .sM --> 2458e9fcaa8aSmrg<funcsynopsis> 2459e9fcaa8aSmrg<funcprototype> 2460e9fcaa8aSmrg <funcdef>char *<function>XDisplayName</function></funcdef> 2461e9fcaa8aSmrg <paramdef>char<parameter> *string</parameter></paramdef> 2462e9fcaa8aSmrg</funcprototype> 2463e9fcaa8aSmrg</funcsynopsis> 2464e9fcaa8aSmrg<!-- .FN --> 2465e9fcaa8aSmrg<variablelist> 2466e9fcaa8aSmrg <varlistentry> 2467e9fcaa8aSmrg <term> 2468e9fcaa8aSmrg <emphasis remap='I'>string</emphasis> 2469e9fcaa8aSmrg </term> 2470e9fcaa8aSmrg <listitem> 2471e9fcaa8aSmrg <para> 2472e9fcaa8aSmrgSpecifies the character string. 2473e9fcaa8aSmrg </para> 2474e9fcaa8aSmrg </listitem> 2475e9fcaa8aSmrg </varlistentry> 2476e9fcaa8aSmrg</variablelist> 2477e9fcaa8aSmrg</para> 2478e9fcaa8aSmrg<para> 2479e9fcaa8aSmrg<!-- .LP --> 2480e9fcaa8aSmrg<!-- .eM --> 2481e9fcaa8aSmrgThe 2482e9fcaa8aSmrg<function>XDisplayName</function> 2483e9fcaa8aSmrgfunction returns the name of the display that 2484e9fcaa8aSmrg<function>XOpenDisplay</function> 2485e9fcaa8aSmrgwould attempt to use. 2486e9fcaa8aSmrgIf a NULL string is specified, 2487e9fcaa8aSmrg<function>XDisplayName</function> 2488e9fcaa8aSmrglooks in the environment for the display and returns the display name that 2489e9fcaa8aSmrg<function>XOpenDisplay</function> 2490e9fcaa8aSmrgwould attempt to use. 2491e9fcaa8aSmrgThis makes it easier to report to the user precisely which display the 2492e9fcaa8aSmrgprogram attempted to open when the initial connection attempt failed. 2493e9fcaa8aSmrg</para> 2494e9fcaa8aSmrg<para> 2495e9fcaa8aSmrg<!-- .LP --> 2496e9fcaa8aSmrg<!-- .sp --> 2497e9fcaa8aSmrgTo handle fatal I/O errors, use 2498e9fcaa8aSmrg<function>XSetIOErrorHandler</function>. 2499e9fcaa8aSmrg<indexterm significance="preferred"><primary>XSetIOErrorHandler</primary></indexterm> 2500e9fcaa8aSmrg<!-- .sM --> 2501e9fcaa8aSmrg<funcsynopsis> 2502e9fcaa8aSmrg<funcprototype> 2503e9fcaa8aSmrg <funcdef><type>int</type></funcdef> 2504e9fcaa8aSmrg <paramdef>int(*handler)(Display<parameter> *)</parameter></paramdef> 2505e9fcaa8aSmrg</funcprototype> 2506e9fcaa8aSmrg</funcsynopsis> 2507e9fcaa8aSmrg<!-- .FN --> 2508e9fcaa8aSmrg<variablelist> 2509e9fcaa8aSmrg <varlistentry> 2510e9fcaa8aSmrg <term> 2511e9fcaa8aSmrg <emphasis remap='I'>handler</emphasis> 2512e9fcaa8aSmrg </term> 2513e9fcaa8aSmrg <listitem> 2514e9fcaa8aSmrg <para> 2515e9fcaa8aSmrgSpecifies the program's supplied error handler. 2516e9fcaa8aSmrg </para> 2517e9fcaa8aSmrg </listitem> 2518e9fcaa8aSmrg </varlistentry> 2519e9fcaa8aSmrg</variablelist> 2520e9fcaa8aSmrg</para> 2521e9fcaa8aSmrg<para> 2522e9fcaa8aSmrg<!-- .LP --> 2523e9fcaa8aSmrg<!-- .eM --> 2524e9fcaa8aSmrgThe 2525e9fcaa8aSmrg<function>XSetIOErrorHandler</function> 2526e9fcaa8aSmrgsets the fatal I/O error handler. 2527e9fcaa8aSmrgXlib calls the program's supplied error handler if any sort of system call 2528e9fcaa8aSmrgerror occurs (for example, the connection to the server was lost). 2529e9fcaa8aSmrgThis is assumed to be a fatal condition, 2530e9fcaa8aSmrgand the called routine should not return. 2531e9fcaa8aSmrgIf the I/O error handler does return, 2532e9fcaa8aSmrgthe client process exits. 2533e9fcaa8aSmrg</para> 2534e9fcaa8aSmrg<para> 2535e9fcaa8aSmrg<!-- .LP --> 2536e9fcaa8aSmrgNote that the previous error handler is returned. 2537e9fcaa8aSmrg<!-- .bp --> 2538e9fcaa8aSmrg 2539e9fcaa8aSmrg</para> 2540e9fcaa8aSmrg</sect2> 2541e9fcaa8aSmrg</sect1> 2542e9fcaa8aSmrg</chapter> 2543