From dc17c1c3a5245c4817d2909580f228d60551051c Mon Sep 17 00:00:00 2001
From: David Maciejak <david.maciejak@gmail.com>
Date: Thu, 11 Sep 2014 07:12:53 +0700
Subject: [PATCH 2/5] wmaker: add next and previous window focus functions

This patch is adding a wWindowFocusPrev() and wWindowFocusNext() functions.
And copying switchmenu.c focusWindow() as wWindowSingleFocus().
---
 src/window.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/window.h |  3 +++
 2 files changed, 58 insertions(+)

diff --git a/src/window.c b/src/window.c
index a33747b..82d41ef 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1629,6 +1629,61 @@ void wWindowUnmap(WWindow *wwin)
 	XUnmapWindow(dpy, wwin->frame->core->window);
 }
 
+void wWindowSingleFocus(WWindow *wwin)
+{
+	WScreen *scr;
+	int x, y, move = 0;
+
+	if (!wwin)
+		return;
+
+	scr = wwin->screen_ptr;
+	wMakeWindowVisible(wwin);
+
+	x = wwin->frame_x;
+	y = wwin->frame_y;
+
+	/* bring window back to visible area */
+	move = wScreenBringInside(scr, &x, &y, wwin->frame->core->width, wwin->frame->core->height);
+
+	if (move) {
+		wWindowConfigure(wwin, x, y, wwin->client.width, wwin->client.height);
+	}
+}
+
+void wWindowFocusPrev(WWindow *wwin, Bool inSameWorkspace)
+{
+	WWindow *tmp;
+
+	if (!wwin || !wwin->prev)
+		return;
+
+	tmp = wwin;
+	while (tmp->prev)
+		tmp = tmp->prev;
+
+	if (inSameWorkspace)
+		while (tmp && (tmp->frame->workspace != wwin->frame->workspace))
+			tmp = tmp->next;
+
+	wWindowSingleFocus(tmp);
+}
+
+void wWindowFocusNext(WWindow *wwin, Bool inSameWorkspace)
+{
+	WWindow *tmp;
+
+	if (!wwin || !wwin->prev)
+		return;
+
+	tmp = wwin->prev;
+	if (inSameWorkspace)
+		while (tmp && (tmp->frame->workspace != wwin->frame->workspace))
+			tmp = tmp->prev;
+
+	wWindowSingleFocus(tmp);
+}
+
 void wWindowFocus(WWindow *wwin, WWindow *owin)
 {
 	WWindow *nowner;
diff --git a/src/window.h b/src/window.h
index ad6d532..1a4de2c 100644
--- a/src/window.h
+++ b/src/window.h
@@ -339,6 +339,9 @@ WWindow *wManageWindow(WScreen *scr, Window window);
 
 void wUnmanageWindow(WWindow *wwin, Bool restore, Bool destroyed);
 
+void wWindowSingleFocus(WWindow *wwin);
+void wWindowFocusPrev(WWindow *wwin, Bool inSameWorkspace);
+void wWindowFocusNext(WWindow *wwin, Bool inSameWorkspace);
 void wWindowFocus(WWindow *wwin, WWindow *owin);
 void wWindowUnfocus(WWindow *wwin);
 
-- 
1.8.3.2

