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:
+41
-20
@@ -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
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user