core-agent-linux/misc/close-window.c

43 lines
939 B
C
Raw Normal View History

#include <X11/Xutil.h>
#include <X11/Xlib.h>
#include <string.h>
#include <stdlib.h>
int close_window(Display *d, XID window) {
XClientMessageEvent ev;
memset(&ev, 0, sizeof(ev));
ev.type = ClientMessage;
ev.display = d;
ev.window = window;
ev.format = 32;
ev.message_type = XInternAtom(d, "WM_PROTOCOLS", False);
ev.data.l[0] = XInternAtom(d, "WM_DELETE_WINDOW", False);;
return XSendEvent(ev.display, ev.window, True, 0, (XEvent *) & ev);
}
int is_window_visible(Display *d, XID window) {
XWindowAttributes xwa;
if (!XGetWindowAttributes(d, window, &xwa))
return 0;
return xwa.map_state == IsViewable;
}
int main(int argc, char **argv) {
int i;
Display *d;
XID w;
d = XOpenDisplay(NULL);
if (!d)
exit(1);
for (i=1; i<argc; i++) {
w = strtoul(argv[i], NULL, 0);
if (is_window_visible(d, w))
close_window(d, w);
}
XSync(d, False);
XCloseDisplay(d);
return 0;
}