1
0
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:
Owen Dunn 2005-03-01 21:38:06 +00:00
parent 41793f56d4
commit d403e31233
4 changed files with 50 additions and 6 deletions

View File

@ -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:

View File

@ -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;

View File

@ -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 *

View File

@ -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);