summaryrefslogtreecommitdiffstats
path: root/names.c
diff options
context:
space:
mode:
authornicm <nicm>2015-08-28 16:10:46 +0000
committernicm <nicm>2015-08-28 16:10:46 +0000
commit55b8d7456155de4e5d44136a140a599e2a2a755b (patch)
tree5319be8f04742fad7581402f461ec10ae4246d4f /names.c
parente2100c5f5f9c71185e2a3c410ebdd37f52d701a7 (diff)
Revert previous; we do need a timer, until I have a better idea. We
can't do the name check every loop, because that is too expensive, and we can't make sure it only happens infrequently because we have no idea when the next change will happen.
Diffstat (limited to 'names.c')
-rw-r--r--names.c32
1 files changed, 25 insertions, 7 deletions
diff --git a/names.c b/names.c
index 00bc88a2..aa0673ea 100644
--- a/names.c
+++ b/names.c
@@ -25,16 +25,37 @@
#include "tmux.h"
+void window_name_callback(unused int, unused short, void *);
+
+void
+queue_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
-check_window_name(struct window *w)
+window_name_callback(unused int fd, unused short events, void *data)
{
- char *name;
+ struct window *w = data;
+ char *name;
if (w->active == NULL)
return;
- if (!options_get_number(&w->options, "automatic-rename"))
+ if (!options_get_number(&w->options, "automatic-rename")) {
+ if (event_initialized(&w->name_timer))
+ event_del(&w->name_timer);
return;
+ }
+ queue_window_name(w);
if (~w->active->flags & PANE_CHANGED)
return;
@@ -42,12 +63,9 @@ check_window_name(struct window *w)
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);
}