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

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

私はカスタムを使用していますタッチエッグUbuntu 11.04 で Magic Trackpad を使用してマルチタッチ ジェスチャを設定します。デフォルトのジェスチャ (3 本指でタップしてドラッグしてウィンドウを移動する、4 本指でタップしてダッシュを表示するなど) は Unity でハードコードされているようで、カスタムの Touchégg アクションを割り当てることができません。また、一部のデフォルトのジェスチャ (あまり使用しない、またはまったく使用しない) が、カスタムで割り当てた同様のジェスチャと混ざって、誤ってトリガーされることがあります。

デフォルトのジェスチャの一部を無効にする実用的な方法 (uTouch ソースを微調整する以外) はありますか? ない場合は、デフォルトのジェスチャが定義されているコード部分 (おそらく Grail 内) へのポインタと、微調整のヘルプもいただければ幸いです。

答え1

アップデートドムスターの回答Ubuntu 12.10 用。

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

するとまたできました! ログアウトして再度ログインしてください。

答え2

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

この時点で、ファイル内の次の 2 行をコメント アウトします /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp

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

ファイル内に次の 4 行があります/tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

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

答え3

12.04 の最新の Unity (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));

答え4

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

sudo apt install dconf-editor
dconf-editor

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

com > canonical > unity > gestures

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

関連情報