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

Attachment: 0002-wmaker-add-next-and-previous-window-focus-functions.patch
Description: Binary data

Reply via email to