mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Correct the dance to fix the active pane in join-pane by pulling the
(right) code from break-pane and window_remove_pane into a helper function.
This commit is contained in:
		@@ -65,16 +65,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	server_unzoom_window(w);
 | 
			
		||||
 | 
			
		||||
	TAILQ_REMOVE(&w->panes, wp, entry);
 | 
			
		||||
	if (wp == w->active) {
 | 
			
		||||
		w->active = w->last;
 | 
			
		||||
		w->last = NULL;
 | 
			
		||||
		if (w->active == NULL) {
 | 
			
		||||
			w->active = TAILQ_PREV(wp, window_panes, entry);
 | 
			
		||||
			if (w->active == NULL)
 | 
			
		||||
				w->active = TAILQ_NEXT(wp, entry);
 | 
			
		||||
		}
 | 
			
		||||
	} else if (wp == w->last)
 | 
			
		||||
		w->last = NULL;
 | 
			
		||||
	window_lost_pane(w, wp);
 | 
			
		||||
	layout_close_pane(wp);
 | 
			
		||||
 | 
			
		||||
	w = wp->window = window_create1(s->sx, s->sy);
 | 
			
		||||
 
 | 
			
		||||
@@ -139,11 +139,7 @@ join_pane(struct cmd *self, struct cmd_q *cmdq, int not_same_window)
 | 
			
		||||
 | 
			
		||||
	layout_close_pane(src_wp);
 | 
			
		||||
 | 
			
		||||
	if (src_w->active == src_wp) {
 | 
			
		||||
		src_w->active = TAILQ_PREV(src_wp, window_panes, entry);
 | 
			
		||||
		if (src_w->active == NULL)
 | 
			
		||||
			src_w->active = TAILQ_NEXT(src_wp, entry);
 | 
			
		||||
	}
 | 
			
		||||
	window_lost_pane(src_w, src_wp);
 | 
			
		||||
	TAILQ_REMOVE(&src_w->panes, src_wp, entry);
 | 
			
		||||
 | 
			
		||||
	if (window_count_panes(src_w) == 0)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							@@ -2138,6 +2138,7 @@ struct window_pane *window_add_pane(struct window *, u_int);
 | 
			
		||||
void		 window_resize(struct window *, u_int, u_int);
 | 
			
		||||
int		 window_zoom(struct window_pane *);
 | 
			
		||||
int		 window_unzoom(struct window *);
 | 
			
		||||
void		 window_lost_pane(struct window *, struct window_pane *);
 | 
			
		||||
void		 window_remove_pane(struct window *, struct window_pane *);
 | 
			
		||||
struct window_pane *window_pane_at_index(struct window *, u_int);
 | 
			
		||||
struct window_pane *window_pane_next_by_number(struct window *,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								window.c
									
									
									
									
									
								
							@@ -591,7 +591,7 @@ window_add_pane(struct window *w, u_int hlimit)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_remove_pane(struct window *w, struct window_pane *wp)
 | 
			
		||||
window_lost_pane(struct window *w, struct window_pane *wp)
 | 
			
		||||
{
 | 
			
		||||
	if (wp == w->active) {
 | 
			
		||||
		w->active = w->last;
 | 
			
		||||
@@ -603,6 +603,12 @@ window_remove_pane(struct window *w, struct window_pane *wp)
 | 
			
		||||
		}
 | 
			
		||||
	} else if (wp == w->last)
 | 
			
		||||
		w->last = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_remove_pane(struct window *w, struct window_pane *wp)
 | 
			
		||||
{
 | 
			
		||||
	window_lost_pane(w, wp);
 | 
			
		||||
 | 
			
		||||
	TAILQ_REMOVE(&w->panes, wp, entry);
 | 
			
		||||
	window_pane_destroy(wp);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user