fix: fix rare page faults caused by Window Server apps, change default wallpaper path

This commit is contained in:
2026-03-01 12:35:30 +01:00
parent 81fe089a4a
commit b04dcdf44a
5 changed files with 18 additions and 14 deletions
+2 -2
View File
@@ -101,8 +101,8 @@ static void klog_on_poll(Window* win) {
static void klog_on_close(Window* win) {
KlogState* klog = (KlogState*)win->app_data;
if (klog) {
if (klog->term.cells) montauk::mfree(klog->term.cells);
if (klog->term.alt_cells) montauk::mfree(klog->term.alt_cells);
if (klog->term.cells) montauk::free(klog->term.cells);
if (klog->term.alt_cells) montauk::free(klog->term.alt_cells);
if (klog->klog_buf) montauk::mfree(klog->klog_buf);
montauk::mfree(klog);
win->app_data = nullptr;
+2 -1
View File
@@ -39,7 +39,8 @@ static void terminal_on_key(Window* win, const Montauk::KeyEvent& key) {
static void terminal_on_close(Window* win) {
TerminalState* ts = (TerminalState*)win->app_data;
if (ts) {
if (ts->cells) montauk::mfree(ts->cells);
if (ts->cells) montauk::free(ts->cells);
if (ts->alt_cells) montauk::free(ts->alt_cells);
montauk::mfree(ts);
win->app_data = nullptr;
}
+1 -1
View File
@@ -87,7 +87,7 @@ void gui::desktop_init(DesktopState* ds) {
ds->settings.ui_scale = 1;
// Try to load default wallpaper
wallpaper_load(&ds->settings, "0:/home/gustav-gullstrand-d6kSvT2xZQo-unsplash.jpg",
wallpaper_load(&ds->settings, "0:/home/stephen-walker-DaC8D3USffk-unsplash.jpg",
ds->screen_w, ds->screen_h);
montauk::win_setscale(1);
+11 -8
View File
@@ -283,7 +283,8 @@ static void add_empty_line() {
// Word-wrap a text segment into display lines using pixel-width measurement.
static void wrap_text(TrueTypeFont* font, int size, const char* text, int textLen,
int max_px, Color color) {
char cur[256];
static constexpr int MAX_LINE = 255;
char cur[MAX_LINE + 1];
int cur_len = 0;
const char* p = text;
const char* end = text + textLen;
@@ -298,14 +299,16 @@ static void wrap_text(TrueTypeFont* font, int size, const char* text, int textLe
if (word_len <= 0) continue;
// Build candidate: current line + space + word
char test[260];
char test[MAX_LINE + 1];
int test_len = cur_len;
memcpy(test, cur, cur_len);
if (cur_len > 0) test[test_len++] = ' ';
int copy = word_len < (int)(sizeof(test) - test_len - 1)
? word_len : (int)(sizeof(test) - test_len - 1);
memcpy(test + test_len, word_start, copy);
test_len += copy;
if (cur_len > 0 && test_len < MAX_LINE) test[test_len++] = ' ';
int avail = MAX_LINE - test_len;
int copy = word_len < avail ? word_len : avail;
if (copy > 0) {
memcpy(test + test_len, word_start, copy);
test_len += copy;
}
test[test_len] = '\0';
int test_w = font->measure_text(test, size);
@@ -316,7 +319,7 @@ static void wrap_text(TrueTypeFont* font, int size, const char* text, int textLe
} else {
// Emit current line and start fresh
if (cur_len > 0) add_line(cur, cur_len, color, size, font);
int wl = word_len < 254 ? word_len : 254;
int wl = word_len < MAX_LINE ? word_len : MAX_LINE;
memcpy(cur, word_start, wl);
cur_len = wl;
cur[cur_len] = '\0';