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:
parent
c61aae0722
commit
6f4515f005
@ -55,6 +55,8 @@ Client::~Client()
|
|||||||
{
|
{
|
||||||
m_window->options().unregister_watcher(*this);
|
m_window->options().unregister_watcher(*this);
|
||||||
m_window->set_client(nullptr);
|
m_window->set_client(nullptr);
|
||||||
|
ClientManager::instance().add_free_window(std::move(m_window),
|
||||||
|
std::move(context().selections()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::process_pending_inputs()
|
bool Client::process_pending_inputs()
|
||||||
|
@ -19,11 +19,11 @@ ClientManager::~ClientManager()
|
|||||||
|
|
||||||
void ClientManager::clear()
|
void ClientManager::clear()
|
||||||
{
|
{
|
||||||
m_free_windows.clear();
|
|
||||||
// So that clients destructor find the client manager empty
|
// So that clients destructor find the client manager empty
|
||||||
// so that local UI does not fork.
|
// so that local UI does not fork.
|
||||||
ClientList clients = std::move(m_clients);
|
ClientList clients = std::move(m_clients);
|
||||||
m_client_trash.clear();
|
m_client_trash.clear();
|
||||||
|
m_free_windows.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
String ClientManager::generate_name() const
|
String ClientManager::generate_name() const
|
||||||
@ -38,7 +38,7 @@ String ClientManager::generate_name() const
|
|||||||
|
|
||||||
Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
|
Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
|
||||||
EnvVarMap env_vars, StringView init_cmds,
|
EnvVarMap env_vars, StringView init_cmds,
|
||||||
BufferCoord init_coord)
|
Optional<BufferCoord> init_coord)
|
||||||
{
|
{
|
||||||
Buffer& buffer = BufferManager::instance().get_first_buffer();
|
Buffer& buffer = BufferManager::instance().get_first_buffer();
|
||||||
WindowAndSelections ws = get_free_window(buffer);
|
WindowAndSelections ws = get_free_window(buffer);
|
||||||
@ -47,9 +47,12 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui,
|
|||||||
generate_name()};
|
generate_name()};
|
||||||
m_clients.emplace_back(client);
|
m_clients.emplace_back(client);
|
||||||
|
|
||||||
|
if (init_coord)
|
||||||
|
{
|
||||||
auto& selections = client->context().selections_write_only();
|
auto& selections = client->context().selections_write_only();
|
||||||
selections = SelectionList(buffer, buffer.clamp(init_coord));
|
selections = SelectionList(buffer, buffer.clamp(*init_coord));
|
||||||
client->context().window().center_line(init_coord.line);
|
client->context().window().center_line(init_coord->line);
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -22,7 +22,7 @@ public:
|
|||||||
|
|
||||||
Client* create_client(std::unique_ptr<UserInterface>&& ui,
|
Client* create_client(std::unique_ptr<UserInterface>&& ui,
|
||||||
EnvVarMap env_vars, StringView init_cmds,
|
EnvVarMap env_vars, StringView init_cmds,
|
||||||
BufferCoord init_coord);
|
Optional<BufferCoord> init_coord);
|
||||||
|
|
||||||
bool empty() const { return m_clients.empty(); }
|
bool empty() const { return m_clients.empty(); }
|
||||||
size_t count() const { return m_clients.size(); }
|
size_t count() const { return m_clients.size(); }
|
||||||
|
Loading…
Reference in New Issue
Block a user