| Содержание | Список структур |
Формат структуры:
typedef union _XEvent {
int type;
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;
В поле type заносится номер типа события, которому соответствует определенная структура данных события. Таким образом, диспетчеру событий необходимо проанализировать номер типа события и затем обращаться к данным события через соответствующую структуру данных. Для всех типов событий существуют символьные определения:
#define KeyPress 2
#define KeyRelease 3
#define ButtonPress 4
#define ButtonRelease 5
#define MotionNotify 6
#define EnterNotify 7
#define LeaveNotify 8
#define FocusIn 9
#define FocusOut 10
#define KeymapNotify 11
#define Expose 12
#define GraphicsExpose 13
#define NoExpose 14
#define VisibilityNotify 15
#define CreateNotify 16
#define DestroyNotify 17
#define UnmapNotify 18
#define MapNotify 19
#define MapRequest 20
#define ReparentNotify 21
#define ConfigureNotify 22
#define ConfigureRequest 23
#define GravityNotify 24
#define ResizeRequest 25
#define CirculateNotify 26
#define CirculateRequest 27
#define PropertyNotify 28
#define SelectionClear 29
#define SelectionRequest 30
#define SelectionNotify 31
#define ColormapNotify 32
#define ClientMessage 33
#define MappingNotify 34
#define LASTEvent 35
Во в XEvent первые пять элементов являются стандартными для всех типов событий. Первый элемент всегда указывает тип события и называется type. Второй элемент хранит серийный номер запроса, обработка которого привела к генерации этого события и называется serial. Третий элемент называется send_event. Он является логическим типом и принимает значение True, если событие было послано другим клиентом. Четвёртый элемнет называется display и указывает на диплей, с которого это событие было получено. Пятый элемент называется window. Используется он для всех событий, кроме KeymapNotify. Он хранит идентификатор окна, с которым связано событие. Для того обеспечения корректной обработки событий порядок следования этих пяти элементов сохраняется для всех типов событий. Большая часть событий также содержит поле time, которое хранит момент времени, в который это событие было сгенерировано. Перед тем, как обращаться к остальным данным события, необходимо установить на него указатель соответствующего типа.
| Содержание | Список структур |