diff --git a/src/config/config.js b/src/config/config.js index 79a477fc..c635e137 100644 --- a/src/config/config.js +++ b/src/config/config.js @@ -31,6 +31,9 @@ const FILE_FILTERS = [ { name: 'All Files', extensions: [ '*' ] }, ] +const TROUBLESHOOTING_URL = 'https://github.com/lacymorrow/crossover/wiki/Troubleshooting' +const COMPATIBILITY_URL = 'https://github.com/lacymorrow/crossover/wiki/Compatibility' + const config = { APP_ASPECT_RATIO, APP_BACKGROUND_OPACITY, @@ -48,6 +51,8 @@ const config = { MAX_SHADOW_WINDOWS, SETTINGS_WINDOW_DEVTOOLS, SHADOW_WINDOW_OFFSET, + TROUBLESHOOTING_URL, + COMPATIBILITY_URL, SUPPORTED_IMAGE_FILE_TYPES, } diff --git a/src/main/ipc.js b/src/main/ipc.js index fea77d00..82016227 100644 --- a/src/main/ipc.js +++ b/src/main/ipc.js @@ -142,9 +142,9 @@ const init = () => { } ) - ipcMain.on( 'set_preference', arg => { + ipcMain.on( 'set_preference', ( _event, arg ) => { - if ( arg.key && arg.value ) { + if ( arg && arg.key && arg.value !== undefined ) { preferences.value( arg.key, arg.value ) diff --git a/src/main/register.js b/src/main/register.js index 451c5e75..c3588577 100644 --- a/src/main/register.js +++ b/src/main/register.js @@ -14,13 +14,17 @@ const appEvents = () => { // CrossOver only renders local files and needs no browser permissions. // Deny all permission requests (geolocation, notifications, camera, etc.) // to prevent unexpected OS prompts, particularly on Windows. (#471) - session.defaultSession.setPermissionRequestHandler( ( _webContents, _permission, callback ) => { + app.whenReady().then( () => { - callback( false ) + session.defaultSession.setPermissionRequestHandler( ( _webContents, _permission, callback ) => { - } ) + callback( false ) + + } ) - session.defaultSession.setPermissionCheckHandler( () => false ) + session.defaultSession.setPermissionCheckHandler( () => false ) + + } ) app.on( 'activate', async () => { diff --git a/src/renderer/styles/dist/index.css.map b/src/renderer/styles/dist/index.css.map index d7046536..ddacba7b 100644 --- a/src/renderer/styles/dist/index.css.map +++ b/src/renderer/styles/dist/index.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../index.scss"],"names":[],"mappings":"AAsCA,MAEC,iDACA,iDACA,sBAEA,uCACA,6BACA,gDAEA,uBACA,sBACA,8BAGA,qBACA,yBACA,0BACA,uBACA,2BACA,qBACA,mBACA,0BACA,4BACA,4BACA,oBACA,sBAGA,mCA7BD,MA8BG,2CACA,uCACA,kDAIH,EACI,sBACA,iBAGJ,UAEC,WACA,YACG,UACA,SACA,yBACA,gBAIJ,KAEI,qCACA,eACA,+KACA,kCACA,2CAIJ,8BAEC,oBAGD,YACI,yBACA,cAKJ,WACI,gBACA,kBACA,gBACA,kBACA,WACA,YACA,YAWI,4EACI,oBAEJ,8DACI,WACA,kBACA,QACA,UACA,WACA,SACA,0BACA,oBACA,WAKZ,YACI,8BACA,kBACA,kBACA,MACA,QACA,SACA,OACA,YACA,aACA,4DACH,gFAGD,UACI,kBACA,QACA,QACA,OACA,WACA,YAIJ,SAEI,WACA,YACH,gCACA,sEACG,eACI,mCAOP,oBACC,+BAED,iBACC,OAzKY,kBA6Kd,QACI,2BACA,eACA,YACA,aACA,+BACA,oBACA,iBACA,aACA,kBACA,WAGJ,cACI,cACA,MACA,QACH,wBAGD,2BACI,aACA,WACA,OAGJ,iBACI,SACA,QACH,wBAGD,eACI,SACA,OACH,wBAID,aACI,MACA,QACH,wBACA,sBACC,WACA,YAGD,sCAEC,YACA,oDACC,iBAED,wDACC,sEAIK,iCACC,OA1OE,oBA2OF,UAKT,WAEI,6BACA,+BACH,iCACG,aACA,kBACH,oCACA,qCAEA,eACC,2BACA,+BACA,qCAGD,oBACC,kDACA,kBACA,WACA,wBACC,aACA,WACA,YACA,0BACC,+BAKD,6BACC,cAID,iCACC,cAID,mCACC,cAEA,0CACC,qBACA,iCAQL,mBAEC,2CAEG,kBACA,YACA,WACH,iBACA,gBACG,aACA,mBACA,uBACH,kBAGD,cACC,WACG,YACA,iBAMA,sBACI,eACA,6BACA,4BAGL,wMAKa,wBACA,YACA,oOACI,iBAMhB,uBACI,cAIJ,mBACI,cAIP,0CACC,aAKA,4DAEC,wBACA,YACA,mEACC,iBAaJ,MACI,cACA,gBACA,kBACA,oBACI,aAMR,mBACI,aACA,YACA,YACA,uCACA,sBAIJ,mBACI,iBACA,kBAGJ,iBACI,YAGJ,mBACI,YACA,WACA,gBACA,4CACI,gBACA,YACA,+BAEJ,sCACI,iBACA,WACA,+BAEJ,4CACI,WACA,mBACA,wCACA,iBAlZO,KAoZX,qBACI,qBAEJ,qCACI,aACA,sBACA,mBACA,sBAEJ,gCACI,cACA,eACA,eACA,gBACA,8CACI,aAKR,uBACI,WACA,iBACA,oBACA,qBACA,aACA,mBACA,eACA,kBACA,yBACI,eAGR,uBACI,eACA,uBACA,YACA,aACA,YACA,0BACA,kBACA,oCACN,oCACM,4DAEI,aAncc,QAqclB,+BACC,mBACA,iBAKT,QACI,aAIJ,YACI,kBACA,QACA,YACA,aACA,sBACA,4DACA,kBACA,oBACA,gFACA,2BACA,oBAEA,mBACI,aAGJ,6BACI,aACA,OACA,sBACA,mBACA,uBACA,kBAEA,oCACI,aAIR,6BACI,eACA,kBACA,cAGJ,8BACI,eACA,iBACA,kBACA,4BAGJ,6BACI,cACA,4BACA,iBAEA,+BACI,iBAGJ,kCACI,gBACA,2BACA,kBACA,gBAIR,4BACI,aACA,mBACA,8BACA,eACA,cAGJ,6BACI,aACA,QACA,mBAGJ,4BACI,UACA,WACA,kBACA,2BACA,+BAEA,mCACI,0EAIR,gCACI,aACA,QACA,mBAGJ,0DAEI,2BACA,eACA,YACA,aACA,gBACA,kBACA,cACA,oBACA,oBACA,6BAEA,sEACI,WAIR,6BACI,yBACA,4BAGJ,6BACI,0EACA,WAIR,gBACI,qBAGJ,QACI,aACA,8BAGJ,QACC,aACA","file":"index.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../index.scss"],"names":[],"mappings":"AAsCA,MAEC,iDACA,iDACA,sBAEA,uCACA,6BACA,gDAEA,uBACA,sBACA,8BAGA,qBACA,yBACA,0BACA,uBACA,2BACA,qBACA,mBACA,0BACA,4BACA,4BACA,oBACA,sBAGA,mCA7BD,MA8BG,2CACA,uCACA,kDAIH,EACI,sBACA,iBAGJ,UAEC,WACA,YACG,UACA,SACA,yBACA,gBAIJ,KAEI,qCACA,eACA,+KACA,kCACA,2CAIJ,8BAEC,oBAGD,YACI,yBACA,cAKJ,WACI,gBACA,kBACA,gBACA,kBACA,WACA,YACA,YAWI,4EACI,oBAEJ,8DACI,WACA,kBACA,QACA,UACA,WACA,SACA,0BACA,oBACA,WAKZ,YACI,8BACA,kBACA,kBACA,MACA,QACA,SACA,OACA,YACA,aACA,4DACH,gFAGD,UACI,kBACA,QACA,QACA,OACA,WACA,YAIJ,SAEI,WACA,YACH,gCACA,sEACG,eACI,mCAOP,oBACC,+BAED,iBACC,OAzKY,kBA6Kd,QACI,2BACA,eACA,YACA,aACA,+BACA,oBACA,iBACA,aACA,kBACA,WAGJ,cACI,cACA,MACA,QACH,wBAGD,2BACI,aACA,WACA,OAGJ,iBACI,SACA,QACH,wBAGD,eACI,SACA,OACH,wBAID,aACI,MACA,QACH,wBACA,sBACC,WACA,YAGD,sCAEC,YACA,oDACC,iBAED,wDACC,sEAIK,iCACC,OA1OE,oBA2OF,UAKT,WAEI,6BACA,+BACH,iCACG,aACA,kBACH,oCACA,qCAEA,eACC,2BACA,+BACA,qCAGD,oBACC,kDACA,kBACA,WACA,wBACC,aACA,WACA,YACA,0BACC,+BAKD,6BACC,cAID,iCACC,cAID,mCACC,cAEA,0CACC,qBACA,iCAQL,mBAEC,2CAEG,kBACA,YACA,WACH,iBACA,gBACG,aACA,mBACA,uBACH,kBAGD,cACC,WACG,YACA,iBAMA,sBACI,eACA,6BACA,4BAGL,wMAKa,wBACA,YACA,oOACI,iBAMhB,uBACI,cAIJ,mBACI,cAIP,0CACC,aAKA,4DAEC,wBACA,YACA,mEACC,iBAaJ,MACI,cACA,gBACA,kBACA,oBACI,aAMR,mBACI,aACA,YACA,YACA,uCACA,sBAIJ,mBACI,iBACA,kBAGJ,iBACI,YAGJ,mBACI,YACA,WACA,gBACA,4CACI,gBACA,YACA,+BAEJ,sCACI,iBACA,WACA,+BAEJ,4CACI,WACA,mBACA,wCACA,iBAlZO,KAoZX,qBACI,qBAEJ,qCACI,aACA,sBACA,mBACA,sBAEJ,gCACI,cACA,eACA,eACA,gBACA,8CACI,aAKR,uBACI,WACA,iBACA,oBACA,qBACA,aACA,mBACA,eACA,kBACA,yBACI,eAGR,uBACI,eACA,uBACA,YACA,aACA,YACA,0BACA,kBACA,oCACN,oCACM,4DAEI,aAncc,QAqclB,+BACC,mBACA,iBAKT,QACI,aAIJ,YACI,kBACA,QACA,YACA,aACA,sBACA,4DACA,kBACA,oBACA,gFACA,2BACA,oBAEA,mBACI,aAGJ,6BACI,aACA,OACA,sBACA,mBACA,uBACA,kBAEA,oCACI,aAIR,6BACI,eACA,kBACA,cAGJ,8BACI,eACA,iBACA,kBACA,4BAGJ,6BACI,cACA,4BACA,iBAEA,+BACI,iBAGJ,kCACI,gBACA,2BACA,kBACA,gBAIR,4BACI,aACA,mBACA,8BACA,eACA,cAGJ,6BACI,aACA,QACA,mBAGJ,4BACI,UACA,WACA,kBACA,2BACA,+BAEA,mCACI,0EAIR,gCACI,aACA,QACA,mBAGJ,0DAEI,2BACA,eACA,YACA,aACA,gBACA,kBACA,cACA,oBACA,oBACA,6BAEA,sEACI,WAIR,6BACI,yBACA,4BAGJ,6BACI,0EACA,WAIR,gBACI,qBAGJ,QACI,aACA,8BAGJ,QACC,aACA,oBAGD,eACI,kBACA,WACA,SACA,UACA,WACA,4DACA,gFACA,kBACA,gBACA,2BACA,oBAEA,sBACI,aAGJ,mCACI,aACA,sBACA,QAGJ,mCACI,cACA,4BACA,iBACA,kBAGJ,sCACI,aACA,QACA,uBACA,mBAGJ,kCACI,2BACA,eACA,YACA,aACA,gBACA,kBACA,cACA,oBACA,oBACA,qBACA,6BACA,yBACA,4BACA,qBAEA,wCACI,WAGJ,2CACI,0EACA","file":"index.css"} \ No newline at end of file diff --git a/test/ipc.spec.js b/test/ipc.spec.js index b5200145..6bfc3258 100644 --- a/test/ipc.spec.js +++ b/test/ipc.spec.js @@ -1,41 +1,3 @@ -// Not tested: -// - keybinds -// - drag File -// - drag window -// - native close button -// - Notification -// - Sounds - -// Test: -// - Main -// - 2nd instance -// - will-quit remove shortcuts -// - exit code -// - Menu -// - Dock -// - Always visible -// - Features -// - Functions -// - Create child window -// - Settings -// - IOHooks -// - Accelerators -// - moveX -// - Lock -// - duplicate -// - center -// - reset -// - changeDisplay -// - hide -// - IPC -// - reset_preferences -// - close_window -// - save_custom_image -// - get_crosshairs -// - save_crosshair -// - update_and_restart -// - quit - const { expect, test } = require( '@playwright/test' ) const { startApp, closeApp, wait, focusedMinimizedVisible, getBounds, delays, CHOOSER_WINDOW, SETTINGS_WINDOW } = require( './helpers.js' ) const { productName } = require( '../package.json' ) @@ -131,6 +93,34 @@ test( 'Validate open_settings + focus', async () => { test( 'Validate set_preference + reset_preference', async () => { + // Test set_preference + await electronApp.evaluate( async app => app.ipcMain.emit( 'set_preference', {}, { key: 'crosshair.opacity', value: 50 } ) ) + await wait( delays.short ) + + const opacity = await electronApp.evaluate( async app => { + + const preferences = process.mainModule.require( './src/main/preferences.js' ).init() + + return preferences.value( 'crosshair.opacity' ) + + } ) + expect( opacity ).toBe( 50 ) + + // Test reset_preferences + await electronApp.evaluate( async app => app.ipcMain.emit( 'reset_preferences', {} ) ) + await wait( delays.short ) + + // Verify reset + const newOpacity = await electronApp.evaluate( async app => { + + const preferences = process.mainModule.require( './src/main/preferences.js' ).init() + + return preferences.value( 'crosshair.opacity' ) + + } ) + // Verify default opacity value is restored to 80 + expect( newOpacity ).toBe( 80 ) + } ) test( 'Validate quit', async () => { @@ -139,10 +129,11 @@ test( 'Validate quit', async () => { // quit app await electronApp.evaluate( async app => app.ipcMain.emit( 'quit' ) ) + await wait( delays.medium ) try { - console.log( 'This should throw an error!', await mainPage.title() ) + await mainPage.title() } catch {