mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		
							
								
								
									
										47
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								window.c
									
									
									
									
									
								
							@@ -70,6 +70,11 @@ const struct window_mode *all_window_modes[] = {
 | 
			
		||||
	NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct window_pane_input_data {
 | 
			
		||||
	struct cmdq_item	*item;
 | 
			
		||||
	u_int			 wp;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct window_pane *window_pane_create(struct window *, u_int, u_int,
 | 
			
		||||
		    u_int);
 | 
			
		||||
static void	window_pane_destroy(struct window_pane *);
 | 
			
		||||
@@ -1467,3 +1472,45 @@ winlink_shuffle_up(struct session *s, struct winlink *wl)
 | 
			
		||||
 | 
			
		||||
	return (idx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
window_pane_input_callback(struct client *c, int closed, void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct window_pane_input_data	*cdata = data;
 | 
			
		||||
	struct window_pane		*wp;
 | 
			
		||||
 | 
			
		||||
	wp = window_pane_find_by_id(cdata->wp);
 | 
			
		||||
	if (wp == NULL || closed || c->flags & CLIENT_DEAD) {
 | 
			
		||||
		c->stdin_callback = NULL;
 | 
			
		||||
		server_client_unref(c);
 | 
			
		||||
 | 
			
		||||
		cdata->item->flags &= ~CMDQ_WAITING;
 | 
			
		||||
		free(cdata);
 | 
			
		||||
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (evbuffer_add_buffer(wp->event->input, c->stdin_data) != 0)
 | 
			
		||||
		evbuffer_drain(c->stdin_data, EVBUFFER_LENGTH(c->stdin_data));
 | 
			
		||||
	input_parse(wp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
window_pane_start_input(struct window_pane *wp, struct cmdq_item *item,
 | 
			
		||||
    char **cause)
 | 
			
		||||
{
 | 
			
		||||
	struct client			*c = item->client;
 | 
			
		||||
	struct window_pane_input_data	*cdata;
 | 
			
		||||
 | 
			
		||||
	if (~wp->flags & PANE_EMPTY) {
 | 
			
		||||
		*cause = xstrdup("pane is not empty");
 | 
			
		||||
		return (-1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cdata = xmalloc(sizeof *cdata);
 | 
			
		||||
	cdata->item = item;
 | 
			
		||||
	cdata->wp = wp->id;
 | 
			
		||||
 | 
			
		||||
	return (server_set_stdin_callback(c, window_pane_input_callback, cdata,
 | 
			
		||||
	    cause));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user