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