Make window controller a subclass of NSResponder and manage the

responder chain. Patch by Wolfgang Lux <wolfgang.lux@gmail.com>.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@26956 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2008-10-23 08:17:23 +00:00
parent 76b074a205
commit 56388864db
3 changed files with 34 additions and 15 deletions

View file

@ -1,3 +1,10 @@
2008-10-23 Fred Kiefer <FredKiefer@gmx.de>
* Headers/AppKit/NSWindowController.h: Make a subclass of NSResponder.
* Source/NSWindowController.m (-setWindow:): Manage the responder
chain.
Patch by Wolfgang Lux <wolfgang.lux@gmail.com>.
2008-10-21 Adam Fedor <fedor@gnu.org>
* Source/NSBitmapImageRep+JPEG.m: Fix broken boolean definition.

View file

@ -27,15 +27,15 @@
#ifndef _GNUstep_H_NSWindowController
#define _GNUstep_H_NSWindowController
#include <Foundation/NSObject.h>
#include <AppKit/NSNibDeclarations.h>
#include <AppKit/NSResponder.h>
@class NSString;
@class NSArray;
@class NSWindow;
@class NSDocument;
@interface NSWindowController : NSObject <NSCoding>
@interface NSWindowController : NSResponder <NSCoding>
{
@private
NSWindow *_window;

View file

@ -310,32 +310,44 @@
if (_window != nil)
{
NSResponder *responder;
[nc removeObserver: self
name: NSWindowWillCloseNotification
object: _window];
name: NSWindowWillCloseNotification
object: _window];
// Remove self from the responder chain
responder = _window;
while (responder && [responder nextResponder] != self)
{
responder = [responder nextResponder];
}
[responder setNextResponder: [self nextResponder]];
[_window setWindowController: nil];
}
ASSIGN (_window, aWindow);
ASSIGN(_window, aWindow);
if (_window != nil)
{
[_window setWindowController: self];
// Put self into the responder chain
[self setNextResponder: [_window nextResponder]];
[_window setNextResponder: self];
[nc addObserver: self
selector: @selector(_windowWillClose:)
name: NSWindowWillCloseNotification
object: _window];
selector: @selector(_windowWillClose:)
name: NSWindowWillCloseNotification
object: _window];
/* For information on the following, see the description in
-setDocument: */
-setDocument: */
if (_document == nil)
{
[_window setReleasedWhenClosed: NO];
}
{
[_window setReleasedWhenClosed: NO];
}
else
{
[_window setReleasedWhenClosed: YES];
}
{
[_window setReleasedWhenClosed: YES];
}
}
}