mirror of
https://github.com/tmux/tmux.git
synced 2025-09-03 06:17:04 +00:00
Merge branch 'obsd-master'
This commit is contained in:
39
window.c
39
window.c
@ -60,6 +60,8 @@ static u_int next_window_pane_id;
|
||||
static u_int next_window_id;
|
||||
static u_int next_active_point;
|
||||
|
||||
static void window_destroy(struct window *);
|
||||
|
||||
static struct window_pane *window_pane_create(struct window *, u_int, u_int,
|
||||
u_int);
|
||||
static void window_pane_destroy(struct window_pane *);
|
||||
@ -184,6 +186,11 @@ winlink_add(struct winlinks *wwl, int idx)
|
||||
void
|
||||
winlink_set_window(struct winlink *wl, struct window *w)
|
||||
{
|
||||
if (wl->window != NULL) {
|
||||
TAILQ_REMOVE(&wl->window->winlinks, wl, wentry);
|
||||
window_remove_ref(w);
|
||||
}
|
||||
TAILQ_INSERT_TAIL(&w->winlinks, wl, wentry);
|
||||
wl->window = w;
|
||||
w->references++;
|
||||
}
|
||||
@ -193,12 +200,14 @@ winlink_remove(struct winlinks *wwl, struct winlink *wl)
|
||||
{
|
||||
struct window *w = wl->window;
|
||||
|
||||
if (w != NULL) {
|
||||
TAILQ_REMOVE(&w->winlinks, wl, wentry);
|
||||
window_remove_ref(w);
|
||||
}
|
||||
|
||||
RB_REMOVE(winlinks, wwl, wl);
|
||||
free(wl->status_text);
|
||||
free(wl);
|
||||
|
||||
if (w != NULL)
|
||||
window_remove_ref(w);
|
||||
}
|
||||
|
||||
struct winlink *
|
||||
@ -313,6 +322,7 @@ window_create(u_int sx, u_int sy)
|
||||
w->options = options_create(global_w_options);
|
||||
|
||||
w->references = 0;
|
||||
TAILQ_INIT(&w->winlinks);
|
||||
|
||||
w->id = next_window_id++;
|
||||
RB_INSERT(windows, &windows, w);
|
||||
@ -350,9 +360,12 @@ window_create_spawn(const char *name, int argc, char **argv, const char *path,
|
||||
return (w);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
window_destroy(struct window *w)
|
||||
{
|
||||
if (!TAILQ_EMPTY(&w->winlinks))
|
||||
fatalx("window destroyed with winlinks");
|
||||
|
||||
RB_REMOVE(windows, &windows, w);
|
||||
|
||||
if (w->layout_root != NULL)
|
||||
@ -1436,19 +1449,13 @@ window_pane_find_right(struct window_pane *wp)
|
||||
void
|
||||
winlink_clear_flags(struct winlink *wl)
|
||||
{
|
||||
struct session *s;
|
||||
struct winlink *wl_loop;
|
||||
struct winlink *loop;
|
||||
|
||||
RB_FOREACH(s, sessions, &sessions) {
|
||||
RB_FOREACH(wl_loop, winlinks, &s->windows) {
|
||||
if (wl_loop->window != wl->window)
|
||||
continue;
|
||||
if ((wl_loop->flags & WINLINK_ALERTFLAGS) == 0)
|
||||
continue;
|
||||
|
||||
wl_loop->flags &= ~WINLINK_ALERTFLAGS;
|
||||
wl_loop->window->flags &= ~WINDOW_ALERTFLAGS;
|
||||
server_status_session(s);
|
||||
wl->window->flags &= ~WINDOW_ALERTFLAGS;
|
||||
TAILQ_FOREACH(loop, &wl->window->winlinks, wentry) {
|
||||
if ((loop->flags & WINLINK_ALERTFLAGS) != 0) {
|
||||
loop->flags &= ~WINLINK_ALERTFLAGS;
|
||||
server_status_session(loop->session);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user