summaryrefslogtreecommitdiff
path: root/src/client_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/client_manager.cc')
-rw-r--r--src/client_manager.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc
index 4eeb4f60..6525b854 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -40,13 +40,14 @@ String ClientManager::generate_name() const
Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
EnvVarMap env_vars, StringView init_cmds,
- Optional<BufferCoord> init_coord)
+ Optional<BufferCoord> init_coord,
+ Client::OnExitCallback on_exit)
{
Buffer& buffer = BufferManager::instance().get_first_buffer();
WindowAndSelections ws = get_free_window(buffer);
Client* client = new Client{std::move(ui), std::move(ws.window),
std::move(ws.selections), std::move(env_vars),
- generate_name()};
+ generate_name(), std::move(on_exit)};
m_clients.emplace_back(client);
if (init_coord)
@@ -88,7 +89,7 @@ void ClientManager::process_pending_inputs() const
}
}
-void ClientManager::remove_client(Client& client, bool graceful)
+void ClientManager::remove_client(Client& client, bool graceful, int status)
{
auto it = find(m_clients, &client);
if (it == m_clients.end())
@@ -96,6 +97,7 @@ void ClientManager::remove_client(Client& client, bool graceful)
kak_assert(contains(m_client_trash, &client));
return;
}
+ client.exit(status);
m_client_trash.push_back(std::move(*it));
m_clients.erase(it);