From 21eff5c7c8e47378d8c4292f5878d61ee94dba9f Mon Sep 17 00:00:00 2001 From: Laan Tungir Date: Mon, 13 Jul 2026 07:56:31 -0400 Subject: [PATCH] v0.0.24 - Fix theme toggle lag: replace fetch() with async XHR in toggle() and save() functions, theme_dark toggles CSS class instantly without page reload --- VERSION | 2 +- src/nostr_bridge.c | 61 +++++++++++++++++++++++++++++++--------------- src/version.h | 4 +-- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/VERSION b/VERSION index df5db66..b056f41 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.23 +0.0.24 diff --git a/src/nostr_bridge.c b/src/nostr_bridge.c index 242e284..ee86e04 100644 --- a/src/nostr_bridge.c +++ b/src/nostr_bridge.c @@ -767,33 +767,53 @@ static void handle_settings_page(WebKitURISchemeRequest *request) { " s.textContent = msg;\n" " }\n" " function toggle(feature) {\n" - " fetch('sovereign://settings/set?feature=' + feature)\n" - " .then(r => r.json())\n" - " .then(d => {\n" - " if (d.error) {\n" - " showStatus('err', d.message);\n" - " } else {\n" + " /* For theme_dark, toggle the CSS class instantly for immediate\n" + " * visual feedback, then save via async XHR (no reload needed). */\n" + " if (feature === 'theme_dark') {\n" + " var h = document.documentElement;\n" + " var isDark = h.classList.contains('dark');\n" + " if (isDark) h.classList.remove('dark');\n" + " else h.classList.add('dark');\n" + " var x = new XMLHttpRequest();\n" + " x.open('GET', 'sovereign://settings/set?feature=' + feature, true);\n" + " x.send();\n" + " showStatus('ok', 'theme_dark: ' + (isDark ? 'OFF' : 'ON'));\n" + " return;\n" + " }\n" + " /* For other features, use async XHR and reload to reflect changes. */\n" + " var x = new XMLHttpRequest();\n" + " x.open('GET', 'sovereign://settings/set?feature=' + feature, true);\n" + " x.onreadystatechange = function() {\n" + " if (x.readyState !== 4) return;\n" + " try {\n" + " var d = JSON.parse(x.responseText);\n" + " if (d.error) { showStatus('err', d.message); }\n" + " else {\n" " showStatus('ok', d.key + ': ' + (d.value ? 'ON' : 'OFF'));\n" - " setTimeout(() => location.reload(), 500);\n" + " setTimeout(function() { location.reload(); }, 300);\n" " }\n" - " })\n" - " .catch(e => showStatus('err', 'Error: ' + e.message));\n" + " } catch(e) { showStatus('err', 'Error: ' + e.message); }\n" + " };\n" + " x.send();\n" " }\n" " function save(key) {\n" " var el = document.getElementById(key);\n" " var val = el ? el.value : '';\n" - " fetch('sovereign://settings/set?key=' + encodeURIComponent(key)\n" - " + '&value=' + encodeURIComponent(val))\n" - " .then(r => r.json())\n" - " .then(d => {\n" - " if (d.error) {\n" - " showStatus('err', d.message);\n" - " } else {\n" + " var x = new XMLHttpRequest();\n" + " x.open('GET', 'sovereign://settings/set?key=' + encodeURIComponent(key)\n" + " + '&value=' + encodeURIComponent(val), true);\n" + " x.onreadystatechange = function() {\n" + " if (x.readyState !== 4) return;\n" + " try {\n" + " var d = JSON.parse(x.responseText);\n" + " if (d.error) { showStatus('err', d.message); }\n" + " else {\n" " showStatus('ok', d.key + ' = ' + d.value);\n" - " if (d.reload) setTimeout(() => location.reload(), 500);\n" + " if (d.reload) setTimeout(function() { location.reload(); }, 300);\n" " }\n" - " })\n" - " .catch(e => showStatus('err', 'Error: ' + e.message));\n" + " } catch(e) { showStatus('err', 'Error: ' + e.message); }\n" + " };\n" + " x.send();\n" " }\n" "\n" " /* ── Keyboard shortcut capture ─────────────────────────── */\n" @@ -1051,7 +1071,8 @@ static void handle_settings_set(WebKitURISchemeRequest *request, bs->theme_dark = !bs->theme_dark; new_state = bs->theme_dark; settings_save(); - reload = 1; + settings_sync_publish(); + reload = 0; /* Don't reload — the JS handles the visual toggle */ } else if (strcmp(feature, "agent_server_enabled") == 0) { bs->agent_server_enabled = !bs->agent_server_enabled; new_state = bs->agent_server_enabled; diff --git a/src/version.h b/src/version.h index 6ca1be2..9071cdf 100644 --- a/src/version.h +++ b/src/version.h @@ -11,9 +11,9 @@ #ifndef SOVEREIGN_BROWSER_VERSION_H #define SOVEREIGN_BROWSER_VERSION_H -#define SB_VERSION "v0.0.23" +#define SB_VERSION "v0.0.24" #define SB_VERSION_MAJOR 0 #define SB_VERSION_MINOR 0 -#define SB_VERSION_PATCH 23 +#define SB_VERSION_PATCH 24 #endif /* SOVEREIGN_BROWSER_VERSION_H */