This patch adds the ability to completely unmaximize, i.e., clear the maximized
flag and return to the original geometry, a maximized window that is moved.
This behavior mirrors that of other common desktop enviroments, e.g., GNOME,
Unity, and Windows.

To enable this feature, set "UnmaximizeOnMove = YES" in
~/GNUstep/Defaults/WindowMaker.
---
 src/WindowMaker.h |  1 +
 src/defaults.c    |  2 ++
 src/moveres.c     | 18 ++++++++++++++++--
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/WindowMaker.h b/src/WindowMaker.h
index a93a64d..30eca95 100644
--- a/src/WindowMaker.h
+++ b/src/WindowMaker.h
@@ -353,6 +353,7 @@ extern struct WPreferences {
     char no_animations;                       /* enable/disable animations */
     char no_autowrap;                 /* wrap workspace when window is moved 
to the edge */
     char window_snapping;              /* enable window snapping */
+    char unmaximize_on_move;           /* unmaximize a maximized window when 
it is moved */
 
     char highlight_active_app;         /* show the focused app by highlighting 
its icon */
     char auto_arrange_icons;          /* automagically arrange icons */
diff --git a/src/defaults.c b/src/defaults.c
index 7349443..8dadc21 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -452,6 +452,8 @@ WDefaultEntry optionList[] = {
            &wPreferences.no_autowrap, getBool, NULL, NULL, NULL},
        {"WindowSnapping", "NO", NULL,
            &wPreferences.window_snapping, getBool, NULL, NULL, NULL},
+       {"UnmaximizeOnMove", "NO", NULL,
+           &wPreferences.unmaximize_on_move, getBool, NULL, NULL, NULL},
        {"HighlightActiveApp", "YES", NULL,
            &wPreferences.highlight_active_app, getBool, NULL, NULL, NULL},
        {"AutoArrangeIcons", "NO", NULL,
diff --git a/src/moveres.c b/src/moveres.c
index 64dc50c..34de9b3 100644
--- a/src/moveres.c
+++ b/src/moveres.c
@@ -1724,8 +1724,22 @@ int wMouseMoveWindow(WWindow * wwin, XEvent * ev)
                                   || abs(ev->xmotion.y_root - 
event.xmotion.y_root) >= MOVE_THRESHOLD) {
 
                                if (wwin->flags.maximized) {
-                                       wwin->flags.maximized = 0;
-                                       wwin->flags.old_maximized = 0;
+                                       if (wPreferences.unmaximize_on_move) {
+                                               float titlebar_ratio;
+                                               int new_x, new_y;
+
+                                               titlebar_ratio = 
(moveData.mouseX - wwin->frame_x) /
+                                                       
(float)wwin->frame->core->width;
+                                               new_y = wwin->frame_y;
+                                               wUnmaximizeWindow(wwin);
+                                               new_x = moveData.mouseX - 
titlebar_ratio * wwin->frame->core->width;
+                                               wWindowMove(wwin, new_x, new_y);
+                                               moveData.realX = moveData.calcX 
= wwin->frame_x;
+                                               moveData.realY = moveData.calcY 
= wwin->frame_y;
+                                       } else {
+                                               wwin->flags.maximized = 0;
+                                               wwin->flags.old_maximized = 0;
+                                       }
                                }
 
                                XChangeActivePointerGrab(dpy, ButtonMotionMask
-- 
1.9.1


-- 
To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.

Reply via email to