=== modified file 'src/core/constraints.c'
--- src/core/constraints.c	2008-02-27 04:39:10 +0000
+++ src/core/constraints.c	2008-05-20 01:33:29 +0000
@@ -691,8 +691,7 @@
                         ConstraintPriority  priority,
                         gboolean            check_only)
 {
-  MetaRectangle target_size;
-  MetaRectangle min_size, max_size;
+  MetaRectangle min_size, max_size, work_area;
   gboolean hminbad, vminbad;
   gboolean horiz_equal, vert_equal;
   gboolean constraint_already_satisfied;
@@ -704,51 +703,20 @@
   if (!window->maximized_horizontally && !window->maximized_vertically)
     return TRUE;
 
-  /* Calculate target_size = maximized size of (window + frame) */
-  if (window->maximized_horizontally && window->maximized_vertically)
-    target_size = info->work_area_xinerama;
-  else
-    {
-      /* Amount of maximization possible in a single direction depends
-       * on which struts could occlude the window given its current
-       * position.  For example, a vertical partial strut on the right
-       * is only relevant for a horizontally maximized window when the
-       * window is at a vertical position where it could be occluded
-       * by that partial strut.
-       */
-      MetaDirection  direction;
-      GSList        *active_workspace_struts;
-
-      if (window->maximized_horizontally)
-        direction = META_DIRECTION_HORIZONTAL;
-      else
-        direction = META_DIRECTION_VERTICAL;
-      active_workspace_struts = window->screen->active_workspace->all_struts;
-
-      target_size = info->current;
-      extend_by_frame (&target_size, info->fgeom);
-      meta_rectangle_expand_to_avoiding_struts (&target_size,
-                                                &info->entire_xinerama,
-                                                direction,
-                                                active_workspace_struts);
-   }
-  /* Now make target_size = maximized size of client window */
-  unextend_by_frame (&target_size, info->fgeom);
-
-  /* Check min size constraints; max size constraints are ignored for maximized
-   * windows, as per bug 327543.
-   */
+  work_area = info->work_area_xinerama;
+  unextend_by_frame (&work_area, info->fgeom);
   get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
-  hminbad = target_size.width < min_size.width && window->maximized_horizontally;
-  vminbad = target_size.height < min_size.height && window->maximized_vertically;
+
+  hminbad = work_area.width < min_size.width && window->maximized_horizontally;
+  vminbad = work_area.height < min_size.height && window->maximized_vertically;
   if (hminbad || vminbad)
     return TRUE;
 
   /* Determine whether constraint is already satisfied; exit if it is */
-  horiz_equal = target_size.x      == info->current.x &&
-                target_size.width  == info->current.width;
-  vert_equal  = target_size.y      == info->current.y &&
-                target_size.height == info->current.height;
+  horiz_equal = work_area.x      == info->current.x &&
+                work_area.width  == info->current.width;
+  vert_equal  = work_area.y      == info->current.y &&
+                work_area.height == info->current.height;
   constraint_already_satisfied =
     (horiz_equal || !window->maximized_horizontally) &&
     (vert_equal  || !window->maximized_vertically);
@@ -758,13 +726,13 @@
   /*** Enforce constraint ***/
   if (window->maximized_horizontally)
     {
-      info->current.x      = target_size.x;
-      info->current.width  = target_size.width;
+      info->current.x      = work_area.x;
+      info->current.width  = work_area.width;
     }
   if (window->maximized_vertically)
     {
-      info->current.y      = target_size.y;
-      info->current.height = target_size.height;
+      info->current.y      = work_area.y;
+      info->current.height = work_area.height;
     }
   return TRUE;
 }

