Skip to content

Commit 4128dcc

Browse files
alesya-hjmmaranan
authored andcommitted
Option: DND to center swaps windows
1 parent 70f6e88 commit 4128dcc

File tree

3 files changed

+33
-15
lines changed

3 files changed

+33
-15
lines changed

lib/extension/window.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

lib/prefs/settings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ export class SettingsPage extends PreferencesPage {
101101
type: "s",
102102
bind: "dnd-center-layout",
103103
items: [
104+
{ id: "swap", name: _("Swap") },
104105
{ id: "tabbed", name: _("Tabbed") },
105106
{ id: "stacked", name: _("Stacked") },
106107
],

stylesheet.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,14 @@
123123
background-color: rgba(247, 162, 43, 0.3);
124124
}
125125

126+
.window-tilepreview-swap {
127+
border-width: 1px;
128+
border-color: rgba(162, 247, 43, 0.4);
129+
border-style: solid;
130+
border-radius: 14px;
131+
background-color: rgba(162, 247, 43, 0.4);
132+
}
133+
126134
.window-tilepreview-tabbed {
127135
border-width: 1px;
128136
border-color: rgba(18, 199, 224, 0.4);

0 commit comments

Comments
 (0)