@@ -1841,6 +1841,7 @@ export class WindowManager extends GObject.Object {
18411841 const horizontal = parentNodeTarget . isHSplit ( ) || parentNodeTarget . isTabbed ( ) ;
18421842 const isMonParent = parentNodeTarget . nodeType === NODE_TYPES . MONITOR ;
18431843 const isConParent = parentNodeTarget . nodeType === NODE_TYPES . CON ;
1844+ const centerLayout = this . ext . settings . get_string ( "dnd-center-layout" ) . toUpperCase ( ) ;
18441845 const stacked = parentNodeTarget . isStacked ( ) ;
18451846 const tabbed = parentNodeTarget . isTabbed ( ) ;
18461847 const stackedOrTabbed = stacked || tabbed ;
@@ -1938,28 +1939,35 @@ export class WindowManager extends GObject.Object {
19381939 const isCenter = Utils . rectContainsPoint ( centerRegion , currPointer ) ;
19391940
19401941 if ( isCenter ) {
1941- if ( stackedOrTabbed ) {
1942- containerNode = parentNodeTarget ;
1943- referenceNode = null ;
1942+ if ( centerLayout == "SWAP" ) {
1943+ referenceNode = nodeWinAtPointer ;
19441944 previewParams = {
1945- className : stacked ? "window-tilepreview-stacked" : "window-tilepreview-tabbed" ,
19461945 targetRect : targetRect ,
19471946 } ;
19481947 } else {
1949- if ( isMonParent ) {
1950- childNode . createCon = true ;
1948+ if ( stackedOrTabbed ) {
19511949 containerNode = parentNodeTarget ;
1952- referenceNode = nodeWinAtPointer ;
1950+ referenceNode = null ;
19531951 previewParams = {
1952+ className : stacked ? "window-tilepreview-stacked" : "window-tilepreview-tabbed" ,
19541953 targetRect : targetRect ,
19551954 } ;
19561955 } else {
1957- containerNode = parentNodeTarget ;
1958- referenceNode = null ;
1959- const parentTargetRect = this . tree . processGap ( parentNodeTarget ) ;
1960- previewParams = {
1961- targetRect : parentTargetRect ,
1962- } ;
1956+ if ( isMonParent ) {
1957+ childNode . createCon = true ;
1958+ containerNode = parentNodeTarget ;
1959+ referenceNode = nodeWinAtPointer ;
1960+ previewParams = {
1961+ targetRect : targetRect ,
1962+ } ;
1963+ } else {
1964+ containerNode = parentNodeTarget ;
1965+ referenceNode = null ;
1966+ const parentTargetRect = this . tree . processGap ( parentNodeTarget ) ;
1967+ previewParams = {
1968+ targetRect : parentTargetRect ,
1969+ } ;
1970+ }
19631971 }
19641972 }
19651973 } else if ( isLeft ) {
@@ -2138,14 +2146,16 @@ export class WindowManager extends GObject.Object {
21382146 } else if ( isTop || isBottom ) {
21392147 childNode . layout = LAYOUT_TYPES . VSPLIT ;
21402148 } else if ( isCenter ) {
2141- const centerLayout = this . ext . settings . get_string ( "dnd-center-layout" ) . toUpperCase ( ) ;
21422149 childNode . layout = LAYOUT_TYPES [ centerLayout ] ;
21432150 }
21442151 } else if ( childNode . detachWindow ) {
21452152 const orientation =
21462153 isLeft || isRight ? ORIENTATION_TYPES . HORIZONTAL : ORIENTATION_TYPES . VERTICAL ;
21472154 this . tree . split ( childNode , orientation ) ;
21482155 containerNode . insertBefore ( childNode . parentNode , referenceNode ) ;
2156+ } else if ( isCenter && centerLayout == "SWAP" ) {
2157+ this . tree . swapPairs ( referenceNode , focusNodeWindow )
2158+ this . renderTree ( "drag-swap" ) ;
21492159 } else {
21502160 // Child Node is a WINDOW
21512161 containerNode . insertBefore ( childNode , referenceNode ) ;
@@ -2155,7 +2165,6 @@ export class WindowManager extends GObject.Object {
21552165 if ( ! stackedOrTabbed ) containerNode . layout = LAYOUT_TYPES . VSPLIT ;
21562166 } else if ( isCenter ) {
21572167 if ( containerNode . isHSplit ( ) || containerNode . isVSplit ( ) ) {
2158- const centerLayout = this . ext . settings . get_string ( "dnd-center-layout" ) . toUpperCase ( ) ;
21592168 containerNode . layout = LAYOUT_TYPES [ centerLayout ] ;
21602169 }
21612170 }
0 commit comments