diff options
| author | Maxime Coste <mawww@kakoune.org> | 2021-03-11 09:08:35 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2021-03-11 09:08:35 +1100 |
| commit | d5282735f2908ec8a15468fc915f7b3b4e2571ee (patch) | |
| tree | df81022634d175d9b2497a5768d802de5fa55e9b /src | |
| parent | 4a59018dcd766b1499d53e82ba938ce39013f7af (diff) | |
Always redraw after getting some user input
Diffstat (limited to 'src')
| -rw-r--r-- | src/client_manager.cc | 5 | ||||
| -rw-r--r-- | src/client_manager.hh | 2 | ||||
| -rw-r--r-- | src/main.cc | 3 |
3 files changed, 7 insertions, 3 deletions
diff --git a/src/client_manager.cc b/src/client_manager.cc index f46d16ea..7c03dabc 100644 --- a/src/client_manager.cc +++ b/src/client_manager.cc @@ -84,8 +84,9 @@ Client* ClientManager::create_client(std::unique_ptr<UserInterface>&& ui, int pi return contains(m_clients, client) ? client : nullptr; } -void ClientManager::process_pending_inputs() +bool ClientManager::process_pending_inputs() { + bool processed_some_input = false; while (true) { bool had_input = false; @@ -101,12 +102,14 @@ void ClientManager::process_pending_inputs() continue; } had_input = m_clients[i]->process_pending_inputs() or had_input; + processed_some_input |= had_input; ++i; } if (not had_input) break; } + return processed_some_input; } bool ClientManager::has_pending_inputs() const diff --git a/src/client_manager.hh b/src/client_manager.hh index 7d92ed7e..2323e07b 100644 --- a/src/client_manager.hh +++ b/src/client_manager.hh @@ -35,7 +35,7 @@ public: void add_free_window(std::unique_ptr<Window>&& window, SelectionList selections); void redraw_clients() const; - void process_pending_inputs(); + bool process_pending_inputs(); bool has_pending_inputs() const; Client* get_client_ifp(StringView name); diff --git a/src/main.cc b/src/main.cc index fbb074a0..998c24fd 100644 --- a/src/main.cc +++ b/src/main.cc @@ -862,7 +862,8 @@ int run_server(StringView session, StringView server_init, bool allow_blocking = not client_manager.has_pending_inputs(); while (event_manager.handle_next_events(EventMode::Normal, nullptr, allow_blocking)) { - client_manager.process_pending_inputs(); + if (client_manager.process_pending_inputs()) + break; allow_blocking = false; } client_manager.process_pending_inputs(); |
