X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=266eea434c8782feb10be076b6ca42fa08513c95;hb=54ccb6a5428fbf33bf1a97d0f60f6623f0195fa3;hp=c4b106beaef6b2232041d08bcb2e005e8587bdb3;hpb=6538a5ccb2199d518b854baa6d790387b448484e;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index c4b106be..266eea43 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -183,9 +183,6 @@ void client_manage_all() } } XFree(children); - - if (config_focus_new) - focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS); } void client_manage(Window window) @@ -280,7 +277,10 @@ void client_manage(Window window) client_restore_session_stacking(self); /* focus the new window? */ - if (ob_state() != OB_STATE_STARTING && config_focus_new && + if (ob_state() != OB_STATE_STARTING && + (config_focus_new || (self->transient_for && + self->transient_for != TRAN_GROUP && + client_focused(self->transient_for))) && /* note the check against Type_Normal/Dialog, not client_normal(self), which would also include other types. in this case we want more strict rules for focus */ @@ -2074,7 +2074,14 @@ static void client_iconify_recursive(ObClient *self, if (iconic) { if (self->functions & OB_CLIENT_FUNC_ICONIFY) { + long old; + + old = self->wmstate; self->wmstate = IconicState; + if (old != self->wmstate) + PROP_MSG(self->window, kde_wm_change_state, + self->wmstate, 1, 0, 0); + self->ignore_unmaps++; /* we unmap the client itself so that we can get MapRequest events, and because the ICCCM tells us to! */ @@ -2088,9 +2095,17 @@ static void client_iconify_recursive(ObClient *self, changed = TRUE; } } else { + long old; + if (curdesk) client_set_desktop(self, screen_desktop, FALSE); + + old = self->wmstate; self->wmstate = self->shaded ? IconicState : NormalState; + if (old != self->wmstate) + PROP_MSG(self->window, kde_wm_change_state, + self->wmstate, 1, 0, 0); + XMapWindow(ob_display, self->window); /* this puts it after the current focused window */ @@ -2239,8 +2254,16 @@ void client_shade(ObClient *self, gboolean shade) self->shaded == shade) return; /* already done */ /* when we're iconic, don't change the wmstate */ - if (!self->iconic) - self->wmstate = shade ? IconicState : NormalState; + if (!self->iconic) { + long old; + + old = self->wmstate; + self->wmstate = shade ? IconicState : NormalState; + if (old != self->wmstate) + PROP_MSG(self->window, kde_wm_change_state, + self->wmstate, 1, 0, 0); + } + self->shaded = shade; client_change_state(self); /* resize the frame to just the titlebar */ @@ -3011,9 +3034,8 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) case OB_DIRECTION_NORTHWEST: case OB_DIRECTION_SOUTHWEST: /* not implemented */ - break; default: - g_assert_not_reached(); + g_assert_not_reached(); } return dest; }