Значение поля структуры XErrorEvent - PullRequest
0 голосов
/ 08 апреля 2019

У меня в настоящее время есть некоторые проблемы с Xlib и CEF, и мне нужно исследовать XErrorEvent, который отправляется функции, зарегистрированной с XSetErrorHandler.

typedef struct {
    int type;
    Display *display;   /* Display the event was read from */
    XID resourceid;     /* resource id */
    unsigned long serial;   /* serial number of failed request */
    unsigned char error_code;   /* error code of failed request */
    unsigned char request_code; /* Major op-code of failed request */
    unsigned char minor_code;   /* Minor op-code of failed request */
} XErrorEvent;

Мне бы хотелось узнать значение полей type, request_code и minor_code. Существует книга на языке интерфейса C для системы X Window , но я не смог найти ничего об этом поле.

1 Ответ

1 голос
/ 23 апреля 2019

type - это то, что идентифицирует указатель памяти без типа как указатель на XErrorEvent - его значение всегда X_Error.

request_code - это запрос протокола процедуры, которая не удалась, как определено в X11 / Xproto.h , в основном, какой тип запроса вызвал ошибку (строка 2020 и далее):

/* Request codes */

#define X_CreateWindow                  1  
#define X_ChangeWindowAttributes        2   
#define X_GetWindowAttributes           3   
#define X_DestroyWindow                 4
#define X_DestroySubwindows             5   
#define X_ChangeSaveSet                 6
#define X_ReparentWindow                7
#define X_MapWindow                     8
...

minor_code аналогичен request_code за исключением того, что используется расширениями. Каждое расширение получает свой собственный request_code в диапазоне 128-255. minor_code идентифицирует конкретный запрос, определенный этим расширением. Таким образом, X11 поддерживает до 127 расширений, и каждое расширение может определять до 255 запросов. Точный абзац:

Каждому добавочному номеру присваивается один код операции из этого диапазона, также известный так как это «основной код операции». Для каждой операции, предоставляемой этим расширением, как правило, второй байт используется в качестве «младшего кода операции». Незначительные коды операции для каждое расширение определяется расширением.

...