Я разрабатываю плагин PhotoShop на C ++. В нем мне нужно показать какой-то пользовательский интерфейс, а в MacOS у меня есть NSWindowController
производный класс, который показывает, что мне нужно.
Чтобы показать окно Какао внутри плагина фотошопа, у меня есть такой код.
OSStatus initializeCocoaListener()
{
[[[MainWindowController alloc] init] autorelease];
return noErr;
}
OSStatus orderWindowFrontListener(void)
{
int okPressed = [[MainWindowController mainWindowController] showWindow];
return okPressed;
}
- (int) showWindow
{
[self.window makeKeyAndOrderFront:nil];
[NSApplication sharedApplication].delegate = self;
int b = [[NSApplication sharedApplication] runModalForWindow:self.window];
[self.window orderOut:self];
return b;
}
все отлично работает. Пользовательский интерфейс отображается по мере необходимости. Однако проблема в том, что когда я нажимаю системную кнопку Close
, окно скрывается, но закрывается не полностью. Пользовательский интерфейс PhotoShop по-прежнему заблокирован.
Для правильного закрытия у меня есть кнопка в окне, которая вызывает такой код.
-(IBAction) closeWindow:(id)sender
{
[NSApp stopModalWithCode:0];
}
после этого окно разрушается и PhotoShop получаетобратно управление.
Ну, вопрос в том, как заставить системную кнопку [Close]
работать так же?
Я пытался реализовать протокол NSApplicationDelegate
и переопределить этот метод
@interface MainWindowController : NSWindowController<NSApplicationDelegate>
{
....
Is there a special way to close a Modal dialog in Cocoa?
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication {
return YES;
}
но не повезло.
Есть ли другие способы?