Como posso desativar gestos multitoque padrão arbitrários no Unity?

Como posso desativar gestos multitoque padrão arbitrários no Unity?

Estou usando um personalizadoTouchéggconfiguração de gesto multitoque no Ubuntu 11.04 com Magic Trackpad. Como os gestos padrão (como tocar e arrastar com três dedos para mover as janelas, tocar com quatro dedos para revelar o traço, etc.) são aparentemente codificados no Unity, não consigo atribuir nenhuma ação personalizada do Touchégg a eles e alguns gestos padrão gestos (que não pretendo usar muito, se é que pretendo usar) ocasionalmente se misturam com meus semelhantes atribuídos de forma personalizada e são acionados por acidente.

Existe uma maneira prática (além de ajustar a fonte do uTouch) para desativar alguns dos gestos padrão? Caso contrário, também serão apreciados ponteiros para partes do código (talvez no Graal?) onde os gestos padrão são definidos e ajuda com ajustes.

Responder1

Uma atualização pararesposta domésticapara Ubuntu 12.10.

O código-fonte do Unity obviamente mudou, então aqui está como conseguir o mesmo no Unity 6.8.0. As etapas para baixar o código-fonte do Unity são as mesmas de antes (copiarei e colarei o snippet do 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

Neste ponto, o arquivo a ser editado é apenas /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Encontre o método UnityScreen::InitGesturesSupport()(linha 3368 para Unity 6.8.0).

Em seguida, comente todas as linhas começando com gesto_sub_launcher para que fique parecido com:

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

Reconstrua o Unity seguindo as instruções do domster novamente:

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

Et voila de novo! Saia e faça login novamente.

Responder2

Acontece que não é tão difícil corrigir o unitypacote para desabilitar totalmente o manuseio de multitoques e gestos. Aqui estão instruções passo a passo para patch unity-4.24.0.

Em uma linha de comando, digite:

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

Neste ponto, comente as duas linhas a seguir no arquivo /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

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

e as seguintes 4 linhas no arquivo /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));

O código-fonte está em C++, portanto, comentar uma linha é feito adicionando-o //no início da linha. Por exemplo, a linha

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

torna-se

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

De volta à linha de comando, digite:

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

E pronto!

Agora, se você sair e fazer login novamente, os gestos deverão funcionar normalmente. O toque triplo funciona no meu sistema como um clique do meio por padrão, sem a necessidade de touchegg. Mas tanto o touchegg quanto o ginn agora funcionam bem para definir gestos personalizados para seus aplicativos.

Responder3

Para fazer isso na unidade mais recente (5.18.0) em 12.04, você deve comentar linhas de código ligeiramente diferentes.

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

Em plugins/unityshell/src/unityshell.cpp:

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

Responder4

Desative os gestos de toque padrão da seguinte forma:

sudo apt install dconf-editor
dconf-editor

Nos menus à esquerda, clique para

com > canonical > unity > gestures

e desative os 3 gestos básicos mostrados lá. Isso funciona em 16.04.3.

informação relacionada