From 07b04132eb550d89fcbb6fece0b3ff7ffc69f99b Mon Sep 17 00:00:00 2001 From: Daniel Hammer Date: Sat, 28 Mar 2026 14:11:10 +0100 Subject: [PATCH] fix: fix terminal event loop regression --- programs/src/klog/main.cpp | 35 ++++++++++++++----------- programs/src/terminal/main.cpp | 48 ++++++++++++++++++++-------------- 2 files changed, 49 insertions(+), 34 deletions(-) diff --git a/programs/src/klog/main.cpp b/programs/src/klog/main.cpp index 14a8bf9..c4e8cfd 100644 --- a/programs/src/klog/main.cpp +++ b/programs/src/klog/main.cpp @@ -193,26 +193,31 @@ extern "C" void _start() { bool redraw = klog_poll(); Montauk::WinEvent ev; - int r = g_win.poll(&ev); - if (r < 0) break; + bool quit = false; + int r = 0; - if (r == 0) { - if (redraw && klog_render()) - g_win.present(); - montauk::sleep_ms(16); - continue; + while ((r = g_win.poll(&ev)) > 0) { + redraw = true; + + if (ev.type == 3) { + quit = true; + break; + } + + if (ev.type == 1) { + klog_handle_mouse(ev); + } else if (ev.type == 2 || ev.type == 4) { + g_klog.term.dirty = true; + } } - if (ev.type == 3) break; + if (r < 0 || quit) break; - if (ev.type == 1) { - klog_handle_mouse(ev); - } else if (ev.type == 2 || ev.type == 4) { - g_klog.term.dirty = true; - } - - if (klog_render()) + if (redraw && klog_render()) g_win.present(); + + if (r == 0) + montauk::sleep_ms(16); } klog_cleanup(); diff --git a/programs/src/terminal/main.cpp b/programs/src/terminal/main.cpp index f30ab88..b8b45c9 100644 --- a/programs/src/terminal/main.cpp +++ b/programs/src/terminal/main.cpp @@ -339,30 +339,40 @@ extern "C" void _start() { if (g_should_exit) break; Montauk::WinEvent ev; - int r = g_win.poll(&ev); - if (r < 0) break; + bool quit = false; + int r = 0; - if (r == 0) { - if (redraw && term_render()) - g_win.present(); - montauk::sleep_ms(16); - continue; + while ((r = g_win.poll(&ev)) > 0) { + redraw = true; + + if (ev.type == 3) { + quit = true; + break; + } + + if (ev.type == 0) { + term_handle_key(ev.key); + } else if (ev.type == 1) { + term_handle_mouse(ev); + } else if (ev.type == 2 || ev.type == 4) { + term_request_redraw(); + if (g_tabs.tab_count > 0) + g_tabs.tabs[g_tabs.active_tab]->dirty = true; + } + + if (g_should_exit) { + quit = true; + break; + } } - if (ev.type == 3) break; + if (r < 0 || quit) break; - if (ev.type == 0) { - term_handle_key(ev.key); - } else if (ev.type == 1) { - term_handle_mouse(ev); - } else if (ev.type == 2 || ev.type == 4) { - term_request_redraw(); - if (g_tabs.tab_count > 0) - g_tabs.tabs[g_tabs.active_tab]->dirty = true; - } - - if (!g_should_exit && term_render()) + if (redraw && term_render()) g_win.present(); + + if (r == 0) + montauk::sleep_ms(16); } term_cleanup();