1
1
mirror of https://github.com/mawww/kakoune.git synced 2024-12-01 08:23:05 +03:00

Only touch new clients selections when target coord are explicit

Do not implicitely change new clients selections to target coordinates
when the user did not specify them, so that we can re-use the selections
from the found free window, which is the generally desired behaviour.
This commit is contained in:
Maxime Coste 2017-01-19 18:44:26 +00:00
parent c61aae0722
commit 6f4515f005
3 changed files with 11 additions and 6 deletions

View File

@ -55,6 +55,8 @@ Client::~Client()
{
m_window->options().unregister_watcher(*this);
m_window->set_client(nullptr);
ClientManager::instance().add_free_window(std::move(m_window),
std::move(context().selections()));
}
bool Client::process_pending_inputs()

View File

@ -19,11 +19,11 @@ ClientManager::~ClientManager()
void ClientManager::clear()
{
m_free_windows.clear();
// So that clients destructor find the client manager empty
// so that local UI does not fork.
ClientList clients = std::move(m_clients);
m_client_trash.clear();
m_free_windows.clear();
}
String ClientManager::generate_name() const
@ -38,7 +38,7 @@ String ClientManager::generate_name() const
Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
EnvVarMap env_vars, StringView init_cmds,
BufferCoord init_coord)
Optional<BufferCoord> init_coord)
{
Buffer& buffer = BufferManager::instance().get_first_buffer();
WindowAndSelections ws = get_free_window(buffer);
@ -47,9 +47,12 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
generate_name()};
m_clients.emplace_back(client);
auto& selections = client->context().selections_write_only();
selections = SelectionList(buffer, buffer.clamp(init_coord));
client->context().window().center_line(init_coord.line);
if (init_coord)
{
auto& selections = client->context().selections_write_only();
selections = SelectionList(buffer, buffer.clamp(*init_coord));
client->context().window().center_line(init_coord->line);
}
try
{

View File

@ -22,7 +22,7 @@ public:
Client* create_client(std::unique_ptr<UserInterface>&& ui,
EnvVarMap env_vars, StringView init_cmds,
BufferCoord init_coord);
Optional<BufferCoord> init_coord);
bool empty() const { return m_clients.empty(); }
size_t count() const { return m_clients.size(); }