¿Cómo puedo desactivar gestos multitáctiles predeterminados arbitrarios en Unity?

¿Cómo puedo desactivar gestos multitáctiles predeterminados arbitrarios en Unity?

Estoy usando una costumbreTouchéggConfiguración de gestos multitáctiles en Ubuntu 11.04 con un Magic Trackpad. Dado que los gestos predeterminados (como tocar y arrastrar con tres dedos para mover ventanas, tocar con cuatro dedos para revelar el guión, etc.) aparentemente están codificados en Unity, no puedo asignarles ninguna acción Touchégg personalizada, y algunas acciones predeterminadas Los gestos (que no tengo intención de usar mucho, en todo caso) ocasionalmente se mezclan con otros similares asignados de forma personalizada y se activan por accidente.

¿Existe alguna forma práctica (aparte de modificar la fuente de uTouch) para desactivar algunos de los gestos predeterminados? De lo contrario, también se agradecerían indicaciones sobre partes del código (¿quizás en el grial?) donde se definen los gestos predeterminados y ayuda con los ajustes.

Respuesta1

Una actualización derespuesta domsterpara Ubuntu 12.10.

El código fuente de Unity obviamente ha cambiado, así que aquí se explica cómo lograr lo mismo en Unity 6.8.0. Los pasos para descargar el código fuente de Unity son los mismos que antes (copiaré y pegaré el fragmento 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

En este punto, el archivo a editar es solo /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Encuentre el método UnityScreen::InitGesturesSupport()(línea 3368 para Unity 6.8.0).

Luego, comenta todas las líneas que comienzan con gesto_sub_launcher para que se vea así:

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

Reconstruya Unity siguiendo las instrucciones de domster nuevamente:

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

¡Y listo otra vez! Cerrar sesión y volver a iniciar sesión.

Respuesta2

Resulta que no es tan difícil parchear el unitypaquete para deshabilitar totalmente el manejo de gestos y toques múltiples. Aquí encontrará instrucciones paso a paso para aplicar parches unity-4.24.0.

En una línea de comando, ingrese:

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

En este punto, comente las siguientes 2 líneas en el archivo /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

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

y las siguientes 4 líneas en el archivo /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));

El código fuente está en C++, por lo que comentar una línea se realiza agregando //al principio de la línea. Por ejemplo, la línea

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

se convierte

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

De regreso a la línea de comando, ingrese:

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

¡Y listo!

Ahora, si cierra sesión y vuelve a iniciarla, los gestos deberían funcionar normalmente. El triple toque funciona en mi sistema como un clic central de forma predeterminada, sin necesidad de tocar huevo. Pero tanto touchegg como ginn ahora funcionan bien para definir gestos personalizados para sus aplicaciones.

Respuesta3

Para hacer esto en la última unidad (5.18.0) en 12.04, debe comentar líneas de código ligeramente diferentes.

En complementos/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));

En complementos/unityshell/src/unityshell.cpp:

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

Respuesta4

Deshabilite los gestos táctiles estándar de la siguiente manera:

sudo apt install dconf-editor
dconf-editor

En los menús de la izquierda, haga clic para

com > canonical > unity > gestures

y desactiva los 3 gestos básicos que se muestran allí. Esto funciona el 16.04.3.

información relacionada