~ruther/dwl

623867a367ba8c3ee9ac1582015dcf1d6991a78f — Devin J. Pohly 5 years ago 59b0957
turn focusnext into dwm's focusstack
2 files changed, 25 insertions(+), 14 deletions(-)

M config.def.h
M dwl.c
M config.def.h => config.def.h +7 -5
@@ 32,11 32,13 @@ static const struct xkb_rule_names xkb_rules = {
static const char *termcmd[]  = { "kitty", "-o", "linux_display_server=wayland", NULL };

static const Key keys[] = {
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn,     {.v = termcmd } },
	{ MODKEY,                    XKB_KEY_j,      focusnext, {0} },
	{ MODKEY,                    XKB_KEY_t,      setlayout, {.v = &layouts[0]} },
	{ MODKEY,                    XKB_KEY_f,      setlayout, {.v = &layouts[1]} },
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Q,      quit,      {0} },
	/* modifier                  key                 function        argument */
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return,     spawn,          {.v = termcmd } },
	{ MODKEY,                    XKB_KEY_j,          focusstack,     {.i = +1} },
	{ MODKEY,                    XKB_KEY_k,          focusstack,     {.i = -1} },
	{ MODKEY,                    XKB_KEY_t,          setlayout,      {.v = &layouts[0]} },
	{ MODKEY,                    XKB_KEY_f,          setlayout,      {.v = &layouts[1]} },
	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Q,          quit,           {0} },
};

static const Button buttons[] = {

M dwl.c => dwl.c +18 -9
@@ 125,7 125,7 @@ static void createpointer(struct wlr_input_device *device);
static void cursorframe(struct wl_listener *listener, void *data);
static void destroynotify(struct wl_listener *listener, void *data);
static void focus(Client *c, struct wlr_surface *surface);
static void focusnext(const Arg *arg);
static void focusstack(const Arg *arg);
static void inputdevice(struct wl_listener *listener, void *data);
static bool keybinding(uint32_t mods, xkb_keysym_t sym);
static void keypress(struct wl_listener *listener, void *data);


@@ 409,20 409,29 @@ focus(Client *c, struct wlr_surface *surface)
}

void
focusnext(const Arg *arg)
focusstack(const Arg *arg)
{
	/* Focus the client on the selected monitor which comes first in tiling
	 * order after the currently selected client */
	/* Focus the next or previous client (in tiling order) on selmon */
	Client *sel = selclient();
	if (!sel)
		return;
	Client *c;
	wl_list_for_each(c, &sel->link, link) {
		if (&c->link == &clients)
			continue;  /* wrap past the sentinel node */
		if (VISIBLEON(c, selmon))
			break;  /* found it */
	if (arg->i > 0) {
		wl_list_for_each(c, &sel->link, link) {
			if (&c->link == &clients)
				continue;  /* wrap past the sentinel node */
			if (VISIBLEON(c, selmon))
				break;  /* found it */
		}
	} else {
		wl_list_for_each_reverse(c, &sel->link, link) {
			if (&c->link == &clients)
				continue;  /* wrap past the sentinel node */
			if (VISIBLEON(c, selmon))
				break;  /* found it */
		}
	}
	/* If only one client is visible on selmon, then c == sel */
	focus(c, c->xdg_surface->surface);
}


Do not follow this link