mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
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.
This commit is contained in:
36
kbfunc.c
36
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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user