mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-20 21:08:08 +01:00
Clean up maximization and un-maximization logic
We should not try to un-maximize the windows from inside the function wMaximizeWindow(), as that makes no sense. If the window is already maximized then we don't call wMaximizeWindow() anymore and call wUnmaximizeWindow() instead, which will use the old geometry regardless of which maximization is active (horizontal, vertical, maximus, etc). And the old geometry now is also saved when we enter wMaximizeWindow(). So when we call wMaximizeWindow() or wUnmaximizeWindow() we really mean "maximize to the specified state" or "go back to whatever old geometry coordinates we had before".
This commit is contained in:
54
src/event.c
54
src/event.c
@@ -1434,80 +1434,62 @@ static void handleKeyPress(XEvent * event)
|
||||
break;
|
||||
case WKBD_MAXIMIZE:
|
||||
if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) {
|
||||
int newdir = (MAX_VERTICAL | MAX_HORIZONTAL);
|
||||
|
||||
CloseWindowMenu(scr);
|
||||
|
||||
if (wwin->flags.maximized == newdir) {
|
||||
if (wwin->flags.maximized == (MAX_VERTICAL | MAX_HORIZONTAL))
|
||||
wUnmaximizeWindow(wwin);
|
||||
} else {
|
||||
wMaximizeWindow(wwin, newdir | MAX_KEYBOARD);
|
||||
}
|
||||
else
|
||||
wMaximizeWindow(wwin, MAX_VERTICAL | MAX_HORIZONTAL | MAX_KEYBOARD);
|
||||
}
|
||||
break;
|
||||
case WKBD_VMAXIMIZE:
|
||||
if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) {
|
||||
int newdir = (MAX_VERTICAL ^ wwin->flags.maximized);
|
||||
|
||||
CloseWindowMenu(scr);
|
||||
|
||||
if (newdir) {
|
||||
wMaximizeWindow(wwin, newdir | MAX_KEYBOARD);
|
||||
} else {
|
||||
if (wwin->flags.maximized == MAX_VERTICAL)
|
||||
wUnmaximizeWindow(wwin);
|
||||
}
|
||||
else
|
||||
wMaximizeWindow(wwin, MAX_VERTICAL | MAX_KEYBOARD);
|
||||
}
|
||||
break;
|
||||
case WKBD_HMAXIMIZE:
|
||||
if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) {
|
||||
int newdir = (MAX_HORIZONTAL ^ wwin->flags.maximized);
|
||||
|
||||
CloseWindowMenu(scr);
|
||||
|
||||
if (newdir) {
|
||||
wMaximizeWindow(wwin, newdir | MAX_KEYBOARD);
|
||||
} else {
|
||||
if (wwin->flags.maximized == MAX_HORIZONTAL)
|
||||
wUnmaximizeWindow(wwin);
|
||||
}
|
||||
else
|
||||
wMaximizeWindow(wwin, MAX_HORIZONTAL | MAX_KEYBOARD);
|
||||
}
|
||||
break;
|
||||
case WKBD_LHMAXIMIZE:
|
||||
if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) {
|
||||
int newdir = (MAX_VERTICAL|MAX_LEFTHALF);
|
||||
|
||||
CloseWindowMenu(scr);
|
||||
|
||||
if (wwin->flags.maximized == newdir) {
|
||||
if (wwin->flags.maximized == MAX_VERTICAL | MAX_LEFTHALF)
|
||||
wUnmaximizeWindow(wwin);
|
||||
} else {
|
||||
wMaximizeWindow(wwin, newdir|MAX_KEYBOARD);
|
||||
}
|
||||
else
|
||||
wMaximizeWindow(wwin, MAX_VERTICAL | MAX_LEFTHALF | MAX_KEYBOARD);
|
||||
}
|
||||
break;
|
||||
case WKBD_RHMAXIMIZE:
|
||||
if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) {
|
||||
int newdir = (MAX_VERTICAL|MAX_RIGHTHALF);
|
||||
|
||||
CloseWindowMenu(scr);
|
||||
|
||||
if (wwin->flags.maximized == newdir) {
|
||||
if (wwin->flags.maximized == MAX_VERTICAL | MAX_RIGHTHALF)
|
||||
wUnmaximizeWindow(wwin);
|
||||
} else {
|
||||
wMaximizeWindow(wwin, newdir|MAX_KEYBOARD);
|
||||
}
|
||||
else
|
||||
wMaximizeWindow(wwin, MAX_VERTICAL | MAX_RIGHTHALF | MAX_KEYBOARD);
|
||||
}
|
||||
break;
|
||||
case WKBD_MAXIMUS:
|
||||
if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) {
|
||||
int newdir = MAX_MAXIMUS;
|
||||
|
||||
CloseWindowMenu(scr);
|
||||
|
||||
if (wwin->flags.maximized == newdir) {
|
||||
if (wwin->flags.maximized == MAX_MAXIMUS)
|
||||
wUnmaximizeWindow(wwin);
|
||||
} else {
|
||||
wMaximizeWindow(wwin, newdir|MAX_KEYBOARD);
|
||||
}
|
||||
else
|
||||
wMaximizeWindow(wwin, MAX_MAXIMUS | MAX_KEYBOARD);
|
||||
}
|
||||
break;
|
||||
case WKBD_RAISE:
|
||||
|
||||
Reference in New Issue
Block a user