~ruther/dwl

e8ca8a8ac722d8db819280487a69e08cf3a76573 — Devin J. Pohly 4 years ago 4bf2923
use output layout for dirtomon

No need to track our own order; wlroots has a reasonable default for us
already.
2 files changed, 16 insertions(+), 20 deletions(-)

M config.def.h
M dwl.c
M config.def.h => config.def.h +4 -6
@@ 32,8 32,6 @@ static const MonitorRule monrules[] = {
	/* example of a HiDPI laptop monitor:
	{ "eDP-1",    0.5,  1,      2,    &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, 0, 0 },
	*/
	/* the order in which monitors are defined here affects the order in which
	 * focusmon and tagmon cycle trough the monitors */
	/* defaults */
	{ NULL,       0.55, 1,      1,    &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, 0, 0 },
};


@@ 87,10 85,10 @@ static const Key keys[] = {
	{ MODKEY, 					 XKB_KEY_e,    		togglefullscreen, {0} },
	{ MODKEY,                    XKB_KEY_0,          view,           {.ui = ~0} },
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag,            {.ui = ~0} },
	{ MODKEY,                    XKB_KEY_comma,      focusmon,       {.i = -1} },
	{ MODKEY,                    XKB_KEY_period,     focusmon,       {.i = +1} },
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less,       tagmon,         {.i = -1} },
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater,    tagmon,         {.i = +1} },
	{ MODKEY,                    XKB_KEY_comma,      focusmon,       {.i = WLR_DIRECTION_LEFT} },
	{ MODKEY,                    XKB_KEY_period,     focusmon,       {.i = WLR_DIRECTION_RIGHT} },
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less,       tagmon,         {.i = WLR_DIRECTION_LEFT} },
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater,    tagmon,         {.i = WLR_DIRECTION_RIGHT} },
	TAGKEYS(          XKB_KEY_1, XKB_KEY_exclam,                     0),
	TAGKEYS(          XKB_KEY_2, XKB_KEY_at,                         1),
	TAGKEYS(          XKB_KEY_3, XKB_KEY_numbersign,                 2),

M dwl.c => dwl.c +12 -14
@@ 235,7 235,7 @@ static void cursorframe(struct wl_listener *listener, void *data);
static void destroylayersurfacenotify(struct wl_listener *listener, void *data);
static void destroynotify(struct wl_listener *listener, void *data);
static void destroyxdeco(struct wl_listener *listener, void *data);
static Monitor *dirtomon(int dir);
static Monitor *dirtomon(enum wlr_direction dir);
static void focusclient(Client *c, int lift);
static void focusmon(const Arg *arg);
static void focusstack(const Arg *arg);


@@ 1096,19 1096,17 @@ fullscreennotify(struct wl_listener *listener, void *data)
}

Monitor *
dirtomon(int dir)
{
	Monitor *m;

	if (dir > 0) {
		if (selmon->link.next == &mons)
			return wl_container_of(mons.next, m, link);
		return wl_container_of(selmon->link.next, m, link);
	} else {
		if (selmon->link.prev == &mons)
			return wl_container_of(mons.prev, m, link);
		return wl_container_of(selmon->link.prev, m, link);
	}
dirtomon(enum wlr_direction dir)
{
	struct wlr_output *next;
	if ((next = wlr_output_layout_adjacent_output(output_layout,
			dir, selmon->wlr_output, selmon->m.x, selmon->m.y)))
		return next->data;
	if ((next = wlr_output_layout_farthest_output(output_layout,
			dir ^ (WLR_DIRECTION_LEFT|WLR_DIRECTION_RIGHT),
			selmon->wlr_output, selmon->m.x, selmon->m.y)))
		return next->data;
	return selmon;
}

void

Do not follow this link