Kazunobu Kuriyama wrote: > Attached is a patch that corrects NSSavePanel's > > - (void)beginSheetForDirectory: (NSString *)path > fileName: (NSString *)filename > modalForWindow: (NSWindow *)docWindow > modalDelegate: (id)delegate > didEndSelector: (SEL)didEndSelector > contextInfo: (void *)contextInfo; > > For the case where delegate is non-nil, the current > implementation fails to work when the OK button on > the sheet is pressed. > > (As delegate is set to nil mostly, this bug has > seemingly been overlooked, IMHO.) > > Reason: The current implementation directly invokes > NSApplication's -beginSheet::::: through the global > NSApp. In the implementation of this method, we see > > ret = [self runModalForWindow: arg1 > relativeToWindow: arg2]; > > and ret is passed to didEndSelector. Since self is > NSApp, -runModalForWindow:relativeToWindow: invoked > in this case is the one implemented in NSApplication. > However, that method returns neither NSCancelButton nor > NSOKButton, which are to be passed to didEndSelector by > the specifications when NSSavePanel or NSOpenPanel is used. > > Rather, when using NSSavePanel or NSOpenPanel, ret is always > set to NSRunStoppedResponse (0), which is incidentally equal > to NSCancelButton (0). This is why the sheet fails to work > when the OK button is pressed. > > The patch rectifies the NSSavePanel's method so that it > can work with the OK button properly. > > Recently, someone corrected the signature of didEndSelector > found in NSApplication.m, the need of which was pointed out > by my previous patch. The attached patch relies on that > correction. So use the latest CVS if you would like to > try it. >
This patch tries to add another workaround on top of all the hacks, that are already there for model and sheet handling. This doesn't look right to me, so I suggest another, hopefully cleaner, way to resolve this: We should give the correct Cocoa values to the constants NSRunStoppedResponse, NSRunAbortedResponse and NSRunContinuesResponse. With these there will no longer be a conflict to the values of NSCancelButton and NSOKButton. So we are able to undo the hack Nicola put into the save panel years ago and to use stopModalWithCode: there again, using the button constant as the code. That way everything will fall into place again and no further hacks will be needed. And perhaps somebody will in the future even donate a fully working sheet processing to GNUstep. _______________________________________________ Bug-gnustep mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-gnustep