Send client dimensions on connection, avoid a race condition.
Fixes #429
This commit is contained in:
parent
a37858ece7
commit
6925ff33b1
|
@ -234,7 +234,7 @@ IdMap<Val, domain> read_idmap(int socket)
|
||||||
class RemoteUI : public UserInterface
|
class RemoteUI : public UserInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RemoteUI(int socket);
|
RemoteUI(int socket, CharCoord dimensions);
|
||||||
~RemoteUI();
|
~RemoteUI();
|
||||||
|
|
||||||
void menu_show(ConstArrayView<DisplayLine> choices,
|
void menu_show(ConstArrayView<DisplayLine> choices,
|
||||||
|
@ -272,11 +272,12 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
RemoteUI::RemoteUI(int socket)
|
RemoteUI::RemoteUI(int socket, CharCoord dimensions)
|
||||||
: m_socket_watcher(socket, [this](FDWatcher&, EventMode mode) {
|
: m_socket_watcher(socket, [this](FDWatcher&, EventMode mode) {
|
||||||
if (m_input_callback)
|
if (m_input_callback)
|
||||||
m_input_callback(mode);
|
m_input_callback(mode);
|
||||||
})
|
}),
|
||||||
|
m_dimensions(dimensions)
|
||||||
{
|
{
|
||||||
write_to_debug_buffer(format("remote client connected: {}", m_socket_watcher.fd()));
|
write_to_debug_buffer(format("remote client connected: {}", m_socket_watcher.fd()));
|
||||||
}
|
}
|
||||||
|
@ -438,6 +439,7 @@ RemoteClient::RemoteClient(StringView session, std::unique_ptr<UserInterface>&&
|
||||||
Message msg(sock);
|
Message msg(sock);
|
||||||
msg.write(init_command.data(), (int)init_command.length());
|
msg.write(init_command.data(), (int)init_command.length());
|
||||||
msg.write((char)0);
|
msg.write((char)0);
|
||||||
|
msg.write(m_ui->dimensions());
|
||||||
msg.write(env_vars);
|
msg.write(env_vars);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,8 +583,9 @@ private:
|
||||||
}
|
}
|
||||||
if (c == 0) // end of initial command stream, go to interactive ui
|
if (c == 0) // end of initial command stream, go to interactive ui
|
||||||
{
|
{
|
||||||
|
CharCoord dimensions = read<CharCoord>(socket);
|
||||||
EnvVarMap env_vars = read_idmap<String, MemoryDomain::EnvVars>(socket);
|
EnvVarMap env_vars = read_idmap<String, MemoryDomain::EnvVars>(socket);
|
||||||
std::unique_ptr<UserInterface> ui{new RemoteUI{socket}};
|
std::unique_ptr<UserInterface> ui{new RemoteUI{socket, dimensions}};
|
||||||
ClientManager::instance().create_client(std::move(ui),
|
ClientManager::instance().create_client(std::move(ui),
|
||||||
std::move(env_vars),
|
std::move(env_vars),
|
||||||
m_buffer);
|
m_buffer);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user