summaryrefslogtreecommitdiff
path: root/src/window.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-05-13 20:32:53 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-05-14 08:17:52 +0100
commitba421e45f7b97c5e7ba28efe4f148fb3ba87a22c (patch)
treeb3f80be6aabacc03718e7ff9b9afb8202e548309 /src/window.cc
parent7f2b3f01322617bc7f215f0487151661b2f11aa5 (diff)
Delay window deletion until we get back to main loop
Avoid WinResize hooks while redrawing, ensure window resize only take place while handling user input. Fixes #672
Diffstat (limited to 'src/window.cc')
-rw-r--r--src/window.cc11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/window.cc b/src/window.cc
index 0e7c3b96..de3f4ea4 100644
--- a/src/window.cc
+++ b/src/window.cc
@@ -80,8 +80,7 @@ Window::Setup Window::build_setup(const Context& context) const
for (auto& sel : context.selections())
selections.push_back({sel.cursor(), sel.anchor()});
- return { m_position,
- context.client().dimensions(),
+ return { m_position, m_dimensions,
context.buffer().timestamp(),
context.selections().main_index(),
std::move(selections) };
@@ -92,7 +91,7 @@ bool Window::needs_redraw(const Context& context) const
auto& selections = context.selections();
if (m_position != m_last_setup.position or
- context.client().dimensions() != m_last_setup.dimensions or
+ m_dimensions != m_last_setup.dimensions or
context.buffer().timestamp() != m_last_setup.timestamp or
selections.main_index() != m_last_setup.main_selection or
selections.size() != m_last_setup.selections.size())
@@ -120,7 +119,6 @@ const DisplayBuffer& Window::update_display_buffer(const Context& context)
DisplayBuffer::LineList& lines = m_display_buffer.lines();
lines.clear();
- set_dimensions(context.client().dimensions());
if (m_dimensions == CharCoord{0,0})
return m_display_buffer;
@@ -365,9 +363,8 @@ void Window::clear_display_buffer()
void Window::on_option_changed(const Option& option)
{
- run_hook_in_own_context("WinSetOption",
- format("{}={}", option.name(), option.get_as_string()));
-
+ run_hook_in_own_context("WinSetOption", format("{}={}", option.name(),
+ option.get_as_string()));
// an highlighter might depend on the option, so we need to redraw
force_redraw();
}