xf86-input-ws: Import xf86-input-ws-1.3.0.20151010 as wip/xf86-input-ws-dfbsd
Try to merge patches from NetBSD xsrc
This commit is contained in:
parent
d80c7280dd
commit
09d4ce258c
1
Makefile
1
Makefile
|
@ -5009,6 +5009,7 @@ SUBDIR+= xesam-glib
|
|||
SUBDIR+= xf86-input-mouse-dfbsd
|
||||
SUBDIR+= xf86-input-synaptics
|
||||
SUBDIR+= xf86-input-vboxmouse
|
||||
SUBDIR+= xf86-input-ws-dfbsd
|
||||
SUBDIR+= xf86-video-ati-dfbsd
|
||||
SUBDIR+= xf86-video-geode
|
||||
SUBDIR+= xf86-video-intel-dfbsd
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Matthieu Herrb's wscons pointing device driver for modular X.org.
|
|
@ -0,0 +1,12 @@
|
|||
===========================================================================
|
||||
$NetBSD: MESSAGE,v 1.1 2015/10/10 20:02:52 tnn Exp $
|
||||
|
||||
To use this driver, your xorg.conf file should have an entry like this:
|
||||
|
||||
Identifier "Mouse0"
|
||||
Driver "ws"
|
||||
Option "Device" "/dev/wsmouse"
|
||||
|
||||
This should work with many wscons pointing devices, especially the zaurus.
|
||||
Please see the ws(4) manual page for more information.
|
||||
===========================================================================
|
|
@ -0,0 +1,87 @@
|
|||
# $NetBSD: Makefile,v 1.3 2018/03/07 11:57:42 wiz Exp $
|
||||
|
||||
DISTNAME= xf86-input-ws-1.3.0.20151010
|
||||
PKGREVISION= 2
|
||||
CATEGORIES= x11
|
||||
MASTER_SITES= ${MASTER_SITE_LOCAL}
|
||||
|
||||
MAINTAINER= pkgsrc-users@NetBSD.org
|
||||
HOMEPAGE= http://xenocara.org/
|
||||
COMMENT= OpenBSDs wscons input driver for modular X.org
|
||||
|
||||
ONLY_FOR_PLATFORM= NetBSD-*-* OpenBSD-*-*
|
||||
|
||||
GNU_CONFIGURE= yes
|
||||
USE_LIBTOOL= yes
|
||||
USE_TOOLS+= pkg-config
|
||||
|
||||
.include "../../mk/bsd.prefs.mk"
|
||||
|
||||
PKG_OPTIONS_VAR= PKG_OPTIONS.xf86-input-ws
|
||||
|
||||
PKG_SUPPORTED_OPTIONS=
|
||||
PKG_SUGGESTED_OPTIONS=
|
||||
|
||||
PKG_SUPPORTED_OPTIONS+= keyboard_button_xsrc_netbsd
|
||||
# .if ${OPSYS} == "NetBSD"
|
||||
# PKG_SUGGESTED_OPTIONS+= keyboard_button_xsrc_netbsd
|
||||
# .endif
|
||||
|
||||
PKG_SUPPORTED_OPTIONS+= undef_tpanel_xsrc_netbsd
|
||||
.if ${OPSYS} == "NetBSD"
|
||||
PKG_SUGGESTED_OPTIONS+= undef_tpanel_xsrc_netbsd
|
||||
.endif
|
||||
|
||||
PKG_SUPPORTED_OPTIONS+= calibration_kernel_xsrc_netbsd
|
||||
.if ${OPSYS} == "NetBSD"
|
||||
PKG_SUGGESTED_OPTIONS+= calibration_kernel_xsrc_netbsd
|
||||
.endif
|
||||
|
||||
PKG_SUPPORTED_OPTIONS+= strict_xsrc_netbsd
|
||||
.if ${OPSYS} == "NetBSD"
|
||||
PKG_SUGGESTED_OPTIONS+= strict_xsrc_netbsd
|
||||
.endif
|
||||
|
||||
PKG_SUPPORTED_OPTIONS+= read_eio_xenocara_openbsd
|
||||
.if ${OPSYS} == "OpenBSD"
|
||||
PKG_SUGGESTED_OPTIONS+= read_eio_xenocara_openbsd
|
||||
.endif
|
||||
|
||||
PKG_SUPPORTED_OPTIONS+= strict_xenocara_openbsd
|
||||
.if ${OPSYS} == "NetBSD" || ${OPSYS} == "OpenBSD"
|
||||
PKG_SUGGESTED_OPTIONS+= strict_xenocara_openbsd
|
||||
.endif
|
||||
|
||||
.include "../../mk/bsd.options.mk"
|
||||
|
||||
.if !empty(PKG_OPTIONS:Mkeyboard_button_xsrc_netbsd)
|
||||
CPPFLAGS+= -DKEYBOARD_BUTTON_XSRC_NETBSD
|
||||
.endif
|
||||
|
||||
.if !empty(PKG_OPTIONS:Mundef_tpanel_xsrc_netbsd)
|
||||
CPPFLAGS+= -DUNDEF_TPANEL_XSRC_NETBSD
|
||||
.endif
|
||||
|
||||
.if !empty(PKG_OPTIONS:Mcalibration_kernel_xsrc_netbsd)
|
||||
CPPFLAGS+= -DCALIBRATION_KERNEL_XSRC_NETBSD
|
||||
.endif
|
||||
|
||||
.if !empty(PKG_OPTIONS:Mstrict_xsrc_netbsd)
|
||||
CPPFLAGS+= -DSTRICT_XSRC_NETBSD
|
||||
.endif
|
||||
|
||||
.if !empty(PKG_OPTIONS:Mstrict_xenocara_openbsd)
|
||||
CPPFLAGS+= -DSTRICT_XENOCARA_OPENBSD
|
||||
.endif
|
||||
|
||||
.if !empty(PKG_OPTIONS:Mread_eio_xenocara_openbsd)
|
||||
CPPFLAGS+= -DREAD_EIO_XENOCARA_OPENBSD
|
||||
.endif
|
||||
|
||||
.if !empty(PKG_OPTIONS:Mstrict_xenocara_openbsd)
|
||||
CPPFLAGS+= -DSTRICT_XENOCARA_OPENBSD
|
||||
.endif
|
||||
|
||||
.include "../../x11/modular-xorg-server/buildlink3.mk"
|
||||
.include "../../x11/xorgproto/buildlink3.mk"
|
||||
.include "../../mk/bsd.pkg.mk"
|
|
@ -0,0 +1,4 @@
|
|||
@comment $NetBSD: PLIST,v 1.1 2015/10/10 20:02:52 tnn Exp $
|
||||
include/xorg/ws-properties.h
|
||||
lib/xorg/modules/input/ws_drv.la
|
||||
man/man4/ws.4
|
|
@ -0,0 +1,10 @@
|
|||
$NetBSD: distinfo,v 1.3 2015/12/18 11:19:12 taca Exp $
|
||||
|
||||
SHA1 (xf86-input-ws-1.3.0.20151010.tar.gz) = c8951b6e2d0dd3f741948bb6e1ae28e0966bec90
|
||||
RMD160 (xf86-input-ws-1.3.0.20151010.tar.gz) = a3e66b571f791f3d1ddac6d9e477cdc28faa5952
|
||||
SHA512 (xf86-input-ws-1.3.0.20151010.tar.gz) = de347b98cb508c363ffb422ad1249ad069eae77222da03a875b15b0367ffee580f580a7f671adfb9e621c6b49f2d4772e85887ebbd851c2317630ea3780b497b
|
||||
Size (xf86-input-ws-1.3.0.20151010.tar.gz) = 323648 bytes
|
||||
SHA1 (patch-src_emumb.c) = dc1252e857ec221a0be3233de3c37e16838446da
|
||||
SHA1 (patch-src_emuwheel.c) = ed10282dba2c13ef30674c96c32a5d1d170aca0c
|
||||
SHA1 (patch-src_ws.c) = 7cc275723f673ddbca3af9c8af8fa51232216a57
|
||||
SHA1 (patch-src_ws.h) = 381799f4159de5ec5dead114816ff2681e9a4874
|
|
@ -0,0 +1,81 @@
|
|||
$NetBSD: patch-src_emumb.c,v 1.1 2015/12/18 11:19:12 taca Exp $
|
||||
|
||||
* Fix build problem NetBSD 7.0_STABLE.
|
||||
|
||||
* fix various errors and warnings with xorg-server 1.20:
|
||||
|
||||
Option to skip property if keyboard
|
||||
|
||||
--- src/emumb.c.orig 2012-07-08 14:22:03.000000000 +0000
|
||||
+++ src/emumb.c
|
||||
@@ -36,6 +36,11 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
+#if defined(STRICT_XSRC_NETBSD)
|
||||
+#include <sys/types.h>
|
||||
+#endif
|
||||
+#include <sys/time.h>
|
||||
+
|
||||
#include <xorg-server.h>
|
||||
#include <X11/Xatom.h>
|
||||
#include <xf86.h>
|
||||
@@ -273,7 +278,17 @@ wsmbEmuFilterEvent(InputInfoPtr pInfo, i
|
||||
}
|
||||
|
||||
void
|
||||
+#if defined(STRICT_XSRC_NETBSD)
|
||||
+wsmbEmuWakeupHandler(pointer data,
|
||||
+/* XXX compat-api.h */
|
||||
+ int i
|
||||
+#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(23, 0)
|
||||
+ , pointer LastSelectMask
|
||||
+#endif
|
||||
+ )
|
||||
+#else /* !STRICT_XSRC_NETBSD */
|
||||
wsmbEmuWakeupHandler(pointer data, int i, pointer LastSelectMask)
|
||||
+#endif /* STRICT_XSRC_NETBSD */
|
||||
{
|
||||
InputInfoPtr pInfo = (InputInfoPtr)data;
|
||||
WSDevicePtr priv = (WSDevicePtr)pInfo->private;
|
||||
@@ -287,8 +302,16 @@ wsmbEmuWakeupHandler(pointer data, int i
|
||||
}
|
||||
|
||||
void
|
||||
+#if defined(STRICT_XSRC_NETBSD)
|
||||
+wsmbEmuBlockHandler(pointer data,
|
||||
+#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(23, 0)
|
||||
+ struct timeval **waitTime,
|
||||
+#endif
|
||||
+ pointer LastSelectMask)
|
||||
+#else /* !STRICT_XSRC_NETBSD */
|
||||
wsmbEmuBlockHandler(pointer data, struct timeval **waitTime,
|
||||
pointer LastSelectMask)
|
||||
+#endif /* STRICT_XSRC_NETBSD */
|
||||
{
|
||||
InputInfoPtr pInfo = (InputInfoPtr)data;
|
||||
WSDevicePtr priv = (WSDevicePtr)pInfo->private;
|
||||
@@ -298,7 +321,11 @@ wsmbEmuBlockHandler(pointer data, struct
|
||||
ms = priv->emulateMB.expires - GetTimeInMillis();
|
||||
if (ms <= 0)
|
||||
ms = 0;
|
||||
+#if defined(STRICT_XSRC_NETBSD)
|
||||
+#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(23, 0)
|
||||
AdjustWaitForDelay(waitTime, ms);
|
||||
+#endif
|
||||
+#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -391,6 +418,11 @@ wsmbEmuInitProperty(DeviceIntPtr dev)
|
||||
|
||||
DBG(1, ErrorF("wsmbEmuInitProperty\n"));
|
||||
|
||||
+#if defined(KEYBOARD_BUTTON_XSRC_NETBSD)
|
||||
+ if (!dev->button) /* don't init prop for keyboards */
|
||||
+ return;
|
||||
+#endif
|
||||
+
|
||||
prop_mbemu = MakeAtom(WS_PROP_MIDBUTTON,
|
||||
strlen(WS_PROP_MIDBUTTON), TRUE);
|
||||
rc = XIChangeDeviceProperty(dev, prop_mbemu, XA_INTEGER, 8,
|
|
@ -0,0 +1,33 @@
|
|||
$NetBSD: patch-src_emuwheel.c,v 1.1 2015/12/18 11:19:12 taca Exp $
|
||||
|
||||
* Fix build problem NetBSD 7.0_STABLE.
|
||||
|
||||
OpenBSD xenocara:
|
||||
|
||||
Jun 18 20:07:30 2018 UTC
|
||||
* Improve the wheel emulation logic. Make the axis filtering symmetrical,
|
||||
and less restrictive for vertical scrolling.
|
||||
|
||||
--- src/emuwheel.c.orig 2012-07-08 13:51:11.000000000 +0000
|
||||
+++ src/emuwheel.c
|
||||
@@ -36,6 +36,8 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
+#include <sys/time.h>
|
||||
+
|
||||
#include <xorg-server.h>
|
||||
#include <X11/Xatom.h>
|
||||
#include <xf86.h>
|
||||
@@ -113,7 +115,11 @@ wsWheelEmuFilterMotion(InputInfoPtr pInf
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+#if defined(STRICT_XENOCARA_OPENBSD)
|
||||
+ if (abs(dx) > abs(dy)) {
|
||||
+#else
|
||||
if (dx) {
|
||||
+#endif
|
||||
pAxis = &(priv->emulateWheel.X);
|
||||
pOtherAxis = &(priv->emulateWheel.Y);
|
||||
value = dx;
|
|
@ -0,0 +1,240 @@
|
|||
$NetBSD: patch-src_ws.c,v 1.1 2015/10/10 20:02:52 tnn Exp $
|
||||
|
||||
OpenBSD xenocara option:
|
||||
|
||||
Dec 31 23:31:41 2017 UTC
|
||||
If read() returns EIO, then the wsmouse device has gone away and our fd
|
||||
to it is useless, so detach the xserver driver and close it.
|
||||
Modeled on similar code in xf86-input-{keyboard,mouse}
|
||||
|
||||
NetBSD xsrc option
|
||||
|
||||
Apr 14 19:19:43 2017 UTC
|
||||
be somewhat smarter with mux devices:
|
||||
- don't trust the device type, if we're on a mux that may not be the whole
|
||||
story
|
||||
- always call ioctl(WSMOUSEIO_GCALIBCOORDS)
|
||||
- check .samplelen to see if we're in raw mode
|
||||
With this touchscreens on mux devices should Just Work(tm) even if they're
|
||||
not the first device on the mux.
|
||||
|
||||
Apr 6 20:55:03 2017 UTC
|
||||
we can get calibration data from the kernel now
|
||||
|
||||
Sep 26 14:47:53 2011 UTC
|
||||
Restore #ifndef __NetBSD__ portitions (disabling OpenBSD specific TPANEL stuff?)
|
||||
which were accidentally removed in rev 1.4:
|
||||
this fixes WSMOUSEIO_SCALIBCOORDS ioctl errors
|
||||
and coredumps after the driver is loaded on hpcarm W-ZERO3.
|
||||
|
||||
--- src/ws.c.orig 2015-08-29 08:48:29.000000000 +0000
|
||||
+++ src/ws.c
|
||||
@@ -213,6 +213,49 @@ wsPreInit(InputDriverPtr drv, InputInfoP
|
||||
goto fail;
|
||||
if (ioctl(pInfo->fd, WSMOUSEIO_GTYPE, &priv->type) != 0)
|
||||
goto fail;
|
||||
+
|
||||
+#if defined(CALIBRATION_KERNEL_XSRC_NETBSD)
|
||||
+
|
||||
+ /* assume screen coordinate space until proven wrong */
|
||||
+ priv->min_x = 0;
|
||||
+ priv->max_x = screenInfo.screens[priv->screen_no]->width - 1;
|
||||
+ priv->min_y = 0;
|
||||
+ priv->max_y = screenInfo.screens[priv->screen_no]->height - 1;
|
||||
+ priv->raw = 0;
|
||||
+
|
||||
+ /* don't rely on the device type - we may be listening to a mux */
|
||||
+ if (ioctl(pInfo->fd, WSMOUSEIO_GCALIBCOORDS,
|
||||
+ &priv->coords) != 0) {
|
||||
+ /* can't get absolute coordinate space - assume mouse */
|
||||
+ pInfo->type_name = XI_MOUSE;
|
||||
+ } else if (priv->coords.samplelen == WSMOUSE_CALIBCOORDS_RESET) {
|
||||
+ /*
|
||||
+ * we're getting raw coordinates - update accordingly and hope
|
||||
+ * that there is no other absolute positioning device on the
|
||||
+ * same mux
|
||||
+ */
|
||||
+ priv->min_x = priv->coords.minx;
|
||||
+ priv->max_x = priv->coords.maxx;
|
||||
+ priv->min_y = priv->coords.miny;
|
||||
+ priv->max_y = priv->coords.maxy;
|
||||
+ priv->raw = 1;
|
||||
+ pInfo->type_name = XI_TOUCHSCREEN;
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * touchscreen not in raw mode, should send us screen
|
||||
+ * coordinates
|
||||
+ */
|
||||
+ pInfo->type_name = XI_TOUCHSCREEN;
|
||||
+ }
|
||||
+
|
||||
+ if (priv->raw) {
|
||||
+ xf86Msg(X_CONFIG,
|
||||
+ "%s device will work in raw mode\n",
|
||||
+ pInfo->name);
|
||||
+ }
|
||||
+
|
||||
+#else /* !CALIBRATION_KERNEL_XSRC_NETBSD */
|
||||
+
|
||||
if (priv->type == WSMOUSE_TYPE_TPANEL) {
|
||||
pInfo->type_name = XI_TOUCHSCREEN;
|
||||
priv->raw = xf86SetBoolOption(pInfo->options, "Raw", 1);
|
||||
@@ -245,6 +288,9 @@ wsPreInit(InputDriverPtr drv, InputInfoP
|
||||
priv->min_y = 0;
|
||||
priv->max_y = screenInfo.screens[priv->screen_no]->height - 1;
|
||||
}
|
||||
+
|
||||
+#endif /* CALIBRATION_KERNEL_XSRC_NETBSD */
|
||||
+
|
||||
/* Allow options to override this */
|
||||
priv->min_x = xf86SetIntOption(pInfo->options, "MinX", priv->min_x);
|
||||
xf86IDrvMsg(pInfo, X_INFO, "minimum x position: %d\n", priv->min_x);
|
||||
@@ -399,7 +445,9 @@ wsDeviceOn(DeviceIntPtr pWS)
|
||||
{
|
||||
InputInfoPtr pInfo = (InputInfoPtr)pWS->public.devicePrivate;
|
||||
WSDevicePtr priv = (WSDevicePtr)pInfo->private;
|
||||
+#if !defined(UNDEF_TPANEL_XSRC_NETBSD)
|
||||
struct wsmouse_calibcoords coords;
|
||||
+#endif
|
||||
|
||||
DBG(1, ErrorF("WS DEVICE ON\n"));
|
||||
if ((pInfo->fd < 0) && (wsOpen(pInfo) != Success)) {
|
||||
@@ -408,6 +456,7 @@ wsDeviceOn(DeviceIntPtr pWS)
|
||||
return !Success;
|
||||
}
|
||||
|
||||
+#if !defined(UNDEF_TPANEL_XSRC_NETBSD)
|
||||
if (priv->type == WSMOUSE_TYPE_TPANEL) {
|
||||
/* get calibration values */
|
||||
if (ioctl(pInfo->fd, WSMOUSEIO_GCALIBCOORDS, &coords) != 0) {
|
||||
@@ -427,6 +476,15 @@ wsDeviceOn(DeviceIntPtr pWS)
|
||||
}
|
||||
}
|
||||
}
|
||||
+#endif
|
||||
+
|
||||
+#if defined(READ_EIO_XENOCARA_OPENBSD)
|
||||
+ if (priv->remove_timer == NULL) {
|
||||
+ /* allocate here where it's safe */
|
||||
+ priv->remove_timer = TimerSet(priv->remove_timer,
|
||||
+ 0, 0, NULL, NULL);
|
||||
+ }
|
||||
+#endif
|
||||
xf86AddEnabledDevice(pInfo);
|
||||
wsmbEmuOn(pInfo);
|
||||
pWS->public.on = TRUE;
|
||||
@@ -438,10 +496,13 @@ wsDeviceOff(DeviceIntPtr pWS)
|
||||
{
|
||||
InputInfoPtr pInfo = (InputInfoPtr)pWS->public.devicePrivate;
|
||||
WSDevicePtr priv = (WSDevicePtr)pInfo->private;
|
||||
+#if !defined(UNDEF_TPANEL_XSRC_NETBSD)
|
||||
struct wsmouse_calibcoords coords;
|
||||
+#endif
|
||||
|
||||
DBG(1, ErrorF("WS DEVICE OFF\n"));
|
||||
wsmbEmuFinalize(pInfo);
|
||||
+#if !defined(UNDEF_TPANEL_XSRC_NETBSD)
|
||||
if (priv->type == WSMOUSE_TYPE_TPANEL) {
|
||||
/* Restore calibration data */
|
||||
memcpy(&coords, &priv->coords, sizeof coords);
|
||||
@@ -450,6 +511,7 @@ wsDeviceOff(DeviceIntPtr pWS)
|
||||
strerror(errno));
|
||||
}
|
||||
}
|
||||
+#endif
|
||||
if (pInfo->fd >= 0) {
|
||||
xf86RemoveEnabledDevice(pInfo);
|
||||
wsClose(pInfo);
|
||||
@@ -457,6 +519,22 @@ wsDeviceOff(DeviceIntPtr pWS)
|
||||
pWS->public.on = FALSE;
|
||||
}
|
||||
|
||||
+#if defined(READ_EIO_XENOCARA_OPENBSD)
|
||||
+/*
|
||||
+ * Called as an OsTimer() callback to remove the device while xf86Wakeup()
|
||||
+ * isn't playing with the list.
|
||||
+ */
|
||||
+static CARD32
|
||||
+wsRemoveMouse(OsTimerPtr timer, CARD32 now, pointer arg)
|
||||
+{
|
||||
+ InputInfoPtr pInfo = (InputInfoPtr) arg;
|
||||
+
|
||||
+ xf86DisableDevice(pInfo->dev, TRUE);
|
||||
+
|
||||
+ return 0; /* don't set to run again */
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
static size_t
|
||||
wsReadEvents(InputInfoPtr pInfo)
|
||||
{
|
||||
@@ -466,7 +544,18 @@ wsReadEvents(InputInfoPtr pInfo)
|
||||
priv->events_count = priv->events_pos = 0;
|
||||
len = read(pInfo->fd, priv->events, sizeof(priv->events));
|
||||
if (len < 0) {
|
||||
+#if defined(READ_EIO_XENOCARA_OPENBSD)
|
||||
+ if (errno == EIO) {
|
||||
+ xf86IDrvMsg(pInfo, X_ERROR,
|
||||
+ "device no longer present - removing: %s\n",
|
||||
+ strerror(errno));
|
||||
+ xf86RemoveEnabledDevice(pInfo);
|
||||
+ priv->remove_timer = TimerSet(priv->remove_timer, 0, 1,
|
||||
+ wsRemoveMouse, pInfo);
|
||||
+ } else if (errno != EAGAIN)
|
||||
+#else
|
||||
if (errno != EAGAIN)
|
||||
+#endif
|
||||
xf86IDrvMsg(pInfo, X_ERROR, "read error %s\n",
|
||||
strerror(errno));
|
||||
} else if (len % sizeof(struct wscons_event)) {
|
||||
@@ -550,9 +639,11 @@ wsReadHwState(InputInfoPtr pInfo, wsHwSt
|
||||
case WSCONS_EVENT_MOUSE_ABSOLUTE_W:
|
||||
/* ignore those */
|
||||
continue;
|
||||
+#ifdef WSCONS_EVENT_SYNC
|
||||
case WSCONS_EVENT_SYNC:
|
||||
DBG(4, ErrorF("Sync\n"));
|
||||
return TRUE;
|
||||
+#endif
|
||||
default:
|
||||
xf86IDrvMsg(pInfo, X_WARNING,
|
||||
"bad wsmouse event type=%d\n", event->type);
|
||||
@@ -680,6 +771,14 @@ wsOpen(InputInfoPtr pInfo)
|
||||
static void
|
||||
wsClose(InputInfoPtr pInfo)
|
||||
{
|
||||
+#if defined(READ_EIO_XENOCARA_OPENBSD)
|
||||
+ WSDevicePtr priv = (WSDevicePtr)pInfo->private;
|
||||
+
|
||||
+ if (priv->remove_timer != NULL) {
|
||||
+ TimerFree(priv->remove_timer);
|
||||
+ priv->remove_timer = NULL;
|
||||
+ }
|
||||
+#endif
|
||||
xf86CloseSerial(pInfo->fd);
|
||||
pInfo->fd = -1;
|
||||
}
|
||||
@@ -793,17 +892,23 @@ wsSetCalibProperty(DeviceIntPtr device,
|
||||
priv->coords.maxx = priv->max_x;
|
||||
priv->coords.miny = priv->min_y;
|
||||
priv->coords.maxy = priv->max_y;
|
||||
+#ifdef __OpenBSD__
|
||||
priv->coords.swapxy = priv->swap_axes;
|
||||
+#endif
|
||||
|
||||
/* Update the kernel calibration table */
|
||||
coords.minx = priv->min_x;
|
||||
coords.maxx = priv->max_x;
|
||||
coords.miny = priv->min_y;
|
||||
coords.maxy = priv->max_y;
|
||||
+#ifdef __OpenBSD__
|
||||
coords.swapxy = priv->swap_axes;
|
||||
+#endif
|
||||
coords.samplelen = priv->raw;
|
||||
+#ifdef __OpenBSD__
|
||||
coords.resx = priv->coords.resx;
|
||||
coords.resy = priv->coords.resy;
|
||||
+#endif
|
||||
if (ioctl(pInfo->fd, WSMOUSEIO_SCALIBCOORDS, &coords) != 0) {
|
||||
xf86IDrvMsg(pInfo, X_ERROR, "SCALIBCOORDS failed %s\n",
|
||||
strerror(errno));
|
|
@ -0,0 +1,42 @@
|
|||
$NetBSD$
|
||||
|
||||
OpenBSD xenocara option:
|
||||
|
||||
Dec 31 23:31:41 2017 UTC
|
||||
If read() returns EIO, then the wsmouse device has gone away and our fd
|
||||
to it is useless, so detach the xserver driver and close it.
|
||||
Modeled on similar code in xf86-input-{keyboard,mouse}
|
||||
|
||||
--- src/ws.h.orig 2015-08-29 08:48:29.000000000 +0000
|
||||
+++ src/ws.h
|
||||
@@ -87,6 +87,10 @@ typedef struct WSDevice {
|
||||
Time timeout;
|
||||
} emulateWheel;
|
||||
|
||||
+#if defined(READ_EIO_XENOCARA_OPENBSD)
|
||||
+ OsTimerPtr remove_timer; /* Callback for removal on EIO */
|
||||
+#endif
|
||||
+
|
||||
struct wscons_event events[NWSEVENTS];
|
||||
size_t events_count;
|
||||
size_t events_pos;
|
||||
@@ -95,8 +99,19 @@ typedef struct WSDevice {
|
||||
/* Middle mouse button emulation */
|
||||
extern int wsmbEmuTimer(InputInfoPtr);
|
||||
extern BOOL wsmbEmuFilterEvent(InputInfoPtr, int, BOOL);
|
||||
+#if defined(STRICT_XSRC_NETBSD)
|
||||
+/* XXX compat-api.h */
|
||||
+#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(23, 0)
|
||||
+extern void wsmbEmuWakeupHandler(pointer, int, pointer);
|
||||
+extern void wsmbEmuBlockHandler(pointer, struct timeval **, pointer);
|
||||
+#else
|
||||
+extern void wsmbEmuWakeupHandler(pointer, int);
|
||||
+extern void wsmbEmuBlockHandler(pointer, pointer);
|
||||
+#endif
|
||||
+#else /* !STRICT_XSRC_NETBSD */
|
||||
extern void wsmbEmuWakeupHandler(pointer, int, pointer);
|
||||
extern void wsmbEmuBlockHandler(pointer, struct timeval **, pointer);
|
||||
+#endif /* STRICT_XSRC_NETBSD */
|
||||
extern void wsmbEmuPreInit(InputInfoPtr);
|
||||
extern void wsmbEmuOn(InputInfoPtr);
|
||||
extern void wsmbEmuFinalize(InputInfoPtr);
|
Loading…
Reference in New Issue