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

Я использую пользовательскую настройку жестов Touchégg Multitouch в Ubuntu 11.04 с Magic Trackpad. Так как жесты по умолчанию (такие как касание 3-мя пальцами и перетаскивание для перемещения окон, касание 4-мя пальцами, чтобы показать тире и т. Д.), По-видимому, жестко запрограммированы в Unity, я не могу назначить им какие-либо пользовательские действия Touchégg, а некоторые по умолчанию жесты (которые я не собираюсь использовать много, если вообще буду использовать) иногда смешиваются с моими аналогичными назначенными пользователем и запускаются случайно.

Есть ли практический способ (кроме настройки источника uTouch) отключить некоторые жесты по умолчанию? Если нет, указатели на части кода (возможно, в grail?), Где определены жесты по умолчанию, и помощь в настройке также приветствуются.

7 ответов

Обновление ответа domster для Ubuntu 12.10.

Очевидно, что исходный код Unity изменился, поэтому вот как можно добиться того же в Unity 6.8.0. Шаги для загрузки исходного кода Unity такие же, как и раньше (я скопирую и вставлю фрагмент кода Домстера):

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).

Затем закомментируйте все строки, начинающиеся с gest_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, следуя инструкциям Домстера:

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

Эт вуаля снова! Выйдите из системы и войдите снова.

Оказывается, это не так сложно исправить 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, и ginn теперь хорошо работают для определения пользовательских жестов для ваших приложений.

Чтобы сделать это в последнем единстве (5.18.0) в 12.04, вы должны закомментировать несколько разные строки кода.

В плагинах /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));

В плагинах /unityshell/src/unityshell.cpp:

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

Отключите стандартные сенсорные жесты следующим образом:

sudo apt install dconf-editor
dconf-editor

В левом меню нажмите на

com > canonical > unity > gestures

и отключите 3 основных жеста, показанных там. Это работает 16.04.3.

Вторая попытка

Динегри предполагает, что "чтобы отключить три жеста, необходимо [установить] ccsm, [а затем] отключить"Unit MT Grab Handles", также известные как"Loves Handles".

Но это оставляет нас с жестами четырьмя пальцами.

Первая попытка

Файл конфигурации для utouch /etc/ginn/wishes.xml, Таким образом, вы можете редактировать этот файл и удалять (или комментировать) действия, которые вам не нужны. Тогда Touchégg сделает свою работу без конфликтов.

Ссылка

PS: я не смог воспроизвести вашу проблему здесь, чтобы проверить решение. Извини за это.

Обратите внимание, что dpkg-buildpackage может быть задано количество заданий в качестве аргумента, что позволяет вам использовать все ядра вашего процессора следующим образом:

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

(Это должен был быть комментарий к ответу дражиотина, но я не могу оставлять комментарии.)

Мы создали киоск-терминал на основе Ubuntu, но жесты мультитач раскрыли ОС, поэтому нам пришлось как-то избавиться от этого.

Это было устройство с сенсорным экраном Samsung, xinput опознал сенсорный модуль как AFO TCM10J 40V.

Чтобы отключить жесты мультитач в Ubuntu 14.04, этот метод в основном такой же, как описанный выше domster, за исключением того, что вы должны найти комментарий в следующей строке в /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();
Другие вопросы по тегам