X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/919baedb34e9f6e351d70820529398181d8d0ea6..9e296bfa1190f3bb2aa9ebce308386e31eaf0898:/macosx/osxwin.m diff --git a/macosx/osxwin.m b/macosx/osxwin.m index 0b0c3ff6..f3cba032 100644 --- a/macosx/osxwin.m +++ b/macosx/osxwin.m @@ -300,6 +300,8 @@ */ [self center]; /* :-) */ + exited = FALSE; + return self; } @@ -311,6 +313,16 @@ * Do so. */ sfree(alert_ctx); + if (back) + back->free(backhandle); + if (ldisc) + ldisc_free(ldisc); + /* ldisc must be freed before term, since ldisc_free expects term + * still to be around. */ + if (logctx) + log_free(logctx); + if (term) + term_free(term); [super dealloc]; } @@ -346,7 +358,7 @@ char coutput[32]; int use_coutput = FALSE, special = FALSE, start, end; -printf("n=%d c=U+%04x cm=U+%04x m=%08x\n", n, c, cm, m); +//printf("n=%d c=U+%04x cm=U+%04x m=%08x\n", n, c, cm, m); /* * FIXME: Alt+numberpad codes. @@ -846,6 +858,33 @@ printf("n=%d c=U+%04x cm=U+%04x m=%08x\n", n, c, cm, m); } } +- (void)notifyRemoteExit +{ + int exitcode; + + if (!exited && (exitcode = back->exitcode(backhandle)) >= 0) + [self endSession:(exitcode == 0)]; +} + +- (void)endSession:(int)clean +{ + exited = TRUE; + if (ldisc) { + ldisc_free(ldisc); + ldisc = NULL; + } + if (back) { + back->free(backhandle); + backhandle = NULL; + back = NULL; + //FIXME: update specials menu; + } + if (cfg.close_on_exit == FORCE_ON || + (cfg.close_on_exit == AUTO && clean)) + [self close]; + // FIXME: else show restart menu item +} + @end int from_backend(void *frontend, int is_stderr, const char *data, int len) @@ -859,23 +898,11 @@ void frontend_keypress(void *handle) /* FIXME */ } -void connection_fatal(void *frontend, char *p, ...) -{ - //SessionWindow *win = (SessionWindow *)frontend; - /* FIXME: proper OS X GUI stuff */ - va_list ap; - fprintf(stderr, "FATAL ERROR: "); - va_start(ap, p); - vfprintf(stderr, p, ap); - va_end(ap); - fputc('\n', stderr); - exit(1); -} - void notify_remote_exit(void *frontend) { - //SessionWindow *win = (SessionWindow *)frontend; - /* FIXME */ + SessionWindow *win = (SessionWindow *)frontend; + + [win notifyRemoteExit]; } void ldisc_update(void *frontend, int echo, int edit) @@ -886,6 +913,13 @@ void ldisc_update(void *frontend, int echo, int edit) */ } +char *get_ttymode(void *frontend, const char *mode) +{ + SessionWindow *win = (SessionWindow *)ctx; + Terminal *term = [win term]; + return term_get_ttymode(term, mode); +} + void update_specials_menu(void *frontend) { //SessionWindow *win = (SessionWindow *)frontend;