summaryrefslogtreecommitdiff
path: root/src/client_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-10-13 21:37:44 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-10-13 21:37:44 +0100
commitcc2affea11781d4ad1e1b9d7a9c7d729064c2c10 (patch)
tree19a29d79cb0ccd52ddfd5a45db0537c4bda28830 /src/client_manager.cc
parent5af29b025419fa3df9f82b99478f64e6e13855d4 (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.cc26
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)