From 6f6ac982951165a6ac77b3e32750c47780ea4990 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 8 Oct 2008 14:25:53 +1030 Subject: Add checkonly handling to property handlers. If checkonly is TRUE, we can only check if applying the value would succeed. The value is actually applied if checkonly is FALSE. --- src/draglock.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src/draglock.c') diff --git a/src/draglock.c b/src/draglock.c index 90809c9..86142b6 100644 --- a/src/draglock.c +++ b/src/draglock.c @@ -257,7 +257,8 @@ EvdevDragLockInitProperty(DeviceIntPtr dev) * i.e. to set bt 3 to draglock button 1, supply 0,0,1 */ int -EvdevDragLockSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val) +EvdevDragLockSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val, + BOOL checkonly) { InputInfoPtr pInfo = dev->public.devicePrivate; EvdevPtr pEvdev = pInfo->private; @@ -287,8 +288,11 @@ EvdevDragLockSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val) if (meta > EVDEV_MAXBUTTONS) return BadValue; - pEvdev->dragLock.meta = meta; - memset(pEvdev->dragLock.lock_pair, 0, sizeof(pEvdev->dragLock.lock_pair)); + if (!checkonly) + { + pEvdev->dragLock.meta = meta; + memset(pEvdev->dragLock.lock_pair, 0, sizeof(pEvdev->dragLock.lock_pair)); + } } else { CARD8* vals = (CARD8*)val->data; @@ -297,11 +301,14 @@ EvdevDragLockSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val) if (vals[i] > EVDEV_MAXBUTTONS) return BadValue; - pEvdev->dragLock.meta = 0; - memset(pEvdev->dragLock.lock_pair, 0, sizeof(pEvdev->dragLock.lock_pair)); + if (!checkonly) + { + pEvdev->dragLock.meta = 0; + memset(pEvdev->dragLock.lock_pair, 0, sizeof(pEvdev->dragLock.lock_pair)); - for (i = 0; i < val->size && i < EVDEV_MAXBUTTONS; i++) - pEvdev->dragLock.lock_pair[i] = vals[i]; + for (i = 0; i < val->size && i < EVDEV_MAXBUTTONS; i++) + pEvdev->dragLock.lock_pair[i] = vals[i]; + } } } -- cgit v1.2.3