Add initial Xinput support for XDarwin (Greg Parker).
This commit is contained in:
parent
41641c11ec
commit
d380647739
|
@ -29,7 +29,7 @@
|
||||||
* holders shall not be used in advertising or otherwise to promote the sale,
|
* holders shall not be used in advertising or otherwise to promote the sale,
|
||||||
* use or other dealings in this Software without prior written authorization.
|
* use or other dealings in this Software without prior written authorization.
|
||||||
*/
|
*/
|
||||||
/* $XdotOrg: xc/programs/Xserver/hw/darwin/darwin.c,v 1.1.4.2.4.1.6.3 2004/04/20 03:27:08 gisburn Exp $ */
|
/* $XdotOrg: xc/programs/Xserver/hw/darwin/darwin.c,v 1.2 2004/04/23 19:06:15 eich Exp $ */
|
||||||
/* $XFree86: xc/programs/Xserver/hw/darwin/darwin.c,v 1.55 2003/11/15 00:07:09 torrey Exp $ */
|
/* $XFree86: xc/programs/Xserver/hw/darwin/darwin.c,v 1.55 2003/11/15 00:07:09 torrey Exp $ */
|
||||||
|
|
||||||
#include "X.h"
|
#include "X.h"
|
||||||
|
@ -48,6 +48,13 @@
|
||||||
#include "xf86Date.h"
|
#include "xf86Date.h"
|
||||||
#include "dix.h"
|
#include "dix.h"
|
||||||
|
|
||||||
|
#ifdef XINPUT
|
||||||
|
# include "XI.h"
|
||||||
|
# include "XIproto.h"
|
||||||
|
# include "exevents.h"
|
||||||
|
# include "extinit.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/syslimits.h>
|
#include <sys/syslimits.h>
|
||||||
|
@ -404,6 +411,22 @@ static int DarwinMouseProc(
|
||||||
miPointerGetMotionEvents,
|
miPointerGetMotionEvents,
|
||||||
DarwinChangePointerControl,
|
DarwinChangePointerControl,
|
||||||
0 );
|
0 );
|
||||||
|
#ifdef XINPUT
|
||||||
|
InitValuatorAxisStruct( pPointer,
|
||||||
|
0, // X axis
|
||||||
|
0, // min value
|
||||||
|
16000, // max value (fixme screen size?)
|
||||||
|
1, // resolution (fixme ?)
|
||||||
|
1, // min resolution
|
||||||
|
1 ); // max resolution
|
||||||
|
InitValuatorAxisStruct( pPointer,
|
||||||
|
1, // X axis
|
||||||
|
0, // min value
|
||||||
|
16000, // max value (fixme screen size?)
|
||||||
|
1, // resolution (fixme ?)
|
||||||
|
1, // min resolution
|
||||||
|
1 ); // max resolution
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DEVICE_ON:
|
case DEVICE_ON:
|
||||||
|
@ -697,13 +720,18 @@ void OsVendorInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ddxInitGlobals - called by |InitGlobals| from os/util.c */
|
|
||||||
|
/*
|
||||||
|
* ddxInitGlobals
|
||||||
|
* Called by InitGlobals() from os/util.c.
|
||||||
|
*/
|
||||||
void ddxInitGlobals(void)
|
void ddxInitGlobals(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ddxProcessArgument --
|
* ddxProcessArgument
|
||||||
* Process device-dependent command line args. Returns 0 if argument is
|
* Process device-dependent command line args. Returns 0 if argument is
|
||||||
* not device dependent, otherwise Count of number of elements of argv
|
* not device dependent, otherwise Count of number of elements of argv
|
||||||
* that are part of a device dependent commandline option.
|
* that are part of a device dependent commandline option.
|
||||||
|
|
|
@ -0,0 +1,310 @@
|
||||||
|
/* $Xorg: stubs.c,v 1.4 2001/02/09 02:04:35 xorgcvs Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* X server support of the XINPUT extension for Darwin
|
||||||
|
*
|
||||||
|
* This is currently a copy of mi/stubs.c, but eventually this
|
||||||
|
* should include more complete XINPUT support.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************************************************
|
||||||
|
|
||||||
|
Copyright 1989, 1998 The Open Group
|
||||||
|
|
||||||
|
Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
the above copyright notice appear in all copies and that both that
|
||||||
|
copyright notice and this permission notice appear in supporting
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of The Open Group shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from The Open Group.
|
||||||
|
|
||||||
|
Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
|
||||||
|
|
||||||
|
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 notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Hewlett-Packard not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
HEWLETT-PACKARD BE LIABLE 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.
|
||||||
|
|
||||||
|
********************************************************/
|
||||||
|
/* $XFree86: xc/programs/Xserver/hw/darwin/darwinXinput.c,v 1.1 2004/05/28 07:44:00 torrey Exp $ */
|
||||||
|
|
||||||
|
#define NEED_EVENTS
|
||||||
|
#include "X.h"
|
||||||
|
#include "Xproto.h"
|
||||||
|
#include "inputstr.h"
|
||||||
|
#include "XI.h"
|
||||||
|
#include "XIproto.h"
|
||||||
|
#include "XIstubs.h"
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Caller: ProcXChangeKeyboardDevice
|
||||||
|
*
|
||||||
|
* This procedure does the implementation-dependent portion of the work
|
||||||
|
* needed to change the keyboard device.
|
||||||
|
*
|
||||||
|
* The X keyboard device has a FocusRec. If the device that has been
|
||||||
|
* made into the new X keyboard did not have a FocusRec,
|
||||||
|
* ProcXChangeKeyboardDevice will allocate one for it.
|
||||||
|
*
|
||||||
|
* If you do not want clients to be able to focus the old X keyboard
|
||||||
|
* device, call DeleteFocusClassDeviceStruct to free the FocusRec.
|
||||||
|
*
|
||||||
|
* If you support input devices with keys that you do not want to be
|
||||||
|
* used as the X keyboard, you need to check for them here and return
|
||||||
|
* a BadDevice error.
|
||||||
|
*
|
||||||
|
* The default implementation is to do nothing (assume you do want
|
||||||
|
* clients to be able to focus the old X keyboard). The commented-out
|
||||||
|
* sample code shows what you might do if you don't want the default.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
ChangeKeyboardDevice (old_dev, new_dev)
|
||||||
|
DeviceIntPtr old_dev;
|
||||||
|
DeviceIntPtr new_dev;
|
||||||
|
{
|
||||||
|
/***********************************************************************
|
||||||
|
DeleteFocusClassDeviceStruct(old_dev); * defined in xchgptr.c *
|
||||||
|
**********************************************************************/
|
||||||
|
return BadMatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Caller: ProcXChangePointerDevice
|
||||||
|
*
|
||||||
|
* This procedure does the implementation-dependent portion of the work
|
||||||
|
* needed to change the pointer device.
|
||||||
|
*
|
||||||
|
* The X pointer device does not have a FocusRec. If the device that
|
||||||
|
* has been made into the new X pointer had a FocusRec,
|
||||||
|
* ProcXChangePointerDevice will free it.
|
||||||
|
*
|
||||||
|
* If you want clients to be able to focus the old pointer device that
|
||||||
|
* has now become accessible through the input extension, you need to
|
||||||
|
* add a FocusRec to it here.
|
||||||
|
*
|
||||||
|
* The XChangePointerDevice protocol request also allows the client
|
||||||
|
* to choose which axes of the new pointer device are used to move
|
||||||
|
* the X cursor in the X- and Y- directions. If the axes are different
|
||||||
|
* than the default ones, you need to keep track of that here.
|
||||||
|
*
|
||||||
|
* If you support input devices with valuators that you do not want to be
|
||||||
|
* used as the X pointer, you need to check for them here and return a
|
||||||
|
* BadDevice error.
|
||||||
|
*
|
||||||
|
* The default implementation is to do nothing (assume you don't want
|
||||||
|
* clients to be able to focus the old X pointer). The commented-out
|
||||||
|
* sample code shows what you might do if you don't want the default.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
ChangePointerDevice (
|
||||||
|
DeviceIntPtr old_dev,
|
||||||
|
DeviceIntPtr new_dev,
|
||||||
|
unsigned char x,
|
||||||
|
unsigned char y)
|
||||||
|
{
|
||||||
|
/***********************************************************************
|
||||||
|
InitFocusClassDeviceStruct(old_dev); * allow focusing old ptr*
|
||||||
|
|
||||||
|
x_axis = x; * keep track of new x-axis*
|
||||||
|
y_axis = y; * keep track of new y-axis*
|
||||||
|
if (x_axis != 0 || y_axis != 1)
|
||||||
|
axes_changed = TRUE; * remember axes have changed*
|
||||||
|
else
|
||||||
|
axes_changed = FALSE;
|
||||||
|
*************************************************************************/
|
||||||
|
return BadMatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Caller: ProcXCloseDevice
|
||||||
|
*
|
||||||
|
* Take care of implementation-dependent details of closing a device.
|
||||||
|
* Some implementations may actually close the device, others may just
|
||||||
|
* remove this clients interest in that device.
|
||||||
|
*
|
||||||
|
* The default implementation is to do nothing (assume all input devices
|
||||||
|
* are initialized during X server initialization and kept open).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
CloseInputDevice (d, client)
|
||||||
|
DeviceIntPtr d;
|
||||||
|
ClientPtr client;
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Caller: ProcXListInputDevices
|
||||||
|
*
|
||||||
|
* This is the implementation-dependent routine to initialize an input
|
||||||
|
* device to the point that information about it can be listed.
|
||||||
|
* Some implementations open all input devices when the server is first
|
||||||
|
* initialized, and never close them. Other implementations open only
|
||||||
|
* the X pointer and keyboard devices during server initialization,
|
||||||
|
* and only open other input devices when some client makes an
|
||||||
|
* XOpenDevice request. If some other process has the device open, the
|
||||||
|
* server may not be able to get information about the device to list it.
|
||||||
|
*
|
||||||
|
* This procedure should be used by implementations that do not initialize
|
||||||
|
* all input devices at server startup. It should do device-dependent
|
||||||
|
* initialization for any devices not previously initialized, and call
|
||||||
|
* AddInputDevice for each of those devices so that a DeviceIntRec will be
|
||||||
|
* created for them.
|
||||||
|
*
|
||||||
|
* The default implementation is to do nothing (assume all input devices
|
||||||
|
* are initialized during X server initialization and kept open).
|
||||||
|
* The commented-out sample code shows what you might do if you don't want
|
||||||
|
* the default.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
AddOtherInputDevices ()
|
||||||
|
{
|
||||||
|
/**********************************************************************
|
||||||
|
for each uninitialized device, do something like:
|
||||||
|
|
||||||
|
DeviceIntPtr dev;
|
||||||
|
DeviceProc deviceProc;
|
||||||
|
pointer private;
|
||||||
|
|
||||||
|
dev = (DeviceIntPtr) AddInputDevice(deviceProc, TRUE);
|
||||||
|
dev->public.devicePrivate = private;
|
||||||
|
RegisterOtherDevice(dev);
|
||||||
|
dev->inited = ((*dev->deviceProc)(dev, DEVICE_INIT) == Success);
|
||||||
|
************************************************************************/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Caller: ProcXOpenDevice
|
||||||
|
*
|
||||||
|
* This is the implementation-dependent routine to open an input device.
|
||||||
|
* Some implementations open all input devices when the server is first
|
||||||
|
* initialized, and never close them. Other implementations open only
|
||||||
|
* the X pointer and keyboard devices during server initialization,
|
||||||
|
* and only open other input devices when some client makes an
|
||||||
|
* XOpenDevice request. This entry point is for the latter type of
|
||||||
|
* implementation.
|
||||||
|
*
|
||||||
|
* If the physical device is not already open, do it here. In this case,
|
||||||
|
* you need to keep track of the fact that one or more clients has the
|
||||||
|
* device open, and physically close it when the last client that has
|
||||||
|
* it open does an XCloseDevice.
|
||||||
|
*
|
||||||
|
* The default implementation is to do nothing (assume all input devices
|
||||||
|
* are opened during X server initialization and kept open).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
OpenInputDevice (dev, client, status)
|
||||||
|
DeviceIntPtr dev;
|
||||||
|
ClientPtr client;
|
||||||
|
int *status;
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* Caller: ProcXSetDeviceMode
|
||||||
|
*
|
||||||
|
* Change the mode of an extension device.
|
||||||
|
* This function is used to change the mode of a device from reporting
|
||||||
|
* relative motion to reporting absolute positional information, and
|
||||||
|
* vice versa.
|
||||||
|
* The default implementation below is that no such devices are supported.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
SetDeviceMode (client, dev, mode)
|
||||||
|
register ClientPtr client;
|
||||||
|
DeviceIntPtr dev;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
return BadMatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* Caller: ProcXSetDeviceValuators
|
||||||
|
*
|
||||||
|
* Set the value of valuators on an extension input device.
|
||||||
|
* This function is used to set the initial value of valuators on
|
||||||
|
* those input devices that are capable of reporting either relative
|
||||||
|
* motion or an absolute position, and allow an initial position to be set.
|
||||||
|
* The default implementation below is that no such devices are supported.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
SetDeviceValuators (client, dev, valuators, first_valuator, num_valuators)
|
||||||
|
register ClientPtr client;
|
||||||
|
DeviceIntPtr dev;
|
||||||
|
int *valuators;
|
||||||
|
int first_valuator;
|
||||||
|
int num_valuators;
|
||||||
|
{
|
||||||
|
return BadMatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* Caller: ProcXChangeDeviceControl
|
||||||
|
*
|
||||||
|
* Change the specified device controls on an extension input device.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
ChangeDeviceControl (client, dev, control)
|
||||||
|
register ClientPtr client;
|
||||||
|
DeviceIntPtr dev;
|
||||||
|
xDeviceCtl *control;
|
||||||
|
{
|
||||||
|
switch (control->control)
|
||||||
|
{
|
||||||
|
case DEVICE_RESOLUTION:
|
||||||
|
return (BadMatch);
|
||||||
|
default:
|
||||||
|
return (BadMatch);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue