SOURCES: evdev-Xfuncproto-is-stale.patch (NEW), evdev-latest-CVS-1...
pluto
pluto at pld-linux.org
Sun Aug 21 16:21:07 CEST 2005
Author: pluto Date: Sun Aug 21 14:21:07 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- minor fixes for evdev-driver.
---- Files affected:
SOURCES:
evdev-Xfuncproto-is-stale.patch (NONE -> 1.1) (NEW), evdev-latest-CVS-1.9.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/evdev-Xfuncproto-is-stale.patch
diff -u /dev/null SOURCES/evdev-Xfuncproto-is-stale.patch:1.1
--- /dev/null Sun Aug 21 16:21:07 2005
+++ SOURCES/evdev-Xfuncproto-is-stale.patch Sun Aug 21 16:21:02 2005
@@ -0,0 +1,11 @@
+--- evdev.c_orig 2005-01-25 01:36:37.000000000 -0400
++++ evdev.c 2005-06-28 18:59:11.000000000 -0300
+@@ -47,6 +47,8 @@
+
+ #include <xf86Module.h>
+
++#define _X_EXPORT
++
+ #define ArrayLength(a) (sizeof(a) / (sizeof((a)[0])))
+
+ #define MIN_KEYCODE 8
================================================================
Index: SOURCES/evdev-latest-CVS-1.9.patch
diff -u /dev/null SOURCES/evdev-latest-CVS-1.9.patch:1.1
--- /dev/null Sun Aug 21 16:21:07 2005
+++ SOURCES/evdev-latest-CVS-1.9.patch Sun Aug 21 16:21:02 2005
@@ -0,0 +1,213 @@
+--- evdev.c 2005-01-25 01:36:37.000000000 -0400
++++ evdev.c_1.9-CVS 2005-08-09 18:26:34.000000000 -0300
+@@ -23,7 +23,9 @@
+ * Author: Kristian Høgsberg (krh at redhat.com)
+ */
+
++#ifdef HAVE_CONFIG_H
+ #include "config.h"
++#endif
+
+ #include <X11/keysym.h>
+ #include <X11/XF86keysym.h>
+@@ -47,6 +49,20 @@
+
+ #include <xf86Module.h>
+
++/* 2.4 compatibility */
++#ifndef EVIOCGRAB
++#define EVIOCGRAB _IOW('E', 0x90, int)
++#endif
++
++#ifndef BTN_TASK
++#define BTN_TASK 0x117
++#endif
++
++#ifndef EV_SYN
++#define EV_SYN EV_RST
++#endif
++/* end compat */
++
+ #define ArrayLength(a) (sizeof(a) / (sizeof((a)[0])))
+
+ #define MIN_KEYCODE 8
+@@ -63,9 +79,9 @@
+ #define MODEFLAG 8
+ #define COMPOSEFLAG 16
+
+-#ifndef EV_RST
+-#define EV_RST EV_SYN
+-#endif
++typedef struct {
++ int kernel24;
++} EvdevRec, *EvdevPtr;
+
+ static int wheel_up_button = 4;
+ static int wheel_down_button = 5;
+@@ -148,6 +164,7 @@
+ case BTN_EXTRA:
+ case BTN_FORWARD:
+ case BTN_BACK:
++ case BTN_TASK:
+ xf86PostButtonEvent(pInfo->dev, 0, ev.code - BTN_LEFT + 5,
+ value, 0, 0);
+ break;
+@@ -158,7 +175,7 @@
+ }
+ break;
+
+- case EV_RST:
++ case EV_SYN:
+ break;
+ }
+ }
+@@ -483,8 +500,10 @@
+ EvdevProc(DeviceIntPtr device, int what)
+ {
+ InputInfoPtr pInfo;
++ EvdevPtr pEvdev;
+
+ pInfo = device->public.devicePrivate;
++ pEvdev = pInfo->private;
+
+ switch (what)
+ {
+@@ -492,11 +511,17 @@
+ return EvdevInit(device);
+
+ case DEVICE_ON:
++ if (!pEvdev->kernel24 && ioctl(pInfo->fd, EVIOCGRAB, (void *)1))
++ xf86Msg(X_WARNING, "%s: Grab failed (%s)\n", pInfo->name,
++ strerror(errno));
+ xf86AddEnabledDevice(pInfo);
+ device->public.on = TRUE;
+ break;
+
+ case DEVICE_OFF:
++ if (!pEvdev->kernel24 && ioctl(pInfo->fd, EVIOCGRAB, (void *)0))
++ xf86Msg(X_WARNING, "%s: Release failed (%s)\n", pInfo->name,
++ strerror(errno));
+ xf86RemoveEnabledDevice(pInfo);
+ device->public.on = FALSE;
+ break;
+@@ -522,23 +547,31 @@
+ return FALSE;
+ }
+
+-static void
++static int
+ EvdevProbe(InputInfoPtr pInfo)
+ {
+ char key_bitmask[(KEY_MAX + 7) / 8];
+ char rel_bitmask[(REL_MAX + 7) / 8];
+ int i, has_axes, has_buttons, has_keys;
++ EvdevPtr pEvdev = pInfo->private;
++
++ if (ioctl(pInfo->fd, EVIOCGRAB, (void *)1) && errno == EINVAL) {
++ /* keyboards are unsafe in 2.4 */
++ pEvdev->kernel24 = 1;
++ } else {
++ ioctl(pInfo->fd, EVIOCGRAB, (void *)0);
++ }
+
+ if (ioctl(pInfo->fd,
+ EVIOCGBIT(EV_REL, sizeof(rel_bitmask)), rel_bitmask) < 0) {
+ xf86Msg(X_ERROR, "ioctl EVIOCGBIT failed: %s\n", strerror(errno));
+- return;
++ return 1;
+ }
+
+ if (ioctl(pInfo->fd,
+ EVIOCGBIT(EV_KEY, sizeof(key_bitmask)), key_bitmask) < 0) {
+ xf86Msg(X_ERROR, "ioctl EVIOCGBIT failed: %s\n", strerror(errno));
+- return;
++ return 1;
+ }
+
+ has_axes = FALSE;
+@@ -571,19 +604,25 @@
+ XI86_CONFIGURED;
+ pInfo->type_name = XI_MOUSE;
+ }
+-
++
+ if (has_keys) {
+- xf86Msg(X_INFO, "%s: Configuring as keyboard\n", pInfo->name);
+- pInfo->flags |= XI86_KEYBOARD_CAPABLE | XI86_CONFIGURED;
+- pInfo->type_name = XI_KEYBOARD;
++ if (pEvdev->kernel24) {
++ xf86Msg(X_INFO, "%s: Kernel < 2.6 is too old, ignoring keyboard\n",
++ pInfo->name);
++ } else {
++ xf86Msg(X_INFO, "%s: Configuring as keyboard\n", pInfo->name);
++ pInfo->flags |= XI86_KEYBOARD_CAPABLE | XI86_CONFIGURED;
++ pInfo->type_name = XI_KEYBOARD;
++ }
+ }
+
+ if ((pInfo->flags & XI86_CONFIGURED) == 0) {
+ xf86Msg(X_WARNING, "%s: Don't know how to use device\n",
+ pInfo->name);
++ return 1;
+ }
+
+- return;
++ return 0;
+ }
+
+ static InputInfoPtr
+@@ -592,6 +631,7 @@
+ InputInfoPtr pInfo;
+ MessageType deviceFrom = X_CONFIG;
+ const char *device;
++ EvdevPtr pEvdev;
+
+ if (!(pInfo = xf86AllocateInput(drv, 0)))
+ return NULL;
+@@ -614,12 +654,17 @@
+ pInfo->always_core_feedback = 0;
+ pInfo->conf_idev = dev;
+
++ if (!(pEvdev = xcalloc(sizeof(*pEvdev), 1)))
++ return pInfo;
++ pInfo->private = pEvdev;
++
+ xf86CollectInputOptions(pInfo, NULL, NULL);
+ xf86ProcessCommonOptions(pInfo, pInfo->options);
+
+ device = xf86CheckStrOption(dev->commonOptions, "Device", NULL);
+ if (!device) {
+ xf86Msg(X_ERROR, "%s: No device specified.\n", pInfo->name);
++ xfree(pEvdev);
+ return pInfo;
+ }
+
+@@ -631,15 +676,17 @@
+
+ if (pInfo->fd < 0) {
+ xf86Msg(X_ERROR, "Unable to open evdev device \"%s\".\n", device);
++ xfree(pEvdev);
+ return pInfo;
+ }
+
+- EvdevProbe(pInfo);
++ if (EvdevProbe(pInfo))
++ xfree(pEvdev);
+
+ return pInfo;
+ }
+
+-InputDriverRec EVDEV = {
++_X_EXPORT InputDriverRec EVDEV = {
+ 1,
+ "evdev",
+ NULL,
+@@ -680,7 +727,7 @@
+ {0, 0, 0, 0}
+ };
+
+-XF86ModuleData evdevModuleData =
++_X_EXPORT XF86ModuleData evdevModuleData =
+ {
+ &EvdevVersionRec,
+ EvdevPlug,
================================================================
More information about the pld-cvs-commit
mailing list