web-dev-qa-db-ja.com

Unityで任意のデフォルトのマルチタッチジェスチャを無効にするにはどうすればよいですか?

Ubuntu 11.04でMagic Trackpadを使用して、カスタム Touchégg マルチタッチジェスチャセットアップを使用しています。デフォルトのジェスチャー(3本指でタップしてウィンドウを移動する、4本でタップしてダッシュを表示するなど)はUnityでハードコードされているように見えるため、カスタムTouchéggアクションを割り当てることはできません。ジェスチャ(私があまり使用しないつもりのジェスチャ)が、時折、私のカスタム割り当てのジェスチャと混同され、偶然にトリガーされます。

デフォルトのジェスチャの一部を無効にする実用的な方法(uTouchソースの調整以外)はありますか?そうでない場合は、デフォルトのジェスチャが定義されているコードの部分へのポインタ(おそらく杯ですか?)、および微調整の支援も高く評価されます。

22
mgunes

Ubuntu 12.10の domster answer の更新.

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<nux::GestureBroker> 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

出来上がり!ログアウトしてログインし直します。

16
dgraziotin

マルチタッチとジェスチャの処理を完全に無効にするために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の次の2行をコメントアウトします。

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は、アプリケーションのカスタムジェスチャを定義するのにうまく機能します。

11
domster

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));
3
stefanix

2回目の試行

dinegri '[t] oは3つのジェスチャを無効にします。ccsmをインストールする必要があります。そして、[ユニットMTグラブハンドル "を無効にすることもできます。 Loves Handles "' ここ

しかし、まだ4本の指のジェスチャーが残っています。

最初の試行

Utouchの設定ファイルは/etc/ginn/wishes.xmlです。したがって、このファイルを編集して、不要なアクションを削除(またはコメント)できます。その後、Touchéggは競合することなく仕事をします。

参照

PS:ソリューションをテストするために、ここで問題を再現できませんでした。ごめんなさい.

2
desgua

次のように標準のタッチジェスチャを無効にします。

Sudo apt install dconf-editor
dconf-editor

左側のメニューでクリックして

com > canonical > unity > gestures

そこに表示されている3つの基本的なジェスチャーを無効にします。これは16.04.3で機能します。

2
alex

Dpkg-buildpackageには引数として多数のジョブを指定できることに注意してください。これにより、次のようにすべてのCPUコアを使用できます。

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

(これはdgraziotinの答えに対するコメントであるはずでしたが、コメントを投稿することはできません。)

1
Andrej Repiský

Ubuntuベースのキオスク端末を構築しましたが、マルチタッチジェスチャによりOSが明らかになったため、どうにかしてそれを取り除く必要がありました。

サムスンのタッチスクリーンデバイスであり、xinputはタッチモジュールをAFO TCM10J 40Vとして識別しました。

Ubuntu 14.04でマルチタッチジェスチャを無効にする方法は、/tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cppの次の行にコメントを見つける必要があることを除いて、基本的に上記のdomsterと同じです。

// InitGestureEngine();
1
ElvinAtombender