X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fclient.c;h=a1deded5a06fcb790e2a7bdc7d3a4d41ef42cd1d;hb=c0c06e3828981cacc96b27a87d7803f603241d15;hp=1c3152c84053a8831e32c312fa03d7759d398d88;hpb=c1f0f7c40fbbc33157d59b5e3db58a0801af5008;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 1c3152c8..a1deded5 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -304,7 +304,8 @@ void client_manage(Window window) dispatch_client(Event_Client_New, self, 0, 0); /* make sure the window is visible */ - client_move_onscreen(self, TRUE); + if (ob_state() == OB_STATE_RUNNING) + client_move_onscreen(self, TRUE); screen_update_areas(); @@ -2532,16 +2533,19 @@ void client_unfocus(ObClient *self) focus_fallback(OB_FOCUS_FALLBACK_UNFOCUSING); } -void client_activate(ObClient *self) +void client_activate(ObClient *self, gboolean here) { if (client_normal(self) && screen_showing_desktop) screen_show_desktop(FALSE); if (self->iconic) client_iconify(self, FALSE, FALSE); if (self->desktop != DESKTOP_ALL && - self->desktop != screen_desktop) - screen_set_desktop(self->desktop); - else if (!self->frame->visible) + self->desktop != screen_desktop) { + if (here) + client_set_desktop(self, screen_desktop, FALSE); + else + screen_set_desktop(self->desktop); + } else if (!self->frame->visible) /* if its not visible for other reasons, then don't mess with it */ return; @@ -2795,11 +2799,11 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) his_edge_end = cur->frame->area.x + cur->frame->area.width; his_offset = cur->frame->area.y + cur->frame->area.height; - if(his_offset + c->size_inc.height > my_offset) + if(his_offset + 1 > my_offset) continue; if(his_offset < dest) - continue; + continue; if(his_edge_start >= my_edge_start && his_edge_start <= my_edge_end) @@ -2836,11 +2840,11 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) his_offset = cur->frame->area.y; - if(his_offset - c->size_inc.height < my_offset) + if(his_offset - 1 < my_offset) continue; if(his_offset > dest) - continue; + continue; if(his_edge_start >= my_edge_start && his_edge_start <= my_edge_end) @@ -2876,11 +2880,11 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) his_edge_end = cur->frame->area.y + cur->frame->area.height; his_offset = cur->frame->area.x + cur->frame->area.width; - if(his_offset + c->size_inc.width > my_offset) + if(his_offset + 1 > my_offset) continue; if(his_offset < dest) - continue; + continue; if(his_edge_start >= my_edge_start && his_edge_start <= my_edge_end) @@ -2917,11 +2921,11 @@ int client_directional_edge_search(ObClient *c, ObDirection dir) his_edge_end = cur->frame->area.y + cur->frame->area.height; his_offset = cur->frame->area.x; - if(his_offset - c->size_inc.width < my_offset) + if(his_offset - 1 < my_offset) continue; if(his_offset > dest) - continue; + continue; if(his_edge_start >= my_edge_start && his_edge_start <= my_edge_end)