Содержание | Список структур |
Формат структуры:
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, которое хранит момент времени, в который это событие было сгенерировано. Перед тем, как обращаться к остальным данным события, необходимо установить на него указатель соответствующего типа.
Содержание | Список структур |