This happens in one particular case: when the touchpoint corresponding
to the last slot is reported as released and a new point is reported
as pressed right after, so that both events happens within a same sync.
In this case, there will be two ABS_MT_TRACKING_ID events received,
first with -1 to report the released touchpoint, then with a new id
to report the pressed touchpoint, then the SYN_REPORT afterwards.
This results in m_contacts[m_currentSlot].state being updated to
Qt::TouchPointReleased then Qt::TouchPointPressed, with the former never
being reported during the handling of SYN_REPORT.
To handle this scenario we need to inspect m_lastContacts for a change
in tracking id for a particular slot combined with a non-null state,
indicating that slot has not yet been reported released and processed
in the previous sync. (the state for processed released points is reset
to zero at the end of the SYN_REPORT handler)
Task-number: QTBUG-51563
Change-Id: I01493008cf9f267e758d974dab29556d0a1425ea
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Low-level input handling uses the native coordinate
system and the (device independent) coordinates from
QScreen needs to be converted.
Change-Id: I501dc77f5e51be01a42e533cd0609e069b8d228b
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
The QGuiApplicationPrivate object is already destroyed by the time
the plugins are cleaned up during the application destruction, causing
a segmentation fault in updateInputDeviceCount().
There's no point in calling updateInputDeviceCount() in the destructor
anyway as the whole process is on its way out that stage, and we
don't support unloading plugins during the application lifetime
otherwise, so the call can just be removed from the destructor.
Change-Id: Id819d73cb8234ccedb6ea7c3e39950589ee680a1
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
This ensures that the values and signals reported by QInputDeviceManager
for touch devices always have corresponding entries in the list returned
by QTouchDevice::devices().
It also adds proper QTouchDevice unregistration when the underlying
input device gets removed by the evdevtouch QPA plugin.
Change-Id: I7bdf2f7435c775d15bddce8ba1e731afdc1d948a
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Prevent generating 2 character long 'text' strings with some garbage as
second char.
This matches how xcb works.
Change-Id: I88a248a89c80b0e100c1c4871cfab4f2c287535e
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Anything linking to platformsupport may use the same name so use
something less generic.
Change-Id: I657dd5dfcad9cf22585fcb17eda62deaf26ea6c4
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Long-lived threads started by Qt itself can now receive events even if
QCoreApplication hasn't been created. This is required in all threads we
start that will handle events, unless we're sure that the thread will
exit before the global application object begins destruction.
Otherwise, those threads will have race conditions dealing with the
event delivery system trying to call the QCoreApplication::notify()
virtual while the object is being destroyed.
Change-Id: I27eaacb532114dd188c4ffff13d4ad2a4bb443e6
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This mapping has to be done manually, like we do on Windows
for example.
libinput maps through xkbcommon, like xcb, so it is already correct.
Task-number: QTBUG-46845
Change-Id: I61f3f1160e2581aae2ef43cc260f191f6d344fec
Reviewed-by: Louai Al-Khanji <louai.al-khanji@theqtcompany.com>
Change-Id: If9ef172bda6488c4516a5e0577d6b233bd2ed1ad
Reviewed-by: Mikko Harju <mikko.harju@jolla.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Follow the exact same structure as evdevmouse and keyboard.
We must do monitoring via device discovery just like we do for keyboards and mice.
Otherwise the usage of touchscreens that connect via USB or can be turned on/off
independently from the board becomes troublesome.
Change-Id: I2de3b519e8d617b0612e5df486e481bbc09b9c8c
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Avoid showing unnecessary "TouchFrame without registered device"
warnings. That should be reserved only for not having a device ready.
The touch point list's emptyiness is a different story - there we
should stop silently as that is not an error.
Change-Id: Icdb8b352351b70a7e1af2d3a1de3001dfb751aae
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
The internal state of the input handlers need updating too. This was not possible
in the past due to the one way communication from the input handlers (that are
potentially loaded as interface-less generic plugins), but using our new private
QInputDeviceManager in QtGui we can now easily implement "talking back" from QtGui
to the input handlers, regardless of them being plugins or compiled in.
The rest of setPos() is in place already for eglfs.
linuxfb will be handled in follow-up patches.
Task-number: QTBUG-44856
Change-Id: Id72fdb8b1ea176ddfe082e466e7a538a2a98a005
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Make sure touches that were already released on an earlier
SYN_REPORT are not re-marked as TouchPointStationary.
This change has no effect on type A event processing since there
the contact state is never zeroed.
Change-Id: I2d4d705d2b3fae424b6245a75d4015dc2d86ad35
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.
Outdated header.LGPL removed (use header.LGPL21 instead)
Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing
combination. New header.LGPL-COMM taken in the use file which were
using old header.LGPL3 (src/plugins/platforms/android/extract.cpp)
Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license
combination
Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe
Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
We don't yet have API compatibility, apparently, so we need to keep up
with those changes.
Dropping support for older versions is not yet acceptable since some distros
(in particular current version of some embedded ones) may ship these versions.
Change-Id: Ibea780abd76c4b89661012dfea46868b432ded42
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
On embedded the mouse cursor will now appear and reappear regardless of
how the input handling code is loaded (via a generic plugin or compiled-in
to the platform plugin).
Instead of passing around QDeviceDiscovery instances that only works
when compiling-in the code into the platform plugin, introduce a new
internal central QInputDeviceManager. The single instance of this
provides a place to store any future input device related signals and
properties.
Also introduce mouse hotplugging support to linuxfb.
[ChangeLog][QtGui] The mouse cursor on Embedded Linux is now handling
hotplugging correctly with eglfs and linuxfb regardless of how the input
handling code is loaded (via a generic plugin or built in to the platform
plugin).
Change-Id: I147c1b04a193baf216598015264f2c06e1b20f84
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Do not include other headers from the main qlibinputhandler_p.h that
serves as the external interface to the generic plugin for example.
This way the clients do not need to care about xkbcommon headers and
such.
Task-number: QTBUG-43498
Change-Id: I56335cb19200fee830bdf4b1d203904f741f7489
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Supports relative pointer, axis, keyboard and touch events.
libinput support is only available in combination with libudev.
libxkbcommon is required to perform key mapping. For now the
default keymap is used always (selected when building xkbcommon).
[ChangeLog][QtGui] Added a plugin to get mouse, keyboard and touch events
via libinput.
Change-Id: I469d8992c0cd3e79225cefaeb931697baf86a92b
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Done automatically with clang-modernize on linux
(But does not add Q_DECL_OVERRIDE to the function that are marked
as inline because it a compilation error with MSVC2010)
Change-Id: I2196ee26e3e6fe20816834ecea5ea389eeab3171
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
tslib support can now be built-in into eglfs, like evdev.
Set QT_QPA_EGLFS_TSLIB to 1 to use tslib instead of evdevtouch.
The input device can be controlled via TSLIB_TSDEVICE.
Change-Id: Iff6bdbb4d133f73eca5528705844862236f8752b
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
Use the rule qt.qpa.input (similarly to xcb).
In addition, evdevkeyboard supports qt.qpa.input.keymap to enable keymap
debug messages.
For compatibility, evdevtouch retains the QT_QPA_EVDEV_DEBUG environment variable,
this will simply turn on the associated logging rule.
Change-Id: Ia038beb827346d2573ca9a2b69b8dcc53adcf0eb
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Risto Avila <risto.avila@digia.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
The code is now cleaned up, properly divided between platformsupport and
the actual plugin (like evdev) and categorized logging is in use.
This will allow us to use tslib as a built-in input handler in eglfs in
the future.
Change-Id: Ic87cdcfe8049bb98530e7f26ffa7a77611a8ede3
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
It doesn't allocate memory, so cannot throw and is a lot faster
than qgetenv().
Change-Id: I64de0b2644c50469a35fdba9ecde167862975b79
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Mouse and wheel events have no modifiers set. This is not ideal.
Pass at least QGuiApplication::keyboardModifiers() to get the
modifiers from the last key event.
Task-number: QTBUG-39812
Change-Id: Ica0c338c60c3e289dccfafa5aa6d602d4e111ad5
Reviewed-by: Leonard Lee <leonard.lee@digia.com>
Reviewed-by: Will Wagner <willw@carallon.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
[ChangeLog][QtGui] Keymaps are now changeable at runtime when using eglfs
Task-number: QTBUG-39583
Change-Id: I93480da72c1d1d1db1914298fe624cae02b0b2d0
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Reviewed-by: Will Wagner <willw@carallon.com>
In some cases the event axises reported by evdev are inverted.
This commit adds plugin parameters invertx and inverty to
invert X- and Y-axis.
Change-Id: Idaa63affd8321aa47974788c32d978fc21eb3dec
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Some touch screen drivers present themselves as mice with absolute
coordinates. Setting QT_QPA_EVDEV_MOUSE_PARAMETERS=abs will force
qevdevmousehandler to use absolute coordinates, mapped to the screen
from the hardware maximums. These maximum values are read from the
driver using ioctls.
This feature can be safely used with mice, as the features checks will
fail and qevdevmouse will revert back to using relative coordinates.
This way touch screens and mice can work together.
Change-Id: Ic27bda02aa2199f008bac26db75c1f896696f9f5
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
On Embedded Linux with libudev support hotplugging was already working,
except that the mouse cursor was not shown and hidden. This is now
corrected so that the cursor disappears when all mice become disconnected
and reappears if a mouse gets plugged in later on.
[ChangeLog][QtGui] Mouse hotplugging is now fully supported in eglfs
when running on Embedded Linux systems with libudev support enabled.
Task-number: QTBUG-36374
Change-Id: Iec7c1557ba6085e3958dd357460cc032896fb174
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
This stops touching the screen (and not moving) consuming 80-90% CPU.
The mtdev and non-mtdev codepaths have been separated for additional clarity.
Change-Id: I0559a6bd80dab961fdb4a83ad50860a9aec6445c
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
The Type B protocol states that touch slots with an ID of -1 should be
considered unused, but data should be retained if that slot becomes
active again later. Instead of removing the contact from the contact list,
only "disable" it. This contact can later be reused if the slot becomes
active again.
Change-Id: I827ae311841dd97f73a2c64d943658cd3f29eaf8
Done-with: Andrew Knight <andrew.knight@digia.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Change-Id: Ibac69cfa44eff33d8cc172fc16cf105fff4c12b1
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
If it's detected, we have "mtdev" in QT_CONFIG, not in CONFIG. With
the bad test, libQt5PlatformSupport.prl would not get -lmtdev and, in
turn, the evdevtouch generic plugin would fail to link.
Change-Id: I5dab57b648e66943f98a22527717a20be35f02a4
Reviewed-by: Richard J. Moore <rich@kde.org>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>