diff --git a/app/src/electron.js b/app/src/electron.js index 7473e43e8..b4d772e99 100644 --- a/app/src/electron.js +++ b/app/src/electron.js @@ -14,9 +14,7 @@ const BrowserWindow = electron.BrowserWindow; const path = require('path'); const url = require('url'); const mainMenuDefinition = require('./mainMenuDefinition'); - -let useNativeMenu = true; -let useNativeMenuSpecified = null; +const { settings } = require('cluster'); // require('@electron/remote/main').initialize(); @@ -104,9 +102,6 @@ ipcMain.on('set-title', async (event, arg) => { ipcMain.on('open-link', async (event, arg) => { electron.shell.openExternal(arg); }); -ipcMain.on('set-use-native-menu', async (event, arg) => { - useNativeMenuSpecified = arg; -}); ipcMain.on('window-action', async (event, arg) => { switch (arg) { case 'minimize': @@ -122,8 +117,11 @@ ipcMain.on('window-action', async (event, arg) => { case 'close': mainWindow.close(); break; - case 'fullscreen': - mainWindow.setFullScreen(!mainWindow.isFullScreen()); + case 'fullscreen-on': + mainWindow.setFullScreen(true); + break; + case 'fullscreen-off': + mainWindow.setFullScreen(false); break; case 'devtools': mainWindow.webContents.toggleDevTools(); @@ -157,21 +155,31 @@ ipcMain.handle('showItemInFolder', async (event, path) => { ipcMain.handle('openExternal', async (event, url) => { electron.shell.openExternal(url); }); -ipcMain.handle('useNativeMenu', async () => { - return useNativeMenu; -}); + +function fillMissingSettings(value) { + const res = { + ...value, + }; + if (value['app.useNativeMenu'] !== true && value['app.useNativeMenu'] !== false) { + res['app.useNativeMenu'] = os.platform() == 'darwin' ? true : false; + } + return res; +} function createWindow() { + let settingsJson = {}; + try { + const datadir = path.join(os.homedir(), 'dbgate-data'); + settingsJson = fillMissingSettings( + JSON.parse(fs.readFileSync(path.join(datadir, 'settings.json'), { encoding: 'utf-8' })) + ); + } catch (err) { + console.log('Error loading settings.json:', err.message); + settingsJson = fillMissingSettings({}); + } + const bounds = initialConfig['winBounds']; - useNativeMenu = os.platform() == 'darwin' ? true : false; - if (initialConfig['useNativeMenu'] === true) { - useNativeMenu = true; - useNativeMenuSpecified = true; - } - if (initialConfig['useNativeMenu'] === false) { - useNativeMenu = false; - useNativeMenuSpecified = false; - } + useNativeMenu = settingsJson['app.useNativeMenu']; mainWindow = new BrowserWindow({ width: 1200, @@ -192,17 +200,14 @@ function createWindow() { if (initialConfig['winIsMaximized']) { mainWindow.maximize(); } - if (initialConfig['winIsFullscreen']) { + if (settingsJson['app.fullscreen']) { mainWindow.setFullScreen(true); } mainMenu = buildMenu(); mainWindow.setMenu(mainMenu); - async function loadMainWindow() { - const settings = await main.configController.getSettings(); - console.log(settings); - + function loadMainWindow() { const startUrl = process.env.ELECTRON_START_URL || url.format({ @@ -217,8 +222,6 @@ function createWindow() { JSON.stringify({ winBounds: mainWindow.getBounds(), winIsMaximized: mainWindow.isMaximized(), - useNativeMenu: useNativeMenuSpecified, - winIsFullscreen: mainWindow.isFullScreen(), }), 'utf-8' ); @@ -230,6 +233,7 @@ function createWindow() { if (os.platform() == 'linux') { mainWindow.setIcon(path.resolve(__dirname, '../icon.png')); } + // mainWindow.webContents.toggleDevTools(); } const apiPackage = path.join( diff --git a/packages/api/src/controllers/config.js b/packages/api/src/controllers/config.js index 69d71cbc5..01d39b135 100644 --- a/packages/api/src/controllers/config.js +++ b/packages/api/src/controllers/config.js @@ -1,4 +1,5 @@ const fs = require('fs-extra'); +const os = require('os'); const path = require('path'); const axios = require('axios'); const { datadir } = require('../utility/directories'); @@ -44,12 +45,24 @@ module.exports = { getSettings_meta: true, async getSettings() { try { - return JSON.parse(await fs.readFile(path.join(datadir(), 'settings.json'), { encoding: 'utf-8' })); + return this.fillMissingSettings( + JSON.parse(await fs.readFile(path.join(datadir(), 'settings.json'), { encoding: 'utf-8' })) + ); } catch (err) { - return {}; + return this.fillMissingSettings({}); } }, + fillMissingSettings(value) { + const res = { + ...value, + }; + if (value['app.useNativeMenu'] !== true && value['app.useNativeMenu'] !== false) { + res['app.useNativeMenu'] = os.platform() == 'darwin' ? true : false; + } + return res; + }, + updateSettings_meta: true, async updateSettings(values) { if (!hasPermission(`settings/change`)) return false; diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index a53fd590d..f8b7c3cef 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -15,9 +15,8 @@ import { subscribeConnectionPingers } from './utility/connectionsPinger'; import { subscribePermissionCompiler } from './utility/hasPermission'; import { apiCall } from './utility/api'; - import { getConfig, getUsedApps } from './utility/metadataLoaders'; + import { getConfig, getSettings, getUsedApps } from './utility/metadataLoaders'; import AppTitleProvider from './utility/AppTitleProvider.svelte'; - import { initTitleBarVisibility } from './utility/common'; let loadedApi = false; @@ -27,13 +26,11 @@ // return; // } - await initTitleBarVisibility(); - try { // console.log('************** LOADING API'); - const settings = await apiCall('config/get-settings'); const connections = await apiCall('connections/list'); + const settings = await getSettings(); const config = await getConfig(); const apps = await getUsedApps(); loadedApi = settings && connections && config && apps; diff --git a/packages/web/src/Screen.svelte b/packages/web/src/Screen.svelte index cd1b35b16..931da812b 100644 --- a/packages/web/src/Screen.svelte +++ b/packages/web/src/Screen.svelte @@ -9,6 +9,7 @@ openedSnackbars, selectedWidget, visibleCommandPalette, + visibleTitleBar, visibleToolbar, } from './stores'; import TabsPanel from './widgets/TabsPanel.svelte'; @@ -23,8 +24,6 @@ import DragAndDropFileTarget from './DragAndDropFileTarget.svelte'; import dragDropFileTarget from './utility/dragDropFileTarget'; import TitleBar from './widgets/TitleBar.svelte'; - import { onMount } from 'svelte'; - import { getTitleBarVisibility } from './utility/common'; $: currentThemeType = $currentThemeDefinition?.themeType == 'dark' ? 'theme-type-dark' : 'theme-type-light'; @@ -42,7 +41,7 @@ use:dragDropFileTarget on:contextmenu={e => e.preventDefault()} > - {#if getTitleBarVisibility()} + {#if $visibleTitleBar}
diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts index 0c06dc3f0..20ee40822 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -27,6 +27,7 @@ import { showSnackbarSuccess } from '../utility/snackbar'; import { apiCall } from '../utility/api'; import runCommand from './runCommand'; import { openWebLink } from '../utility/exportElectronFile'; +import { getSettings } from '../utility/metadataLoaders'; function themeCommand(theme: ThemeDefinition) { return { @@ -596,7 +597,13 @@ registerCommand({ name: 'Toggle full screen', keyText: 'F11', testEnabled: () => getElectron() != null, - onClick: () => getElectron().send('window-action', 'fullscreen'), + onClick: async () => { + const settings = await getSettings(); + const value = !settings['app.fullscreen']; + apiCall('config/update-settings', { 'app.fullscreen': value }); + if (value) getElectron().send('window-action', 'fullscreen-on'); + else getElectron().send('window-action', 'fullscreen-off'); + }, }); registerCommand({ diff --git a/packages/web/src/forms/SettingsCheckboxField.svelte b/packages/web/src/forms/SettingsCheckboxField.svelte deleted file mode 100644 index 68e3d3bd2..000000000 --- a/packages/web/src/forms/SettingsCheckboxField.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -