@@ -61,12 +61,18 @@ async function createNewProject(targetWindow) {
6161 return ;
6262 }
6363
64- let projectWindow = await _createOrReplace ( targetWindow ) ;
64+ sendToWindow ( targetWindow , 'start-new-project' , saveResponse . filePath ) ;
65+ // window will reply with new-project -> initializeNewProject() including isDirty flag
66+ }
67+ 68+ async function initializeNewProject ( targetWindow , projectFile , isDirty ) {
69+ // finish creating new project with project dirty flag
70+ let projectWindow = await _createOrReplace ( targetWindow , isDirty ) ;
6571 if ( ! projectWindow ) {
6672 return ;
6773 }
6874
69- let projectFileName = getProjectFileName ( saveResponse . filePath ) ;
75+ let projectFileName = getProjectFileName ( projectFile ) ;
7076 if ( path . extname ( projectFileName ) !== `.${ projectFileExtension } ` ) {
7177 projectFileName = `${ projectFileName } .${ projectFileExtension } ` ;
7278 }
@@ -92,24 +98,18 @@ async function openProject(targetWindow) {
9298 }
9399
94100 const projectFileName = openResponse . filePaths [ 0 ] ;
95- await openProjectFile ( targetWindow , projectFileName )
96- . catch ( err => {
97- dialog . showErrorBox (
98- i18n . t ( 'dialog-openProjectFileErrorTitle' ) ,
99- i18n . t ( 'dialog-openProjectFileErrorMessage' , { projectFileName : projectFileName , err : err } ) ,
100- ) ;
101- getLogger ( ) . error ( 'Failed to open project file %s: %s' , projectFileName , err ) ;
102- } ) ;
101+ sendToWindow ( targetWindow , 'start-open-project' , projectFileName ) ;
102+ // window will reply with open-project -> openProjectFile() including isDirty flag
103103}
104104
105- async function openProjectFile ( targetWindow , projectFile ) {
105+ async function openProjectFile ( targetWindow , projectFile , isDirty ) {
106106 return new Promise ( ( resolve , reject ) => {
107107 const existingProjectWindow = _getOpenWindowForProject ( projectFile ) ;
108108 if ( existingProjectWindow ) {
109109 showExistingProjectWindow ( existingProjectWindow ) ;
110110 resolve ( ) ;
111111 } else {
112- _createOrReplace ( targetWindow )
112+ _createOrReplace ( targetWindow , isDirty )
113113 . then ( projectWindow => {
114114 if ( ! projectWindow ) {
115115 return resolve ( ) ;
@@ -122,7 +122,14 @@ async function openProjectFile(targetWindow, projectFile) {
122122 } )
123123 . catch ( err => reject ( err ) ) ;
124124 }
125- } ) ;
125+ } )
126+ . catch ( err => {
127+ dialog . showErrorBox (
128+ i18n . t ( 'dialog-openProjectFileErrorTitle' ) ,
129+ i18n . t ( 'dialog-openProjectFileErrorMessage' , { projectFileName : projectFile , err : err } ) ,
130+ ) ;
131+ getLogger ( ) . error ( 'Failed to open project file %s: %s' , projectFile , err ) ;
132+ } ) ;
126133}
127134
128135// request the existing project file, prompting the user if needed.
@@ -441,9 +448,9 @@ async function _saveExternalFileContents(projectDirectory, externalFileContents)
441448 return saveResult ;
442449}
443450
444- async function _createOrReplace ( targetWindow ) {
451+ async function _createOrReplace ( targetWindow , isDirty ) {
445452 let projectWindow = targetWindow ;
446- if ( openProjects . has ( targetWindow ) ) {
453+ if ( openProjects . has ( targetWindow ) || isDirty ) {
447454 const buttonResponse = await dialog . showMessageBox ( targetWindow , {
448455 type : 'question' ,
449456 message : i18n . t ( 'dialog-openProjectWindowPrompt' ) ,
@@ -867,6 +874,7 @@ module.exports = {
867874 getWindowForProject,
868875 exportArchiveFile,
869876 isWktProjectFile,
877+ initializeNewProject,
870878 openProject,
871879 openProjectFile,
872880 _openProjectFile,
0 commit comments