From 66d3e6ee02a28d9a93976da00cc12f8906dcf44a Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 24 Nov 2012 23:58:10 +0000 Subject: Messages not lost when run out of windows Incoming messages are shown in the console when all windows are full --- src/status_bar.c | 4 +- src/windows.c | 141 +++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 92 insertions(+), 53 deletions(-) diff --git a/src/status_bar.c b/src/status_bar.c index a00a2ad3..52d90439 100644 --- a/src/status_bar.c +++ b/src/status_bar.c @@ -144,7 +144,7 @@ status_bar_active(const int win) int cols = getmaxx(stdscr); wattron(status_bar, COLOUR_STATUS_ACTIVE); - if (win < 10) + if (win+1 < 10) mvwprintw(status_bar, 0, cols - 31 + active_pos, "%d", win+1); else mvwprintw(status_bar, 0, cols - 31 + active_pos, "0"); @@ -165,7 +165,7 @@ status_bar_new(const int win) wattron(status_bar, COLOUR_STATUS_NEW); wattron(status_bar, A_BLINK); - if (win < 10) + if (win+1 < 10) mvwprintw(status_bar, 0, cols - 31 + active_pos, "%d", win+1); else mvwprintw(status_bar, 0, cols - 31 + active_pos, "0"); diff --git a/src/windows.c b/src/windows.c index 44b9f0b1..c105c48e 100644 --- a/src/windows.c +++ b/src/windows.c @@ -377,70 +377,106 @@ win_show_incomming_msg(const char * const from, const char * const message, if (win_index == NUM_WINS) win_index = _new_prof_win(from, win_type); - WINDOW *win = windows[win_index]->win; - - // currently viewing chat window with sender - if (win_index == current_index) { + // no spare windows left + if (win_index == 0) { if (tv_stamp == NULL) { - _win_show_time(win); + _win_show_time(console->win); } else { GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp); gchar *date_fmt = g_date_time_format(time, "%H:%M:%S"); - wattron(win, COLOUR_TIME); - wprintw(win, "%s - ", date_fmt); - wattroff(win, COLOUR_TIME); + wattron(console->win, COLOUR_TIME); + wprintw(console->win, "%s - ", date_fmt); + wattroff(console->win, COLOUR_TIME); g_date_time_unref(time); g_free(date_fmt); } if (strncmp(message, "/me ", 4) == 0) { - wattron(win, COLOUR_THEM); - wprintw(win, "*%s ", from); - wprintw(win, message + 4); - wprintw(win, "\n"); - wattroff(win, COLOUR_THEM); + wattron(console->win, COLOUR_THEM); + wprintw(console->win, "*%s ", from); + wprintw(console->win, message + 4); + wprintw(console->win, "\n"); + wattroff(console->win, COLOUR_THEM); } else { - _win_show_user(win, from, 1); - _win_show_message(win, message); + _win_show_user(console->win, from, 1); + _win_show_message(console->win, message); } - title_bar_set_typing(FALSE); - title_bar_draw(); - status_bar_active(win_index); - dirty = TRUE; - // not currently viewing chat window with sender - } else { - status_bar_new(win_index); - _cons_show_incoming_message(from, win_index); - if (prefs_get_flash()) - flash(); + cons_bad_show("Windows all used, close a window to respond."); - windows[win_index]->unread++; - if (prefs_get_chlog() && prefs_get_history()) { - _win_show_history(win, win_index, from); - } - - if (tv_stamp == NULL) { - _win_show_time(win); + if (current_index == 0) { + dirty = TRUE; } else { - GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp); - gchar *date_fmt = g_date_time_format(time, "%H:%M:%S"); - wattron(win, COLOUR_TIME); - wprintw(win, "%s - ", date_fmt); - wattroff(win, COLOUR_TIME); - g_date_time_unref(time); - g_free(date_fmt); + status_bar_new(0); } - if (strncmp(message, "/me ", 4) == 0) { - wattron(win, COLOUR_THEM); - wprintw(win, "*%s ", from); - wprintw(win, message + 4); - wprintw(win, "\n"); - wattroff(win, COLOUR_THEM); + // window found or created + } else { + WINDOW *win = windows[win_index]->win; + + // currently viewing chat window with sender + if (win_index == current_index) { + if (tv_stamp == NULL) { + _win_show_time(win); + } else { + GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp); + gchar *date_fmt = g_date_time_format(time, "%H:%M:%S"); + wattron(win, COLOUR_TIME); + wprintw(win, "%s - ", date_fmt); + wattroff(win, COLOUR_TIME); + g_date_time_unref(time); + g_free(date_fmt); + } + + if (strncmp(message, "/me ", 4) == 0) { + wattron(win, COLOUR_THEM); + wprintw(win, "*%s ", from); + wprintw(win, message + 4); + wprintw(win, "\n"); + wattroff(win, COLOUR_THEM); + } else { + _win_show_user(win, from, 1); + _win_show_message(win, message); + } + title_bar_set_typing(FALSE); + title_bar_draw(); + status_bar_active(win_index); + dirty = TRUE; + + // not currently viewing chat window with sender } else { - _win_show_user(win, from, 1); - _win_show_message(win, message); + status_bar_new(win_index); + _cons_show_incoming_message(from, win_index); + if (prefs_get_flash()) + flash(); + + windows[win_index]->unread++; + if (prefs_get_chlog() && prefs_get_history()) { + _win_show_history(win, win_index, from); + } + + if (tv_stamp == NULL) { + _win_show_time(win); + } else { + GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp); + gchar *date_fmt = g_date_time_format(time, "%H:%M:%S"); + wattron(win, COLOUR_TIME); + wprintw(win, "%s - ", date_fmt); + wattroff(win, COLOUR_TIME); + g_date_time_unref(time); + g_free(date_fmt); + } + + if (strncmp(message, "/me ", 4) == 0) { + wattron(win, COLOUR_THEM); + wprintw(win, "*%s ", from); + wprintw(win, message + 4); + wprintw(win, "\n"); + wattroff(win, COLOUR_THEM); + } else { + _win_show_user(win, from, 1); + _win_show_message(win, message); + } } } @@ -1497,10 +1533,13 @@ _new_prof_win(const char * const contact, win_type_t type) } } - int cols = getmaxx(stdscr); - windows[i] = window_create(contact, cols, type); - - return i; + if (i != NUM_WINS) { + int cols = getmaxx(stdscr); + windows[i] = window_create(contact, cols, type); + return i; + } else { + return 0; + } } void -- cgit 1.4.1-2-gfad0