mirror of
https://github.com/X11Libre/xf86-input-evdev.git
synced 2026-04-14 11:44:16 +00:00
Fix drag-lock property handler for multiple draglock buttons.
Parsing of the values was wrong. Given an input of 1 2 3 4, button 1 sets the lock for button 2 and button 3 sets the lock for button 4. This also means we need to return BadMatch if the property isn't a multiple of 2. Red Hat Bug 524428 <https://bugzilla.redhat.com/show_bug.cgi?id=524428> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
@@ -256,7 +256,7 @@ EvdevDragLockSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val,
|
||||
pEvdev->dragLock.meta = meta;
|
||||
memset(pEvdev->dragLock.lock_pair, 0, sizeof(pEvdev->dragLock.lock_pair));
|
||||
}
|
||||
} else
|
||||
} else if ((val->size % 2) == 0)
|
||||
{
|
||||
CARD8* vals = (CARD8*)val->data;
|
||||
|
||||
@@ -269,10 +269,11 @@ EvdevDragLockSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val,
|
||||
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 += 2)
|
||||
pEvdev->dragLock.lock_pair[vals[i] - 1] = vals[i + 1];
|
||||
}
|
||||
}
|
||||
} else
|
||||
return BadMatch;
|
||||
}
|
||||
|
||||
return Success;
|
||||
|
||||
Reference in New Issue
Block a user