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,
|
||||
* 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 $ */
|
||||
|
||||
#include "X.h"
|
||||
|
@ -48,6 +48,13 @@
|
|||
#include "xf86Date.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/time.h>
|
||||
#include <sys/syslimits.h>
|
||||
|
@ -404,6 +411,22 @@ static int DarwinMouseProc(
|
|||
miPointerGetMotionEvents,
|
||||
DarwinChangePointerControl,
|
||||
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;
|
||||
|
||||
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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ddxProcessArgument --
|
||||
* ddxProcessArgument
|
||||
* Process device-dependent command line args. Returns 0 if argument is
|
||||
* not device dependent, otherwise Count of number of elements of argv
|
||||
* 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