dispvm: close only visible windows during DispVM preparation

Closing some invisible window can cause e.g. Firefox crash. Send the
message to visible windows and others should be cleaned up by the
application.
This commit is contained in:
Marek Marczykowski-Górecki 2015-03-04 01:48:11 +01:00
parent 06a0d30d50
commit 5c4e88a765

View File

@ -15,15 +15,26 @@ int close_window(Display *d, XID window) {
return XSendEvent(ev.display, ev.window, True, 0, (XEvent *) & ev); 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 main(int argc, char **argv) {
int i; int i;
Display *d; Display *d;
XID w;
d = XOpenDisplay(NULL); d = XOpenDisplay(NULL);
if (!d) if (!d)
exit(1); exit(1);
for (i=1; i<argc; i++) { for (i=1; i<argc; i++) {
close_window(d, strtoul(argv[i], NULL, 0)); w = strtoul(argv[i], NULL, 0);
if (is_window_visible(d, w))
close_window(d, w);
} }
XSync(d, False); XSync(d, False);
XCloseDisplay(d); XCloseDisplay(d);