2.3.1.5. Задание параметров клавиатуры.

    Сервер имеет ряд атрибутов, воздействующих на обработку сигналов клавиатуры. Получить их можно с помощью функции XGetKeyboardControl( ). Она возвращает указанные параметры в переменной, имеющей тип XKeyboardState, определенный следующим образом:

typedef struct {
  int key_click_percent;
  int bell_percent;
  unsigned int bell_pitch, bell_duration;
  unsigned long led_mask;
  int global_auto_repeat;
  char auto_repeats[32];
} XKeyboardsState;

    Поле key_click_percent указывает, имеет ли нажатие клавиши звуковое сопровождение; значения поля задаются в %; 0 - звукового сопровождения нет, 100 - громкий звук. Поле bell_percent, bell_pitch и bell_duration указывают, какую силу, частоту и продолжительность имеет предупреждающий сигнал, возникающий при нажатии некоторых клавиш.

    Некоторые клавиатуры используют для клавиш-модификаторов световую подсветку. Поле led_mask есть комбинация флагов, показывающая, для каких клавиш эта подсветка имеет место.

    Когда клавиша нажата и удерживается, то сервер может автоматически имитировать ее повторное нажатие. Поле global_auto_repeat определяет, делает это сервер или нет. Особенностью X является то, что автоматическую генерацию событий о нажатии можно разрешать или запрещать для отдельных клавиш. Массив auto_repeats содержит информацию о том, для каких клавиш автогенерация имеет место, а для каких нет. Каждый бит массива соответствует клавише с определенным физическим кодом. Если бит установлен, то генерация разрешена, если сброшен, то запрещена. Каждый байт N массива содержит биты для клавиш с кодами от 8N до 8N+7.

    Изменить параметры клавиатуры можно с помощью XChangeKeyboardControl().

    Желаемые установки передаются через переменную, которая указывает на .структуру типа XKeyboardControl, определяемую следующим образом:

typedef struct {
  int key_click_percnet;
  int bell_percent;
  int bell_pitch;
  int bell_duration;
  int led;
  int led_mode;
  int key;
  int auto_repeat_mode;
} XKeyboardControl;

    Первые четыре поля совпадают с аналогичными полями структуры XKeyboardState. Поля led и led_mode позволяют сообщить серверу, какие из клавиш-модификаторов должны сопровождаться подсветкой. Если поле led не задано, и led_mode равно LedModeOn, то изменяется состояние всех клавиш, для которых поддерживается световое сопровождение. Если led_mode равно LedModeOff, то состояние клавиш не меняется. Если поле led задано, то это есть комбинация флагов, указывающих, для каких клавиш подсветку включить (led_mode равно LedModeOn) или выключить (led_mode равно LedModeOff).

    Поля key и auto_repeat_mode определяют, для какой клавиши (клавиш) включить (auto_repeat_mode равно AutoRepeatModeOn) или выключить (auto_repeat_mode равно AutoRepeatModeOff) режим автоматического повтора. Если поле key задано, то автоматический повтор включается или выключается только для клавиши с кодом key.