fix: fix terminal event loop regression

This commit is contained in:
2026-03-28 14:11:10 +01:00
parent cc92c9a7a5
commit 07b04132eb
2 changed files with 49 additions and 34 deletions
+15 -10
View File
@@ -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 == 3) 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 (r < 0 || quit) break;
if (redraw && klog_render())
g_win.present();
if (r == 0)
montauk::sleep_ms(16);
}
klog_cleanup();
+20 -10
View File
@@ -339,18 +339,17 @@ 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 == 3) break;
if (ev.type == 0) {
term_handle_key(ev.key);
} else if (ev.type == 1) {
@@ -361,8 +360,19 @@ extern "C" void _start() {
g_tabs.tabs[g_tabs.active_tab]->dirty = true;
}
if (!g_should_exit && term_render())
if (g_should_exit) {
quit = true;
break;
}
}
if (r < 0 || quit) break;
if (redraw && term_render())
g_win.present();
if (r == 0)
montauk::sleep_ms(16);
}
term_cleanup();