Содержание Список структур

XEvent - обьединение всех типов событий системы X Window.

Формат структуры:

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


Содержание Список структур