diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2016-10-13 21:37:44 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2016-10-13 21:37:44 +0100 |
| commit | cc2affea11781d4ad1e1b9d7a9c7d729064c2c10 (patch) | |
| tree | 19a29d79cb0ccd52ddfd5a45db0537c4bda28830 /src/client_manager.cc | |
| parent | 5af29b025419fa3df9f82b99478f64e6e13855d4 (diff) | |
Always allow to delete a buffer, just recreate a scratch buffer if needed
Fixes #850
Diffstat (limited to 'src/client_manager.cc')
| -rw-r--r-- | src/client_manager.cc | 26 |
1 files changed, 7 insertions, 19 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc index 889f0777..666df922 100644 --- a/src/client_manager.cc +++ b/src/client_manager.cc @@ -109,33 +109,21 @@ void ClientManager::ensure_no_client_uses_buffer(Buffer& buffer) { for (auto& client : m_clients) { - client->context().jump_list().forget_buffer(buffer); + auto& context = client->context(); + context.jump_list().forget_buffer(buffer); if (client->last_buffer() == &buffer) client->set_last_buffer(nullptr); - if (&client->context().buffer() != &buffer) + if (&context.buffer() != &buffer) continue; - if (client->context().is_editing()) + if (context.is_editing()) throw runtime_error(format("client '{}' is inserting in buffer '{}'", - client->context().name(), + context.name(), buffer.display_name())); - if (Buffer* last_buffer = client->last_buffer()) - { - client->context().change_buffer(*last_buffer); - continue; - } - - for (auto& buf : BufferManager::instance()) - { - if (buf.get() != &buffer) - { - client->context().change_buffer(*buf); - client->set_last_buffer(nullptr); - break; - } - } + Buffer* last = client->last_buffer(); + context.change_buffer(last ? *last : BufferManager::instance().get_first_buffer()); } auto end = std::remove_if(m_free_windows.begin(), m_free_windows.end(), [&buffer](const WindowAndSelections& ws) |
