diff --git a/src/display_buffer.hh b/src/display_buffer.hh index 6d20f105..ea945da1 100644 --- a/src/display_buffer.hh +++ b/src/display_buffer.hh @@ -163,9 +163,13 @@ public: // Optimize all lines, set DisplayLine::optimize void optimize(); + void set_timestamp(size_t timestamp) { m_timestamp = timestamp; } + size_t timestamp() const { return m_timestamp; } + private: LineList m_lines; BufferRange m_range; + size_t m_timestamp; }; } diff --git a/src/window.cc b/src/window.cc index 6919a5d7..599850ed 100644 --- a/src/window.cc +++ b/src/window.cc @@ -126,6 +126,7 @@ const DisplayBuffer& Window::update_display_buffer(const Context& context) auto start_time = profile ? Clock::now() : Clock::time_point{}; DisplayBuffer::LineList& lines = m_display_buffer.lines(); + m_display_buffer.set_timestamp(buffer().timestamp()); lines.clear(); if (m_dimensions == DisplayCoord{0,0}) @@ -283,6 +284,9 @@ BufferCoord find_buffer_coord(const DisplayLine& line, const Buffer& buffer, Optional Window::display_position(BufferCoord coord) const { + if (m_display_buffer.timestamp() != buffer().timestamp()) + return {}; + LineCount l = 0; for (auto& line : m_display_buffer.lines()) { @@ -296,8 +300,9 @@ Optional Window::display_position(BufferCoord coord) const BufferCoord Window::buffer_coord(DisplayCoord coord) const { - if (m_display_buffer.lines().empty()) - return {0,0}; + if (m_display_buffer.timestamp() != buffer().timestamp() or + m_display_buffer.lines().empty()) + return {0, 0}; if (coord <= 0_line) coord = {0,0}; if ((size_t)coord.line >= m_display_buffer.lines().size())