Evgenii Legotckoi
Evgenii Legotckoi24 лютого 2016 р. 12:56

XGrabKey

Синтаксис

XGrabKey(display, keycode, modifiers, grab_window, owner_events, pointer_mode, keyboard_mode)
      Display *    display;
      int          keycode;
      unsigned int modifiers;
      Window       grab_window;
      Bool         owner_events;
      int          pointer_mode, keyboard_mode;

Аргументи

display         // Указывает соединение с X Сервером
keycode         // Указывает код клавиши (KeyCode) или любой код (AnyKey)
modifiers       // Указывает установку конкретных масок модификаторов 
                // или использование любых модификаторов (AnyModifier). 
                // Маска является поразрядным ИЛИ для проверки битов маски.
grab_window     // Указывает захватываемое окно
owner_events    // Указывает значение Boolean, которое указывает на события клавиатуры, 
                // будут ли представлены как обычно.
pointer_mode    // Описывает дальнейший способ обработки событий указателя мыши.
                // Вы можете передавать GrabModeSync или GrabModeAsync.
keyboard_mode   // Описывает дальнейший способ обработки событий клавиатуры. 
                // Вы можете передавать GrabModeSync or GrabModeAsync.

Опис

Функція XGrabKey() встановлює пасивне захоплення клавіатури. Надалі клавіатура може захоплюватися активно (за допомогою XGrabKeyboard() ), час останнього захоплення клавіатури встановлюється в момент, коли клавіша натиснута (тоді передається подія KeyPress ), а викликається подія KeyPress , якщо виконані всі умови (тобто є true):

  • Клавіатура не захоплена, а вказана клавіша (яка може бути сама по собі модифікатором) є логічно натиснутою, коли також натиснуті інші цільові клавіші, і при цьому не натиснуті інші модифікатори, які не закладені в .
  • Захоплюване вікно є предком або є вікном фокусування захоплюючого поєднання клавіш, або вікно фокусування є нащадком вікна фокусування і містить покажчик на предка
  • Пасивне захоплення тієї ж комбінації клавіш не існує у будь-якого предка захоплюваного вікна.

Інтерпретація наступних аргументів для XGrabKeyboard() . Активне захоплення завершується автоматично, коли логічний стан клавіатури описується відпуск клавіші (незалежно від логічного стану клавіш модифікаторів).

Примітка. Логічний стан пристрою (як видно за клієнтськими програмами) може запізнюватися в порівнянні з фізичним станом, якщо обробка події пристрою заморозилася. Тобто може відбуватися налагодження програми або навіть заморожування сервера X11. Зокрема це може спостерігатися при запуску режиму захоплення як GrabModeSync , якщо не реалізовано коректне оброблення подій натискання клавіш.

Значення модифікатора AnyModifier для аргументу modifiers є еквівалентом дозволу обробки всіх можливих комбінацій клавіш модифікаторів (включаючи комбінації без модифікаторів).

Варто відзначити, що в X11 модифікаторами є не тільки клавіші Ctrl, Alt, Shift, Win(Meta), як у ОС Windows , а й клавіші ScrollLock, CapsLock, NumLock. Тому при реєстрації поєднань гарячих клавіш необхідно враховувати поєднання з цими клавішами. Тобто, фактично замість одного поєднання Сtrl+Alt+R, необхідно зареєструвати ще 7 сполучень із клавішами ScrollLock, CapsLock та NumLock, щоб поєднання коректно працювало, якщо, звичайно, Вам спеціально не потрібно іншої логіки поведінки програми у поєднанні з цим модифікаторами.

Значення AnyKey для аргументу keycode еквівалентне рішенню обробки всіх можливих клавіш (кодів клавіш). Однак, вказівка keycode має бути в межах між min_keycode та max_keycode. Інакше буде отримано помилку BadValues.

Якщо якась клієнтська програма вже використовує певне поєднання клавіш за допомогою XGrabKey() на певному цільовому вікні, буде повернена помилка BadAccess . При використанні модифікатора AnyModifier або AnyKey запит на деякі клавіші буде помилковим і в результаті BadAccess захоплення не виконуватиметься через конфлікт із комбінацією клавіш, захопленою іншою програмою.

Зокрема, через таку поведінку XGrabKey() можна деякий час дивуватися про те, чому не спрацьовує захоплення клавіші PrintScreen під тим самим дистрибутивом Ubuntu. А причина в тому, що дана клавіша вже захоплена програмою для створення скріншотів, яка йде в поставці Ubuntu за замовчуванням і вже захоплює цю клавішу.

XGrabKey() може генерувати наступні помилки BadAccess , BadValue та BadWindow .

Діагностика

BadAccess - клієнтська програма спробувала звільнити запис колірної карти, які вже звільнено.

BadAccess - клієнтська програма спробувала зберегти запис колірної карти, яка в режимі read-only.

BadValue - деякі числові значення виходять за межі діапазону запиту. Якщо певний діапазон не вказано для аргументу, повний спектр визначається типом аргументу, що приймається. Будь-який аргумент визначається як набір альтернатив який може викликати цю помилку.

BadWindow - Значення для аргументу Вікна (Window) немає імені певного Вікна (Window). Невірний ідентифікатор вікна.

див. також XUngrabKey()

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 01:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 01:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 11:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 08:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 07:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 11:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 15:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 листопада 2024 р. 06:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject04 червня 2022 р. 03:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9Anonim25 жовтня 2024 р. 09:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Слідкуйте за нами в соціальних мережах