mirror of
https://github.com/tmux/tmux.git
synced 2024-11-17 09:58:52 +00:00
Do not notify window-layout-changed if the window is about to be
destroyed (since it may have been freed by the time the notify happens), from Romain Francoise in GitHub issue 3860.
This commit is contained in:
parent
5458cb2850
commit
6c0067c103
@ -246,7 +246,7 @@ cmd_display_panes_key(struct client *c, void *data, struct key_event *event)
|
||||
wp = window_pane_at_index(w, index);
|
||||
if (wp == NULL)
|
||||
return (1);
|
||||
window_unzoom(w);
|
||||
window_unzoom(w, 1);
|
||||
|
||||
xasprintf(&expanded, "%%%u", wp->id);
|
||||
|
||||
|
@ -87,7 +87,7 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item)
|
||||
|
||||
if (args_has(args, 'Z')) {
|
||||
if (w->flags & WINDOW_ZOOMED)
|
||||
window_unzoom(w);
|
||||
window_unzoom(w, 1);
|
||||
else
|
||||
window_zoom(wp);
|
||||
server_redraw_window(w);
|
||||
|
2
popup.c
2
popup.c
@ -346,7 +346,7 @@ popup_make_pane(struct popup_data *pd, enum layout_type type)
|
||||
u_int hlimit;
|
||||
const char *shell;
|
||||
|
||||
window_unzoom(w);
|
||||
window_unzoom(w, 1);
|
||||
|
||||
lc = layout_split_pane(wp, type, -1, 0);
|
||||
hlimit = options_get_number(s->options, "history-limit");
|
||||
|
2
resize.c
2
resize.c
@ -40,7 +40,7 @@ resize_window(struct window *w, u_int sx, u_int sy, int xpixel, int ypixel)
|
||||
/* If the window is zoomed, unzoom. */
|
||||
zoomed = w->flags & WINDOW_ZOOMED;
|
||||
if (zoomed)
|
||||
window_unzoom(w);
|
||||
window_unzoom(w, 1);
|
||||
|
||||
/* Resize the layout first. */
|
||||
layout_resize(w, sx, sy);
|
||||
|
@ -487,6 +487,6 @@ server_check_unattached(void)
|
||||
void
|
||||
server_unzoom_window(struct window *w)
|
||||
{
|
||||
if (window_unzoom(w) == 0)
|
||||
if (window_unzoom(w, 1) == 0)
|
||||
server_redraw_window(w);
|
||||
}
|
||||
|
2
tmux.h
2
tmux.h
@ -3021,7 +3021,7 @@ struct window_pane *window_add_pane(struct window *, struct window_pane *,
|
||||
void window_resize(struct window *, u_int, u_int, int, int);
|
||||
void window_pane_send_resize(struct window_pane *, u_int, u_int);
|
||||
int window_zoom(struct window_pane *);
|
||||
int window_unzoom(struct window *);
|
||||
int window_unzoom(struct window *, int);
|
||||
int window_push_zoom(struct window *, int, int);
|
||||
int window_pop_zoom(struct window *);
|
||||
void window_lost_pane(struct window *, struct window_pane *);
|
||||
|
10
window.c
10
window.c
@ -340,7 +340,7 @@ window_destroy(struct window *w)
|
||||
{
|
||||
log_debug("window @%u destroyed (%d references)", w->id, w->references);
|
||||
|
||||
window_unzoom(w);
|
||||
window_unzoom(w, 0);
|
||||
RB_REMOVE(windows, &windows, w);
|
||||
|
||||
if (w->layout_root != NULL)
|
||||
@ -666,7 +666,7 @@ window_zoom(struct window_pane *wp)
|
||||
}
|
||||
|
||||
int
|
||||
window_unzoom(struct window *w)
|
||||
window_unzoom(struct window *w, int notify)
|
||||
{
|
||||
struct window_pane *wp;
|
||||
|
||||
@ -683,7 +683,9 @@ window_unzoom(struct window *w)
|
||||
wp->saved_layout_cell = NULL;
|
||||
}
|
||||
layout_fix_panes(w, NULL);
|
||||
notify_window("window-layout-changed", w);
|
||||
|
||||
if (notify)
|
||||
notify_window("window-layout-changed", w);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@ -697,7 +699,7 @@ window_push_zoom(struct window *w, int always, int flag)
|
||||
w->flags |= WINDOW_WASZOOMED;
|
||||
else
|
||||
w->flags &= ~WINDOW_WASZOOMED;
|
||||
return (window_unzoom(w) == 0);
|
||||
return (window_unzoom(w, 1) == 0);
|
||||
}
|
||||
|
||||
int
|
||||
|
Loading…
Reference in New Issue
Block a user