Как отключить произвольные мультитач-жесты по умолчанию в Unity?

Как отключить произвольные мультитач-жесты по умолчанию в Unity?

Я использую пользовательскийТушеггНастройка жестов 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.

Связанный контент