# HG changeset patch # User Mikael Berthe # Date 1300447797 -3600 # Node ID ec737f5f1d6fa88c79600ebec602a50a85ee93ab # Parent 306ddec07d63851d75735d43f21447fa41120091 Couple of readmark-related bugfixes diff -r 306ddec07d63 -r ec737f5f1d6f mcabber/mcabber/hbuf.c --- a/mcabber/mcabber/hbuf.c Tue Mar 15 14:14:20 2011 +0100 +++ b/mcabber/mcabber/hbuf.c Fri Mar 18 12:29:57 2011 +0100 @@ -347,7 +347,10 @@ (*array_elt)->mucnicklen = blk->prefix.mucnicklen; (*array_elt)->text = g_strndup(blk->ptr, maxlen); - if ((blk->flags & HBB_FLAG_PERSISTENT) && blk->prefix.flags) { + if ((blk->flags & HBB_FLAG_PERSISTENT) && + (blk->prefix.flags & ~HBB_PREFIX_READMARK)) { + // This is a new message: persistent block flag and no prefix flag + // (except a possible readmark flag) last_persist_prefixflags = blk->prefix.flags; } else { // Propagate highlighting flags @@ -532,12 +535,13 @@ if (!hbuf) return; - hbuf = g_list_last(hbuf); + hbuf = hbuf_previous_persistent(g_list_last(hbuf)); if (action) { // Add a readmark flag blk = (hbuf_block*)(hbuf->data); - blk->prefix.flags ^= HBB_PREFIX_READMARK; + blk->prefix.flags |= HBB_PREFIX_READMARK; + // Shift hbuf in order to remove previous flags // (maybe it can be optimized out, if there's no risk // we have several marks) diff -r 306ddec07d63 -r ec737f5f1d6f mcabber/mcabber/histolog.c --- a/mcabber/mcabber/histolog.c Tue Mar 15 14:14:20 2011 +0100 +++ b/mcabber/mcabber/histolog.c Fri Mar 18 12:29:57 2011 +0100 @@ -349,9 +349,6 @@ } fclose(fp); g_free(data); - - // Set a readmark to separate new content - hbuf_set_readmark(*p_buddyhbuf, TRUE); } // hlog_enable() diff -r 306ddec07d63 -r ec737f5f1d6f mcabber/mcabber/screen.c --- a/mcabber/mcabber/screen.c Tue Mar 15 14:14:20 2011 +0100 +++ b/mcabber/mcabber/screen.c Fri Mar 18 12:29:57 2011 +0100 @@ -1056,6 +1056,9 @@ tmp->bd = g_new0(buffdata, 1); hlog_read_history(title, &tmp->bd->hbuf, maxX - Roster_Width - scr_getprefixwidth()); + + // Set a readmark to separate new content + hbuf_set_readmark(tmp->bd->hbuf, TRUE); } id = g_strdup(title); @@ -1137,7 +1140,7 @@ char pref[96]; hbb_line **lines, *line; GList *hbuf_head; - int color; + int color = COLOR_GENERAL; bool readmark = FALSE; bool skipline = FALSE; @@ -1285,10 +1288,6 @@ wprintw(win_entry->win, "%s", line->text+line->mucnicklen); wclrtoeol(win_entry->win); - // Return the color back - if (color != COLOR_GENERAL) - wattrset(win_entry->win, get_color(COLOR_GENERAL)); - scr_update_window_skipline: skipline = FALSE; if (readmark && line->flags & HBB_PREFIX_READMARK) { @@ -1298,7 +1297,8 @@ // Display the mark winy = n + mark_offset; wmove(win_entry->win, winy, 0); - wattrset(win_entry->win, get_color(COLOR_READMARK)); + color = COLOR_READMARK; + wattrset(win_entry->win, get_color(color)); g_snprintf(pref, prefixwidth, " == "); wprintw(win_entry->win, pref); w = scr_gettextwidth() / 3; @@ -1308,6 +1308,10 @@ wattrset(win_entry->win, get_color(COLOR_GENERAL)); } + // Restore default ("general") color + if (color != COLOR_GENERAL) + wattrset(win_entry->win, get_color(COLOR_GENERAL)); + g_free(line->text); g_free(line); } else {