From d1818ef2066d7e526e0f64fffd41e06061ceb017 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 8 Jul 2008 16:37:42 +0930 Subject: Add support for device properties, currently MB emulation and timeout. --- src/emuMB.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'src/emuMB.c') diff --git a/src/emuMB.c b/src/emuMB.c index 99a09f2..c2f4327 100644 --- a/src/emuMB.c +++ b/src/emuMB.c @@ -34,7 +34,10 @@ #include "config.h" #endif +#include #include +#include +#include #include "evdev.h" @@ -44,6 +47,9 @@ enum { MBEMU_AUTO }; +static Atom prop_mbemu = 0; /* Middle button emulation on/off property */ +static Atom prop_mbtimeout = 0; /* Middle button timeout property */ + /* * Lets create a simple finite-state machine for 3 button emulation: * @@ -313,6 +319,12 @@ EvdevMBEmuPreInit(InputInfoPtr pInfo) EvdevMBEmuWakeupHandler, (pointer)pInfo); + XIChangeDeviceProperty(pInfo->dev, prop_mbemu, XA_INTEGER, 8, + PropModeReplace, 1, &pEvdev->emulateMB.enabled, + TRUE, FALSE, FALSE); + XIChangeDeviceProperty(pInfo->dev, prop_mbtimeout, XA_INTEGER, 16, + PropModeReplace, 1, &pEvdev->emulateMB.timeout, + TRUE, FALSE, FALSE); } void @@ -332,3 +344,63 @@ EvdevMBEmuEnable(InputInfoPtr pInfo, BOOL enable) if (pEvdev->emulateMB.enabled == MBEMU_AUTO) pEvdev->emulateMB.enabled = enable; } + + +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 3 +Atom +EvdevMBEmuInitProperty(DeviceIntPtr dev, char* name) +{ + InputInfoPtr pInfo = dev->public.devicePrivate; + EvdevPtr pEvdev = pInfo->private; + int rc = TRUE; + INT32 valid_vals[] = { MBEMU_DISABLED, MBEMU_ENABLED, MBEMU_AUTO }; + + if (!dev->button) /* don't init prop for keyboards */ + return 0; + + prop_mbemu = MakeAtom(name, strlen(name), TRUE); + rc = XIChangeDeviceProperty(dev, prop_mbemu, XA_INTEGER, 8, + PropModeReplace, 1, + &pEvdev->emulateMB.enabled, + FALSE, FALSE, FALSE); + if (rc != Success) + return 0; + + rc = XIConfigureDeviceProperty(dev, prop_mbemu, FALSE, FALSE, FALSE, 3, valid_vals); + + if (rc != Success) + return 0; + return prop_mbemu; +} + +Atom +EvdevMBEmuInitPropertyTimeout(DeviceIntPtr dev, char *name) +{ + InputInfoPtr pInfo = dev->public.devicePrivate; + EvdevPtr pEvdev = pInfo->private; + int rc = TRUE; + + prop_mbtimeout = MakeAtom(name, strlen(name), TRUE); + rc = XIChangeDeviceProperty(dev, prop_mbtimeout, XA_INTEGER, 16, PropModeReplace, 1, + &pEvdev->emulateMB.timeout, FALSE, FALSE, + FALSE); + + if (rc != Success) + return 0; + return prop_mbtimeout; +} + +BOOL +EvdevMBEmuSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val) +{ + InputInfoPtr pInfo = dev->public.devicePrivate; + EvdevPtr pEvdev = pInfo->private; + + if (atom == prop_mbemu) + pEvdev->emulateMB.enabled = *((BOOL*)val->data); + else if (atom == prop_mbtimeout) + pEvdev->emulateMB.timeout = *((INT16*)val->data); + + return TRUE; +} +#endif -- cgit v1.2.3