diff --git a/alerts.c b/alerts.c index 5d52f7ad..806e565b 100644 --- a/alerts.c +++ b/alerts.c @@ -126,6 +126,9 @@ alerts_reset(struct window *w) void alerts_queue(struct window *w, int flags) { + if (w->flags & WINDOW_ACTIVITY) + alerts_reset(w); + if (!event_initialized(&w->alerts_timer)) evtimer_set(&w->alerts_timer, alerts_timer, w); @@ -139,9 +142,6 @@ alerts_queue(struct window *w, int flags) event_once(-1, EV_TIMEOUT, alerts_callback, NULL, NULL); alerts_fired = 1; } - - if (flags & WINDOW_ACTIVITY) - alerts_reset(w); } int diff --git a/cmd-break-pane.c b/cmd-break-pane.c index c7af7865..2aa5c5b7 100644 --- a/cmd-break-pane.c +++ b/cmd-break-pane.c @@ -43,7 +43,8 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_q *cmdq) { struct args *args = self->args; struct winlink *wl; - struct session *s; + struct session *src_s; + struct session *dst_s; struct window_pane *wp; struct window *w; char *name; @@ -53,28 +54,28 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_q *cmdq) const char *template; char *cp; - if ((wl = cmd_find_pane(cmdq, args_get(args, 's'), &s, &wp)) == NULL) + wl = cmd_find_pane(cmdq, args_get(args, 's'), &src_s, &wp); + if (wl == NULL) return (CMD_RETURN_ERROR); - if ((idx = cmd_find_index(cmdq, args_get(args, 't'), &s)) == -2) + if ((idx = cmd_find_index(cmdq, args_get(args, 't'), &dst_s)) == -2) return (CMD_RETURN_ERROR); - if (idx != -1 && winlink_find_by_index(&s->windows, idx) != NULL) { + if (idx != -1 && winlink_find_by_index(&dst_s->windows, idx) != NULL) { cmdq_error(cmdq, "index %d already in use", idx); return (CMD_RETURN_ERROR); } + w = wl->window; - if (window_count_panes(wl->window) == 1) { + if (window_count_panes(w) == 1) { cmdq_error(cmdq, "can't break with only one pane"); return (CMD_RETURN_ERROR); } - - w = wl->window; server_unzoom_window(w); TAILQ_REMOVE(&w->panes, wp, entry); window_lost_pane(w, wp); layout_close_pane(wp); - w = wp->window = window_create1(s->sx, s->sy); + w = wp->window = window_create1(dst_s->sx, dst_s->sy); TAILQ_INSERT_HEAD(&w->panes, wp, entry); w->active = wp; name = default_window_name(w); @@ -83,20 +84,25 @@ cmd_break_pane_exec(struct cmd *self, struct cmd_q *cmdq) layout_init(w, wp); if (idx == -1) - idx = -1 - options_get_number(&s->options, "base-index"); - wl = session_attach(s, w, idx, &cause); /* can't fail */ + idx = -1 - options_get_number(&dst_s->options, "base-index"); + wl = session_attach(dst_s, w, idx, &cause); /* can't fail */ if (!args_has(self->args, 'd')) - session_select(s, wl->idx); + session_select(dst_s, wl->idx); - server_redraw_session(s); - server_status_session_group(s); + server_redraw_session(src_s); + if (src_s != dst_s) + server_redraw_session(dst_s); + server_status_session_group(src_s); + if (src_s != dst_s) + server_status_session_group(dst_s); if (args_has(args, 'P')) { if ((template = args_get(args, 'F')) == NULL) template = BREAK_PANE_TEMPLATE; ft = format_create(); - format_defaults(ft, cmd_find_client(cmdq, NULL, 1), s, wl, wp); + format_defaults(ft, cmd_find_client(cmdq, NULL, 1), dst_s, wl, + wp); cp = format_expand(ft, template); cmdq_print(cmdq, "%s", cp); diff --git a/cmd-switch-client.c b/cmd-switch-client.c index 10171018..3a72886a 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -124,7 +124,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_q *cmdq) environ_update(update, &c->environ, &s->environ); } - if (c->session != NULL) + if (c->session != NULL && c->session != s) c->last_session = c->session; c->session = s; status_timer_start(c); diff --git a/layout.c b/layout.c index bb1bbf8d..266d1f39 100644 --- a/layout.c +++ b/layout.c @@ -686,6 +686,8 @@ layout_split_pane( case LAYOUT_LEFTRIGHT: if (size < 0) size2 = ((sx + 1) / 2) - 1; + else if (insert_before) + size2 = sx - size - 1; else size2 = size; if (size2 < PANE_MINIMUM) @@ -699,6 +701,8 @@ layout_split_pane( case LAYOUT_TOPBOTTOM: if (size < 0) size2 = ((sy + 1) / 2) - 1; + else if (insert_before) + size2 = sy - size - 1; else size2 = size; if (size2 < PANE_MINIMUM)