home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-08-22 | 94.4 KB | 3,711 lines |
- \&
- .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 mask
- .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
- .Pn < 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 ,
- .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
- .Pn < X11/Xlib.h >.
- All the event structures have the following common members:
- .LP
- .IN "XAnyEvent" "" "@DEF@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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
- .Pn < 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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 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 .
- .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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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 due to 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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
- .Pn < 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- The request member is set to indicate the kind of mapping change that occurred
- and can be
- .PN MappingModifier ,
- .PN MappingKeyboard ,
- .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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .Ds 0
- .TA .5i 3i
- .ta .5i 3i
- typedef struct {
- int type; /* VisibiltyNotify */
- 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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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 Above
- and
- .PN None ,
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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 20 8-bit values,
- 10 16-bit values, and 5 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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@"
- .\" Start marker code here
- .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
- .\" End marker code here
- .LP
- 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
-