aboutsummaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2012-01-30 09:39:34 +0000
committerNicholas Marriott <nicm@openbsd.org>2012-01-30 09:39:34 +0000
commit0e59bc75fd90c09e3ea936fd58a5a13e69208253 (patch)
tree9e2779f478fb48c50ad633030dc7e385fafb0601 /window.c
parent937173ff110601d7ff44254ec57b4389d5c24994 (diff)
downloadrtmux-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.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/window.c b/window.c
index 9a735dd6..1664999c 100644
--- a/window.c
+++ b/window.c
@@ -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;