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