mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-22 06:38:37 -05: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. */
|
/* 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;
|
va_list ap;
|
||||||
Str255 stuff;
|
Str255 stuff;
|
||||||
|
Session *s = frontend;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
/* We'd like stuff to be a Pascal string */
|
/* We'd like stuff to be a Pascal string */
|
||||||
@ -669,7 +670,11 @@ void connection_fatal(void *fontend, char *fmt, ...) {
|
|||||||
va_end(ap);
|
va_end(ap);
|
||||||
ParamText(stuff, NULL, NULL, NULL);
|
ParamText(stuff, NULL, NULL, NULL);
|
||||||
StopAlert(128, 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. */
|
/* Null SSH agent client -- never finds an agent. */
|
||||||
@ -832,7 +837,41 @@ void update_specials_menu(void *frontend)
|
|||||||
mac_adjustmenus();
|
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:
|
* Local Variables:
|
||||||
|
@ -106,6 +106,8 @@ typedef struct Session {
|
|||||||
void *logctx;
|
void *logctx;
|
||||||
/* Unicode stuff */
|
/* Unicode stuff */
|
||||||
struct unicode_data ucsdata;
|
struct unicode_data ucsdata;
|
||||||
|
/* Session closed flag */
|
||||||
|
int session_closed;
|
||||||
|
|
||||||
/* Mac-specific elements */
|
/* Mac-specific elements */
|
||||||
short fontnum;
|
short fontnum;
|
||||||
|
@ -77,6 +77,7 @@ static void mac_config(int midsession)
|
|||||||
memset(s, 0, sizeof(*s));
|
memset(s, 0, sizeof(*s));
|
||||||
do_defaults(NULL, &s->cfg);
|
do_defaults(NULL, &s->cfg);
|
||||||
s->hasfile = FALSE;
|
s->hasfile = FALSE;
|
||||||
|
s->session_closed = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy the configuration somewhere else in case this is a *
|
/* Copy the configuration somewhere else in case this is a *
|
||||||
|
@ -1015,7 +1015,7 @@ void mac_closeterm(WindowPtr window)
|
|||||||
int alertret;
|
int alertret;
|
||||||
Session *s = mac_windowsession(window);
|
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?",
|
ParamText("\pAre you sure you want to close this session?",
|
||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
alertret=CautionAlert(wQuestion, NULL);
|
alertret=CautionAlert(wQuestion, NULL);
|
||||||
@ -1028,8 +1028,10 @@ void mac_closeterm(WindowPtr window)
|
|||||||
HideWindow(s->window);
|
HideWindow(s->window);
|
||||||
*s->prev = s->next;
|
*s->prev = s->next;
|
||||||
s->next->prev = s->prev;
|
s->next->prev = s->prev;
|
||||||
ldisc_free(s->ldisc);
|
if (s->ldisc)
|
||||||
s->back->free(s->backhandle);
|
ldisc_free(s->ldisc);
|
||||||
|
if (s->back)
|
||||||
|
s->back->free(s->backhandle);
|
||||||
log_free(s->logctx);
|
log_free(s->logctx);
|
||||||
if (s->uni_to_font != NULL)
|
if (s->uni_to_font != NULL)
|
||||||
DisposeUnicodeToTextInfo(&s->uni_to_font);
|
DisposeUnicodeToTextInfo(&s->uni_to_font);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user