mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-18 20:10:29 +01:00
wmaker: Maintain sorting of windows by workspace in switch menu.
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
This commit is contained in:
committed by
Carlos R. Mafra
parent
fd19456d66
commit
2f33b3c2bc
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user