Update readmark support
Fix two small issues with readmarks.
--- a/mcabber/mcabber/screen.c Mon Mar 14 13:17:17 2011 +0100
+++ b/mcabber/mcabber/screen.c Mon Mar 14 14:25:21 2011 +0100
@@ -1174,20 +1174,23 @@
// Do we have a read mark?
for (n = 0; n < CHAT_WIN_HEIGHT; n++) {
line = *(lines+n);
- if (line && line->flags & HBB_PREFIX_READMARK) {
- // If this is not the last line, we'll display a mark
- if (n+1 < CHAT_WIN_HEIGHT && *(lines+n+1))
- readmark = TRUE;
+ if (line) {
+ if (line->flags & HBB_PREFIX_READMARK) {
+ // If this is not the last line, we'll display a mark
+ if (n+1 < CHAT_WIN_HEIGHT && *(lines+n+1)) {
+ readmark = TRUE;
+ skipline = TRUE;
+ mark_offset = -1;
+ }
+ }
+ } else if (readmark) {
+ // There will be empty lines, so we don't need to skip the first line
+ skipline = FALSE;
+ mark_offset = 0;
}
}
}
- // Skip first line if there's a mark
- if (readmark) {
- skipline = TRUE;
- mark_offset = -1;
- }
-
// Display the lines
for (n = 0 ; n < CHAT_WIN_HEIGHT; n++) {
int winy = n + mark_offset;
@@ -1472,7 +1475,7 @@
if (win_entry->bd->lock)
setmsgflg = TRUE;
// If this is an outgoing message, update readmark
- if (!special && (prefix_flags & HBB_PREFIX_OUT))
+ if (!special && (prefix_flags & (HBB_PREFIX_OUT|HBB_PREFIX_HLIGHT_OUT)))
hbuf_set_readmark(win_entry->bd->hbuf, FALSE);
// Show and refresh the window
top_panel(win_entry->panel);