diff options
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 91 |
1 files changed, 50 insertions, 41 deletions
diff --git a/client.c b/client.c index a18ffcc..a55bd42 100644 --- a/client.c +++ b/client.c @@ -137,7 +137,7 @@ client_new(Window win, struct screen_ctx *sc, int mapped) return (cc); } -int +void client_delete(struct client_ctx *cc) { struct screen_ctx *sc = cc->sc; @@ -189,8 +189,6 @@ client_delete(struct client_ctx *cc) client_freehints(cc); xfree(cc); - - return (0); } void @@ -285,6 +283,8 @@ client_maximize(struct client_ctx *cc) if (cc->flags & CLIENT_MAXIMIZED) { cc->geom = cc->savegeom; + cc->bwidth = Conf.bwidth; + cc->flags &= ~CLIENT_MAXIMIZED; } else { if (!(cc->flags & (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED))) cc->savegeom = cc->geom; @@ -310,7 +310,8 @@ calc: cc->geom.y = y_org + sc->gap.top; cc->geom.height = ymax - (sc->gap.top + sc->gap.bottom); cc->geom.width = xmax - (sc->gap.left + sc->gap.right); - cc->flags |= CLIENT_DOMAXIMIZE; + cc->bwidth = 0; + cc->flags |= CLIENT_MAXIMIZED; } client_resize(cc); @@ -326,7 +327,10 @@ client_vertmaximize(struct client_ctx *cc) return; if (cc->flags & CLIENT_VMAXIMIZED) { - cc->geom = cc->savegeom; + cc->geom.y = cc->savegeom.y; + cc->geom.height = cc->savegeom.height; + cc->bwidth = Conf.bwidth; + cc->flags &= ~CLIENT_VMAXIMIZED; } else { if (!(cc->flags & (CLIENT_MAXIMIZED | CLIENT_HMAXIMIZED))) cc->savegeom = cc->geom; @@ -344,7 +348,7 @@ calc: cc->geom.y = y_org + sc->gap.top; cc->geom.height = ymax - (cc->bwidth * 2) - (sc->gap.top + sc->gap.bottom); - cc->flags |= CLIENT_DOVMAXIMIZE; + cc->flags |= CLIENT_VMAXIMIZED; } client_resize(cc); @@ -360,7 +364,10 @@ client_horizmaximize(struct client_ctx *cc) return; if (cc->flags & CLIENT_HMAXIMIZED) { - cc->geom = cc->savegeom; + cc->geom.x = cc->savegeom.x; + cc->geom.width = cc->savegeom.width; + cc->bwidth = Conf.bwidth; + cc->flags &= ~CLIENT_HMAXIMIZED; } else { if (!(cc->flags & (CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED))) cc->savegeom = cc->geom; @@ -378,7 +385,7 @@ calc: cc->geom.x = x_org + sc->gap.left; cc->geom.width = xmax - (cc->bwidth * 2) - (sc->gap.left + sc->gap.right); - cc->flags |= CLIENT_DOHMAXIMIZE; + cc->flags |= CLIENT_HMAXIMIZED; } client_resize(cc); @@ -387,23 +394,6 @@ calc: void client_resize(struct client_ctx *cc) { - cc->flags &= ~(CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED | - CLIENT_HMAXIMIZED); - - if (cc->flags & CLIENT_DOMAXIMIZE) { - cc->bwidth = 0; - cc->flags &= ~CLIENT_DOMAXIMIZE; - cc->flags |= CLIENT_MAXIMIZED; - } else if (cc->flags & CLIENT_DOVMAXIMIZE) { - cc->flags &= ~CLIENT_DOVMAXIMIZE; - cc->flags |= CLIENT_VMAXIMIZED; - } else if (cc->flags & CLIENT_DOHMAXIMIZE) { - cc->flags &= ~CLIENT_DOHMAXIMIZE; - cc->flags |= CLIENT_HMAXIMIZED; - } else { - cc->bwidth = Conf.bwidth; - } - client_draw_border(cc); XMoveResizeWindow(X_Dpy, cc->win, cc->geom.x, @@ -414,11 +404,6 @@ client_resize(struct client_ctx *cc) void client_move(struct client_ctx *cc) { - if (cc->flags & CLIENT_VMAXIMIZED) - cc->savegeom.x = cc->geom.x; - if (cc->flags & CLIENT_HMAXIMIZED) - cc->savegeom.y = cc->geom.y; - XMoveWindow(X_Dpy, cc->win, cc->geom.x, cc->geom.y); xu_configure(cc); } @@ -504,7 +489,7 @@ client_draw_border(struct client_ctx *cc) pixel = sc->color[CWM_COLOR_BORDER_UNGROUP].pixel; break; default: - pixel = sc->color[CWM_COLOR_BORDOR_ACTIVE].pixel; + pixel = sc->color[CWM_COLOR_BORDER_ACTIVE].pixel; break; } else @@ -550,9 +535,8 @@ client_setname(struct client_ctx *cc) char *newname; if (!xu_getstrprop(cc->win, _NET_WM_NAME, &newname)) - xu_getstrprop(cc->win, XA_WM_NAME, &newname); - if (newname == NULL) - newname = emptystring; + if (!xu_getstrprop(cc->win, XA_WM_NAME, &newname)) + newname = emptystring; TAILQ_FOREACH(wn, &cc->nameq, entry) if (strcmp(wn->name, newname) == 0) { @@ -580,11 +564,9 @@ match: xfree(wn); cc->nameqlen--; } - - return; } -struct client_ctx * +void client_cycle(struct screen_ctx *sc, int reverse) { struct client_ctx *oldcc, *newcc; @@ -594,7 +576,7 @@ client_cycle(struct screen_ctx *sc, int reverse) /* If no windows then you cant cycle */ if (TAILQ_EMPTY(&sc->mruq)) - return (NULL); + return; if (oldcc == NULL) oldcc = (reverse ? TAILQ_LAST(&sc->mruq, cycle_entry_q) : @@ -614,7 +596,7 @@ client_cycle(struct screen_ctx *sc, int reverse) /* Is oldcc the only non-hidden window? */ if (newcc == oldcc) { if (again) - return (NULL); /* No windows visible. */ + return; /* No windows visible. */ break; } @@ -624,8 +606,6 @@ client_cycle(struct screen_ctx *sc, int reverse) sc->altpersist = 1; client_ptrsave(oldcc); client_ptrwarp(newcc); - - return (newcc); } static struct client_ctx * @@ -862,3 +842,32 @@ client_inbound(struct client_ctx *cc, int x, int y) return (x < cc->geom.width && x >= 0 && y < cc->geom.height && y >= 0); } + +int +client_snapcalc(int n, int dn, int nmax, int bwidth, int snapdist) +{ + int n0, n1, s0, s1; + + s0 = s1 = 0; + n0 = n; + n1 = n + dn + (bwidth * 2); + + if (abs(n0) <= snapdist) + s0 = -n0; + + if (nmax - snapdist <= n1 && n1 <= nmax + snapdist) + s1 = nmax - n1; + + /* possible to snap in both directions */ + if (s0 != 0 && s1 != 0) + if (abs(s0) < abs(s1)) + return s0; + else + return s1; + else if (s0 != 0) + return s0; + else if (s1 != 0) + return s1; + else + return 0; +} |