diff --git a/ChangeLog b/ChangeLog index 7e0d6be39..a27e232fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Dec 20 15:28:00 1999 Richard Frith-Macdonald + + * Source/NSView.m: Fix removal of view from window such that we reset + the windows first responder if any of the removed views in first + responder (avoid crash iv views subsequently deallocated). + Mon Dec 20 11:00:00 1999 Richard Frith-Macdonald * Source/NSSavePanel.m: Use symbolic constants for resize mask. diff --git a/Source/NSView.m b/Source/NSView.m index a9ad99158..ea6d291c1 100644 --- a/Source/NSView.m +++ b/Source/NSView.m @@ -387,10 +387,6 @@ GSSetDragTypes(NSView* obj, NSArray *types) { return; } - if ([window firstResponder] == self) - { - [window makeFirstResponder: window]; - } RETAIN(self); [super_view->sub_views removeObjectIdenticalTo: self]; if ([super_view->sub_views count] == 0) @@ -419,10 +415,6 @@ GSSetDragTypes(NSView* obj, NSArray *types) { return; } - if ([window firstResponder] == self) - { - [window makeFirstResponder: window]; - } [super_view setNeedsDisplayInRect: frame]; RETAIN(self); [super_view->sub_views removeObjectIdenticalTo: self]; @@ -519,17 +511,26 @@ GSSetDragTypes(NSView* obj, NSArray *types) - (void) viewWillMoveToWindow: (NSWindow*)newWindow { if (newWindow == window) - return; - + { + return; + } if (_rFlags.has_draginfo) { NSGraphicsContext *ctxt = GSCurrentContext(); NSArray *t = GSGetDragTypes(self); if (window != nil) - [ctxt _removeDragTypes: t fromWindow: [window windowNumber]]; + { + [ctxt _removeDragTypes: t fromWindow: [window windowNumber]]; + } if (newWindow != nil) - [ctxt _addDragTypes: t toWindow: [newWindow windowNumber]]; + { + [ctxt _addDragTypes: t toWindow: [newWindow windowNumber]]; + } + } + if (newWindow == nil && [window firstResponder] == self) + { + [window makeFirstResponder: window]; } window = newWindow; @@ -545,7 +546,9 @@ GSSetDragTypes(NSView* obj, NSArray *types) [sub_views getObjects: array]; for (i = 0; i < count; ++i) - [array[i] viewWillMoveToWindow: newWindow]; + { + [array[i] viewWillMoveToWindow: newWindow]; + } } } } diff --git a/Source/NSWindow.m b/Source/NSWindow.m index 0b70968cd..c231c69b7 100644 --- a/Source/NSWindow.m +++ b/Source/NSWindow.m @@ -1478,8 +1478,6 @@ resetCursorRectsForView(NSView *theView) if ((first_responder) && (![first_responder resignFirstResponder])) return NO; -// FIXME -// [first_responder resignFirstResponder]; first_responder = aResponder; [first_responder becomeFirstResponder]; return YES; @@ -2765,7 +2763,6 @@ resetCursorRectsForView(NSView *theView) { BOOL flag; NSPoint p; - id nxt = RETAIN([self nextResponder]); [super encodeWithCoder: aCoder]; @@ -2810,8 +2807,6 @@ resetCursorRectsForView(NSView *theView) [aCoder encodeConditionalObject: _initial_first_responder]; NSDebugLog(@"NSWindow: finish encoding\n"); - - RELEASE(nxt); } - (id) initWithCoder: (NSCoder*)aDecoder