XErrorEvent结构字段的含义

时间:2019-04-08 12:19:16

标签: c xlib

我目前在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;

我想知道typerequest_codeminor_code字段的含义。 There is a book on C language interface for the X window system,但我在此字段中找不到任何内容。

1 个答案:

答案 0 :(得分:1)

type将无类型的内存指针标识为指向XErrorEvent的指针-其值始终为X_Error

request_codea protocol request of the procedure that failed, as defined in 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_coderequest_code类似,但扩展名使用。每个扩展名都有自己的request_code,范围为128-255。 minor_code标识由该扩展名定义的特定请求。因此,X11最多支持127个扩展,每个扩展最多可以定义255个请求。 The exact paragraph:

  

为每个扩展名分配了该范围内的单个操作码,也称为   因为它是“主要操作码”。对于该扩展程序提供的每个操作,   通常,第二个字节用作“次要操作码”。   每个扩展名都由扩展名定义。