aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevin J. Pohly <djpohly@gmail.com>2021-01-06 17:19:44 -0500
committerDevin J. Pohly <djpohly@gmail.com>2021-01-06 17:19:44 -0500
commite8ca8a8ac722d8db819280487a69e08cf3a76573 (patch)
tree84a2305ab29917ff93b2a671d0f908f4be095d91
parent4bf2923f4ec7d3dadc5a36928f8e98d9734b207d (diff)
use output layout for dirtomon
No need to track our own order; wlroots has a reasonable default for us already.
-rw-r--r--config.def.h10
-rw-r--r--dwl.c26
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),
diff --git a/dwl.c b/dwl.c
index c09f598..f16f0ed 100644
--- a/dwl.c
+++ b/dwl.c
@@ -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