Author: rmottola
Date: Mon Dec 29 13:49:17 2014
New Revision: 38270

URL: http://svn.gna.org/viewcvs/gnustep?rev=38270&view=rev
Log:
Fix off-by-one array access, return NSZeroRect immediately if no other 
operations are running

Modified:
    apps/gworkspace/trunk/ChangeLog
    apps/gworkspace/trunk/Operation/Operation.m

Modified: apps/gworkspace/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/apps/gworkspace/trunk/ChangeLog?rev=38270&r1=38269&r2=38270&view=diff
==============================================================================
--- apps/gworkspace/trunk/ChangeLog     (original)
+++ apps/gworkspace/trunk/ChangeLog     Mon Dec 29 13:49:17 2014
@@ -1,3 +1,8 @@
+2014-12-29 Riccardo Mottola <r...@gnu.org>
+
+       * Operation/Operation.m (rectForFileOpWindow)
+       Fix off-by-one array access, return NSZeroRect immediately if no other 
operations are running.
+
 2014-11-16 Riccardo Mottola <r...@gnu.org>
 
        * Operation/FileOpInfo.m

Modified: apps/gworkspace/trunk/Operation/Operation.m
URL: 
http://svn.gna.org/viewcvs/gnustep/apps/gworkspace/trunk/Operation/Operation.m?rev=38270&r1=38269&r2=38270&view=diff
==============================================================================
--- apps/gworkspace/trunk/Operation/Operation.m (original)
+++ apps/gworkspace/trunk/Operation/Operation.m Mon Dec 29 13:49:17 2014
@@ -362,38 +362,46 @@
   NSRect scr = [[NSScreen mainScreen] visibleFrame];
   NSRect wrect = NSZeroRect;
   NSUInteger i;  
-
-  #define WMARGIN 50
-  #define WSHIFT 50
-
+  
+#define WMARGIN 40
+#define WSHIFT 40
+  
+  if ([fileOperations count] == 0)
+    return wrect;
+  
   scr.origin.x += WMARGIN;
   scr.origin.y += WMARGIN;
   scr.size.width -= (WMARGIN * 2);
   scr.size.height -= (WMARGIN * 2);
-
-  for (i = [fileOperations count]; i > 0; i--) {
-    FileOpInfo *op = [fileOperations objectAtIndex: i];
-
-    if ([op win]) {
-      NSRect wr;
-
-      [op getWinRect: &wr];
-      if (NSEqualRects(wr, NSZeroRect) == NO) {
-        wrect = NSMakeRect(wr.origin.x + WSHIFT, 
-                           wr.origin.y - wr.size.height - WSHIFT,
-                           wr.size.width,
-                           wr.size.height);
-
-        if (NSContainsRect(scr, wrect) == NO) {
-          wrect = NSMakeRect(scr.origin.x, 
-                             scr.size.height - wr.size.height,
-                             wr.size.width, 
-                             wr.size.height);
-          break;
+  
+  i = [fileOperations count];
+  while (i > 0 && NSEqualRects(wrect, NSZeroRect) == YES)
+    {
+      FileOpInfo *op = [fileOperations objectAtIndex: i-1];
+  
+      if ([op win])
+        {
+          NSRect wr;
+
+          [op getWinRect: &wr];
+          if (NSEqualRects(wr, NSZeroRect) == NO)
+            {
+              wrect = NSMakeRect(wr.origin.x + WSHIFT, 
+                                 wr.origin.y - wr.size.height - WSHIFT,
+                                 wr.size.width,
+                                 wr.size.height);
+              
+              if (NSContainsRect(scr, wrect) == NO)
+                {
+                  wrect = NSMakeRect(scr.origin.x, 
+                                     scr.size.height - wr.size.height,
+                                     wr.size.width, 
+                                     wr.size.height);
+                }
+            }
         }
-      }
-    }
-  }
+      i--;
+    }
 
   return wrect;
 }


_______________________________________________
Gnustep-cvs mailing list
Gnustep-cvs@gna.org
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to