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

This commit is contained in:
Laan Tungir
2026-07-13 07:56:31 -04:00
parent aa2ad9a6cb
commit 21eff5c7c8
3 changed files with 44 additions and 23 deletions
+1 -1
View File
@@ -1 +1 @@
0.0.23
0.0.24
+41 -20
View File
@@ -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;
+2 -2
View File
@@ -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 */