[Openmcl-devel] suppressing "... save the changes ...?"
Arthur Cater
arthur.cater at ucd.ie
Fri Feb 24 00:44:20 PST 2012
Thank you Gary.
This worked: to make a document subclass whose #/isDocumentEdited returns #$NO.
Since #/setDocumentEdited ... #$NO had not been working, I guess you are right
that something somewhere was contradicting it.
Arthur
On 24 Feb 2012, at 06:54, Gary Byers wrote:
> Cocoa will try to save the document associated with a window when the window
> is about to close if:
>
> a) there is a document associated with a window. The right way to determine
> this is to obtain the window's window controller and ask it for the associated
> document,, as in:
>
> (let* ((document (#/document (#/windowController theWindow))))
> ...)
>
> though it happens to work to call an apparently undocumented #/document
> method on an NSWindow object (and we've had code in the IDE that's done that.)
>
> b) that document's #/isDocumentEdited method returns true.
>
> The IDE uses a different class of NSDocument for listener windows than
> it does for editor windows, and that document class's
> #/isDocumentEdited method returns false. (The #/setDocumentEdited:
> methods on the related window and window-controller classes are no-ops,
> but that may be overkill.) A listener window's close box never turns dark
> red and closing one doesn't result in the dialog that you're trying to avoid.
>
> If you don't want to create subclasses, you might consider redefining
> the #/setDocumentEdited: method on the HEMLOCK-FRAME class in
> ccl:cocoa-ide;cocoa-editor.lisp. The current implementation tries to
> determine whether or not the document's changed status is changing and
> arranges to update the modeline before calling the next method if so, and
> if you can determine that the window/buffer/whatever belongs to one of
> your scratch windows you might want to make that method do nothing.
>
> (It might also be useful to have that method print something whenever it's
> called; that output would go to the AltConsole window and there may be a lot
> of it. Calling (#/setDocumentEdited: theWindow #$NO) should convince Cocoa
> that nothing needs to be saved, but something else may be saying the exact
> opposite.)
>
>
>
> On Thu, 23 Feb 2012, Arthur Cater wrote:
>
>> I've a problem with some code I've recently contributed. It creates Hemlock windows
>> and streams for writing to them (and provides a format directive /clickable/ which is
>> not the issue here).
>>
>> The windows have an annoying feature, which is that when I close one manually
>> I get asked "Do you want to save the changes ...". For some windows at least,
>> I'd like to regard them as scratch windows that should just go away when they are
>> told to. I tried (in a private version, not in the version you might find in contribs)
>> a number of things in a specialised #/windowShouldClose method,
>> but have learned that the question is asked before that method is invoked.
>>
>> I now (in private) arrange - and this still does not work! - that whenever I write to the stream
>> I do so inside GUI::EXECUTE-IN-GUI and also there do
>> (#/updateChangeCount: <theDocument> #$NSChangeCleared)
>> (hi::%set-buffer-modified <theBuffer> nil)
>> (#/setDocumentEdited: <theWindow> #$NO)
>>
>>
>> Can anyone please suggest a workable way to get a Hemlock window to just die quietly?
>>
>> Arthur
>>
>> _______________________________________________
>> Openmcl-devel mailing list
>> Openmcl-devel at clozure.com
>> http://clozure.com/mailman/listinfo/openmcl-devel
>>
>>
More information about the Openmcl-devel
mailing list