45e9809aff7304721fddb95654901b32195c9c7avboxsync/*
45e9809aff7304721fddb95654901b32195c9c7avboxsync * Copyright 2002 Red Hat Inc., Durham, North Carolina.
45e9809aff7304721fddb95654901b32195c9c7avboxsync *
45e9809aff7304721fddb95654901b32195c9c7avboxsync * All Rights Reserved.
45e9809aff7304721fddb95654901b32195c9c7avboxsync *
45e9809aff7304721fddb95654901b32195c9c7avboxsync * Permission is hereby granted, free of charge, to any person obtaining
45e9809aff7304721fddb95654901b32195c9c7avboxsync * a copy of this software and associated documentation files (the
45e9809aff7304721fddb95654901b32195c9c7avboxsync * "Software"), to deal in the Software without restriction, including
45e9809aff7304721fddb95654901b32195c9c7avboxsync * without limitation on the rights to use, copy, modify, merge,
45e9809aff7304721fddb95654901b32195c9c7avboxsync * publish, distribute, sublicense, and/or sell copies of the Software,
45e9809aff7304721fddb95654901b32195c9c7avboxsync * and to permit persons to whom the Software is furnished to do so,
45e9809aff7304721fddb95654901b32195c9c7avboxsync * subject to the following conditions:
45e9809aff7304721fddb95654901b32195c9c7avboxsync *
45e9809aff7304721fddb95654901b32195c9c7avboxsync * The above copyright notice and this permission notice (including the
45e9809aff7304721fddb95654901b32195c9c7avboxsync * next paragraph) shall be included in all copies or substantial
45e9809aff7304721fddb95654901b32195c9c7avboxsync * portions of the Software.
45e9809aff7304721fddb95654901b32195c9c7avboxsync *
45e9809aff7304721fddb95654901b32195c9c7avboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
45e9809aff7304721fddb95654901b32195c9c7avboxsync * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
45e9809aff7304721fddb95654901b32195c9c7avboxsync * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
45e9809aff7304721fddb95654901b32195c9c7avboxsync * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
45e9809aff7304721fddb95654901b32195c9c7avboxsync * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
45e9809aff7304721fddb95654901b32195c9c7avboxsync * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
45e9809aff7304721fddb95654901b32195c9c7avboxsync * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
45e9809aff7304721fddb95654901b32195c9c7avboxsync * SOFTWARE.
45e9809aff7304721fddb95654901b32195c9c7avboxsync */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync/*
45e9809aff7304721fddb95654901b32195c9c7avboxsync * Authors:
45e9809aff7304721fddb95654901b32195c9c7avboxsync * Rickard E. (Rik) Faith <faith@redhat.com>
45e9809aff7304721fddb95654901b32195c9c7avboxsync *
45e9809aff7304721fddb95654901b32195c9c7avboxsync */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync/** \file
45e9809aff7304721fddb95654901b32195c9c7avboxsync * Interface for low-level input support. \see dmxinputinit.c */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync#ifndef _DMXINPUTINIT_H_
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define _DMXINPUTINIT_H_
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync#include "dmx.h"
45e9809aff7304721fddb95654901b32195c9c7avboxsync#include "dmxinput.h"
45e9809aff7304721fddb95654901b32195c9c7avboxsync#include "dmxlog.h"
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define DMX_LOCAL_DEFAULT_KEYBOARD "kbd"
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define DMX_LOCAL_DEFAULT_POINTER "ps2"
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define DMX_MAX_BUTTONS 256
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define DMX_MOTION_SIZE 256
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define DMX_MAX_VALUATORS 32
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define DMX_MAX_AXES 32
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define DMX_MAX_XINPUT_EVENT_TYPES 100
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define DMX_MAP_ENTRIES 16 /* Must be a power of 2 */
45e9809aff7304721fddb95654901b32195c9c7avboxsync#define DMX_MAP_MASK (DMX_MAP_ENTRIES - 1)
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef enum {
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_FUNCTION_GRAB,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_FUNCTION_TERMINATE,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_FUNCTION_FINE
45e9809aff7304721fddb95654901b32195c9c7avboxsync} DMXFunctionType;
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef enum {
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_LOCAL_HIGHLEVEL,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_LOCAL_KEYBOARD,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_LOCAL_MOUSE,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_LOCAL_OTHER
45e9809aff7304721fddb95654901b32195c9c7avboxsync} DMXLocalInputType;
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef enum {
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_LOCAL_TYPE_LOCAL,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_LOCAL_TYPE_CONSOLE,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_LOCAL_TYPE_BACKEND,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_LOCAL_TYPE_COMMON
45e9809aff7304721fddb95654901b32195c9c7avboxsync} DMXLocalInputExtType;
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef enum {
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_RELATIVE,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_ABSOLUTE,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMX_ABSOLUTE_CONFINED
45e9809aff7304721fddb95654901b32195c9c7avboxsync} DMXMotionType;
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync/** Stores information from low-level device that is used to initialize
45e9809aff7304721fddb95654901b32195c9c7avboxsync * the device at the dix level. */
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef struct _DMXLocalInitInfo {
45e9809aff7304721fddb95654901b32195c9c7avboxsync int keyboard; /**< Non-zero if the device is a keyboard */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync int keyClass; /**< Non-zero if keys are present */
45e9809aff7304721fddb95654901b32195c9c7avboxsync KeySymsRec keySyms; /**< Key symbols */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int freemap; /**< If non-zero, free keySyms.map */
45e9809aff7304721fddb95654901b32195c9c7avboxsync CARD8 modMap[MAP_LENGTH]; /**< Modifier map */
45e9809aff7304721fddb95654901b32195c9c7avboxsync XkbDescPtr xkb; /**< XKB description */
45e9809aff7304721fddb95654901b32195c9c7avboxsync XkbComponentNamesRec names; /**< XKB component names */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int freenames; /**< Non-zero if names should be free'd */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int force; /**< Do not allow command line override */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync int buttonClass; /**< Non-zero if buttons are present */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int numButtons; /**< Number of buttons */
45e9809aff7304721fddb95654901b32195c9c7avboxsync unsigned char map[DMX_MAX_BUTTONS]; /**< Button map */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync int valuatorClass; /**< Non-zero if valuators are
45e9809aff7304721fddb95654901b32195c9c7avboxsync * present */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int numRelAxes; /**< Number of relative axes */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int numAbsAxes; /**< Number of absolute axes */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int minval[DMX_MAX_AXES]; /**< Minimum values */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int maxval[DMX_MAX_AXES]; /**< Maximum values */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int res[DMX_MAX_AXES]; /**< Resolution */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int minres[DMX_MAX_AXES]; /**< Minimum resolutions */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int maxres[DMX_MAX_AXES]; /**< Maximum resolutions */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync int focusClass; /**< Non-zero if device can
45e9809aff7304721fddb95654901b32195c9c7avboxsync * cause focus */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int proximityClass; /**< Non-zero if device
45e9809aff7304721fddb95654901b32195c9c7avboxsync * causes proximity events */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int kbdFeedbackClass; /**< Non-zero if device has
45e9809aff7304721fddb95654901b32195c9c7avboxsync * keyboard feedback */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int ptrFeedbackClass; /**< Non-zero if device has
45e9809aff7304721fddb95654901b32195c9c7avboxsync * pointer feedback */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int ledFeedbackClass; /**< Non-zero if device has
45e9809aff7304721fddb95654901b32195c9c7avboxsync * LED indicators */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int belFeedbackClass; /**< Non-zero if device has a
45e9809aff7304721fddb95654901b32195c9c7avboxsync * bell */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int intFeedbackClass; /**< Non-zero if device has
45e9809aff7304721fddb95654901b32195c9c7avboxsync * integer feedback */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int strFeedbackClass; /**< Non-zero if device has
45e9809aff7304721fddb95654901b32195c9c7avboxsync * string feedback */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync int maxSymbols; /**< Maximum symbols */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int maxSymbolsSupported; /**< Maximum symbols supported */
45e9809aff7304721fddb95654901b32195c9c7avboxsync KeySym *symbols; /**< Key symbols */
45e9809aff7304721fddb95654901b32195c9c7avboxsync} DMXLocalInitInfo, *DMXLocalInitInfoPtr;
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef pointer (*dmxCreatePrivateProcPtr)(DeviceIntPtr);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxDestroyPrivateProcPtr)(pointer);
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxInitProcPtr)(DevicePtr);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxReInitProcPtr)(DevicePtr);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxLateReInitProcPtr)(DevicePtr);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxGetInfoProcPtr)(DevicePtr, DMXLocalInitInfoPtr);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef int (*dmxOnProcPtr)(DevicePtr);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxOffProcPtr)(DevicePtr);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxUpdatePositionProcPtr)(pointer, int x, int y);
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxVTPreSwitchProcPtr)(pointer); /* Turn I/O Off */
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxVTPostSwitchProcPtr)(pointer); /* Turn I/O On */
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxVTSwitchReturnProcPtr)(pointer);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef int (*dmxVTSwitchProcPtr)(pointer, int vt,
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxVTSwitchReturnProcPtr, pointer);
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxMotionProcPtr)(DevicePtr,
45e9809aff7304721fddb95654901b32195c9c7avboxsync int *valuators,
45e9809aff7304721fddb95654901b32195c9c7avboxsync int firstAxis,
45e9809aff7304721fddb95654901b32195c9c7avboxsync int axesCount,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMXMotionType type,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMXBlockType block);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxEnqueueProcPtr)(DevicePtr, int type, int detail,
45e9809aff7304721fddb95654901b32195c9c7avboxsync KeySym keySym, XEvent *e,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMXBlockType block);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef int (*dmxCheckSpecialProcPtr)(DevicePtr, KeySym keySym);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxCollectEventsProcPtr)(DevicePtr,
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxMotionProcPtr,
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxEnqueueProcPtr,
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxCheckSpecialProcPtr,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMXBlockType);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxProcessInputProcPtr)(pointer);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxUpdateInfoProcPtr)(pointer, DMXUpdateType, WindowPtr);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef int (*dmxFunctionsProcPtr)(pointer, DMXFunctionType);
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxKBCtrlProcPtr)(DevicePtr, KeybdCtrl *ctrl);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxMCtrlProcPtr)(DevicePtr, PtrCtrl *ctrl);
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef void (*dmxKBBellProcPtr)(DevicePtr, int percent,
45e9809aff7304721fddb95654901b32195c9c7avboxsync int volume, int pitch, int duration);
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync/** Stores a mapping between the device id on the remote X server and
45e9809aff7304721fddb95654901b32195c9c7avboxsync * the id on the DMX server */
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef struct _DMXEventMap {
45e9809aff7304721fddb95654901b32195c9c7avboxsync int remote; /**< Event number on remote X server */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int server; /**< Event number (unbiased) on DMX server */
45e9809aff7304721fddb95654901b32195c9c7avboxsync} DMXEventMap;
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync/** This is the device-independent structure used by the low-level input
45e9809aff7304721fddb95654901b32195c9c7avboxsync * routines. The contents are not exposed to top-level .c files (except
45e9809aff7304721fddb95654901b32195c9c7avboxsync * dmxextensions.c). \see dmxinput.h \see dmxextensions.c */
45e9809aff7304721fddb95654901b32195c9c7avboxsynctypedef struct _DMXLocalInputInfo {
45e9809aff7304721fddb95654901b32195c9c7avboxsync const char *name; /**< Device name */
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMXLocalInputType type; /**< Device type */
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMXLocalInputExtType extType; /**< Extended device type */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int binding; /**< Count of how many consecutive
45e9809aff7304721fddb95654901b32195c9c7avboxsync * structs are bound to the same
45e9809aff7304721fddb95654901b32195c9c7avboxsync * device */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync /* Low-level (e.g., keyboard/mouse drivers) */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxCreatePrivateProcPtr create_private; /**< Create
45e9809aff7304721fddb95654901b32195c9c7avboxsync * device-dependent
45e9809aff7304721fddb95654901b32195c9c7avboxsync * private */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxDestroyPrivateProcPtr destroy_private; /**< Destroy
45e9809aff7304721fddb95654901b32195c9c7avboxsync * device-dependent
45e9809aff7304721fddb95654901b32195c9c7avboxsync * private */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxInitProcPtr init; /**< Initialize device */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxReInitProcPtr reinit; /**< Reinitialize device
45e9809aff7304721fddb95654901b32195c9c7avboxsync * (during a
45e9809aff7304721fddb95654901b32195c9c7avboxsync * reconfiguration) */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxLateReInitProcPtr latereinit; /**< Reinitialize a device
45e9809aff7304721fddb95654901b32195c9c7avboxsync * (called very late
45e9809aff7304721fddb95654901b32195c9c7avboxsync * during a
45e9809aff7304721fddb95654901b32195c9c7avboxsync * reconfiguration) */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxGetInfoProcPtr get_info; /**< Get device information */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxOnProcPtr on; /**< Turn device on */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxOffProcPtr off; /**< Turn device off */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxUpdatePositionProcPtr update_position; /**< Called when another
45e9809aff7304721fddb95654901b32195c9c7avboxsync * device updates the
45e9809aff7304721fddb95654901b32195c9c7avboxsync * cursor position */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxVTPreSwitchProcPtr vt_pre_switch; /**< Called before a VT switch */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxVTPostSwitchProcPtr vt_post_switch; /**< Called after a VT switch */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxVTSwitchProcPtr vt_switch; /**< Causes a VT switch */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxCollectEventsProcPtr collect_events; /**< Collect and enqueue
45e9809aff7304721fddb95654901b32195c9c7avboxsync * events from the
45e9809aff7304721fddb95654901b32195c9c7avboxsync * device*/
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxProcessInputProcPtr process_input; /**< Process event (from
45e9809aff7304721fddb95654901b32195c9c7avboxsync * queue) */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxFunctionsProcPtr functions;
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxUpdateInfoProcPtr update_info; /**< Update window layout
45e9809aff7304721fddb95654901b32195c9c7avboxsync * information */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxMCtrlProcPtr mCtrl; /**< Pointer control */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxKBCtrlProcPtr kCtrl; /**< Keyboard control */
45e9809aff7304721fddb95654901b32195c9c7avboxsync dmxKBBellProcPtr kBell; /**< Bell control */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync pointer private; /**< Device-dependent private */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int isCore; /**< Is a DMX core device */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int sendsCore; /**< Sends DMX core events */
45e9809aff7304721fddb95654901b32195c9c7avboxsync KeybdCtrl kctrl; /**< Keyboard control */
45e9809aff7304721fddb95654901b32195c9c7avboxsync PtrCtrl mctrl; /**< Pointer control */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync DeviceIntPtr pDevice; /**< X-level device */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int inputIdx; /**< High-level index */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int lastX, lastY; /**< Last known position;
45e9809aff7304721fddb95654901b32195c9c7avboxsync * for XInput in
45e9809aff7304721fddb95654901b32195c9c7avboxsync * dmxevents.c */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync int head; /**< XInput motion history
45e9809aff7304721fddb95654901b32195c9c7avboxsync * head */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int tail; /**< XInput motion history
45e9809aff7304721fddb95654901b32195c9c7avboxsync * tail */
45e9809aff7304721fddb95654901b32195c9c7avboxsync unsigned long *history; /**< XInput motion history */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int *valuators; /**< Cache of previous values */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync /* for XInput ChangePointerDevice */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int (*savedMotionProc)(DeviceIntPtr,
45e9809aff7304721fddb95654901b32195c9c7avboxsync xTimecoord *,
45e9809aff7304721fddb95654901b32195c9c7avboxsync unsigned long,
45e9809aff7304721fddb95654901b32195c9c7avboxsync unsigned long,
45e9809aff7304721fddb95654901b32195c9c7avboxsync ScreenPtr);
45e9809aff7304721fddb95654901b32195c9c7avboxsync int savedMotionEvents; /**< Saved motion events */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int savedSendsCore; /**< Saved sends-core flag */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMXEventMap map[DMX_MAP_ENTRIES]; /**< XInput device id map */
45e9809aff7304721fddb95654901b32195c9c7avboxsync int mapOptimize; /**< XInput device id
45e9809aff7304721fddb95654901b32195c9c7avboxsync * map
45e9809aff7304721fddb95654901b32195c9c7avboxsync * optimization */
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync long deviceId; /**< device id on remote side,
45e9809aff7304721fddb95654901b32195c9c7avboxsync * if any */
45e9809aff7304721fddb95654901b32195c9c7avboxsync const char *deviceName; /**< devive name on remote
45e9809aff7304721fddb95654901b32195c9c7avboxsync * side, if any */
45e9809aff7304721fddb95654901b32195c9c7avboxsync} DMXLocalInputInfoRec;
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern DMXLocalInputInfoPtr dmxLocalCorePointer, dmxLocalCoreKeyboard;
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern void dmxLocalInitInput(DMXInputInfo *dmxInput);
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern DMXLocalInputInfoPtr dmxInputCopyLocal(DMXInputInfo *dmxInput,
45e9809aff7304721fddb95654901b32195c9c7avboxsync DMXLocalInputInfoPtr s);
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern void dmxChangePointerControl(DeviceIntPtr pDevice, PtrCtrl *ctrl);
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern void dmxKeyboardKbdCtrlProc(DeviceIntPtr pDevice, KeybdCtrl *ctrl);
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern void dmxKeyboardBellProc(int percent, DeviceIntPtr pDevice,
45e9809aff7304721fddb95654901b32195c9c7avboxsync pointer ctrl, int unknown);
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern int dmxInputExtensionErrorHandler(Display *dsp, char *name,
45e9809aff7304721fddb95654901b32195c9c7avboxsync char *reason);
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern int dmxInputDetach(DMXInputInfo *dmxInput);
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern void dmxInputDetachAll(DMXScreenInfo *dmxScreen);
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern int dmxInputDetachId(int id);
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern DMXInputInfo *dmxInputLocateId(int id);
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern int dmxInputAttachConsole(const char *name, int isCore,
45e9809aff7304721fddb95654901b32195c9c7avboxsync int *id);
45e9809aff7304721fddb95654901b32195c9c7avboxsyncextern int dmxInputAttachBackend(int physicalScreen, int isCore,
45e9809aff7304721fddb95654901b32195c9c7avboxsync int *id);
45e9809aff7304721fddb95654901b32195c9c7avboxsync
45e9809aff7304721fddb95654901b32195c9c7avboxsync#endif