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