summaryrefslogtreecommitdiff
path: root/src/client_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2019-07-22 20:05:42 +1000
committerMaxime Coste <mawww@kakoune.org>2019-07-22 20:26:39 +1000
commite42c81c8eb53a6562f0d7313a6a9a92d8360238f (patch)
tree2d3ef40e454c17b8fc248492d6e918334bb98d57 /src/client_manager.cc
parent837416ea389585a812fc789580e028163bd6bebe (diff)
Ensure current context switches away from buffer on delete-buffer
Fixes #3025
Diffstat (limited to 'src/client_manager.cc')
-rw-r--r--src/client_manager.cc15
1 files changed, 1 insertions, 14 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc
index b95e80ec..d1ac5bf3 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -167,21 +167,8 @@ void ClientManager::add_free_window(std::unique_ptr<Window>&& window, SelectionL
void ClientManager::ensure_no_client_uses_buffer(Buffer& buffer)
{
for (auto& client : m_clients)
- {
- auto& context = client->context();
- context.jump_list().forget_buffer(buffer);
- if (client->last_buffer() == &buffer)
- client->set_last_buffer(nullptr);
-
- if (&context.buffer() != &buffer)
- continue;
+ client->context().forget_buffer(buffer);
- if (context.is_editing())
- context.input_handler().reset_normal_mode();
-
- Buffer* last = client->last_buffer();
- context.change_buffer(last ? *last : BufferManager::instance().get_first_buffer());
- }
Vector<std::unique_ptr<Window>> removed_windows;
m_free_windows.erase(std::remove_if(m_free_windows.begin(), m_free_windows.end(),
[&buffer, &removed_windows](WindowAndSelections& ws) {