summaryrefslogtreecommitdiff
path: root/driver/xf86-input-joystick/src
diff options
context:
space:
mode:
authorMatthieu Herrb <matthieu@cvs.openbsd.org>2011-07-02 21:59:46 +0000
committerMatthieu Herrb <matthieu@cvs.openbsd.org>2011-07-02 21:59:46 +0000
commitefbbc04466695df32ecad43d22482355923c74ca (patch)
tree4a0a91b95ab17312911cb7e2ba44db008f63ce72 /driver/xf86-input-joystick/src
parentf96a6d79287d7dfc6e9b00290fd745ef06018288 (diff)
Revert update to xf86-input-joystick 1.6.0.
This driver depends on xserver 1.10.
Diffstat (limited to 'driver/xf86-input-joystick/src')
-rw-r--r--driver/xf86-input-joystick/src/Makefile.am3
-rw-r--r--driver/xf86-input-joystick/src/Makefile.in26
-rw-r--r--driver/xf86-input-joystick/src/backend_bsd.c1
-rw-r--r--driver/xf86-input-joystick/src/backend_evdev.c1
-rw-r--r--driver/xf86-input-joystick/src/backend_joystick.c1
-rw-r--r--driver/xf86-input-joystick/src/jstk.c319
-rw-r--r--driver/xf86-input-joystick/src/jstk.h13
-rw-r--r--driver/xf86-input-joystick/src/jstk_axis.c15
-rw-r--r--driver/xf86-input-joystick/src/jstk_axis.h8
-rw-r--r--driver/xf86-input-joystick/src/jstk_key.c482
-rw-r--r--driver/xf86-input-joystick/src/jstk_key.h9
-rw-r--r--driver/xf86-input-joystick/src/jstk_options.c5
-rw-r--r--driver/xf86-input-joystick/src/jstk_properties.c7
13 files changed, 634 insertions, 256 deletions
diff --git a/driver/xf86-input-joystick/src/Makefile.am b/driver/xf86-input-joystick/src/Makefile.am
index 21cdf3235..1f8898eb5 100644
--- a/driver/xf86-input-joystick/src/Makefile.am
+++ b/driver/xf86-input-joystick/src/Makefile.am
@@ -24,8 +24,7 @@
# -avoid-version prevents gratuitous .0.0.0 version numbers on the end
# _ladir passes a dummy rpath to libtool so the thing will actually link
# TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
-
-AM_CFLAGS = $(XORG_CFLAGS) $(CWARNFLAGS)
+AM_CFLAGS = $(XORG_CFLAGS)
@DRIVER_NAME@_drv_la_LTLIBRARIES = @DRIVER_NAME@_drv.la
@DRIVER_NAME@_drv_la_LDFLAGS = -module -avoid-version
diff --git a/driver/xf86-input-joystick/src/Makefile.in b/driver/xf86-input-joystick/src/Makefile.in
index dac59c2f8..b963a141a 100644
--- a/driver/xf86-input-joystick/src/Makefile.in
+++ b/driver/xf86-input-joystick/src/Makefile.in
@@ -34,12 +34,6 @@
# 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.
-# this is obnoxious:
-# -module lets us name the module exactly how we want
-# -avoid-version prevents gratuitous .0.0.0 version numbers on the end
-# _ladir passes a dummy rpath to libtool so the thing will actually link
-# TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@@ -49,9 +43,9 @@ pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
-install_sh_DATA = ${SHELL} $(install_sh) -c -m 644
-install_sh_PROGRAM = ${SHELL} $(install_sh) -c
-install_sh_SCRIPT = ${SHELL} $(install_sh) -c
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
@@ -122,7 +116,6 @@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APP_MAN_DIR = @APP_MAN_DIR@
APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
AR = @AR@
@@ -165,7 +158,6 @@ FFLAGS = @FFLAGS@
FILE_MAN_DIR = @FILE_MAN_DIR@
FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
GREP = @GREP@
-INSTALL_CMD = @INSTALL_CMD@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -255,7 +247,13 @@ sdkdir = @sdkdir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
-AM_CFLAGS = $(XORG_CFLAGS) $(CWARNFLAGS)
+
+# this is obnoxious:
+# -module lets us name the module exactly how we want
+# -avoid-version prevents gratuitous .0.0.0 version numbers on the end
+# _ladir passes a dummy rpath to libtool so the thing will actually link
+# TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
+AM_CFLAGS = $(XORG_CFLAGS)
@DRIVER_NAME@_drv_la_LTLIBRARIES = @DRIVER_NAME@_drv.la
@DRIVER_NAME@_drv_la_LDFLAGS = -module -avoid-version $(am__append_2)
@DRIVER_NAME@_drv_ladir = @inputdir@
@@ -281,9 +279,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign src/Makefile
+ $(AUTOMAKE) --gnu src/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
diff --git a/driver/xf86-input-joystick/src/backend_bsd.c b/driver/xf86-input-joystick/src/backend_bsd.c
index c6ce7b4c5..71f4168dc 100644
--- a/driver/xf86-input-joystick/src/backend_bsd.c
+++ b/driver/xf86-input-joystick/src/backend_bsd.c
@@ -30,7 +30,6 @@
#include "config.h"
#endif
-#include <xorg-server.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
diff --git a/driver/xf86-input-joystick/src/backend_evdev.c b/driver/xf86-input-joystick/src/backend_evdev.c
index c506167fd..de061d3dc 100644
--- a/driver/xf86-input-joystick/src/backend_evdev.c
+++ b/driver/xf86-input-joystick/src/backend_evdev.c
@@ -29,7 +29,6 @@
#include "config.h"
#endif
-#include <xorg-server.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
diff --git a/driver/xf86-input-joystick/src/backend_joystick.c b/driver/xf86-input-joystick/src/backend_joystick.c
index e61d90842..b69f932c2 100644
--- a/driver/xf86-input-joystick/src/backend_joystick.c
+++ b/driver/xf86-input-joystick/src/backend_joystick.c
@@ -32,7 +32,6 @@
#include "config.h"
#endif
-#include <xorg-server.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
diff --git a/driver/xf86-input-joystick/src/jstk.c b/driver/xf86-input-joystick/src/jstk.c
index ec6b79ad0..a2e927c08 100644
--- a/driver/xf86-input-joystick/src/jstk.c
+++ b/driver/xf86-input-joystick/src/jstk.c
@@ -26,7 +26,6 @@
#include "config.h"
#endif
-#include <xorg-server.h>
#include <stdio.h>
#include <xorgVersion.h>
@@ -45,7 +44,9 @@
#include "jstk_key.h"
#include "jstk_options.h"
#include "jstk_properties.h"
-#include <xserver-properties.h>
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 3
+ #include <xserver-properties.h>
+#endif
#ifdef LINUX_BACKEND
#include "backend_joystick.h"
@@ -62,6 +63,40 @@
char debug_level = 0;
#endif
+
+/*
+ ***************************************************************************
+ *
+ * jstkConvertProc --
+ *
+ * Convert valuators to X and Y.
+ *
+ ***************************************************************************
+ */
+
+static Bool
+jstkConvertProc(LocalDevicePtr local,
+ int first,
+ int num,
+ int v0,
+ int v1,
+ int v2,
+ int v3,
+ int v4,
+ int v5,
+ int* x,
+ int* y)
+{
+ if (first != 0 || num != 2)
+ return FALSE;
+
+ *x = v0;
+ *y = v1;
+
+ return TRUE;
+}
+
+
/*
***************************************************************************
*
@@ -112,21 +147,21 @@ jstkOpenDevice(JoystickDevPtr priv, BOOL probe)
*/
static void
-jstkReadProc(InputInfoPtr pInfo)
+jstkReadProc(LocalDevicePtr local)
{
JOYSTICKEVENT event;
int number;
int i, r;
- JoystickDevPtr priv = pInfo->private;
+ JoystickDevPtr priv = local->private;
do {
if ((priv->read_proc == NULL) ||
((r=priv->read_proc(priv, &event, &number))==0)) {
xf86Msg(X_WARNING, "JOYSTICK: Read failed. Deactivating device.\n");
- if (pInfo->fd >= 0)
- RemoveEnabledDevice(pInfo->fd);
+ if (local->fd >= 0)
+ RemoveEnabledDevice(local->fd);
return;
}
@@ -139,7 +174,7 @@ jstkReadProc(InputInfoPtr pInfo)
switch (priv->button[number].mapping) {
case JSTK_MAPPING_BUTTON:
if (priv->mouse_enabled == TRUE) {
- xf86PostButtonEvent(pInfo->dev, 0,
+ xf86PostButtonEvent(local->dev, 0,
priv->button[number].buttonnumber,
priv->button[number].pressed, 0, 0);
}
@@ -152,7 +187,7 @@ jstkReadProc(InputInfoPtr pInfo)
if (priv->button[number].pressed == 0)
priv->button[number].currentspeed = 1.0;
else if (priv->mouse_enabled == TRUE)
- jstkStartButtonAxisTimer(pInfo, number);
+ jstkStartButtonAxisTimer(local, number);
break;
case JSTK_MAPPING_KEY:
@@ -223,7 +258,7 @@ jstkReadProc(InputInfoPtr pInfo)
priv->axis[number].mapping));
if (priv->axis[number].valuator != -1)
- xf86PostMotionEvent(pInfo->dev, 1, priv->axis[number].valuator,
+ xf86PostMotionEvent(local->dev, 1, priv->axis[number].valuator,
1, priv->axis[number].value);
switch (priv->axis[number].mapping) {
@@ -237,12 +272,12 @@ jstkReadProc(InputInfoPtr pInfo)
if (priv->axis[number].value == 0)
priv->axis[number].currentspeed = 1.0;
if (priv->mouse_enabled == TRUE)
- jstkStartAxisTimer(pInfo, number);
+ jstkStartAxisTimer(local, number);
break;
case JSTK_TYPE_ABSOLUTE:
if (priv->mouse_enabled == TRUE)
- jstkHandleAbsoluteAxis(pInfo, number);
+ jstkHandleAbsoluteAxis(local, number);
break;
default:
break;
@@ -251,9 +286,9 @@ jstkReadProc(InputInfoPtr pInfo)
case JSTK_MAPPING_KEY: if (priv->keys_enabled == TRUE) {
if (priv->axis[number].type == JSTK_TYPE_ACCELERATED) {
- jstkHandlePWMAxis(pInfo, number);
+ jstkHandlePWMAxis(local, number);
} else if (priv->axis[number].type == JSTK_TYPE_BYVALUE) {
- jstkStartAxisTimer(pInfo, number);
+ jstkStartAxisTimer(local, number);
}
break;
}
@@ -292,10 +327,12 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
int what)
{
int i;
- InputInfoPtr pInfo = (InputInfoPtr)pJstk->public.devicePrivate;
- JoystickDevPtr priv = pInfo->private;
+ LocalDevicePtr local = (LocalDevicePtr)pJstk->public.devicePrivate;
+ JoystickDevPtr priv = (JoystickDevPtr)XI_PRIVATE(pJstk);
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
Atom btn_labels[BUTTONMAP_SIZE+1] = {0}; /* TODO: fillme */
Atom axes_labels[MAXAXES] = {0}; /* TODO: fillme */
+#endif
switch (what) {
case DEVICE_INIT: {
@@ -318,7 +355,9 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
if (InitButtonClassDeviceStruct(pJstk, BUTTONMAP_SIZE,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
btn_labels,
+#endif
buttonmap) == FALSE) {
ErrorF("unable to allocate Button class device\n");
return !Success;
@@ -334,48 +373,71 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
priv->axis[i].valuator = m++;
}
- if (InitValuatorClassDeviceStruct(pJstk, m, axes_labels,
- GetMotionHistorySize(),
+ if (InitValuatorClassDeviceStruct(pJstk,
+ m,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
+ axes_labels,
+#endif
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 3
+ xf86GetMotionEvents,
+#endif
+ local->history_size,
Relative) == FALSE) {
ErrorF("unable to allocate Valuator class device\n");
return !Success;
} else {
InitValuatorAxisStruct(pJstk,
0, /* valuator num */
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
XIGetKnownProperty(AXIS_LABEL_PROP_REL_X),
+#endif
0, /* min val */
screenInfo.screens[0]->width, /* max val */
1, /* resolution */
0, /* min_res */
- 1, /* max_res */
- Absolute);
+ 1); /* max_res */
InitValuatorAxisStruct(pJstk,
1, /* valuator num */
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y),
+#endif
0, /* min val */
screenInfo.screens[0]->height, /* max val */
1, /* resolution */
0, /* min_res */
- 1, /* max_res */
- Absolute);
+ 1); /* max_res */
for (i=0; i<MAXAXES; i++)
if (priv->axis[i].valuator != -1)
{
InitValuatorAxisStruct(pJstk,
priv->axis[i].valuator,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
axes_labels[i],
+#endif
-32768, /* min val */
32767, /* max val */
1, /* resolution */
0, /* min_res */
- 1, /* max_res */
- Absolute);
+ 1); /* max_res */
}
/* allocate the motion history buffer if needed */
- xf86MotionHistoryAllocate(pInfo);
+ xf86MotionHistoryAllocate(local);
}
+
+ if (priv->keyboard_device != NULL)
+ {
+ DBG(2, ErrorF("Activating keyboard device\n"));
+ xf86ActivateDevice(priv->keyboard_device);
+ priv->keyboard_device->dev->inited =
+ (priv->keyboard_device->device_control(priv->keyboard_device->dev, DEVICE_INIT) == Success);
+ xf86EnableDevice(priv->keyboard_device->dev);
+ DBG(2, ErrorF("Keyboard device activated\n"));
+ }
+
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 3
jstkInitProperties(pJstk, priv);
+#endif
break;
}
@@ -386,8 +448,8 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
if (jstkOpenDevice(priv, FALSE) != -1) {
pJstk->public.on = TRUE;
- pInfo->fd = priv->fd;
- AddEnabledDevice(pInfo->fd);
+ local->fd = priv->fd;
+ AddEnabledDevice(local->fd);
} else return !Success;
break;
@@ -409,9 +471,9 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
TimerCancel(priv->axis[i].timer);
}
- if (pInfo->fd >= 0)
- RemoveEnabledDevice(pInfo->fd);
- pInfo->fd = -1;
+ if (local->fd >= 0)
+ RemoveEnabledDevice(local->fd);
+ local->fd = -1;
if (priv->close_proc)
priv->close_proc(priv);
pJstk->public.on = FALSE;
@@ -425,6 +487,19 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
return Success;
}
+
+
+
+_X_EXPORT InputDriverRec JSTK_KEYBOARD = {
+ 1,
+ "joystick_keyboard",
+ NULL,
+ jstkKeyboardPreInit,
+ jstkKeyboardUnInit,
+ NULL,
+ 0
+};
+
/*
***************************************************************************
*
@@ -432,41 +507,41 @@ jstkDeviceControlProc(DeviceIntPtr pJstk,
*
* Called when a device will be instantiated
*
- * This is a tad complicated. NewInputDeviceRequest(), which we use to
- * hotplug a keyboard device,. enables the device, so we need to make sure
- * that all options for the dependent device are set correctly.
- *
- * This means that we parse the keyboard-specific options into the
- * keyboard device's PreInit, and re-use the keyboard's priv field.
- *
***************************************************************************
*/
-static int
-jstkCorePreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
+static InputInfoPtr
+jstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags)
{
- InputInfoPtr keyboard_device;
+ LocalDevicePtr local = NULL;
JoystickDevPtr priv = NULL;
char *s;
int i, j;
- s = xf86CheckStrOption(pInfo->options, "_source", "");
- if (strcmp(s, "_driver/joystick") == 0)
- return jstkKeyboardPreInit(drv, pInfo, flags);
-
- pInfo->device_control = jstkDeviceControlProc;
- pInfo->read_input = jstkReadProc;
- pInfo->control_proc = NULL;
- pInfo->switch_mode = NULL;
- pInfo->fd = -1;
- pInfo->dev = NULL;
- pInfo->type_name = XI_JOYSTICK;
-
- keyboard_device = jstkKeyboardHotplug(pInfo, flags);
- if (!keyboard_device)
- return BadAlloc;
+ local = xf86AllocateInput(drv, 0);
+ if (!local) {
+ goto SetupProc_fail;
+ }
- pInfo->private = priv = keyboard_device->private;
+ local->private = (JoystickDevPtr)xalloc(sizeof(JoystickDevRec));
+ priv = (JoystickDevPtr)local->private;
+
+ local->name = dev->identifier;
+ local->flags = XI86_POINTER_CAPABLE;
+ local->flags |= XI86_SEND_DRAG_EVENTS;
+ local->device_control = jstkDeviceControlProc;
+ local->read_input = jstkReadProc;
+ local->close_proc = NULL;
+ local->control_proc = NULL;
+ local->switch_mode = NULL;
+ local->conversion_proc = jstkConvertProc;
+ local->fd = -1;
+ local->dev = NULL;
+ local->private = priv;
+ local->type_name = XI_JOYSTICK;
+ local->history_size = 0;
+ local->always_core_feedback = NULL;
+ local->conf_idev = dev;
priv->fd = -1;
priv->open_proc = NULL;
@@ -479,7 +554,9 @@ jstkCorePreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
priv->mouse_enabled = TRUE;
priv->keys_enabled = TRUE;
priv->amplify = 1.0f;
- priv->keyboard_device = keyboard_device;
+ priv->keyboard_device = NULL;
+ priv->repeat_delay = 0;
+ priv->repeat_interval = 0;
priv->num_axes = MAXAXES;
priv->num_buttons = MAXBUTTONS;
@@ -537,39 +614,81 @@ jstkCorePreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
priv->axis[5].type = JSTK_TYPE_ACCELERATED;
priv->axis[5].mapping = JSTK_MAPPING_Y;
+ xf86CollectInputOptions(local, NULL, NULL);
+ xf86OptionListReport(local->options);
+
/* Joystick device is mandatory */
- priv->device = xf86SetStrOption(pInfo->options, "Device", NULL);
+ priv->device = xf86SetStrOption(dev->commonOptions, "Device", NULL);
if (!priv->device)
- priv->device = xf86SetStrOption(pInfo->options, "Path", NULL);
+ priv->device = xf86SetStrOption(dev->commonOptions, "Path", NULL);
if (!priv->device) {
- xf86Msg (X_ERROR, "%s: No Device specified.\n", pInfo->name);
+ xf86Msg (X_ERROR, "%s: No Device specified.\n", local->name);
goto SetupProc_fail;
}
+ xf86ProcessCommonOptions(local, local->options);
+
#if DEBUG
- debug_level = xf86SetIntOption(pInfo->options, "DebugLevel", 0);
+ debug_level = xf86SetIntOption(dev->commonOptions, "DebugLevel", 0);
if (debug_level > 0) {
xf86Msg(X_CONFIG, "%s: debug level set to %d\n",
- pInfo->name, debug_level);
+ local->name, debug_level);
}
#else
- if (xf86SetIntOption(pInfo->options, "DebugLevel", 0) != 0) {
+ if (xf86SetIntOption(dev->commonOptions, "DebugLevel", 0) != 0) {
xf86Msg(X_WARNING, "%s: DebugLevel: Compiled without debugging support!\n",
- pInfo->name);
+ local->name);
}
#endif
- priv->mouse_enabled = xf86SetBoolOption(pInfo->options, "StartMouseEnabled", TRUE);
- priv->keys_enabled = xf86SetBoolOption(pInfo->options, "StartKeysEnabled", TRUE);
+ /* Parse option for autorepeat */
+ if ((s = xf86SetStrOption(dev->commonOptions, "AutoRepeat", NULL))) {
+ int delay, rate;
+ if (sscanf(s, "%d %d", &delay, &rate) != 2) {
+ xf86Msg(X_ERROR, "%s: \"%s\" is not a valid AutoRepeat value",
+ local->name, s);
+ } else {
+ priv->repeat_delay = delay;
+ if (rate != 0)
+ priv->repeat_interval = 1000/rate;
+ else priv->repeat_interval = 0;
+ DBG(1, xf86Msg(X_CONFIG, "Autorepeat set to delay=%d, interval=%d\n",
+ priv->repeat_delay,priv->repeat_interval));
+ }
+ xfree(s);
+ }
+
+ priv->rmlvo.rules = xf86SetStrOption(dev->commonOptions, "xkb_rules", NULL);
+ if (!priv->rmlvo.rules)
+ priv->rmlvo.rules = xf86SetStrOption(dev->commonOptions, "XkbRules", "evdev");
+
+ priv->rmlvo.model = xf86SetStrOption(dev->commonOptions, "xkb_model", NULL);
+ if (!priv->rmlvo.model)
+ priv->rmlvo.model = xf86SetStrOption(dev->commonOptions, "XkbModel", "evdev");
+
+ priv->rmlvo.layout = xf86SetStrOption(dev->commonOptions, "xkb_layout", NULL);
+ if (!priv->rmlvo.layout)
+ priv->rmlvo.layout = xf86SetStrOption(dev->commonOptions, "XkbLayout", "us");
+
+ priv->rmlvo.variant = xf86SetStrOption(dev->commonOptions, "xkb_variant", NULL);
+ if (!priv->rmlvo.variant)
+ priv->rmlvo.variant = xf86SetStrOption(dev->commonOptions, "XkbVariant", "");
+
+ priv->rmlvo.options = xf86SetStrOption(dev->commonOptions, "xkb_options", NULL);
+ if (!priv->rmlvo.options)
+ priv->rmlvo.options = xf86SetStrOption(dev->commonOptions, "XkbOptions", "");
+
+ priv->mouse_enabled = xf86SetBoolOption(dev->commonOptions, "StartMouseEnabled", TRUE);
+ priv->keys_enabled = xf86SetBoolOption(dev->commonOptions, "StartKeysEnabled", TRUE);
/* Process button mapping options */
for (i=0; i<MAXBUTTONS; i++) {
char p[64];
sprintf(p,"MapButton%d",i+1);
- s = xf86SetStrOption(pInfo->options, p, NULL);
+ s = xf86SetStrOption(dev->commonOptions, p, NULL);
if (s != NULL) {
- jstkParseButtonOption(s, priv, i, pInfo->name);
+ jstkParseButtonOption(s, priv, i, local->name);
}
DBG(1, xf86Msg(X_CONFIG, "Button %d mapped to %d\n", i+1,
priv->button[i].mapping));
@@ -579,9 +698,9 @@ jstkCorePreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
for (i=0; i<MAXAXES; i++) {
char p[64];
sprintf(p,"MapAxis%d",i+1);
- s = xf86SetStrOption(pInfo->options, p, NULL);
+ s = xf86SetStrOption(dev->commonOptions, p, NULL);
if (s != NULL) {
- jstkParseAxisOption(s, priv, &priv->axis[i], pInfo->name);
+ jstkParseAxisOption(s, priv, &priv->axis[i], local->name);
}
DBG(1, xf86Msg(X_CONFIG,
"Axis %d type is %d, mapped to %d, amplify=%.3f\n", i+1,
@@ -590,17 +709,23 @@ jstkCorePreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
priv->axis[i].amplify));
}
- return Success;
+ /* return the LocalDevice */
+ local->flags |= XI86_CONFIGURED;
-SetupProc_fail:
- if (priv) {
- free(priv);
- if (keyboard_device)
- keyboard_device->private = NULL;
+ priv->keyboard_device = jstkKeyboardPreInit(&JSTK_KEYBOARD, dev, flags);
+ if (priv->keyboard_device) {
+ priv->keyboard_device->private = priv;
}
- if (pInfo)
- pInfo->private = NULL;
- return BadValue;
+
+ return (local);
+
+SetupProc_fail:
+ if (priv)
+ xfree(priv);
+ if (local)
+ local->private = NULL;
+ return NULL;
+/* return (local); */ /* Makes X segfault on error */
}
@@ -611,39 +736,26 @@ SetupProc_fail:
* jstkCoreUnInit --
*
* Called when a device is unplugged and needs to be removed
- * This is a bit tricky, because the keyboard device and the main device
- * share the same private data, which must be freed only once, which is done
- * by the main device.
- *
*
***************************************************************************
*/
static void
jstkCoreUnInit(InputDriverPtr drv,
- InputInfoPtr pInfo,
+ LocalDevicePtr local,
int flags)
{
- if (pInfo->private) {
- JoystickDevPtr priv = (JoystickDevPtr) pInfo->private;
- if (priv->keyboard_device == pInfo) {
- /* this is the keyboard device */
- /* Unlink from private data to notify that the
- * keyboard device is no more, but don't free */
- priv->keyboard_device = NULL;
- } else {
- /* freeing main device
- if keyboard still exists, notify keyboard device that it's
- private data is gone */
- if (priv->keyboard_device)
- priv->keyboard_device->private = NULL;
-
- free (priv);
- }
+ JoystickDevPtr device = (JoystickDevPtr) local->private;
+
+ if (device->keyboard_device != NULL)
+ {
+ xf86DisableDevice(device->keyboard_device->dev, TRUE);
+ device->keyboard_device = NULL;
}
- pInfo->private = NULL;
- xf86DeleteInput(pInfo, 0);
+ xfree (device);
+ local->private = NULL;
+ xf86DeleteInput(local, 0);
}
@@ -655,9 +767,11 @@ _X_EXPORT InputDriverRec JOYSTICK = {
NULL,
jstkCorePreInit,
jstkCoreUnInit,
- NULL
+ NULL,
+ 0
};
+
/*
***************************************************************************
*
@@ -675,6 +789,7 @@ jstkDriverPlug(pointer module,
int *errmin)
{
xf86AddInputDriver(&JOYSTICK, module, 0);
+ xf86AddInputDriver(&JSTK_KEYBOARD, module, 0);
return module;
}
diff --git a/driver/xf86-input-joystick/src/jstk.h b/driver/xf86-input-joystick/src/jstk.h
index ed5e4a7ba..78a1f83cf 100644
--- a/driver/xf86-input-joystick/src/jstk.h
+++ b/driver/xf86-input-joystick/src/jstk.h
@@ -55,6 +55,17 @@
#define XI_JOYSTICK "JOYSTICK"
#endif
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 5
+typedef struct {
+ char *rules;
+ char *model;
+ char *layout;
+ char *variant;
+ char *options;
+} XkbRMLVOSet;
+#endif
+
+
typedef enum _JOYSTICKEVENT {
EVENT_NONE=0,
@@ -106,7 +117,7 @@ typedef struct _JoystickDevRec {
jstkReadDataProc read_proc; /* Callback for reading data from the backend */
void *devicedata; /* Extra platform device dependend data */
char *device; /* Name of the device */
- InputInfoPtr keyboard_device; /* Slave device for keyboard events */
+ LocalDevicePtr keyboard_device; /* Slave device for keyboard events */
OsTimerPtr timer; /* Timer for axis movement */
Bool timerrunning;
diff --git a/driver/xf86-input-joystick/src/jstk_axis.c b/driver/xf86-input-joystick/src/jstk_axis.c
index 95ebfe974..b31412270 100644
--- a/driver/xf86-input-joystick/src/jstk_axis.c
+++ b/driver/xf86-input-joystick/src/jstk_axis.c
@@ -27,7 +27,6 @@
#include "config.h"
#endif
-#include <xorg-server.h>
#include <xf86Xinput.h>
#include <xf86_OSproc.h>
#include <math.h>
@@ -56,8 +55,7 @@ jstkAxisTimer(OsTimerPtr timer,
{
#define NEXTTIMER 15
DeviceIntPtr device = (DeviceIntPtr)arg;
- InputInfoPtr pInfo = device->public.devicePrivate;
- JoystickDevPtr priv = pInfo->private;
+ JoystickDevPtr priv = (JoystickDevPtr)XI_PRIVATE(device);
int sigstate, i;
int nexttimer;
@@ -268,7 +266,7 @@ jstkAxisTimer(OsTimerPtr timer,
***********************************************************************
*/
void
-jstkStartAxisTimer(InputInfoPtr device, int number)
+jstkStartAxisTimer(LocalDevicePtr device, int number)
{
int pixel;
JoystickDevPtr priv = device->private;
@@ -300,7 +298,7 @@ jstkStartAxisTimer(InputInfoPtr device, int number)
*/
void
-jstkStartButtonAxisTimer(InputInfoPtr device, int number)
+jstkStartButtonAxisTimer(LocalDevicePtr device, int number)
{
int pixel;
JoystickDevPtr priv = device->private;
@@ -340,7 +338,7 @@ jstkStartButtonAxisTimer(InputInfoPtr device, int number)
***********************************************************************
*/
void
-jstkHandleAbsoluteAxis(InputInfoPtr device, int number)
+jstkHandleAbsoluteAxis(LocalDevicePtr device, int number)
{
JoystickDevPtr priv = device->private;
int i,x,y;
@@ -408,8 +406,7 @@ jstkPWMAxisTimer(OsTimerPtr timer,
pointer arg)
{
DeviceIntPtr device = (DeviceIntPtr)arg;
- InputInfoPtr pInfo = device->public.devicePrivate;
- JoystickDevPtr priv = pInfo->private;
+ JoystickDevPtr priv = (JoystickDevPtr)XI_PRIVATE(device);
int sigstate, i;
int nexttimer;
@@ -538,7 +535,7 @@ jstkPWMAxisTimer(OsTimerPtr timer,
***********************************************************************
*/
void
-jstkHandlePWMAxis(InputInfoPtr device, int number)
+jstkHandlePWMAxis(LocalDevicePtr device, int number)
{
JoystickDevPtr priv = device->private;
if (priv->axis[number].timerrunning) return;
diff --git a/driver/xf86-input-joystick/src/jstk_axis.h b/driver/xf86-input-joystick/src/jstk_axis.h
index 0d672dbcf..028c65fc0 100644
--- a/driver/xf86-input-joystick/src/jstk_axis.h
+++ b/driver/xf86-input-joystick/src/jstk_axis.h
@@ -24,9 +24,9 @@
#ifndef _XF86JSTK_AXIS_H_INCLUDED_
#define _XF86JSTK_AXIS_H_INCLUDED_
-void jstkStartAxisTimer(InputInfoPtr device, int number);
-void jstkStartButtonAxisTimer(InputInfoPtr device, int number);
-void jstkHandleAbsoluteAxis(InputInfoPtr device, int number);
-void jstkHandlePWMAxis(InputInfoPtr device, int number);
+void jstkStartAxisTimer(LocalDevicePtr device, int number);
+void jstkStartButtonAxisTimer(LocalDevicePtr device, int number);
+void jstkHandleAbsoluteAxis(LocalDevicePtr device, int number);
+void jstkHandlePWMAxis(LocalDevicePtr device, int number);
#endif
diff --git a/driver/xf86-input-joystick/src/jstk_key.c b/driver/xf86-input-joystick/src/jstk_key.c
index 3c471ce97..fb1f52e4a 100644
--- a/driver/xf86-input-joystick/src/jstk_key.c
+++ b/driver/xf86-input-joystick/src/jstk_key.c
@@ -28,7 +28,6 @@
#endif
-#include <xorg-server.h>
#include <xf86.h>
#include <xf86Xinput.h>
#include <X11/extensions/XKBsrv.h>
@@ -39,7 +38,9 @@
#include "jstk.h"
#include "jstk_key.h"
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 5
#include <xkbsrv.h>
+#endif
#define MIN_KEYCODE 8
#define GLYPHS_PER_KEY 2
@@ -50,6 +51,280 @@
#define KanaMask Mod4Mask
#define ScrollLockMask Mod5Mask
+
+
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 5
+static KeySym map[] = {
+ /* 0x00 */ NoSymbol, NoSymbol,
+ /* 0x01 */ XK_Escape, NoSymbol,
+ /* 0x02 */ XK_1, XK_exclam,
+ /* 0x03 */ XK_2, XK_at,
+ /* 0x04 */ XK_3, XK_numbersign,
+ /* 0x05 */ XK_4, XK_dollar,
+ /* 0x06 */ XK_5, XK_percent,
+ /* 0x07 */ XK_6, XK_asciicircum,
+ /* 0x08 */ XK_7, XK_ampersand,
+ /* 0x09 */ XK_8, XK_asterisk,
+ /* 0x0a */ XK_9, XK_parenleft,
+ /* 0x0b */ XK_0, XK_parenright,
+ /* 0x0c */ XK_minus, XK_underscore,
+ /* 0x0d */ XK_equal, XK_plus,
+ /* 0x0e */ XK_BackSpace, NoSymbol,
+ /* 0x0f */ XK_Tab, XK_ISO_Left_Tab,
+ /* 0x10 */ XK_Q, NoSymbol,
+ /* 0x11 */ XK_W, NoSymbol,
+ /* 0x12 */ XK_E, NoSymbol,
+ /* 0x13 */ XK_R, NoSymbol,
+ /* 0x14 */ XK_T, NoSymbol,
+ /* 0x15 */ XK_Y, NoSymbol,
+ /* 0x16 */ XK_U, NoSymbol,
+ /* 0x17 */ XK_I, NoSymbol,
+ /* 0x18 */ XK_O, NoSymbol,
+ /* 0x19 */ XK_P, NoSymbol,
+ /* 0x1a */ XK_bracketleft, XK_braceleft,
+ /* 0x1b */ XK_bracketright,XK_braceright,
+ /* 0x1c */ XK_Return, NoSymbol,
+ /* 0x1d */ XK_Control_L, NoSymbol,
+ /* 0x1e */ XK_A, NoSymbol,
+ /* 0x1f */ XK_S, NoSymbol,
+ /* 0x20 */ XK_D, NoSymbol,
+ /* 0x21 */ XK_F, NoSymbol,
+ /* 0x22 */ XK_G, NoSymbol,
+ /* 0x23 */ XK_H, NoSymbol,
+ /* 0x24 */ XK_J, NoSymbol,
+ /* 0x25 */ XK_K, NoSymbol,
+ /* 0x26 */ XK_L, NoSymbol,
+ /* 0x27 */ XK_semicolon, XK_colon,
+ /* 0x28 */ XK_quoteright, XK_quotedbl,
+ /* 0x29 */ XK_quoteleft, XK_asciitilde,
+ /* 0x2a */ XK_Shift_L, NoSymbol,
+ /* 0x2b */ XK_backslash, XK_bar,
+ /* 0x2c */ XK_Z, NoSymbol,
+ /* 0x2d */ XK_X, NoSymbol,
+ /* 0x2e */ XK_C, NoSymbol,
+ /* 0x2f */ XK_V, NoSymbol,
+ /* 0x30 */ XK_B, NoSymbol,
+ /* 0x31 */ XK_N, NoSymbol,
+ /* 0x32 */ XK_M, NoSymbol,
+ /* 0x33 */ XK_comma, XK_less,
+ /* 0x34 */ XK_period, XK_greater,
+ /* 0x35 */ XK_slash, XK_question,
+ /* 0x36 */ XK_Shift_R, NoSymbol,
+ /* 0x37 */ XK_KP_Multiply, NoSymbol,
+ /* 0x38 */ XK_Alt_L, XK_Meta_L,
+ /* 0x39 */ XK_space, NoSymbol,
+ /* 0x3a */ XK_Caps_Lock, NoSymbol,
+ /* 0x3b */ XK_F1, NoSymbol,
+ /* 0x3c */ XK_F2, NoSymbol,
+ /* 0x3d */ XK_F3, NoSymbol,
+ /* 0x3e */ XK_F4, NoSymbol,
+ /* 0x3f */ XK_F5, NoSymbol,
+ /* 0x40 */ XK_F6, NoSymbol,
+ /* 0x41 */ XK_F7, NoSymbol,
+ /* 0x42 */ XK_F8, NoSymbol,
+ /* 0x43 */ XK_F9, NoSymbol,
+ /* 0x44 */ XK_F10, NoSymbol,
+ /* 0x45 */ XK_Num_Lock, NoSymbol,
+ /* 0x46 */ XK_Scroll_Lock, NoSymbol,
+ /* These KP keys should have the KP_7 keysyms in the numlock
+ * modifer... ? */
+ /* 0x47 */ XK_KP_Home, XK_KP_7,
+ /* 0x48 */ XK_KP_Up, XK_KP_8,
+ /* 0x49 */ XK_KP_Prior, XK_KP_9,
+ /* 0x4a */ XK_KP_Subtract, NoSymbol,
+ /* 0x4b */ XK_KP_Left, XK_KP_4,
+ /* 0x4c */ XK_KP_Begin, XK_KP_5,
+ /* 0x4d */ XK_KP_Right, XK_KP_6,
+ /* 0x4e */ XK_KP_Add, NoSymbol,
+ /* 0x4f */ XK_KP_End, XK_KP_1,
+ /* 0x50 */ XK_KP_Down, XK_KP_2,
+ /* 0x51 */ XK_KP_Next, XK_KP_3,
+ /* 0x52 */ XK_KP_Insert, XK_KP_0,
+ /* 0x53 */ XK_KP_Delete, XK_KP_Decimal,
+ /* 0x54 */ NoSymbol, NoSymbol,
+ /* 0x55 */ XK_F13, NoSymbol,
+ /* 0x56 */ XK_less, XK_greater,
+ /* 0x57 */ XK_F11, NoSymbol,
+ /* 0x58 */ XK_F12, NoSymbol,
+ /* 0x59 */ XK_F14, NoSymbol,
+ /* 0x5a */ XK_F15, NoSymbol,
+ /* 0x5b */ XK_F16, NoSymbol,
+ /* 0x5c */ XK_F17, NoSymbol,
+ /* 0x5d */ XK_F18, NoSymbol,
+ /* 0x5e */ XK_F19, NoSymbol,
+ /* 0x5f */ XK_F20, NoSymbol,
+ /* 0x60 */ XK_KP_Enter, NoSymbol,
+ /* 0x61 */ XK_Control_R, NoSymbol,
+ /* 0x62 */ XK_KP_Divide, NoSymbol,
+ /* 0x63 */ XK_Print, XK_Sys_Req,
+ /* 0x64 */ XK_Alt_R, XK_Meta_R,
+ /* 0x65 */ NoSymbol, NoSymbol, /* KEY_LINEFEED */
+ /* 0x66 */ XK_Home, NoSymbol,
+ /* 0x67 */ XK_Up, NoSymbol,
+ /* 0x68 */ XK_Prior, NoSymbol,
+ /* 0x69 */ XK_Left, NoSymbol,
+ /* 0x6a */ XK_Right, NoSymbol,
+ /* 0x6b */ XK_End, NoSymbol,
+ /* 0x6c */ XK_Down, NoSymbol,
+ /* 0x6d */ XK_Next, NoSymbol,
+ /* 0x6e */ XK_Insert, NoSymbol,
+ /* 0x6f */ XK_Delete, NoSymbol,
+ /* 0x70 */ NoSymbol, NoSymbol, /* KEY_MACRO */
+ /* 0x71 */ NoSymbol, NoSymbol,
+ /* 0x72 */ NoSymbol, NoSymbol,
+ /* 0x73 */ NoSymbol, NoSymbol,
+ /* 0x74 */ NoSymbol, NoSymbol,
+ /* 0x75 */ XK_KP_Equal, NoSymbol,
+ /* 0x76 */ NoSymbol, NoSymbol,
+ /* 0x77 */ NoSymbol, NoSymbol,
+ /* 0x78 */ XK_F21, NoSymbol,
+ /* 0x79 */ XK_F22, NoSymbol,
+ /* 0x7a */ XK_F23, NoSymbol,
+ /* 0x7b */ XK_F24, NoSymbol,
+ /* 0x7c */ XK_KP_Separator, NoSymbol,
+ /* 0x7d */ XK_Meta_L, NoSymbol,
+ /* 0x7e */ XK_Meta_R, NoSymbol,
+ /* 0x7f */ XK_Multi_key, NoSymbol,
+ /* 0x80 */ NoSymbol, NoSymbol,
+ /* 0x81 */ NoSymbol, NoSymbol,
+ /* 0x82 */ NoSymbol, NoSymbol,
+ /* 0x83 */ NoSymbol, NoSymbol,
+ /* 0x84 */ NoSymbol, NoSymbol,
+ /* 0x85 */ NoSymbol, NoSymbol,
+ /* 0x86 */ NoSymbol, NoSymbol,
+ /* 0x87 */ NoSymbol, NoSymbol,
+ /* 0x88 */ NoSymbol, NoSymbol,
+ /* 0x89 */ NoSymbol, NoSymbol,
+ /* 0x8a */ NoSymbol, NoSymbol,
+ /* 0x8b */ NoSymbol, NoSymbol,
+ /* 0x8c */ NoSymbol, NoSymbol,
+ /* 0x8d */ NoSymbol, NoSymbol,
+ /* 0x8e */ NoSymbol, NoSymbol,
+ /* 0x8f */ NoSymbol, NoSymbol,
+ /* 0x90 */ NoSymbol, NoSymbol,
+ /* 0x91 */ NoSymbol, NoSymbol,
+ /* 0x92 */ NoSymbol, NoSymbol,
+ /* 0x93 */ NoSymbol, NoSymbol,
+ /* 0x94 */ NoSymbol, NoSymbol,
+ /* 0x95 */ NoSymbol, NoSymbol,
+ /* 0x96 */ NoSymbol, NoSymbol,
+ /* 0x97 */ NoSymbol, NoSymbol,
+ /* 0x98 */ NoSymbol, NoSymbol,
+ /* 0x99 */ NoSymbol, NoSymbol,
+ /* 0x9a */ NoSymbol, NoSymbol,
+ /* 0x9b */ NoSymbol, NoSymbol,
+ /* 0x9c */ NoSymbol, NoSymbol,
+ /* 0x9d */ NoSymbol, NoSymbol,
+ /* 0x9e */ NoSymbol, NoSymbol,
+ /* 0x9f */ NoSymbol, NoSymbol,
+ /* 0xa0 */ NoSymbol, NoSymbol,
+ /* 0xa1 */ NoSymbol, NoSymbol,
+ /* 0xa2 */ NoSymbol, NoSymbol,
+ /* 0xa3 */ NoSymbol, NoSymbol,
+ /* 0xa4 */ NoSymbol, NoSymbol,
+ /* 0xa5 */ NoSymbol, NoSymbol,
+ /* 0xa6 */ NoSymbol, NoSymbol,
+ /* 0xa7 */ NoSymbol, NoSymbol,
+ /* 0xa8 */ NoSymbol, NoSymbol,
+ /* 0xa9 */ NoSymbol, NoSymbol,
+ /* 0xaa */ NoSymbol, NoSymbol,
+ /* 0xab */ NoSymbol, NoSymbol,
+ /* 0xac */ NoSymbol, NoSymbol,
+ /* 0xad */ NoSymbol, NoSymbol,
+ /* 0xae */ NoSymbol, NoSymbol,
+ /* 0xaf */ NoSymbol, NoSymbol,
+ /* 0xb0 */ NoSymbol, NoSymbol,
+ /* 0xb1 */ NoSymbol, NoSymbol,
+ /* 0xb2 */ NoSymbol, NoSymbol,
+ /* 0xb3 */ NoSymbol, NoSymbol,
+ /* 0xb4 */ NoSymbol, NoSymbol,
+ /* 0xb5 */ NoSymbol, NoSymbol,
+ /* 0xb6 */ NoSymbol, NoSymbol,
+ /* 0xb7 */ NoSymbol, NoSymbol,
+ /* 0xb8 */ NoSymbol, NoSymbol,
+ /* 0xb9 */ NoSymbol, NoSymbol,
+ /* 0xba */ NoSymbol, NoSymbol,
+ /* 0xbb */ NoSymbol, NoSymbol,
+ /* 0xbc */ NoSymbol, NoSymbol,
+ /* 0xbd */ NoSymbol, NoSymbol,
+ /* 0xbe */ NoSymbol, NoSymbol,
+ /* 0xbf */ NoSymbol, NoSymbol,
+ /* 0xc0 */ NoSymbol, NoSymbol,
+ /* 0xc1 */ NoSymbol, NoSymbol,
+ /* 0xc2 */ NoSymbol, NoSymbol,
+ /* 0xc3 */ NoSymbol, NoSymbol,
+ /* 0xc4 */ NoSymbol, NoSymbol,
+ /* 0xc5 */ NoSymbol, NoSymbol,
+ /* 0xc6 */ NoSymbol, NoSymbol,
+ /* 0xc7 */ NoSymbol, NoSymbol,
+ /* 0xc8 */ NoSymbol, NoSymbol,
+ /* 0xc9 */ NoSymbol, NoSymbol,
+ /* 0xca */ NoSymbol, NoSymbol,
+ /* 0xcb */ NoSymbol, NoSymbol,
+ /* 0xcc */ NoSymbol, NoSymbol,
+ /* 0xcd */ NoSymbol, NoSymbol,
+ /* 0xce */ NoSymbol, NoSymbol,
+ /* 0xcf */ NoSymbol, NoSymbol,
+ /* 0xd0 */ NoSymbol, NoSymbol,
+ /* 0xd1 */ NoSymbol, NoSymbol,
+ /* 0xd2 */ NoSymbol, NoSymbol,
+ /* 0xd3 */ NoSymbol, NoSymbol,
+ /* 0xd4 */ NoSymbol, NoSymbol,
+ /* 0xd5 */ NoSymbol, NoSymbol,
+ /* 0xd6 */ NoSymbol, NoSymbol,
+ /* 0xd7 */ NoSymbol, NoSymbol,
+ /* 0xd8 */ NoSymbol, NoSymbol,
+ /* 0xd9 */ NoSymbol, NoSymbol,
+ /* 0xda */ NoSymbol, NoSymbol,
+ /* 0xdb */ NoSymbol, NoSymbol,
+ /* 0xdc */ NoSymbol, NoSymbol,
+ /* 0xdd */ NoSymbol, NoSymbol,
+ /* 0xde */ NoSymbol, NoSymbol,
+ /* 0xdf */ NoSymbol, NoSymbol,
+ /* 0xe0 */ NoSymbol, NoSymbol,
+ /* 0xe1 */ NoSymbol, NoSymbol,
+ /* 0xe2 */ NoSymbol, NoSymbol,
+ /* 0xe3 */ NoSymbol, NoSymbol,
+ /* 0xe4 */ NoSymbol, NoSymbol,
+ /* 0xe5 */ NoSymbol, NoSymbol,
+ /* 0xe6 */ NoSymbol, NoSymbol,
+ /* 0xe7 */ NoSymbol, NoSymbol,
+ /* 0xe8 */ NoSymbol, NoSymbol,
+ /* 0xe9 */ NoSymbol, NoSymbol,
+ /* 0xea */ NoSymbol, NoSymbol,
+ /* 0xeb */ NoSymbol, NoSymbol,
+ /* 0xec */ NoSymbol, NoSymbol,
+ /* 0xed */ NoSymbol, NoSymbol,
+ /* 0xee */ NoSymbol, NoSymbol,
+ /* 0xef */ NoSymbol, NoSymbol,
+ /* 0xf0 */ NoSymbol, NoSymbol,
+ /* 0xf1 */ NoSymbol, NoSymbol,
+ /* 0xf2 */ NoSymbol, NoSymbol,
+ /* 0xf3 */ NoSymbol, NoSymbol,
+ /* 0xf4 */ NoSymbol, NoSymbol,
+ /* 0xf5 */ NoSymbol, NoSymbol,
+ /* 0xf6 */ NoSymbol, NoSymbol,
+ /* 0xf7 */ NoSymbol, NoSymbol,
+};
+
+static struct { KeySym keysym; CARD8 mask; } modifiers[] = {
+ { XK_Shift_L, ShiftMask },
+ { XK_Shift_R, ShiftMask },
+ { XK_Control_L, ControlMask },
+ { XK_Control_R, ControlMask },
+ { XK_Caps_Lock, LockMask },
+ { XK_Alt_L, AltMask },
+ { XK_Alt_R, AltMask },
+ { XK_Meta_L, Mod4Mask },
+ { XK_Meta_R, Mod4Mask },
+ { XK_Num_Lock, NumLockMask },
+ { XK_Scroll_Lock, ScrollLockMask },
+ { XK_Mode_switch, AltLangMask }
+};
+#endif
+
+
+
static void
jstkKbdCtrl(DeviceIntPtr device, KeybdCtrl *ctrl)
{
@@ -71,12 +346,47 @@ jstkInitKeys(DeviceIntPtr pJstk, JoystickDevPtr priv)
XkbSrvInfoPtr xkbi;
XkbControlsPtr ctrls;
- if (!InitKeyboardDeviceStruct(pJstk, &priv->rmlvo, NULL, jstkKbdCtrl))
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 5
{
- ErrorF("unable to init keyboard device\n");
- return !Success;
+ if (!InitKeyboardDeviceStruct(pJstk, &priv->rmlvo, NULL, jstkKbdCtrl))
+ {
+ ErrorF("unable to init keyboard device\n");
+ return !Success;
+ }
+ }
+#else
+ KeySymsRec keySyms;
+ CARD8 modMap[MAP_LENGTH];
+ KeySym sym;
+ int i, j;
+ XkbComponentNamesRec xkbnames;
+
+ memset(modMap, 0, sizeof(modMap));
+ memset(&xkbnames, 0, sizeof(xkbnames));
+
+ keySyms.map = map;
+ keySyms.mapWidth = GLYPHS_PER_KEY;
+ keySyms.minKeyCode = MIN_KEYCODE;
+ keySyms.maxKeyCode = MIN_KEYCODE + (sizeof(map) / sizeof(map[0])) / GLYPHS_PER_KEY - 1;
+
+ for (i = 0; i < (sizeof(map) / sizeof(map[0])) / GLYPHS_PER_KEY; i++) {
+ sym = map[i * GLYPHS_PER_KEY];
+ for (j = 0; j < sizeof(modifiers)/sizeof(modifiers[0]); j++) {
+ if (modifiers[j].keysym == sym)
+ modMap[i + MIN_KEYCODE] = modifiers[j].mask;
+ }
}
+ ErrorF("%s, %s, %s, %s, %s\n", priv->rmlvo.rules, priv->rmlvo.model, priv->rmlvo.layout, priv->rmlvo.variant, priv->rmlvo.options);
+ XkbSetRulesDflts(priv->rmlvo.rules, priv->rmlvo.model,
+ priv->rmlvo.layout, priv->rmlvo.variant,
+ priv->rmlvo.options);
+ if (!XkbInitKeyboardDeviceStruct(pJstk, &xkbnames,
+ &keySyms, modMap, NULL,
+ jstkKbdCtrl))
+ return !Success;
+#endif
+
/* Set Autorepeat and Delay */
if ((priv->repeat_delay || priv->repeat_interval) &&
pJstk->key &&
@@ -107,7 +417,7 @@ jstkInitKeys(DeviceIntPtr pJstk, JoystickDevPtr priv)
***************************************************************************
*/
void
-jstkGenerateKeys(InputInfoPtr device, KEYSCANCODES keys, char pressed)
+jstkGenerateKeys(LocalDevicePtr device, KEYSCANCODES keys, char pressed)
{
int i;
unsigned int k;
@@ -137,12 +447,11 @@ jstkGenerateKeys(InputInfoPtr device, KEYSCANCODES keys, char pressed)
*
***************************************************************************
*/
-Bool
+static Bool
jstkKeyboardDeviceControlProc(DeviceIntPtr dev,
int what)
{
- InputInfoPtr pInfo = dev->public.devicePrivate;
- JoystickDevPtr priv = pInfo->private;
+ JoystickDevPtr priv = (JoystickDevPtr)XI_PRIVATE(dev);
if (!priv) {
DBG(2, ErrorF("jstkKeyboardDeviceControlProc: priv == NULL\n"));
return !Success;
@@ -180,116 +489,65 @@ jstkKeyboardDeviceControlProc(DeviceIntPtr dev,
*
* jstkKeyboardPreInit --
*
- * See comment in jstkCorePreInit() for details.
+ * Called manually to create a keyboard device for the joystick
*
***************************************************************************
*/
-
-int jstkKeyboardPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
-{
- JoystickDevPtr priv = NULL;
- char *s;
-
- pInfo->private = priv = calloc(1, sizeof(JoystickDevRec));
- if (!priv)
- return BadAlloc;
-
- pInfo->device_control = jstkKeyboardDeviceControlProc;
- pInfo->read_input = NULL;
- pInfo->control_proc = NULL;
- pInfo->switch_mode = NULL;
- pInfo->fd = -1;
- pInfo->type_name = XI_JOYSTICK;
-
- /* parse keyboard-related options */
- priv->repeat_delay = 0;
- priv->repeat_interval = 0;
-
- /* Parse option for autorepeat */
- if ((s = xf86SetStrOption(pInfo->options, "AutoRepeat", NULL))) {
- int delay, rate;
- if (sscanf(s, "%d %d", &delay, &rate) != 2) {
- xf86Msg(X_ERROR, "%s: \"%s\" is not a valid AutoRepeat value",
- pInfo->name, s);
- } else {
- priv->repeat_delay = delay;
- if (rate != 0)
- priv->repeat_interval = 1000/rate;
- else priv->repeat_interval = 0;
- DBG(1, xf86Msg(X_CONFIG, "Autorepeat set to delay=%d, interval=%d\n",
- priv->repeat_delay,priv->repeat_interval));
- }
- free(s);
- }
-
- priv->rmlvo.rules = xf86SetStrOption(pInfo->options, "xkb_rules", NULL);
- if (!priv->rmlvo.rules)
- priv->rmlvo.rules = xf86SetStrOption(pInfo->options, "XkbRules", "evdev");
-
- priv->rmlvo.model = xf86SetStrOption(pInfo->options, "xkb_model", NULL);
- if (!priv->rmlvo.model)
- priv->rmlvo.model = xf86SetStrOption(pInfo->options, "XkbModel", "evdev");
-
- priv->rmlvo.layout = xf86SetStrOption(pInfo->options, "xkb_layout", NULL);
- if (!priv->rmlvo.layout)
- priv->rmlvo.layout = xf86SetStrOption(pInfo->options, "XkbLayout", "us");
-
- priv->rmlvo.variant = xf86SetStrOption(pInfo->options, "xkb_variant", NULL);
- if (!priv->rmlvo.variant)
- priv->rmlvo.variant = xf86SetStrOption(pInfo->options, "XkbVariant", "");
-
- priv->rmlvo.options = xf86SetStrOption(pInfo->options, "xkb_options", NULL);
- if (!priv->rmlvo.options)
- priv->rmlvo.options = xf86SetStrOption(pInfo->options, "XkbOptions", "");
-
- return Success;
-}
-
InputInfoPtr
-jstkKeyboardHotplug(InputInfoPtr pInfo, int flags)
+jstkKeyboardPreInit(InputDriverPtr drv, IDevPtr _dev, int flags)
{
- int rc;
+ LocalDevicePtr local = NULL;
+ IDevPtr dev = NULL;
char name[512] = {0};
- InputAttributes *attrs = NULL;
- InputOption *options;
- InputOption *iopts = NULL, *tmp;
- DeviceIntPtr dev;
-
- /* duplicate option list, append to name */
- options = xf86OptionListDuplicate(pInfo->options);
- strcpy(name, pInfo->name);
- strcat(name, " (keys)");
- options = xf86ReplaceStrOption(options, "Name", name);
- options = xf86ReplaceStrOption(options, "_source", "_driver/joystick");
-
- while(options)
- {
- tmp = calloc(1, sizeof(InputOption));
- tmp->key = xf86OptionName(options);
- tmp->value = xf86OptionValue(options);
- tmp->next = iopts;
- iopts = tmp;
- options = xf86NextOption(options);
+ local = xf86AllocateInput(drv, 0);
+ if (!local) {
+ goto SetupProc_fail;
}
- /* duplicate attribute list */
- attrs = DuplicateInputAttributes(pInfo->attrs);
-
- rc = NewInputDeviceRequest(iopts, attrs, &dev);
-
- while(iopts)
- {
- tmp = iopts->next;
- free(iopts->key);
- free(iopts->value);
- free(iopts);
- iopts = tmp;
+ dev = xcalloc(sizeof(IDevRec), 1);
+ strcpy(name, _dev->identifier);
+ strcat(name, " (keys)");
+ dev->identifier = xstrdup(name);
+ dev->driver = xstrdup(_dev->driver);
+ dev->commonOptions = (pointer)xf86optionListDup(_dev->commonOptions);
+ dev->extraOptions = (pointer)xf86optionListDup(_dev->extraOptions);
+
+ local->name = dev->identifier;
+ local->flags = XI86_KEYBOARD_CAPABLE;
+ local->device_control = jstkKeyboardDeviceControlProc;
+ local->read_input = NULL;
+ local->close_proc = NULL;
+ local->control_proc = NULL;
+ local->switch_mode = NULL;
+ local->conversion_proc = NULL;
+ local->fd = -1;
+ local->dev = NULL;
+ local->private = NULL;
+ local->type_name = XI_JOYSTICK;
+ local->history_size = 0;
+ local->always_core_feedback = 0;
+ local->conf_idev = dev;
+
+ xf86CollectInputOptions(local, NULL, NULL);
+ xf86OptionListReport(local->options);
+ xf86ProcessCommonOptions(local, local->options);
+
+
+ /* return the LocalDevice */
+ local->flags |= XI86_CONFIGURED;
+
+ return (local);
+
+SetupProc_fail:
+ if (local)
+ local->private = NULL;
+ if (dev) {
+ if (dev->identifier) xfree(dev->identifier);
+ if (dev->driver) xfree(dev->driver);
+ xfree(dev);
}
-
- FreeInputAttributes(attrs);
-
- return (rc == Success) ? dev->public.devicePrivate : NULL;
+ return NULL;
}
@@ -304,15 +562,15 @@ jstkKeyboardHotplug(InputInfoPtr pInfo, int flags)
*/
void
jstkKeyboardUnInit(InputDriverPtr drv,
- InputInfoPtr pInfo,
+ LocalDevicePtr local,
int flags)
{
- JoystickDevPtr device = (JoystickDevPtr) pInfo->private;
+ JoystickDevPtr device = (JoystickDevPtr) local->private;
DBG(2, ErrorF("jstkKeyboardUnInit.\n"));
device->keyboard_device = NULL;
- pInfo->private = NULL;
+ local->private = NULL;
- xf86DeleteInput(pInfo, 0);
+ xf86DeleteInput(local, 0);
}
diff --git a/driver/xf86-input-joystick/src/jstk_key.h b/driver/xf86-input-joystick/src/jstk_key.h
index fc0c7821a..1791c3518 100644
--- a/driver/xf86-input-joystick/src/jstk_key.h
+++ b/driver/xf86-input-joystick/src/jstk_key.h
@@ -25,10 +25,9 @@
#ifndef __JSTK_KEY_H_INCLUDED__
#define __JSTK_KEY_H_INCLUDED__
-void jstkGenerateKeys(InputInfoPtr device, KEYSCANCODES keys, char pressed);
+void jstkGenerateKeys(LocalDevicePtr device, KEYSCANCODES keys, char pressed);
+
+InputInfoPtr jstkKeyboardPreInit(InputDriverPtr drv, IDevPtr dev, int flags);
+void jstkKeyboardUnInit(InputDriverPtr drv, LocalDevicePtr local, int flags);
-int jstkKeyboardPreInit(InputDriverPtr pInfo, InputInfoPtr dev, int flags);
-void jstkKeyboardUnInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags);
-Bool jstkKeyboardDeviceControlProc(DeviceIntPtr dev, int what);
-InputInfoPtr jstkKeyboardHotplug(InputInfoPtr dev, int flags);
#endif
diff --git a/driver/xf86-input-joystick/src/jstk_options.c b/driver/xf86-input-joystick/src/jstk_options.c
index 65f25f804..42293a7a1 100644
--- a/driver/xf86-input-joystick/src/jstk_options.c
+++ b/driver/xf86-input-joystick/src/jstk_options.c
@@ -26,7 +26,6 @@
#include "config.h"
#endif
-#include <xorg-server.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -155,7 +154,7 @@ jstkParseButtonOption(const char* org,
xf86Msg(X_WARNING, "%s: error parsing button parameter.\n",
name);
}
- free(param);
+ xfree(param);
}
@@ -293,5 +292,5 @@ jstkParseAxisOption(const char* org,
}else xf86Msg(X_WARNING, "%s: error parsing deadzone.\n",
name);
}
- free(param);
+ xfree(param);
}
diff --git a/driver/xf86-input-joystick/src/jstk_properties.c b/driver/xf86-input-joystick/src/jstk_properties.c
index 413822d10..1ceeb061b 100644
--- a/driver/xf86-input-joystick/src/jstk_properties.c
+++ b/driver/xf86-input-joystick/src/jstk_properties.c
@@ -25,9 +25,12 @@
#include "config.h"
#endif
-#include <xorg-server.h>
#include <xf86Module.h>
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 3
+
+
+
#include <misc.h>
#include <xf86.h>
#include <X11/Xatom.h>
@@ -453,3 +456,5 @@ jstkInitProperties(DeviceIntPtr pJstk, JoystickDevPtr priv)
return TRUE;
}
+
+#endif