[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug #3346] NSDocument actions are not reachable
From: |
nobody |
Subject: |
[Bug #3346] NSDocument actions are not reachable |
Date: |
Mon, 28 Apr 2003 08:21:33 -0400 |
=================== BUG #3346: LATEST MODIFICATIONS ==================
http://savannah.gnu.org/bugs/?func=detailbug&bug_id=3346&group_id=99
Changes by: Nicola Pero <n.pero@mi.flashnet.it>
Date: Mon 04/28/2003 at 12:21 (GMT)
What | Removed | Added
---------------------------------------------------------------------------
Status | Analyzed | Closed
------------------ Additional Follow-up Comments ----------------------------
NSApplication -targetForAction: was not checking if the
keyWindow's NSDocument responded to the action. Fixed on CVS.
Thanks for reporting the problem.
=================== BUG #3346: FULL BUG SNAPSHOT ===================
Submitted by: stefanu Project: GNUstep
Submitted on: Sun 04/27/2003 at 20:06
Category: Gui/AppKit Severity: 5 - Major
Bug Group: Bug Resolution: None
Assigned to: nico Status: Closed
Summary: NSDocument actions are not reachable
Original Submission: NSDocument actions saveDocument:, saveDocumentAs:,
saveDocumentTo:, close: are not reachable from main menu. I have subclassed
NSDocument and NSWindowController. I had to implement those methods in
NSWindowController subclass and forward them to NSWindowController's document.
I think those methods should be implemented directly in NSWindowController.
Patch is attached (except close:).
Follow-up Comments
*******************
-------------------------------------------------------
Date: Mon 04/28/2003 at 12:21 By: nico
NSApplication -targetForAction: was not checking if the
keyWindow's NSDocument responded to the action. Fixed on CVS.
Thanks for reporting the problem.
-------------------------------------------------------
Date: Mon 04/28/2003 at 10:15 By: nico
No - the methods should be implemented only in NSDocument.
There is a precise reason for this - when you subclass
NSDocument, you might want to add new methods other than save/close. Those
methods should be immediately available
to the main menu without the need of wrapping them manually
in NSWindowController/NSDocumentController.
It fits in the general philosophy that actions of the active
objects are activated and can be called directly from the menu. That makes
simple to add new actions to objects which
can be active, and new menu items calling those actions without modifications
of other parts of the software.
The problem you are having is definitely due to not setting
up correctly the various connections required in NSDocument-base applications.
Those connections *are*
confusing to set up; Apple seems to have targeted too much flexibility at the
expense of simplicity.
Without source code of what you have done, it's difficult
to guess what needs changing, so I'll point you to examples
instead:
I'm not sure if Ink (gui-only version) is right - it's a while I don't look at
it; but the Renaissance version
of Ink (included in the Renaissance example applications)
is definitely right and it works (on both GNUstep and
Apple OS X).
Renaissance also uses both a customized NSDocument and NSWindowController in
order to support loading nib files
from .gsmarkup rather than .gorm; you might take that as
an example of using both customized.
Else, if you still can't figure out how to set up the
connections properly, please submit the code you are using.
-------------------------------------------------------
Date: Mon 04/28/2003 at 07:12 By: stefanu
Yes, this is what was done in Ink.app , but it is not the right way. It does
not make sense to have NSWindowController if you have to make document a
delegate of a window. According to apple docs in "Document based applications:
Window controllers and nib files" delegate of window does not have to be used
or it can be set to the window controller.
Actually, those save* and close: methods have to be implemented in
NSDocumentController (not in nswindow controller, because it does not have to
be a delegate of the window) and forwarded to current active document. Attached
is a patch for NSDocumentController. Ignore previous patch.
-------------------------------------------------------
Date: Sun 04/27/2003 at 20:41 By: yjchen
The trick I found is that you have to set the NSDocument as the delegate of
NSWindow. But It doesn't make sense if you have your own NSWindowController.
Anyway, just a comment.
CC list is empty
File Attachments
****************
-------------------------------------------------------
Date: Mon 04/28/2003 at 07:12 Name: NSDocumentController.m.patch Size: 1KB
By: stefanu
http://savannah.gnu.org/bugs/download.php?group_id=99&bug_id=3346&bug_file_id=416
-------------------------------------------------------
Date: Sun 04/27/2003 at 20:06 Name: NSWindowController.m.patch Size: 0KB
By: stefanu
added save* methods to NSWindowController
http://savannah.gnu.org/bugs/download.php?group_id=99&bug_id=3346&bug_file_id=412
For detailed info, follow this link:
http://savannah.gnu.org/bugs/?func=detailbug&bug_id=3346&group_id=99