diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-11-05 19:15:42 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-11-05 19:15:42 +0100 |
| commit | fedabb417604ceeae1f30e486f2142bb407a1411 (patch) | |
| tree | dbf24860424b7170bf397d2f1da0844eb5d9d89c /src/client_manager.cc | |
| parent | 42315c4b5c995ba13b3d20d9abf3df5129ce3015 (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.cc | 16 |
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(); +} + } |
