From 4fb42475cb5718197328cb94dc83d97ee8f405b4 Mon Sep 17 00:00:00 2001 From: Sergii Stoian Date: Thu, 10 Apr 2003 15:05:50 +0000 Subject: [PATCH] mouseDown selections fixes git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@16414 72102866-910b-0410-8b05-ffd578937521 --- Source/NSPopUpButton.m | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/Source/NSPopUpButton.m b/Source/NSPopUpButton.m index f64ab3f37..410a01e29 100644 --- a/Source/NSPopUpButton.m +++ b/Source/NSPopUpButton.m @@ -301,16 +301,25 @@ this to return nil to indicate that we have no context menu. - (BOOL) performKeyEquivalent: (NSEvent*)theEvent { - NSMenu *m = [self menu]; + NSMenu *m = [self menu]; + NSMenuItem *oldSelectedItem = [_cell selectedItem]; if (m != nil) { if ([m performKeyEquivalent: theEvent]) { - /* If the key equivalent was performed, redisplay ourselves - * to account for potential changes in the selected item. - */ - [self setNeedsDisplay: YES]; + // pullsDown does not change selected item + if ([_cell pullsDown]) + { + [self selectItem: oldSelectedItem]; + } + else + { + /* If the key equivalent was performed, redisplay ourselves + * to account for potential changes in the selected item. + */ + [self setNeedsDisplay: YES]; + } return YES; } } @@ -323,7 +332,7 @@ this to return nil to indicate that we have no context menu. NSWindow *menuWindow = [mr window]; NSEvent *e; NSPoint p; - int lastSelectedItem = [mr highlightedItemIndex]; + int lastSelectedItem = [_cell indexOfSelectedItem]; int highlightedItemIndex; if ([self isEnabled] == NO) @@ -350,13 +359,17 @@ this to return nil to indicate that we have no context menu. [NSApp sendEvent: e]; // Selection remains unchanged if selected item is disabled - highlightedItemIndex = [mr highlightedItemIndex]; - if (highlightedItemIndex >= 0) + // or mouse left menu. + highlightedItemIndex = [_cell indexOfSelectedItem]; + if ((highlightedItemIndex >= 0 + && [[self itemAtIndex: highlightedItemIndex] isEnabled] == NO) + || highlightedItemIndex == lastSelectedItem) { - if ([[self itemAtIndex: highlightedItemIndex] isEnabled] == NO) - { - [mr setHighlightedItemIndex: lastSelectedItem]; - } + [mr setHighlightedItemIndex: lastSelectedItem]; + } + else + { + [mr setHighlightedItemIndex: highlightedItemIndex]; } // Dismiss the popUp