diff --git a/Frameworks/DocumentWindow/src/DocumentController.mm b/Frameworks/DocumentWindow/src/DocumentController.mm index 10785620..fae1a9b1 100644 --- a/Frameworks/DocumentWindow/src/DocumentController.mm +++ b/Frameworks/DocumentWindow/src/DocumentController.mm @@ -1849,7 +1849,7 @@ namespace { if(self.htmlOutputInWindow) { - [self.htmlOutputWindowController.window makeKeyAndOrderFront:self]; + [self.htmlOutputWindowController showWindow:self]; } else { @@ -1865,7 +1865,7 @@ namespace if(self.layoutView.htmlOutputView) self.layoutView.htmlOutputView = nil; - else [self.htmlOutputWindowController.window orderOut:self]; + else [self.htmlOutputWindowController close]; } } @@ -1888,7 +1888,7 @@ namespace - (IBAction)toggleHTMLOutput:(id)sender { if(self.htmlOutputVisible && self.htmlOutputInWindow && ![self.htmlOutputWindowController.window isKeyWindow]) - [self.htmlOutputWindowController.window makeKeyAndOrderFront:self]; + [self.htmlOutputWindowController showWindow:self]; else self.htmlOutputVisible = !self.htmlOutputVisible; } diff --git a/Frameworks/HTMLOutputWindow/src/HTMLOutputWindow.h b/Frameworks/HTMLOutputWindow/src/HTMLOutputWindow.h index 29633a52..21954d06 100644 --- a/Frameworks/HTMLOutputWindow/src/HTMLOutputWindow.h +++ b/Frameworks/HTMLOutputWindow/src/HTMLOutputWindow.h @@ -7,4 +7,7 @@ PUBLIC @interface HTMLOutputWindowController : NSObject @property (nonatomic, readonly) BOOL running; @property (nonatomic, readonly) BOOL needsNewWebView; + (HTMLOutputWindowController*)HTMLOutputWindowWithRunner:(command::runner_ptr const&)aRunner; + +- (void)showWindow:(id)sender; +- (void)close; @end diff --git a/Frameworks/HTMLOutputWindow/src/HTMLOutputWindow.mm b/Frameworks/HTMLOutputWindow/src/HTMLOutputWindow.mm index a43cbd7d..e6422568 100644 --- a/Frameworks/HTMLOutputWindow/src/HTMLOutputWindow.mm +++ b/Frameworks/HTMLOutputWindow/src/HTMLOutputWindow.mm @@ -55,15 +55,24 @@ OAK_DEBUG_VAR(HTMLOutputWindow); return [[self alloc] initWithRunner:aRunner]; } +- (void)showWindow:(id)sender +{ + self.retainedSelf = self; + [self.window makeKeyAndOrderFront:nil]; +} + +- (void)close +{ + [self.window close]; +} + - (void)setCommandRunner:(command::runner_ptr)aRunner { _commandRunner = aRunner; self.window.title = [NSString stringWithCxxString:_commandRunner->name()]; [self.htmlOutputView loadRequest:URLRequestForCommandRunner(_commandRunner) environment:_commandRunner->environment() autoScrolls:_commandRunner->auto_scroll_output()]; - [self.window makeKeyAndOrderFront:nil]; - - self.retainedSelf = self; + [self showWindow:self]; } - (BOOL)running @@ -76,25 +85,30 @@ OAK_DEBUG_VAR(HTMLOutputWindow); return _htmlOutputView.needsNewWebView; } -- (BOOL)windowShouldClose:(id)aWindow +- (BOOL)windowShouldClose:(id)sender { D(DBF_HTMLOutputWindow, bug("\n");); if(!_commandRunner->running()) - return [self performSelector:@selector(setRetainedSelf:) withObject:nil afterDelay:0], YES; + return YES; NSAlert* alert = [NSAlert alertWithMessageText:@"Stop task before closing?" defaultButton:@"Stop Task" alternateButton:@"Cancel" otherButton:nil informativeTextWithFormat:@"The job that the task is performing will not be completed."]; OakShowAlertForWindow(alert, self.window, ^(NSInteger returnCode){ D(DBF_HTMLOutputWindow, bug("close %s\n", BSTR(returnCode == NSAlertDefaultReturn));); if(returnCode == NSAlertDefaultReturn) /* "Stop" */ { + [self.window orderOut:self]; oak::kill_process_group_in_background(_commandRunner->process_id()); [self.window close]; - [self performSelector:@selector(setRetainedSelf:) withObject:nil afterDelay:0]; } }); return NO; } +- (void)windowWillClose:(NSNotification*)notification +{ + [self performSelector:@selector(setRetainedSelf:) withObject:nil afterDelay:0]; +} + - (void)dealloc { D(DBF_HTMLOutputWindow, bug("\n"););