@@ -13,7 +13,7 @@ import {
13
13
import { tail , sequenceEquals , remove } from '../array' ;
14
14
import { DockviewPanel , IDockviewPanel } from './dockviewPanel' ;
15
15
import { CompositeDisposable , Disposable , IDisposable } from '../lifecycle' ;
16
- import { Event , Emitter } from '../events' ;
16
+ import { Event , Emitter , addDisposableWindowListener } from '../events' ;
17
17
import { Watermark } from './components/watermark/watermark' ;
18
18
import { IWatermarkRenderer , GroupviewPanelState } from './types' ;
19
19
import { sequentialNumberGenerator } from '../math' ;
@@ -561,12 +561,15 @@ export class DockviewComponent
561
561
from : DockviewGroupPanel ;
562
562
to : DockviewGroupPanel ;
563
563
} ) {
564
+ const activePanel = options . from . activePanel ;
564
565
const panels = [ ...options . from . panels ] . map ( ( panel ) =>
565
566
options . from . model . removePanel ( panel )
566
567
) ;
567
568
568
569
panels . forEach ( ( panel ) => {
569
- options . to . model . openPanel ( panel ) ;
570
+ options . to . model . openPanel ( panel , {
571
+ skipSetPanelActive : activePanel !== panel ,
572
+ } ) ;
570
573
} ) ;
571
574
}
572
575
@@ -624,10 +627,18 @@ export class DockviewComponent
624
627
return ;
625
628
}
626
629
630
+ const gready = document . createElement ( 'div' ) ;
631
+ gready . className = 'dv-overlay-render-container' ;
632
+
633
+ const overlayRenderContainer = new OverlayRenderContainer (
634
+ gready
635
+ ) ;
636
+
627
637
const referenceGroup =
628
638
item instanceof DockviewPanel ? item . group : item ;
629
639
630
640
const group = this . createGroup ( { id : groupId } ) ;
641
+ group . model . renderContainer = overlayRenderContainer ;
631
642
632
643
if ( item instanceof DockviewPanel ) {
633
644
const panel = referenceGroup . model . removePanel ( item ) ;
@@ -637,9 +648,13 @@ export class DockviewComponent
637
648
from : referenceGroup ,
638
649
to : group ,
639
650
} ) ;
640
- referenceGroup . api . setHidden ( false ) ;
651
+ referenceGroup . api . setHidden ( true ) ;
641
652
}
642
653
654
+ popoutContainer . classList . add ( 'dv-dockview' ) ;
655
+ popoutContainer . style . overflow = 'hidden' ;
656
+ popoutContainer . appendChild ( gready ) ;
657
+
643
658
popoutContainer . appendChild ( group . element ) ;
644
659
645
660
group . model . location = {
@@ -655,6 +670,19 @@ export class DockviewComponent
655
670
} ;
656
671
657
672
popoutWindowDisposable . addDisposables (
673
+ /**
674
+ * ResizeObserver seems slow here, I do not know why but we don't need it
675
+ * since we can reply on the window resize event as we will occupy the full
676
+ * window dimensions
677
+ */
678
+ addDisposableWindowListener (
679
+ _window . window ! ,
680
+ 'resize' ,
681
+ ( ) => {
682
+ group . layout ( window . innerWidth , window . innerHeight ) ;
683
+ }
684
+ ) ,
685
+ overlayRenderContainer ,
658
686
Disposable . from ( ( ) => {
659
687
if ( this . getPanel ( referenceGroup . id ) ) {
660
688
moveGroupWithoutDestroying ( {
@@ -666,12 +694,16 @@ export class DockviewComponent
666
694
referenceGroup . api . setHidden ( false ) ;
667
695
}
668
696
669
- this . doRemoveGroup ( group ) ;
697
+ this . doRemoveGroup ( group , {
698
+ skipPopoutAssociated : true ,
699
+ } ) ;
670
700
} else {
671
701
const removedGroup = this . doRemoveGroup ( group , {
672
702
skipDispose : true ,
673
703
skipActive : true ,
674
704
} ) ;
705
+ removedGroup . model . renderContainer =
706
+ this . overlayRenderContainer ;
675
707
removedGroup . model . location = { type : 'grid' } ;
676
708
this . doAddGroup ( removedGroup , [ 0 ] ) ;
677
709
}
@@ -1484,6 +1516,7 @@ export class DockviewComponent
1484
1516
| {
1485
1517
skipActive ?: boolean ;
1486
1518
skipDispose ?: boolean ;
1519
+ skipPopoutAssociated ?: boolean ;
1487
1520
}
1488
1521
| undefined
1489
1522
) : DockviewGroupPanel {
@@ -1523,7 +1556,9 @@ export class DockviewComponent
1523
1556
1524
1557
if ( selectedGroup ) {
1525
1558
if ( ! options ?. skipDispose ) {
1526
- this . doRemoveGroup ( selectedGroup . referenceGroup ) ;
1559
+ if ( ! options ?. skipPopoutAssociated ) {
1560
+ this . removeGroup ( selectedGroup . referenceGroup ) ;
1561
+ }
1527
1562
1528
1563
selectedGroup . popoutGroup . dispose ( ) ;
1529
1564
this . _groups . delete ( group . id ) ;
0 commit comments