summaryrefslogtreecommitdiff
path: root/src/client_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-09-12 23:39:34 +0200
committerMaxime Coste <frrrwww@gmail.com>2013-09-12 23:39:34 +0200
commitac7e437730ecbe32f9e4e168a3ee4a7b7f3cd761 (patch)
treecb5b0e413373ed209d092d476f0abf4a0eeb8209 /src/client_manager.cc
parent916a0cb52e8637d0e6ec456363ef6412142945da (diff)
Move Client responsibilities to InputHandler
InputHandler owns it's UserInterface, and is directly stored by the ClientManager.
Diffstat (limited to 'src/client_manager.cc')
-rw-r--r--src/client_manager.cc38
1 files changed, 14 insertions, 24 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc
index 3242f0a2..aca9d61b 100644
--- a/src/client_manager.cc
+++ b/src/client_manager.cc
@@ -11,16 +11,6 @@
namespace Kakoune
{
-Client::Client(std::unique_ptr<UserInterface>&& ui,
- Window& window, String name)
- : m_user_interface(std::move(ui)),
- m_input_handler(*m_user_interface),
- m_name(std::move(name))
-{
- kak_assert(not m_name.empty());
- context().change_editor(window);
-}
-
ClientManager::ClientManager() = default;
ClientManager::~ClientManager() = default;
@@ -43,12 +33,12 @@ String ClientManager::generate_name() const
}
}
-Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
- const String& init_commands)
+InputHandler* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
+ const String& init_commands)
{
Buffer& buffer = **BufferManager::instance().begin();
- Client* client = new Client{std::move(ui), get_unused_window_for_buffer(buffer),
- generate_name()};
+ InputHandler* client = new InputHandler{std::move(ui), get_unused_window_for_buffer(buffer),
+ generate_name()};
m_clients.emplace_back(client);
try
{
@@ -66,11 +56,11 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
return nullptr;
}
- client->m_user_interface->set_input_callback([client, this]() {
+ client->ui().set_input_callback([client, this]() {
try
{
- while (client->m_user_interface->is_key_available())
- client->m_input_handler.handle_key(client->m_user_interface->get_key());
+ while (client->ui().is_key_available())
+ client->handle_key(client->ui().get_key());
client->context().window().forget_timestamp();
}
catch (Kakoune::runtime_error& error)
@@ -90,7 +80,7 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
return client;
}
-void ClientManager::remove_client(Client& client)
+void ClientManager::remove_client(InputHandler& client)
{
for (auto it = m_clients.begin(); it != m_clients.end(); ++it)
{
@@ -111,7 +101,7 @@ Window& ClientManager::get_unused_window_for_buffer(Buffer& buffer)
continue;
auto it = std::find_if(m_clients.begin(), m_clients.end(),
- [&](const std::unique_ptr<Client>& client)
+ [&](const std::unique_ptr<InputHandler>& client)
{ return &client->context().window() == w.get(); });
if (it == m_clients.end())
{
@@ -155,16 +145,16 @@ void ClientManager::ensure_no_client_uses_buffer(Buffer& buffer)
m_windows.erase(end, m_windows.end());
}
-void ClientManager::set_client_name(Client& client, String name)
+void ClientManager::set_client_name(InputHandler& client, String name)
{
- auto it = find_if(m_clients, [&name](std::unique_ptr<Client>& client)
+ auto it = find_if(m_clients, [&name](std::unique_ptr<InputHandler>& client)
{ return client->m_name == name; });
if (it != m_clients.end() and it->get() != &client)
throw runtime_error("name not unique: " + name);
client.m_name = std::move(name);
}
-Client& ClientManager::get_client(const Context& context)
+InputHandler& ClientManager::get_client(const Context& context)
{
for (auto& client : m_clients)
{
@@ -174,7 +164,7 @@ Client& ClientManager::get_client(const Context& context)
throw runtime_error("no client for current context");
}
-Client& ClientManager::get_client(const String& name)
+InputHandler& ClientManager::get_client(const String& name)
{
for (auto& client : m_clients)
{
@@ -184,7 +174,7 @@ Client& ClientManager::get_client(const String& name)
throw runtime_error("no client named: " + name);
}
-static DisplayLine generate_status_line(Client& client)
+static DisplayLine generate_status_line(InputHandler& client)
{
auto& context = client.context();
auto pos = context.editor().main_selection().last();