~ruther/dwl

66dce64145ed7e08be3e949bb635d2deaa0105dc — Devin J. Pohly 4 years ago 53798df + 7b608da
Merge pull request #18 from guidocella/zoom

Add zoom
2 files changed, 31 insertions(+), 0 deletions(-)

M config.def.h
M dwl.c
M config.def.h => config.def.h +1 -0
@@ 59,6 59,7 @@ static const Key keys[] = {
	{ MODKEY,                    XKB_KEY_d,          incnmaster,     {.i = -1} },
	{ MODKEY,                    XKB_KEY_h,          setmfact,       {.f = -0.05} },
	{ MODKEY,                    XKB_KEY_l,          setmfact,       {.f = +0.05} },
	{ MODKEY,                    XKB_KEY_Return,     zoom,           {0} },
	{ MODKEY,                    XKB_KEY_Tab,        view,           {0} },
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_c,          killclient,     {0} },
	{ MODKEY,                    XKB_KEY_t,          setlayout,      {.v = &layouts[0]} },

M dwl.c => dwl.c +30 -0
@@ 211,6 211,7 @@ static void unmapnotify(struct wl_listener *listener, void *data);
static void view(const Arg *arg);
static Client *xytoclient(double x, double y);
static Monitor *xytomon(double x, double y);
static void zoom(const Arg *arg);

/* variables */
static const char broken[] = "broken";


@@ 1636,6 1637,35 @@ xytomon(double x, double y)
	return o ? o->data : NULL;
}

void
zoom(const Arg *arg)
{
	unsigned int n = 0;
	Client *c, *sel = selclient();

	if (!sel || !selmon->lt[selmon->sellt]->arrange || sel->isfloating)
		return;

	wl_list_for_each(c, &clients, link)
		if (VISIBLEON(c, selmon) && !c->isfloating) {
			if (++n == 1 && c == sel)
				sel = NULL;
			else if (n == 2) {
				if (!sel)
					sel = c;
				break;
			}
		}

	if (n == 1)
		return;

	wl_list_remove(&sel->link);
	wl_list_insert(&clients, &sel->link);
	focusclient(sel, NULL, 1);
	arrange(selmon);
}

int
main(int argc, char *argv[])
{

Do not follow this link