summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2010-03-24move feedback initialization upSimon Thum
This allows the backend to propery initialize the feedback from options, as it works with most other drivers. This is the hacky equivalent of fixing the initialization of pointer acceleration, which would require changes to most drivers however. Signed-off-by: Simon Thum <simon.thum@gmx.de> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2010-03-18When labeling a device as touchpad, only check for LMR buttons.Peter Hutterer
Touchpads that have physical buttons have either LMR or BTN_TOOL_FINGER. Other buttons in the range evdev recognises shouldn't be taken into account here - they skew the detection towards touchpads and away from touchscreens. Fedora Bug 571639 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Simon Thum <simon.thum@gmx.de>
2010-02-25emuMB: default to disabled mouse button emulation for touchscreens.Oliver McFadden
Because touchscreens only use one button (see EvdevProcessKeyEvent()) EvdevMBEmuFilterEvent() never calls EvdevMBEmuEnable(..., FALSE) to disable emulation. This results in touchscreen devices incurring a delay of Emulate3Timeout (typically 50 ms.) Default to MBEMU_DISABLED for touchscreen devices (unless overwritten by Xorg.conf.) Signed-off-by: Oliver McFadden <oliver.mcfadden@nokia.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2010-02-11config: move CWARNFLAGS from configure.ac to Makefile.amGaetan Nadon
Compiler warning flags should be explicitly set in the makefile rather than being merged with other packages compiler flags. Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-01-19Implement XSetDeviceMode request handlerAndrej Gelenberg
Implement XSetDeviceMode request handler for evdev. Devices with absolute axes can be switched in relative mode or absolute mode. Devices with relative axes can be switched only in relative mode. Other devices return BadMatch, cause they have no valuators and don't report motion events. New option "Mode" force devices with absolute axes to work in relative or absolute mode. Need xinputproto. Signed-off-by: Andrej Gelenberg <andrej.gelenberg@udo.edu>
2009-12-08allow wheel emulation to work with absolute-position devicesDima Kogan
Signed-off-by: Dima Kogan <dkogan@cds.caltech.edu> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-12-07removed unnecessary static declarationsDima Kogan
Signed-off-by: Dima Kogan <dkogan@cds.caltech.edu> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-12-02Fix up BTN_TOUCH handling for non-button tablets.Peter Hutterer
BTN_TOOL_* is treated as tool, just like before. BTN_TOUCH on the other hand may need to be treated as a button left press. This again requires a button class. Tested on an HP Touchsmart and a Wacom tablet. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-12-01Only init the calibration property for absolute devices.Peter Hutterer
Relative devices can't be calibrated anyway so why bother. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-12-01Report initial calibration parameters.David Woodhouse
Where an initial calibration is provided through the Calibration option to the driver, it wasn't being exposed in the 'Evdev Axis Calibration' property. Remedy that... Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> Acked-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-12-01Swap axes before applying touch screen calibration.David Woodhouse
When the SwapAxes option is set, the X and Y axes in calibration should be labelled as the user perceives them -- not as the kernel sends them. Currently, we apply the X-axis calibration to the X-axis of the input, and then do the axis swapping so we've actually applied the X-axis calibration to what the user sees as the Y-axis. This patch changes the order of the operations, so that the axes are swapped before the calibration is applied. Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> Acked-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-12-01Fix a comment, EV_CNT is available since 2.6.24Peter Hutterer
Introduced in the kernel as 2.6.23-6147-g7b19ada. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-11-19Set all valuators for relative motion events (#24737)Bartosz Brachaczek
We should process all the deltas reported by a relative motion device, otherwise some devices such as A4Tech X-750F or similar may trigger a situation when the `v` array contains random values (it isn't initialized anywhere) and later we process them and in effect the mouse cursor "jumps" on the screen. I'm not sure why, but we also must be sure that the `first` and `last` variables reflect the axis map, otherwise the mouse cursor "jumps" on the screen when clicking mouse buttons in some rare cases reported by Bartek Iwaniec on Bugzilla. That's why a simple initialization of the `v` array with zeros isn't sufficient. X.Org Bug 24737 <http://bugs.freedesktop.org/show_bug.cgi?id=24737> Signed-off-by: Bartosz Brachaczek <b.brachaczek@gmail.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-11-05Relax checks when reopening devicesDmitry Torokhov
When checking whether we are dealing with the same device as before when we try to reopen it evdev should not require exact match of entire keymap. Users should be allowed to adjust keymaps to better match their hardware even after X starts. However we don't expect changes in [BTN_MISC, KEY_OK) range since these codes are reserved for mice, joysticks, tablets and so forth, so we will limit the check to this range. The same goes for absinfo - limits can change and it should not result in device being disabled. Also check the length of the data returned by ioctl and don't try to compare more than we were given. [peter: moved the key comparison below the led+abs comparison] Signed-off-by: Dmitry Torokhov <dtor@mail.ru> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-11-02Fix drag-lock property handler for multiple draglock buttons.Peter Hutterer
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>
2009-10-26Forward keycodes > 255Peter Hutterer
The server doesn't handle them yet but eventually it should learn. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-10-20Remove the reopen timer logic.Peter Hutterer
This logic was needed in older kernels that sometimes gave error messages after coming back from resume (2.6.27 release kernels). I haven't seen any log files that needed this reopen timer in a long time, suggesting that need for it is gone. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-10-15Convert IgnoreAbsolute/RelativeAxes options into trinary state.Peter Hutterer
The Xen Virtual Pointer device exports both absolute and relative axes from the kernel device. Which coordinates are used is a run-time decision and depends on the host-specific configuration. 0a3657d2ee62f4086e9687218cb33835ba61a0b3 broke these devices, and they are now unusable out-of-the-box as there is no configuration to cover them. This patch converts the IgnoreAbsoluteAxes and the IgnoreRelativeAxes configuration options into a trinary state. 1. If unset, configure the device as normal by trying to guess the right axis setup. 2. If set to true, ignore the specific axis type completely (except for wheel events). 3. If set to false, explicitly 'unignore' the axis type, alwas configuring it if it is present on the device. This setting introduces seemingly buggy behaviour (see Bug 21832) 1. and 2. replicate the current driver behaviour. The result of 3. is that is that if a device has absolute axes and the options set to false, both axes will be initialized (absolute last to get clipping right). This requires axis labelling priorty to switch from relative first to absolute first. Relative events are forwarded into the server through the absolute axes, the server scales this into the device absolute range and everyone is happy. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-10-15Fix copy/paste typo in comment.Peter Hutterer
2009-10-13Fix typo, use uppercase like the other messagesPeter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-10-13evdev: Support the "Calibration" string option.Oliver McFadden
Originally based on a patch from Daniel Stone, this commit allows for the calibration factors to be set either from Xorg.conf or via HAL. Previously the only way was via the properties interface. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-10-10Finalize the middle button emulation when a read error occurs (#23048)Peter Hutterer
If a read error occurs, remove the block and wakeup handlers for middle mouse button emulation. Otherwise, they'll still be around after the device has been reopened and overwritten with the new ones created by EvdevOn. Once this happened, future removal of the device can lead to a server crash. X.Org Bug 23048 <http://bugs.freedesktop.org/show_bug.cgi?id=23048> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-10-07Add explicit options to ignore relative or absolute axes.Peter Hutterer
The X server cannot deal with devices that have both relative and absolute axes. Evdev tries to guess wich axes to ignore given the device type and disables absolute axes for mice and relative axes for tablets, touchscreens and touchpad. This guess is sometimes wrong and causes exitus felis domesticae parvulae. Two new configuration options are provided to explicitly allow ignoring an axis. Mouse wheel axes are exempt and will work even if relative axes are ignored. No property, this option must be set in the configuration. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Acked-by: Daniel Stone <daniel@fooishbar.org>
2009-09-30Remove unused has_xy.Peter Hutterer
has_xy is only ever set, but not used for anything else. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-09-23emuWheel: fix signed/unsigned screwupPeter Hutterer
This patch fixes wheel emulation on buttons other than 0. Reported-by: Andy Neitzke Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-08-20Only take the driver-internal button mapping to count buttons (#23405)Peter Hutterer
Regression: If a user has multiple buttons mapped to the same button number, the number of buttons counted is set to a wrong value. e.g. a button mapping of 1 1 1 for a mouse with three buttons would only initialize 1 button to the X server. In the future, the user cannot change this button mapping as the server only knows about one button. The user-supplied button map (option ButtonMapping) shouldn't matter when counting the buttons. Only the driver-internal mapping (BTN_0 -> button 1, etc.) matters. X.Org Bug 23405 <http://bugs.freedesktop.org/show_bug.cgi?id=23405> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-08-18Allow 0 as wheel emulation button for unconditional scrolling (#20529)Dima Kogan
If wheel emulation is on and the emulation button is 0, then any x/y motion of the device is converted into wheel events. The devices becomes a scrolling-only device. Signed-off-by: Dima Kogan <dkogan@cds.caltech.edu> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-08-18Restrict wheel emulation to a single axis at a time.Peter Hutterer
Wheel emulation works for both horizontal and vertical axes. Thus, if a device doesn't move in perfect straight line, scroll events build up on the respective other axis. In some clients, scroll wheel events have specific meanings other than scrolling (e.g. mplayer). In these clients, erroneous scrolling events come at a high cost. Thus, if a scroll wheel event is generated for one axis, reset the inertia of the other axis to 0, avoiding the buildup of these erroneous scrolling events. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-08-14Treat tablets (BTN_TOOL_PEN devices) differently from touchpads.Peter Hutterer
The previous checks for BTN_TOOL_FINGER and BTN_TOUCH reported false positives for touchpads for most popular tablets. As a result, their events were converted to relative events. Add a new flag EVDEV_TABLET pending presence of BTN_TOOL_PEN and ignore the touchpad special casing to report the events as-is. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-08-14Add EvdevPostButtonEvent API to immediately post a button event (#23269)Peter Hutterer
The wheel emulation code needs this API. When the timer expires, the event must be posted immediately, not enqueued onto the internal event queue. Otherwise, the emulated middle button press is enqueued only and no event is sent until the next physical event (and its EV_SYN) arrives. Since the timer is triggered outside of the SIGIO and SIGIO is blocked during this period anyway, we could also just enqueue the event and flush by simulating an EV_SYN. It's easier this way though. X.Org Bug 23269 <http://bugs.freedesktop.org/show_bug.cgi?id=23269> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Acked-by: Oliver McFadden <oliver.mcfadden@nokia.com>
2009-08-13Rename parts of the Post API to a Queue API.Peter Hutterer
Button and key events aren't posted from EvdevPost*Event, they are simply enqueued onto the evdev-internal event queue until the next EV_SYN arrives. Rename those interfaces from EvdevPost* to EvdevQueue* and leave only those that actually post to the server with a matching "*Post*" name. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Acked-by: Oliver McFadden <oliver.mcfadden@nokia.com>
2009-08-13comment typo fixPeter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-08-11Skip check for EVDEV_RELATIVE_EVENTS for wheel events.Peter Hutterer
This patch fixes a regression introduced with 1f641d75e. Wheel axis events are posted as button clicks, a device may have no relative axes but it does need to post these button clicks. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-08-06evdev.c: Fix/improve discrimination of rel/abs axesMichael Witten
The relevant comment from evdev.c: We don't allow relative and absolute axes on the same device. The reason is that some devices (MS Optical Desktop 2000) register both rel and abs axes for x/y. The abs axes register min/max; this min/max then also applies to the relative device (the mouse) and caps it at 0..255 for both axes. So, unless you have a small screen, you won't be enjoying it much; consequently, absolute axes are generally ignored. However, currenly only a device with absolute axes can be registered as a touch{pad,screen}. Thus, given such a device, absolute axes are used and relative axes are ignored. The code for initializing abs/rel axes has been abstracted out into 3 functions, so that initialization in EvdevInit(device) is as easy as: if (pEvdev->flags & (EVDEV_TOUCHPAD | EVDEV_TOUCHSCREEN)) EvdevInitTouchDevice(device, pEvdev); else if (pEvdev->flags & EVDEV_RELATIVE_EVENTS) EvdevInitRelClass(device, pEvdev); else if (pEvdev->flags & EVDEV_ABSOLUTE_EVENTS) EvdevInitAbsClass(device, pEvdev); Signed-off-by: Michael Witten <mfwitten@gmail.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-08-04evdev: Use the EvdevPost...Event() functions in the emulation code.Oliver McFadden
This is similar to commit 1f641d75edba7394201c1c53938215bae696791b. It provides the same functionality of queuing the (in this case emulated) events and waiting until an EV_SYN synchronization event is received before posting them to the server. This preserves the order of events (both real and emulated) and ensures that MotionNotify events will always be posted first. It also unifies the event posting into a few small functions which improves maintainability. From this point on, you should never use the xf86Post...Event() functions in new code, but rather the EvdevPost...Event() versions. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-07-29evdev: Only send the events at synchronization time.Oliver McFadden
Instead of just posting the button/key press/release events to the server as soon as they arrive, add them to an internal queue and post them once we receive an EV_SYN synchronization event. The motion events are always sent first, followed by the queued events. There will be one motion event and possibly many queued button/key events posted every EV_SYN event. Note that the size of the event queue (EVDEV_MAXQUEUE) is arbitrary and you may change it. If we receive more events than the queue can handle, those events are dropped and a warning message printed. Tested on my Lenovo T400 using evdev for all input devices; keyboard, touchpad, and trackpoint. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-07-20Don't register middle mouse button emulation handlers for keyboards.Peter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-07-17Coverity Prevent: NO_EFFECT in EvdevWheelEmuSetProperty:Oliver McFadden
Event unsigned_compare: Comparing unsigned less than zero is never true. "pEvdev->emulateWheel.timeout < 0UL" 342 if (pEvdev->emulateWheel.timeout < 0) Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-07-03Count REL_DIAL as a scrollwheel during EvdevProbe (#21457)Peter Hutterer
The Griffin Powermate only has a single axis (REL_DIAL). This axis is posted as horizontal scroll wheel, so we need to ensure the scroll wheel setup (including ensuring that enough buttons are available) is triggered accordingly. X.Org Bug 21457 <http://bugs.freedesktop.org/show_bug.cgi?id=21457> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-06-29Fix absolute axis labelling - mapping must be initialized before the labels.Peter Hutterer
88eedea281a710008a82f1e6af4bdffd19477f46 added axis labelling to the valuator initialization. This requires the axis mapping to be established before the absolute axis labels are initialized. 88eedea did this for relative axes, but missed out on the absolute ones. As a result, all abs. labels were initialized to "None". Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-06-29Message "found absolute touchpad" also applies to tablets - fix.Peter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-06-29If a device fails to initialize relative axes, init the abs. axes instead.Peter Hutterer
Some devices have relative axes that don't count (scroll wheels). In this case, don't claim we've initialized relative axes, continue with the absolute axes instead. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-06-23Fix wrong axis label index causing OOB reads/writes.Peter Hutterer
The atoms array is filled with each axis atom in mapping order (i.e. after the driver mapping has been applied). 'axis' OTOH is from 0 to ABS_MAX. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-06-23Initialize the axis labels to 0, not "misc".Peter Hutterer
If we don't know what an axis label is, then don't initialize it. None is a valid label. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-06-18Add missing checks for ABI_XINPUT_VERSION 7.Peter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-06-18Cope with ABI_XINPUT_VERSION 7 - requires button + axes labels.Peter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-06-18Split axes and button labels into separate function.Peter Hutterer
We'll re-use this bit very soon. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-05-28evdev: Prevent driver from processing motion events that it has not ↵Derek Upham
configured. #21832 The current implementation initializes itself to support relative motion events, or absolute motion events, or neither. But the event-handling code attempts to process all events, no matter what the initialization was. This patch reproduces the flag tests found during init, to skip events that the driver doesn't support. Signed-off-by: Derek Upham <sand@blarg.net> Signed-off-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-05-21Deal with BTN_3 to BTN_9 buttons.Peter Hutterer
These buttons were previously mapped to 0, i.e. inactive. This patch slightly improves things in that the buttons are now mapped to 8+. Devices that have both BTN_3 and BTN_SIDE (or a similar pair in that sequence) have both mapped to the same button number though. Devices that have BTN_LEFT, BTN_0, BTN_3 and BTN_SIDE have the last three mapped to 8 (and their followers have double-mappings too). We'll fix that once we actually see devices affected by this. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2009-05-21Only initialize the number of buttons we actually have.Peter Hutterer
This takes into account driver-configured button mappings, i.e. if device with one button has this button mapped to 25 through the ButtonMapping option, the X server will think the device has result 25 buttons. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>