@@ -66,13 +66,16 @@ class DockPanel extends Widget {
6666 this . _mode = options . mode || 'multiple-document' ;
6767 this . _renderer = options . renderer || DockPanel . defaultRenderer ;
6868 this . _edges = options . edges || Private . DEFAULT_EDGES ;
69+ if ( options . tabsMovable !== undefined ) {
70+ this . _tabsMovable = options . tabsMovable ;
71+ }
6972
7073 // Toggle the CSS mode attribute.
7174 this . dataset [ 'mode' ] = this . _mode ;
7275
7376 // Create the delegate renderer for the layout.
7477 let renderer : DockPanel . IRenderer = {
75- createTabBar : ( ) => this . _createTabBar ( ) ,
78+ createTabBar : ( ) => this . _createTabBar ( this . _tabsMovable ) ,
7679 createHandle : ( ) => this . _createHandle ( )
7780 } ;
7881
@@ -190,6 +193,21 @@ class DockPanel extends Widget {
190193 MessageLoop . postMessage ( this , Private . LayoutModified ) ;
191194 }
192195
196+ /**
197+ * Whether the tabs are movable.
198+ */
199+ get tabsMovable ( ) : boolean {
200+ return this . _tabsMovable ;
201+ }
202+
203+ /**
204+ * Enable / Disable movable tabs.
205+ */
206+ set tabsMovable ( value : boolean ) {
207+ this . _tabsMovable = value ;
208+ each ( this . tabBars ( ) , ( tabbar ) => tabbar . tabsMovable = value ) ;
209+ }
210+
193211 /**
194212 * Whether the dock panel is empty.
195213 */
@@ -829,7 +847,7 @@ class DockPanel extends Widget {
829847 /**
830848 * Create a new tab bar for use by the panel.
831849 */
832- private _createTabBar ( ) : TabBar < Widget > {
850+ private _createTabBar ( tabsMovable : boolean ) : TabBar < Widget > {
833851 // Create the tab bar.
834852 let tabBar = this . _renderer . createTabBar ( ) ;
835853
@@ -843,7 +861,7 @@ class DockPanel extends Widget {
843861
844862 // Enforce necessary tab bar behavior.
845863 // TODO do we really want to enforce *all* of these?
846- tabBar . tabsMovable = true ;
864+ tabBar . tabsMovable = tabsMovable ;
847865 tabBar . allowDeselect = false ;
848866 tabBar . removeBehavior = 'select-previous-tab' ;
849867 tabBar . insertBehavior = 'select-tab-if-needed' ;
@@ -960,6 +978,7 @@ class DockPanel extends Widget {
960978 private _mode : DockPanel . Mode ;
961979 private _drag : Drag | null = null ;
962980 private _renderer : DockPanel . IRenderer ;
981+ private _tabsMovable : boolean = true ;
963982 private _pressData : Private . IPressData | null = null ;
964983 private _layoutModified = new Signal < this, void > ( this ) ;
965984}
@@ -1003,11 +1022,19 @@ namespace DockPanel {
10031022 */
10041023 mode ?: DockPanel . Mode ;
10051024
1025+
10061026 /**
10071027 * The sizes of the edge drop zones, in pixels.
10081028 * If not given, default values will be used.
10091029 */
10101030 edges ?: IEdges ;
1031+
1032+ /**
1033+ * Allow user tab placement.
1034+ *
1035+ * The deafult is `'true'`.
1036+ */
1037+ tabsMovable ?: boolean ;
10111038 }
10121039
10131040 /**
0 commit comments