Open GoogleCodeExporter opened 9 years ago
Issue 179 has been merged into this issue.
Original comment by jose.exposito89@gmail.com
on 21 Oct 2012 at 9:40
Original comment by jose.exposito89@gmail.com
on 21 Oct 2012 at 9:42
I have the same problem with the driver evdev on ubuntu 12,04
Original comment by txetx...@gmail.com
on 28 Oct 2012 at 12:45
Same problem. It seems like the motion is multiplied by each finger. If I start
dragging with 3 fingers then only move one, the motion is a bit more
manageable, but still too fast.
Additionally, if I don't lift all three fingers at exactly the same time, the
end point of the selection (or drag) jumps across the screen.
Original comment by mrorog...@gmail.com
on 2 Dec 2012 at 8:25
I have kind of the same problems, but somehow twisted: scrolling (via
two-finger-drag) is too fast despite setting to 1, but moving windows via the
three-finger-drag is way too slow.
I also have the problem with three fingers not beeing lifted at the same time.
Original comment by mat.lech...@gmail.com
on 11 Dec 2012 at 8:31
Same here on Ubuntu Gnome 13.10.
Window dragging with 4 buttons is extremely slow. Any ideas how to debug and
solve this?
Original comment by dmt....@gmail.com
on 16 Jan 2014 at 8:06
[deleted comment]
Same on Ubuntu 14.04. I have recompiled unity so that it doesn't hijack
multitouch as per
http://elscreemo.blogspot.co.uk/2013/05/restoring-three-finger-gesture-in.html
so that I can use touchegg for my own gestures. Works great except for 3
finger drag being 3 times as fast as it should be!
So I thought I'd put my recently gained "hacking and recompiling" knowledge to
work with this. Step by step instructions for adventurous users until if/when
an option is implemented:
sudo apt-get build-dep touchegg
cd ~
mkdir toucheggbuild
cd toucheggbuild
apt-get source touchegg
gedit touchegg-1.1.1/src/touchegg/actions/implementation/DragAndDrop.cpp
Find:
{{{
QCursor::setPos(QCursor::pos().x() +
attrs.value(GEIS_GESTURE_ATTRIBUTE_DELTA_X).toFloat(),
QCursor::pos().y() + attrs.value(GEIS_GESTURE_ATTRIBUTE_DELTA_Y).toFloat());
}}}
Replace with:
{{{
QCursor::setPos(QCursor::pos().x() +
(attrs.value(GEIS_GESTURE_ATTRIBUTE_DELTA_X).toFloat() /
attrs.value(GEIS_GESTURE_ATTRIBUTE_TOUCHES).toFloat()),
QCursor::pos().y() + (attrs.value(GEIS_GESTURE_ATTRIBUTE_DELTA_Y).toFloat() / attrs.value(GEIS_GESTURE_ATTRIBUTE_TOUCHES).toFloat()));
}}}
dpkg-buildpackage -us -uc -nc
sudo dpkg -i touchegg_*.deb
sudo apt-mark hold touchegg
It's just a quick and dirty hack. Basically, I'm dividing the movement delta
by the number of fingers. It occurs to me that I'm risking a divide by zero,
though I guess it's unlikely to be registering touches with 0 fingers.
Original comment by m...@deryk.co.uk
on 14 May 2014 at 3:45
Try to replace the commands:
$ mkdir toucheggbuild
$ cd toucheggbuild
$ apt-get source touchegg
With the commands:
$ svn checkout https://touchegg.googlecode.com/svn/touchegg/ toucheggbuild
$ cd toucheggbuild
To get the latest source code with some extra fixes and features:
https://code.google.com/p/touchegg/issues/detail?id=185
https://code.google.com/p/touchegg/issues/detail?id=222
I'm so sorry but I'm living abroad for a long time now and I don't have a linux
box to test your patch... and Virtualbox is not very good for multitouch
testing. By the way, if you would like to avoid division by 0 replace that line
with:
int numTouches = attrs.value(GEIS_GESTURE_ATTRIBUTE_TOUCHES).toInt();
int newX = QCursor::pos().x() + (attrs.value(GEIS_GESTURE_ATTRIBUTE_DELTA_X).toFloat();
int newY = QCursor::pos().y() + attrs.value(GEIS_GESTURE_ATTRIBUTE_DELTA_Y).toFloat();
if (numTouches > 0) {
newX /= numTouches;
newY /= numTouches;
}
QCursor::setPos(newX, newY);
That should do the trick. Thank you very much and sorry guys for having the
project a little bit unmaintained but I don't have the tools here to hack it.
Original comment by jose.exposito89@gmail.com
on 14 May 2014 at 6:42
I'm using touchegg on Arch with synaptics and was having the same problems
described:
1. scrolling and dragging (or any gesture I believe) with 2 or 3 fingers seems
to multiply the tracking speed by the number of fingers.
2. Lifting a finger while doing a 3 finger drag made the cursor jump.
Jose, I copy and pasted your code directly and it didn't quite work for me.
Actually, what happened was when I triggered the DragAndDrop with 3 fingers,
the cursor would repeatedly jump to the top left corner (0, 0). I didn't take
the time to figure out why but I copied the solution above and it works fine. I
don't think dividing by 0 will ever be an issue but I suppose it would be
better to prevent it altogether.
So, dividing by the number of fingers works great and the tracking speed is
normal for a DragAndDrop. I have not tried fixing the scrolling (or other
gestures) yet but I am assuming the same fix will work.
In order to fix the issue where the cursor jumps, the DragAndDrop.cpp needs
further modification. The problem is (as described above) if you do not lift
all three fingers at exactly the same time to end the action, the cursor jumps.
Further testing indicates if you simply lift one finger while doing a 3 finger
drag and leave the other 2 down, the cursor jumps. The fix is simple and works
but it's not the ideal fix. What we do is check to see if the number of fingers
has changed when the action gets updated, and if the number of fingers is not
the same as the number that initially triggered the action, we do nothing. A
better fix would end the action entirely when one or more fingers are lifted.
Anyway, to fix this the following changes need to be made:
1. Add a private variable to DragAndDrop.h to hold the initial number of fingers
private:
/**
* Button to emulate.
*/
int button;
int startNumFingers;
};
2. Set the int to 0 when the action starts (not sure if this is necessary)
DragAndDrop::DragAndDrop(const QString &settings, Window window)
: Action(settings, window)
{
this->button = 1;
this->startNumFingers = 0;
...
3. Set the number of fingers to the correct number when the action updates,
then check if the current number of fingers is equal to the initial number of
fingers. If not, return.
void DragAndDrop::executeUpdate(const QHash<QString, QVariant>& attrs)
{
int numFingers = attrs.value(GEIS_GESTURE_ATTRIBUTE_TOUCHES).toFloat();
if(startNumFingers == 0) {
startNumFingers = numFingers;
}
if (!attrs.contains(GEIS_GESTURE_ATTRIBUTE_DELTA_X) || !attrs.contains(GEIS_GESTURE_ATTRIBUTE_DELTA_Y))
return;
if (numFingers != startNumFingers)
return;
That's it! I've uploaded DragAndDrop.h and DragAndDrop.cpp for the lazy.
Original comment by mtbro...@gmail.com
on 7 Jun 2014 at 11:23
Attachments:
Thanks!
Original comment by charcoal...@gmail.com
on 2 Sep 2014 at 12:53
I am having the same issue. Everything is working great I just want to slow the
speed of DragAndDrop. But I can't apply this solution because I installed
touchegg from xubuntu 14.10 repos (sudo apt-get install touchegg). I tried to
compile but it does not build dependencies.
Original comment by davinder...@gmail.com
on 15 Nov 2014 at 5:05
Original issue reported on code.google.com by
Sergey.K...@gmail.com
on 21 Oct 2012 at 9:23