如何在Unity中禁用任意默认多点触控手势?

我正在Ubuntu 11.04中使用带有Magic Trackpad的自定义Touchégg多点触控手势设置。 由于默认手势(例如3指点按并拖动以移动窗口,4指点击以显示短划线等)在Unity中显然是硬编码的,因此我无法为其分配任何自定义Touchégg操作,并且有些默认手势(我不打算使用太多,如果有的话)偶尔会混淆我的类似的自定义手势并被意外触发。

是否有一种实用的方法(没有调整uTouch源)来禁用某些默认手势? 如果没有,指向默认手势定义的部分代码(可能是圣杯?)的指针,以及帮助调整也将受到赞赏。

针对Ubuntu 12.10的domster答案的更新。

Unity源代码已经明显改变了,所以这里是如何在Unity 6.8.0中实现相同的。 下载Unity源代码的步骤与之前相同(我将复制并粘贴domster的代码段):

sudo apt-get build-dep unity cd /tmp #It can be done somewhere else, feel free to change the base location. mkdir unity cd unity apt-get source unity 

此时,要编辑的文件只是/tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp

找到UnityScreen::InitGesturesSupport() (Unity 6.8.0的第3368行)。

然后,注释以gesture_sub_launcher开头的所有行,使其看起来像:

 void UnityScreen::InitGesturesSupport() { std::unique_ptr gesture_broker(new UnityGestureBroker); wt->GetWindowCompositor().SetGestureBroker(std::move(gesture_broker)); /* gestures_sub_launcher_.reset(new nux::GesturesSubscription); gestures_sub_launcher_->SetGestureClasses(nux::DRAG_GESTURE); gestures_sub_launcher_->SetNumTouches(4); gestures_sub_launcher_->SetWindowId(GDK_ROOT_WINDOW()); gestures_sub_launcher_->Activate(); gestures_sub_dash_.reset(new nux::GesturesSubscription); gestures_sub_dash_->SetGestureClasses(nux::TAP_GESTURE); gestures_sub_dash_->SetNumTouches(4); gestures_sub_dash_->SetWindowId(GDK_ROOT_WINDOW()); gestures_sub_dash_->Activate(); gestures_sub_windows_.reset(new nux::GesturesSubscription); gestures_sub_windows_->SetGestureClasses(nux::TOUCH_GESTURE | nux::DRAG_GESTURE | nux::PINCH_GESTURE); gestures_sub_windows_->SetNumTouches(3); gestures_sub_windows_->SetWindowId(GDK_ROOT_WINDOW()); gestures_sub_windows_->Activate(); */ } 

按照domster的说明重新构建Unity:

 cd /tmp/unity/unity-6.8.0 dpkg-buildpackage -us -uc -nc cd .. sudo dpkg -i *deb 

再次瞧瞧! 注销并重新登录。

事实certificate,修补unity包以完全禁用其处理多点触摸和手势并不困难。 以下是修补unity-4.24.0步说明。

在命令行中,输入:

 sudo apt-get build-dep unity cd /tmp #It can be done somewhere else, feel free to change the base location. mkdir unity cd unity apt-get source unity 

此时,在文件/tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp以下两行:

 GeisAdapter::Default()->Run(); gestureEngine = new GestureEngine(screen); 

以及文件/tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp的以下4行:

 GeisAdapter& adapter = *(GeisAdapter::Default()); adapter.drag_start.connect(sigc::mem_fun(this, &Launcher::OnDragStart)); adapter.drag_update.connect(sigc::mem_fun(this, &Launcher::OnDragUpdate)); adapter.drag_finish.connect(sigc::mem_fun(this, &Launcher::OnDragFinish)); 

源代码是用C++编写的,因此通过在行的开头添加//来对行进行注释。 例如,该行

 GeisAdapter::Default()->Run(); 

 //GeisAdapter::Default()->Run(); . 

返回命令行,输入:

 cd unity-4.24.0 dpkg-buildpackage -us -uc -nc cd .. sudo dpkg -i *deb 

瞧瞧!

现在,如果您注销并重新登录,手势应该正常运行。 默认情况下,三次点击在我的系统上作为中间点击,而不需要touchegg。 但是touchegg和ginn现在都可以很好地为您的应用程序定义自定义手势。

要在12.04中的最新统一(5.18.0)上执行此操作,您必须注释掉稍微不同的代码行。

在plugins / unityshell / src / Launcher.cpp中:

 // GeisAdapter& adapter = GeisAdapter::Instance(); // adapter.drag_start.connect(sigc::mem_fun(this, &Launcher::OnDragStart)); // adapter.drag_update.connect(sigc::mem_fun(this, &Launcher::OnDragUpdate)); // adapter.drag_finish.connect(sigc::mem_fun(this, &Launcher::OnDragFinish)); 

在plugins / unityshell / src / unityshell.cpp中:

 // geis_adapter_.Run(); // gesture_engine_.reset(new GestureEngine(screen)); 

第二次尝试

dinegri建议'[t] o禁用三个手势,它[必须]安装ccsm,[然后]禁用“Unit MT Grab Handles” 在这里也称为“Loves Handles”。

但它让我们用四指手势。

第一次尝试

utouch的配置文件是/etc/ginn/wishes.xml 。 因此,您可以编辑此文件并删除(或评论)您不想要的操作。 然后,Touchégg将毫无冲突地完成工作。

参考

PS:我无法在此重现您的问题以测试解决方案。 对不起,我很抱歉。

我们已经构建了一个基于Ubuntu的自助终端终端,但多点触控手势显示了操作系统,所以我们不得不以某种方式摆脱它。

这是一款三星触摸屏设备, xinput将触摸模块确定为AFO TCM10J 40V。

要在Ubuntu 14.04上禁用多点触控手势,该方法与上述domster基本相同,除了你必须在/tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp找到以下行的/tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

 // InitGestureEngine(); 

请注意,dpkg-buildpackage可以作为参数提供多个作业,这允许您使用所有CPU内核,如下所示:

 dpkg-buildpackage -us -uc -nc -j$(($(nproc))) 

(这应该是对dgraziotin答案的评论,但我不能发表评论。)

禁用标准触摸手势如下:

 sudo apt install dconf-editor dconf-editor 

在左侧菜单中单击以

 com > canonical > unity > gestures 

并禁用那里显示的3个基本手势。 这适用于16.04.3。

Interesting Posts