mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-25 01:02:24 +00:00
Close on exit. I'm not entirely happy with the distribution of this
across mac_closeterm() and notify_remote_exit() but it will do for now. Also, "PuTTY (inactive)" looks strange as a Mac window title in a way it doesn't on Unix or Windows. Perhaps we should find another way of indicating that a window contains a dead session? [originally from svn r5424]
This commit is contained in:
parent
41793f56d4
commit
d403e31233
45
mac/mac.c
45
mac/mac.c
@ -659,9 +659,10 @@ void cleanup_exit(int status)
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
@ -669,7 +670,11 @@ void connection_fatal(void *fontend, char *fmt, ...) {
|
||||
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. */
|
||||
@ -832,7 +837,41 @@ void update_specials_menu(void *frontend)
|
||||
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:
|
||||
|
@ -106,6 +106,8 @@ typedef struct Session {
|
||||
void *logctx;
|
||||
/* Unicode stuff */
|
||||
struct unicode_data ucsdata;
|
||||
/* Session closed flag */
|
||||
int session_closed;
|
||||
|
||||
/* Mac-specific elements */
|
||||
short fontnum;
|
||||
|
@ -77,6 +77,7 @@ static void mac_config(int midsession)
|
||||
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 *
|
||||
|
@ -1015,7 +1015,7 @@ void mac_closeterm(WindowPtr window)
|
||||
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);
|
||||
@ -1028,8 +1028,10 @@ void mac_closeterm(WindowPtr window)
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user