diff options
| author | C. McEnroe | 2020-09-02 21:29:03 -0400 | 
|---|---|---|
| committer | C. McEnroe | 2020-09-02 21:29:03 -0400 | 
| commit | 0968a8ac7c5342978fced88af6a897d9b5cdc6ab (patch) | |
| tree | 857ccfd468b6b25d89f171f811060d4d0e1af4c0 | |
| parent | a46fbea0ec38a153c07a06ea0177b136db3e3ecf (diff) | |
Recalculate unreadHard on reflow
| -rw-r--r-- | buffer.c | 7 | ||||
| -rw-r--r-- | chat.h | 2 | ||||
| -rw-r--r-- | ui.c | 12 | 
3 files changed, 16 insertions, 5 deletions
@@ -186,16 +186,19 @@ int bufferPush(  	return flow(&buffer->hard, cols, soft);  } -void bufferReflow(struct Buffer *buffer, int cols, bool ignore) { +int bufferReflow(struct Buffer *buffer, int cols, bool ignore, size_t tail) {  	buffer->hard.len = 0;  	for (size_t i = 0; i < BufferCap; ++i) {  		free(buffer->hard.lines[i].str);  		buffer->hard.lines[i].str = NULL;  	} +	int flowed = 0;  	for (size_t i = 0; i < BufferCap; ++i) {  		const struct Line *soft = bufferSoft(buffer, i);  		if (!soft) continue;  		if (soft->heat < Cold && ignore) continue; -		flow(&buffer->hard, cols, soft); +		int n = flow(&buffer->hard, cols, soft); +		if (i >= BufferCap - tail) flowed += n;  	} +	return flowed;  } @@ -291,7 +291,7 @@ int bufferPush(  	struct Buffer *buffer, int cols, bool ignore,  	enum Heat heat, time_t time, const char *str  ); -void bufferReflow(struct Buffer *buffer, int cols, bool ignore); +int bufferReflow(struct Buffer *buffer, int cols, bool ignore, size_t tail);  enum Edit {  	EditHead, @@ -542,6 +542,7 @@ void uiWrite(uint id, enum Heat heat, const time_t *src, const char *str) {  	}  	if (window->mark && heat > Cold) {  		if (!window->unreadWarm++) { +			window->unreadSoft++;  			lines += bufferPush(window->buffer, COLS, false, Cold, ts, "");  		}  		if (heat > window->heat) window->heat = heat; @@ -576,7 +577,9 @@ static void resize(void) {  	wresize(main, MAIN_LINES, COLS);  	for (uint num = 0; num < windows.len; ++num) {  		struct Window *window = windows.ptrs[num]; -		bufferReflow(window->buffer, COLS, window->ignore); +		window->unreadHard = bufferReflow( +			window->buffer, COLS, window->ignore, window->unreadSoft +		);  	}  	windowUpdate();  } @@ -753,7 +756,9 @@ void uiCloseNum(uint num) {  static void toggleIgnore(struct Window *window) {  	window->ignore ^= true; -	bufferReflow(window->buffer, COLS, window->ignore); +	window->unreadHard = bufferReflow( +		window->buffer, COLS, window->ignore, window->unreadSoft +	);  	windowUpdate();  	statusUpdate();  } @@ -1015,6 +1020,9 @@ void uiLoad(const char *name) {  			readString(file, &buf, &cap);  			bufferPush(window->buffer, COLS, window->ignore, heat, time, buf);  		} +		window->unreadHard = bufferReflow( +			window->buffer, COLS, window->ignore, window->unreadSoft +		);  	}  	free(buf);  | 
