(→multi-point-touch) |
|||
| Line 9: | Line 9: | ||
Change: | Change: | ||
| - | * Qt -- You need a version of Qt that has the XInput2.0 patches applied | + | * Qt -- You need a version of Qt that has the XInput2.0 patches applied. This is currently available in the MeeGo Trunk Testing project. |
New components: | New components: | ||
| + | |||
* mtdev -- Library to translate kernel protocol A and B to protocol B, adding tracking information | * mtdev -- Library to translate kernel protocol A and B to protocol B, adding tracking information | ||
| - | * xf86-input-mtev -- X input driver that communicates with mtdev to obtain multi-point data from the kernel | + | * xorg-x11-drv-mtev (previously xf86-input-mtev) -- X input driver that communicates with mtdev to obtain multi-point data from the kernel |
| - | |||
'''NOTE''': If you had previously install the multipointtouchplugin, you need to remove it via one of these methods: | '''NOTE''': If you had previously install the multipointtouchplugin, you need to remove it via one of these methods: | ||
zypper remove multipointtouchplugin | zypper remove multipointtouchplugin | ||
| Line 21: | Line 21: | ||
rm /usr/lib/qt4/plugins/libmultipointtouchplugin.so | rm /usr/lib/qt4/plugins/libmultipointtouchplugin.so | ||
If you do not remove that plugin, touch will not work correctly with the XInput2.0 enabled version of Qt. | If you do not remove that plugin, touch will not work correctly with the XInput2.0 enabled version of Qt. | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
Next, force a re-installation of the packages provided from my home project: | Next, force a re-installation of the packages provided from my home project: | ||
| - | zypper install - | + | zypper install mtdev xorg-x11-drv-mtev |
| - | and then | + | and then force update these packages for Qt from Trunk Testing: |
| - | zypper install -f --from= | + | zypper install -f --from=trunk_testing \ |
libqtcore4 libqtdbus4 libqtdeclarative4 libqtdeclarative4-folderlistmodel \ | libqtcore4 libqtdbus4 libqtdeclarative4 libqtdeclarative4-folderlistmodel \ | ||
libqtdeclarative4-gestures libqtdeclarative4-particles libqtdesigner4 \ | libqtdeclarative4-gestures libqtdeclarative4-particles libqtdesigner4 \ | ||
| Line 38: | Line 32: | ||
libqtxmlpatterns4 qt-demos qt-qmake qt-qmlviewer | libqtxmlpatterns4 qt-demos qt-qmake qt-qmlviewer | ||
On my system I only install libqtgui4, but I don't really know which other Qt packages may depend on the internal X11 changes my patches made, so the above installs all of the Qt packages. If you want to try the minimal set, you can run this: | On my system I only install libqtgui4, but I don't really know which other Qt packages may depend on the internal X11 changes my patches made, so the above installs all of the Qt packages. If you want to try the minimal set, you can run this: | ||
| - | zypper install -f --from= | + | zypper install -f --from=trunk_testing libqtgui4 |
| - | During the forced installation it | + | During the forced installation it may prompt you to switch to the versions of the various packages provided from the above repository, and may indicate the packages are downgrades. Accept the changes, and reboot. |
===enabling a native application=== | ===enabling a native application=== | ||
Random tidbits of information about projects I'm hacking on...
Contents |
During the MeeGo Conference I gave a presentation on multi-point-touch support on MeeGo (overview and video slides). As mentioned during that presentation, to add multi-point-touch to Qt applications running on top of MeeGo 1.1 requires a few changes.
The feature in MeeGo's bugzilla which is tracking the status of inclusion can be found here.
As you will find in the comments on that bug, since the MeeGo Conference last year, work has continued to move forward. The components that need to be changed in current (as of early January 2011) MeeGo systems are:
Change:
New components:
NOTE: If you had previously install the multipointtouchplugin, you need to remove it via one of these methods:
zypper remove multipointtouchplugin
or
rm /usr/lib/qt4/plugins/libmultipointtouchplugin.so
If you do not remove that plugin, touch will not work correctly with the XInput2.0 enabled version of Qt.
Next, force a re-installation of the packages provided from my home project:
zypper install mtdev xorg-x11-drv-mtev
and then force update these packages for Qt from Trunk Testing:
zypper install -f --from=trunk_testing \
libqtcore4 libqtdbus4 libqtdeclarative4 libqtdeclarative4-folderlistmodel \
libqtdeclarative4-gestures libqtdeclarative4-particles libqtdesigner4 \
libqtgui4 libqthelp4 libqtnetwork4 libqtopengl4 libqtscript4 \
libqtscripttools4 libqtsql4 libqtsql4-sqlite libqtsvg4 libqttest4 libqtxml4 \
libqtxmlpatterns4 qt-demos qt-qmake qt-qmlviewer
On my system I only install libqtgui4, but I don't really know which other Qt packages may depend on the internal X11 changes my patches made, so the above installs all of the Qt packages. If you want to try the minimal set, you can run this:
zypper install -f --from=trunk_testing libqtgui4
During the forced installation it may prompt you to switch to the versions of the various packages provided from the above repository, and may indicate the packages are downgrades. Accept the changes, and reboot.
Prior to having patches to Qt to add XInput2.0 support, applications had to load a plugin that would connect to the X event queue and process the XInput2.0 events. That is no longer necessary and applications will now just work.
For gestures, you should use the qml-gesturearea project from qt-labs to add multi-point touch gestures to your QML applications.
As Frederik Gladhorn indicated during his talk at the MeeGo Conference in Dublin, the folks over at Qt have been working on an improved QML GestureArea component.
You can pull and play with what they're cooking as follows:
git clone git://gitorious.org/qt-labs/qml-gesturearea.git git clone git://gitorious.org/qt-labs/qml-gestures-examples.git
If you are building qml-gesturearea with a version of Qt prior to 4.7.1, you may need to patch it to get it to build:
cd qml-gesturearea sed -i -e 's,q->timeout(),700,g' qdeclarativegesturerecognizers.cpp qmake make && sudo make install
Qt is configured to listen to pointer (mouse) events the first core pointer provided by X. Additional core pointers are ignored. Touch events are received from any touch device bound to the first core pointer, as well as any touch devices which are floating (not bound to any core pointer)
If you do nothing, X will default to binding an input device to the first Core Pointer. This means that the touch screen will default to control the cursor --as you move your finger around, mouse events will be generated, the cursor will move, etc.
You can use the xinput utility to "float" the touch device. On the Lenovo S10, running 'xinput list' shows something like the following:
⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Cando Corporation Cando 10.1 Multi Touch Panel with Controller id=13 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=16 [slave pointer (2)] ...
Looking at the above, you can see the touch device (Cando Corporation...) is device id 13. To float that input device, run:
xinput float 13
NOTE: If you don't have xinput, you can install it on MeeGo by running:
zypper install xorg-x11-utils-xinput
Once you float the input device, it will no longer move the mouse pointer. To reattach it, run:
xinput reattach 13 2
'2' is the device ID for the 'Virtual core pointer' you are reattaching the device to.
To keep X from connecting a device to the core pointer when starting the system, you can add:
Option "SendCoreEvents" "false"
to the InputClass section for the device, for example you can place the following in /usr/share/X11/xorg.conf.d as 60-cando.conf:
Section "InputClass"
Identifier "Cando Multi Touch Panel"
MatchVendor "Cando"
MatchDevicePath "/dev/input/event*"
Driver "mtev"
Option "SendCoreEvents" "false"
EndSection
To perform the above steps on this wiki, a new MeeGo installation may need a few utilities and packages installed: