Fun fixes.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@4877 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
michael 1999-09-12 03:19:36 +00:00
parent 4026532377
commit 3d2b84054e
6 changed files with 697 additions and 639 deletions

View file

@ -1,4 +1,12 @@
1999-09-10 Pedro Ivo Andrade Tavares <ptavares@iname.com> 1999-09-11 Michael Hanni <mhanni@sprintmail.com>
* Source/NSMenu.m: many small fixes and optimizations for quicker
display. In addition several small fixes which should improve
functionality as well as usablity.
* Source/NSMenuView.m: ditto.
* Source/NSHelpManager.m: a small bugfix to allow for compilation.
1999-09-11 Pedro Ivo Andrade Tavares <ptavares@iname.com>
* NSResponder.m ([NSResponder -helpRequested:]): * NSResponder.m ([NSResponder -helpRequested:]):
Now the application exits context help mode regardless of whether Now the application exits context help mode regardless of whether

View file

@ -154,7 +154,8 @@
return nil; return nil;
} }
// private; called during nib load. // we do not retain the window, since it should // private; called during nib load.
// we do not retain the window, since it should
// already have a retain from the nib. // already have a retain from the nib.
- (void)setWindow:(NSWindow *)window - (void)setWindow:(NSWindow *)window
{ {
@ -233,7 +234,8 @@
{ {
int result; int result;
if (![self isDocumentEdited]) return YES; if (![self isDocumentEdited])
return YES;
//FIXME -- localize. //FIXME -- localize.
result = NSRunAlertPanel(@"Close", @"%@ has changed. Save?", result = NSRunAlertPanel(@"Close", @"%@ has changed. Save?",
@ -259,7 +261,8 @@
/* If it's the last window controller, pop up a warning */ /* If it's the last window controller, pop up a warning */
/* maybe we should count only loaded window controllers (or visible windows). */ /* maybe we should count only loaded window controllers (or visible windows). */
if ([windowController shouldCloseDocument] || [_windowControllers count] == 1) if ([windowController shouldCloseDocument]
|| [_windowControllers count] == 1)
{ {
return [self canCloseDocument]; return [self canCloseDocument];
} }
@ -304,7 +307,8 @@
{ {
NSData *data = [self dataRepresentationOfType:type]; NSData *data = [self dataRepresentationOfType:type];
if (data == nil) return nil; if (data == nil)
return nil;
return [[[NSFileWrapper alloc] initRegularFileWithContents:data] autorelease]; return [[[NSFileWrapper alloc] initRegularFileWithContents:data] autorelease];
} }
@ -397,6 +401,7 @@
} }
[savePanel setTitle:title]; [savePanel setTitle:title];
if ([self fileName]) if ([self fileName])
[savePanel setDirectory:[[self fileName] stringByDeletingLastPathComponent]]; [savePanel setDirectory:[[self fileName] stringByDeletingLastPathComponent]];
@ -426,7 +431,7 @@
} }
// Page layout panel (Page Setup) // Page layout panel (Page Setup)
- (int)runModalPageLayoutWithPrintInfo:(NSPrintInfo *)printInfo - (int)runModalPageLayoutWithPrintInfo:(NSPrintInfo *)printInfo
{ {
@ -437,8 +442,8 @@
{ {
NSPrintInfo *printInfo = [self printInfo]; NSPrintInfo *printInfo = [self printInfo];
if ([self runModalPageLayoutWithPrintInfo:printInfo] && if ([self runModalPageLayoutWithPrintInfo:printInfo]
[self shouldChangePrintInfo:printInfo]) && [self shouldChangePrintInfo:printInfo])
{ {
[self setPrintInfo:printInfo]; [self setPrintInfo:printInfo];
[self updateChangeCount:NSChangeDone]; [self updateChangeCount:NSChangeDone];
@ -640,14 +645,18 @@
} }
- (void)_changeWasDone:(NSNotification *)notification - (void)_changeWasDone:(NSNotification *)notification
{ [self updateChangeCount:NSChangeDone]; {
[self updateChangeCount:NSChangeDone];
} }
- (void)_changeWasUndone:(NSNotification *)notification - (void)_changeWasUndone:(NSNotification *)notification
{ [self updateChangeCount:NSChangeUndone]; {
[self updateChangeCount:NSChangeUndone];
} }
- (void)_changeWasRedone:(NSNotification *)notification - (void)_changeWasRedone:(NSNotification *)notification
{ [self updateChangeCount:NSChangeDone]; {
[self updateChangeCount:NSChangeDone];
} }
@end @end

View file

@ -26,6 +26,7 @@ static NSDictionary *TypeInfoForName(NSArray *types, NSString *typeName)
for (i=0; i<count;i++) for (i=0; i<count;i++)
{ {
NSDictionary *dict = [types objectAtIndex:i]; NSDictionary *dict = [types objectAtIndex:i];
if ([[dict objectForKey:NSNameKey] isEqualToString:typeName]) if ([[dict objectForKey:NSNameKey] isEqualToString:typeName])
return dict; return dict;
} }
@ -48,11 +49,14 @@ static NSDictionary *TypeInfoForName(NSArray *types, NSString *typeName)
{ {
return [self sharedDocumentController]; return [self sharedDocumentController];
} }
+ (id)sharedDocumentController + (id)sharedDocumentController
{ {
static id instance = nil; static id instance = nil;
if (instance == nil) instance = [[super allocWithZone:NULL] init]; if (instance == nil)
instance = [[super allocWithZone:NULL] init];
return instance; return instance;
} }
@ -111,7 +115,9 @@ static NSDictionary *TypeInfoForName(NSArray *types, NSString *typeName)
- _defaultType - _defaultType
{ {
if ([_types count] == 0) return nil; // raise exception? if ([_types count] == 0)
return nil; // raise exception?
return [[_types objectAtIndex:0] objectForKey:NSNameKey]; return [[_types objectAtIndex:0] objectForKey:NSNameKey];
} }
@ -130,7 +136,8 @@ static NSDictionary *TypeInfoForName(NSArray *types, NSString *typeName)
{ {
NSDocument *document = [self makeUntitledDocumentOfType:type]; NSDocument *document = [self makeUntitledDocumentOfType:type];
if (document == nil) return nil; if (document == nil)
return nil;
[self _addDocument:document]; [self _addDocument:document];
if ([self shouldCreateUI]) if ([self shouldCreateUI])
@ -153,6 +160,7 @@ static NSDictionary *TypeInfoForName(NSArray *types, NSString *typeName)
if ((document = [self makeDocumentWithContentsOfFile:fileName ofType:type])) if ((document = [self makeDocumentWithContentsOfFile:fileName ofType:type]))
[self _addDocument:document]; [self _addDocument:document];
if ([self shouldCreateUI]) if ([self shouldCreateUI])
[document makeWindowControllers]; [document makeWindowControllers];
} }
@ -175,9 +183,12 @@ static NSDictionary *TypeInfoForName(NSArray *types, NSString *typeName)
NSString *type = [self typeFromFileExtension:[[url path] pathExtension]]; NSString *type = [self typeFromFileExtension:[[url path] pathExtension]];
document = [self makeDocumentWithContentsOfURL:url ofType:type]; document = [self makeDocumentWithContentsOfURL:url ofType:type];
if (document == nil) return nil;
if (document == nil)
return nil;
[self _addDocument:document]; [self _addDocument:document];
if ([self shouldCreateUI]) if ([self shouldCreateUI])
{ {
[document makeWindowControllers]; [document makeWindowControllers];
@ -368,7 +379,8 @@ static NSDictionary *TypeInfoForName(NSArray *types, NSString *typeName)
for (i=0; i<count; i++) for (i=0; i<count; i++)
{ {
if ([[_documents objectAtIndex:i] isDocumentEdited]) return YES; if ([[_documents objectAtIndex:i] isDocumentEdited])
return YES;
} }
return NO; return NO;
@ -387,7 +399,9 @@ static NSDictionary *TypeInfoForName(NSArray *types, NSString *typeName)
BOOL isDir = NO; BOOL isDir = NO;
if (directory && if (directory &&
[manager fileExistsAtPath:directory isDirectory:&isDir] && isDir) return directory; [manager fileExistsAtPath:directory isDirectory:&isDir] && isDir)
return directory;
//FIXME -- need to remember last saved directory, and return that here. //FIXME -- need to remember last saved directory, and return that here.
//Only return NSHomeDirectory if nothing's been saved yet. //Only return NSHomeDirectory if nothing's been saved yet.
return NSHomeDirectory(); return NSHomeDirectory();
@ -397,11 +411,17 @@ static NSDictionary *TypeInfoForName(NSArray *types, NSString *typeName)
{ {
id document; id document;
if (window == nil) return nil; if (window == nil)
if (![[window windowController] isKindOfClass:[NSWindowController class]]) return nil; return nil;
if (![[window windowController] isKindOfClass:[NSWindowController class]])
return nil;
document = [[window windowController] document]; document = [[window windowController] document];
if (![document isKindOfClass:[NSDocument class]]) return nil;
if (![document isKindOfClass:[NSDocument class]])
return nil;
return document; return document;
} }

View file

@ -105,7 +105,6 @@ static NSString* NSMenuLocationsKey = @"NSMenuLocations";
menu_follow_transient = NO; menu_follow_transient = NO;
menu_is_beholdenToPopUpButton = YES; menu_is_beholdenToPopUpButton = YES;
ASSIGN(menu_popb, popb); ASSIGN(menu_popb, popb);
// menu_popb = popb;
menu_changed = YES; menu_changed = YES;
/* According to the spec, menus do autoenable by default */ /* According to the spec, menus do autoenable by default */
@ -171,8 +170,8 @@ static NSString* NSMenuLocationsKey = @"NSMenuLocations";
defer: NO]; defer: NO];
titleView = [NSMenuWindowTitleView new]; titleView = [NSMenuWindowTitleView new];
[titleView setFrameOrigin: NSMakePoint(0, winRect.size.height-21)]; [titleView setFrameOrigin: NSMakePoint(0, winRect.size.height-22)];
[titleView setFrameSize: NSMakeSize (winRect.size.width, 21)]; [titleView setFrameSize: NSMakeSize (winRect.size.width, 22)];
[[aWindow contentView] addSubview:menu_view]; [[aWindow contentView] addSubview:menu_view];
[[aWindow contentView] addSubview:titleView]; [[aWindow contentView] addSubview:titleView];
[titleView setMenu: self]; [titleView setMenu: self];
@ -515,7 +514,7 @@ static NSString* NSMenuLocationsKey = @"NSMenuLocations";
NSPoint subOrigin = [win_link convertBaseToScreen: NSMakePoint(aRect.origin.x, aRect.origin.y)]; NSPoint subOrigin = [win_link convertBaseToScreen: NSMakePoint(aRect.origin.x, aRect.origin.y)];
return NSMakePoint (frame.origin.x + frame.size.width + 1, return NSMakePoint (frame.origin.x + frame.size.width + 1,
subOrigin.y - (submenuFrame.size.height - 41)); subOrigin.y - (submenuFrame.size.height - 42));
} }
else else
{ {
@ -727,20 +726,17 @@ static NSString* NSMenuLocationsKey = @"NSMenuLocations";
if (!menu_is_beholdenToPopUpButton) if (!menu_is_beholdenToPopUpButton)
{ {
size.height += 21; size.height += 22;
[aWindow setContentSize: size]; [aWindow setContentSize: size];
[bWindow setContentSize: size]; [bWindow setContentSize: size];
[menu_view setFrameOrigin: NSMakePoint(0, 0)]; [menu_view setFrameOrigin: NSMakePoint(0, 0)];
[titleView setFrame: NSMakeRect(0,size.height-21,size.width,21)]; [titleView setFrame: NSMakeRect(0,size.height-22,size.width,22)];
} }
else else
{ {
[aWindow setContentSize: size]; [aWindow setContentSize: size];
} }
// FIXME, popup sets itself up.
// [menu_view setNeedsDisplay:YES];
[aWindow display]; [aWindow display];
menu_changed = NO; menu_changed = NO;
@ -864,9 +860,7 @@ NSArray* array;
if (menu_supermenu && ![self isTornOff]) // query super menu for if (menu_supermenu && ![self isTornOff]) // query super menu for
{ // position { // position
NSPoint location = [menu_supermenu locationForSubmenu: self]; [aWindow setFrameOrigin:[menu_supermenu locationForSubmenu: self]];
[aWindow setFrameOrigin: location];
menu_supermenu->menu_attached_menu = self; menu_supermenu->menu_attached_menu = self;
} }
else else

View file

@ -130,65 +130,94 @@ static float GSMenuBarHeight = 25.0; // a guess.
[self lockFocus]; [self lockFocus];
if (index == -1) { if (index == -1)
if (menuv_highlightedItemIndex != -1) { {
if (menuv_highlightedItemIndex != -1)
{
NSRect aRect = [self rectOfItemAtIndex: menuv_highlightedItemIndex];
anItem = [menuv_items_link objectAtIndex: menuv_highlightedItemIndex]; anItem = [menuv_items_link objectAtIndex: menuv_highlightedItemIndex];
[anItem highlight: NO [anItem highlight: NO
withFrame: [self rectOfItemAtIndex: menuv_highlightedItemIndex] withFrame: aRect
inView: self]; inView: self];
if ([anItem hasSubmenu] && ![[anItem target] isTornOff]) [self setNeedsDisplayInRect: aRect];
[window flushWindow];
if ([anItem hasSubmenu]
&& ![[anItem target] isTornOff])
[[anItem target] close]; [[anItem target] close];
else if ([anItem hasSubmenu] && [[anItem target] isTornOff]) else if ([anItem hasSubmenu]
&& [[anItem target] isTornOff])
[[anItem target] closeTransient]; [[anItem target] closeTransient];
[anItem setState: 0]; [anItem setState: 0];
menuv_highlightedItemIndex = -1; menuv_highlightedItemIndex = -1;
} }
} else if (index >= 0) { }
if ( menuv_highlightedItemIndex != -1 ) { else if (index >= 0)
{
if ( menuv_highlightedItemIndex != -1)
{
NSRect aRect = [self rectOfItemAtIndex: menuv_highlightedItemIndex];
anItem = [menuv_items_link objectAtIndex: menuv_highlightedItemIndex]; anItem = [menuv_items_link objectAtIndex: menuv_highlightedItemIndex];
[anItem highlight: NO [anItem highlight: NO
withFrame: [self rectOfItemAtIndex: menuv_highlightedItemIndex] withFrame: aRect
inView: self]; inView: self];
if ([anItem hasSubmenu] && ![[anItem target] isTornOff]) [self setNeedsDisplayInRect: aRect];
[window flushWindow];
if ([anItem hasSubmenu]
&& ![[anItem target] isTornOff])
[[anItem target] close]; [[anItem target] close];
else if ([anItem hasSubmenu] && [[anItem target] isTornOff]) else if ([anItem hasSubmenu]
&& [[anItem target] isTornOff])
[[anItem target] closeTransient]; [[anItem target] closeTransient];
[anItem setState: 0]; [anItem setState: 0];
} }
if (menuv_highlightedItemIndex != index) { if (index != menuv_highlightedItemIndex)
{
anItem = [menuv_items_link objectAtIndex: index]; anItem = [menuv_items_link objectAtIndex: index];
if ([anItem isEnabled]) if ([anItem isEnabled])
{ {
NSRect aRect = [self rectOfItemAtIndex: index];
[anItem highlight: YES [anItem highlight: YES
withFrame: [self rectOfItemAtIndex: index] withFrame: aRect
inView: self]; inView: self];
[self setNeedsDisplayInRect: aRect];
[window flushWindow];
if ([anItem hasSubmenu]
&& ![[anItem target] isTornOff])
[[anItem target] display];
else if ([anItem hasSubmenu]
&& [[anItem target] isTornOff])
[[anItem target] displayTransient];
[anItem setState: 1]; [anItem setState: 1];
if ([anItem hasSubmenu] && ![[anItem target] isTornOff])
[[anItem target] display];
else if ([anItem hasSubmenu] && [[anItem target] isTornOff])
[[anItem target] displayTransient];
} }
// set ivar to new index // set ivar to new index
menuv_highlightedItemIndex = index; menuv_highlightedItemIndex = index;
} else { }
else if (menuv_highlightedItemIndex == index)
{
menuv_highlightedItemIndex = -1; menuv_highlightedItemIndex = -1;
} }
} }
[self unlockFocus]; [self unlockFocus];
[window flushWindow];
} }
- (int)highlightedItemIndex - (int)highlightedItemIndex
@ -522,16 +551,18 @@ static float GSMenuBarHeight = 25.0; // a guess.
{ // Recursive menu close & deselect. { // Recursive menu close & deselect.
if ([aMenu supermenu] && aMenu != menuv_menu) if ([aMenu supermenu] && aMenu != menuv_menu)
{ {
[[[aMenu supermenu] menuView] setHighlightedItemIndex: -1]; [[aMenu menuView] setHighlightedItemIndex: -1];
aMenu = [aMenu supermenu]; aMenu = [aMenu supermenu];
} }
else else
finished = YES; finished = YES;
[window flushWindow]; // [window flushWindow];
} }
} }
[self setHighlightedItemIndex: index]; [self setHighlightedItemIndex: index];
lastIndex = index; lastIndex = index;
} }
@ -726,8 +757,6 @@ cell do the following */
} }
else else
finished = YES; finished = YES;
[window flushWindow];
} }
} }
else else
@ -770,7 +799,7 @@ cell do the following */
{ // Recursive menu close & deselect. { // Recursive menu close & deselect.
if ([aMenu supermenu]) if ([aMenu supermenu])
{ {
[[[aMenu supermenu] menuView] setHighlightedItemIndex: -1]; [[aMenu menuView] setHighlightedItemIndex: -1];
aMenu = [aMenu supermenu]; aMenu = [aMenu supermenu];
} }
else else

View file

@ -27,7 +27,6 @@
#include <AppKit/NSCStringText.h> #include <AppKit/NSCStringText.h>
#include <AppKit/NSEvent.h> #include <AppKit/NSEvent.h>
/* /*
* Dummy definitions provided here to avoid errors when not linking with * Dummy definitions provided here to avoid errors when not linking with
* a back end. * a back end.
@ -302,4 +301,3 @@ float NSLinkFrameThickness(void)
{ {
return 0; return 0;
} }