1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 04:20:27 +01:00

Fixed wrong (re)stored dimensions for unmaximized window.

This commit is contained in:
2017-02-13 20:31:11 +01:00
committed by Carlos R. Mafra
parent 28da4c98e3
commit 160f879cce
3 changed files with 28 additions and 24 deletions

24
NEWS
View File

@@ -4,17 +4,6 @@ NEWS for veteran Window Maker users
-- 0.95.8 -- 0.95.8
Snapping a window to the top
----------------------------
You can now choose whether snapping a window to the top edge of the screen
maximizes it to the top half (the previous and default behavior) or to the
full screen by setting "SnapToTopMaximizesFullscreen" to "NO" or "YES",
respectively. This setting can also be changed by unchecking or checking
"Snapping a window to the top maximizes it to the full screen" in the
"Expert User Preferences" tab in WPrefs.app.
Move half-maximized windows between the screens Move half-maximized windows between the screens
----------------------------------------------- -----------------------------------------------
@@ -97,10 +86,21 @@ on the layout of displays.
Note, that only windows that are half-maximized vertically or horizontally can Note, that only windows that are half-maximized vertically or horizontally can
be moved to another screen due to the fact, that direction of movement of be moved to another screen due to the fact, that direction of movement of
quarter-maximized windows is ambiguous. As for vertical/horizontal-maximize, quarter-maximized windows is ambiguous. As for vertical/horizontal-maximize,
since doesn't move the window but only strech it vertically/horizontally this since doesn't move the window but only stretch it vertically/horizontally this
feature also doesn't apply. feature also doesn't apply.
Snapping a window to the top
----------------------------
You can now choose whether snapping a window to the top edge of the screen
maximizes it to the top half (the previous and default behavior) or to the
full screen by setting "SnapToTopMaximizesFullscreen" to "NO" or "YES",
respectively. This setting can also be changed by unchecking or checking
"Snapping a window to the top maximizes it to the full screen" in the
"Expert User Preferences" tab in WPrefs.app.
-- 0.95.7 -- 0.95.7
Window snapping Window snapping

View File

