Obtain a new window for a client before releasing the current one
Creating a window potentially runs hooks, which themselves could trigger shell evaluation, which could handle urgent input events such as a resize, while waiting for the shell to finish. When that happens, the client had a temporarily null window as it had already released its own window. Fixes #2225
This commit is contained in:
parent
47666ba20b
commit
7905382b74
|
@ -175,10 +175,10 @@ void Client::change_buffer(Buffer& buffer)
|
||||||
auto& client_manager = ClientManager::instance();
|
auto& client_manager = ClientManager::instance();
|
||||||
m_window->options().unregister_watcher(*this);
|
m_window->options().unregister_watcher(*this);
|
||||||
m_window->set_client(nullptr);
|
m_window->set_client(nullptr);
|
||||||
|
|
||||||
|
WindowAndSelections ws = client_manager.get_free_window(buffer);
|
||||||
client_manager.add_free_window(std::move(m_window),
|
client_manager.add_free_window(std::move(m_window),
|
||||||
std::move(context().selections()));
|
std::move(context().selections()));
|
||||||
WindowAndSelections ws = client_manager.get_free_window(buffer);
|
|
||||||
|
|
||||||
m_window = std::move(ws.window);
|
m_window = std::move(ws.window);
|
||||||
m_window->set_client(this);
|
m_window->set_client(this);
|
||||||
m_window->options().register_watcher(*this);
|
m_window->options().register_watcher(*this);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user