Unity에서 임의의 기본 멀티터치 제스처를 비활성화하려면 어떻게 해야 합니까?

Unity에서 임의의 기본 멀티터치 제스처를 비활성화하려면 어떻게 해야 합니까?

맞춤을 사용하고 있어요투셰그Magic Trackpad를 사용하는 Ubuntu 11.04의 멀티터치 제스처 설정. 기본 동작(예: 창 이동을 위한 세 손가락 탭 및 드래그, 대시 표시를 위한 네 손가락 탭 등)은 분명히 Unity에 하드코딩되어 있으므로 사용자 정의 Touchégg 동작을 여기에 할당할 수 없으며 일부 기본 동작은 제스처(전혀 많이 사용하지는 않을 것임)는 때때로 유사한 맞춤 할당 제스처와 섞여서 우연히 실행됩니다.

일부 기본 동작을 비활성화할 수 있는 실용적인 방법(uTouch 소스를 조정하지 않고)이 있습니까? 그렇지 않은 경우 기본 동작이 정의된 코드 부분(아마도 grail에 있습니까?)에 대한 포인터와 조정에 대한 도움을 주시면 감사하겠습니다.

답변1

업데이트돔스터 답변우분투 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()(Unity 6.8.0의 경우 3368행).

그런 다음,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();
  */
}

domster의 지시에 따라 Unity를 다시 빌드하십시오.

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

12.04의 최신 Unity(5.18.0)에서 이 작업을 수행하려면 약간 다른 코드 줄을 주석 처리해야 합니다.

플러그인/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));

답변4

다음과 같이 표준 터치 제스처를 비활성화합니다.

sudo apt install dconf-editor
dconf-editor

왼쪽 메뉴에서 다음을 클릭하세요.

com > canonical > unity > gestures

거기에 표시된 3가지 기본 동작을 비활성화합니다. 이것은 16.04.3에서 작동합니다.

관련 정보