mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
Add a keybinding to allow horizontal maximisation of a window (CMS-enter).
based on a diff by Thomas Pfaff; thanks! ok okan@
This commit is contained in:
parent
028a1778db
commit
e2b1cb98c1
5
calmwm.h
5
calmwm.h
@ -96,6 +96,8 @@ TAILQ_HEAD(screen_ctx_q, screen_ctx);
|
|||||||
#define CLIENT_MAXIMIZED 0x08
|
#define CLIENT_MAXIMIZED 0x08
|
||||||
#define CLIENT_DOVMAXIMIZE 0x10
|
#define CLIENT_DOVMAXIMIZE 0x10
|
||||||
#define CLIENT_VMAXIMIZED 0x20
|
#define CLIENT_VMAXIMIZED 0x20
|
||||||
|
#define CLIENT_DOHMAXIMIZE 0x40
|
||||||
|
#define CLIENT_HMAXIMIZED 0x80
|
||||||
|
|
||||||
#define CLIENT_HIGHLIGHT_GROUP 1
|
#define CLIENT_HIGHLIGHT_GROUP 1
|
||||||
#define CLIENT_HIGHLIGHT_UNGROUP 2
|
#define CLIENT_HIGHLIGHT_UNGROUP 2
|
||||||
@ -347,6 +349,7 @@ void client_ptrsave(struct client_ctx *);
|
|||||||
void client_draw_border(struct client_ctx *);
|
void client_draw_border(struct client_ctx *);
|
||||||
void client_maximize(struct client_ctx *);
|
void client_maximize(struct client_ctx *);
|
||||||
void client_vertmaximize(struct client_ctx *);
|
void client_vertmaximize(struct client_ctx *);
|
||||||
|
void client_horizmaximize(struct client_ctx *);
|
||||||
void client_map(struct client_ctx *);
|
void client_map(struct client_ctx *);
|
||||||
void client_mtf(struct client_ctx *);
|
void client_mtf(struct client_ctx *);
|
||||||
struct client_ctx *client_cycle(int);
|
struct client_ctx *client_cycle(int);
|
||||||
@ -436,6 +439,8 @@ void kbfunc_client_maximize(struct client_ctx *,
|
|||||||
union arg *);
|
union arg *);
|
||||||
void kbfunc_client_vmaximize(struct client_ctx *,
|
void kbfunc_client_vmaximize(struct client_ctx *,
|
||||||
union arg *);
|
union arg *);
|
||||||
|
void kbfunc_client_hmaximize(struct client_ctx *,
|
||||||
|
union arg *);
|
||||||
void kbfunc_reload(struct client_ctx *, union arg *);
|
void kbfunc_reload(struct client_ctx *, union arg *);
|
||||||
void kbfunc_quit_wm(struct client_ctx *, union arg *);
|
void kbfunc_quit_wm(struct client_ctx *, union arg *);
|
||||||
void kbfunc_moveresize(struct client_ctx *, union arg *);
|
void kbfunc_moveresize(struct client_ctx *, union arg *);
|
||||||
|
41
client.c
41
client.c
@ -224,7 +224,7 @@ client_maximize(struct client_ctx *cc)
|
|||||||
if (cc->flags & CLIENT_MAXIMIZED) {
|
if (cc->flags & CLIENT_MAXIMIZED) {
|
||||||
cc->geom = cc->savegeom;
|
cc->geom = cc->savegeom;
|
||||||
} else {
|
} else {
|
||||||
if (!(cc->flags & CLIENT_VMAXIMIZED))
|
if (!(cc->flags & (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED)))
|
||||||
cc->savegeom = cc->geom;
|
cc->savegeom = cc->geom;
|
||||||
if (HasXinerama) {
|
if (HasXinerama) {
|
||||||
XineramaScreenInfo *xine;
|
XineramaScreenInfo *xine;
|
||||||
@ -263,7 +263,7 @@ client_vertmaximize(struct client_ctx *cc)
|
|||||||
if (cc->flags & CLIENT_VMAXIMIZED) {
|
if (cc->flags & CLIENT_VMAXIMIZED) {
|
||||||
cc->geom = cc->savegeom;
|
cc->geom = cc->savegeom;
|
||||||
} else {
|
} else {
|
||||||
if (!(cc->flags & CLIENT_MAXIMIZED))
|
if (!(cc->flags & (CLIENT_MAXIMIZED | CLIENT_HMAXIMIZED)))
|
||||||
cc->savegeom = cc->geom;
|
cc->savegeom = cc->geom;
|
||||||
if (HasXinerama) {
|
if (HasXinerama) {
|
||||||
XineramaScreenInfo *xine;
|
XineramaScreenInfo *xine;
|
||||||
@ -285,10 +285,42 @@ calc:
|
|||||||
client_resize(cc);
|
client_resize(cc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
client_horizmaximize(struct client_ctx *cc)
|
||||||
|
{
|
||||||
|
struct screen_ctx *sc = CCTOSC(cc);
|
||||||
|
int x_org = 0, xmax = sc->xmax;
|
||||||
|
|
||||||
|
if (cc->flags & CLIENT_HMAXIMIZED) {
|
||||||
|
cc->geom = cc->savegeom;
|
||||||
|
} else {
|
||||||
|
if (!(cc->flags & (CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED)))
|
||||||
|
cc->savegeom = cc->geom;
|
||||||
|
if (HasXinerama) {
|
||||||
|
XineramaScreenInfo *xine;
|
||||||
|
xine = screen_find_xinerama(CCTOSC(cc),
|
||||||
|
cc->geom.x + cc->geom.width / 2,
|
||||||
|
cc->geom.y + cc->geom.height / 2);
|
||||||
|
if (xine == NULL)
|
||||||
|
goto calc;
|
||||||
|
x_org = xine->x_org;
|
||||||
|
xmax = xine->width;
|
||||||
|
}
|
||||||
|
calc:
|
||||||
|
cc->geom.x = x_org + Conf.gap_left;
|
||||||
|
cc->geom.width = xmax - (cc->bwidth * 2) - (Conf.gap_left +
|
||||||
|
Conf.gap_right);
|
||||||
|
cc->flags |= CLIENT_DOHMAXIMIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
client_resize(cc);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
client_resize(struct client_ctx *cc)
|
client_resize(struct client_ctx *cc)
|
||||||
{
|
{
|
||||||
cc->flags &= ~(CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED);
|
cc->flags &= ~(CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED |
|
||||||
|
CLIENT_HMAXIMIZED);
|
||||||
|
|
||||||
if (cc->flags & CLIENT_DOMAXIMIZE) {
|
if (cc->flags & CLIENT_DOMAXIMIZE) {
|
||||||
cc->flags &= ~CLIENT_DOMAXIMIZE;
|
cc->flags &= ~CLIENT_DOMAXIMIZE;
|
||||||
@ -296,6 +328,9 @@ client_resize(struct client_ctx *cc)
|
|||||||
} else if (cc->flags & CLIENT_DOVMAXIMIZE) {
|
} else if (cc->flags & CLIENT_DOVMAXIMIZE) {
|
||||||
cc->flags &= ~CLIENT_DOVMAXIMIZE;
|
cc->flags &= ~CLIENT_DOVMAXIMIZE;
|
||||||
cc->flags |= CLIENT_VMAXIMIZED;
|
cc->flags |= CLIENT_VMAXIMIZED;
|
||||||
|
} else if (cc->flags & CLIENT_DOHMAXIMIZE) {
|
||||||
|
cc->flags &= ~CLIENT_DOHMAXIMIZE;
|
||||||
|
cc->flags |= CLIENT_HMAXIMIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
XMoveResizeWindow(X_Dpy, cc->win, cc->geom.x,
|
XMoveResizeWindow(X_Dpy, cc->win, cc->geom.x,
|
||||||
|
2
conf.c
2
conf.c
@ -135,6 +135,7 @@ conf_init(struct conf *c)
|
|||||||
conf_bindname(c, "CM-g", "grouptoggle");
|
conf_bindname(c, "CM-g", "grouptoggle");
|
||||||
conf_bindname(c, "CM-f", "maximize");
|
conf_bindname(c, "CM-f", "maximize");
|
||||||
conf_bindname(c, "CM-equal", "vmaximize");
|
conf_bindname(c, "CM-equal", "vmaximize");
|
||||||
|
conf_bindname(c, "CMS-equal", "hmaximize");
|
||||||
conf_bindname(c, "CMS-r", "reload");
|
conf_bindname(c, "CMS-r", "reload");
|
||||||
conf_bindname(c, "CMS-q", "quit");
|
conf_bindname(c, "CMS-q", "quit");
|
||||||
|
|
||||||
@ -338,6 +339,7 @@ static struct {
|
|||||||
{ "grouptoggle", kbfunc_client_grouptoggle, KBFLAG_NEEDCLIENT, {0}},
|
{ "grouptoggle", kbfunc_client_grouptoggle, KBFLAG_NEEDCLIENT, {0}},
|
||||||
{ "maximize", kbfunc_client_maximize, KBFLAG_NEEDCLIENT, {0} },
|
{ "maximize", kbfunc_client_maximize, KBFLAG_NEEDCLIENT, {0} },
|
||||||
{ "vmaximize", kbfunc_client_vmaximize, KBFLAG_NEEDCLIENT, {0} },
|
{ "vmaximize", kbfunc_client_vmaximize, KBFLAG_NEEDCLIENT, {0} },
|
||||||
|
{ "hmaximize", kbfunc_client_hmaximize, KBFLAG_NEEDCLIENT, {0} },
|
||||||
{ "reload", kbfunc_reload, 0, {0} },
|
{ "reload", kbfunc_reload, 0, {0} },
|
||||||
{ "quit", kbfunc_quit_wm, 0, {0} },
|
{ "quit", kbfunc_quit_wm, 0, {0} },
|
||||||
{ "exec", kbfunc_exec, 0, {.i = CWM_EXEC_PROGRAM} },
|
{ "exec", kbfunc_exec, 0, {.i = CWM_EXEC_PROGRAM} },
|
||||||
|
4
cwm.1
4
cwm.1
@ -14,7 +14,7 @@
|
|||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: June 18 2009 $
|
.Dd $Mdocdate: June 19 2009 $
|
||||||
.Dt CWM 1
|
.Dt CWM 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -92,6 +92,8 @@ Reverse cycle through active groups.
|
|||||||
Toggle full-screen size of current window.
|
Toggle full-screen size of current window.
|
||||||
.It Ic CM-=
|
.It Ic CM-=
|
||||||
Toggle vertical maximization of current window.
|
Toggle vertical maximization of current window.
|
||||||
|
.It Ic CMS-=
|
||||||
|
Toggle horizontal maximization of current window.
|
||||||
.It Ic M-?
|
.It Ic M-?
|
||||||
Spawn
|
Spawn
|
||||||
.Dq exec program
|
.Dq exec program
|
||||||
|
2
cwmrc.5
2
cwmrc.5
@ -292,6 +292,8 @@ Label current window.
|
|||||||
Maximize current window full-screen.
|
Maximize current window full-screen.
|
||||||
.It vmaximize
|
.It vmaximize
|
||||||
Maximize current window vertically.
|
Maximize current window vertically.
|
||||||
|
.It hmaximize
|
||||||
|
Maximize current window horizontally.
|
||||||
.It moveup
|
.It moveup
|
||||||
Move window
|
Move window
|
||||||
.Ar moveamount
|
.Ar moveamount
|
||||||
|
6
kbfunc.c
6
kbfunc.c
@ -481,6 +481,12 @@ kbfunc_client_vmaximize(struct client_ctx *cc, union arg *arg)
|
|||||||
client_vertmaximize(cc);
|
client_vertmaximize(cc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
kbfunc_client_hmaximize(struct client_ctx *cc, union arg *arg)
|
||||||
|
{
|
||||||
|
client_horizmaximize(cc);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
kbfunc_quit_wm(struct client_ctx *cc, union arg *arg)
|
kbfunc_quit_wm(struct client_ctx *cc, union arg *arg)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user