mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 01:48:47 +00:00
We now only checking for name changes when the active pane has changed,
but that can only happen when we have already been woken up by a read event, so there is no need for a timer, we can just check the changed flag on the end of that read event (we already loop over the windows to check for bells etc anyway).
This commit is contained in:
parent
b0940bdf54
commit
e2100c5f5f
@ -180,9 +180,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
|
||||
if (strcmp(oe->name, "automatic-rename") == 0) {
|
||||
RB_FOREACH(w, windows, &windows) {
|
||||
if (options_get_number(&w->options, "automatic-rename"))
|
||||
queue_window_name(w);
|
||||
else if (event_initialized(&w->name_timer))
|
||||
evtimer_del(&w->name_timer);
|
||||
w->active->flags |= PANE_CHANGED;
|
||||
}
|
||||
}
|
||||
if (strcmp(oe->name, "status") == 0 ||
|
||||
|
30
names.c
30
names.c
@ -25,37 +25,16 @@
|
||||
|
||||
#include "tmux.h"
|
||||
|
||||
void window_name_callback(unused int, unused short, void *);
|
||||
|
||||
void
|
||||
queue_window_name(struct window *w)
|
||||
check_window_name(struct window *w)
|
||||
{
|
||||
struct timeval tv;
|
||||
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = NAME_INTERVAL * 1000L;
|
||||
|
||||
if (event_initialized(&w->name_timer))
|
||||
evtimer_del(&w->name_timer);
|
||||
evtimer_set(&w->name_timer, window_name_callback, w);
|
||||
evtimer_add(&w->name_timer, &tv);
|
||||
}
|
||||
|
||||
void
|
||||
window_name_callback(unused int fd, unused short events, void *data)
|
||||
{
|
||||
struct window *w = data;
|
||||
char *name;
|
||||
|
||||
if (w->active == NULL)
|
||||
return;
|
||||
|
||||
if (!options_get_number(&w->options, "automatic-rename")) {
|
||||
if (event_initialized(&w->name_timer))
|
||||
event_del(&w->name_timer);
|
||||
if (!options_get_number(&w->options, "automatic-rename"))
|
||||
return;
|
||||
}
|
||||
queue_window_name(w);
|
||||
|
||||
if (~w->active->flags & PANE_CHANGED)
|
||||
return;
|
||||
@ -63,9 +42,12 @@ window_name_callback(unused int fd, unused short events, void *data)
|
||||
|
||||
name = format_window_name(w);
|
||||
if (strcmp(name, w->name) != 0) {
|
||||
log_debug("@%u new name %s (was %s)", w->id, name, w->name);
|
||||
window_set_name(w, name);
|
||||
server_status_window(w);
|
||||
}
|
||||
} else
|
||||
log_debug("@%u name not changed (still %s)", w->id, w->name);
|
||||
|
||||
free(name);
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,7 @@ server_window_loop(void)
|
||||
server_status_session(s);
|
||||
}
|
||||
}
|
||||
check_window_name(w);
|
||||
}
|
||||
}
|
||||
|
||||
|
3
tmux.h
3
tmux.h
@ -870,7 +870,6 @@ RB_HEAD(window_pane_tree, window_pane);
|
||||
struct window {
|
||||
u_int id;
|
||||
char *name;
|
||||
struct event name_timer;
|
||||
struct timeval silence_timer;
|
||||
struct timeval activity_time;
|
||||
|
||||
@ -2209,7 +2208,7 @@ void window_choose_collapse_all(struct window_pane *);
|
||||
void window_choose_set_current(struct window_pane *, u_int);
|
||||
|
||||
/* names.c */
|
||||
void queue_window_name(struct window *);
|
||||
void check_window_name(struct window *);
|
||||
char *default_window_name(struct window *);
|
||||
char *format_window_name(struct window *);
|
||||
char *parse_window_name(const char *);
|
||||
|
5
window.c
5
window.c
@ -299,8 +299,6 @@ window_create1(u_int sx, u_int sy)
|
||||
fatal("gettimeofday failed");
|
||||
|
||||
options_init(&w->options, &global_w_options);
|
||||
if (options_get_number(&w->options, "automatic-rename"))
|
||||
queue_window_name(w);
|
||||
|
||||
w->references = 0;
|
||||
|
||||
@ -349,9 +347,6 @@ window_destroy(struct window *w)
|
||||
layout_free_cell(w->saved_layout_root);
|
||||
free(w->old_layout);
|
||||
|
||||
if (event_initialized(&w->name_timer))
|
||||
evtimer_del(&w->name_timer);
|
||||
|
||||
options_free(&w->options);
|
||||
|
||||
window_destroy_panes(w);
|
||||
|
Loading…
Reference in New Issue
Block a user