diff options
| -rw-r--r-- | config.def.h | 10 | ||||
| -rw-r--r-- | dwl.c | 26 | 
2 files changed, 16 insertions, 20 deletions
diff --git a/config.def.h b/config.def.h index 982c870..4aefa2b 100644 --- a/config.def.h +++ b/config.def.h @@ -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), @@ -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  | 
