diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2012-01-30 09:39:34 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2012-01-30 09:39:34 +0000 |
commit | 0e59bc75fd90c09e3ea936fd58a5a13e69208253 (patch) | |
tree | 9e2779f478fb48c50ad633030dc7e385fafb0601 /window.c | |
parent | 937173ff110601d7ff44254ec57b4389d5c24994 (diff) | |
download | rtmux-0e59bc75fd90c09e3ea936fd58a5a13e69208253.tar.gz rtmux-0e59bc75fd90c09e3ea936fd58a5a13e69208253.tar.bz2 rtmux-0e59bc75fd90c09e3ea936fd58a5a13e69208253.zip |
Give each window a unique id, like panes but prefixed with @. Based on
work from George Nachman.
Diffstat (limited to 'window.c')
-rw-r--r-- | window.c | 32 |
1 files changed, 30 insertions, 2 deletions
@@ -58,7 +58,8 @@ struct windows windows; /* Global panes tree. */ struct window_pane_tree all_window_panes; -u_int next_window_pane; +u_int next_window_pane_id; +u_int next_window_id; void window_pane_read_callback(struct bufferevent *, void *); void window_pane_error_callback(struct bufferevent *, short, void *); @@ -104,6 +105,18 @@ winlink_find_by_index(struct winlinks *wwl, int idx) return (RB_FIND(winlinks, wwl, &wl)); } +struct winlink * +winlink_find_by_window_id(struct winlinks *wwl, u_int id) +{ + struct winlink *wl; + + RB_FOREACH(wl, winlinks, wwl) { + if (wl->window->id == id) + return (wl); + } + return NULL; +} + int winlink_next_index(struct winlinks *wwl, int idx) { @@ -249,12 +262,27 @@ window_index(struct window *s, u_int *i) } struct window * +window_find_by_id(u_int id) +{ + struct window *w; + u_int i; + + for (i = 0; i < ARRAY_LENGTH(&windows); i++) { + w = ARRAY_ITEM(&windows, i); + if (w->id == id) + return (w); + } + return NULL; +} + +struct window * window_create1(u_int sx, u_int sy) { struct window *w; u_int i; w = xcalloc(1, sizeof *w); + w->id = next_window_id++; w->name = NULL; w->flags = 0; @@ -571,7 +599,7 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) wp = xcalloc(1, sizeof *wp); wp->window = w; - wp->id = next_window_pane++; + wp->id = next_window_pane_id++; RB_INSERT(window_pane_tree, &all_window_panes, wp); wp->cmd = NULL; |