From d49d11645387b4373e57be2c22660df089b6b2e8 Mon Sep 17 00:00:00 2001 From: Kim Woelders Date: Sat, 13 Sep 2008 16:00:43 +0000 Subject: [PATCH] Fix "focus prev" when focus list is not enabled. SVN revision: 35974 --- src/focus.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/focus.c b/src/focus.c index 83e4e33a..070bbc25 100644 --- a/src/focus.c +++ b/src/focus.c @@ -173,8 +173,12 @@ FocusRaisePending(void) focus_pending_raise = NULL; } +/* + * dir > 0: Focus previously focused window + * else : Focus least recently focused window + */ static void -FocusPrevEwin(void) +FocusCycleEwin(int dir) { EWin *const *lst; EWin *ewin; @@ -184,6 +188,8 @@ FocusPrevEwin(void) if (num <= 1) return; + dir = (dir > 0) ? 1 : -1; + for (j = 0; j < num; j++) { if (lst[j] == Mode.focuswin) @@ -191,7 +197,7 @@ FocusPrevEwin(void) } for (i = 1; i < num; i++) { - ewin = lst[(j + i) % num]; + ewin = lst[(j + i * dir + num) % num]; if (!FocusEwinValid(ewin, 1, 0, 0) || ewin->props.skip_focuslist) continue; FocusToEWin(ewin, FOCUS_PREV); @@ -962,17 +968,19 @@ FocusIpc(const char *params) } else if (!strncmp(cmd, "next", 2)) { + /* Focus previously focused window */ if (Conf.warplist.enable) WarpFocus(1); else - FocusPrevEwin(); + FocusCycleEwin(1); } else if (!strncmp(cmd, "prev", 2)) { + /* Focus least recently focused window */ if (Conf.warplist.enable) WarpFocus(-1); else - FocusPrevEwin(); + FocusCycleEwin(-1); } }