magnet patch
This commit is contained in:
parent
5b5babb21b
commit
ddc8ef736d
2
README
2
README
|
@ -11,6 +11,8 @@ The patches applied in the patched branch include:
|
||||||
* warp-on-movetogroup.diff - when moving a window to another group with
|
* warp-on-movetogroup.diff - when moving a window to another group with
|
||||||
window-movetogroup-n, the pointer automatically focuses the next available
|
window-movetogroup-n, the pointer automatically focuses the next available
|
||||||
window in the group
|
window in the group
|
||||||
|
* magnet-tiles.diff - taken from https://github.com/mlukow/OpenBSD-patches,
|
||||||
|
refer to that repository to see what it adds
|
||||||
you can clone the linux branch of this repository and apply patches individually
|
you can clone the linux branch of this repository and apply patches individually
|
||||||
if you don't want all the patches the patched branch offers
|
if you don't want all the patches the patched branch offers
|
||||||
|
|
||||||
|
|
1
calmwm.h
1
calmwm.h
|
@ -518,6 +518,7 @@ void kbfunc_ptrmove(void *, struct cargs *);
|
||||||
void kbfunc_client_snap(void *, struct cargs *);
|
void kbfunc_client_snap(void *, struct cargs *);
|
||||||
void kbfunc_client_move(void *, struct cargs *);
|
void kbfunc_client_move(void *, struct cargs *);
|
||||||
void kbfunc_client_resize(void *, struct cargs *);
|
void kbfunc_client_resize(void *, struct cargs *);
|
||||||
|
void kbfunc_client_tile(void *, struct cargs *);
|
||||||
void kbfunc_client_close(void *, struct cargs *);
|
void kbfunc_client_close(void *, struct cargs *);
|
||||||
void kbfunc_client_lower(void *, struct cargs *);
|
void kbfunc_client_lower(void *, struct cargs *);
|
||||||
void kbfunc_client_raise(void *, struct cargs *);
|
void kbfunc_client_raise(void *, struct cargs *);
|
||||||
|
|
9
conf.c
9
conf.c
|
@ -104,6 +104,7 @@ static const struct {
|
||||||
{ FUNC_CC(window-movetogroup-7, client_movetogroup, 7) },
|
{ FUNC_CC(window-movetogroup-7, client_movetogroup, 7) },
|
||||||
{ FUNC_CC(window-movetogroup-8, client_movetogroup, 8) },
|
{ FUNC_CC(window-movetogroup-8, client_movetogroup, 8) },
|
||||||
{ FUNC_CC(window-movetogroup-9, client_movetogroup, 9) },
|
{ FUNC_CC(window-movetogroup-9, client_movetogroup, 9) },
|
||||||
|
{ FUNC_CC(window-center, client_snap, 0) },
|
||||||
{ FUNC_CC(window-snap-up, client_snap, (CWM_UP)) },
|
{ FUNC_CC(window-snap-up, client_snap, (CWM_UP)) },
|
||||||
{ FUNC_CC(window-snap-down, client_snap, (CWM_DOWN)) },
|
{ FUNC_CC(window-snap-down, client_snap, (CWM_DOWN)) },
|
||||||
{ FUNC_CC(window-snap-right, client_snap, (CWM_RIGHT)) },
|
{ FUNC_CC(window-snap-right, client_snap, (CWM_RIGHT)) },
|
||||||
|
@ -130,6 +131,14 @@ static const struct {
|
||||||
{ FUNC_CC(window-resize-down-big, client_resize, (CWM_DOWN_BIG)) },
|
{ FUNC_CC(window-resize-down-big, client_resize, (CWM_DOWN_BIG)) },
|
||||||
{ FUNC_CC(window-resize-right-big, client_resize, (CWM_RIGHT_BIG)) },
|
{ FUNC_CC(window-resize-right-big, client_resize, (CWM_RIGHT_BIG)) },
|
||||||
{ FUNC_CC(window-resize-left-big, client_resize, (CWM_LEFT_BIG)) },
|
{ FUNC_CC(window-resize-left-big, client_resize, (CWM_LEFT_BIG)) },
|
||||||
|
{ FUNC_CC(window-tile-up, client_tile, (CWM_UP)) },
|
||||||
|
{ FUNC_CC(window-tile-down, client_tile, (CWM_DOWN)) },
|
||||||
|
{ FUNC_CC(window-tile-left, client_tile, (CWM_LEFT)) },
|
||||||
|
{ FUNC_CC(window-tile-right, client_tile, (CWM_RIGHT)) },
|
||||||
|
{ FUNC_CC(window-tile-up-left, client_tile, (CWM_UP_LEFT)) },
|
||||||
|
{ FUNC_CC(window-tile-up-right, client_tile, (CWM_UP_RIGHT)) },
|
||||||
|
{ FUNC_CC(window-tile-down-left, client_tile, (CWM_DOWN_LEFT)) },
|
||||||
|
{ FUNC_CC(window-tile-down-right, client_tile, (CWM_DOWN_RIGHT)) },
|
||||||
{ FUNC_CC(window-menu-label, client_menu_label, 0) },
|
{ FUNC_CC(window-menu-label, client_menu_label, 0) },
|
||||||
|
|
||||||
{ FUNC_SC(window-cycle, client_cycle, (CWM_CYCLE_FORWARD)) },
|
{ FUNC_SC(window-cycle, client_cycle, (CWM_CYCLE_FORWARD)) },
|
||||||
|
|
18
cwmrc.5
18
cwmrc.5
|
@ -421,6 +421,24 @@ Snap window to top-left corner.
|
||||||
Snap window to bottom-right corner.
|
Snap window to bottom-right corner.
|
||||||
.It window-snap-down-left
|
.It window-snap-down-left
|
||||||
Snap window to bottom-left corner.
|
Snap window to bottom-left corner.
|
||||||
|
.It window-tile-up
|
||||||
|
Fill the top half of the screen with the window.
|
||||||
|
.It window-tile-down
|
||||||
|
Fill the bottom half of the screen with the window.
|
||||||
|
.It window-tile-left
|
||||||
|
Fill the left half of the screen with the window.
|
||||||
|
.It window-tile-right
|
||||||
|
Fill the right half of the screen with the window.
|
||||||
|
.It window-tile-up-left
|
||||||
|
Fill the top left quarter of the screen with the window.
|
||||||
|
.It window-tile-up-right
|
||||||
|
Fill the top right quarter of the screen with the window.
|
||||||
|
.It window-tile-down-left
|
||||||
|
Fill the down left quarter of the screen with the window.
|
||||||
|
.It window-tile-down-right
|
||||||
|
Fill the down right quarter of the screen with the window.
|
||||||
|
.It window-center
|
||||||
|
Centers the window on the screen.
|
||||||
.It pointer-move-up
|
.It pointer-move-up
|
||||||
Move pointer
|
Move pointer
|
||||||
.Ar moveamount
|
.Ar moveamount
|
||||||
|
|
85
kbfunc.c
85
kbfunc.c
|
@ -304,30 +304,79 @@ kbfunc_client_snap(void *ctx, struct cargs *cargs)
|
||||||
cc->geom.y + cc->geom.h / 2, 1);
|
cc->geom.y + cc->geom.h / 2, 1);
|
||||||
|
|
||||||
flags = cargs->flag;
|
flags = cargs->flag;
|
||||||
while (flags) {
|
|
||||||
if (flags & CWM_UP) {
|
if (flags) {
|
||||||
cc->geom.y = area.y;
|
while (flags) {
|
||||||
flags &= ~CWM_UP;
|
if (flags & CWM_UP) {
|
||||||
}
|
cc->geom.y = area.y;
|
||||||
if (flags & CWM_LEFT) {
|
flags &= ~CWM_UP;
|
||||||
cc->geom.x = area.x;
|
}
|
||||||
flags &= ~CWM_LEFT;
|
if (flags & CWM_LEFT) {
|
||||||
}
|
cc->geom.x = area.x;
|
||||||
if (flags & CWM_RIGHT) {
|
flags &= ~CWM_LEFT;
|
||||||
cc->geom.x = area.x + area.w - cc->geom.w -
|
}
|
||||||
(cc->bwidth * 2);
|
if (flags & CWM_RIGHT) {
|
||||||
flags &= ~CWM_RIGHT;
|
cc->geom.x = area.x + area.w - cc->geom.w -
|
||||||
}
|
(cc->bwidth * 2);
|
||||||
if (flags & CWM_DOWN) {
|
flags &= ~CWM_RIGHT;
|
||||||
cc->geom.y = area.y + area.h - cc->geom.h -
|
}
|
||||||
(cc->bwidth * 2);
|
if (flags & CWM_DOWN) {
|
||||||
flags &= ~CWM_DOWN;
|
cc->geom.y = area.y + area.h - cc->geom.h -
|
||||||
|
(cc->bwidth * 2);
|
||||||
|
flags &= ~CWM_DOWN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
cc->geom.x = area.x + (area.w - cc->geom.w) / 2 - cc->bwidth;
|
||||||
|
cc->geom.y = area.y + (area.h - cc->geom.h) / 2 - cc->bwidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
client_move(cc);
|
client_move(cc);
|
||||||
client_ptr_inbound(cc, 1);
|
client_ptr_inbound(cc, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
kbfunc_client_tile(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, 1);
|
||||||
|
|
||||||
|
flags = cargs->flag;
|
||||||
|
|
||||||
|
if (flags & CWM_UP) {
|
||||||
|
cc->geom.y = area.y;
|
||||||
|
cc->geom.h = area.h / 2 - (cc->bwidth * 2);
|
||||||
|
} else if (flags & CWM_DOWN) {
|
||||||
|
cc->geom.y = area.y + area.h / 2;
|
||||||
|
cc->geom.h = area.h / 2 - (cc->bwidth * 2);
|
||||||
|
} else {
|
||||||
|
cc->geom.y = area.y;
|
||||||
|
cc->geom.h = area.h - (cc->bwidth * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & CWM_LEFT) {
|
||||||
|
cc->geom.x = area.x;
|
||||||
|
cc->geom.w = area.w / 2 - (cc->bwidth * 2);
|
||||||
|
} else if (flags & CWM_RIGHT) {
|
||||||
|
cc->geom.x = area.x + area.w / 2;
|
||||||
|
cc->geom.w = area.w / 2 - (cc->bwidth * 2);
|
||||||
|
} else {
|
||||||
|
cc->geom.x = area.x;
|
||||||
|
cc->geom.w = area.w - (cc->bwidth * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
client_resize(cc, 1);
|
||||||
|
client_move(cc);
|
||||||
|
client_ptr_inbound(cc, 1);
|
||||||
|
XSync(X_Dpy, True);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
kbfunc_client_close(void *ctx, struct cargs *cargs)
|
kbfunc_client_close(void *ctx, struct cargs *cargs)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,168 @@
|
||||||
|
diff --git a/calmwm.h b/calmwm.h
|
||||||
|
index 95e3c8d..4026764 100644
|
||||||
|
--- a/calmwm.h
|
||||||
|
+++ b/calmwm.h
|
||||||
|
@@ -506,6 +506,7 @@ void kbfunc_ptrmove(void *, struct cargs *);
|
||||||
|
void kbfunc_client_snap(void *, struct cargs *);
|
||||||
|
void kbfunc_client_move(void *, struct cargs *);
|
||||||
|
void kbfunc_client_resize(void *, struct cargs *);
|
||||||
|
+void kbfunc_client_tile(void *, struct cargs *);
|
||||||
|
void kbfunc_client_close(void *, struct cargs *);
|
||||||
|
void kbfunc_client_lower(void *, struct cargs *);
|
||||||
|
void kbfunc_client_raise(void *, struct cargs *);
|
||||||
|
diff --git a/conf.c b/conf.c
|
||||||
|
index 53ca295..19d0e95 100644
|
||||||
|
--- a/conf.c
|
||||||
|
+++ b/conf.c
|
||||||
|
@@ -102,6 +102,7 @@ static const struct {
|
||||||
|
{ FUNC_CC(window-movetogroup-7, client_movetogroup, 7) },
|
||||||
|
{ FUNC_CC(window-movetogroup-8, client_movetogroup, 8) },
|
||||||
|
{ FUNC_CC(window-movetogroup-9, client_movetogroup, 9) },
|
||||||
|
+ { FUNC_CC(window-center, client_snap, 0) },
|
||||||
|
{ FUNC_CC(window-snap-up, client_snap, (CWM_UP)) },
|
||||||
|
{ FUNC_CC(window-snap-down, client_snap, (CWM_DOWN)) },
|
||||||
|
{ FUNC_CC(window-snap-right, client_snap, (CWM_RIGHT)) },
|
||||||
|
@@ -128,6 +129,14 @@ static const struct {
|
||||||
|
{ FUNC_CC(window-resize-down-big, client_resize, (CWM_DOWN_BIG)) },
|
||||||
|
{ FUNC_CC(window-resize-right-big, client_resize, (CWM_RIGHT_BIG)) },
|
||||||
|
{ FUNC_CC(window-resize-left-big, client_resize, (CWM_LEFT_BIG)) },
|
||||||
|
+ { FUNC_CC(window-tile-up, client_tile, (CWM_UP)) },
|
||||||
|
+ { FUNC_CC(window-tile-down, client_tile, (CWM_DOWN)) },
|
||||||
|
+ { FUNC_CC(window-tile-left, client_tile, (CWM_LEFT)) },
|
||||||
|
+ { FUNC_CC(window-tile-right, client_tile, (CWM_RIGHT)) },
|
||||||
|
+ { FUNC_CC(window-tile-up-left, client_tile, (CWM_UP_LEFT)) },
|
||||||
|
+ { FUNC_CC(window-tile-up-right, client_tile, (CWM_UP_RIGHT)) },
|
||||||
|
+ { FUNC_CC(window-tile-down-left, client_tile, (CWM_DOWN_LEFT)) },
|
||||||
|
+ { FUNC_CC(window-tile-down-right, client_tile, (CWM_DOWN_RIGHT)) },
|
||||||
|
{ FUNC_CC(window-menu-label, client_menu_label, 0) },
|
||||||
|
|
||||||
|
{ FUNC_SC(window-cycle, client_cycle, (CWM_CYCLE_FORWARD)) },
|
||||||
|
diff --git a/cwmrc.5 b/cwmrc.5
|
||||||
|
index ab70d25..80d6f03 100644
|
||||||
|
--- a/cwmrc.5
|
||||||
|
+++ b/cwmrc.5
|
||||||
|
@@ -411,6 +411,24 @@ Snap window to top-left corner.
|
||||||
|
Snap window to bottom-right corner.
|
||||||
|
.It window-snap-down-left
|
||||||
|
Snap window to bottom-left corner.
|
||||||
|
+.It window-tile-up
|
||||||
|
+Fill the top half of the screen with the window.
|
||||||
|
+.It window-tile-down
|
||||||
|
+Fill the bottom half of the screen with the window.
|
||||||
|
+.It window-tile-left
|
||||||
|
+Fill the left half of the screen with the window.
|
||||||
|
+.It window-tile-right
|
||||||
|
+Fill the right half of the screen with the window.
|
||||||
|
+.It window-tile-up-left
|
||||||
|
+Fill the top left quarter of the screen with the window.
|
||||||
|
+.It window-tile-up-right
|
||||||
|
+Fill the top right quarter of the screen with the window.
|
||||||
|
+.It window-tile-down-left
|
||||||
|
+Fill the down left quarter of the screen with the window.
|
||||||
|
+.It window-tile-down-right
|
||||||
|
+Fill the down right quarter of the screen with the window.
|
||||||
|
+.It window-center
|
||||||
|
+Centers the window on the screen.
|
||||||
|
.It pointer-move-up
|
||||||
|
Move pointer
|
||||||
|
.Ar moveamount
|
||||||
|
diff --git a/kbfunc.c b/kbfunc.c
|
||||||
|
index 2d5d1ce..24f27ad 100644
|
||||||
|
--- a/kbfunc.c
|
||||||
|
+++ b/kbfunc.c
|
||||||
|
@@ -304,28 +304,77 @@ kbfunc_client_snap(void *ctx, struct cargs *cargs)
|
||||||
|
cc->geom.y + cc->geom.h / 2, 1);
|
||||||
|
|
||||||
|
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;
|
||||||
|
+
|
||||||
|
+ if (flags) {
|
||||||
|
+ 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;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
+ } else {
|
||||||
|
+ cc->geom.x = area.x + (area.w - cc->geom.w) / 2 - cc->bwidth;
|
||||||
|
+ cc->geom.y = area.y + (area.h - cc->geom.h) / 2 - cc->bwidth;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ client_move(cc);
|
||||||
|
+ client_ptr_inbound(cc, 1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+kbfunc_client_tile(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, 1);
|
||||||
|
+
|
||||||
|
+ flags = cargs->flag;
|
||||||
|
+
|
||||||
|
+ if (flags & CWM_UP) {
|
||||||
|
+ cc->geom.y = area.y;
|
||||||
|
+ cc->geom.h = area.h / 2 - (cc->bwidth * 2);
|
||||||
|
+ } else if (flags & CWM_DOWN) {
|
||||||
|
+ cc->geom.y = area.y + area.h / 2;
|
||||||
|
+ cc->geom.h = area.h / 2 - (cc->bwidth * 2);
|
||||||
|
+ } else {
|
||||||
|
+ cc->geom.y = area.y;
|
||||||
|
+ cc->geom.h = area.h - (cc->bwidth * 2);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (flags & CWM_LEFT) {
|
||||||
|
+ cc->geom.x = area.x;
|
||||||
|
+ cc->geom.w = area.w / 2 - (cc->bwidth * 2);
|
||||||
|
+ } else if (flags & CWM_RIGHT) {
|
||||||
|
+ cc->geom.x = area.x + area.w / 2;
|
||||||
|
+ cc->geom.w = area.w / 2 - (cc->bwidth * 2);
|
||||||
|
+ } else {
|
||||||
|
+ cc->geom.x = area.x;
|
||||||
|
+ cc->geom.w = area.w - (cc->bwidth * 2);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ client_resize(cc, 1);
|
||||||
|
client_move(cc);
|
||||||
|
client_ptr_inbound(cc, 1);
|
||||||
|
+ XSync(X_Dpy, True);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
Loading…
Reference in New Issue