version 1.331, 2020/04/21 06:32:40 |
version 1.332, 2020/04/21 06:34:13 |
|
|
static void |
static void |
server_client_reset_state(struct client *c) |
server_client_reset_state(struct client *c) |
{ |
{ |
|
struct tty *tty = &c->tty; |
struct window *w = c->session->curw->window; |
struct window *w = c->session->curw->window; |
struct window_pane *wp = w->active, *loop; |
struct window_pane *wp = w->active, *loop; |
struct screen *s; |
struct screen *s; |
|
|
if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) |
if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) |
return; |
return; |
|
|
|
/* Disable the block flag. */ |
|
flags = (tty->flags & TTY_BLOCK); |
|
tty->flags &= ~TTY_BLOCK; |
|
|
/* Get mode from overlay if any, else from screen. */ |
/* Get mode from overlay if any, else from screen. */ |
if (c->overlay_draw != NULL) { |
if (c->overlay_draw != NULL) { |
s = NULL; |
s = NULL; |
|
|
log_debug("%s: client %s mode %x", __func__, c->name, mode); |
log_debug("%s: client %s mode %x", __func__, c->name, mode); |
|
|
/* Reset region and margin. */ |
/* Reset region and margin. */ |
tty_region_off(&c->tty); |
tty_region_off(tty); |
tty_margin_off(&c->tty); |
tty_margin_off(tty); |
|
|
/* Move cursor to pane cursor and offset. */ |
/* Move cursor to pane cursor and offset. */ |
if (c->overlay_draw == NULL) { |
if (c->overlay_draw == NULL) { |
cursor = 0; |
cursor = 0; |
tty_window_offset(&c->tty, &ox, &oy, &sx, &sy); |
tty_window_offset(tty, &ox, &oy, &sx, &sy); |
if (wp->xoff + s->cx >= ox && wp->xoff + s->cx <= ox + sx && |
if (wp->xoff + s->cx >= ox && wp->xoff + s->cx <= ox + sx && |
wp->yoff + s->cy >= oy && wp->yoff + s->cy <= oy + sy) { |
wp->yoff + s->cy >= oy && wp->yoff + s->cy <= oy + sy) { |
cursor = 1; |
cursor = 1; |
|
|
if (!cursor) |
if (!cursor) |
mode &= ~MODE_CURSOR; |
mode &= ~MODE_CURSOR; |
} |
} |
tty_cursor(&c->tty, cx, cy); |
log_debug("%s: cursor to %u,%u", __func__, cx, cy); |
|
tty_cursor(tty, cx, cy); |
|
|
/* |
/* |
* Set mouse mode if requested. To support dragging, always use button |
* Set mouse mode if requested. To support dragging, always use button |
|
|
mode &= ~MODE_BRACKETPASTE; |
mode &= ~MODE_BRACKETPASTE; |
|
|
/* Set the terminal mode and reset attributes. */ |
/* Set the terminal mode and reset attributes. */ |
tty_update_mode(&c->tty, mode, s); |
tty_update_mode(tty, mode, s); |
tty_reset(&c->tty); |
tty_reset(tty); |
|
|
/* |
/* All writing must be done, send a sync end (if it was started). */ |
* All writing must be done, send a sync end (if it was started). It |
tty_sync_end(tty); |
* may have been started by redrawing so needs to go out even if the |
tty->flags |= flags; |
* block flag is set. |
|
*/ |
|
flags = (c->tty.flags & TTY_BLOCK); |
|
c->tty.flags &= ~TTY_BLOCK; |
|
tty_sync_end(&c->tty); |
|
c->tty.flags |= flags; |
|
} |
} |
|
|
/* Repeat time callback. */ |
/* Repeat time callback. */ |