aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/hw/sun/sunMouse.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/programs/Xserver/hw/sun/sunMouse.c')
-rw-r--r--nx-X11/programs/Xserver/hw/sun/sunMouse.c399
1 files changed, 0 insertions, 399 deletions
diff --git a/nx-X11/programs/Xserver/hw/sun/sunMouse.c b/nx-X11/programs/Xserver/hw/sun/sunMouse.c
deleted file mode 100644
index aad46e3d7..000000000
--- a/nx-X11/programs/Xserver/hw/sun/sunMouse.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/* $Xorg: sunMouse.c,v 1.3 2000/08/17 19:48:32 cpqbld Exp $ */
-/*-
- * Copyright 1987 by the Regents of the University of California
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, provided that the above copyright
- * notice appear in all copies. The University of California
- * makes no representations about the suitability of this
- * software for any purpose. It is provided "as is" without
- * express or implied warranty.
- */
-
-/************************************************************
-Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright no-
-tice appear in all copies and that both that copyright no-
-tice and this permission notice appear in supporting docu-
-mentation, and that the names of Sun or The Open Group
-not be used in advertising or publicity pertaining to
-distribution of the software without specific prior
-written permission. Sun and The Open Group make no
-representations about the suitability of this software for
-any purpose. It is provided "as is" without any express or
-implied warranty.
-
-SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
-NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
-ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-/*
- * Copyright 1991, 1992, 1993 Kaleb S. Keithley
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, provided that the above copyright
- * notice appear in all copies. Kaleb S. Keithley makes no
- * representations about the suitability of this software for
- * any purpose. It is provided "as is" without express or
- * implied warranty.
- */
-/* $XFree86: xc/programs/Xserver/hw/sun/sunMouse.c,v 1.3 2001/10/28 03:33:12 tsi Exp $ */
-
-#define NEED_EVENTS
-#include "sun.h"
-#include "mi.h"
-
-Bool sunActiveZaphod = TRUE;
-
-static Bool sunCursorOffScreen();
-static void sunCrossScreen();
-static void sunWarpCursor();
-
-miPointerScreenFuncRec sunPointerScreenFuncs = {
- sunCursorOffScreen,
- sunCrossScreen,
- sunWarpCursor,
-};
-
-/*-
- *-----------------------------------------------------------------------
- * sunMouseCtrl --
- * Alter the control parameters for the mouse. Since acceleration
- * etc. is done from the PtrCtrl record in the mouse's device record,
- * there's nothing to do here.
- *
- * Results:
- * None.
- *
- * Side Effects:
- * None.
- *
- *-----------------------------------------------------------------------
- */
-/*ARGSUSED*/
-static
-void sunMouseCtrl (
- DeviceIntPtr device,
- PtrCtrl* ctrl)
-{
-}
-
-/*-
- *-----------------------------------------------------------------------
- * sunMouseProc --
- * Handle the initialization, etc. of a mouse
- *
- * Results:
- * none.
- *
- * Side Effects:
- *
- * Note:
- * When using sunwindows, all input comes off a single fd, stored in the
- * global windowFd. Therefore, only one device should be enabled and
- * disabled, even though the application still sees both mouse and
- * keyboard. We have arbitrarily chosen to enable and disable windowFd
- * in the keyboard routine sunKbdProc rather than in sunMouseProc.
- *
- *-----------------------------------------------------------------------
- */
-int sunMouseProc (
- DeviceIntPtr device,
- int what)
-{
- DevicePtr pMouse = (DevicePtr) device;
- int format;
- static int oformat;
- BYTE map[4];
-
- switch (what) {
- case DEVICE_INIT:
- if (pMouse != LookupPointerDevice()) {
- ErrorF ("Cannot open non-system mouse");
- return !Success;
- }
- if (sunPtrPriv.fd == -1)
- return !Success;
- pMouse->devicePrivate = (pointer) &sunPtrPriv;
- pMouse->on = FALSE;
- map[1] = 1;
- map[2] = 2;
- map[3] = 3;
- InitPointerDeviceStruct(
- pMouse, map, 3, miPointerGetMotionEvents,
- sunMouseCtrl, miPointerGetMotionBufferSize());
- break;
-
- case DEVICE_ON:
- if (ioctl (sunPtrPriv.fd, VUIDGFORMAT, &oformat) == -1) {
- Error ("sunMouseProc ioctl VUIDGFORMAT");
- return !Success;
- }
- format = VUID_FIRM_EVENT;
- if (ioctl (sunPtrPriv.fd, VUIDSFORMAT, &format) == -1) {
- Error ("sunMouseProc ioctl VUIDSFORMAT");
- return !Success;
- }
- sunPtrPriv.bmask = 0;
- AddEnabledDevice (sunPtrPriv.fd);
- pMouse->on = TRUE;
- break;
-
- case DEVICE_CLOSE:
- pMouse->on = FALSE;
- if (ioctl (sunPtrPriv.fd, VUIDSFORMAT, &oformat) == -1)
- Error ("sunMouseProc ioctl VUIDSFORMAT");
- break;
-
- case DEVICE_OFF:
- pMouse->on = FALSE;
- RemoveEnabledDevice (sunPtrPriv.fd);
- break;
- }
- return Success;
-}
-
-/*-
- *-----------------------------------------------------------------------
- * sunMouseGetEvents --
- * Return the events waiting in the wings for the given mouse.
- *
- * Results:
- * A pointer to an array of Firm_events or (Firm_event *)0 if no events
- * The number of events contained in the array.
- * A boolean as to whether more events might be available.
- *
- * Side Effects:
- * None.
- *-----------------------------------------------------------------------
- */
-
-Firm_event* sunMouseGetEvents (
- int fd,
- Bool on,
- int* pNumEvents,
- Bool* pAgain)
-{
- int nBytes; /* number of bytes of events available. */
- static Firm_event evBuf[MAXEVENTS]; /* Buffer for Firm_events */
-
- if ((nBytes = read (fd, (char *)evBuf, sizeof(evBuf))) == -1) {
- if (errno == EWOULDBLOCK) {
- *pNumEvents = 0;
- *pAgain = FALSE;
- } else {
- Error ("sunMouseGetEvents read");
- FatalError ("Could not read from mouse");
- }
- } else {
- if (on) {
- *pNumEvents = nBytes / sizeof (Firm_event);
- *pAgain = (nBytes == sizeof (evBuf));
- } else {
- *pNumEvents = 0;
- *pAgain = FALSE;
- }
- }
- return evBuf;
-}
-
-
-/*-
- *-----------------------------------------------------------------------
- * MouseAccelerate --
- * Given a delta and a mouse, return the acceleration of the delta.
- *
- * Results:
- * The corrected delta
- *
- * Side Effects:
- * None.
- *
- *-----------------------------------------------------------------------
- */
-static short
-MouseAccelerate (device, delta)
- DeviceIntPtr device;
- int delta;
-{
- int sgn = sign(delta);
- PtrCtrl *pCtrl;
- short ret;
-
- delta = abs(delta);
- pCtrl = &device->ptrfeed->ctrl;
- if (delta > pCtrl->threshold) {
- ret =
- (short) sgn *
- (pCtrl->threshold + ((delta - pCtrl->threshold) * pCtrl->num) /
- pCtrl->den);
- } else {
- ret = (short) sgn * delta;
- }
- return ret;
-}
-
-/*-
- *-----------------------------------------------------------------------
- * sunMouseEnqueueEvent --
- * Given a Firm_event for a mouse, pass it off the the dix layer
- * properly converted...
- *
- * Results:
- * None.
- *
- * Side Effects:
- * The cursor may be redrawn...? devPrivate/x/y will be altered.
- *
- *-----------------------------------------------------------------------
- */
-
-void sunMouseEnqueueEvent (
- DeviceIntPtr device,
- Firm_event *fe)
-{
- xEvent xE;
- sunPtrPrivPtr pPriv; /* Private data for pointer */
- int bmask; /* Temporary button mask */
- unsigned long time;
- int x, y;
-
- pPriv = (sunPtrPrivPtr)device->public.devicePrivate;
-
- time = xE.u.keyButtonPointer.time = TVTOMILLI(fe->time);
-
- switch (fe->id) {
- case MS_LEFT:
- case MS_MIDDLE:
- case MS_RIGHT:
- /*
- * A button changed state. Sometimes we will get two events
- * for a single state change. Should we get a button event which
- * reflects the current state of affairs, that event is discarded.
- *
- * Mouse buttons start at 1.
- */
- xE.u.u.detail = (fe->id - MS_LEFT) + 1;
- bmask = 1 << xE.u.u.detail;
- if (fe->value == VKEY_UP) {
- if (pPriv->bmask & bmask) {
- xE.u.u.type = ButtonRelease;
- pPriv->bmask &= ~bmask;
- } else {
- return;
- }
- } else {
- if ((pPriv->bmask & bmask) == 0) {
- xE.u.u.type = ButtonPress;
- pPriv->bmask |= bmask;
- } else {
- return;
- }
- }
- mieqEnqueue (&xE);
- break;
- case LOC_X_DELTA:
- miPointerDeltaCursor (MouseAccelerate(device,fe->value),0,time);
- break;
- case LOC_Y_DELTA:
- /*
- * For some reason, motion up generates a positive y delta
- * and motion down a negative delta, so we must subtract
- * here instead of add...
- */
- miPointerDeltaCursor (0,-MouseAccelerate(device,fe->value),time);
- break;
- case LOC_X_ABSOLUTE:
- miPointerPosition (&x, &y);
- miPointerAbsoluteCursor (fe->value, y, time);
- break;
- case LOC_Y_ABSOLUTE:
- miPointerPosition (&x, &y);
- miPointerAbsoluteCursor (x, fe->value, time);
- break;
- default:
- FatalError ("sunMouseEnqueueEvent: unrecognized id\n");
- break;
- }
-}
-
-/*ARGSUSED*/
-static Bool
-sunCursorOffScreen (pScreen, x, y)
- ScreenPtr *pScreen;
- int *x, *y;
-{
- int index, ret = FALSE;
- extern Bool PointerConfinedToScreen();
-
- if (PointerConfinedToScreen()) return TRUE;
- /*
- * Active Zaphod implementation:
- * increment or decrement the current screen
- * if the x is to the right or the left of
- * the current screen.
- */
- if (sunActiveZaphod &&
- screenInfo.numScreens > 1 && (*x >= (*pScreen)->width || *x < 0)) {
- index = (*pScreen)->myNum;
- if (*x < 0) {
- index = (index ? index : screenInfo.numScreens) - 1;
- *pScreen = screenInfo.screens[index];
- *x += (*pScreen)->width;
- } else {
- *x -= (*pScreen)->width;
- index = (index + 1) % screenInfo.numScreens;
- *pScreen = screenInfo.screens[index];
- }
- ret = TRUE;
- }
- return ret;
-}
-
-static void
-sunCrossScreen (pScreen, entering)
- ScreenPtr pScreen;
- Bool entering;
-{
- if (sunFbs[pScreen->myNum].EnterLeave)
- (*sunFbs[pScreen->myNum].EnterLeave) (pScreen, entering ? 0 : 1);
-}
-
-static void
-sunWarpCursor (pScreen, x, y)
- ScreenPtr pScreen;
- int x, y;
-{
-#ifndef i386
- sigset_t newsigmask;
-
- (void) sigemptyset (&newsigmask);
-#ifdef SVR4
- (void) sigaddset (&newsigmask, SIGPOLL);
-#else
- (void) sigaddset (&newsigmask, SIGIO);
-#endif
- (void) sigprocmask (SIG_BLOCK, &newsigmask, (sigset_t *)NULL);
- miPointerWarpCursor (pScreen, x, y);
- (void) sigprocmask (SIG_UNBLOCK, &newsigmask, (sigset_t *)NULL);
-#else
- int oldmask;
-
- oldmask = sigblock (sigmask (SIGIO));
- miPointerWarpCursor (pScreen, x, y);
- sigsetmask (oldmask);
-#endif
-}