1 /*
2 
3 Copyright 1993, 1998  The Open Group
4 
5 Permission to use, copy, modify, distribute, and sell this software and its
6 documentation for any purpose is hereby granted without fee, provided that
7 the above copyright notice appear in all copies and that both that
8 copyright notice and this permission notice appear in supporting
9 documentation.
10 
11 The above copyright notice and this permission notice shall be included
12 in all copies or substantial portions of the Software.
13 
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 OTHER DEALINGS IN THE SOFTWARE.
21 
22 Except as contained in this notice, the name of The Open Group shall
23 not be used in advertising or otherwise to promote the sale, use or
24 other dealings in this Software without prior written authorization
25 from The Open Group.
26 
27 */
28 
29 #ifdef HAVE_DIX_CONFIG_H
30 #include <dix-config.h>
31 #endif
32 
33 #include <X11/X.h>
34 #include "mi.h"
35 #include <X11/Xproto.h>
36 #include "scrnintstr.h"
37 #include "inputstr.h"
38 #include <X11/Xos.h>
39 #include "mipointer.h"
40 #include "xkbsrv.h"
41 #include <X11/keysym.h>
42 #include "xserver-properties.h"
43 #include "exevents.h"
44 #include "extinit.h"
45 
46 Bool
LegalModifier(unsigned int key,DeviceIntPtr pDev)47 LegalModifier(unsigned int key, DeviceIntPtr pDev)
48 {
49     return TRUE;
50 }
51 
52 void
ProcessInputEvents(void)53 ProcessInputEvents(void)
54 {
55     mieqProcessInputEvents();
56 }
57 
58 void
DDXRingBell(int volume,int pitch,int duration)59 DDXRingBell(int volume, int pitch, int duration)
60 {
61 }
62 
63 #define VFB_MIN_KEY 8
64 #define VFB_MAX_KEY 255
65 
66 static int
vfbKeybdProc(DeviceIntPtr pDevice,int onoff)67 vfbKeybdProc(DeviceIntPtr pDevice, int onoff)
68 {
69     DevicePtr pDev = (DevicePtr) pDevice;
70 
71     switch (onoff) {
72     case DEVICE_INIT:
73         InitKeyboardDeviceStruct(pDevice, NULL, NULL, NULL);
74         break;
75     case DEVICE_ON:
76         pDev->on = TRUE;
77         break;
78     case DEVICE_OFF:
79         pDev->on = FALSE;
80         break;
81     case DEVICE_CLOSE:
82         break;
83     }
84     return Success;
85 }
86 
87 static int
vfbMouseProc(DeviceIntPtr pDevice,int onoff)88 vfbMouseProc(DeviceIntPtr pDevice, int onoff)
89 {
90 #define NBUTTONS 3
91 #define NAXES 2
92 
93     BYTE map[NBUTTONS + 1];
94     DevicePtr pDev = (DevicePtr) pDevice;
95     Atom btn_labels[NBUTTONS] = { 0 };
96     Atom axes_labels[NAXES] = { 0 };
97 
98     switch (onoff) {
99     case DEVICE_INIT:
100         map[1] = 1;
101         map[2] = 2;
102         map[3] = 3;
103 
104         btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
105         btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
106         btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
107 
108         axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
109         axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
110 
111         InitPointerDeviceStruct(pDev, map, NBUTTONS, btn_labels,
112                                 (PtrCtrlProcPtr) NoopDDA,
113                                 GetMotionHistorySize(), NAXES, axes_labels);
114         break;
115 
116     case DEVICE_ON:
117         pDev->on = TRUE;
118         break;
119 
120     case DEVICE_OFF:
121         pDev->on = FALSE;
122         break;
123 
124     case DEVICE_CLOSE:
125         break;
126     }
127     return Success;
128 
129 #undef NBUTTONS
130 #undef NAXES
131 }
132 
133 void
InitInput(int argc,char * argv[])134 InitInput(int argc, char *argv[])
135 {
136     DeviceIntPtr p, k;
137     Atom xiclass;
138 
139     p = AddInputDevice(serverClient, vfbMouseProc, TRUE);
140     k = AddInputDevice(serverClient, vfbKeybdProc, TRUE);
141     xiclass = MakeAtom(XI_MOUSE, sizeof(XI_MOUSE) - 1, TRUE);
142     AssignTypeAndName(p, xiclass, "Xvfb mouse");
143     xiclass = MakeAtom(XI_KEYBOARD, sizeof(XI_KEYBOARD) - 1, TRUE);
144     AssignTypeAndName(k, xiclass, "Xvfb keyboard");
145     (void) mieqInit();
146 }
147 
148 void
CloseInput(void)149 CloseInput(void)
150 {
151     mieqFini();
152 }
153