Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions keybindings.js
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,23 @@ export function setupActions(settings) {
registerMinimapAction("switch-global-up", (mw, space) => space.switchGlobalUp());
registerMinimapAction("switch-global-down", (mw, space) => space.switchGlobalDown());

registerAction("move-global-right",
(mw, space) => space.moveGlobal(mw, Meta.MotionDirection.RIGHT),
{ settings, mutterFlags: Meta.KeyBindingFlags.PER_WINDOW }
);
registerAction("move-global-left",
(mw, space) => space.moveGlobal(mw, Meta.MotionDirection.LEFT),
{ settings, mutterFlags: Meta.KeyBindingFlags.PER_WINDOW }
);
registerAction("move-global-up",
(mw, space) => space.moveGlobal(mw, Meta.MotionDirection.UP),
{ settings, mutterFlags: Meta.KeyBindingFlags.PER_WINDOW }
);
registerAction("move-global-down",
(mw, space) => space.moveGlobal(mw, Meta.MotionDirection.DO),
{ settings, mutterFlags: Meta.KeyBindingFlags.PER_WINDOW }
);

registerMinimapAction("move-left",
(_mw, space) => space.swap(Meta.MotionDirection.LEFT));
registerMinimapAction("move-right",
Expand Down
4 changes: 4 additions & 0 deletions prefsKeybinding.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ const actions = {
'switch-global-right',
'switch-global-up',
'switch-global-down',
'move-global-left',
'move-global-right',
'move-global-up',
'move-global-down',
'switch-up-or-else-workspace',
'switch-down-or-else-workspace',
'switch-first',
Expand Down
Binary file modified schemas/gschemas.compiled
Binary file not shown.
16 changes: 16 additions & 0 deletions schemas/org.gnome.shell.extensions.paperwm.gschema.xml
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,22 @@
<default><![CDATA[[]]]></default>
<summary>Switch to window or monitor below</summary>
</key>
<key type="as" name="move-global-right">
<default><![CDATA[[]]]></default>
<summary>Move active window to the next spot or monitor to the right</summary>
</key>
<key type="as" name="move-global-left">
<default><![CDATA[[]]]></default>
<summary>Move active window to the next spot or monitor to the left</summary>
</key>
<key type="as" name="move-global-up">
<default><![CDATA[[]]]></default>
<summary>Move active window to the next spot or monitor above</summary>
</key>
<key type="as" name="move-global-down">
<default><![CDATA[[]]]></default>
<summary>Move active window to the next spot or monitor below</summary>
</key>
<key type="as" name="switch-up-or-else-workspace">
<default><![CDATA[[]]]></default>
<summary>Switch to window or workspace above</summary>
Expand Down
89 changes: 88 additions & 1 deletion tiling.js
Original file line number Diff line number Diff line change
Expand Up @@ -1094,6 +1094,33 @@ export class Space extends Array {
ensureViewport(this.selectedWindow, this, { force: true });
}

moveToStart(metaWindow) {
metaWindow = metaWindow || this.selectedWindow;

let [index, row] = this.positionOf(metaWindow);
if (index == 0) return;

let [it] = this.splice(index, 1);
this.unshift(it);
this.layout();
this.emit("swapped", index, 0, row, row);
ensureViewport(this.selectedWindow, this, { force: true });
}

moveToEnd(metaWindow) {
metaWindow = metaWindow || this.selectedWindow;

let [index, row] = this.positionOf(metaWindow);
let targetIndex = this.length-1;
if (index == targetIndex) return;

let [it] = this.splice(index, 1);
this.push(it);
this.layout();
this.emit("swapped", index, 0, row, row);
ensureViewport(this.selectedWindow, this, { force: true });
}

switchLinear(dir, loop) {
let index = this.selectedIndex();
let column = this[index];
Expand Down Expand Up @@ -1262,6 +1289,65 @@ export class Space extends Array {
ensureViewport(metaWindow, space);
}

moveGlobal(metaWindow, direction) {
let space = this;
let index = space.selectedIndex();
if (index === -1) {
return;
}

let column = space[index];
let row = column.indexOf(metaWindow);
if (row === -1) {
let selected = sortWindows(this, column)[column.length - 1];
row = column.indexOf(selected);
}

switch (direction) {
case Meta.MotionDirection.LEFT:
if (index > 0) {
space.swap(direction, metaWindow);
return;
} else {
let new_space = spaces.switchMonitor(Meta.DisplayDirection.LEFT, true);
if (new_space != null) {
new_space.moveToEnd(metaWindow);
}
return;
}

case Meta.MotionDirection.RIGHT:
if (index < space.length-1) {
space.swap(direction);
return;
} else {
let new_space = spaces.switchMonitor(Meta.DisplayDirection.RIGHT, true);
if (new_space != null) {
new_space.moveToStart(metaWindow);
}
return;
}

case Meta.MotionDirection.UP:
if (row > 0) {
space.swap(direction);
return;
} else {
spaces.switchMonitor(Meta.DisplayDirection.UP, true);
return;
}

case Meta.MotionDirection.DOWN:
if (row < column.length-1) {
space.swap(direction);
return;
} else {
spaces.switchMonitor(Meta.DisplayDirection.DOWN, true);
return;
}
}
}

_drift(dx) {
if (dx === 0) {
return;
Expand Down Expand Up @@ -2542,7 +2628,7 @@ export const Spaces = class Spaces extends Map {
let currentSpace = this.monitors.get(monitor);
let i = display.get_monitor_neighbor_index(monitor.index, direction);
if (i === -1)
return;
return null;
let newMonitor = Main.layoutManager.monitors[i];
if (warp) {
Utils.warpPointerToMonitor(newMonitor);
Expand Down Expand Up @@ -2575,6 +2661,7 @@ export const Spaces = class Spaces extends Map {
} else {
space.activate(false, false);
}
return space;
}

moveToMonitor(direction, backDirection) {
Expand Down