[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[E-devel] [PATCH] Unmaximize Handling



Small patch to change the logic if a configure_request is called by a
maximized window. We don't save the value anymore as its better to just
ignore them from a UI point of view.

Additionally, don't resize below minimum size on unmaximise (can happen
if min size changes whilst max'ed).

metrics
Index: TODO
===================================================================
RCS file: /var/cvs/e/e17/apps/e/TODO,v
retrieving revision 1.481
diff -u -r1.481 TODO
--- TODO	18 Oct 2006 15:05:26 -0000	1.481
+++ TODO	19 Oct 2006 03:15:56 -0000
@@ -8,10 +8,6 @@
   BUGS / FIXES
 -------------------------------------------------------------------------------
 
-* BUG: if maximize policy == fullscreen then weird things happen on
-  maximize and unmaximize with gvim (probably gvim tries to resize itself
-  on maximize and it screws e's account keeping) but on unmax it ends up
-  just moving a bit, not going down in size.
 * BUG: smart placement seems to screw up if a shelf is at the top of the screen
 * BUG: e17 screen res diaolg doesnt work under xephyr - why?
 * BUG: "match this window only" doesnt fall back to other unused remembers
Index: src/bin/e_border.c
===================================================================
RCS file: /var/cvs/e/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.555
diff -u -r1.555 e_border.c
--- src/bin/e_border.c	17 Oct 2006 13:49:47 -0000	1.555
+++ src/bin/e_border.c	19 Oct 2006 03:15:57 -0000
@@ -1684,7 +1684,7 @@
    if ((bd->shaded) || (bd->shading)) return;
    if (bd->fullscreen)
      e_border_unfullscreen(bd);
-   /* Only allow changes in vertical/ horisontal maximization */
+   /* Only allow changes in vertical/ horizontal maximization */
    if (((bd->maximized & E_MAXIMIZE_DIRECTION) == (max & E_MAXIMIZE_DIRECTION)) || 
        ((bd->maximized & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_BOTH)) return;
    if (bd->new_client)
@@ -1899,18 +1899,29 @@
 	if (dir & E_MAXIMIZE_HORIZONTAL)
 	  {
 	     /* Remove vertical */
+	     int w,h;
+
 	     signal = 0;
 	     bd->maximized &= ~E_MAXIMIZE_VERTICAL;
-	     e_border_move_resize(bd, bd->x, bd->saved.y, bd->w, bd->saved.h);
+	     w = bd->w;
+	     h = bd->saved.h;
+	     e_border_resize_limit(bd, &w, &h);
+	     e_border_resize_limit(bd, &w, &h);
+	     e_border_move_resize(bd, bd->x, bd->saved.y, w, h);
 	     bd->saved.y = bd->saved.h = 0;
 	     e_hints_window_size_set(bd);
 	  }
 	else if (dir & E_MAXIMIZE_VERTICAL)
 	  {
-	     /* Remove horisontal */
+	     /* Remove horizontal */
+	     int w,h;
+
 	     signal = 0;
 	     bd->maximized &= ~E_MAXIMIZE_HORIZONTAL;
-	     e_border_move_resize(bd, bd->saved.x, bd->y, bd->saved.w, bd->h);
+	     w = bd->saved.w;
+	     h = bd->h;
+	     e_border_resize_limit(bd, &w, &h);
+	     e_border_move_resize(bd, bd->saved.x, bd->y, w, h);
 	     bd->saved.x = bd->saved.w = 0;
 	     e_hints_window_size_set(bd);
 	  }
@@ -1928,6 +1939,7 @@
 	     else h = bd->h;
 	     
 	     bd->maximized = E_MAXIMIZE_NONE;
+	     e_border_resize_limit(bd, &w, &h);
 	     e_border_move_resize(bd, x, y, w, h);
 	     bd->saved.x = bd->saved.y = bd->saved.w = bd->saved.h = 0;
 	     e_hints_window_size_unset(bd);
@@ -3544,12 +3556,7 @@
 	       }
 	     else
 	       {
-		  if ((bd->maximized & E_MAXIMIZE_TYPE) != E_MAXIMIZE_NONE)
-		    {
-		       bd->saved.w = w;
-		       bd->saved.h = h;
-		    }
-		  else
+		  if ((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_NONE)
 		    e_border_resize(bd, w, h);
 	       }
 	  }