Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

Diff of /server-client.c [a090b7] .. [bbad75] Maximize Restore

  Switch to side-by-side view

--- a/server-client.c
+++ b/server-client.c
@@ -1,4 +1,4 @@
-/* $Id: server-client.c,v 1.10 2009-10-28 23:14:15 tcunha Exp $ */
+/* $Id: server-client.c,v 1.11 2009-11-04 22:42:31 tcunha Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -60,7 +60,7 @@
 	c->references = 0;
 	imsg_init(&c->ibuf, fd);
 	
-	if (gettimeofday(&c->tv, NULL) != 0)
+	if (gettimeofday(&c->creation_time, NULL) != 0)
 		fatal("gettimeofday failed");
 
 	ARRAY_INIT(&c->prompt_hdata);
@@ -260,18 +260,19 @@
 	struct window_pane	*wp;
 	struct screen		*s;
 	struct options		*oo;
-	struct timeval	 	 tv;
+	struct timeval		 tv_add, tv_now;
 	struct key_binding	*bd;
 	struct keylist		*keylist;
 	struct mouse_event	 mouse;
 	int		 	 key, status, xtimeout, mode, isprefix;
 	u_int			 i;
 
+	/* Check and update repeat flag. */
+	if (gettimeofday(&tv_now, NULL) != 0)
+		fatal("gettimeofday failed");
 	xtimeout = options_get_number(&c->session->options, "repeat-time");
 	if (xtimeout != 0 && c->flags & CLIENT_REPEAT) {
-		if (gettimeofday(&tv, NULL) != 0)
-			fatal("gettimeofday failed");
-		if (timercmp(&tv, &c->repeat_timer, >))
+		if (timercmp(&tv_now, &c->repeat_timer, >))
 			c->flags &= ~(CLIENT_PREFIX|CLIENT_REPEAT);
 	}
 
@@ -280,11 +281,13 @@
 	while (tty_keys_next(&c->tty, &key, &mouse) == 0) {
 		if (c->session == NULL)
 			return;
-
-		c->session->activity = time(NULL);
 		w = c->session->curw->window;
 		wp = w->active;	/* could die */
 		oo = &c->session->options;
+
+		/* Update activity timer. */
+		memcpy(&c->session->activity_time,
+		    &tv_now, sizeof c->session->activity_time);
 
 		/* Special case: number keys jump to pane in identify mode. */
 		if (c->flags & CLIENT_IDENTIFY && key >= '0' && key <= '9') {	
@@ -363,11 +366,9 @@
 		if (xtimeout != 0 && bd->can_repeat) {
 			c->flags |= CLIENT_PREFIX|CLIENT_REPEAT;
 
-			tv.tv_sec = xtimeout / 1000;
-			tv.tv_usec = (xtimeout % 1000) * 1000L;
-			if (gettimeofday(&c->repeat_timer, NULL) != 0)
-				fatal("gettimeofday failed");
-			timeradd(&c->repeat_timer, &tv, &c->repeat_timer);
+			tv_add.tv_sec = xtimeout / 1000;
+			tv_add.tv_usec = (xtimeout % 1000) * 1000L;
+			timeradd(&tv_now, &tv_add, &c->repeat_timer);
 		}
 
 		/* Dispatch the command. */
@@ -580,11 +581,14 @@
 			if (!(c->flags & CLIENT_SUSPENDED))
 				break;
 			c->flags &= ~CLIENT_SUSPENDED;
+
+			if (c->session != NULL &&
+			    gettimeofday(&c->session->activity_time, NULL) != 0)
+				fatal("gettimeofday failed");
+
 			tty_start_tty(&c->tty);
 			server_redraw_client(c);
 			recalculate_sizes();
-			if (c->session != NULL)
-				c->session->activity = time(NULL);
 			break;
 		case MSG_ENVIRON:
 			if (datalen != sizeof environdata)
@@ -663,9 +667,6 @@
 	struct cmd	*cmd;
 	int		 argc;
 	char	       **argv, *cause;
-
-	if (c->session != NULL)
-		c->session->activity = time(NULL);
 
 	ctx.error = server_client_msg_error;
 	ctx.print = server_client_msg_print;