69 lines
2.5 KiB
Diff
69 lines
2.5 KiB
Diff
From 8510cd247ad288e63ac346539ed75320c407897d Mon Sep 17 00:00:00 2001
|
|
From: Vladislav Nepogodin <nepogodin.vlad@gmail.com>
|
|
Date: Tue, 27 Jul 2021 23:01:45 +0400
|
|
Subject: [PATCH] Function to cycle through available layouts.
|
|
|
|
---
|
|
config.def.h | 3 +++
|
|
dwl.c | 19 +++++++++++++++++++
|
|
2 files changed, 22 insertions(+)
|
|
|
|
diff --git a/config.def.h b/config.def.h
|
|
index 089aa379..1c6a1331 100644
|
|
--- a/config.def.h
|
|
+++ b/config.def.h
|
|
@@ -22,6 +22,7 @@ static const Layout layouts[] = {
|
|
{ "[]=", tile },
|
|
{ "><>", NULL }, /* no layout function means floating behavior */
|
|
{ "[M]", monocle },
|
|
+ { NULL, NULL },
|
|
};
|
|
|
|
/* monitors
|
|
@@ -82,6 +83,8 @@ static const Key keys[] = {
|
|
{ MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} },
|
|
{ MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} },
|
|
{ MODKEY, XKB_KEY_m, setlayout, {.v = &layouts[2]} },
|
|
+ { MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_comma, cyclelayout, {.i = -1 } },
|
|
+ { MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_period, cyclelayout, {.i = +1 } },
|
|
{ MODKEY, XKB_KEY_space, setlayout, {0} },
|
|
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} },
|
|
{ MODKEY, XKB_KEY_e, togglefullscreen, {0} },
|
|
diff --git a/dwl.c b/dwl.c
|
|
index a2a0b692..bc6e76b5 100644
|
|
--- a/dwl.c
|
|
+++ b/dwl.c
|
|
@@ -232,6 +232,7 @@ static void createnotify(struct wl_listener *listener, void *data);
|
|
static void createlayersurface(struct wl_listener *listener, void *data);
|
|
static void createpointer(struct wlr_input_device *device);
|
|
static void cursorframe(struct wl_listener *listener, void *data);
|
|
+static void cyclelayout(const Arg *arg);
|
|
static void destroylayersurfacenotify(struct wl_listener *listener, void *data);
|
|
static void destroynotify(struct wl_listener *listener, void *data);
|
|
static Monitor *dirtomon(enum wlr_direction dir);
|
|
@@ -971,6 +972,24 @@ cursorframe(struct wl_listener *listener, void *data)
|
|
wlr_seat_pointer_notify_frame(seat);
|
|
}
|
|
|
|
+void
|
|
+cyclelayout(const Arg *arg)
|
|
+{
|
|
+ Layout *l;
|
|
+ for (l = (Layout *)layouts; l != selmon->lt[selmon->sellt]; l++);
|
|
+ if (arg->i > 0) {
|
|
+ if (l->symbol && (l + 1)->symbol)
|
|
+ setlayout(&((Arg) { .v = (l + 1) }));
|
|
+ else
|
|
+ setlayout(&((Arg) { .v = layouts }));
|
|
+ } else {
|
|
+ if (l != layouts && (l - 1)->symbol)
|
|
+ setlayout(&((Arg) { .v = (l - 1) }));
|
|
+ else
|
|
+ setlayout(&((Arg) { .v = &layouts[LENGTH(layouts) - 2] }));
|
|
+ }
|
|
+}
|
|
+
|
|
void
|
|
destroylayersurfacenotify(struct wl_listener *listener, void *data)
|
|
{
|