From 36b9f6cb23fb4e18dec9b52721f22d2c913d4ae6 Mon Sep 17 00:00:00 2001 From: David Maciejak Date: Thu, 11 Sep 2014 07:12:53 +0700 Subject: [PATCH] wmaker: add next and previous window focus functions This patch is adding a wWindowFocusPrev() and wWindowFocusNext() functions. And copying switchmenu.c focusWindow() as wWindowSingleFocus(). Signed-off-by: Carlos R. Mafra --- src/window.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/window.h | 3 +++ 2 files changed, 58 insertions(+) diff --git a/src/window.c b/src/window.c index a33747b8..82d41efe 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 ad6d5327..1a4de2cb 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); -- 2.11.4.GIT