diff options
Diffstat (limited to 'libX11/specs/libX11/CH10')
-rw-r--r-- | libX11/specs/libX11/CH10 | 3886 |
1 files changed, 3886 insertions, 0 deletions
diff --git a/libX11/specs/libX11/CH10 b/libX11/specs/libX11/CH10 new file mode 100644 index 000000000..76502fb9e --- /dev/null +++ b/libX11/specs/libX11/CH10 @@ -0,0 +1,3886 @@ +.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium +.\" +.\" Permission is hereby granted, free of charge, to any person obtaining +.\" a copy of this software and associated documentation files (the +.\" "Software"), to deal in the Software without restriction, including +.\" without limitation the rights to use, copy, modify, merge, publish, +.\" distribute, sublicense, and/or sell copies of the Software, and to +.\" permit persons to whom the Software is furnished to do so, subject to +.\" the following conditions: +.\" +.\" The above copyright notice and this permission notice shall be included +.\" in all copies or substantial portions of the Software. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +.\" OTHER DEALINGS IN THE SOFTWARE. +.\" +.\" Except as contained in this notice, the name of the X Consortium shall +.\" not be used in advertising or otherwise to promote the sale, use or +.\" other dealings in this Software without prior written authorization +.\" from the X Consortium. +.\" +.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +.\" Digital Equipment Corporation +.\" +.\" Portions Copyright \(co 1990, 1991 by +.\" Tektronix, Inc. +.\" +.\" Permission to use, copy, modify and distribute this documentation for +.\" any purpose and without fee is hereby granted, provided that the above +.\" copyright notice appears in all copies and that both that copyright notice +.\" and this permission notice appear in all copies, and that the names of +.\" Digital and Tektronix not be used in in advertising or publicity pertaining +.\" to this documentation without specific, written prior permission. +.\" Digital and Tektronix makes no representations about the suitability +.\" of this documentation for any purpose. +.\" It is provided ``as is'' without express or implied warranty. +.\" +\& +.sp 1 +.ce 3 +\s+1\fBChapter 10\fP\s-1 + +\s+1\fBEvents\fP\s-1 +.sp 2 +.nr H1 10 +.nr H2 0 +.nr H3 0 +.nr H4 0 +.nr H5 0 +.na +.LP +.XS +Chapter 10: Events +.XE +A client application communicates with the X server through the connection you +establish with the +.PN XOpenDisplay +.IN "XOpenDisplay" +function. +A client application sends requests to the X server over this connection. +.IN "Requests" "" "@DEF@" +These requests are made by the Xlib functions that are +called in the client application. +Many Xlib functions cause the X server to generate events, +and the user's typing or moving the pointer can generate events asynchronously. +The X server returns events to the client on the same connection. +.LP +This chapter discusses the following topics associated with events: +.IP \(bu 5 +Event types +.IP \(bu 5 +Event structures +.IP \(bu 5 +Event masks +.IP \(bu 5 +Event processing +.LP +Functions for handling events are dealt with in the next chapter. +.NH 2 +Event Types +.XS +\*(SN Event Types +.XE +.LP +.IN "Event" "types" +An event is data generated asynchronously by the X server as a result of some +device activity or as side effects of a request sent by an Xlib function. +.IN "Event" +Device-related events propagate from the source window to ancestor windows +until some client application has selected that event type +or until the event is explicitly discarded. +The X server generally sends an event to a client application +only if the client has specifically asked to be informed of that event type, +typically by setting the event-mask attribute of the window. +The mask can also be set when you create a window +or by changing the window's +event-mask. +You can also mask out events that would propagate to ancestor windows +by manipulating the +do-not-propagate mask of the window's attributes. +However, +.PN MappingNotify +events are always sent to all clients. +.IN "Input Control" +.IN "Output Control" +.LP +An event type describes a specific event generated by the X server. +For each event type, +a corresponding constant name is defined in +.hN X11/X.h , +which is used when referring to an event type. +.IN "Event" "categories" +The following table lists the event category +and its associated event type or types. +The processing associated with these events is discussed in section 10.5. +.LP +.\".CP T 1 +.\"Event Categories and Event Types +.LP +.TS H +lw(2.25i) lw(3.5i). +_ +.sp 6p +.B +Event Category Event Type +.sp 6p +_ +.sp 6p +.TH +.R +T{ +Keyboard events +T} T{ +.PN KeyPress , +.PN KeyRelease +T} +.sp 6p +T{ +Pointer events +T} T{ +.PN ButtonPress , +.PN ButtonRelease , +.PN MotionNotify +T} +.sp 6p +T{ +Window crossing events +T} T{ +.PN EnterNotify , +.PN LeaveNotify +T} +.sp 6p +T{ +Input focus events +T} T{ +.PN FocusIn , +.PN FocusOut +T} +.sp 6p +T{ +Keymap state notification event +T} T{ +.PN KeymapNotify +T} +.sp 6p +T{ +Exposure events +T} T{ +.PN Expose , +.PN GraphicsExpose , +.PN NoExpose +T} +.sp 6p +T{ +Structure control events +T} T{ +.PN CirculateRequest , +.PN ConfigureRequest , +.PN MapRequest , +.PN ResizeRequest +T} +.sp 6p +T{ +Window state notification events +T} T{ +.PN CirculateNotify , +.PN ConfigureNotify , +.PN CreateNotify , +.PN DestroyNotify , +.PN GravityNotify , +.PN MapNotify , +.PN MappingNotify , +.PN ReparentNotify , +.PN UnmapNotify , +.br +.PN VisibilityNotify +T} +.sp 6p +T{ +Colormap state notification event +T} T{ +.PN ColormapNotify +T} +.sp 6p +T{ +Client communication events +T} T{ +.PN ClientMessage , +.PN PropertyNotify , +.PN SelectionClear , +.PN SelectionNotify , +.PN SelectionRequest +T} +.sp 6p +_ +.TE +.\".LP +.\"Table 8-1 lists the event types and the Xlib functions that could cause +.\"the X server to generate that event type. +.\"The event types are listed alphabetically. +.\"Note that the error event is not listed in this table. +.\"For a list of the constants associated with an error event, see the Handling +.\"Errors section in this chapter. +.\".LP +.\".so eventtable +.NH 2 +Event Structures +.XS +\*(SN Event Structures +.XE +.LP +For each event type, +a corresponding structure is declared in +.hN X11/Xlib.h . +All the event structures have the following common members: +.LP +.IN "XAnyEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; +} XAnyEvent; +.De +.LP +.eM +The type member is set to the event type constant name that uniquely identifies +it. +For example, when the X server reports a +.PN GraphicsExpose +event to a client application, it sends an +.PN XGraphicsExposeEvent +structure with the type member set to +.PN GraphicsExpose . +The display member is set to a pointer to the display the event was read on. +The send_event member is set to +.PN True +if the event came from a +.PN SendEvent +protocol request. +The serial member is set from the serial number reported in the protocol +but expanded from the 16-bit least-significant bits to a full 32-bit value. +The window member is set to the window that is most useful to toolkit +dispatchers. +.LP +The X server can send events at any time in the input stream. +Xlib stores any events received while waiting for a reply in an event queue +for later use. +Xlib also provides functions that allow you to check events +in the event queue (see section 11.3). +.LP +In addition to the individual structures declared for each event type, the +.PN XEvent +structure is a union of the individual structures declared for each event type. +Depending on the type, +you should access members of each event by using the +.PN XEvent +union. +.LP +.IN "XEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef union _XEvent { + int type; /* must not be changed */ + XAnyEvent xany; + XKeyEvent xkey; + XButtonEvent xbutton; + XMotionEvent xmotion; + XCrossingEvent xcrossing; + XFocusChangeEvent xfocus; + XExposeEvent xexpose; + XGraphicsExposeEvent xgraphicsexpose; + XNoExposeEvent xnoexpose; + XVisibilityEvent xvisibility; + XCreateWindowEvent xcreatewindow; + XDestroyWindowEvent xdestroywindow; + XUnmapEvent xunmap; + XMapEvent xmap; + XMapRequestEvent xmaprequest; + XReparentEvent xreparent; + XConfigureEvent xconfigure; + XGravityEvent xgravity; + XResizeRequestEvent xresizerequest; + XConfigureRequestEvent xconfigurerequest; + XCirculateEvent xcirculate; + XCirculateRequestEvent xcirculaterequest; + XPropertyEvent xproperty; + XSelectionClearEvent xselectionclear; + XSelectionRequestEvent xselectionrequest; + XSelectionEvent xselection; + XColormapEvent xcolormap; + XClientMessageEvent xclient; + XMappingEvent xmapping; + XErrorEvent xerror; + XKeymapEvent xkeymap; + long pad[24]; +} XEvent; +.De +.LP +.eM +An +.PN XEvent +structure's first entry always is the type member, +which is set to the event type. +The second member always is the serial number of the protocol request +that generated the event. +The third member always is send_event, +which is a +.PN Bool +that indicates if the event was sent by a different client. +The fourth member always is a display, +which is the display that the event was read from. +Except for keymap events, +the fifth member always is a window, +which has been carefully selected to be useful to toolkit dispatchers. +To avoid breaking toolkits, +the order of these first five entries is not to change. +Most events also contain a time member, +which is the time at which an event occurred. +In addition, a pointer to the generic event must be cast before it +is used to access any other information in the structure. +.NH 2 +Event Masks +.XS +\*(SN Event Masks +.XE +.LP +.IN "Event mask" "" "@DEF@" +Clients select event reporting of most events relative to a window. +To do this, pass an event mask to an Xlib event-handling +function that takes an event_mask argument. +The bits of the event mask are defined in +.hN X11/X.h . +Each bit in the event mask maps to an event mask name, +which describes the event or events you want the X server to +return to a client application. +.LP +Unless the client has specifically asked for them, +most events are not reported to clients when they are generated. +Unless the client suppresses them by setting graphics-exposures in the GC to +.PN False , +.PN GraphicsExpose +and +.PN NoExpose +are reported by default as a result of +.PN XCopyPlane +and +.PN XCopyArea . +.PN SelectionClear , +.PN SelectionRequest , +.PN SelectionNotify , +or +.PN ClientMessage +cannot be masked. +Selection-related events are only sent to clients cooperating +with selections (see section 4.5). +When the keyboard or pointer mapping is changed, +.PN MappingNotify +is always sent to clients. +.LP +.\"Table 8-2 +The following table +lists the event mask constants you can pass to +the event_mask argument and +the circumstances in which you would want to specify the +event mask: +.LP +.\" .CP T 2 +.\"Event Mask Definitions +.TS H +lw(2i) lw(3.5i). +_ +.sp 6p +.B +Event Mask Circumstances +.sp 6p +_ +.sp 6p +.TH +.R +T{ +.PN NoEventMask +T} T{ +No events wanted +T} +T{ +.PN KeyPressMask +T} T{ +Keyboard down events wanted +T} +T{ +.PN KeyReleaseMask +T} T{ +Keyboard up events wanted +T} +T{ +.PN ButtonPressMask +T} T{ +Pointer button down events wanted +T} +T{ +.PN ButtonReleaseMask +T} T{ +Pointer button up events wanted +T} +T{ +.PN EnterWindowMask +T} T{ +Pointer window entry events wanted +T} +T{ +.PN LeaveWindowMask +T} T{ +Pointer window leave events wanted +T} +T{ +.PN PointerMotionMask +T} T{ +Pointer motion events wanted +T} +T{ +.PN PointerMotionHintMask +T} T{ +Pointer motion hints wanted +T} +T{ +.PN Button1MotionMask +T} T{ +Pointer motion while button 1 down +T} +T{ +.PN Button2MotionMask +T} T{ +Pointer motion while button 2 down +T} +T{ +.PN Button3MotionMask +T} T{ +Pointer motion while button 3 down +T} +T{ +.PN Button4MotionMask +T} T{ +Pointer motion while button 4 down +T} +T{ +.PN Button5MotionMask +T} T{ +Pointer motion while button 5 down +T} +T{ +.PN ButtonMotionMask +T} T{ +Pointer motion while any button down +T} +T{ +.PN KeymapStateMask +T} T{ +Keyboard state wanted at window entry and focus in +T} +T{ +.PN ExposureMask +T} T{ +Any exposure wanted +T} +T{ +.PN VisibilityChangeMask +T} T{ +Any change in visibility wanted +T} +T{ +.PN StructureNotifyMask +T} T{ +Any change in window structure wanted +T} +T{ +.PN ResizeRedirectMask +T} T{ +Redirect resize of this window +T} +T{ +.PN SubstructureNotifyMask +T} T{ +Substructure notification wanted +T} +T{ +.PN SubstructureRedirectMask +T} T{ +Redirect structure requests on children +T} +T{ +.PN FocusChangeMask +T} T{ +Any change in input focus wanted +T} +T{ +.PN PropertyChangeMask +T} T{ +Any change in property wanted +T} +T{ +.PN ColormapChangeMask +T} T{ +Any change in colormap wanted +T} +T{ +.PN OwnerGrabButtonMask +T} T{ +Automatic grabs should activate with owner_events set to +.PN True +T} +.sp 6p +_ +.TE +.LP +.NH 2 +Event Processing Overview +.XS +\*(SN Event Processing Overview +.XE +.LP +The event reported to a client application during event processing +depends on which event masks you provide as the event-mask attribute +for a window. +For some event masks, there is a one-to-one correspondence between +the event mask constant and the event type constant. +For example, if you pass the event mask +.PN ButtonPressMask , +the X server sends back only +.PN ButtonPress +events. +.IN "CurrentTime" +Most events contain a time member, +which is the time at which an event occurred. +.LP +In other cases, one event mask constant can map to several event type constants. +For example, if you pass the event mask +.PN SubstructureNotifyMask , +the X server can send back +.PN CirculateNotify , +.PN ConfigureNotify , +.PN CreateNotify , +.PN DestroyNotify , +.PN GravityNotify , +.PN MapNotify , +.PN ReparentNotify , +or +.PN UnmapNotify +events. +.LP +In another case, +two event masks can map to one event type. +For example, +if you pass either +.PN PointerMotionMask +or +.PN ButtonMotionMask , +the X server sends back +a +.PN MotionNotify +event. +.LP +The following table +lists the event mask, +its associated event type or types, +and the structure name associated with the event type. +Some of these structures actually are typedefs to a generic structure +that is shared between two event types. +Note that N.A. appears in columns for which the information is not applicable. +.LP +.ps 9 +.nr PS 9 +.TS H +lw(1.5i) lw(1i) lw(1.5i) lw(1.5i). +_ +.sp 6p +.B +Event Mask Event Type Structure Generic Structure +.sp 6p +_ +.sp 6p +.TH +.R +ButtonMotionMask MotionNotify XPointerMovedEvent XMotionEvent +Button1MotionMask +Button2MotionMask +Button3MotionMask +Button4MotionMask +Button5MotionMask +.sp 6p +ButtonPressMask ButtonPress XButtonPressedEvent XButtonEvent +.sp 6p +ButtonReleaseMask ButtonRelease XButtonReleasedEvent XButtonEvent +.sp 6p +ColormapChangeMask ColormapNotify XColormapEvent +.sp 6p +EnterWindowMask EnterNotify XEnterWindowEvent XCrossingEvent +.sp 6p +LeaveWindowMask LeaveNotify XLeaveWindowEvent XCrossingEvent +.sp 6p +ExposureMask Expose XExposeEvent +GCGraphicsExposures in GC GraphicsExpose XGraphicsExposeEvent + NoExpose XNoExposeEvent +.sp 6p +FocusChangeMask FocusIn XFocusInEvent XFocusChangeEvent + FocusOut XFocusOutEvent XFocusChangeEvent +.sp 6p +KeymapStateMask KeymapNotify XKeymapEvent +.sp 6p +KeyPressMask KeyPress XKeyPressedEvent XKeyEvent +KeyReleaseMask KeyRelease XKeyReleasedEvent XKeyEvent +.sp 6p +OwnerGrabButtonMask N.A. N.A. +.sp 6p +PointerMotionMask MotionNotify XPointerMovedEvent XMotionEvent +PointerMotionHintMask N.A. N.A. +.sp 6p +PropertyChangeMask PropertyNotify XPropertyEvent +.sp 6p +ResizeRedirectMask ResizeRequest XResizeRequestEvent +.sp 6p +StructureNotifyMask CirculateNotify XCirculateEvent + ConfigureNotify XConfigureEvent + DestroyNotify XDestroyWindowEvent + GravityNotify XGravityEvent + MapNotify XMapEvent + ReparentNotify XReparentEvent + UnmapNotify XUnmapEvent +.sp 6p +SubstructureNotifyMask CirculateNotify XCirculateEvent + ConfigureNotify XConfigureEvent + CreateNotify XCreateWindowEvent + DestroyNotify XDestroyWindowEvent + GravityNotify XGravityEvent + MapNotify XMapEvent + ReparentNotify XReparentEvent + UnmapNotify XUnmapEvent +.sp 6p +SubstructureRedirectMask CirculateRequest XCirculateRequestEvent + ConfigureRequest XConfigureRequestEvent + MapRequest XMapRequestEvent +.sp 6p +N.A. ClientMessage XClientMessageEvent +.sp 6p +N.A. MappingNotify XMappingEvent +.sp 6p +N.A. SelectionClear XSelectionClearEvent +.sp 6p +N.A. SelectionNotify XSelectionEvent +.sp 6p +N.A. SelectionRequest XSelectionRequestEvent +.sp 6p +VisibilityChangeMask VisibilityNotify XVisibilityEvent +.sp 6p +_ +.TE +.ps 11 +.nr PS 11 +.LP +The sections that follow describe the processing that occurs +when you select the different event masks. +The sections are organized according to these processing categories: +.IP \(bu 5 +Keyboard and pointer events +.IP \(bu 5 +Window crossing events +.IP \(bu 5 +Input focus events +.IP \(bu 5 +Keymap state notification events +.IP \(bu 5 +Exposure events +.IP \(bu 5 +Window state notification events +.IP \(bu 5 +Structure control events +.IP \(bu 5 +Colormap state notification events +.IP \(bu 5 +Client communication events +.NH 2 +Keyboard and Pointer Events +.XS +\*(SN Keyboard and Pointer Events +.XE +.LP +This section discusses: +.IP \(bu 5 +Pointer button events +.IP \(bu 5 +Keyboard and pointer events +.NH 3 +Pointer Button Events +.XS +\*(SN Pointer Button Events +.XE +.LP +The following describes the event processing that occurs when a pointer button +press is processed with the pointer in some window w and +when no active pointer grab is in progress. +.LP +The X server searches the ancestors of w from the root down, +looking for a passive grab to activate. +If no matching passive grab on the button exists, +the X server automatically starts an active grab for the client receiving +the event and sets the last-pointer-grab time to the current server time. +The effect is essentially equivalent to an +.PN XGrabButton +with these client passed arguments: +.TS H +lw(1.5i) lw(3.5i). +_ +.sp 6p +.B +Argument Value +.sp 6p +_ +.sp 6p +.TH +.R +T{ +\fIw\fP +T} T{ +The event window +T} +T{ +\fIevent_mask\fP +T} T{ +The client's selected pointer events on the event window +T} +T{ +\fIpointer_mode\fP +T} T{ +.PN GrabModeAsync +T} +T{ +\fIkeyboard_mode\fP +T} T{ +.PN GrabModeAsync +T} +T{ +\fIowner_events\fP +T} T{ +.PN True , +if the client has selected +.PN OwnerGrabButtonMask +on the event window, +otherwise +.PN False +T} +T{ +\fIconfine_to\fP +T} T{ +.PN None +T} +T{ +\fIcursor\fP +T} T{ +.PN None +T} +.sp 6p +_ +.TE +.LP +The active grab is automatically terminated when +the logical state of the pointer has all buttons released. +Clients can modify the active grab by calling +.PN XUngrabPointer +and +.PN XChangeActivePointerGrab . +.NH 3 +Keyboard and Pointer Events +.XS +\*(SN Keyboard and Pointer Events +.XE +.LP +.IN "Events" "ButtonPress" +.IN "Events" "ButtonRelease" +.IN "Events" "KeyPress" +.IN "Events" "KeyRelease" +.IN "Events" "MotionNotify" +This section discusses the processing that occurs for the +keyboard events +.PN KeyPress +and +.PN KeyRelease +and the pointer events +.PN ButtonPress , +.PN ButtonRelease , +and +.PN MotionNotify . +For information about the keyboard event-handling utilities, +see chapter 11. +.LP +.IN "KeyPress" "" "@DEF@" +.IN "KeyRelease" "" "@DEF@" +The X server reports +.PN KeyPress +or +.PN KeyRelease +events to clients wanting information about keys that logically change state. +Note that these events are generated for all keys, +even those mapped to modifier bits. +.IN "ButtonPress" "" "@DEF@" +.IN "ButtonRelease" "" "@DEF@" +The X server reports +.PN ButtonPress +or +.PN ButtonRelease +events to clients wanting information about buttons that logically change state. +.LP +.IN "MotionNotify" "" "@DEF@" +The X server reports +.PN MotionNotify +events to clients wanting information about when the pointer logically moves. +The X server generates this event whenever the pointer is moved +and the pointer motion begins and ends in the window. +The granularity of +.PN MotionNotify +events is not guaranteed, +but a client that selects this event type is guaranteed +to receive at least one event when the pointer moves and then rests. +.LP +The generation of the logical changes lags the physical changes +if device event processing is frozen. +.LP +To receive +.PN KeyPress , +.PN KeyRelease , +.PN ButtonPress , +and +.PN ButtonRelease +events, set +.PN KeyPressMask , +.PN KeyReleaseMask , +.PN ButtonPressMask , +and +.PN ButtonReleaseMask +bits in the event-mask attribute of the window. +.LP +To receive +.PN MotionNotify +events, set one or more of the following event +masks bits in the event-mask attribute of the window. +.IP \(bu 5 +.PN Button1MotionMask \ \- +.PN Button5MotionMask +.IP +The client application receives +.PN MotionNotify +events only when one or more of the specified buttons is pressed. +.IP \(bu 5 +.PN ButtonMotionMask +.IP +The client application receives +.PN MotionNotify +events only when at least one button is pressed. +.IP \(bu 5 +.PN PointerMotionMask +.IP +The client application receives +.PN MotionNotify +events independent of the state of +the pointer buttons. +.IP \(bu 5 +.PN PointerMotionHintMask +.IP +If +.PN PointerMotionHintMask +is selected in combination with one or more of the above masks, +the X server is free to send only one +.PN MotionNotify +event (with the is_hint member of the +.PN XPointerMovedEvent +structure set to +.PN NotifyHint ) +to the client for the event window, +until either the key or button state changes, +the pointer leaves the event window, or the client calls +.PN XQueryPointer +or +.PN XGetMotionEvents . +The server still may send +.PN MotionNotify +events without is_hint set to +.PN NotifyHint . +.LP +The source of the event is the viewable window that the pointer is in. +The window used by the X server to report these events depends on +the window's position in the window hierarchy +and whether any intervening window prohibits the generation of these events. +Starting with the source window, +the X server searches up the window hierarchy until it locates the first +window specified by a client as having an interest in these events. +If one of the intervening windows has its do-not-propagate-mask +set to prohibit generation of the event type, +the events of those types will be suppressed. +Clients can modify the actual window used for reporting by performing +active grabs and, in the case of keyboard events, by using the focus window. +.LP +The structures for these event types contain: +.LP +.IN "XButtonEvent" "" "@DEF@" +.IN "XButtonPressedEvent" "" "@DEF@" +.IN "XButtonReleasedEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* ButtonPress or ButtonRelease */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* ``event'' window it is reported relative to */ + Window root; /* root window that the event occurred on */ + Window subwindow; /* child window */ + Time time; /* milliseconds */ + int x, y; /* pointer x, y coordinates in event window */ + int x_root, y_root; /* coordinates relative to root */ + unsigned int state; /* key or button mask */ + unsigned int button; /* detail */ + Bool same_screen; /* same screen flag */ +} XButtonEvent; +typedef XButtonEvent XButtonPressedEvent; +typedef XButtonEvent XButtonReleasedEvent; +.De +.LP +.IN "XKeyEvent" "" "@DEF@" +.IN "XKeyPressedEvent" "" "@DEF@" +.IN "XKeyReleasedEvent" "" "@DEF@" +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* KeyPress or KeyRelease */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* ``event'' window it is reported relative to */ + Window root; /* root window that the event occurred on */ + Window subwindow; /* child window */ + Time time; /* milliseconds */ + int x, y; /* pointer x, y coordinates in event window */ + int x_root, y_root; /* coordinates relative to root */ + unsigned int state; /* key or button mask */ + unsigned int keycode; /* detail */ + Bool same_screen; /* same screen flag */ +} XKeyEvent; +typedef XKeyEvent XKeyPressedEvent; +typedef XKeyEvent XKeyReleasedEvent; +.De +.LP +.IN "XMotionEvent" "" "@DEF@" +.IN "XPointerMovedEvent" "" "@DEF@" +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* MotionNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* ``event'' window reported relative to */ + Window root; /* root window that the event occurred on */ + Window subwindow; /* child window */ + Time time; /* milliseconds */ + int x, y; /* pointer x, y coordinates in event window */ + int x_root, y_root; /* coordinates relative to root */ + unsigned int state; /* key or button mask */ + char is_hint; /* detail */ + Bool same_screen; /* same screen flag */ +} XMotionEvent; +typedef XMotionEvent XPointerMovedEvent; +.De +.LP +.eM +These structures have the following common members: +window, root, subwindow, time, x, y, x_root, y_root, state, and same_screen. +The window member is set to the window on which the +event was generated and is referred to as the event window. +As long as the conditions previously discussed are met, +this is the window used by the X server to report the event. +The root member is set to the source window's root window. +The x_root and y_root members are set to the pointer's coordinates +relative to the root window's origin at the time of the event. +.LP +The same_screen member is set to indicate whether the event +window is on the same screen +as the root window and can be either +.PN True +or +.PN False . +If +.PN True , +the event and root windows are on the same screen. +If +.PN False , +the event and root windows are not on the same screen. +.LP +If the source window is an inferior of the event window, +the subwindow member of the structure is set to the child of the event window +that is the source window or the child of the event window that is +an ancestor of the source window. +Otherwise, the X server sets the subwindow member to +.PN None . +The time member is set to the time when the event was generated +and is expressed in milliseconds. +.LP +If the event window is on the same screen as the root window, +the x and y members +are set to the coordinates relative to the event window's origin. +Otherwise, these members are set to zero. +.LP +The state member is set to indicate the logical state of the pointer buttons +and modifier keys just prior to the event, +which is the bitwise inclusive OR of one or more of the +button or modifier key masks: +.PN Button1Mask , +.PN Button2Mask , +.PN Button3Mask , +.PN Button4Mask , +.PN Button5Mask , +.PN ShiftMask , +.PN LockMask , +.PN ControlMask , +.PN Mod1Mask , +.PN Mod2Mask , +.PN Mod3Mask , +.PN Mod4Mask , +and +.PN Mod5Mask . +.LP +Each of these structures also has a member that indicates the detail. +For the +.PN XKeyPressedEvent +and +.PN XKeyReleasedEvent +structures, this member is called a keycode. +It is set to a number that represents a physical key on the keyboard. +The keycode is an arbitrary representation for any key on the keyboard +(see sections 12.7 and 16.1). +.LP +For the +.PN XButtonPressedEvent +and +.PN XButtonReleasedEvent +structures, this member is called button. +It represents the pointer button that changed state and can be the +.PN Button1 , +.PN Button2 , +.PN Button3 , +.PN Button4 , +or +.PN Button5 +value. +For the +.PN XPointerMovedEvent +structure, this member is called is_hint. +It can be set to +.PN NotifyNormal +or +.PN NotifyHint . +.LP +Some of the symbols mentioned in this section have fixed values, as +follows: +.TS H +lw(2i) lw(3.5i). +_ +.sp 6p +.B +Symbol Value +.sp 6p +_ +.sp 6p +.TH +.R +T{ +.PN Button1MotionMask +T} T{ +(1L<<8) +T} +T{ +.PN Button2MotionMask +T} T{ +(1L<<9) +T} +T{ +.PN Button3MotionMask +T} T{ +(1L<<10) +T} +T{ +.PN Button4MotionMask +T} T{ +(1L<<11) +T} +T{ +.PN Button5MotionMask +T} T{ +(1L<<12) +T} +T{ +.PN Button1Mask +T} T{ +(1<<8) +T} +T{ +.PN Button2Mask +T} T{ +(1<<9) +T} +T{ +.PN Button3Mask +T} T{ +(1<<10) +T} +T{ +.PN Button4Mask +T} T{ +(1<<11) +T} +T{ +.PN Button5Mask +T} T{ +(1<<12) +T} +T{ +.PN ShiftMask +T} T{ +(1<<0) +T} +T{ +.PN LockMask +T} T{ +(1<<1) +T} +T{ +.PN ControlMask +T} T{ +(1<<2) +T} +T{ +.PN Mod1Mask +T} T{ +(1<<3) +T} +T{ +.PN Mod2Mask +T} T{ +(1<<4) +T} +T{ +.PN Mod3Mask +T} T{ +(1<<5) +T} +T{ +.PN Mod4Mask +T} T{ +(1<<6) +T} +T{ +.PN Mod5Mask +T} T{ +(1<<7) +T} +T{ +.PN Button1 +T} T{ +1 +T} +T{ +.PN Button2 +T} T{ +2 +T} +T{ +.PN Button3 +T} T{ +3 +T} +T{ +.PN Button4 +T} T{ +4 +T} +T{ +.PN Button5 +T} T{ +5 +T} +.sp 6p +_ +.TE +.NH 2 +Window Entry/Exit Events +.XS +\*(SN Window Entry/Exit Events +.XE +.LP +.IN "Events" "EnterNotify" +.IN "Events" "LeaveNotify" +This section describes the processing that +occurs for the window crossing events +.PN EnterNotify +and +.PN LeaveNotify . +.IN "EnterNotify" "" "@DEF@" +.IN "LeaveNotify" "" "@DEF@" +If a pointer motion or a window hierarchy change causes the +pointer to be in a different window than before, the X server reports +.PN EnterNotify +or +.PN LeaveNotify +events to clients who have selected for these events. +All +.PN EnterNotify +and +.PN LeaveNotify +events caused by a hierarchy change are +generated after any hierarchy event +.Pn ( UnmapNotify , +.PN MapNotify , +.PN ConfigureNotify , +.PN GravityNotify , +.PN CirculateNotify ) +caused by that change; +however, the X protocol does not constrain the ordering of +.PN EnterNotify +and +.PN LeaveNotify +events with respect to +.PN FocusOut , +.PN VisibilityNotify , +and +.PN Expose +events. +.LP +This contrasts with +.PN MotionNotify +events, which are also generated when the pointer moves +but only when the pointer motion begins and ends in a single window. +An +.PN EnterNotify +or +.PN LeaveNotify +event also can be generated when some client application calls +.PN XGrabPointer +and +.PN XUngrabPointer . +.LP +To receive +.PN EnterNotify +or +.PN LeaveNotify +events, set the +.PN EnterWindowMask +or +.PN LeaveWindowMask +bits of the event-mask attribute of the window. +.LP +The structure for these event types contains: +.LP +.IN "XCrossingEvent" "" "@DEF@" +.IN "XEnterWindowEvent" "" "@DEF@" +.IN "XLeaveWindowEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* EnterNotify or LeaveNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* ``event'' window reported relative to */ + Window root; /* root window that the event occurred on */ + Window subwindow; /* child window */ + Time time; /* milliseconds */ + int x, y; /* pointer x, y coordinates in event window */ + int x_root, y_root; /* coordinates relative to root */ + int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ + int detail; + /* + * NotifyAncestor, NotifyVirtual, NotifyInferior, + * NotifyNonlinear,NotifyNonlinearVirtual + */ + Bool same_screen; /* same screen flag */ + Bool focus; /* boolean focus */ + unsigned int state; /* key or button mask */ +} XCrossingEvent; +typedef XCrossingEvent XEnterWindowEvent; +typedef XCrossingEvent XLeaveWindowEvent; +.De +.LP +.eM +The window member is set to the window on which the +.PN EnterNotify +or +.PN LeaveNotify +event was generated and is referred to as the event window. +This is the window used by the X server to report the event, +and is relative to the root +window on which the event occurred. +The root member is set to the root window of the screen +on which the event occurred. +.LP +For a +.PN LeaveNotify +event, +if a child of the event window contains the initial position of the pointer, +the subwindow component is set to that child. +Otherwise, the X server sets the subwindow member to +.PN None . +For an +.PN EnterNotify +event, if a child of the event window contains the final pointer position, +the subwindow component is set to that child or +.PN None . +.LP +The time member is set to the time when the event was generated +and is expressed in milliseconds. +The x and y members are set to the coordinates of the pointer position in +the event window. +This position is always the pointer's final position, +not its initial position. +If the event window is on the same +screen as the root window, x and y are the pointer coordinates +relative to the event window's origin. +Otherwise, x and y are set to zero. +The x_root and y_root members are set to the pointer's coordinates relative to the +root window's origin at the time of the event. +.LP +The same_screen member is set to indicate whether the event window is on the same screen +as the root window and can be either +.PN True +or +.PN False . +If +.PN True , +the event and root windows are on the same screen. +If +.PN False , +the event and root windows are not on the same screen. +.LP +The focus member is set to indicate whether the event window is the focus window or an +inferior of the focus window. +The X server can set this member to either +.PN True +or +.PN False . +If +.PN True , +the event window is the focus window or an inferior of the focus window. +If +.PN False , +the event window is not the focus window or an inferior of the focus window. +.LP +The state member is set to indicate the state of the pointer buttons and +modifier keys just prior to the +event. +The X server can set this member to the bitwise inclusive OR of one +or more of the button or modifier key masks: +.PN Button1Mask , +.PN Button2Mask , +.PN Button3Mask , +.PN Button4Mask , +.PN Button5Mask , +.PN ShiftMask , +.PN LockMask , +.PN ControlMask , +.PN Mod1Mask , +.PN Mod2Mask , +.PN Mod3Mask , +.PN Mod4Mask , +.PN Mod5Mask . +.LP +The mode member is set to indicate whether the events are normal events, +pseudo-motion events +when a grab activates, or pseudo-motion events when a grab deactivates. +The X server can set this member to +.PN NotifyNormal , +.PN NotifyGrab , +or +.PN NotifyUngrab . +.LP +The detail member is set to indicate the notify detail and can be +.PN NotifyAncestor , +.PN NotifyVirtual , +.PN NotifyInferior , +.PN NotifyNonlinear , +or +.PN NotifyNonlinearVirtual . +.NH 3 +Normal Entry/Exit Events +.XS +\*(SN Normal Entry/Exit Events +.XE +.LP +.PN EnterNotify +and +.PN LeaveNotify +events are generated when the pointer moves from +one window to another window. +Normal events are identified by +.PN XEnterWindowEvent +or +.PN XLeaveWindowEvent +structures whose mode member is set to +.PN NotifyNormal . +.IP \(bu 5 +When the pointer moves from window A to window B and A is an inferior of B, +the X server does the following: +.RS +.IP \- 5 +It generates a +.PN LeaveNotify +event on window A, with the detail member of the +.PN XLeaveWindowEvent +structure set to +.PN NotifyAncestor . +.IP \- 5 +It generates a +.PN LeaveNotify +event on each window between window A and window B, exclusive, +with the detail member of each +.PN XLeaveWindowEvent +structure set to +.PN NotifyVirtual . +.IP \- 5 +It generates an +.PN EnterNotify +event on window B, with the detail member of the +.PN XEnterWindowEvent +structure set to +.PN NotifyInferior . +.RE +.IP \(bu 5 +When the pointer moves from window A to window B and B is an inferior of A, +the X server does the following: +.RS +.IP \- 5 +It generates a +.PN LeaveNotify +event on window A, +with the detail member of the +.PN XLeaveWindowEvent +structure set to +.PN NotifyInferior . +.IP \- 5 +It generates an +.PN EnterNotify +event on each window between window A and window B, exclusive, with the +detail member of each +.PN XEnterWindowEvent +structure set to +.PN NotifyVirtual . +.IP \- 5 +It generates an +.PN EnterNotify +event on window B, with the detail member of the +.PN XEnterWindowEvent +structure set to +.PN NotifyAncestor . +.RE +.IP \(bu 5 +When the pointer moves from window A to window B +and window C is their least common ancestor, +the X server does the following: +.RS +.IP \- 5 +It generates a +.PN LeaveNotify +event on window A, +with the detail member of the +.PN XLeaveWindowEvent +structure set to +.PN NotifyNonlinear . +.IP \- 5 +It generates a +.PN LeaveNotify +event on each window between window A and window C, exclusive, +with the detail member of each +.PN XLeaveWindowEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +It generates an +.PN EnterNotify +event on each window between window C and window B, exclusive, +with the detail member of each +.PN XEnterWindowEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +It generates an +.PN EnterNotify +event on window B, with the detail member of the +.PN XEnterWindowEvent +structure set to +.PN NotifyNonlinear . +.RE +.IP \(bu 5 +When the pointer moves from window A to window B on different screens, +the X server does the following: +.RS +.IP \- 5 +It generates a +.PN LeaveNotify +event on window A, +with the detail member of the +.PN XLeaveWindowEvent +structure set to +.PN NotifyNonlinear . +.IP \- 5 +If window A is not a root window, +it generates a +.PN LeaveNotify +event on each window above window A up to and including its root, +with the detail member of each +.PN XLeaveWindowEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +If window B is not a root window, +it generates an +.PN EnterNotify +event on each window from window B's root down to but not including +window B, with the detail member of each +.PN XEnterWindowEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +It generates an +.PN EnterNotify +event on window B, with the detail member of the +.PN XEnterWindowEvent +structure set to +.PN NotifyNonlinear . +.RE +.\".SH 3 +.NH 3 +Grab and Ungrab Entry/Exit Events +.XS +\*(SN Grab and Ungrab Entry/Exit Events +.XE +.LP +Pseudo-motion mode +.PN EnterNotify +and +.PN LeaveNotify +events are generated when a pointer grab activates or deactivates. +Events in which the pointer grab activates +are identified by +.PN XEnterWindowEvent +or +.PN XLeaveWindowEvent +structures whose mode member is set to +.PN NotifyGrab . +Events in which the pointer grab deactivates +are identified by +.PN XEnterWindowEvent +or +.PN XLeaveWindowEvent +structures whose mode member is set to +.PN NotifyUngrab +(see +.PN XGrabPointer ). +.IP \(bu 5 +When a pointer grab activates after any initial warp into a confine_to +window and before generating any actual +.PN ButtonPress +event that activates the grab, +G is the grab_window for the grab, +and P is the window the pointer is in, +the X server does the following: +.RS +.IP \- 5 +It generates +.PN EnterNotify +and +.PN LeaveNotify +events (see section 10.6.1) +with the mode members of the +.PN XEnterWindowEvent +and +.PN XLeaveWindowEvent +structures set to +.PN NotifyGrab . +These events are generated +as if the pointer were to suddenly warp from +its current position in P to some position in G. +However, the pointer does not warp, and the X server uses the pointer position +as both the initial and final positions for the events. +.RE +.IP \(bu 5 +When a pointer grab deactivates after generating any actual +.PN ButtonRelease +event that deactivates the grab, +G is the grab_window for the grab, +and P is the window the pointer is in, +the X server does the following: +.RS +.IP \- 5 +It generates +.PN EnterNotify +and +.PN LeaveNotify +events (see section 10.6.1) +with the mode members of the +.PN XEnterWindowEvent +and +.PN XLeaveWindowEvent +structures set to +.PN NotifyUngrab . +These events are generated as if the pointer were to suddenly warp from +some position in G to its current position in P. +However, the pointer does not warp, and the X server uses the +current pointer position as both the +initial and final positions for the events. +.RE +.NH 2 +Input Focus Events +.XS +\*(SN Input Focus Events +.XE +.LP +.IN "Events" "FocusIn" +.IN "Events" "FocusOut" +This section describes the processing that occurs for the input focus events +.PN FocusIn +and +.PN FocusOut . +.IN "FocusIn" "" "@DEF@" +.IN "FocusOut" "" "@DEF@" +The X server can report +.PN FocusIn +or +.PN FocusOut +events to clients wanting information about when the input focus changes. +The keyboard is always attached to some window +(typically, the root window or a top-level window), +which is called the focus window. +The focus window and the position of the pointer determine the window that +receives keyboard input. +Clients may need to know when the input focus changes +to control highlighting of areas on the screen. +.LP +To receive +.PN FocusIn +or +.PN FocusOut +events, set the +.PN FocusChangeMask +bit in the event-mask attribute of the window. +.LP +The structure for these event types contains: +.LP +.IN "XFocusChangeEvent" "" "@DEF@" +.IN "XFocusInEvent" "" "@DEF@" +.IN "XFocusOutEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* FocusIn or FocusOut */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* window of event */ + int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ + int detail; + /* + * NotifyAncestor, NotifyVirtual, NotifyInferior, + * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer, + * NotifyPointerRoot, NotifyDetailNone + */ +} XFocusChangeEvent; +typedef XFocusChangeEvent XFocusInEvent; +typedef XFocusChangeEvent XFocusOutEvent; +.De +.LP +.eM +The window member is set to the window on which the +.PN FocusIn +or +.PN FocusOut +event was generated. +This is the window used by the X server to report the event. +The mode member is set to indicate whether the focus events +are normal focus events, +focus events while grabbed, +focus events +when a grab activates, or focus events when a grab deactivates. +The X server can set the mode member to +.PN NotifyNormal , +.PN NotifyWhileGrabbed , +.PN NotifyGrab , +or +.PN NotifyUngrab . +.LP +All +.PN FocusOut +events caused by a window unmap are generated after any +.PN UnmapNotify +event; however, the X protocol does not constrain the ordering of +.PN FocusOut +events with respect to +generated +.PN EnterNotify , +.PN LeaveNotify , +.PN VisibilityNotify , +and +.PN Expose +events. +.LP +Depending on the event mode, +the detail member is set to indicate the notify detail and can be +.PN NotifyAncestor , +.PN NotifyVirtual , +.PN NotifyInferior , +.PN NotifyNonlinear , +.PN NotifyNonlinearVirtual , +.PN NotifyPointer , +.PN NotifyPointerRoot , +or +.PN NotifyDetailNone . +.NH 3 +Normal Focus Events and Focus Events While Grabbed +.XS +\*(SN Normal Focus Events and Focus Events While Grabbed +.XE +.LP +Normal focus events are identified by +.PN XFocusInEvent +or +.PN XFocusOutEvent +structures whose mode member is set to +.PN NotifyNormal . +Focus events while grabbed are identified by +.PN XFocusInEvent +or +.PN XFocusOutEvent +structures whose mode member is set to +.PN NotifyWhileGrabbed . +The X server processes normal focus and focus events while grabbed according to +the following: +.IP \(bu 5 +When the focus moves from window A to window B, A is an inferior of B, +and the pointer is in window P, +the X server does the following: +.RS +.IP \- 5 +It generates a +.PN FocusOut +event on window A, with the detail member of the +.PN XFocusOutEvent +structure set to +.PN NotifyAncestor . +.IP \- 5 +It generates a +.PN FocusOut +event on each window between window A and window B, exclusive, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyVirtual . +.IP \- 5 +It generates a +.PN FocusIn +event on window B, with the detail member of the +.PN XFocusOutEvent +structure set to +.PN NotifyInferior . +.IP \- 5 +If window P is an inferior of window B +but window P is not window A or an inferior or ancestor of window A, +it generates a +.PN FocusIn +event on each window below window B, down to and including window P, +with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyPointer . +.RE +.IP \(bu 5 +When the focus moves from window A to window B, B is an inferior of A, +and the pointer is in window P, +the X server does the following: +.RS +.IP \- 5 +If window P is an inferior of window A +but P is not an inferior of window B or an ancestor of B, +it generates a +.PN FocusOut +event on each window from window P up to but not including window A, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyPointer . +.IP \- 5 +It generates a +.PN FocusOut +event on window A, +with the detail member of the +.PN XFocusOutEvent +structure set to +.PN NotifyInferior . +.IP \- 5 +It generates a +.PN FocusIn +event on each window between window A and window B, exclusive, with the +detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyVirtual . +.IP \- 5 +It generates a +.PN FocusIn +event on window B, with the detail member of the +.PN XFocusInEvent +structure set to +.PN NotifyAncestor . +.RE +.IP \(bu 5 +When the focus moves from window A to window B, +window C is their least common ancestor, +and the pointer is in window P, +the X server does the following: +.RS +.IP \- 5 +If window P is an inferior of window A, +it generates a +.PN FocusOut +event on each window from window P up to but not including window A, +with the detail member of the +.PN XFocusOutEvent +structure set to +.PN NotifyPointer . +.IP \- 5 +It generates a +.PN FocusOut +event on window A, +with the detail member of the +.PN XFocusOutEvent +structure set to +.PN NotifyNonlinear . +.IP \- 5 +It generates a +.PN FocusOut +event on each window between window A and window C, exclusive, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +It generates a +.PN FocusIn +event on each window between C and B, exclusive, +with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +It generates a +.PN FocusIn +event on window B, with the detail member of the +.PN XFocusInEvent +structure set to +.PN NotifyNonlinear . +.IP \- 5 +If window P is an inferior of window B, it generates a +.PN FocusIn +event on each window below window B down to and including window P, +with the detail member of the +.PN XFocusInEvent +structure set to +.PN NotifyPointer . +.RE +.IP \(bu 5 +When the focus moves from window A to window B on different screens +and the pointer is in window P, +the X server does the following: +.RS +.IP \- 5 +If window P is an inferior of window A, it generates a +.PN FocusOut +event on each window from window P up to but not including window A, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyPointer . +.IP \- 5 +It generates a +.PN FocusOut +event on window A, +with the detail member of the +.PN XFocusOutEvent +structure set to +.PN NotifyNonlinear . +.IP \- 5 +If window A is not a root window, +it generates a +.PN FocusOut +event on each window above window A up to and including its root, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +If window B is not a root window, +it generates a +.PN FocusIn +event on each window from window B's root down to but not including +window B, with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +It generates a +.PN FocusIn +event on window B, with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyNonlinear . +.IP \- 5 +If window P is an inferior of window B, it generates a +.PN FocusIn +event on each window below window B down to and including window P, +with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyPointer . +.RE +.IP \(bu 5 +When the focus moves from window A to +.PN PointerRoot +(events sent to the window under the pointer) +or +.PN None +(discard), and the pointer is in window P, +the X server does the following: +.RS +.IP \- 5 +If window P is an inferior of window A, it generates a +.PN FocusOut +event on each window from window P up to but not including window A, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyPointer . +.IP \- 5 +It generates a +.PN FocusOut +event on window A, with the detail member of the +.PN XFocusOutEvent +structure set to +.PN NotifyNonlinear . +.IP \- 5 +If window A is not a root window, +it generates a +.PN FocusOut +event on each window above window A up to and including its root, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +It generates a +.PN FocusIn +event on the root window of all screens, with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyPointerRoot +(or +.PN NotifyDetailNone ). +.IP \- 5 +If the new focus is +.PN PointerRoot , +it generates a +.PN FocusIn +event on each window from window P's root down to and including window P, +with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyPointer . +.RE +.IP \(bu 5 +When the focus moves from +.PN PointerRoot +(events sent to the window under the pointer) +or +.PN None +to window A, and the pointer is in window P, +the X server does the following: +.RS +.IP \- 5 +If the old focus is +.PN PointerRoot , +it generates a +.PN FocusOut +event on each window from window P up to and including window P's root, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyPointer . +.IP \- 5 +It generates a +.PN FocusOut +event on all root windows, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyPointerRoot +(or +.PN NotifyDetailNone ). +.IP \- 5 +If window A is not a root window, +it generates a +.PN FocusIn +event on each window from window A's root down to but not including window A, +with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyNonlinearVirtual . +.IP \- 5 +It generates a +.PN FocusIn +event on window A, +with the detail member of the +.PN XFocusInEvent +structure set to +.PN NotifyNonlinear . +.IP \- 5 +If window P is an inferior of window A, it generates a +.PN FocusIn +event on each window below window A down to and including window P, +with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyPointer . +.RE +.IP \(bu 5 +When the focus moves from +.PN PointerRoot +(events sent to the window under the pointer) +to +.PN None +(or vice versa), and the pointer is in window P, +the X server does the following: +.RS +.IP \- 5 +If the old focus is +.PN PointerRoot , +it generates a +.PN FocusOut +event on each window from window P up to and including window P's root, +with the detail member of each +.PN XFocusOutEvent +structure set to +.PN NotifyPointer . +.IP \- 5 +It generates a +.PN FocusOut +event on all root windows, +with the detail member of each +.PN XFocusOutEvent +structure set to either +.PN NotifyPointerRoot +or +.PN NotifyDetailNone . +.IP \- 5 +It generates a +.PN FocusIn +event on all root windows, +with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyDetailNone +or +.PN NotifyPointerRoot . +.IP \- 5 +If the new focus is +.PN PointerRoot , +it generates a +.PN FocusIn +event on each window from window P's root down to and including window P, +with the detail member of each +.PN XFocusInEvent +structure set to +.PN NotifyPointer . +.RE +.\".SH 3 +.NH 3 +Focus Events Generated by Grabs +.XS +\*(SN Focus Events Generated by Grabs +.XE +.LP +Focus events in which the keyboard grab activates +are identified by +.PN XFocusInEvent +or +.PN XFocusOutEvent +structures whose mode member is set to +.PN NotifyGrab . +Focus events in which the keyboard grab deactivates +are identified by +.PN XFocusInEvent +or +.PN XFocusOutEvent +structures whose mode member is set to +.PN NotifyUngrab +(see +.PN XGrabKeyboard ). +.IP \(bu 5 +When a keyboard grab activates before generating any actual +.PN KeyPress +event that activates the grab, +G is the grab_window, and F is the current focus, +the X server does the following: +.RS +.IP \- 5 +It generates +.PN FocusIn +and +.PN FocusOut +events, with the mode members of the +.PN XFocusInEvent +and +.PN XFocusOutEvent +structures set to +.PN NotifyGrab . +These events are generated +as if the focus were to change from +F to G. +.RE +.IP \(bu 5 +When a keyboard grab deactivates after generating any actual +.PN KeyRelease +event that deactivates the grab, +G is the grab_window, and F is the current focus, +the X server does the following: +.RS +.IP \- 5 +It generates +.PN FocusIn +and +.PN FocusOut +events, with the mode members of the +.PN XFocusInEvent +and +.PN XFocusOutEvent +structures set to +.PN NotifyUngrab . +These events are generated +as if the focus were to change from +G to F. +.RE +.NH 2 +Key Map State Notification Events +.XS +\*(SN Key Map State Notification Events +.XE +.LP +.IN "Events" "KeymapNotify" +.IN "KeymapNotify" "" "@DEF@" +The X server can report +.PN KeymapNotify +events to clients that want information about changes in their keyboard state. +.LP +To receive +.PN KeymapNotify +events, set the +.PN KeymapStateMask +bit in the event-mask attribute of the window. +The X server generates this event immediately after every +.PN EnterNotify +and +.PN FocusIn +event. +.LP +The structure for this event type contains: +.LP +.IN "XKeymapEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +/* generated on EnterWindow and FocusIn when KeymapState selected */ +typedef struct { + int type; /* KeymapNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + char key_vector[32]; +} XKeymapEvent; +.De +.LP +.eM +The window member is not used but is present to aid some toolkits. +The key_vector member is set to the bit vector of the keyboard. +Each bit set to 1 indicates that the corresponding key +is currently pressed. +The vector is represented as 32 bytes. +Byte N (from 0) contains the bits for keys 8N to 8N + 7 +with the least significant bit in the byte representing key 8N. +.NH 2 +Exposure Events +.XS +\*(SN Exposure Events +.XE +.LP +The X protocol does not guarantee to preserve the contents of window +regions when +the windows are obscured or reconfigured. +Some implementations may preserve the contents of windows. +Other implementations are free to destroy the contents of windows +when exposed. +X expects client applications to assume the responsibility for +restoring the contents of an exposed window region. +(An exposed window region describes a formerly obscured window whose +region becomes visible.) +Therefore, the X server sends +.PN Expose +events describing the window and the region of the window that has been exposed. +A naive client application usually redraws the entire window. +A more sophisticated client application redraws only the exposed region. +.NH 3 +Expose Events +.XS +\*(SN Expose Events +.XE +.LP +.IN "Events" "Expose" +.IN "Expose" "" "@DEF@" +The X server can report +.PN Expose +events to clients wanting information about when the contents of window regions +have been lost. +The circumstances in which the X server generates +.PN Expose +events are not as definite as those for other events. +However, the X server never generates +.PN Expose +events on windows whose class you specified as +.PN InputOnly . +The X server can generate +.PN Expose +events when no valid contents are available for regions of a window +and either the regions are visible, +the regions are viewable and the server is (perhaps newly) maintaining +backing store on the window, +or the window is not viewable but the server is (perhaps newly) honoring the +window's backing-store attribute of +.PN Always +or +.PN WhenMapped . +The regions decompose into an (arbitrary) set of rectangles, +and an +.PN Expose +event is generated for each rectangle. +For any given window, +the X server guarantees to report contiguously +all of the regions exposed by some action that causes +.PN Expose +events, such as raising a window. +.LP +To receive +.PN Expose +events, set the +.PN ExposureMask +bit in the event-mask attribute of the window. +.LP +The structure for this event type contains: +.LP +.IN "XExposeEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* Expose */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + int x, y; + int width, height; + int count; /* if nonzero, at least this many more */ +} XExposeEvent; +.De +.LP +.eM +The window member is set to the exposed (damaged) window. +The x and y members are set to the coordinates relative to the window's origin +and indicate the upper-left corner of the rectangle. +The width and height members are set to the size (extent) of the rectangle. +The count member is set to the number of +.PN Expose +events that are to follow. +If count is zero, no more +.PN Expose +events follow for this window. +However, if count is nonzero, at least that number of +.PN Expose +events (and possibly more) follow for this window. +Simple applications that do not want to optimize redisplay by distinguishing +between subareas of its window can just ignore all +.PN Expose +events with nonzero counts and perform full redisplays +on events with zero counts. +.NH 3 +GraphicsExpose and NoExpose Events +.XS +\*(SN GraphicsExpose and NoExpose Events +.XE +.LP +.IN "Events" "GraphicsExpose" +.IN "Events" "NoExpose" +.IN "GraphicsExpose" "" "@DEF@" +The X server can report +.PN GraphicsExpose +events to clients wanting information about when a destination region could not +be computed during certain graphics requests: +.PN XCopyArea +or +.PN XCopyPlane . +The X server generates this event whenever a destination region could not be +computed because of an obscured or out-of-bounds source region. +In addition, the X server guarantees to report contiguously all of the regions exposed by +some graphics request +(for example, copying an area of a drawable to a destination +drawable). +.LP +.IN "NoExpose" "" "@DEF@" +The X server generates a +.PN NoExpose +event whenever a graphics request that might +produce a +.PN GraphicsExpose +event does not produce any. +In other words, the client is really asking for a +.PN GraphicsExpose +event but instead receives a +.PN NoExpose +event. +.LP +To receive +.PN GraphicsExpose +or +.PN NoExpose +events, you must first set the graphics-exposure +attribute of the graphics context to +.PN True . +You also can set the graphics-expose attribute when creating a graphics +context using +.PN XCreateGC +or by calling +.PN XSetGraphicsExposures . +.LP +The structures for these event types contain: +.LP +.IN "XGraphicsExposeEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* GraphicsExpose */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Drawable drawable; + int x, y; + int width, height; + int count; /* if nonzero, at least this many more */ + int major_code; /* core is CopyArea or CopyPlane */ + int minor_code; /* not defined in the core */ +} XGraphicsExposeEvent; +.De +.LP +.IN "XNoExposeEvent" "" "@DEF@" +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* NoExpose */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Drawable drawable; + int major_code; /* core is CopyArea or CopyPlane */ + int minor_code; /* not defined in the core */ +} XNoExposeEvent; +.De +.LP +.eM +Both structures have these common members: drawable, major_code, and minor_code. +The drawable member is set to the drawable of the destination region on +which the graphics request was to be performed. +The major_code member is set to the graphics request initiated by the client +and can be either +.PN X_CopyArea +or +.PN X_CopyPlane . +If it is +.PN X_CopyArea , +a call to +.PN XCopyArea +initiated the request. +If it is +.PN X_CopyPlane , +a call to +.PN XCopyPlane +initiated the request. +These constants are defined in +.hN X11/Xproto.h . +The minor_code member, +like the major_code member, +indicates which graphics request was initiated by +the client. +However, the minor_code member is not defined by the core +X protocol and will be zero in these cases, +although it may be used by an extension. +.LP +The +.PN XGraphicsExposeEvent +structure has these additional members: x, y, width, height, and count. +The x and y members are set to the coordinates relative to the drawable's origin +and indicate the upper-left corner of the rectangle. +The width and height members are set to the size (extent) of the rectangle. +The count member is set to the number of +.PN GraphicsExpose +events to follow. +If count is zero, no more +.PN GraphicsExpose +events follow for this window. +However, if count is nonzero, at least that number of +.PN GraphicsExpose +events (and possibly more) are to follow for this window. +.NH 2 +Window State Change Events +.XS +\*(SN Window State Change Events +.XE +.LP +The following sections discuss: +.IP \(bu 5 +.PN CirculateNotify +events +.IP \(bu 5 +.PN ConfigureNotify +events +.IP \(bu 5 +.PN CreateNotify +events +.IP \(bu 5 +.PN DestroyNotify +events +.IP \(bu 5 +.PN GravityNotify +events +.IP \(bu 5 +.PN MapNotify +events +.IP \(bu 5 +.PN MappingNotify +events +.IP \(bu 5 +.PN ReparentNotify +events +.IP \(bu 5 +.PN UnmapNotify +events +.IP \(bu 5 +.PN VisibilityNotify +events +.\" .SH 3 +.NH 3 +CirculateNotify Events +.XS +\*(SN CirculateNotify Events +.XE +.LP +.IN "Events" "CirculateNotify" +.IN "CirculateNotify" "" "@DEF@" +The X server can report +.PN CirculateNotify +events to clients wanting information about when a window changes +its position in the stack. +The X server generates this event type whenever a window is actually restacked +as a result of a client application calling +.PN XCirculateSubwindows , +.PN XCirculateSubwindowsUp , +or +.PN XCirculateSubwindowsDown . +.LP +To receive +.PN CirculateNotify +events, set the +.PN StructureNotifyMask +bit in the event-mask attribute of the window +or the +.PN SubstructureNotifyMask +bit in the event-mask attribute of the parent window +(in which case, circulating any child generates an event). +.LP +The structure for this event type contains: +.LP +.IN "XCirculateEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* CirculateNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window event; + Window window; + int place; /* PlaceOnTop, PlaceOnBottom */ +} XCirculateEvent; +.De +.LP +.eM +The event member is set either to the restacked window or to its parent, +depending on whether +.PN StructureNotify +or +.PN SubstructureNotify +was selected. +The window member is set to the window that was restacked. +The place member is set to the window's position after the restack occurs and +is either +.PN PlaceOnTop +or +.PN PlaceOnBottom . +If it is +.PN PlaceOnTop , +the window is now on top of all siblings. +If it is +.PN PlaceOnBottom , +the window is now below all siblings. +.NH 3 +ConfigureNotify Events +.XS +\*(SN ConfigureNotify Events +.XE +.LP +.IN "Events" "ConfigureNotify" +.IN "ConfigureNotify" "" "@DEF@" +The X server can report +.PN ConfigureNotify +events to clients wanting information about actual changes to a window's +state, such as size, position, border, and stacking order. +The X server generates this event type whenever one of the following configure +window requests made by a client application actually completes: +.IP \(bu 5 +A window's size, position, border, and/or stacking order is reconfigured +by calling +.PN XConfigureWindow . +.IP \(bu 5 +The window's position in the stacking order is changed by calling +.PN XLowerWindow , +.PN XRaiseWindow , +or +.PN XRestackWindows . +.IP \(bu 5 +A window is moved by calling +.PN XMoveWindow . +.IP \(bu 5 +A window's size is changed by calling +.PN XResizeWindow . +.IP \(bu 5 +A window's size and location is changed by calling +.PN XMoveResizeWindow . +.IP \(bu 5 +A window is mapped and its position in the stacking order is changed +by calling +.PN XMapRaised . +.IP \(bu 5 +A window's border width is changed by calling +.PN XSetWindowBorderWidth . +.LP +To receive +.PN ConfigureNotify +events, set the +.PN StructureNotifyMask +bit in the event-mask attribute of the window or the +.PN SubstructureNotifyMask +bit in the event-mask attribute of the parent window +(in which case, configuring any child generates an event). +.LP +The structure for this event type contains: +.LP +.IN "XConfigureEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* ConfigureNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window event; + Window window; + int x, y; + int width, height; + int border_width; + Window above; + Bool override_redirect; +} XConfigureEvent; +.De +.LP +.eM +The event member is set either to the reconfigured window or to its parent, +depending on whether +.PN StructureNotify +or +.PN SubstructureNotify +was selected. +The window member is set to the window whose size, position, +border, and/or stacking +order was changed. +.LP +The x and y members are set to the coordinates relative to the parent window's +origin and indicate the position of the upper-left outside corner of the window. +The width and height members are set to the inside size of the window, +not including +the border. +The border_width member is set to the width of the window's border, in pixels. +.LP +The above member is set to the sibling window and is used +for stacking operations. +If the X server sets this member to +.PN None , +the window whose state was changed is on the bottom of the stack +with respect to sibling windows. +However, if this member is set to a sibling window, +the window whose state was changed is placed on top of this sibling window. +.LP +The override_redirect member is set to the override-redirect attribute of the +window. +Window manager clients normally should ignore this window if the +override_redirect member +is +.PN True . +.NH 3 +CreateNotify Events +.XS +\*(SN CreateNotify Events +.XE +.LP +.IN "Events" "CreateNotify" +.IN "CreateNotify" "" "@DEF@" +The X server can report +.PN CreateNotify +events to clients wanting information about creation of windows. +The X server generates this event whenever a client +application creates a window by calling +.PN XCreateWindow +or +.PN XCreateSimpleWindow . +.LP +To receive +.PN CreateNotify +events, set the +.PN SubstructureNotifyMask +bit in the event-mask attribute of the window. +Creating any children then generates an event. +.LP +The structure for the event type contains: +.LP +.IN "XCreateWindowEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* CreateNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window parent; /* parent of the window */ + Window window; /* window id of window created */ + int x, y; /* window location */ + int width, height; /* size of window */ + int border_width; /* border width */ + Bool override_redirect; /* creation should be overridden */ +} XCreateWindowEvent; +.De +.LP +.eM +The parent member is set to the created window's parent. +The window member specifies the created window. +The x and y members are set to the created window's coordinates relative +to the parent window's origin and indicate the position of the upper-left +outside corner of the created window. +The width and height members are set to the inside size of the created window +(not including the border) and are always nonzero. +The border_width member is set to the width of the created window's border, in pixels. +The override_redirect member is set to the override-redirect attribute of the +window. +Window manager clients normally should ignore this window +if the override_redirect member is +.PN True . +.NH 3 +DestroyNotify Events +.XS +\*(SN DestroyNotify Events +.XE +.LP +.IN "Events" "DestroyNotify" +.IN "DestroyNotify" "" "@DEF@" +The X server can report +.PN DestroyNotify +events to clients wanting information about which windows are destroyed. +The X server generates this event whenever a client application destroys a +window by calling +.PN XDestroyWindow +or +.PN XDestroySubwindows . +.LP +The ordering of the +.PN DestroyNotify +events is such that for any given window, +.PN DestroyNotify +is generated on all inferiors of the window +before being generated on the window itself. +The X protocol does not constrain the ordering among +siblings and across subhierarchies. +.LP +To receive +.PN DestroyNotify +events, set the +.PN StructureNotifyMask +bit in the event-mask attribute of the window or the +.PN SubstructureNotifyMask +bit in the event-mask attribute of the parent window +(in which case, destroying any child generates an event). +.LP +The structure for this event type contains: +.LP +.IN "XDestroyWindowEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* DestroyNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window event; + Window window; +} XDestroyWindowEvent; +.De +.LP +.eM +The event member is set either to the destroyed window or to its parent, +depending on whether +.PN StructureNotify +or +.PN SubstructureNotify +was selected. +The window member is set to the window that is destroyed. +.NH 3 +GravityNotify Events +.XS +\*(SN GravityNotify Events +.XE +.LP +.IN "Events" "GravityNotify" +.IN "GravityNotify" "" "@DEF@" +The X server can report +.PN GravityNotify +events to clients wanting information about when a window is moved because of a +change in the size of its parent. +The X server generates this event whenever a client +application actually moves a child window as a result of resizing its parent by calling +.PN XConfigureWindow , +.PN XMoveResizeWindow , +or +.PN XResizeWindow . +.LP +To receive +.PN GravityNotify +events, set the +.PN StructureNotifyMask +bit in the event-mask attribute of the window or the +.PN SubstructureNotifyMask +bit in the event-mask attribute of the parent window +(in which case, any child that is moved because its parent has been resized +generates an event). +.LP +The structure for this event type contains: +.LP +.IN "XGravityEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* GravityNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window event; + Window window; + int x, y; +} XGravityEvent; +.De +.LP +.eM +The event member is set either to the window that was moved or to its parent, +depending on whether +.PN StructureNotify +or +.PN SubstructureNotify +was selected. +The window member is set to the child window that was moved. +The x and y members are set to the coordinates relative to the +new parent window's origin +and indicate the position of the upper-left outside corner of the +window. +.NH 3 +MapNotify Events +.XS +\*(SN MapNotify Events +.XE +.LP +.IN "Events" "MapNotify" +.IN "MapNotify" "" "@DEF@" +The X server can report +.PN MapNotify +events to clients wanting information about which windows are mapped. +The X server generates this event type whenever a client application changes the +window's state from unmapped to mapped by calling +.PN XMapWindow , +.PN XMapRaised , +.PN XMapSubwindows , +.PN XReparentWindow , +or as a result of save-set processing. +.LP +To receive +.PN MapNotify +events, set the +.PN StructureNotifyMask +bit in the event-mask attribute of the window or the +.PN SubstructureNotifyMask +bit in the event-mask attribute of the parent window +(in which case, mapping any child generates an event). +.LP +The structure for this event type contains: +.LP +.IN "XMapEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* MapNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window event; + Window window; + Bool override_redirect; /* boolean, is override set... */ +} XMapEvent; +.De +.LP +.eM +The event member is set either to the window that was mapped or to its parent, +depending on whether +.PN StructureNotify +or +.PN SubstructureNotify +was selected. +The window member is set to the window that was mapped. +The override_redirect member is set to the override-redirect attribute +of the window. +Window manager clients normally should ignore this window +if the override-redirect attribute is +.PN True , +because these events usually are generated from pop-ups, +which override structure control. +.NH 3 +MappingNotify Events +.XS +\*(SN MappingNotify Events +.XE +.LP +.IN "Events" "MappingNotify" +.IN "MappingNotify" "" "@DEF@" +The X server reports +.PN MappingNotify +events to all clients. +There is no mechanism to express disinterest in this event. +The X server generates this event type whenever a client application +successfully calls: +.IP \(bu 5 +.PN XSetModifierMapping +to indicate which KeyCodes are to be used as modifiers +.IP \(bu 5 +.PN XChangeKeyboardMapping +to change the keyboard mapping +.IP \(bu 5 +.PN XSetPointerMapping +to set the pointer mapping +.LP +The structure for this event type contains: +.LP +.IN "XMappingEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* MappingNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* unused */ + int request; /* one of MappingModifier, MappingKeyboard, + MappingPointer */ + int first_keycode; /* first keycode */ + int count; /* defines range of change w. first_keycode*/ +} XMappingEvent; +.De +.LP +.eM +The request member is set to indicate the kind of mapping change that occurred +and can be +.PN MappingModifier , +.PN MappingKeyboard , +or +.PN MappingPointer . +If it is +.PN MappingModifier , +the modifier mapping was changed. +If it is +.PN MappingKeyboard , +the keyboard mapping was changed. +If it is +.PN MappingPointer , +the pointer button mapping was changed. +The first_keycode and count members are set only +if the request member was set to +.PN MappingKeyboard . +The number in first_keycode represents the first number in the range +of the altered mapping, +and count represents the number of keycodes altered. +.LP +To update the client application's knowledge of the keyboard, +you should call +.PN XRefreshKeyboardMapping . +.NH 3 +ReparentNotify Events +.XS +\*(SN ReparentNotify Events +.XE +.LP +.IN "Events" "ReparentNotify" +.IN "ReparentNotify" "" "@DEF@" +The X server can report +.PN ReparentNotify +events to clients wanting information about changing a window's parent. +The X server generates this event whenever a client +application calls +.PN XReparentWindow +and the window is actually reparented. +.LP +To receive +.PN ReparentNotify +events, set the +.PN StructureNotifyMask +bit in the event-mask attribute of the window or the +.PN SubstructureNotifyMask +bit in the event-mask attribute of either the old or the new parent window +(in which case, reparenting any child generates an event). +.LP +The structure for this event type contains: +.LP +.IN "XReparentEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* ReparentNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window event; + Window window; + Window parent; + int x, y; + Bool override_redirect; +} XReparentEvent; +.De +.LP +.eM +The event member is set either to the reparented window +or to the old or the new parent, depending on whether +.PN StructureNotify +or +.PN SubstructureNotify +was selected. +The window member is set to the window that was reparented. +The parent member is set to the new parent window. +The x and y members are set to the reparented window's coordinates relative +to the new parent window's +origin and define the upper-left outer corner of the reparented window. +The override_redirect member is set to the override-redirect attribute of the +window specified by the window member. +Window manager clients normally should ignore this window +if the override_redirect member is +.PN True . +.NH 3 +UnmapNotify Events +.XS +\*(SN UnmapNotify Events +.XE +.LP +.IN "Events" "UnmapNotify" +.IN "UnmapNotify" "" "@DEF@" +The X server can report +.PN UnmapNotify +events to clients wanting information about which windows are unmapped. +The X server generates this event type whenever a client application changes the +window's state from mapped to unmapped. +.LP +To receive +.PN UnmapNotify +events, set the +.PN StructureNotifyMask +bit in the event-mask attribute of the window or the +.PN SubstructureNotifyMask +bit in the event-mask attribute of the parent window +(in which case, unmapping any child window generates an event). +.LP +The structure for this event type contains: +.LP +.IN "XUnmapEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* UnmapNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window event; + Window window; + Bool from_configure; +} XUnmapEvent; +.De +.LP +.eM +The event member is set either to the unmapped window or to its parent, +depending on whether +.PN StructureNotify +or +.PN SubstructureNotify +was selected. +This is the window used by the X server to report the event. +The window member is set to the window that was unmapped. +The from_configure member is set to +.PN True +if the event was generated as a result of a resizing of the window's parent when +the window itself had a win_gravity of +.PN UnmapGravity . +.NH 3 +VisibilityNotify Events +.XS +\*(SN VisibilityNotify Events +.XE +.LP +.IN "Events" "VisibilityNotify" +.IN "VisibilityNotify" "" "@DEF@" +The X server can report +.PN VisibilityNotify +events to clients wanting any change in the visibility of the specified window. +A region of a window is visible if someone looking at the screen can +actually see it. +The X server generates this event whenever the visibility changes state. +However, this event is never generated for windows whose class is +.PN InputOnly . +.LP +All +.PN VisibilityNotify +events caused by a hierarchy change are generated +after any hierarchy event +.Pn ( UnmapNotify , +.PN MapNotify , +.PN ConfigureNotify , +.PN GravityNotify , +.PN CirculateNotify ) +caused by that change. Any +.PN VisibilityNotify +event on a given window is generated before any +.PN Expose +events on that window, but it is not required that all +.PN VisibilityNotify +events on all windows be generated before all +.PN Expose +events on all windows. +The X protocol does not constrain the ordering of +.PN VisibilityNotify +events with +respect to +.PN FocusOut , +.PN EnterNotify , +and +.PN LeaveNotify +events. +.LP +To receive +.PN VisibilityNotify +events, set the +.PN VisibilityChangeMask +bit in the event-mask attribute of the window. +.LP +The structure for this event type contains: +.LP +.IN "XVisibilityEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* VisibilityNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + int state; +} XVisibilityEvent; +.De +.LP +.eM +The window member is set to the window whose visibility state changes. +The state member is set to the state of the window's visibility and can be +.PN VisibilityUnobscured , +.PN VisibilityPartiallyObscured , +or +.PN VisibilityFullyObscured . +The X server ignores all of a window's subwindows +when determining the visibility state of the window and processes +.PN VisibilityNotify +events according to the following: +.IP \(bu 5 +When the window changes state from partially obscured, fully obscured, +or not viewable to viewable and completely unobscured, +the X server generates the event with the state member of the +.PN XVisibilityEvent +structure set to +.PN VisibilityUnobscured . +.IP \(bu 5 +When the window changes state from viewable and completely unobscured or +not viewable to viewable and partially obscured, +the X server generates the event with the state member of the +.PN XVisibilityEvent +structure set to +.PN VisibilityPartiallyObscured . +.IP \(bu 5 +When the window changes state from viewable and completely unobscured, +viewable and partially obscured, or not viewable to viewable and +fully obscured, +the X server generates the event with the state member of the +.PN XVisibilityEvent +structure set to +.PN VisibilityFullyObscured . +.NH 2 +Structure Control Events +.XS +\*(SN Structure Control Events +.XE +.LP +This section discusses: +.IP \(bu 5 +.PN CirculateRequest +events +.IP \(bu 5 +.PN ConfigureRequest +events +.IP \(bu 5 +.PN MapRequest +events +.IP \(bu 5 +.PN ResizeRequest +events +.NH 3 +CirculateRequest Events +.XS +\*(SN CirculateRequest Events +.XE +.LP +.IN "Events" "CirculateRequest" +.IN "CirculateRequest" "" "@DEF@" +The X server can report +.PN CirculateRequest +events to clients wanting information about +when another client initiates a circulate window request +on a specified window. +The X server generates this event type whenever a client initiates a circulate +window request on a window and a subwindow actually needs to be restacked. +The client initiates a circulate window request on the window by calling +.PN XCirculateSubwindows , +.PN XCirculateSubwindowsUp , +or +.PN XCirculateSubwindowsDown . +.LP +To receive +.PN CirculateRequest +events, set the +.PN SubstructureRedirectMask +in the event-mask attribute of the window. +Then, in the future, +the circulate window request for the specified window is not executed, +and thus, any subwindow's position in the stack is not changed. +For example, suppose a client application calls +.PN XCirculateSubwindowsUp +to raise a subwindow to the top of the stack. +If you had selected +.PN SubstructureRedirectMask +on the window, the X server reports to you a +.PN CirculateRequest +event and does not raise the subwindow to the top of the stack. +.LP +The structure for this event type contains: +.LP +.IN "XCirculateRequestEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* CirculateRequest */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window parent; + Window window; + int place; /* PlaceOnTop, PlaceOnBottom */ +} XCirculateRequestEvent; +.De +.LP +.eM +The parent member is set to the parent window. +The window member is set to the subwindow to be restacked. +The place member is set to what the new position in the stacking order should be +and is either +.PN PlaceOnTop +or +.PN PlaceOnBottom . +If it is +.PN PlaceOnTop , +the subwindow should be on top of all siblings. +If it is +.PN PlaceOnBottom , +the subwindow should be below all siblings. +.NH 3 +ConfigureRequest Events +.XS +\*(SN ConfigureRequest Events +.XE +.LP +.IN "Events" "ConfigureRequest" +.IN "ConfigureRequest" "" "@DEF@" +The X server can report +.PN ConfigureRequest +events to clients wanting information about when a different client initiates +a configure window request on any child of a specified window. +The configure window request attempts to +reconfigure a window's size, position, border, and stacking order. +The X server generates this event whenever a different client initiates +a configure window request on a window by calling +.PN XConfigureWindow , +.PN XLowerWindow , +.PN XRaiseWindow , +.PN XMapRaised , +.PN XMoveResizeWindow , +.PN XMoveWindow , +.PN XResizeWindow , +.PN XRestackWindows , +or +.PN XSetWindowBorderWidth . +.LP +To receive +.PN ConfigureRequest +events, set the +.PN SubstructureRedirectMask +bit in the event-mask attribute of the window. +.PN ConfigureRequest +events are generated when a +.PN ConfigureWindow +protocol request is issued on a child window by another client. +For example, suppose a client application calls +.PN XLowerWindow +to lower a window. +If you had selected +.PN SubstructureRedirectMask +on the parent window and if the override-redirect attribute +of the window is set to +.PN False , +the X server reports a +.PN ConfigureRequest +event to you and does not lower the specified window. +.LP +The structure for this event type contains: +.LP +.IN "XConfigureRequestEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* ConfigureRequest */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window parent; + Window window; + int x, y; + int width, height; + int border_width; + Window above; + int detail; /* Above, Below, TopIf, BottomIf, Opposite */ + unsigned long value_mask; +} XConfigureRequestEvent; +.De +.LP +.eM +The parent member is set to the parent window. +The window member is set to the window whose size, position, border width, +and/or stacking order is to be reconfigured. +The value_mask member indicates which components were specified in the +.PN ConfigureWindow +protocol request. +The corresponding values are reported as given in the request. +The remaining values are filled in from the current geometry of the window, +except in the case of above (sibling) and detail (stack-mode), +which are reported as +.PN None +and +.PN Above , +respectively, if they are not given in the request. +.NH 3 +MapRequest Events +.XS +\*(SN MapRequest Events +.XE +.LP +.IN "Events" "MapRequest" +.IN "MapRequest" "" "@DEF@" +The X server can report +.PN MapRequest +events to clients wanting information about a different client's desire +to map windows. +A window is considered mapped when a map window request completes. +The X server generates this event whenever a different client initiates +a map window request on an unmapped window whose override_redirect member +is set to +.PN False . +Clients initiate map window requests by calling +.PN XMapWindow , +.PN XMapRaised , +or +.PN XMapSubwindows . +.LP +To receive +.PN MapRequest +events, set the +.PN SubstructureRedirectMask +bit in the event-mask attribute of the window. +This means another client's attempts to map a child window by calling one of +the map window request functions is intercepted, and you are sent a +.PN MapRequest +instead. +For example, suppose a client application calls +.PN XMapWindow +to map a window. +If you (usually a window manager) had selected +.PN SubstructureRedirectMask +on the parent window and if the override-redirect attribute +of the window is set to +.PN False , +the X server reports a +.PN MapRequest +event to you +and does not map the specified window. +Thus, this event gives your window manager client the ability +to control the placement of subwindows. +.LP +The structure for this event type contains: +.LP +.IN "XMapRequestEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* MapRequest */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window parent; + Window window; +} XMapRequestEvent; +.De +.LP +.eM +The parent member is set to the parent window. +The window member is set to the window to be mapped. +.NH 3 +ResizeRequest Events +.XS +\*(SN ResizeRequest Events +.XE +.LP +.IN "Events" "ResizeRequest" +.IN "ResizeRequest" "" "@DEF@" +The X server can report +.PN ResizeRequest +events to clients wanting information about another client's attempts to change the +size of a window. +The X server generates this event whenever some other client attempts to change +the size of the specified window by calling +.PN XConfigureWindow , +.PN XResizeWindow , +or +.PN XMoveResizeWindow . +.LP +To receive +.PN ResizeRequest +events, set the +.PN ResizeRedirect +bit in the event-mask attribute of the window. +Any attempts to change the size by other clients are then redirected. +.LP +The structure for this event type contains: +.LP +.IN "XResizeRequestEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* ResizeRequest */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + int width, height; +} XResizeRequestEvent; +.De +.LP +.eM +The window member is set to the window whose size another +client attempted to change. +The width and height members are set to the inside size of the window, +excluding the border. +.NH 2 +Colormap State Change Events +.XS +\*(SN Colormap State Change Events +.XE +.LP +.IN "Events" "ColormapNotify" +.IN "ColormapNotify" "" "@DEF@" +The X server can report +.PN ColormapNotify +events to clients wanting information about when the colormap changes +and when a colormap is installed or uninstalled. +The X server generates this event type whenever a client application: +.IP \(bu 5 +Changes the colormap member of the +.PN XSetWindowAttributes +structure by +calling +.PN XChangeWindowAttributes , +.PN XFreeColormap , +or +.PN XSetWindowColormap +.IP \(bu 5 +Installs or uninstalls the colormap by calling +.PN XInstallColormap +or +.PN XUninstallColormap +.LP +To receive +.PN ColormapNotify +events, set the +.PN ColormapChangeMask +bit in the event-mask attribute of the window. +.LP +The structure for this event type contains: +.LP +.IN "XColormapEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* ColormapNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + Colormap colormap; /* colormap or None */ + Bool new; + int state; /* ColormapInstalled, ColormapUninstalled */ +} XColormapEvent; +.De +.LP +.eM +The window member is set to the window whose associated +colormap is changed, installed, or uninstalled. +For a colormap that is changed, installed, or uninstalled, +the colormap member is set to the colormap associated with the window. +For a colormap that is changed by a call to +.PN XFreeColormap , +the colormap member is set to +.PN None . +The new member is set to indicate whether the colormap +for the specified window was changed or installed or uninstalled +and can be +.PN True +or +.PN False . +If it is +.PN True , +the colormap was changed. +If it is +.PN False , +the colormap was installed or uninstalled. +The state member is always set to indicate whether the colormap is installed or +uninstalled and can be +.PN ColormapInstalled +or +.PN ColormapUninstalled . +.NH 2 +Client Communication Events +.XS +\*(SN Client Communication Events +.XE +.LP +This section discusses: +.IP \(bu 5 +.PN ClientMessage +events +.IP \(bu 5 +.PN PropertyNotify +events +.IP \(bu 5 +.PN SelectionClear +events +.IP \(bu 5 +.PN SelectionNotify +events +.IP \(bu 5 +.PN SelectionRequest +events +.NH 3 +ClientMessage Events +.XS +\*(SN ClientMessage Events +.XE +.LP +.IN "Events" "ClientMessage" +.IN "ClientMessage" "" "@DEF@" +The X server generates +.PN ClientMessage +events only when a client calls the function +.PN XSendEvent . +.LP +The structure for this event type contains: +.LP +.IN "XClientMessageEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 1i 3i +.ta .5i 1i 3i +typedef struct { + int type; /* ClientMessage */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + Atom message_type; + int format; + union { + char b[20]; + short s[10]; + long l[5]; + } data; +} XClientMessageEvent; +.De +.LP +.eM +The message_type member is set to an atom that indicates how the data +should be interpreted by the receiving client. +The format member is set to 8, 16, or 32 and specifies whether the data +should be viewed as a list of bytes, shorts, or longs. +The data member is a union that contains the members b, s, and l. +The b, s, and l members represent data of twenty 8-bit values, +ten 16-bit values, and five 32-bit values. +Particular message types might not make use of all these values. +The X server places no interpretation on the values in the window, +message_type, or data members. +.NH 3 +PropertyNotify Events +.XS +\*(SN PropertyNotify Events +.XE +.LP +.IN "Events" "PropertyNotify" +.IN "PropertyNotify" "" "@DEF@" +The X server can report +.PN PropertyNotify +events to clients wanting information about property changes +for a specified window. +.LP +To receive +.PN PropertyNotify +events, set the +.PN PropertyChangeMask +bit in the event-mask attribute of the window. +.LP +The structure for this event type contains: +.LP +.IN "XPropertyEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* PropertyNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + Atom atom; + Time time; + int state; /* PropertyNewValue or PropertyDelete */ +} XPropertyEvent; +.De +.LP +.eM +The window member is set to the window whose associated +property was changed. +The atom member is set to the property's atom and indicates which +property was changed or desired. +The time member is set to the server time when the property was changed. +The state member is set to indicate whether the property was changed +to a new value or deleted and can be +.PN PropertyNewValue +or +.PN PropertyDelete . +The state member is set to +.PN PropertyNewValue +when a property of the window is changed using +.PN XChangeProperty +or +.PN XRotateWindowProperties +(even when adding zero-length data using +.PN XChangeProperty ) +and when replacing all or part of a property with identical data using +.PN XChangeProperty +or +.PN XRotateWindowProperties . +The state member is set to +.PN PropertyDelete +when a property of the window is deleted using +.PN XDeleteProperty +or, if the delete argument is +.PN True , +.PN XGetWindowProperty . +.NH 3 +SelectionClear Events +.XS +\*(SN SelectionClear Events +.XE +.LP +.IN "Events" "SelectionClear" +.IN "SelectionClear" "" "@DEF@" +The X server reports +.PN SelectionClear +events to the client losing ownership of a selection. +The X server generates this event type when another client +asserts ownership of the selection by calling +.PN XSetSelectionOwner . +.LP +The structure for this event type contains: +.LP +.IN "XSelectionClearEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* SelectionClear */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; + Atom selection; + Time time; +} XSelectionClearEvent; +.De +.LP +.eM +The selection member is set to the selection atom. +The time member is set to the last change time recorded for the +selection. +The window member is the window that was specified by the current owner +(the owner losing the selection) in its +.PN XSetSelectionOwner +call. +.NH 3 +SelectionRequest Events +.XS +\*(SN SelectionRequest Events +.XE +.LP +.IN "Events" "SelectionRequest" +.IN "SelectionRequest" "" "@DEF@" +The X server reports +.PN SelectionRequest +events to the owner of a selection. +The X server generates this event whenever a client +requests a selection conversion by calling +.PN XConvertSelection +for the owned selection. +.LP +The structure for this event type contains: +.LP +.IN "XSelectionRequestEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* SelectionRequest */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window owner; + Window requestor; + Atom selection; + Atom target; + Atom property; + Time time; +} XSelectionRequestEvent; +.De +.LP +.eM +The owner member is set to the window +that was specified by the current owner in its +.PN XSetSelectionOwner +call. +The requestor member is set to the window requesting the selection. +The selection member is set to the atom that names the selection. +For example, PRIMARY is used to indicate the primary selection. +The target member is set to the atom that indicates the type +the selection is desired in. +The property member can be a property name or +.PN None . +The time member is set to the timestamp or +.PN CurrentTime +value from the +.PN ConvertSelection +request. +.LP +The owner should convert the selection based on the specified target type +and send a +.PN SelectionNotify +event back to the requestor. +A complete specification for using selections is given in the X Consortium +standard \fIInter-Client Communication Conventions Manual\fP. +.NH 3 +SelectionNotify Events +.XS +\*(SN SelectionNotify Events +.XE +.LP +.IN "Events" "SelectionNotify" +.IN "SelectionNotify" "" "@DEF@" +This event is generated by the X server in response to a +.PN ConvertSelection +protocol request when there is no owner for the selection. +When there is an owner, it should be generated by the owner +of the selection by using +.PN XSendEvent . +The owner of a selection should send this event to a requestor when a selection +has been converted and stored as a property +or when a selection conversion could +not be performed (which is indicated by setting the property member to +.PN None ). +.LP +If +.PN None +is specified as the property in the +.PN ConvertSelection +protocol request, the owner should choose a property name, +store the result as that property on the requestor window, +and then send a +.PN SelectionNotify +giving that actual property name. +.LP +The structure for this event type contains: +.LP +.IN "XSelectionEvent" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + int type; /* SelectionNotify */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + Window requestor; + Atom selection; + Atom target; + Atom property; /* atom or None */ + Time time; +} XSelectionEvent; +.De +.LP +.eM +The requestor member is set to the window associated with +the requestor of the selection. +The selection member is set to the atom that indicates the selection. +For example, PRIMARY is used for the primary selection. +The target member is set to the atom that indicates the converted type. +For example, PIXMAP is used for a pixmap. +The property member is set to the atom that indicates which +property the result was stored on. +If the conversion failed, +the property member is set to +.PN None . +The time member is set to the time the conversion took place and +can be a timestamp or +.PN CurrentTime . +.bp |