ob_debug("Window type: %d\n", self->type);
ob_debug("Window group: 0x%x\n", self->group?self->group->leader:0);
- ob_debug("Window name: %s class: %s\n", self->name, self->class);
+ ob_debug("Window name: %s class: %s role: %s\n", self->name, self->class, self->role);
/* per-app settings override stuff from client_get_all, and return the
settings for other uses too. the returned settings is a shallow copy,
return NULL;
}
+static gboolean client_validate_unmap(ObClient *self, int n)
+{
+ XEvent e;
+ gboolean ret = TRUE;
+
+ if (XCheckTypedWindowEvent(ob_display, self->window, UnmapNotify, &e)) {
+ if (n < self->ignore_unmaps) // ignore this one, but look for more
+ ret = client_validate_unmap(self, n+1);
+ else
+ ret = FALSE; // the window is going to become unmanaged
+
+ /* put them back on the event stack so they end up in the same order */
+ XPutBackEvent(ob_display, &e);
+ }
+
+ return ret;
+}
+
gboolean client_validate(ObClient *self)
{
XEvent e;
XSync(ob_display, FALSE); /* get all events on the server */
- if (XCheckTypedWindowEvent(ob_display, self->window, DestroyNotify, &e) ||
- XCheckTypedWindowEvent(ob_display, self->window, UnmapNotify, &e)) {
+ if (XCheckTypedWindowEvent(ob_display, self->window, DestroyNotify, &e)) {
XPutBackEvent(ob_display, &e);
return FALSE;
}
+ if (!client_validate_unmap(self, 0))
+ return FALSE;
+
return TRUE;
}