summaryrefslogtreecommitdiff
path: root/src/client_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-11-05 19:15:42 +0100
committerMaxime Coste <frrrwww@gmail.com>2012-11-05 19:15:42 +0100
commitfedabb417604ceeae1f30e486f2142bb407a1411 (patch)
treedbf24860424b7170bf397d2f1da0844eb5d9d89c /src/client_manager.cc
parent42315c4b5c995ba13b3d20d9abf3df5129ce3015 (diff)
Rework Window creation, avoid using the same window in multiple clients
Diffstat (limited to 'src/client_manager.cc')
-rw-r--r--src/client_manager.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc
index 2d65402b..d60f49e8 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -8,7 +8,7 @@ namespace Kakoune
void ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
Buffer& buffer, int event_fd)
{
- m_clients.emplace_back(std::move(ui), *buffer.get_or_create_window());
+ m_clients.emplace_back(std::move(ui), get_unused_window_for_buffer(buffer));
InputHandler* input_handler = m_clients.back().input_handler.get();
Context* context = m_clients.back().context.get();
@@ -43,4 +43,18 @@ void ClientManager::remove_client_by_context(Context& context)
assert(false);
}
+Window& ClientManager::get_unused_window_for_buffer(Buffer& buffer) const
+{
+ for (auto& w : buffer.windows())
+ {
+ auto it = std::find_if(m_clients.begin(), m_clients.end(),
+ [&](const Client& client) {
+ return &client.context->window() == w.get();
+ });
+ if (it == m_clients.end())
+ return *w;
+ }
+ return buffer.new_window();
+}
+
}