diff --git a/ChangeLog b/ChangeLog index 76cb33bbc..025f6a4e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2002-09-15 Pierre-Yves Rivaille + + * Source/NSMenuView.m: + New private method [NSMenuView -_itemCell] in newly created + GNUstepPrivate category. + * Source/NSMenu.m: + Add GNUstepPrivate interface of NSMenuView. + [NSMenu -_setOwnedByPopUp:]: update itemCells' menuView + (fix NSPopUpButtonCell-decoding problem). + * Source/NSPopUpButtonCell.m + ([NSPopUpButtonCell -synchronizeTitleAndSelectedItem]): + Fix "mouseUp outside of menu" problem. Now the previous + selected item stay selected. + ([NSPopUpButtonCell -initWithCoder:]): + Set the selectedItem properly. + + 2002-09-15 13:17 Alexander Malmberg * Source/NSImage.m (compositeToPoint:fromRect:operation:,, diff --git a/Source/NSMenu.m b/Source/NSMenu.m index 7344b5eca..42323cf46 100644 --- a/Source/NSMenu.m +++ b/Source/NSMenu.m @@ -70,6 +70,11 @@ @end +@interface NSMenuView (GNUstepPrivate) +- (NSArray *)_itemCells; +@end + + static NSZone *menuZone = NULL; static NSString *NSMenuLocationsKey = @"NSMenuLocations"; static NSNotificationCenter *nc; @@ -1338,7 +1343,17 @@ static NSNotificationCenter *nc; [_aWindow setLevel: NSPopUpMenuWindowLevel]; [_bWindow setLevel: NSPopUpMenuWindowLevel]; } - // FIXME + + { + NSArray *itemCells = [_view _itemCells]; + int i; + int count = [itemCells count]; + + for ( i = 0; i < count; i++ ) + { + [[itemCells objectAtIndex: i] setMenuView: _view]; + } + } } } diff --git a/Source/NSMenuView.m b/Source/NSMenuView.m index 14779b880..ac6829354 100644 --- a/Source/NSMenuView.m +++ b/Source/NSMenuView.m @@ -1175,3 +1175,10 @@ _addLeftBorderOffsetToRect(NSRect aRect, BOOL isHorizontal) } @end + +@implementation NSMenuView (GNUstepPrivate) +- (NSArray *)_itemCells +{ + return _itemCells; +} +@end diff --git a/Source/NSPopUpButtonCell.m b/Source/NSPopUpButtonCell.m index 4f2372393..3b64c1fc2 100644 --- a/Source/NSPopUpButtonCell.m +++ b/Source/NSPopUpButtonCell.m @@ -376,8 +376,11 @@ static NSImage *_pbc_image[2]; { int index = [[_menu menuRepresentation] highlightedItemIndex]; + if (index < 0) + index = [self indexOfSelectedItem]; if (index < 0) index = 0; + [self selectItemAtIndex: index]; } } @@ -629,10 +632,11 @@ static NSImage *_pbc_image[2]; - (id) initWithCoder: (NSCoder*)aDecoder { int flag; + id selectedItem; self = [super initWithCoder: aDecoder]; _menu = [aDecoder decodeObject]; - _selectedItem = [aDecoder decodeObject]; + selectedItem = [aDecoder decodeObject]; [aDecoder decodeValueOfObjCType: @encode(int) at: &flag]; _pbcFlags.pullsDown = flag; [aDecoder decodeValueOfObjCType: @encode(int) at: &flag]; @@ -645,6 +649,7 @@ static NSImage *_pbc_image[2]; _pbcFlags.arrowPosition = flag; [_menu _setOwnedByPopUp: self]; + [self selectItem: selectedItem]; return self; }