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