web-dev-qa-db-fra.com

Comment désactiver les gestes multitouch par défaut arbitraires dans Unity?

J'utilise une configuration de gestes multitouches personnalisée Touchégg sous Ubuntu 11.04 avec un Trackpad magique. Étant donné que les gestes par défaut (tapotement à 3 doigts et glisser pour déplacer les fenêtres, tapotement à 4 doigts pour afficher le tiret, etc.) sont apparemment codés en dur dans Unity, je ne parviens pas à leur attribuer d’actions Touchégg personnalisées, et certaines actions par défaut. les gestes (que je n'ai pas l'intention d'utiliser beaucoup, voire pas du tout) se confondent parfois avec ceux que j'ai assignés sur mesure et se déclenchent par accident.

Existe-t-il un moyen pratique (à moins de modifier la source uTouch) de désactiver certains des gestes par défaut? Si ce n'est pas le cas, des pointeurs sur des parties du code (peut-être en graal?) Où les gestes par défaut sont définis, et une aide pour le peaufinage seraient également appréciés.

22
mgunes

Une mise à jour de réponse de domster pour Ubuntu 12.10.

Le code source de Unity a évidemment changé, voici donc comment obtenir la même chose dans Unity 6.8.0. Les étapes pour télécharger le code source de Unity sont les mêmes que précédemment (je vais copier-coller l'extrait de code de 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

À ce stade, le fichier à modifier est uniquement /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Recherchez la méthode UnityScreen::InitGesturesSupport() (ligne 3368 pour Unity 6.8.0).

Ensuite, commentez toutes les lignes commençant par gesture_sub_launcher pour donner l’apparence suivante:

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

Reconstruisez à nouveau l'unité en suivant les instructions du maître:

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

Et voila encore! Déconnectez-vous et reconnectez-vous.

16
dgraziotin

Il s’avère qu’il n’est pas si difficile de patcher le paquet unity afin de désactiver totalement sa gestion des touches multiples et des gestes. Voici des instructions étape par étape pour corriger le code unity-4.24.0.

Dans une ligne de commande, entrez:

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

À ce stade, commentez les 2 lignes suivantes du fichier /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

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

et les 4 lignes suivantes du fichier /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));

Le code source est dans C++, vous pouvez donc commenter une ligne en ajoutant // au début de la ligne. Par exemple, la ligne

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

devient

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

De retour à la ligne de commande, entrez:

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

Et voilà!

Maintenant, si vous vous déconnectez et vous reconnectez, les gestes devraient fonctionner normalement. Triple tap fonctionne sur mon système comme un clic du milieu par défaut, sans avoir besoin de touchegg. Mais touchegg et ginn fonctionnent bien pour définir des gestes personnalisés pour vos applications.

11
domster

Pour faire cela sur la dernière unité (5.18.0) dans 12.04, vous devez commenter des lignes de code légèrement différentes.

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

Dans plugins/Unityshell/src/Unityshell.cpp:

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

Deuxième essai

dinegri suggère que '[t] o désactive trois gestes, il est [nécessaire] [d'avoir] installé ccsm, [puis] désactivez "Unité MT Poignées de maintien" aussi connaître comme "poignées d'amour" ' ici .

Mais cela nous laisse encore les gestes à quatre doigts.

Premier essai

Le fichier de configuration pour utouch est /etc/ginn/wishes.xml. Vous pouvez donc éditer ce fichier et supprimer (ou commenter) les actions que vous ne souhaitez pas. Ensuite, Touchégg ferait son travail sans conflits.

référence

PS: Je ne pouvais pas reproduire votre problème ici pour tester la solution. Je suis désolé pour ça.

2
desgua

Désactivez les gestes tactiles standard comme suit:

Sudo apt install dconf-editor
dconf-editor

Dans les menus de gauche, cliquez sur

com > canonical > unity > gestures

et désactivez les 3 gestes de base indiqués ici. Cela fonctionne le 16.04.3.

2
alex

Notez que vous pouvez attribuer à dpkg-buildpackage un certain nombre de travaux en tant qu'argument, ce qui vous permet d'utiliser tous les cœurs de votre processeur comme suit:

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

(Cela aurait dû être un commentaire sur la réponse de dgraziotin, mais je ne peux pas poster de commentaires.)

1
Andrej Repiský

Nous avons construit un terminal de kiosque basé sur Ubuntu, mais les gestes multitouch ont révélé le système d'exploitation. Nous avons donc dû nous en débarrasser.

Il s’agissait d’un appareil à écran tactile Samsung, xinput a identifié le module tactile sous le nom AFO TCM10J 40V.

Pour désactiver les gestes multitouch sur Ubuntu 14.04, la méthode est fondamentalement la même que celle décrite ci-dessus pour domster, sauf que vous devez trouver un commentaire sur la ligne suivante dans /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();
1
ElvinAtombender