mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 01:34:18 +00:00 
			
		
		
		
	Use timeout events for the identify and message timers.
This commit is contained in:
		@@ -120,8 +120,11 @@ server_client_lost(struct client *c)
 | 
				
			|||||||
	if (c->title != NULL)
 | 
						if (c->title != NULL)
 | 
				
			||||||
		xfree(c->title);
 | 
							xfree(c->title);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						evtimer_del(&c->identify_timer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (c->message_string != NULL)
 | 
						if (c->message_string != NULL)
 | 
				
			||||||
		xfree(c->message_string);
 | 
							xfree(c->message_string);
 | 
				
			||||||
 | 
						evtimer_del(&c->message_timer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (c->prompt_string != NULL)
 | 
						if (c->prompt_string != NULL)
 | 
				
			||||||
		xfree(c->prompt_string);
 | 
							xfree(c->prompt_string);
 | 
				
			||||||
@@ -448,12 +451,6 @@ server_client_check_timers(struct client *c)
 | 
				
			|||||||
	if (gettimeofday(&tv, NULL) != 0)
 | 
						if (gettimeofday(&tv, NULL) != 0)
 | 
				
			||||||
		fatal("gettimeofday failed");
 | 
							fatal("gettimeofday failed");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (c->flags & CLIENT_IDENTIFY && timercmp(&tv, &c->identify_timer, >))
 | 
					 | 
				
			||||||
		server_clear_identify(c);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (c->message_string != NULL && timercmp(&tv, &c->message_timer, >))
 | 
					 | 
				
			||||||
		status_message_clear(c);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (c->message_string != NULL || c->prompt_string != NULL) {
 | 
						if (c->message_string != NULL || c->prompt_string != NULL) {
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * Don't need timed redraw for messages/prompts so bail now.
 | 
							 * Don't need timed redraw for messages/prompts so bail now.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								server-fn.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								server-fn.c
									
									
									
									
									
								
							@@ -24,6 +24,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "tmux.h"
 | 
					#include "tmux.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void	server_callback_identify(int, short, void *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
server_fill_environ(struct session *s, struct environ *env)
 | 
					server_fill_environ(struct session *s, struct environ *env)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -354,9 +356,9 @@ server_set_identify(struct client *c)
 | 
				
			|||||||
	tv.tv_sec = delay / 1000;
 | 
						tv.tv_sec = delay / 1000;
 | 
				
			||||||
	tv.tv_usec = (delay % 1000) * 1000L;
 | 
						tv.tv_usec = (delay % 1000) * 1000L;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (gettimeofday(&c->identify_timer, NULL) != 0)
 | 
						evtimer_del(&c->identify_timer);
 | 
				
			||||||
		fatal("gettimeofday failed");
 | 
						evtimer_set(&c->identify_timer, server_callback_identify, c);
 | 
				
			||||||
	timeradd(&c->identify_timer, &tv, &c->identify_timer);
 | 
						evtimer_add(&c->identify_timer, &tv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c->flags |= CLIENT_IDENTIFY;
 | 
						c->flags |= CLIENT_IDENTIFY;
 | 
				
			||||||
	c->tty.flags |= (TTY_FREEZE|TTY_NOCURSOR);
 | 
						c->tty.flags |= (TTY_FREEZE|TTY_NOCURSOR);
 | 
				
			||||||
@@ -373,6 +375,14 @@ server_clear_identify(struct client *c)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					server_callback_identify(unused int fd, unused short events, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct client	*c = data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						server_clear_identify(c);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
server_update_event(struct client *c)
 | 
					server_update_event(struct client *c)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								status.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								status.c
									
									
									
									
									
								
							@@ -33,6 +33,7 @@ char   *status_job(struct client *, char **);
 | 
				
			|||||||
void	status_job_callback(struct job *);
 | 
					void	status_job_callback(struct job *);
 | 
				
			||||||
size_t	status_width(struct winlink *);
 | 
					size_t	status_width(struct winlink *);
 | 
				
			||||||
char   *status_print(struct session *, struct winlink *, struct grid_cell *);
 | 
					char   *status_print(struct session *, struct winlink *, struct grid_cell *);
 | 
				
			||||||
 | 
					void	status_message_callback(int, short, void *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void	status_prompt_add_history(struct client *);
 | 
					void	status_prompt_add_history(struct client *);
 | 
				
			||||||
char   *status_prompt_complete(const char *);
 | 
					char   *status_prompt_complete(const char *);
 | 
				
			||||||
@@ -580,9 +581,9 @@ status_message_set(struct client *c, const char *fmt, ...)
 | 
				
			|||||||
	tv.tv_sec = delay / 1000;
 | 
						tv.tv_sec = delay / 1000;
 | 
				
			||||||
	tv.tv_usec = (delay % 1000) * 1000L;
 | 
						tv.tv_usec = (delay % 1000) * 1000L;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	if (gettimeofday(&c->message_timer, NULL) != 0)
 | 
						evtimer_del(&c->message_timer);
 | 
				
			||||||
		fatal("gettimeofday failed");
 | 
						evtimer_set(&c->message_timer, status_message_callback, c);
 | 
				
			||||||
	timeradd(&c->message_timer, &tv, &c->message_timer);
 | 
						evtimer_add(&c->message_timer, &tv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE);
 | 
						c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE);
 | 
				
			||||||
	c->flags |= CLIENT_STATUS;
 | 
						c->flags |= CLIENT_STATUS;
 | 
				
			||||||
@@ -603,6 +604,14 @@ status_message_clear(struct client *c)
 | 
				
			|||||||
	screen_reinit(&c->status);
 | 
						screen_reinit(&c->status);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					status_message_callback(unused int fd, unused short event, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct client	*c = data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						status_message_clear(c);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Draw client message on status line of present else on last line. */
 | 
					/* Draw client message on status line of present else on last line. */
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
status_message_redraw(struct client *c)
 | 
					status_message_redraw(struct client *c)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1074,10 +1074,10 @@ struct client {
 | 
				
			|||||||
#define CLIENT_DEAD 0x200
 | 
					#define CLIENT_DEAD 0x200
 | 
				
			||||||
	int		 flags;
 | 
						int		 flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct timeval	 identify_timer;
 | 
						struct event	 identify_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	char		*message_string;
 | 
						char		*message_string;
 | 
				
			||||||
	struct timeval	 message_timer;
 | 
						struct event	 message_timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	char		*prompt_string;
 | 
						char		*prompt_string;
 | 
				
			||||||
	char		*prompt_buffer;
 | 
						char		*prompt_buffer;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user