하위 메뉴를 활성화할 때 키보드 단축키가 작동하지 않는 이유는 무엇입니까?

하위 메뉴를 활성화할 때 키보드 단축키가 작동하지 않는 이유는 무엇입니까?

마우스 오른쪽 버튼 클릭 하위 메뉴(예: 바탕 화면, 아이콘/파일 또는 패널)가 활성화된 경우 키보드 단축키(예: Ctrl+ Alt+ ) 또는 멀티미디어 키(예: 재생/일시 중지)가 작동하지 않습니다. T마찬가지로 gmusicbrowser, qpdfview 또는 Libreoffice와 같은 응용 프로그램에서 마우스 오른쪽 버튼 클릭 메뉴를 열 때도 작동하지 않습니다(각각 시도하지는 않겠습니다). 패널 아이콘을 눌러 패널에서 하위 메뉴를 열거나 Thunar에서 하위 메뉴(예: 편집)를 열면 작동하지 않습니다.

왜 이런거야?직관적으로 이는 활동 하위 메뉴가 "바로가기 호출 듣기"라는 "시스템" 기능을 비활성화하기 때문인 것 같습니다. 이 올바른지? 엄밀히 말하면 이것은 시스템의 "모니터링 기능"에 대한 제한이 아닌가?

이상하게(?), Firefox의 오른쪽 클릭 메뉴가 열려 있으면 이런 일이 발생하지 않습니다.

답변1

이 효과는 다음과 같습니다.X Windows에서 잡기. Fedora 25에서 Wayland 데스크탑을 실행하면 XWayland의 X 응용 프로그램에도 더 이상 이 효과가 없습니다. ㅏKDE 오류Wayland 사용을 위해 이 문제와 관련된 문제가 종료되었습니다.

기술적으로 가져오기 사용 여부는 사용된 GUI 도구 키트/위젯(또는 X와 직접 통신하는 경우 응용 프로그램)에 따라 다릅니다. 많은 GUI 툴킷은 메뉴가 열릴 때 X 잡기를 사용합니다. 하지만, 그이유이것과 Firefox가 이를 피하는 방법은 다소 모호해 보입니다.

X 스크래핑의 또 다른 용도는 게임 및 중첩된 데스크탑(예: 원격 액세스 및 가상 머신)입니다. 이 답변이 원래 작성되었을 때 Wayland는 필요한 키보드 이벤트를 가져오는 방법을 지원하지 않았습니다.[1][2]. 따라서 XWayland 스크래핑이 어떻게 처리되는지, 즉 XWayland 스크래핑이 다시 설명하는 특정 효과를 갖기 시작할지 여부가 불분명합니다. Fedora 27에 대한 테스트에서는 그렇지 않은 것으로 나타났습니다.


스택 오버플로입력 포커스를 하위 창에 설정하는 것보다 입력 잡기를 사용하는 것이 창 관리자가 기본 창의 제목 표시줄을 "비활성" 색상으로 다시 그리는 것을 방지하는 유일한 방법일 수 있습니다.

이 문제에 대해 제가 찾을 수 있는 가장 "공식적인" 소스는 버그 보고서입니다. 분명히 X를 사용하여 메뉴를 가져오는 것은 오랜 문제입니다. 끝까지 읽으시면 위의 창 관리자 문제를 해결하기 위한 제안 사항을 보실 수 있습니다. 아마도 그것이 Firefox가 하는 일일 것입니다.

(생각해보면 원래 데스크탑 환경에서는 전역 키보드 단축키가 그렇게 중요한지 잘 모르겠습니다. Alt+Tab이 CDE에서 나온 것이라는 것은 알지만 메뉴가 열려 있을 때 Alt+Tab을 사용해야 할 뚜렷한 이유는 없습니다.)


Qt 메뉴 팝업이 키보드와 포인터를 잡아서 사용자가 시스템 단축키(예: 스크린샷 찍기)를 사용하지 못하게 합니다.

팝업 메뉴를 구현하기 위해 X11에서 제공하는 메커니즘은 전역 키보드 및 마우스 잡기입니다. Qt를 포함한 모든 최신 애플리케이션과 툴킷은 이 메커니즘을 사용합니다. 불행하게도 매우 심각한 동작 변경(사용자 경험에도 해를 끼칠 수 있음)을 적용하지 않고서는 이를 변경할 수 있는 방법이 없습니다.


특정 메뉴를 열 때 화면이 잠기지 않습니다.

미셸은 이 질문에 이렇게 대답했습니다.http://bugs.debian.org/514036


--8<-- 미셸 댄지그

이는 사실입니다. 포인터가 메뉴 밖에 있을 때 메뉴가 입력 이벤트를 수신할 수 있는 유일한 방법입니다. AFAIK 이것은 꽤 깊은 X11 설계 문제이므로 쉽게 고칠 수 없을 것 같습니다. 그래도 자유롭게 업스트림으로 가져가세요.

--8<--

좋아요 정보 감사합니다. 나는 이것을 업스트림에 보고했습니다.

http://bugs.freedesktop.org/show_bug.cgi?id=19946


툴킷에서 자주 수행하는 작업이지만 액세스 키가 있는 메뉴를 구현하기 위해 키보드 잡기가 실제로 필요한지 여부는 확실하지 않습니다.

메뉴창에 이벤트를 전달한다는 측면에서 편리할 수 있습니다.

그러나 대부분의 경우 기본 애플리케이션 창에 포커스가 있으므로 애플리케이션은 그곳에서 키보드 이벤트를 수신할 수 있습니다.

어떤 이유로 클라이언트가 기본 창에서 일반적으로 포커스를 받지 못하는 경우 키보드 잡기를 훔치는 대신 키보드 포커스(아마도 전역 활성 입력 모델에서)를 협상해야 하는지 알고 싶습니다. 클라이언트가 Grab을 해제합니다.


포인터 잡기는 화면의 다른 곳을 클릭하여 메뉴를 "클릭"하는 데 도움이 될 수 있지만 실제로 클릭한 요소를 트리거하지는 않습니다. 그러나 Wikipedia에서는 키보드를 잡지 않고도 포인터를 잡는 것이 가능하다고 말합니다. /

관련 정보