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 unity
Paket 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.