我是xlib的初學者,我想捕獲窗口內容更改的事件。例如,如果某個地區發生變化。我讀過,我需要使用Xdamage爲,這是我的代碼Xdamage:獲取窗口內容更改的事件
Display* display = XOpenDisplay(NULL);
Window root = DefaultRootWindow(display);
XWindowAttributes attributes = {0};
XGetWindowAttributes(display, root, &attributes);
int width, height;
width = attributes.width;
height = attributes.height;
//XDAMAGE INIT
int damage_event, damage_error, test;
test = XDamageQueryExtension(display, &damage_event, &damage_error);
Damage damage = XDamageCreate(display, root, XDamageReportNonEmpty);
while (true){
XEvent event;
XNextEvent(display,&event);
//HERE I GET EVENT
XDamageSubtract(display,damage,None,None);
}
XCloseDisplay(display);
所以,我有一個工作的例子,我可以得到事件及其type.The類型,我的理解是Xlib的類型 - https://tronche.com/gui/x/xlib/events/types.html。但是我怎麼能從事件中發現窗口已經改變了。根據從https://www.x.org/releases/current/doc/damageproto/damageproto.txt
的area
員將損壞的矩形區域作爲XRectangle文檔
typedef struct {
int type; /* event base */
unsigned long serial;
Bool send_event;
Display *display;
Drawable drawable;
Damage damage;
int level;
Bool more; /* more events will be delivered immediately */
Time timestamp;
XRectangle area;
XRectangle geometry;
} XDamageNotifyEvent;
:
你想檢查'XDamageQueryExtension'的返回值。不保證擴展程序實際加載。 – tofro