[PATCH] wmaker: Maintain sorting of windows by workspace in switch menu.

Doug Torrance <[email protected]>
Newsgroups gmane.compw.window-managers.windowmaker.devel
Message-ID <[email protected]>
Previously, this sorting failed when one window was moved to another
workspace.

This fixes Debian bug #280851 [1].

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=280851
---
 src/switchmenu.c | 27 +++++++++++----------------
 1 file changed, 11 insertions(+), 16 deletions(-)

diff --git a/src/switchmenu.c b/src/switchmenu.c
index a614e4f..3106595 100644
--- a/src/switchmenu.c
+++ b/src/switchmenu.c
@@ -149,27 +149,22 @@ void OpenSwitchMenu(WScreen * scr, int x, int y, int keyboard)
 
 static int menuIndexForWindow(WMenu * menu, WWindow * wwin, int old_pos)
 {
-	int idx;
+	int idx, move_down;
 
 	if (menu->entry_no <= old_pos)
 		return -1;
 
-#define WS(i)  ((WWindow*)menu->entries[i]->clientdata)->frame->workspace
-	if (old_pos >= 0) {
-		if (WS(old_pos) >= wwin->frame->workspace
-		    && (old_pos == 0 || WS(old_pos - 1) <= wwin->frame->workspace)) {
-			return old_pos;
-		}
-	}
-#undef WS
-
-	for (idx = 0; idx < menu->entry_no; idx++) {
+	for (idx = 0, move_down = 0; idx < menu->entry_no; idx++) {
 		WWindow *tw = (WWindow *) menu->entries[idx]->clientdata;
 
-		if (!IS_OMNIPRESENT(tw)
-		    && tw->frame->workspace > wwin->frame->workspace) {
-			break;
-		}
+		/* Is the window moving down in the menu?  If so, we'll need to
+		   adjust its new index by 1. */
+		if (tw == wwin)
+			move_down = 1;
+
+		if (IS_OMNIPRESENT(tw) || (tw != wwin &&
+					   tw->frame->workspace >= wwin->frame->workspace))
+			return idx - move_down;
 	}
 
 	return idx;
@@ -215,7 +210,7 @@ void UpdateSwitchMenu(WScreen * scr, WWindow * wwin, int action)
 		if (IS_OMNIPRESENT(wwin))
 			idx = -1;
 		else {
-			idx = menuIndexForWindow(switchmenu, wwin, -1);
+			idx = menuIndexForWindow(switchmenu, wwin, 0);
 		}
 
 		entry = wMenuInsertCallback(switchmenu, idx, t, focusWindow, wwin);
-- 
2.5.0


-- 
To unsubscribe, send mail to [email protected].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.