diff --git a/src/tsm_screen.c b/src/tsm_screen.c index 1acead1..9242caf 100644 --- a/src/tsm_screen.c +++ b/src/tsm_screen.c @@ -869,18 +869,30 @@ void tsm_screen_reset(struct tsm_screen *con) void tsm_screen_set_flags(struct tsm_screen *con, unsigned int flags) { + unsigned int old; + if (!con || !flags) return; + old = con->flags; con->flags |= flags; + + if (!(old & TSM_SCREEN_ALTERNATE) && (flags & TSM_SCREEN_ALTERNATE)) + con->lines = con->alt_lines; } void tsm_screen_reset_flags(struct tsm_screen *con, unsigned int flags) { + unsigned int old; + if (!con || !flags) return; + old = con->flags; con->flags &= ~flags; + + if ((old & TSM_SCREEN_ALTERNATE) && (flags & TSM_SCREEN_ALTERNATE)) + con->lines = con->main_lines; } unsigned int tsm_screen_get_flags(struct tsm_screen *con) diff --git a/src/tsm_screen.h b/src/tsm_screen.h index 9e3807d..e294630 100644 --- a/src/tsm_screen.h +++ b/src/tsm_screen.h @@ -71,6 +71,7 @@ typedef void (*tsm_log_t) (const char *file, #define TSM_SCREEN_INVERSE 0x08 #define TSM_SCREEN_HIDE_CURSOR 0x10 #define TSM_SCREEN_FIXED_POS 0x20 +#define TSM_SCREEN_ALTERNATE 0x40 #define TSM_SCREEN_OPT_RENDER_TIMING 0x01