summaryrefslogtreecommitdiff
path: root/src/client_manager.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/client_manager.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/client_manager.cc')
-rw-r--r--src/client_manager.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc
index aff88d93..96165538 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -143,9 +143,18 @@ void ClientManager::ensure_no_client_uses_buffer(Buffer& buffer)
auto end = std::remove_if(m_free_windows.begin(), m_free_windows.end(),
[&buffer](const WindowAndSelections& ws)
{ return &ws.window->buffer() == &buffer; });
+
+ for (auto it = end; it != m_free_windows.end(); ++it)
+ m_window_trash.push_back(std::move(it->window));
+
m_free_windows.erase(end, m_free_windows.end());
}
+void ClientManager::clear_window_trash()
+{
+ m_window_trash.clear();
+}
+
bool ClientManager::validate_client_name(StringView name) const
{
return const_cast<ClientManager*>(this)->get_client_ifp(name) == nullptr;