Skip to content

Commit ac6e840

Browse files
committed
ui: fix theme selection in settings. fixes #266 and fixes #239
1 parent 94e6141 commit ac6e840

File tree

2 files changed

+31
-29
lines changed

2 files changed

+31
-29
lines changed

lib/ui/app.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,13 @@ export const App: m.Component = {
129129
onclick={e => {
130130
const dialog = e.target.closest("dialog");
131131
const rect = dialog.getBoundingClientRect();
132+
const zeroClick = (e.clientX == 0 && e.clientY == 0); // clicking select dropdown gives 0,0
132133
if ((workbench.dialog.explicitClose !== true) && (
133134
e.clientX < rect.left ||
134135
e.clientX > rect.right ||
135136
e.clientY < rect.top ||
136137
e.clientY > rect.bottom
137-
)) {
138+
) && !zeroClick) {
138139
workbench.closeDialog();
139140
}
140141
}}>

lib/ui/settings.tsx

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,39 @@
11

22
export const Settings = {
3-
view({attrs: {workbench}}) {
3+
view({attrs: {workbench}, state}) {
44
const currentTheme = workbench.workspace.settings.theme;
5+
state.selectedTheme = (state.selectedTheme === undefined) ? currentTheme : state.selectedTheme;
6+
const oninput = (e) => {
7+
state.selectedTheme = e.target.value;
8+
}
59
return (
610
<div class="notice">
7-
<form method="dialog">
8-
<h3>Settings</h3>
9-
<div class="flex flex-row">
10-
<div class="grow">Theme</div>
11-
<div>
12-
<select name="theme">
13-
<option selected={currentTheme===""} value="">Light</option>
14-
<option selected={currentTheme==="darkmode"} value="darkmode">Dark</option>
15-
<option selected={currentTheme==="sepia"} value="sepia">Sepia</option>
16-
<option selected={currentTheme==="sublime"} value="sublime">Sublime</option>
17-
</select>
18-
</div>
11+
<h3>Settings</h3>
12+
<div class="flex flex-row">
13+
<div class="grow">Theme</div>
14+
<div>
15+
<select name="theme" oninput={oninput}>
16+
<option selected={state.selectedTheme===""} value="">Light</option>
17+
<option selected={state.selectedTheme==="darkmode"} value="darkmode">Dark</option>
18+
<option selected={state.selectedTheme==="sepia"} value="sepia">Sepia</option>
19+
<option selected={state.selectedTheme==="sublime"} value="sublime">Sublime</option>
20+
</select>
1921
</div>
20-
<div class="button-bar">
21-
<button onclick={() => {
22+
</div>
23+
<div class="button-bar">
24+
<button onclick={() => {
25+
workbench.closeDialog();
26+
}}>Cancel</button>
27+
<button class="primary" onclick={async (e) => {
28+
if (currentTheme !== state.selectedTheme) {
29+
workbench.workspace.settings.theme = state.selectedTheme;
30+
await workbench.workspace.save(true);
31+
location.reload();
32+
} else {
2233
workbench.closeDialog();
23-
}}>Cancel</button>
24-
<button class="primary" onclick={async (e) => {
25-
let newTheme = e.target.closest("form").elements[0].value;
26-
if (currentTheme !== newTheme) {
27-
workbench.workspace.settings.theme = newTheme;
28-
await workbench.workspace.save(true);
29-
location.reload();
30-
} else {
31-
workbench.closeDialog();
32-
}
33-
}}>Save Changes</button>
34-
</div>
35-
</form>
34+
}
35+
}}>Save Changes</button>
36+
</div>
3637
</div>
3738
)
3839
}

0 commit comments

Comments
 (0)