}
/* This should only kill the current session, not the whole application. */
-void connection_fatal(void *fontend, char *fmt, ...) {
+void connection_fatal(void *frontend, char *fmt, ...) {
va_list ap;
Str255 stuff;
+ Session *s = frontend;
va_start(ap, fmt);
/* We'd like stuff to be a Pascal string */
va_end(ap);
ParamText(stuff, NULL, NULL, NULL);
StopAlert(128, NULL);
- cleanup_exit(1);
+
+ s->session_closed = TRUE;
+
+ if (s->cfg.close_on_exit == FORCE_ON)
+ mac_closewindow(s->window);
}
/* Null SSH agent client -- never finds an agent. */
mac_adjustmenus();
}
-void notify_remote_exit(void *fe) { /* XXX anything needed here? */ }
+void notify_remote_exit(void *frontend)
+{
+ Session *s = frontend;
+ int exitcode;
+
+ if (!s->session_closed &&
+ (exitcode = s->back->exitcode(s->backhandle)) >=0) {
+ s->session_closed = TRUE;
+ if (s->cfg.close_on_exit == FORCE_ON ||
+ (s->cfg.close_on_exit == AUTO && exitcode == 0)) {
+ mac_closewindow(s->window);
+ return;
+ }
+
+ /* The session's dead */
+
+ if (s->ldisc) {
+ ldisc_free(s->ldisc);
+ s->ldisc = NULL;
+ }
+
+ if (s->back) {
+ s->back->free(s->backhandle);
+ s->backhandle = NULL;
+ s->back = NULL;
+ update_specials_menu(s);
+ }
+
+ {
+ char title[100];
+ sprintf(title, "%.70s (inactive)", appname);
+ set_title(s, title);
+ }
+ }
+}
/*
* Local Variables:
memset(s, 0, sizeof(*s));
do_defaults(NULL, &s->cfg);
s->hasfile = FALSE;
+ s->session_closed = FALSE;
}
/* Copy the configuration somewhere else in case this is a *
int alertret;
Session *s = mac_windowsession(window);
- if (s->cfg.warn_on_close) {
+ if (s->cfg.warn_on_close && !s->session_closed) {
ParamText("\pAre you sure you want to close this session?",
NULL, NULL, NULL);
alertret=CautionAlert(wQuestion, NULL);
HideWindow(s->window);
*s->prev = s->next;
s->next->prev = s->prev;
- ldisc_free(s->ldisc);
- s->back->free(s->backhandle);
+ if (s->ldisc)
+ ldisc_free(s->ldisc);
+ if (s->back)
+ s->back->free(s->backhandle);
log_free(s->logctx);
if (s->uni_to_font != NULL)
DisposeUnicodeToTextInfo(&s->uni_to_font);