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