Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/metacity/ChangeLog,v
retrieving revision 1.852
diff -p -u -r1.852 ChangeLog
--- ChangeLog	13 Aug 2004 00:38:53 -0000	1.852
+++ ChangeLog	15 Aug 2004 15:23:40 -0000
@@ -1,3 +1,10 @@
+2004-08-15  Rob Adams  <readams@readams.net>
+
+	* src/window.c (meta_window_update_struts): Allow struts larger
+	than 1/2 the screen width/height, as long as there's a minimum
+	sized gap between them.  Patch from Bill Haneman <billh@gnome.org>
+	for bug #144126.
+	
 2004-08-13 Gurban M. Tewekgeli  <gmtavakkoli@yahoo.com>
 	* po/tk.po: Added Turkmen translation.
 	* configure.in: Added "tk" to ALL_LINGUAS.
Index: src/window.c
===================================================================
RCS file: /cvs/gnome/metacity/src/window.c,v
retrieving revision 1.338
diff -p -u -r1.338 window.c
--- src/window.c	8 Aug 2004 16:18:52 -0000	1.338
+++ src/window.c	15 Aug 2004 15:23:43 -0000
@@ -5248,7 +5248,14 @@ meta_window_update_struts (MetaWindow *w
   MetaRectangle new_top;
   MetaRectangle new_bottom;
 
-#define MIN_EMPTY (75)
+  /**
+   * This gap must be kept to at least 75 pixels, since otherwise
+   * struts on opposite sides of the screen left/right could interfere
+   * in each other in a way that makes it so there is no feasible
+   * solution to the constraint satisfaction problem.  See
+   * constraints.c.
+   */
+#define MIN_EMPTY (76)
   
   meta_verbose ("Updating struts for %s\n", window->desc);
   
@@ -5298,15 +5305,16 @@ meta_window_update_struts (MetaWindow *w
         }
       else
         {
+          int gap;
+          gap = window->screen->width - struts[0] - struts[1];
+          gap -= MIN_EMPTY;
           new_has_struts = TRUE;
-          new_left.width = MIN ((int)struts[0], 
-                                window->screen->width/2 - MIN_EMPTY);
-          new_right.width = MIN ((int)struts[1], 
-                                 window->screen->width/2 - MIN_EMPTY);
-          new_top.height = MIN ((int)struts[2], 
-                                window->screen->height/2 - MIN_EMPTY);
-          new_bottom.height = MIN ((int)struts[3], 
-                                   window->screen->height/2 - MIN_EMPTY);
+          new_left.width = (int) struts[0] + MIN (0, gap/2);
+          new_right.width = (int) struts[1] + MIN (0, gap/2);
+          gap = window->screen->width - struts[0] - struts[1];
+          gap -= MIN_EMPTY;
+          new_top.height = (int)struts[2] + MIN (0, gap/2);
+          new_bottom.height = (int)struts[3] + MIN (0, gap/2);
           new_right.x = window->screen->width - 
             new_right.width;
           new_bottom.y = window->screen->height - 
@@ -5350,22 +5358,23 @@ meta_window_update_struts (MetaWindow *w
             }
           else
             {
+              int gap;
+              gap = window->screen->width - struts[0] - struts[1];
+              gap -= MIN_EMPTY;
               new_has_struts = TRUE;
-              new_left.width = MIN ((int)struts[0], 
-                                    window->screen->width/2 - MIN_EMPTY);
-              new_right.width = MIN ((int)struts[1], 
-                                     window->screen->width/2 - MIN_EMPTY);
-              new_top.height = MIN ((int)struts[2], 
-                                    window->screen->height/2 - MIN_EMPTY);
-              new_bottom.height = MIN ((int)struts[3], 
-                                       window->screen->height/2 - MIN_EMPTY);
+              new_left.width = (int) struts[0] + MIN (0, gap/2);
+              new_right.width = (int) struts[1] + MIN (0, gap/2);
+              gap = window->screen->width - struts[0] - struts[1];
+              gap -= MIN_EMPTY;
+              new_top.height = (int)struts[2] + MIN (0, gap/2);
+              new_bottom.height = (int)struts[3] + MIN (0, gap/2);
               new_left.x = 0;
               new_right.x = window->screen->width - 
                 new_right.width;
               new_top.y = 0;
               new_bottom.y = window->screen->height -
                 new_bottom.height;
-          
+              
               meta_verbose ("_NET_WM_STRUT struts %d %d %d %d for window %s\n",
                             new_left.width,
                             new_right.width,
