aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/irc.c17
-rw-r--r--src/screen.c8
2 files changed, 14 insertions, 11 deletions
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) {