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

22

Estou usando uma configuração de gesto multitouch personalizado Touchégg no Ubuntu 11.04 com um Magic Trackpad. Como os gestos padrão (como tocar com 3 dedos e arrastar para mover janelas, tocar com 4 dedos para revelar o traço, etc.) são aparentemente codificados no Unity, não consigo atribuir nenhuma ação personalizada de Touchégg a eles, e alguns padrões gestos (que eu não pretendo usar muito, se for o caso) ocasionalmente misturam-se com os meus semelhantes personalizados e são acionados por acidente.

Existe uma maneira prática (curta de ajustar a fonte do uTouch) para desativar alguns dos gestos padrão? Se não, os ponteiros para partes do código (talvez no grail?) Onde os gestos padrão são definidos, e ajuda com ajustes também seria apreciado.

    
por mgunes 18.08.2011 / 11:49

7 respostas

16

Uma atualização para domster answer para o Ubuntu 12.10.

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

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 o Unity 6.8.0).

Em seguida, comente todas as linhas que começam com gesture_sub_launcher para que pareçam:

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

Re-construa 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! Faça logout e faça login novamente.

    
por dgraziotin 23.10.2012 / 10:22
11

Acontece que não é tão difícil de corrigir o pacote unity para desabilitar totalmente o manuseio de vários toques e gestos. Aqui estão instruções passo a passo para corrigir 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 seguintes duas linhas 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 que uma linha é feita adicionando // no início da linha. Por exemplo, a linha

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

torna-se

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

Voltar para a linha de comando, digite:

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

Et voila!

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

    
por domster 25.12.2011 / 16:40
3

Para fazer isso na última unidade (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));
    
por stefanix 07.05.2013 / 21:47
2

Segunda tentativa

dinegri sugere que 'não desabilite três gestos, é necessário ter ccsm instalado, [e depois] desabilite "Alças de Captura da Unidade MT" também conhecidas como "Adora Loves Handles" ' aqui .

Mas isso nos deixa com os quatro gestos dos dedos ainda.

Primeira tentativa

O arquivo de configuração para o utouch é /etc/ginn/wishes.xml . Então você pode editar este arquivo e remover (ou comentar) as ações que você não quer. Então Touchégg faria o seu trabalho sem conflitos.

Referência

PS: não consegui reproduzir seu problema aqui para testar a solução. Me desculpe por isso.

    
por desgua 24.08.2011 / 02:35
1

Nós construímos um terminal de quiosque baseado no Ubuntu, mas os gestos multitouch revelaram o sistema operacional, então tivemos que nos livrar disso de alguma forma.

Era um dispositivo touchscreen da Samsung, xinput identificou o módulo de toque como AFO TCM10J 40V.

Para desativar gestos multitoque no Ubuntu 14.04, o método é basicamente o mesmo que o domster descrito acima, exceto que você precisa encontrar um comentário na linha seguinte em /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();
    
por ElvinAtombender 10.03.2015 / 16:14
1

Note que o dpkg-buildpackage pode receber o número de jobs como argumento, o que permite que você use todos os núcleos da sua CPU da seguinte forma:

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

(Este deve ter sido um comentário para a resposta do dgraziotin, mas não posso postar comentários.)

    
por ondrejandrej 27.01.2017 / 18:21
1

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

sudo apt install dconf-editor
dconf-editor

Nos menus à esquerda, clique em

com > canonical > unity > gestures

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

    
por alex 20.12.2017 / 18:12