splash screens get "transient" set to TRUE by
the place_client call
*/
- transient ||
- (!(self->positioned & USPosition) &&
- client_normal(self) &&
- !self->session));
+ ob_state() == OB_STATE_RUNNING &&
+ (transient ||
+ (!(self->positioned & USPosition) &&
+ client_normal(self) &&
+ !self->session)));
}
/* if the window isn't user-sized, then make it fit inside
splash screens get "transient" set to TRUE by
the place_client call
*/
- if (transient ||
- (!(self->sized & USSize) &&
- client_normal(self) &&
- !self->session))
+ if (ob_state() == OB_STATE_RUNNING &&
+ (transient ||
+ (!(self->sized & USSize) &&
+ client_normal(self) &&
+ !self->session)))
{
/* make a copy to modify */
Rect a = *screen_area_monitor(self->desktop, client_monitor(self));
{
guint j;
GSList *it;
+ gulong ignore_start;
ob_debug("Unmanaging window: 0x%x plate 0x%x (%s) (%s)\n",
self->window, self->frame->window,
don't generate more events */
XSelectInput(ob_display, self->window, NoEventMask);
+ /* ignore enter events from the unmap so it doesnt mess with the focus */
+ if (!client_focused(self) || !config_focus_under_mouse)
+ ignore_start = event_start_ignore_all_enters();
+
frame_hide(self->frame);
/* flush to send the hide to the server quickly */
XFlush(ob_display);
- if (!client_focused(self) || !config_focus_under_mouse) {
- /* ignore enter events from the unmap so it doesnt mess with the
- focus */
- event_ignore_all_queued_enters();
- }
+ if (!client_focused(self) || !config_focus_under_mouse)
+ event_end_ignore_all_enters(ignore_start);
mouse_grab_for_client(self, FALSE);
for (it = self->group->members; it; it = g_slist_next(it)) {
ObClient *c = it->data;
+
+ if (c->desktop == DESKTOP_ALL) continue;
+
if (c != self) {
if (first) {
all = c->desktop;
self = client_focus_target(self);
if (!client_can_focus(self)) {
- if (!self->frame->visible) {
- /* update the focus lists */
- focus_order_to_top(self);
- }
ob_debug_type(OB_DEBUG_FOCUS,
"Client %s can't be focused\n", self->title);
return FALSE;