Clear clients with flag too.

This commit is contained in:
Nicholas Marriott 2008-06-07 07:13:08 +00:00
parent 77224aaf8b
commit 958069575d
4 changed files with 23 additions and 49 deletions

View File

@ -1,4 +1,4 @@
/* $Id: resize.c,v 1.12 2008-06-06 20:02:27 nicm Exp $ */
/* $Id: resize.c,v 1.13 2008-06-07 07:13:08 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -121,8 +121,14 @@ recalculate_sizes(void)
log_debug("window size %u,%u (was %u,%u)", ssx, ssy,
screen_size_x(&w->base), screen_size_y(&w->base));
server_clear_window(w);
window_resize(w, ssx, ssy);
server_redraw_window(w);
for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
c = ARRAY_ITEM(&clients, i);
if (c == NULL || c->session == NULL)
continue;
if (c->session->curw->window == w)
c->flags |= (CLIENT_CLEAR|CLIENT_REDRAW);
}
}
}

View File

@ -1,4 +1,4 @@
/* $Id: server-fn.c,v 1.39 2008-06-07 06:47:38 nicm Exp $ */
/* $Id: server-fn.c,v 1.40 2008-06-07 07:13:08 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -71,19 +71,6 @@ server_write_window(
}
}
void
server_clear_client(struct client *c)
{
struct screen_redraw_ctx ctx;
screen_redraw_start_client(&ctx, c);
screen_redraw_set_attributes(&ctx, SCREEN_DEFATTR, SCREEN_DEFCOLR);
screen_redraw_clear_screen(&ctx);
screen_redraw_stop(&ctx);
status_write_client(c);
}
void
server_redraw_client(struct client *c)
{
@ -96,19 +83,6 @@ server_status_client(struct client *c)
c->flags |= CLIENT_STATUS;
}
void
server_clear_session(struct session *s)
{
struct screen_redraw_ctx ctx;
screen_redraw_start_session(&ctx, s);
screen_redraw_set_attributes(&ctx, SCREEN_DEFATTR, SCREEN_DEFCOLR);
screen_redraw_clear_screen(&ctx);
screen_redraw_stop(&ctx);
status_write_session(s);
}
void
server_redraw_session(struct session *s)
{
@ -139,19 +113,6 @@ server_status_session(struct session *s)
}
}
void
server_clear_window(struct window *w)
{
struct screen_redraw_ctx ctx;
screen_redraw_start_window(&ctx, w);
screen_redraw_set_attributes(&ctx, SCREEN_DEFATTR, SCREEN_DEFCOLR);
screen_redraw_clear_screen(&ctx);
screen_redraw_stop(&ctx);
status_write_window(w);
}
void
server_redraw_window(struct window *w)
{

View File

@ -1,4 +1,4 @@
/* $Id: server.c,v 1.57 2008-06-07 06:47:38 nicm Exp $ */
/* $Id: server.c,v 1.58 2008-06-07 07:13:08 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -275,10 +275,19 @@ void
server_check_redraw(struct client *c)
{
struct screen_redraw_ctx ctx;
struct screen screen;
if (c == NULL || c->session == NULL)
return;
if (c->flags & CLIENT_CLEAR) {
screen_create(&screen, c->sx, c->sy - 1, 0);
screen_redraw_start(&ctx, &screen, tty_write_client, c);
screen_redraw_clear_screen(&ctx);
screen_redraw_stop(&ctx);
screen_destroy(&screen);
}
if (c->flags & CLIENT_REDRAW) {
screen_redraw_start_client(&ctx, c);
screen_redraw_lines(&ctx, 0, screen_size_y(ctx.s));
@ -287,7 +296,7 @@ server_check_redraw(struct client *c)
} else if (c->flags & CLIENT_STATUS)
status_write_client(c);
c->flags &= ~(CLIENT_REDRAW|CLIENT_STATUS);
c->flags &= ~(CLIENT_CLEAR|CLIENT_REDRAW|CLIENT_STATUS);
}
/* Check for status line redraw on client. */

6
tmux.h
View File

@ -1,4 +1,4 @@
/* $Id: tmux.h,v 1.137 2008-06-07 06:47:38 nicm Exp $ */
/* $Id: tmux.h,v 1.138 2008-06-07 07:13:08 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -651,6 +651,7 @@ struct client {
#define CLIENT_MOUSE 0x4
#define CLIENT_REDRAW 0x8
#define CLIENT_STATUS 0x10
#define CLIENT_CLEAR 0x20
int flags;
struct session *session;
@ -908,13 +909,10 @@ void server_write_session(
struct session *, enum hdrtype, const void *, size_t);
void server_write_window(
struct window *, enum hdrtype, const void *, size_t);
void server_clear_client(struct client *);
void server_redraw_client(struct client *);
void server_status_client(struct client *);
void server_clear_session(struct session *);
void server_redraw_session(struct session *);
void server_status_session(struct session *);
void server_clear_window(struct window *);
void server_redraw_window(struct window *);
void server_status_window(struct window *);
void printflike2 server_write_message(struct client *, const char *, ...);