From 9214b63967ca659fb083d9c994842995aef126f6 Mon Sep 17 00:00:00 2001 From: Amine Mouafik Date: Tue, 26 Nov 2019 23:31:36 +0700 Subject: #168 Set empty menu when Ferdi is locked --- src/lib/Menu.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/lib') diff --git a/src/lib/Menu.js b/src/lib/Menu.js index 826fe843f..d3b13e491 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -809,6 +809,7 @@ export default class FranzMenu { locked: false, }, }); + window.ferdi.menu.rebuild() setTimeout(() => { actions.settings.update({ type: 'app', @@ -963,7 +964,8 @@ export default class FranzMenu { this.currentTemplate = tpl; const menu = Menu.buildFromTemplate(tpl); - Menu.setApplicationMenu(menu); + const lockedMenu = Menu.buildFromTemplate([]); + Menu.setApplicationMenu(this.stores.settings.app.locked ? lockedMenu : menu); } serviceTpl() { -- cgit v1.2.3-70-g09d2 From e14638f2d0db12369b5de477cdc06511bbbfb6d7 Mon Sep 17 00:00:00 2001 From: Amine Mouafik Date: Wed, 27 Nov 2019 16:08:15 +0700 Subject: Run prepare code to fix formatting --- src/components/settings/settings/EditSettingsForm.js | 18 ++++++++++++------ src/components/settings/team/TeamDashboard.js | 9 ++++++--- src/lib/Menu.js | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) (limited to 'src/lib') diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js index 12822bae0..1a54f221d 100644 --- a/src/components/settings/settings/EditSettingsForm.js +++ b/src/components/settings/settings/EditSettingsForm.js @@ -261,9 +261,12 @@ export default @observer class EditSettingsForm extends Component { autoFocus /> {isLoggedIn && ( -

+

