diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-09-13 00:01:47 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-09-13 00:01:47 +0200 |
| commit | 27a1e70b01731d1def326db91ab7c6e236b9fe34 (patch) | |
| tree | a11cb3d0f382380588a407259e997bd8a2c49358 /src | |
| parent | 000af8e2065ab9c358986840ec8e9a9d1d3266d6 (diff) | |
Rework client name change
Diffstat (limited to 'src')
| -rw-r--r-- | src/client.hh | 2 | ||||
| -rw-r--r-- | src/client_manager.cc | 35 | ||||
| -rw-r--r-- | src/client_manager.hh | 3 | ||||
| -rw-r--r-- | src/commands.cc | 6 |
4 files changed, 13 insertions, 33 deletions
diff --git a/src/client.hh b/src/client.hh index deb44007..7c300929 100644 --- a/src/client.hh +++ b/src/client.hh @@ -73,12 +73,12 @@ public: Context& context() { return m_context; } const String& name() const { return m_name; } + void set_name(String name) { m_name = std::move(name); } UserInterface& ui() const { return *m_ui; } private: Context m_context; friend class InputMode; - friend class ClientManager; std::unique_ptr<UserInterface> m_ui; std::unique_ptr<InputMode> m_mode; std::vector<std::unique_ptr<InputMode>> m_mode_trash; diff --git a/src/client_manager.cc b/src/client_manager.cc index 944099ab..0f0c65e7 100644 --- a/src/client_manager.cc +++ b/src/client_manager.cc @@ -19,16 +19,7 @@ String ClientManager::generate_name() const for (int i = 0; true; ++i) { String name = "unnamed" + to_string(i); - bool found = false; - for (auto& client : m_clients) - { - if (client->m_name == name) - { - found = true; - break; - } - } - if (not found) + if (validate_client_name(name)) return name; } } @@ -123,7 +114,7 @@ void ClientManager::ensure_no_client_uses_buffer(Buffer& buffer) continue; if (client->context().editor().is_editing()) - throw runtime_error("client '" + client->m_name + "' is inserting in '" + + throw runtime_error("client '" + client->name() + "' is inserting in '" + buffer.display_name() + '\''); // change client context to edit the first buffer which is not the @@ -145,30 +136,18 @@ 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) +bool ClientManager::validate_client_name(const String& name) const { - auto it = find_if(m_clients, [&name](std::unique_ptr<Client>& 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) -{ - for (auto& client : m_clients) - { - if (&client->context() == &context) - return *client; - } - throw runtime_error("no client for current context"); + auto it = find_if(m_clients, [&](const std::unique_ptr<Client>& client) + { return client->name() == name; }); + return it == m_clients.end(); } Client& ClientManager::get_client(const String& name) { for (auto& client : m_clients) { - if (client->m_name == name) + if (client->name() == name) return *client; } throw runtime_error("no client named: " + name); diff --git a/src/client_manager.hh b/src/client_manager.hh index 5e7db6d5..0e3707ac 100644 --- a/src/client_manager.hh +++ b/src/client_manager.hh @@ -26,9 +26,8 @@ public: void redraw_clients() const; - Client& get_client(const Context& context); Client& get_client(const String& name); - void set_client_name(Client& client, String name); + bool validate_client_name(const String& name) const; void remove_client(Client& client); private: diff --git a/src/commands.cc b/src/commands.cc index ccda7d41..0f772dd8 100644 --- a/src/commands.cc +++ b/src/commands.cc @@ -777,8 +777,10 @@ void set_client_name(CommandParameters params, Context& context) { ParametersParser parser(params, OptionMap{}, ParametersParser::Flags::None, 1, 1); - auto& manager = ClientManager::instance(); - manager.set_client_name(manager.get_client(context), params[0]); + if (ClientManager::instance().validate_client_name(params[0])) + context.client().set_name(params[0]); + else if (context.client().name() != params[0]) + throw runtime_error("client name '" + params[0] + "' is not unique"); } void set_register(CommandParameters params, Context& context) |
