diff options
-rw-r--r-- | src/config.js | 4 | ||||
-rw-r--r-- | src/lib/Tray.js | 4 | ||||
-rw-r--r-- | src/stores/AppStore.js | 4 | ||||
-rw-r--r-- | src/stores/UIStore.js | 41 | ||||
-rw-r--r-- | src/webview/recipe.js | 12 |
5 files changed, 44 insertions, 21 deletions
diff --git a/src/config.js b/src/config.js index 5c184b65a..57ae2aae1 100644 --- a/src/config.js +++ b/src/config.js | |||
@@ -6,7 +6,7 @@ import ms from 'ms'; | |||
6 | import { asarPath } from './helpers/asar-helpers'; | 6 | import { asarPath } from './helpers/asar-helpers'; |
7 | 7 | ||
8 | const app = process.type === 'renderer' ? electron.remote.app : electron.app; | 8 | const app = process.type === 'renderer' ? electron.remote.app : electron.app; |
9 | const systemPreferences = process.type === 'renderer' ? electron.remote.systemPreferences : electron.systemPreferences; | 9 | const nativeTheme = process.type === 'renderer' ? electron.remote.nativeTheme : electron.nativeTheme; |
10 | 10 | ||
11 | export const CHECK_INTERVAL = ms('1h'); // How often should we perform checks | 11 | export const CHECK_INTERVAL = ms('1h'); // How often should we perform checks |
12 | 12 | ||
@@ -53,7 +53,7 @@ export const DEFAULT_APP_SETTINGS = { | |||
53 | showMessageBadgeWhenMuted: true, | 53 | showMessageBadgeWhenMuted: true, |
54 | enableSpellchecking: true, | 54 | enableSpellchecking: true, |
55 | spellcheckerLanguage: 'en-us', | 55 | spellcheckerLanguage: 'en-us', |
56 | darkMode: process.platform === 'darwin' ? systemPreferences.isDarkMode() : false, // We can't use refs from `./environment` at this time | 56 | darkMode: process.platform === 'darwin' ? nativeTheme.shouldUseDarkColors : false, // We can't use refs from `./environment` at this time |
57 | locale: '', | 57 | locale: '', |
58 | fallbackLocale: 'en-US', | 58 | fallbackLocale: 'en-US', |
59 | beta: false, | 59 | beta: false, |
diff --git a/src/lib/Tray.js b/src/lib/Tray.js index 90974de3f..c0d936599 100644 --- a/src/lib/Tray.js +++ b/src/lib/Tray.js | |||
@@ -1,5 +1,5 @@ | |||
1 | import { | 1 | import { |
2 | app, Tray, Menu, systemPreferences, nativeImage, | 2 | app, Tray, Menu, systemPreferences, nativeTheme, nativeImage, |
3 | } from 'electron'; | 3 | } from 'electron'; |
4 | import path from 'path'; | 4 | import path from 'path'; |
5 | 5 | ||
@@ -86,7 +86,7 @@ export default class TrayIcon { | |||
86 | _getAsset(type, asset) { | 86 | _getAsset(type, asset) { |
87 | let { platform } = process; | 87 | let { platform } = process; |
88 | 88 | ||
89 | if (platform === 'darwin' && systemPreferences.isDarkMode()) { | 89 | if (platform === 'darwin' && nativeTheme.shouldUseDarkColors) { |
90 | platform = `${platform}-dark`; | 90 | platform = `${platform}-dark`; |
91 | } | 91 | } |
92 | 92 | ||
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js index 0756a05eb..36e6efd4f 100644 --- a/src/stores/AppStore.js +++ b/src/stores/AppStore.js | |||
@@ -27,7 +27,7 @@ import { sleep } from '../helpers/async-helpers'; | |||
27 | const debug = require('debug')('Ferdi:AppStore'); | 27 | const debug = require('debug')('Ferdi:AppStore'); |
28 | 28 | ||
29 | const { | 29 | const { |
30 | app, systemPreferences, screen, powerMonitor, | 30 | app, nativeTheme, screen, powerMonitor, |
31 | } = remote; | 31 | } = remote; |
32 | 32 | ||
33 | const mainWindow = remote.getCurrentWindow(); | 33 | const mainWindow = remote.getCurrentWindow(); |
@@ -185,7 +185,7 @@ export default class AppStore extends Store { | |||
185 | this._healthCheck(); | 185 | this._healthCheck(); |
186 | }, 1000); | 186 | }, 1000); |
187 | 187 | ||
188 | this.isSystemDarkModeEnabled = systemPreferences.isDarkMode(); | 188 | this.isSystemDarkModeEnabled = nativeTheme.shouldUseDarkColors; |
189 | 189 | ||
190 | onVisibilityChange((isVisible) => { | 190 | onVisibilityChange((isVisible) => { |
191 | this.isFocused = isVisible; | 191 | this.isFocused = isVisible; |
diff --git a/src/stores/UIStore.js b/src/stores/UIStore.js index ee4e0f2b1..7e6f89fed 100644 --- a/src/stores/UIStore.js +++ b/src/stores/UIStore.js | |||
@@ -1,8 +1,5 @@ | |||
1 | import { | 1 | import { |
2 | action, | 2 | action, observable, computed, reaction, |
3 | observable, | ||
4 | computed, | ||
5 | reaction, | ||
6 | } from 'mobx'; | 3 | } from 'mobx'; |
7 | import { theme } from '@meetfranz/theme'; | 4 | import { theme } from '@meetfranz/theme'; |
8 | import { remote } from 'electron'; | 5 | import { remote } from 'electron'; |
@@ -10,12 +7,14 @@ import { remote } from 'electron'; | |||
10 | import Store from './lib/Store'; | 7 | import Store from './lib/Store'; |
11 | import { isMac } from '../environment'; | 8 | import { isMac } from '../environment'; |
12 | 9 | ||
13 | const { systemPreferences } = remote; | 10 | const { nativeTheme, systemPreferences } = remote; |
14 | 11 | ||
15 | export default class UIStore extends Store { | 12 | export default class UIStore extends Store { |
16 | @observable showServicesUpdatedInfoBar = false; | 13 | @observable showServicesUpdatedInfoBar = false; |
17 | 14 | ||
18 | @observable isOsDarkThemeActive = isMac ? systemPreferences.isDarkMode() : false; | 15 | @observable isOsDarkThemeActive = isMac |
16 | ? nativeTheme.shouldUseDarkColors | ||
17 | : false; | ||
19 | 18 | ||
20 | constructor(...args) { | 19 | constructor(...args) { |
21 | super(...args); | 20 | super(...args); |
@@ -23,13 +22,18 @@ export default class UIStore extends Store { | |||
23 | // Register action handlers | 22 | // Register action handlers |
24 | this.actions.ui.openSettings.listen(this._openSettings.bind(this)); | 23 | this.actions.ui.openSettings.listen(this._openSettings.bind(this)); |
25 | this.actions.ui.closeSettings.listen(this._closeSettings.bind(this)); | 24 | this.actions.ui.closeSettings.listen(this._closeSettings.bind(this)); |
26 | this.actions.ui.toggleServiceUpdatedInfoBar.listen(this._toggleServiceUpdatedInfoBar.bind(this)); | 25 | this.actions.ui.toggleServiceUpdatedInfoBar.listen( |
26 | this._toggleServiceUpdatedInfoBar.bind(this), | ||
27 | ); | ||
27 | 28 | ||
28 | // Listen for theme change on MacOS | 29 | // Listen for theme change on MacOS |
29 | if (isMac) { | 30 | if (isMac) { |
30 | systemPreferences.subscribeNotification('AppleInterfaceThemeChangedNotification', () => { | 31 | systemPreferences.subscribeNotification( |
31 | this.isOsDarkThemeActive = systemPreferences.isDarkMode(); | 32 | 'AppleInterfaceThemeChangedNotification', |
32 | }); | 33 | () => { |
34 | this.isOsDarkThemeActive = nativeTheme.shouldUseDarkColors; | ||
35 | }, | ||
36 | ); | ||
33 | } | 37 | } |
34 | } | 38 | } |
35 | 39 | ||
@@ -44,11 +48,24 @@ export default class UIStore extends Store { | |||
44 | @computed get showMessageBadgesEvenWhenMuted() { | 48 | @computed get showMessageBadgesEvenWhenMuted() { |
45 | const settings = this.stores.settings.all; | 49 | const settings = this.stores.settings.all; |
46 | 50 | ||
47 | return (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || !settings.app.isAppMuted; | 51 | return ( |
52 | (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) | ||
53 | || !settings.app.isAppMuted | ||
54 | ); | ||
48 | } | 55 | } |
49 | 56 | ||
50 | @computed get isDarkThemeActive() { | 57 | @computed get isDarkThemeActive() { |
51 | return this.stores.settings.all.app.darkMode && this.stores.settings.all.app.adaptableDarkMode && this.isOsDarkThemeActive ? true : !!this.stores.settings.all.app.darkMode; | 58 | const isMacWithAdaptableInDarkMode = isMac |
59 | && this.stores.settings.all.app.darkMode | ||
60 | && this.stores.settings.all.app.adaptableDarkMode | ||
61 | && this.isOsDarkThemeActive; | ||
62 | const isMacWithoutAdaptableInDarkMode = isMac | ||
63 | && this.stores.settings.all.app.darkMode | ||
64 | && !this.stores.settings.all.app.adaptableDarkMode; | ||
65 | const isNotMacInDarkMode = !isMac && this.stores.settings.all.app.darkMode; | ||
66 | return !!(isMacWithAdaptableInDarkMode | ||
67 | || isMacWithoutAdaptableInDarkMode | ||
68 | || isNotMacInDarkMode); | ||
52 | } | 69 | } |
53 | 70 | ||
54 | @computed get theme() { | 71 | @computed get theme() { |
diff --git a/src/webview/recipe.js b/src/webview/recipe.js index 1e290f8be..2cb2d3a98 100644 --- a/src/webview/recipe.js +++ b/src/webview/recipe.js | |||
@@ -162,9 +162,15 @@ class RecipeController { | |||
162 | } | 162 | } |
163 | 163 | ||
164 | // Remove dark reader if (universal) dark mode was just disabled | 164 | // Remove dark reader if (universal) dark mode was just disabled |
165 | if (this.universalDarkModeInjected && (!this.settings.service.isDarkModeEnabled || !this.settings.app.universalDarkMode)) { | 165 | if (this.universalDarkModeInjected) { |
166 | disableDarkMode(); | 166 | if ( |
167 | this.universalDarkModeInjected = false; | 167 | !this.settings.app.darkMode |
168 | || !this.settings.service.isDarkModeEnabled | ||
169 | || !this.settings.app.universalDarkMode | ||
170 | ) { | ||
171 | disableDarkMode(); | ||
172 | this.universalDarkModeInjected = false; | ||
173 | } | ||
168 | } | 174 | } |
169 | } | 175 | } |
170 | 176 | ||