@@ -7,9 +7,10 @@ import { createDecorator, IInstantiationService } from 'vs/platform/instantiatio
7
7
import { URI } from 'vs/base/common/uri' ;
8
8
import { INotebookEditorModel } from 'vs/workbench/contrib/notebook/common/notebookCommon' ;
9
9
import { NotebookEditorModel } from 'vs/workbench/contrib/notebook/common/notebookEditorModel' ;
10
- import { IReference , ReferenceCollection } from 'vs/base/common/lifecycle' ;
10
+ import { DisposableStore , IDisposable , IReference , ReferenceCollection } from 'vs/base/common/lifecycle' ;
11
11
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService' ;
12
12
import { ILogService } from 'vs/platform/log/common/log' ;
13
+ import { Event } from 'vs/base/common/event' ;
13
14
14
15
export const INotebookEditorModelResolverService = createDecorator < INotebookEditorModelResolverService > ( 'INotebookModelResolverService' ) ;
15
16
@@ -70,15 +71,27 @@ export class NotebookModelResolverService implements INotebookEditorModelResolve
70
71
async resolve ( resource : URI , viewType ?: string , editorId ?: string | undefined ) : Promise < IReference < INotebookEditorModel > > {
71
72
const reference = this . _data . acquire ( resource . toString ( ) , viewType , editorId ) ;
72
73
const model = await reference . object ;
74
+ NotebookModelResolverService . _autoReferenceDirtyModel ( model , ( ) => this . _data . acquire ( resource . toString ( ) , viewType , editorId ) ) ;
73
75
return {
74
76
object : model ,
75
77
dispose ( ) { reference . dispose ( ) ; }
76
78
} ;
77
79
}
78
- }
79
80
80
- // notebookService.onDidAddDocument
81
+ private static _autoReferenceDirtyModel ( model : INotebookEditorModel , ref : ( ) => IDisposable ) {
81
82
82
- // resolve()
83
+ const references = new DisposableStore ( ) ;
84
+ const listener = model . notebook . onDidChangeDirty ( ( ) => {
85
+ if ( model . notebook . isDirty ) {
86
+ references . add ( ref ( ) ) ;
87
+ } else {
88
+ references . clear ( ) ;
89
+ }
90
+ } ) ;
83
91
84
- // notebookService.onDidRemoveDocument ...
92
+ Event . once ( model . notebook . onWillDispose ) ( ( ) => {
93
+ listener . dispose ( ) ;
94
+ references . dispose ( ) ;
95
+ } ) ;
96
+ }
97
+ }
0 commit comments