Correct the calling of the delegate methods in the alert sheet

functions. Should fix #26101.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@28185 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2009-04-07 20:54:41 +00:00
parent 61d7e0d4fe
commit d93155a768
2 changed files with 40 additions and 19 deletions

View file

@ -1,3 +1,9 @@
2009-04-07 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSAlert.m (NSBeginAlertSheet, NSBeginCriticalAlertSheet,
NSBeginInformationalAlertSheet): Correct the calling of delegate
methods. This should fix #26101.
2009-04-07 Fred Kiefer <FredKiefer@gmx.de>
* Headers/AppKit/NSSplitView.h

View file

@ -1298,9 +1298,17 @@ void NSBeginAlertSheet(NSString *title,
[NSApp beginSheet: panel
modalForWindow: docWindow
modalDelegate: modalDelegate
didEndSelector: didEndSelector
didEndSelector: willEndSelector
contextInfo: contextInfo];
[panel close];
if (modalDelegate && [modalDelegate respondsToSelector: didEndSelector])
{
void (*didEnd)(id, SEL, id, int, void*);
didEnd = (void (*)(id, SEL, id, int, void*))[modalDelegate methodForSelector:
didEndSelector];
didEnd(modalDelegate, didEndSelector, panel, [panel result], contextInfo);
}
NSReleaseAlertPanel(panel);
}
@ -1330,9 +1338,17 @@ void NSBeginCriticalAlertSheet(NSString *title,
[NSApp beginSheet: panel
modalForWindow: docWindow
modalDelegate: modalDelegate
didEndSelector: didEndSelector
didEndSelector: willEndSelector
contextInfo: contextInfo];
[panel close];
if (modalDelegate && [modalDelegate respondsToSelector: didEndSelector])
{
void (*didEnd)(id, SEL, id, int, void*);
didEnd = (void (*)(id, SEL, id, int, void*))[modalDelegate methodForSelector:
didEndSelector];
didEnd(modalDelegate, didEndSelector, panel, [panel result], contextInfo);
}
NSReleaseAlertPanel(panel);
}
@ -1364,9 +1380,17 @@ void NSBeginInformationalAlertSheet(NSString *title,
[NSApp beginSheet: panel
modalForWindow: docWindow
modalDelegate: modalDelegate
didEndSelector: didEndSelector
didEndSelector: willEndSelector
contextInfo: contextInfo];
[panel close];
if (modalDelegate && [modalDelegate respondsToSelector: didEndSelector])
{
void (*didEnd)(id, SEL, id, int, void*);
didEnd = (void (*)(id, SEL, id, int, void*))[modalDelegate methodForSelector:
didEndSelector];
didEnd(modalDelegate, didEndSelector, panel, [panel result], contextInfo);
}
NSReleaseAlertPanel(panel);
}
@ -1635,23 +1659,14 @@ void NSBeginInformationalAlertSheet(NSString *title,
contextInfo: (void *)contextInfo
{
[self _setupPanel];
if (GSCurrentThread() != GSAppKitThread)
{
[self performSelectorOnMainThread: _cmd
withObject: nil
waitUntilDone: YES];
}
else
{
_modalDelegate = delegate;
_didEndSelector = didEndSelector;
[NSApp beginSheet: _window
modalForWindow: window
modalDelegate: self
_modalDelegate = delegate;
_didEndSelector = didEndSelector;
[NSApp beginSheet: _window
modalForWindow: window
modalDelegate: self
didEndSelector: @selector(_alertDidEnd:returnCode:contextInfo:)
contextInfo: contextInfo];
DESTROY(_window);
}
contextInfo: contextInfo];
DESTROY(_window);
}
- (void) _alertDidEnd: (NSWindow *)sheet