Wie kann ich beliebige Standard-Multitouch-Gesten in Unity deaktivieren?

Wie kann ich beliebige Standard-Multitouch-Gesten in Unity deaktivieren?

Ich verwende eine benutzerdefinierteTouchéggMultitouch-Gesten-Setup in Ubuntu 11.04 mit einem Magic Trackpad. Da die Standardgesten (wie Tippen und Ziehen mit 3 Fingern zum Verschieben von Fenstern, Tippen mit 4 Fingern zum Anzeigen des Bindestrichs usw.) anscheinend in Unity fest codiert sind, kann ich ihnen keine benutzerdefinierten Touchégg-Aktionen zuweisen, und einige Standardgesten (die ich nicht oft oder gar nicht verwenden möchte) vermischen sich gelegentlich mit meinen ähnlichen benutzerdefiniert zugewiesenen Gesten und werden versehentlich ausgelöst.

Gibt es eine praktische Möglichkeit (ohne die uTouch-Quelle zu optimieren), einige der Standardgesten zu deaktivieren? Wenn nicht, wären Zeiger auf Teile des Codes (vielleicht in Grail?), in denen die Standardgesten definiert sind, und Hilfe beim Optimieren ebenfalls willkommen.

Antwort1

Ein Update zuDomster-Antwortfür Ubuntu 12.10.

Der Unity-Quellcode hat sich offensichtlich geändert. Hier erfahren Sie, wie Sie dasselbe in Unity 6.8.0 erreichen. Die Schritte zum Herunterladen des Unity-Quellcodes sind dieselben wie zuvor (ich werde den Snippet von Domster kopieren und einfügen):

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

Zu diesem Zeitpunkt ist die zu bearbeitende Datei nur /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Suchen Sie die Methode UnityScreen::InitGesturesSupport()(Zeile 3368 für Unity 6.8.0).

Kommentieren Sie dann alle Zeilen, die mit „gesture_sub_launcher“ beginnen, sodass es folgendermaßen aussieht:

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();
  */
}

Bauen Sie Unity erneut auf, indem Sie den Anweisungen von Domster folgen:

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

Und voilà! Abmelden und erneut anmelden.

Antwort2

Es stellt sich heraus, dass es nicht so schwer ist, das unityPaket zu patchen, um die Verarbeitung von Multi-Touch und Gesten vollständig zu deaktivieren. Hier finden Sie schrittweise Anweisungen zum Patchen unity-4.24.0.

Geben Sie in einer Befehlszeile Folgendes ein:

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

Kommentieren Sie an dieser Stelle die folgenden beiden Zeilen in der Datei aus /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

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

und die folgenden 4 Zeilen in der Datei /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));

Der Quellcode ist in C++, daher wird eine Zeile kommentiert, indem //am Anfang der Zeile hinzugefügt wird. Beispielsweise die Zeile

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

wird

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

Kehren Sie zur Befehlszeile zurück und geben Sie Folgendes ein:

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

Und voilà!

Wenn Sie sich jetzt abmelden und wieder anmelden, sollten die Gesten normal funktionieren. Dreifachtippen funktioniert auf meinem System standardmäßig als mittlerer Klick, ohne dass Touchegg erforderlich ist. Aber sowohl Touchegg als auch Ginn funktionieren jetzt gut, um benutzerdefinierte Gesten für Ihre Anwendungen zu definieren.

Antwort3

Um dies auf der neuesten Unity (5.18.0) in 12.04 zu tun, müssen Sie leicht unterschiedliche Codezeilen auskommentieren.

In 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));

In plugins/unityshell/src/unityshell.cpp:

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

Antwort4

Deaktivieren Sie Standard-Touch-Gesten wie folgt:

sudo apt install dconf-editor
dconf-editor

Klicken Sie in den Menüs auf der linken Seite auf

com > canonical > unity > gestures

und deaktiviere die 3 dort gezeigten Basisgesten. Dies funktioniert unter 16.04.3.

verwandte Informationen