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
+20 -15
View File
@@ -193,26 +193,31 @@ extern "C" void _start() {
bool redraw = klog_poll(); bool redraw = klog_poll();
Montauk::WinEvent ev; Montauk::WinEvent ev;
int r = g_win.poll(&ev); bool quit = false;
if (r < 0) break; int r = 0;
if (r == 0) { while ((r = g_win.poll(&ev)) > 0) {
if (redraw && klog_render()) redraw = true;
g_win.present();
montauk::sleep_ms(16); if (ev.type == 3) {
continue; 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) { if (redraw && klog_render())
klog_handle_mouse(ev);
} else if (ev.type == 2 || ev.type == 4) {
g_klog.term.dirty = true;
}
if (klog_render())
g_win.present(); g_win.present();
if (r == 0)
montauk::sleep_ms(16);
} }
klog_cleanup(); klog_cleanup();
+29 -19
View File
@@ -339,30 +339,40 @@ extern "C" void _start() {
if (g_should_exit) break; if (g_should_exit) break;
Montauk::WinEvent ev; Montauk::WinEvent ev;
int r = g_win.poll(&ev); bool quit = false;
if (r < 0) break; int r = 0;
if (r == 0) { while ((r = g_win.poll(&ev)) > 0) {
if (redraw && term_render()) redraw = true;
g_win.present();
montauk::sleep_ms(16); if (ev.type == 3) {
continue; 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) { if (redraw && term_render())
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())
g_win.present(); g_win.present();
if (r == 0)
montauk::sleep_ms(16);
} }
term_cleanup(); term_cleanup();