@@ -28,6 +28,8 @@ var _exit_requested := false
2828var _dirty_project_to_close : Project = null
2929var _player_enabled := false
3030
31+ signal file_dialog_finished
32+
3133# -------------------------------------------------------------------------------------------------
3234func _ready () -> void :
3335 # Init stuff
@@ -407,7 +409,9 @@ func _on_save_project_as() -> void:
407409 _file_dialog .current_file = active_project .filepath .get_file ()
408410 _file_dialog .file_selected .connect (_on_file_selected_to_save_project )
409411 _file_dialog .close_requested .connect (_on_file_dialog_closed )
412+ _file_dialog .canceled .connect (_on_file_dialog_canceled )
410413 _file_dialog .popup_centered ()
414+ await file_dialog_finished
411415
412416# -------------------------------------------------------------------------------------------------
413417func _on_save_project () -> void :
@@ -418,20 +422,26 @@ func _on_save_project() -> void:
418422 _file_dialog .invalidate ()
419423 _file_dialog .file_selected .connect (_on_file_selected_to_save_project )
420424 _file_dialog .close_requested .connect (_on_file_dialog_closed )
425+ _file_dialog .canceled .connect (_on_file_dialog_canceled )
421426 _file_dialog .popup_centered ()
422427 else :
423428 _save_project (active_project )
429+ # -------------------------------------------------------------------------------------------------
430+ func _on_file_dialog_canceled () -> void :
431+ file_dialog_finished .emit ()
424432
425433# -------------------------------------------------------------------------------------------------
426434func _on_file_dialog_closed () -> void :
427435 _file_dialog .disfile_selected .connect (_on_file_selected_to_save_project )
428436 _file_dialog .disclose_requested .connect (_on_file_dialog_closed )
437+ file_dialog_finished .emit ()
429438
430439# -------------------------------------------------------------------------------------------------
431440func _on_file_selected_to_save_project (filepath : String ) -> void :
432441 var active_project : Project = ProjectManager .get_active_project ()
433442 active_project .filepath = filepath
434- _save_project (active_project )
443+ await (_save_project (active_project ))
444+ file_dialog_finished .emit ()
435445
436446# -------------------------------------------------------------------------------------------------
437447func _on_canvas_background_changed (color : Color ) -> void :
@@ -456,7 +466,12 @@ func _on_tool_changed(tool_type: int) -> void:
456466# -------------------------------------------------------------------------------------------------
457467func _on_save_unsaved_changes () -> void :
458468 if _exit_requested :
459- ProjectManager .save_all_projects ()
469+ for project in ProjectManager .get_open_projects ():
470+ ProjectManager .make_project_active (project )
471+ if project .filepath .is_empty () && project .loaded && project .dirty :
472+ await (_on_save_project_as ())
473+ elif ! project .filepath .is_empty () && project .loaded && project .dirty :
474+ await (_on_save_project ())
460475 _save_state ()
461476 get_tree ().quit ()
462477 else :
0 commit comments