Make remain-on-exit work again when there is only one pane left, which was

broken sometime during the pane/layout changes. Reported/tested by Iain Morgan,
thanks.
This commit is contained in:
Nicholas Marriott 2009-06-25 16:01:42 +00:00
parent 942ea4267d
commit 944520b3a8

View File

@ -1,4 +1,4 @@
/* $Id: server.c,v 1.145 2009-05-19 13:32:55 tcunha Exp $ */ /* $OpenBSD: server.c,v 1.2 2009/06/24 17:36:15 nicm Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -980,7 +980,7 @@ server_check_window_content(
return (1); return (1);
} }
/* Check if window still exists.. */ /* Check if window still exists. */
void void
server_check_window(struct window *w) server_check_window(struct window *w)
{ {
@ -998,13 +998,18 @@ server_check_window(struct window *w)
wp = TAILQ_FIRST(&w->panes); wp = TAILQ_FIRST(&w->panes);
while (wp != NULL) { while (wp != NULL) {
wq = TAILQ_NEXT(wp, entry); wq = TAILQ_NEXT(wp, entry);
if (wp->fd != -1) /*
destroyed = 0; * If the pane has died and the remain-on-exit flag is not set,
else if (!flag) { * remove the pane; otherwise, if the flag is set, don't allow
* the window to be destroyed (or it'll close when the last
* pane dies).
*/
if (wp->fd == -1 && !flag) {
window_remove_pane(w, wp); window_remove_pane(w, wp);
server_redraw_window(w); server_redraw_window(w);
layout_refresh(w, 0); layout_refresh(w, 0);
} } else
destroyed = 0;
wp = wq; wp = wq;
} }