@@ -100,7 +100,7 @@ static const struct {
{ N_("Snapping a window to the top maximizes it to the full screen."), { N_("Snapping a window to the top maximizes it to the full screen."),
/* default: */ False, OPTION_WMAKER, "SnapToTopMaximizesFullscreen" }, /* default: */ False, OPTION_WMAKER, "SnapToTopMaximizesFullscreen" },
{ N_("Allow move half-maximized windows betweem multiple screens."), { N_("Allow move half-maximized windows between multiple screens."),
/* default: */ False, OPTION_WMAKER, "MoveHalfMaximizedWindowsBetweenScreens" }, /* default: */ False, OPTION_WMAKER, "MoveHalfMaximizedWindowsBetweenScreens" },
{ N_("Open dialogs in the same workspace as their owners."), { N_("Open dialogs in the same workspace as their owners."),

View File

@@ -393,6 +393,9 @@ void wMaximizeWindow(WWindow *wwin, int directions, int head)
totalArea.y2 = scr->scr_height; totalArea.y2 = scr->scr_height;
totalArea.x1 = 0; totalArea.x1 = 0;
totalArea.y1 = 0; totalArea.y1 = 0;
/* ignore provided head information for toggling full maximize/unmaximize */
if (directions & MAX_KEYBOARD)
head = wGetHeadForWindow(wwin);
usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True); usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True);
/* Only save directions, not kbd or xinerama hints */ /* Only save directions, not kbd or xinerama hints */
@@ -490,6 +493,7 @@ void handleMaximize(WWindow *wwin, int directions)
int effective = requested ^ current; int effective = requested ^ current;
int flags = directions & ~requested; int flags = directions & ~requested;
int head = wGetHeadForWindow(wwin); int head = wGetHeadForWindow(wwin);
int dest_head = -1;
if (!effective) { if (!effective) {
/* allow wMaximizeWindow to restore the Maximusized size */ /* allow wMaximizeWindow to restore the Maximusized size */
@@ -503,43 +507,43 @@ void handleMaximize(WWindow *wwin, int directions)
* clear on which direction user intend to move such window. */ * clear on which direction user intend to move such window. */
if ((current & MAX_VERTICAL) || (current & MAX_HORIZONTAL)) { if ((current & MAX_VERTICAL) || (current & MAX_HORIZONTAL)) {
if (requested & MAX_LEFTHALF && current & MAX_LEFTHALF) { if (requested & MAX_LEFTHALF && current & MAX_LEFTHALF) {
head = wGetHeadRelativeToCurrentHead(wwin->screen_ptr, dest_head = wGetHeadRelativeToCurrentHead(wwin->screen_ptr,
head, DIRECTION_LEFT); head, DIRECTION_LEFT);
if (head != -1) { if (dest_head != -1) {
effective |= MAX_RIGHTHALF; effective |= MAX_RIGHTHALF;
effective |= MAX_VERTICAL; effective |= MAX_VERTICAL;
effective &= ~(MAX_HORIZONTAL | MAX_LEFTHALF); effective &= ~(MAX_HORIZONTAL | MAX_LEFTHALF);
} }
} else if (requested & MAX_RIGHTHALF && } else if (requested & MAX_RIGHTHALF &&
current & MAX_RIGHTHALF) { current & MAX_RIGHTHALF) {
head = wGetHeadRelativeToCurrentHead(wwin->screen_ptr, dest_head = wGetHeadRelativeToCurrentHead(wwin->screen_ptr,
head, DIRECTION_RIGHT); head, DIRECTION_RIGHT);
if (head != -1) { if (dest_head != -1) {
effective |= MAX_LEFTHALF; effective |= MAX_LEFTHALF;
effective |= MAX_VERTICAL; effective |= MAX_VERTICAL;
effective &= ~(MAX_HORIZONTAL | MAX_RIGHTHALF); effective &= ~(MAX_HORIZONTAL | MAX_RIGHTHALF);
} }
} else if (requested & MAX_TOPHALF && current & MAX_TOPHALF) { } else if (requested & MAX_TOPHALF && current & MAX_TOPHALF) {
head = wGetHeadRelativeToCurrentHead(wwin->screen_ptr, dest_head = wGetHeadRelativeToCurrentHead(wwin->screen_ptr,
head, DIRECTION_UP); head, DIRECTION_UP);
if (head != -1) { if (dest_head != -1) {
effective |= MAX_BOTTOMHALF; effective |= MAX_BOTTOMHALF;
effective |= MAX_HORIZONTAL; effective |= MAX_HORIZONTAL;
effective &= ~(MAX_VERTICAL | MAX_TOPHALF); effective &= ~(MAX_VERTICAL | MAX_TOPHALF);
} }
} else if (requested & MAX_BOTTOMHALF && } else if (requested & MAX_BOTTOMHALF &&
current & MAX_BOTTOMHALF) { current & MAX_BOTTOMHALF) {
head = wGetHeadRelativeToCurrentHead(wwin->screen_ptr, dest_head = wGetHeadRelativeToCurrentHead(wwin->screen_ptr,
head, DIRECTION_DOWN); head, DIRECTION_DOWN);
if (head != -1) { if (dest_head != -1) {
effective |= MAX_TOPHALF; effective |= MAX_TOPHALF;
effective |= MAX_HORIZONTAL; effective |= MAX_HORIZONTAL;
effective &= ~(MAX_VERTICAL | MAX_BOTTOMHALF); effective &= ~(MAX_VERTICAL | MAX_BOTTOMHALF);
} }
} if (head == -1) } if (dest_head == -1)
wUnmaximizeWindow(wwin); wUnmaximizeWindow(wwin);
else else
wMaximizeWindow(wwin, effective | flags, head); wMaximizeWindow(wwin, effective | flags, dest_head);
} else } else
wUnmaximizeWindow(wwin); wUnmaximizeWindow(wwin);
} else } else