मुझे पता है कि यह पोस्ट काफी मर चुका है। और फिर भी, एक्स 11 का दस्तावेज भयानक है, और मुझे किसी भी संबंध में XDamage काम करने में काफी समय लगा। तो यहाँ एक उदाहरण है कि सांत्वना हर बार जड़ X11 खिड़की परिवर्तन, प्रलेखन कहर के पोस्ट में उल्लेख के आधार पर करने के लिए एक लाइन प्रिंट होगा है, और शिथिल इस link के आधार पर:
#include <stdio.h>
#include <stdlib.h>
#include <X11/extensions/Xdamage.h>
#include <X11/Xlib.h>
#include <signal.h>
int endnow = 0;
void cleanup(int SIGNUM){
endnow = 1;
}
int main(){
Display *display;
display = XOpenDisplay(":0");
if(!display){
perror("could not open display");
exit(1);
}
Window root = DefaultRootWindow(display);
int damage_event, damage_error, test;
//this line is necessary to initialize things
test = XDamageQueryExtension(display, &damage_event, &damage_error);
/*The "event" output is apparently the integer that appears in the
Xevent.type field when XNextEvent returns an XDamage event */
printf("test = %d, event = %d, error = %d\n",test,damage_event, damage_error);
//This is the handler for the XDamage interface
//See the XDamage documentation for more damage report levels
// http://www.freedesktop.org/wiki/Software/XDamage
Damage damage = XDamageCreate(display, root, XDamageReportNonEmpty);
signal(SIGINT,cleanup);
// XCloseDisplay(display);
while(endnow == 0){
XEvent event;
XNextEvent(display,&event);
printf("event.type = %d\n",event.type);
//this line resets the XDamage handler
XDamageSubtract(display,damage,None,None);
}
XCloseDisplay(display);
printf("done\n");
exit(0);
}
स्वाभाविक रूप से, अगर आप इस चलाने एक ही स्क्रीन पर एक कंसोल से आपके प्रदर्शन :0
के रूप में, प्रत्येक पंक्ति जो इसे प्रिंट करती है, वह स्वयं को सक्रिय करेगी, और थोड़ी अस्थिर हो जाएगी। लेकिन यह एक अच्छा प्रदर्शन है यदि आप इसे किसी अन्य कंप्यूटर पर एसएसएच टर्मिनल से चलाते हैं।