w = client_startup_stack_order[i-1];
c = g_hash_table_lookup(client_map, &w);
- g_message("0x%lx %d", c->window, c->iconic);
+ g_message("0x%lx %d %d", c->window, c->iconic, c->shaded);
if (c) stacking_lower(c);
}
g_free(client_startup_stack_order);
dispatch_client(Event_Client_Unmapped, client, 0, 0);
g_assert(client != NULL);
- /* unfocus the client (dispatchs the focus event) (we're out of the
- transient lists already, so being modal doesn't matter) */
- if (client_focused(client))
- client_unfocus(client);
-
/* give the client its border back */
client_toggle_border(client, TRUE);
else self->shaded = FALSE;
}
if (!(self->functions & Func_Iconify) && self->iconic) {
+ g_message("UNSETTING ICONIC");
if (self->frame) client_iconify(self, FALSE, TRUE);
else self->iconic = FALSE;
}
if (hints->flags & InputHint)
self->can_focus = hints->input;
- /* only do this when starting! */
- if (ob_state == State_Starting && (hints->flags & StateHint))
- self->iconic = hints->initial_state == IconicState;
+ /* only do this when first managing the window *AND* when we aren't
+ starting up! */
+ if (ob_state != State_Starting && self->frame == NULL)
+ if (hints->flags & StateHint)
+ self->iconic = hints->initial_state == IconicState;
if (hints->flags & XUrgencyHint)
ur = TRUE;
}
if (self->can_focus)
- XSetInputFocus(ob_display, self->window, RevertToPointerRoot,
+ /* RevertToNone is used so that windows dont get focused inadvertantly
+ by having the pointer in them, and then FocusIn events go missing */
+ XSetInputFocus(ob_display, self->window, RevertToNone,
event_lasttime);
if (self->focus_notify) {