aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Amine Mouafik <amine@mouafik.fr>2019-11-28 11:23:10 +0700
committerLibravatar Amine Mouafik <amine@mouafik.fr>2019-11-28 11:23:10 +0700
commiteff719b87c60097342d393922048662c32255d88 (patch)
tree1880039ba4002f34551c812bb356e46f537c57b8
parent5.4.1-beta.1 (diff)
downloadferdium-app-eff719b87c60097342d393922048662c32255d88.tar.gz
ferdium-app-eff719b87c60097342d393922048662c32255d88.tar.zst
ferdium-app-eff719b87c60097342d393922048662c32255d88.zip
Better handling of (adaptable/universal) dark mode
-rw-r--r--src/config.js4
-rw-r--r--src/lib/Tray.js4
-rw-r--r--src/stores/AppStore.js4
-rw-r--r--src/stores/UIStore.js41
-rw-r--r--src/webview/recipe.js12
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';
6import { asarPath } from './helpers/asar-helpers'; 6import { asarPath } from './helpers/asar-helpers';
7 7
8const app = process.type === 'renderer' ? electron.remote.app : electron.app; 8const app = process.type === 'renderer' ? electron.remote.app : electron.app;
9const systemPreferences = process.type === 'renderer' ? electron.remote.systemPreferences : electron.systemPreferences; 9const nativeTheme = process.type === 'renderer' ? electron.remote.nativeTheme : electron.nativeTheme;
10 10
11export const CHECK_INTERVAL = ms('1h'); // How often should we perform checks 11export 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 @@
1import { 1import {
2 app, Tray, Menu, systemPreferences, nativeImage, 2 app, Tray, Menu, systemPreferences, nativeTheme, nativeImage,
3} from 'electron'; 3} from 'electron';
4import path from 'path'; 4import 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';
27const debug = require('debug')('Ferdi:AppStore'); 27const debug = require('debug')('Ferdi:AppStore');
28 28
29const { 29const {
30 app, systemPreferences, screen, powerMonitor, 30 app, nativeTheme, screen, powerMonitor,
31} = remote; 31} = remote;
32 32
33const mainWindow = remote.getCurrentWindow(); 33const 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 @@
1import { 1import {
2 action, 2 action, observable, computed, reaction,
3 observable,
4 computed,
5 reaction,
6} from 'mobx'; 3} from 'mobx';
7import { theme } from '@meetfranz/theme'; 4import { theme } from '@meetfranz/theme';
8import { remote } from 'electron'; 5import { remote } from 'electron';
@@ -10,12 +7,14 @@ import { remote } from 'electron';
10import Store from './lib/Store'; 7import Store from './lib/Store';
11import { isMac } from '../environment'; 8import { isMac } from '../environment';
12 9
13const { systemPreferences } = remote; 10const { nativeTheme, systemPreferences } = remote;
14 11
15export default class UIStore extends Store { 12export 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