1706f2543Smrg/*
2706f2543Smrg
3706f2543SmrgCopyright 1993, 1998  The Open Group
4706f2543Smrg
5706f2543SmrgPermission to use, copy, modify, distribute, and sell this software and its
6706f2543Smrgdocumentation for any purpose is hereby granted without fee, provided that
7706f2543Smrgthe above copyright notice appear in all copies and that both that
8706f2543Smrgcopyright notice and this permission notice appear in supporting
9706f2543Smrgdocumentation.
10706f2543Smrg
11706f2543SmrgThe above copyright notice and this permission notice shall be included
12706f2543Smrgin all copies or substantial portions of the Software.
13706f2543Smrg
14706f2543SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15706f2543SmrgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16706f2543SmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17706f2543SmrgIN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
18706f2543SmrgOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19706f2543SmrgARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20706f2543SmrgOTHER DEALINGS IN THE SOFTWARE.
21706f2543Smrg
22706f2543SmrgExcept as contained in this notice, the name of The Open Group shall
23706f2543Smrgnot be used in advertising or otherwise to promote the sale, use or
24706f2543Smrgother dealings in this Software without prior written authorization
25706f2543Smrgfrom The Open Group.
26706f2543Smrg
27706f2543Smrg*/
28706f2543Smrg
29706f2543Smrg#ifdef HAVE_DIX_CONFIG_H
30706f2543Smrg#include <dix-config.h>
31706f2543Smrg#endif
32706f2543Smrg
33706f2543Smrg#include <X11/X.h>
34706f2543Smrg#include "mi.h"
35706f2543Smrg#include <X11/Xproto.h>
36706f2543Smrg#include "scrnintstr.h"
37706f2543Smrg#include "inputstr.h"
38706f2543Smrg#include <X11/Xos.h>
39706f2543Smrg#include "mibstore.h"
40706f2543Smrg#include "mipointer.h"
41706f2543Smrg#include "xkbsrv.h"
42706f2543Smrg#include <X11/keysym.h>
43706f2543Smrg#include "xserver-properties.h"
44706f2543Smrg#include "exevents.h"
45706f2543Smrg#include "extinit.h"
46706f2543Smrg
47706f2543SmrgBool
48706f2543SmrgLegalModifier(unsigned int key, DeviceIntPtr pDev)
49706f2543Smrg{
50706f2543Smrg    return TRUE;
51706f2543Smrg}
52706f2543Smrg
53706f2543Smrgvoid
54706f2543SmrgProcessInputEvents(void)
55706f2543Smrg{
56706f2543Smrg    mieqProcessInputEvents();
57706f2543Smrg}
58706f2543Smrg
59706f2543Smrgvoid DDXRingBell(int volume, int pitch, int duration)
60706f2543Smrg{
61706f2543Smrg}
62706f2543Smrg
63706f2543Smrg#define VFB_MIN_KEY 8
64706f2543Smrg#define VFB_MAX_KEY 255
65706f2543Smrg
66706f2543Smrgstatic int
67706f2543SmrgvfbKeybdProc(DeviceIntPtr pDevice, int onoff)
68706f2543Smrg{
69706f2543Smrg    DevicePtr pDev = (DevicePtr)pDevice;
70706f2543Smrg
71706f2543Smrg    switch (onoff)
72706f2543Smrg    {
73706f2543Smrg    case DEVICE_INIT:
74706f2543Smrg	InitKeyboardDeviceStruct(pDevice, NULL, NULL, NULL);
75706f2543Smrg        break;
76706f2543Smrg    case DEVICE_ON:
77706f2543Smrg	pDev->on = TRUE;
78706f2543Smrg	break;
79706f2543Smrg    case DEVICE_OFF:
80706f2543Smrg	pDev->on = FALSE;
81706f2543Smrg	break;
82706f2543Smrg    case DEVICE_CLOSE:
83706f2543Smrg	break;
84706f2543Smrg    }
85706f2543Smrg    return Success;
86706f2543Smrg}
87706f2543Smrg
88706f2543Smrgstatic int
89706f2543SmrgvfbMouseProc(DeviceIntPtr pDevice, int onoff)
90706f2543Smrg{
91706f2543Smrg#define NBUTTONS 3
92706f2543Smrg#define NAXES 2
93706f2543Smrg
94706f2543Smrg    BYTE map[NBUTTONS + 1];
95706f2543Smrg    DevicePtr pDev = (DevicePtr)pDevice;
96706f2543Smrg    Atom btn_labels[NBUTTONS] = {0};
97706f2543Smrg    Atom axes_labels[NAXES] = {0};
98706f2543Smrg
99706f2543Smrg    switch (onoff)
100706f2543Smrg    {
101706f2543Smrg    case DEVICE_INIT:
102706f2543Smrg	    map[1] = 1;
103706f2543Smrg	    map[2] = 2;
104706f2543Smrg	    map[3] = 3;
105706f2543Smrg
106706f2543Smrg            btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
107706f2543Smrg            btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
108706f2543Smrg            btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
109706f2543Smrg
110706f2543Smrg            axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
111706f2543Smrg            axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
112706f2543Smrg
113706f2543Smrg	    InitPointerDeviceStruct(pDev, map, NBUTTONS, btn_labels,
114706f2543Smrg		(PtrCtrlProcPtr)NoopDDA, GetMotionHistorySize(), NAXES, axes_labels);
115706f2543Smrg	    break;
116706f2543Smrg
117706f2543Smrg    case DEVICE_ON:
118706f2543Smrg	pDev->on = TRUE;
119706f2543Smrg        break;
120706f2543Smrg
121706f2543Smrg    case DEVICE_OFF:
122706f2543Smrg	pDev->on = FALSE;
123706f2543Smrg	break;
124706f2543Smrg
125706f2543Smrg    case DEVICE_CLOSE:
126706f2543Smrg	break;
127706f2543Smrg    }
128706f2543Smrg    return Success;
129706f2543Smrg
130706f2543Smrg#undef NBUTTONS
131706f2543Smrg#undef NAXES
132706f2543Smrg}
133706f2543Smrg
134706f2543Smrgvoid
135706f2543SmrgInitInput(int argc, char *argv[])
136706f2543Smrg{
137706f2543Smrg    DeviceIntPtr p, k;
138706f2543Smrg    Atom xiclass;
139706f2543Smrg    p = AddInputDevice(serverClient, vfbMouseProc, TRUE);
140706f2543Smrg    k = AddInputDevice(serverClient, vfbKeybdProc, TRUE);
141706f2543Smrg    xiclass = MakeAtom(XI_MOUSE, sizeof(XI_MOUSE) - 1, TRUE);
142706f2543Smrg    AssignTypeAndName(p, xiclass, "Xvfb mouse");
143706f2543Smrg    xiclass = MakeAtom(XI_KEYBOARD, sizeof(XI_KEYBOARD) - 1, TRUE);
144706f2543Smrg    AssignTypeAndName(k, xiclass, "Xvfb keyboard");
145706f2543Smrg    (void)mieqInit();
146706f2543Smrg}
147706f2543Smrg
148706f2543Smrgvoid
149706f2543SmrgCloseInput (void)
150706f2543Smrg{
151706f2543Smrg}
152