cvsimport
* refs/heads/master: Add 'group-close-[n]' action to close all windows within specified group. simplify screen 'area' usage for initial client placement restore order from before r1.248 (vtile/vtile containment changes). Rename internal functions to delinate between client remove, delete and xproto delete; 'window-close' is now the proper action, but 'window-delete' as an alias will remain until more interesting changes require breaking configs. Limit vtile/htile actions to clients fully within the screen of master client. fix missing includes
This commit is contained in:
65
client.c
65
client.c
@@ -170,7 +170,7 @@ client_find(Window win)
|
||||
}
|
||||
|
||||
void
|
||||
client_delete(struct client_ctx *cc)
|
||||
client_remove(struct client_ctx *cc)
|
||||
{
|
||||
struct screen_ctx *sc = cc->sc;
|
||||
struct winname *wn;
|
||||
@@ -636,7 +636,7 @@ client_msg(struct client_ctx *cc, Atom proto, Time ts)
|
||||
}
|
||||
|
||||
void
|
||||
client_send_delete(struct client_ctx *cc)
|
||||
client_close(struct client_ctx *cc)
|
||||
{
|
||||
if (cc->flags & CLIENT_WM_DELETE_WINDOW)
|
||||
client_msg(cc, cwmh[WM_DELETE_WINDOW], CurrentTime);
|
||||
@@ -754,7 +754,6 @@ static void
|
||||
client_placecalc(struct client_ctx *cc)
|
||||
{
|
||||
struct screen_ctx *sc = cc->sc;
|
||||
int xslack, yslack;
|
||||
|
||||
if (cc->hint.flags & (USPosition | PPosition)) {
|
||||
if (cc->geom.x >= sc->view.w)
|
||||
@@ -772,33 +771,29 @@ client_placecalc(struct client_ctx *cc)
|
||||
cc->geom.y += cc->obwidth * 2;
|
||||
}
|
||||
} else {
|
||||
struct geom area;
|
||||
int xmouse, ymouse;
|
||||
struct geom area;
|
||||
int xmouse, ymouse, xslack, yslack;
|
||||
|
||||
xu_ptr_getpos(sc->rootwin, &xmouse, &ymouse);
|
||||
area = screen_area(sc, xmouse, ymouse, CWM_GAP);
|
||||
area.w += area.x;
|
||||
area.h += area.y;
|
||||
xmouse = MAX(xmouse, area.x) - cc->geom.w / 2;
|
||||
ymouse = MAX(ymouse, area.y) - cc->geom.h / 2;
|
||||
|
||||
xmouse = MAX(xmouse, area.x);
|
||||
ymouse = MAX(ymouse, area.y);
|
||||
xmouse = MAX(MAX(xmouse, area.x) - cc->geom.w / 2, area.x);
|
||||
ymouse = MAX(MAX(ymouse, area.y) - cc->geom.h / 2, area.y);
|
||||
|
||||
xslack = area.w - cc->geom.w - cc->bwidth * 2;
|
||||
yslack = area.h - cc->geom.h - cc->bwidth * 2;
|
||||
xslack = area.x + area.w - cc->geom.w - cc->bwidth * 2;
|
||||
yslack = area.y + area.h - cc->geom.h - cc->bwidth * 2;
|
||||
|
||||
if (xslack >= area.x) {
|
||||
cc->geom.x = MAX(MIN(xmouse, xslack), area.x);
|
||||
} else {
|
||||
cc->geom.x = area.x;
|
||||
cc->geom.w = area.w;
|
||||
cc->geom.w = area.x + area.w;
|
||||
}
|
||||
if (yslack >= area.y) {
|
||||
cc->geom.y = MAX(MIN(ymouse, yslack), area.y);
|
||||
} else {
|
||||
cc->geom.y = area.y;
|
||||
cc->geom.h = area.h;
|
||||
cc->geom.h = area.y + area.h;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -986,19 +981,23 @@ client_htile(struct client_ctx *cc)
|
||||
return;
|
||||
i = n = 0;
|
||||
|
||||
area = screen_area(sc,
|
||||
cc->geom.x + cc->geom.w / 2,
|
||||
cc->geom.y + cc->geom.h / 2, CWM_GAP);
|
||||
|
||||
TAILQ_FOREACH(ci, &gc->clientq, group_entry) {
|
||||
if (ci->flags & CLIENT_HIDDEN ||
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc))
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc) ||
|
||||
ci->geom.x < area.x ||
|
||||
ci->geom.x > (area.x + area.w) ||
|
||||
ci->geom.y < area.y ||
|
||||
ci->geom.y > (area.y + area.h))
|
||||
continue;
|
||||
n++;
|
||||
}
|
||||
if (n == 0)
|
||||
return;
|
||||
|
||||
area = screen_area(sc,
|
||||
cc->geom.x + cc->geom.w / 2,
|
||||
cc->geom.y + cc->geom.h / 2, CWM_GAP);
|
||||
|
||||
if (cc->flags & CLIENT_VMAXIMIZED ||
|
||||
cc->geom.h + (cc->bwidth * 2) >= area.h)
|
||||
return;
|
||||
@@ -1017,7 +1016,11 @@ client_htile(struct client_ctx *cc)
|
||||
h = area.h - mh;
|
||||
TAILQ_FOREACH(ci, &gc->clientq, group_entry) {
|
||||
if (ci->flags & CLIENT_HIDDEN ||
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc))
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc) ||
|
||||
ci->geom.x < area.x ||
|
||||
ci->geom.x > (area.x + area.w) ||
|
||||
ci->geom.y < area.y ||
|
||||
ci->geom.y > (area.y + area.h))
|
||||
continue;
|
||||
ci->bwidth = Conf.bwidth;
|
||||
ci->geom.x = x;
|
||||
@@ -1046,19 +1049,23 @@ client_vtile(struct client_ctx *cc)
|
||||
return;
|
||||
i = n = 0;
|
||||
|
||||
area = screen_area(sc,
|
||||
cc->geom.x + cc->geom.w / 2,
|
||||
cc->geom.y + cc->geom.h / 2, CWM_GAP);
|
||||
|
||||
TAILQ_FOREACH(ci, &gc->clientq, group_entry) {
|
||||
if (ci->flags & CLIENT_HIDDEN ||
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc))
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc) ||
|
||||
ci->geom.x < area.x ||
|
||||
ci->geom.x > (area.x + area.w) ||
|
||||
ci->geom.y < area.y ||
|
||||
ci->geom.y > (area.y + area.h))
|
||||
continue;
|
||||
n++;
|
||||
}
|
||||
if (n == 0)
|
||||
return;
|
||||
|
||||
area = screen_area(sc,
|
||||
cc->geom.x + cc->geom.w / 2,
|
||||
cc->geom.y + cc->geom.h / 2, CWM_GAP);
|
||||
|
||||
if (cc->flags & CLIENT_HMAXIMIZED ||
|
||||
cc->geom.w + (cc->bwidth * 2) >= area.w)
|
||||
return;
|
||||
@@ -1077,7 +1084,11 @@ client_vtile(struct client_ctx *cc)
|
||||
w = area.w - mw;
|
||||
TAILQ_FOREACH(ci, &gc->clientq, group_entry) {
|
||||
if (ci->flags & CLIENT_HIDDEN ||
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc))
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc) ||
|
||||
ci->geom.x < area.x ||
|
||||
ci->geom.x > (area.x + area.w) ||
|
||||
ci->geom.y < area.y ||
|
||||
ci->geom.y > (area.y + area.h))
|
||||
continue;
|
||||
ci->bwidth = Conf.bwidth;
|
||||
ci->geom.x = area.x + mw;
|
||||
|
||||
Reference in New Issue
Block a user