From 8c0820ada59c3a45c85c7ca1c7b0c9b111ae0967 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Mon, 27 Apr 2026 01:03:51 -0400 Subject: Do not keep displaying a destroyed screen, do not destroy screens 1 and 2. --- src/irc.c | 17 +++++++---------- src/screen.c | 8 +++++++- 2 files changed, 14 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/irc.c b/src/irc.c index aa14bc9..9727a38 100644 --- a/src/irc.c +++ b/src/irc.c @@ -209,13 +209,6 @@ static void do_ctcp(char is_notice) { } static void do_privmsg(void) { - /* TODO: this shouldn't be case-sensitive */ - /* - if(strstr(msg_text, config.nick)) - hilite = 1; - else - hilite = 0; - */ hilite = find_nick(); if(*msg_text == '\x01') { @@ -923,11 +916,15 @@ void start_keystroke(char c) { scrollback(); return; case 0x18: /* ^X */ - send_cur_chan_cmd("PART"); + if(scr_current > 2) + send_cur_chan_cmd("PART"); /* fall thru */ case 'x': - scr_prev = SCR_PRIV; - scr_destroy(scr_current); + if(scr_current > 2) { + scr_destroy(scr_current); + scr_current = scr_prev; + scr_prev = SCR_SERVER; + } return; case XCH_LEFT: case '+': diff --git a/src/screen.c b/src/screen.c index dd25938..d090e51 100644 --- a/src/screen.c +++ b/src/screen.c @@ -78,14 +78,20 @@ void scr_destroy(char s) { if(s < 2 || s >= MAX_SCREENS) return; + /* don't destroy if already destroyed (or never created) */ + if(screens[s].status == SCR_UNUSED) + return; + // pool_reclaim_lines(screens[s].pool, screens[s].line_list); pools[screens[s].pool].screen_count--; screens[s].title[0] = 0; screens[s].status = SCR_UNUSED; screens[s].pool = POOL_UNUSED; - screens[s].line_list = 0; screens[s].line_count = screens[s].scrollback_pos = 0; + + /* theoretically this could be 0, but as a safety net... */ + screens[s].line_list = (line_t *)END_MARKER; } void render_vis_buf(void) { -- cgit v1.2.3