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