Я использую пользовательскийТушеггНастройка жестов multitouch в Ubuntu 11.04 с Magic Trackpad. Поскольку жесты по умолчанию (такие как нажатие тремя пальцами и перетаскивание для перемещения окон, нажатие четырьмя пальцами для отображения панели и т. д.) по-видимому, жестко закодированы в Unity, я не могу назначить им какие-либо пользовательские действия Touchégg, а некоторые жесты по умолчанию (которые я не собираюсь использовать часто, если вообще буду) иногда путаются с моими похожими назначенными пользователем жестами и срабатывают случайно.
Есть ли практический способ (кроме настройки исходного кода uTouch) отключить некоторые жесты по умолчанию? Если нет, то ссылки на части кода (возможно, в grail?), где определены жесты по умолчанию, а также помощь в настройке также были бы признательны.
решение1
Обновление дляответ домстерадля Ubuntu 12.10.
Исходный код Unity, очевидно, изменился, поэтому вот как добиться того же в Unity 6.8.0. Шаги для загрузки исходного кода Unity те же, что и раньше (я скопирую и вставлю фрагмент 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
На этом этапе редактировать можно только файл /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp
.
Найдите метод UnityScreen::InitGesturesSupport()
(строка 3368 для Unity 6.8.0).
Затем закомментируйте все строки, начинающиеся с gesture_sub_launcher, чтобы они выглядели так:
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();
*/
}
Пересоберите Unity еще раз, следуя инструкциям domster:
cd /tmp/unity/unity-6.8.0
dpkg-buildpackage -us -uc -nc
cd ..
sudo dpkg -i *deb
И вуаля снова! Выйдите из системы и войдите снова.
решение2
Оказывается, не так уж и сложно пропатчить пакет, unity
чтобы полностью отключить обработку мультитачей и жестов. Вот пошаговые инструкции по пропатчиванию unity-4.24.0
.
В командной строке введите:
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
На этом этапе закомментируйте следующие 2 строки в файле
/tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp
:
GeisAdapter::Default()->Run();
gestureEngine = new GestureEngine(screen);
и следующие 4 строки в файле /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));
Исходный код находится в C++
, поэтому комментирование строки осуществляется путем добавления //
в начало строки. Например, строка
GeisAdapter::Default()->Run();
становится
//GeisAdapter::Default()->Run(); .
Вернитесь в командную строку и введите:
cd unity-4.24.0
dpkg-buildpackage -us -uc -nc
cd ..
sudo dpkg -i *deb
И вуаля!
Теперь, если вы выйдете из системы и снова войдете в нее, жесты должны работать нормально. Тройной тап работает в моей системе как средний щелчок по умолчанию, без необходимости в touchegg. Но и touchegg, и ginn теперь хорошо работают для определения пользовательских жестов для ваших приложений.
решение3
Чтобы сделать это в последней версии Unity (5.18.0) в 12.04, вам придется закомментировать немного отличающиеся строки кода.
В 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));
В plugins/unityshell/src/unityshell.cpp:
// geis_adapter_.Run();
// gesture_engine_.reset(new GestureEngine(screen));
решение4
Отключите стандартные сенсорные жесты следующим образом:
sudo apt install dconf-editor
dconf-editor
В левом меню нажмите, чтобы
com > canonical > unity > gestures
и отключите 3 основных жеста, показанных там. Это работает на 16.04.3.