6
6
import { localize } from 'vs/nls' ;
7
7
import { mark } from 'vs/base/common/performance' ;
8
8
import { Emitter , Event } from 'vs/base/common/event' ;
9
- import { Dimension , EventHelper , EventType , ModifierKeyEmitter , addDisposableListener , cloneGlobalStylesheets , copyAttributes , createLinkElement , createMetaElement , getActiveWindow , getClientArea , getWindowId , isGlobalStylesheet , position , registerWindow , sharedMutationObserver , size , trackAttributes } from 'vs/base/browser/dom' ;
9
+ import { Dimension , EventHelper , EventType , ModifierKeyEmitter , addDisposableListener , cloneGlobalStylesheets , copyAttributes , createLinkElement , createMetaElement , getActiveWindow , getClientArea , getWindowId , isGlobalStylesheet , position , registerWindow , sharedMutationObserver , trackAttributes } from 'vs/base/browser/dom' ;
10
10
import { CodeWindow , ensureCodeWindow , mainWindow } from 'vs/base/browser/window' ;
11
11
import { Disposable , DisposableStore , IDisposable , toDisposable } from 'vs/base/common/lifecycle' ;
12
12
import { InstantiationType , registerSingleton } from 'vs/platform/instantiation/common/extensions' ;
@@ -46,6 +46,7 @@ export interface IAuxiliaryWindowService {
46
46
47
47
export interface IAuxiliaryWindow extends IDisposable {
48
48
49
+ readonly onWillLayout : Event < Dimension > ;
49
50
readonly onDidLayout : Event < Dimension > ;
50
51
51
52
readonly onBeforeUnload : Event < void > ;
@@ -61,6 +62,9 @@ export interface IAuxiliaryWindow extends IDisposable {
61
62
62
63
export class AuxiliaryWindow extends BaseWindow implements IAuxiliaryWindow {
63
64
65
+ private readonly _onWillLayout = this . _register ( new Emitter < Dimension > ( ) ) ;
66
+ readonly onWillLayout = this . _onWillLayout . event ;
67
+
64
68
private readonly _onDidLayout = this . _register ( new Emitter < Dimension > ( ) ) ;
65
69
readonly onDidLayout = this . _onDidLayout . event ;
66
70
@@ -136,10 +140,16 @@ export class AuxiliaryWindow extends BaseWindow implements IAuxiliaryWindow {
136
140
}
137
141
138
142
layout ( ) : void {
139
- const dimension = getClientArea ( this . window . document . body , this . container ) ;
140
- position ( this . container , 0 , 0 , 0 , 0 , 'relative' ) ;
141
- size ( this . container , dimension . width , dimension . height ) ;
142
143
144
+ // Split layout up into two events so that downstream components
145
+ // have a chance to participate in the beginning or end of the
146
+ // layout phase.
147
+ // This helps to build the auxiliary window in another component
148
+ // in the `onWillLayout` phase and then let other compoments
149
+ // react when the overall layout has finished in `onDidLayout`.
150
+
151
+ const dimension = getClientArea ( this . window . document . body , this . container ) ;
152
+ this . _onWillLayout . fire ( dimension ) ;
143
153
this . _onDidLayout . fire ( dimension ) ;
144
154
}
145
155
@@ -418,6 +428,10 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili
418
428
// Create workbench container and apply classes
419
429
const container = document . createElement ( 'div' ) ;
420
430
container . setAttribute ( 'role' , 'application' ) ;
431
+ position ( container , 0 , 0 , 0 , 0 , 'relative' ) ;
432
+ container . style . display = 'flex' ;
433
+ container . style . height = '100%' ;
434
+ container . style . flexDirection = 'column' ;
421
435
auxiliaryWindow . document . body . append ( container ) ;
422
436
423
437
// Track attributes
0 commit comments