From 9013e6e466072a608575108fc7c7edc71d157424 Mon Sep 17 00:00:00 2001 From: FredKiefer Date: Tue, 21 Jun 2005 22:48:21 +0000 Subject: [PATCH] Corrected handling of screen size for menu. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@21339 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 10 +++++++++- Source/NSMenu.m | 34 +++++++++++++++------------------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2f365eba5..4ea310f10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,14 @@ +2005-06-22 Fred Kiefer + + * Source/NSMenu.m (-setGeometry): Use [NSWindow + setFrameFromString:] when possible to position the menu windows + relative to the screen size. + (-isPartlyOffScreen_OFFSCREEN, -setGeometry, -shiftOnScreen) Use + current screen and visibleFrame of screen instead of frame. + 2005-06-18 Fred Kiefer - * Source/NSColor.m(+colorFromString:): Make sure the scanner is + * Source/NSColor.m (+colorFromString:): Make sure the scanner is always released. Fixes bug reported by Benhur Stein . diff --git a/Source/NSMenu.m b/Source/NSMenu.m index b3d14c0a7..ca2a88933 100644 --- a/Source/NSMenu.m +++ b/Source/NSMenu.m @@ -1157,9 +1157,6 @@ static NSNotificationCenter *nc; @implementation NSMenu (GNUstepExtra) -#define IS_OFFSCREEN(WINDOW) \ - !(NSContainsRect([[NSScreen mainScreen] frame], [WINDOW frame])) - - (void) setTornOff: (BOOL)flag { NSMenu *supermenu; @@ -1224,7 +1221,10 @@ static NSNotificationCenter *nc; - (BOOL) isPartlyOffScreen { - return IS_OFFSCREEN ([self window]); + NSWindow *window; + + window = [self window]; + return !NSContainsRect([[window screen] visibleFrame], [window frame]); } - (void) _performMenuClose: (id)sender @@ -1326,19 +1326,14 @@ static NSNotificationCenter *nc; - (void) setGeometry { NSString *key; - NSUserDefaults *defaults; - NSDictionary *menuLocations; - NSString *location; - NSPoint origin; - NSScanner *scanner; - int value; - origin = NSMakePoint (0, [[NSScreen mainScreen] frame].size.height - - [_aWindow frame].size.height); - if (nil != (key = [self _locationKey])) { + NSUserDefaults *defaults; + NSDictionary *menuLocations; + NSString *location; + defaults = [NSUserDefaults standardUserDefaults]; menuLocations = [defaults objectForKey: NSMenuLocationsKey]; @@ -1349,14 +1344,15 @@ static NSNotificationCenter *nc; if (location && [location isKindOfClass: [NSString class]]) { - scanner = [NSScanner scannerWithString: location]; - [scanner scanInt: &value]; - origin.x = value; - [scanner scanInt: &value]; - origin.y = value; + [_aWindow setFrameFromString: location]; + [_bWindow setFrameFromString: location]; + return; } } + origin = NSMakePoint(0, [[_aWindow screen] visibleFrame].size.height + - [_aWindow frame].size.height); + [_aWindow setFrameOrigin: origin]; [_bWindow setFrameOrigin: origin]; } @@ -1479,7 +1475,7 @@ static NSNotificationCenter *nc; { NSWindow *theWindow = _transient ? _bWindow : _aWindow; NSRect frameRect = [theWindow frame]; - NSRect screenRect = [[NSScreen mainScreen] frame]; + NSRect screenRect = [[theWindow screen] visibleFrame]; NSPoint vector = {0.0, 0.0}; BOOL moveIt = NO;