eventstr.h revision a3f3701cea1ba388e7c877955252bb7375eedebd
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian/*
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Copyright © 2009 Red Hat, Inc.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian *
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Permission is hereby granted, free of charge, to any person obtaining a
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * copy of this software and associated documentation files (the "Software"),
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * to deal in the Software without restriction, including without limitation
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * the rights to use, copy, modify, merge, publish, distribute, sublicense,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * and/or sell copies of the Software, and to permit persons to whom the
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Software is furnished to do so, subject to the following conditions:
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian *
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * The above copyright notice and this permission notice (including the next
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * paragraph) shall be included in all copies or substantial portions of the
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Software.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian *
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * DEALINGS IN THE SOFTWARE.
d2365b013d4199b49b3a1438d57aea23423e02adPavel Tatashin *
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian#ifndef EVENTSTR_H
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian#define EVENTSTR_H
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian#include <events.h>
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian/**
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * @file events.h
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * This file describes the event structures used internally by the X
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * server during event generation and event processing.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian *
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * When are internal events used?
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Events from input devices are stored as internal events in the EQ and
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * processed as internal events until late in the processing cycle. Only then
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * do they switch to their respective wire events.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian/**
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Event types. Used exclusively internal to the server, not visible on the
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * protocol.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian *
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Note: Keep KeyPress to Motion aligned with the core events.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Keep ET_Raw* in the same order as KeyPress - Motion
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian */
183ef8a1713ca188e24d970f22c6f9cc333007fdHaik Aftandilianenum EventType {
d2365b013d4199b49b3a1438d57aea23423e02adPavel Tatashin ET_KeyPress = 2,
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian ET_KeyRelease,
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian ET_ButtonPress,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_ButtonRelease,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_Motion,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_TouchBegin,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_TouchUpdate,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_TouchEnd,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_TouchOwnership,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_Enter,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_Leave,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_FocusIn,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_FocusOut,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_ProximityIn,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_ProximityOut,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_DeviceChanged,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_Hierarchy,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_DGAEvent,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_RawKeyPress,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_RawKeyRelease,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_RawButtonPress,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_RawButtonRelease,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_RawMotion,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_RawTouchBegin,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_RawTouchUpdate,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_RawTouchEnd,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_XQuartz,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ET_Internal = 0xFF /* First byte */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian};
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian/**
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Used for ALL input device events internal in the server until
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * copied into the matching protocol event.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian *
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Note: We only use the device id because the DeviceIntPtr may become invalid while
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * the event is in the EQ.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilianstruct _DeviceEvent {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian unsigned char header; /**< Always ET_Internal */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian enum EventType type; /**< One of EventType */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int length; /**< Length in bytes */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian Time time; /**< Time in ms */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int deviceid; /**< Device to post this event for */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian int sourceid; /**< The physical source device */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian union {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t button; /**< Button number (also used in pointer emulating
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian touch events) */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t key; /**< Key code */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian } detail;
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t touchid; /**< Touch ID (client_id) */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int16_t root_x; /**< Pos relative to root window in integral data */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian float root_x_frac; /**< Pos relative to root window in frac part */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int16_t root_y; /**< Pos relative to root window in integral part */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian float root_y_frac; /**< Pos relative to root window in frac part */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint8_t buttons[(MAX_BUTTONS + 7) / 8]; /**< Button mask */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian struct {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint8_t mask[(MAX_VALUATORS + 7) / 8];/**< Valuator mask */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint8_t mode[(MAX_VALUATORS + 7) / 8];/**< Valuator mode (Abs or Rel)*/
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian double data[MAX_VALUATORS]; /**< Valuator data */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian } valuators;
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian struct {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t base; /**< XKB base modifiers */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t latched; /**< XKB latched modifiers */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t locked; /**< XKB locked modifiers */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t effective;/**< XKB effective modifiers */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian } mods;
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian struct {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint8_t base; /**< XKB base group */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint8_t latched; /**< XKB latched group */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint8_t locked; /**< XKB locked group */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint8_t effective;/**< XKB effective group */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian } group;
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian Window root; /**< Root window of the event */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int corestate; /**< Core key/button state BEFORE the event */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int key_repeat; /**< Internally-generated key repeat event */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t flags; /**< Flags to be copied into the generated event */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian};
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian/**
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Generated internally whenever a touch ownership chain changes - an owner
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * has accepted or rejected a touch, or a grab/event selection in the delivery
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * chain has been removed.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilianstruct _TouchOwnershipEvent {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian unsigned char header; /**< Always ET_Internal */
d2365b013d4199b49b3a1438d57aea23423e02adPavel Tatashin enum EventType type; /**< One of EventType */
d2365b013d4199b49b3a1438d57aea23423e02adPavel Tatashin int length; /**< Length in bytes */
d2365b013d4199b49b3a1438d57aea23423e02adPavel Tatashin Time time; /**< Time in ms */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int deviceid; /**< Device to post this event for */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int sourceid; /**< The physical source device */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t touchid; /**< Touch ID (client_id) */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian uint8_t reason; /**< ::XIAcceptTouch, ::XIRejectTouch */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian uint32_t resource; /**< Provoking grab or event selection */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian uint32_t flags; /**< Flags to be copied into the generated event */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian};
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian/* Flags used in DeviceChangedEvent to signal if the slave has changed */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#define DEVCHANGE_SLAVE_SWITCH 0x2
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian/* Flags used in DeviceChangedEvent to signal whether the event was a
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian * pointer event or a keyboard event */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#define DEVCHANGE_POINTER_EVENT 0x4
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#define DEVCHANGE_KEYBOARD_EVENT 0x8
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian/* device capabilities changed */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#define DEVCHANGE_DEVICE_CHANGE 0x10
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian/**
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian * Sent whenever a device's capabilities have changed.
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilianstruct _DeviceChangedEvent {
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian unsigned char header; /**< Always ET_Internal */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian enum EventType type; /**< ET_DeviceChanged */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int length; /**< Length in bytes */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian Time time; /**< Time in ms */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int deviceid; /**< Device whose capabilities have changed */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int flags; /**< Mask of ::HAS_NEW_SLAVE,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ::POINTER_EVENT, ::KEYBOARD_EVENT */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int masterid; /**< MD when event was generated */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int sourceid; /**< The device that caused the change */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian struct {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int num_buttons; /**< Number of buttons */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian Atom names[MAX_BUTTONS];/**< Button names */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian } buttons;
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int num_valuators; /**< Number of axes */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian struct {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t min; /**< Minimum value */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t max; /**< Maximum value */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian /* FIXME: frac parts of min/max */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint32_t resolution; /**< Resolution counts/m */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint8_t mode; /**< Relative or Absolute */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian Atom name; /**< Axis name */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ScrollInfo scroll; /**< Smooth scrolling info */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian } valuators[MAX_VALUATORS];
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian struct {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int min_keycode;
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int max_keycode;
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian } keys;
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian};
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian#if XFreeXDGA
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian/**
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * DGAEvent, used by DGA to intercept and emulate input events.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilianstruct _DGAEvent {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian unsigned char header; /**< Always ET_Internal */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian enum EventType type; /**< ET_DGAEvent */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int length; /**< Length in bytes */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian Time time; /**< Time in ms */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int subtype; /**< KeyPress, KeyRelease, ButtonPress,
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian ButtonRelease, MotionNotify */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int detail; /**< Button number or key code */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int dx; /**< Relative x coordinate */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int dy; /**< Relative y coordinate */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian int screen; /**< Screen number this event applies to */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian uint16_t state; /**< Core modifier/button state */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian};
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian#endif
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian/**
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian * Raw event, contains the data as posted by the device.
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilianstruct _RawDeviceEvent {
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian unsigned char header; /**< Always ET_Internal */
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian enum EventType type; /**< ET_Raw */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian int length; /**< Length in bytes */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian Time time; /**< Time in ms */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian int deviceid; /**< Device to post this event for */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian int sourceid; /**< The physical source device */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian union {
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian uint32_t button; /**< Button number */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian uint32_t key; /**< Key code */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian } detail;
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian struct {
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian uint8_t mask[(MAX_VALUATORS + 7) / 8];/**< Valuator mask */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian double data[MAX_VALUATORS]; /**< Valuator data */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian double data_raw[MAX_VALUATORS]; /**< Valuator data as posted */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian } valuators;
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian uint32_t flags; /**< Flags to be copied into the generated event */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian};
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#ifdef XQUARTZ
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#define XQUARTZ_EVENT_MAXARGS 5
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilianstruct _XQuartzEvent {
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian unsigned char header; /**< Always ET_Internal */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian enum EventType type; /**< Always ET_XQuartz */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian int length; /**< Length in bytes */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian Time time; /**< Time in ms. */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian int subtype; /**< Subtype defined by XQuartz DDX */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian uint32_t data[XQUARTZ_EVENT_MAXARGS]; /**< Up to 5 32bit values passed to handler */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian};
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#endif
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian/**
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian * Event type used inside the X server for input event
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian * processing.
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilianunion _InternalEvent {
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian struct {
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian unsigned char header; /**< Always ET_Internal */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian enum EventType type; /**< One of ET_* */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian int length; /**< Length in bytes */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian Time time; /**< Time in ms. */
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian } any;
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian DeviceEvent device_event;
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian DeviceChangedEvent changed_event;
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian TouchOwnershipEvent touch_ownership_event;
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#if XFreeXDGA
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian DGAEvent dga_event;
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#endif
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian RawDeviceEvent raw_event;
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#ifdef XQUARTZ
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian XQuartzEvent xquartz_event;
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian#endif
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian};
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian
023e71de9e5670cebc23dd51162833661d3d2d3bHaik Aftandilian#endif
00a57bdfe7eeb62d10d0c0b3aab64d24a4d89287Haik Aftandilian