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