{ intl.formatMessage(messages.serverInfo) }

)} @@ -301,9 +304,12 @@ export default @observer class EditSettingsForm extends Component { onChange={e => this.submit(e)} field={form.$('todoServer')} /> -

+

{ intl.formatMessage(messages.todoServerInfo) }

diff --git a/src/components/settings/team/TeamDashboard.js b/src/components/settings/team/TeamDashboard.js index 57db1dcbd..3d5358d89 100644 --- a/src/components/settings/team/TeamDashboard.js +++ b/src/components/settings/team/TeamDashboard.js @@ -210,9 +210,12 @@ export default @injectSheet(styles) @observer class TeamDashboard extends Compon

{intl.formatMessage(messages.teamsUnavailable)}

-

+

{intl.formatMessage(messages.teamsUnavailableInfo)}

diff --git a/src/lib/Menu.js b/src/lib/Menu.js index d3b13e491..b8abf80bd 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -809,7 +809,7 @@ export default class FranzMenu { locked: false, }, }); - window.ferdi.menu.rebuild() + window.ferdi.menu.rebuild(); setTimeout(() => { actions.settings.update({ type: 'app', -- cgit v1.2.3-70-g09d2 From a28c993d2045c3bef61a4435737e0c810d380282 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Sat, 26 Oct 2019 12:48:31 +0200 Subject: Fix zoom not working --- src/lib/Menu.js | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Menu.js b/src/lib/Menu.js index b8abf80bd..fb4ed2677 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -392,10 +392,10 @@ const _templateFactory = intl => [ accelerator: 'Cmd+plus', click() { const activeService = getActiveWebview(); - activeService.getZoomLevel((level) => { - // level 9 =~ +300% and setZoomLevel wouldnt zoom in further - if (level < 9) activeService.setZoomLevel(level + 1); - }); + const level = activeService.getZoomLevel(); + + // level 9 =~ +300% and setZoomLevel wouldnt zoom in further + if (level < 9) activeService.setZoomLevel(level + 1); }, }, { @@ -403,10 +403,10 @@ const _templateFactory = intl => [ accelerator: 'Cmd+-', click() { const activeService = getActiveWebview(); - activeService.getZoomLevel((level) => { - // level -9 =~ -50% and setZoomLevel wouldnt zoom out further - if (level > -9) activeService.setZoomLevel(level - 1); - }); + const level = activeService.getZoomLevel(); + + // level -9 =~ -50% and setZoomLevel wouldnt zoom out further + if (level > -9) activeService.setZoomLevel(level - 1); }, }, { @@ -598,10 +598,10 @@ const _titleBarTemplateFactory = intl => [ accelerator: `${ctrlKey}+=`, click() { const activeService = getActiveWebview(); - activeService.getZoomLevel((level) => { - // level 9 =~ +300% and setZoomLevel wouldnt zoom in further - if (level < 9) activeService.setZoomLevel(level + 1); - }); + const level = activeService.getZoomLevel(); + + // level 9 =~ +300% and setZoomLevel wouldnt zoom in further + if (level < 9) activeService.setZoomLevel(level + 1); }, }, { @@ -609,10 +609,10 @@ const _titleBarTemplateFactory = intl => [ accelerator: `${ctrlKey}+-`, click() { const activeService = getActiveWebview(); - activeService.getZoomLevel((level) => { - // level -9 =~ -50% and setZoomLevel wouldnt zoom out further - if (level > -9) activeService.setZoomLevel(level - 1); - }); + const level = activeService.getZoomLevel(); + + // level -9 =~ -50% and setZoomLevel wouldnt zoom out further + if (level > -9) activeService.setZoomLevel(level - 1); }, }, { -- cgit v1.2.3-70-g09d2 From 93d31fd9257c25ad218f0395a23473827a6f5ed1 Mon Sep 17 00:00:00 2001 From: Amine Mouafik Date: Thu, 28 Nov 2019 02:35:09 +0700 Subject: Remove unnecessary call to window.ferdi.menu.rebuild --- src/lib/Menu.js | 1 - 1 file changed, 1 deletion(-) (limited to 'src/lib') diff --git a/src/lib/Menu.js b/src/lib/Menu.js index fb4ed2677..941107adb 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -809,7 +809,6 @@ export default class FranzMenu { locked: false, }, }); - window.ferdi.menu.rebuild(); setTimeout(() => { actions.settings.update({ type: 'app', -- cgit v1.2.3-70-g09d2 From eff719b87c60097342d393922048662c32255d88 Mon Sep 17 00:00:00 2001 From: Amine Mouafik Date: Thu, 28 Nov 2019 11:23:10 +0700 Subject: Better handling of (adaptable/universal) dark mode --- src/config.js | 4 ++-- src/lib/Tray.js | 4 ++-- src/stores/AppStore.js | 4 ++-- src/stores/UIStore.js | 41 +++++++++++++++++++++++++++++------------ src/webview/recipe.js | 12 +++++++++--- 5 files changed, 44 insertions(+), 21 deletions(-) (limited to 'src/lib') 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'; import { asarPath } from './helpers/asar-helpers'; const app = process.type === 'renderer' ? electron.remote.app : electron.app; -const systemPreferences = process.type === 'renderer' ? electron.remote.systemPreferences : electron.systemPreferences; +const nativeTheme = process.type === 'renderer' ? electron.remote.nativeTheme : electron.nativeTheme; export const CHECK_INTERVAL = ms('1h'); // How often should we perform checks @@ -53,7 +53,7 @@ export const DEFAULT_APP_SETTINGS = { showMessageBadgeWhenMuted: true, enableSpellchecking: true, spellcheckerLanguage: 'en-us', - darkMode: process.platform === 'darwin' ? systemPreferences.isDarkMode() : false, // We can't use refs from `./environment` at this time + darkMode: process.platform === 'darwin' ? nativeTheme.shouldUseDarkColors : false, // We can't use refs from `./environment` at this time locale: '', fallbackLocale: 'en-US', 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 @@ import { - app, Tray, Menu, systemPreferences, nativeImage, + app, Tray, Menu, systemPreferences, nativeTheme, nativeImage, } from 'electron'; import path from 'path'; @@ -86,7 +86,7 @@ export default class TrayIcon { _getAsset(type, asset) { let { platform } = process; - if (platform === 'darwin' && systemPreferences.isDarkMode()) { + if (platform === 'darwin' && nativeTheme.shouldUseDarkColors) { platform = `${platform}-dark`; } 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'; const debug = require('debug')('Ferdi:AppStore'); const { - app, systemPreferences, screen, powerMonitor, + app, nativeTheme, screen, powerMonitor, } = remote; const mainWindow = remote.getCurrentWindow(); @@ -185,7 +185,7 @@ export default class AppStore extends Store { this._healthCheck(); }, 1000); - this.isSystemDarkModeEnabled = systemPreferences.isDarkMode(); + this.isSystemDarkModeEnabled = nativeTheme.shouldUseDarkColors; onVisibilityChange((isVisible) => { 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 @@ import { - action, - observable, - computed, - reaction, + action, observable, computed, reaction, } from 'mobx'; import { theme } from '@meetfranz/theme'; import { remote } from 'electron'; @@ -10,12 +7,14 @@ import { remote } from 'electron'; import Store from './lib/Store'; import { isMac } from '../environment'; -const { systemPreferences } = remote; +const { nativeTheme, systemPreferences } = remote; export default class UIStore extends Store { @observable showServicesUpdatedInfoBar = false; - @observable isOsDarkThemeActive = isMac ? systemPreferences.isDarkMode() : false; + @observable isOsDarkThemeActive = isMac + ? nativeTheme.shouldUseDarkColors + : false; constructor(...args) { super(...args); @@ -23,13 +22,18 @@ export default class UIStore extends Store { // Register action handlers this.actions.ui.openSettings.listen(this._openSettings.bind(this)); this.actions.ui.closeSettings.listen(this._closeSettings.bind(this)); - this.actions.ui.toggleServiceUpdatedInfoBar.listen(this._toggleServiceUpdatedInfoBar.bind(this)); + this.actions.ui.toggleServiceUpdatedInfoBar.listen( + this._toggleServiceUpdatedInfoBar.bind(this), + ); // Listen for theme change on MacOS if (isMac) { - systemPreferences.subscribeNotification('AppleInterfaceThemeChangedNotification', () => { - this.isOsDarkThemeActive = systemPreferences.isDarkMode(); - }); + systemPreferences.subscribeNotification( + 'AppleInterfaceThemeChangedNotification', + () => { + this.isOsDarkThemeActive = nativeTheme.shouldUseDarkColors; + }, + ); } } @@ -44,11 +48,24 @@ export default class UIStore extends Store { @computed get showMessageBadgesEvenWhenMuted() { const settings = this.stores.settings.all; - return (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || !settings.app.isAppMuted; + return ( + (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) + || !settings.app.isAppMuted + ); } @computed get isDarkThemeActive() { - return this.stores.settings.all.app.darkMode && this.stores.settings.all.app.adaptableDarkMode && this.isOsDarkThemeActive ? true : !!this.stores.settings.all.app.darkMode; + const isMacWithAdaptableInDarkMode = isMac + && this.stores.settings.all.app.darkMode + && this.stores.settings.all.app.adaptableDarkMode + && this.isOsDarkThemeActive; + const isMacWithoutAdaptableInDarkMode = isMac + && this.stores.settings.all.app.darkMode + && !this.stores.settings.all.app.adaptableDarkMode; + const isNotMacInDarkMode = !isMac && this.stores.settings.all.app.darkMode; + return !!(isMacWithAdaptableInDarkMode + || isMacWithoutAdaptableInDarkMode + || isNotMacInDarkMode); } @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 { } // Remove dark reader if (universal) dark mode was just disabled - if (this.universalDarkModeInjected && (!this.settings.service.isDarkModeEnabled || !this.settings.app.universalDarkMode)) { - disableDarkMode(); - this.universalDarkModeInjected = false; + if (this.universalDarkModeInjected) { + if ( + !this.settings.app.darkMode + || !this.settings.service.isDarkModeEnabled + || !this.settings.app.universalDarkMode + ) { + disableDarkMode(); + this.universalDarkModeInjected = false; + } } } -- cgit v1.2.3-70-g09d2 From b3c56428fa8fe15a35b70c5f5ca933ce2c0bba66 Mon Sep 17 00:00:00 2001 From: Amine Mouafik Date: Fri, 29 Nov 2019 19:41:09 +0700 Subject: Prevent Password Lock to trigger while not logged in --- src/lib/Menu.js | 4 ++-- src/stores/SettingsStore.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Menu.js b/src/lib/Menu.js index 941107adb..303845e55 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -800,7 +800,7 @@ export default class FranzMenu { }, { label: intl.formatMessage(menuItems.lockFerdi), accelerator: 'CmdOrCtrl+Shift+L', - enabled: this.stores.settings.app.lockingFeatureEnabled, + enabled: this.stores.user.isLoggedIn && this.stores.settings.app.lockingFeatureEnabled, click() { // Disable lock first - otherwise the application might not update correctly actions.settings.update({ @@ -964,7 +964,7 @@ export default class FranzMenu { this.currentTemplate = tpl; const menu = Menu.buildFromTemplate(tpl); const lockedMenu = Menu.buildFromTemplate([]); - Menu.setApplicationMenu(this.stores.settings.app.locked ? lockedMenu : menu); + Menu.setApplicationMenu(this.stores.user.isLoggedIn && this.stores.settings.app.locked ? lockedMenu : menu); } serviceTpl() { diff --git a/src/stores/SettingsStore.js b/src/stores/SettingsStore.js index df0fc77e9..051e86be2 100644 --- a/src/stores/SettingsStore.js +++ b/src/stores/SettingsStore.js @@ -68,7 +68,6 @@ export default class SettingsStore extends Store { () => this.all.app.locked, () => { const { router } = window.ferdi.stores; - if (this.all.app.locked && this.all.app.lockingFeatureEnabled) { // App just got locked, redirect to unlock screen router.push('/auth/locked'); @@ -82,7 +81,8 @@ export default class SettingsStore extends Store { // Make sure to lock app on launch if locking feature is enabled setTimeout(() => { - if (this.all.app.lockingFeatureEnabled) { + const isLoggedIn = Boolean(localStorage.getItem('authToken')); + if (isLoggedIn && this.all.app.lockingFeatureEnabled) { // Disable lock first - otherwise the lock might not get activated corrently this.actions.settings.update({ type: 'app', -- cgit v1.2.3-70-g09d2