diff options
| author | 2019-03-07 20:24:21 +0000 | |
|---|---|---|
| committer | 2019-03-07 20:24:21 +0000 | |
| commit | 30a94f4585db9f50fb6a1c23caadbbef26c4afb1 (patch) | |
| tree | 5acdc4f9378c915db3f7695fec401a063aec6e0a /usr.bin/tmux/window.c | |
| parent | Tidy changing the mode into window_copy_init_for_output. (diff) | |
| download | wireguard-openbsd-30a94f4585db9f50fb6a1c23caadbbef26c4afb1.tar.xz wireguard-openbsd-30a94f4585db9f50fb6a1c23caadbbef26c4afb1.zip | |
Add a separate mode struct for the active window mode if any.
Diffstat (limited to 'usr.bin/tmux/window.c')
| -rw-r--r-- | usr.bin/tmux/window.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/usr.bin/tmux/window.c b/usr.bin/tmux/window.c index 82a96c09034..4ad53628761 100644 --- a/usr.bin/tmux/window.c +++ b/usr.bin/tmux/window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.216 2018/12/18 13:20:44 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.217 2019/03/07 20:24:21 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -811,7 +811,6 @@ window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit) wp->event = NULL; wp->mode = NULL; - wp->modeprefix = 1; wp->layout_cell = NULL; @@ -1054,8 +1053,8 @@ window_pane_resize(struct window_pane *wp, u_int sx, u_int sy) wp->sy = sy; screen_resize(&wp->base, sx, sy, wp->saved_grid == NULL); - if (wp->mode != NULL) - wp->mode->resize(wp, sx, sy); + if (wp->mode != NULL && wp->mode->mode->resize != NULL) + wp->mode->mode->resize(wp->mode, sx, sy); wp->flags |= PANE_RESIZE; } @@ -1222,13 +1221,17 @@ window_pane_set_mode(struct window_pane *wp, const struct window_mode *mode, if (wp->mode != NULL) return (1); - wp->mode = mode; + + wp->mode = xcalloc(1, sizeof *wp->mode); + wp->mode->wp = wp; + wp->mode->mode = mode; + wp->mode->prefix = 1; wp->modelast = time(NULL); evtimer_set(&wp->modetimer, window_pane_mode_timer, wp); evtimer_add(&wp->modetimer, &tv); - if ((s = wp->mode->init(wp, fs, args)) != NULL) + if ((s = wp->mode->mode->init(wp->mode, fs, args)) != NULL) wp->screen = s; wp->flags |= (PANE_REDRAW|PANE_CHANGED); @@ -1245,9 +1248,9 @@ window_pane_reset_mode(struct window_pane *wp) evtimer_del(&wp->modetimer); - wp->mode->free(wp); + wp->mode->mode->free(wp->mode); + free(wp->mode); wp->mode = NULL; - wp->modeprefix = 1; wp->screen = &wp->base; wp->flags |= (PANE_REDRAW|PANE_CHANGED); @@ -1260,15 +1263,16 @@ void window_pane_key(struct window_pane *wp, struct client *c, struct session *s, struct winlink *wl, key_code key, struct mouse_event *m) { - struct window_pane *wp2; + struct window_mode_entry *wme = wp->mode; + struct window_pane *wp2; if (KEYC_IS_MOUSE(key) && m == NULL) return; - if (wp->mode != NULL) { + if (wme != NULL) { wp->modelast = time(NULL); - if (wp->mode->key != NULL) - wp->mode->key(wp, c, s, wl, (key & ~KEYC_XTERM), m); + if (wme->mode->key != NULL) + wme->mode->key(wme, c, s, wl, (key & ~KEYC_XTERM), m); return; } |
