Layout/Client: Fix arrange with split & transfert
This commit is contained in:
parent
6a93c6fa35
commit
f75c75645d
12
src/client.c
12
src/client.c
@ -147,7 +147,7 @@ client_get_next_with_direction(Client *bc, Position pos)
|
||||
{ 0, -1 }, { 0, 1 } /* Top, Bottom */
|
||||
};
|
||||
|
||||
if(!bc || ishide(bc, selscreen))
|
||||
if(!bc)
|
||||
return NULL;
|
||||
|
||||
/* Start place of pointer for faster scanning */
|
||||
@ -519,12 +519,13 @@ client_urgent(Client *c, Bool u)
|
||||
{
|
||||
Client *cc;
|
||||
|
||||
if(x < 0 || x > spgeo[selscreen].x + spgeo[selscreen].width
|
||||
|| y < 0 || y > spgeo[selscreen].y + spgeo[selscreen].height)
|
||||
if(x < 0 || x > spgeo[c->screen].x + spgeo[c->screen].width
|
||||
|| y < 0 || y > spgeo[c->screen].y + spgeo[c->screen].height)
|
||||
return NULL;
|
||||
|
||||
for(cc = clients; cc; cc = cc->next)
|
||||
if(!ishide(cc, selscreen) && (cc->flags & TileFlag) && cc != c)
|
||||
if(cc != c && cc->screen == c->screen && cc->tag == c->tag
|
||||
&& (cc->flags & TileFlag))
|
||||
if(cc->frame_geo.x < x && cc->frame_geo.x + cc->frame_geo.width > x
|
||||
&& cc->frame_geo.y < y && cc->frame_geo.y + cc->frame_geo.height > y)
|
||||
return cc;
|
||||
@ -1038,6 +1039,7 @@ client_maximize(Client *c)
|
||||
if(!c || c->flags & FSSFlag)
|
||||
return;
|
||||
|
||||
cfactor_clean(c);
|
||||
c->screen = screen_get_with_geo(c->geo.x, c->geo.y);
|
||||
|
||||
c->geo.x = sgeo[c->screen].x;
|
||||
@ -1045,7 +1047,7 @@ client_maximize(Client *c)
|
||||
c->geo.width = sgeo[c->screen].width - BORDH * 2;
|
||||
c->geo.height = sgeo[c->screen].height - BORDH;
|
||||
|
||||
client_moveresize(c, c->geo, tags[c->screen][c->tag].resizehint);
|
||||
client_moveresize(c, (c->pgeo = c->geo), tags[c->screen][c->tag].resizehint);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
17
src/split.c
17
src/split.c
@ -104,8 +104,9 @@ split_arrange_closed(Client *ghost)
|
||||
XRectangle cgeo;
|
||||
Client *c, *cc;
|
||||
int screen = ghost->screen;
|
||||
int tag = (ghost->tag ? ghost->tag : seltag[screen]);
|
||||
|
||||
if(tags[screen][seltag[screen]].layout.func != split)
|
||||
if(tags[screen][tag].layout.func != split)
|
||||
return;
|
||||
|
||||
/* Use ghost client properties to fix holes in tile
|
||||
@ -133,7 +134,7 @@ split_arrange_closed(Client *ghost)
|
||||
{
|
||||
_split_arrange_size(ghost->wrgeo, &c->wrgeo, p);
|
||||
cfactor_clean(c);
|
||||
client_moveresize(c, (c->pgeo = c->wrgeo), tags[screen][c->tag].resizehint);
|
||||
client_moveresize(c, (c->pgeo = c->wrgeo), tags[screen][tag].resizehint);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -249,7 +250,7 @@ split_client_integrate(Client *c, Client *sc, int screen, int tag)
|
||||
/* Looking for first client on wanted tag */
|
||||
for(b = False, sc = clients; sc; sc = sc->next)
|
||||
if(sc->screen == screen && sc->tag == tag
|
||||
&& (c->flags & TileFlag))
|
||||
&& (c->flags & (TileFlag | SplitFlag)))
|
||||
{
|
||||
b = True;
|
||||
break;
|
||||
@ -258,16 +259,12 @@ split_client_integrate(Client *c, Client *sc, int screen, int tag)
|
||||
/* No client on wanted tag to integrate */
|
||||
if(!b)
|
||||
{
|
||||
g.x = sgeo[c->screen].x;
|
||||
g.y = sgeo[c->screen].y ;
|
||||
g.width = sgeo[c->screen].width - BORDH * 2;
|
||||
g.height = sgeo[c->screen].height - BORDH;
|
||||
client_maximize(c);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(b)
|
||||
g = split_client(sc, (sc->frame_geo.height < sc->frame_geo.width));
|
||||
|
||||
g = split_client(sc, (sc->frame_geo.height < sc->frame_geo.width));
|
||||
split_client_fill(c, g);
|
||||
|
||||
return;
|
||||
|
||||
10
src/tag.c
10
src/tag.c
@ -133,6 +133,8 @@ tag_set(int tag)
|
||||
void
|
||||
tag_transfert(Client *c, int tag)
|
||||
{
|
||||
int s;
|
||||
|
||||
screen_get_sel();
|
||||
|
||||
CHECK(c);
|
||||
@ -140,9 +142,12 @@ tag_transfert(Client *c, int tag)
|
||||
if(tag <= 0)
|
||||
tag = 1;
|
||||
|
||||
if(tag > conf.ntag[selscreen])
|
||||
if(tag > conf.ntag[selscreen]
|
||||
|| (c->screen == selscreen && c->tag == tag))
|
||||
return;
|
||||
|
||||
s = c->screen;
|
||||
|
||||
if(c->flags & SplitFlag)
|
||||
{
|
||||
split_arrange_closed(c);
|
||||
@ -156,6 +161,9 @@ tag_transfert(Client *c, int tag)
|
||||
|
||||
arrange(c->screen, True);
|
||||
|
||||
if(s != c->screen)
|
||||
arrange(s, True);
|
||||
|
||||
client_focus_next(c);
|
||||
|
||||
client_update_attributes(c);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user