Несоответствие протокола SSH

Этот эффект вызван ляпом в X Windows. Когда я запускаю рабочий стол Wayland в Fedora 25, даже приложения X внутри XWayland больше не имеют такого эффекта. Ошибка KDE, связанная с этим вопросом, была закрыта в пользу использования Wayland.

Технически, используется ли захват или нет, зависит от используемого инструментария GUI / виджетов (или приложения, если оно обращается к X напрямую). Многие наборы инструментов GUI используют захват X, когда открыто меню. Однако причина этого - и как Firefox, по-видимому, избегает этого - кажется довольно неясной.

Еще одно использование X-захватов - игры и вложенные рабочие столы (например, удаленный доступ и виртуальные машины). Когда этот ответ был первоначально написан, Wayland не поддерживал никакого метода для получения необходимых событий клавиатуры. [1][2]. Поэтому было неясно, как именно будут обрабатываться захваты XWayland, т.е. начнут ли захваты XWayland снова оказывать описанный вами специфический эффект. Тестирование на Fedora 27 показывает, что нет.


StackOverflow предполагает, что использование захвата ввода вместо установки фокуса ввода в дочернее окно может быть единственным способом предотвратить перерисовку менеджерами окон заголовка главного окна в "неактивный" цвет.

Самые "официальные" источники, которые мне удалось найти об этом, - это сообщения об ошибках. Очевидно, что использование X-захватов для меню было давней проблемой. Если вы дочитаете до конца, то увидите предложение, которое позволяет обойти вышеупомянутую проблему оконного менеджера. Возможно, именно так поступил Firefox.

(Думая об этом, я не уверен, что глобальные сочетания клавиш были столь значимы в оригинальных средах рабочего стола. Я знаю, что Alt+Tab пришел из CDE, но нет очевидной причины использовать Alt+Tab, когда открыто меню).


Всплывающие меню Qt захватывают клавиатуру и указатель, не позволяя пользователю использовать системные горячие клавиши (например, сделать скриншот)

Механизм, предоставляемый X11 для реализации всплывающих меню, - это глобальный захват клавиатуры и мыши. Все современные приложения и наборы инструментов используют этот механизм, включая Qt. К сожалению, я не вижу способа изменить это без очень серьезных поведенческих изменений (которые также повредят пользовательскому опыту).


экран не блокируется, когда открыто какое-то меню

на это ответил Michel в http://bugs.debian.org/514036


--8

Так и есть; это единственный способ, которым меню может получать события ввода, пока указатель находится за его пределами. указатель находится за его пределами. AFAIK это довольно глубокая проблема дизайна X11, поэтому я боюсь, что это не может быть легко исправлено. Не стесняйтесь поднять этот вопрос вверх по течению, хотя.

--8

Хорошо. Спасибо за эту информацию. Я сообщил об этом в Upstream:

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


Я не уверен, что для реализации меню с помощью клавиш доступа обязательно нужен захват клавиатуры, хотя именно так часто поступают наборы инструментов.

Это может быть удобно с той точки зрения, что события направляются в окно меню.

Но в большинстве случаев основное окно приложения будет иметь фокус, и поэтому приложение может получать события клавиатуры там.

Если по какой-то причине клиент обычно не получает фокус в главном окне, интересно, должен ли он вести переговоры о фокусе клавиатуры (возможно, в рамках модели Globally Active Input), а не красть захват клавиатуры, который нельзя отменить, пока клиент не отпустит его.


Захват указателя может быть полезен, чтобы иметь возможность "выйти" из меню, щелкнув в любом другом месте экрана, но без фактического запуска элемента, на котором вы щелкнули. Однако в Википедии говорится, что можно захватить указатель, не захватывая клавиатуру./

1
03.12.2015, 11:39
0 ответов

Теги

Похожие вопросы