From 0fc9d47fb407a65fd08e3095fface42eb93ac914 Mon Sep 17 00:00:00 2001 From: okan Date: Thu, 7 Dec 2017 16:25:33 +0000 Subject: Original idea from Dimitris Papastamos to move windows to corners a while ago; re-proposed by Julien Steinhauser with an updated diff. Apparently this was in the original calmnwm. However, expand the original idea and let clients 'snap' to edges instead, neatly allowing key bindings that snap to adjacent edges (i.e. corners) as well. No default bindings assigned. --- kbfunc.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'kbfunc.c') diff --git a/kbfunc.c b/kbfunc.c index 086e753..ad7145b 100644 --- a/kbfunc.c +++ b/kbfunc.c @@ -286,6 +286,42 @@ kbfunc_client_resize_mb(void *ctx, struct cargs *cargs) client_ptr_inbound(cc, 0); } +void +kbfunc_client_snap(void *ctx, struct cargs *cargs) +{ + struct client_ctx *cc = ctx; + struct screen_ctx *sc = cc->sc; + struct geom area; + int flags; + + area = screen_area(sc, + cc->geom.x + cc->geom.w / 2, + cc->geom.y + cc->geom.h / 2, CWM_GAP); + + flags = cargs->flag; + while (flags) { + if (flags & CWM_UP) { + cc->geom.y = area.y; + flags &= ~CWM_UP; + } + if (flags & CWM_LEFT) { + cc->geom.x = area.x; + flags &= ~CWM_LEFT; + } + if (flags & CWM_RIGHT) { + cc->geom.x = area.x + area.w - cc->geom.w - + (cc->bwidth * 2); + flags &= ~CWM_RIGHT; + } + if (flags & CWM_DOWN) { + cc->geom.y = area.y + area.h - cc->geom.h - + (cc->bwidth * 2); + flags &= ~CWM_DOWN; + } + } + client_move(cc); +} + void kbfunc_client_delete(void *ctx, struct cargs *cargs) { -- cgit 1.4.1