diff --git a/package.json b/package.json
index 9e6cbc5f..25863455 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,7 @@
"@babel/generator": "^7.28.3",
"@babel/parser": "^7.28.4",
"@babel/traverse": "^7.28.4",
- "esbuild": "^0.25.10",
+ "esbuild": "^0.27.3",
"esbuild-sass-plugin": "^3.3.1",
"eslint": "^9.39.1",
"eslint-config-prettier": "^10.1.8",
diff --git a/resources/schemas/org.gnome.shell.extensions.tilingshell.gschema.xml b/resources/schemas/org.gnome.shell.extensions.tilingshell.gschema.xml
index 67fe8399..82246eb4 100644
--- a/resources/schemas/org.gnome.shell.extensions.tilingshell.gschema.xml
+++ b/resources/schemas/org.gnome.shell.extensions.tilingshell.gschema.xml
@@ -107,6 +107,11 @@
Enable auto tiling
Automatically tile a new window to the best tile according to the current layout.
+
+ true
+ Always maximize with move up
+ When using the Move Window Up shortcut, always maximize on the current monitor instead of moving to the monitor above.
+
false
Raise tiled windows together
diff --git a/src/components/tilingsystem/tilingManager.ts b/src/components/tilingsystem/tilingManager.ts
index 4bc1a683..6b8df3a4 100644
--- a/src/components/tilingsystem/tilingManager.ts
+++ b/src/components/tilingsystem/tilingManager.ts
@@ -362,7 +362,8 @@ export class TilingManager {
if (
direction === KeyBindingsDirection.UP &&
extWin.assignedTile &&
- extWin.assignedTile?.y === 0
+ extWin.assignedTile?.y === 0 &&
+ (Settings.ALWAYS_MAXIMIZE_WITH_UP || clamp)
) {
maximizeWindow(window);
return true;
@@ -428,7 +429,8 @@ export class TilingManager {
// handle maximize of window
if (
direction === KeyBindingsDirection.UP &&
- window.can_maximize()
+ window.can_maximize() &&
+ (Settings.ALWAYS_MAXIMIZE_WITH_UP || clamp)
) {
maximizeWindow(window);
return true;
diff --git a/src/prefs.ts b/src/prefs.ts
index 16abe499..a310f8c2 100644
--- a/src/prefs.ts
+++ b/src/prefs.ts
@@ -275,6 +275,15 @@ export default class TilingShellExtensionPreferences extends ExtensionPreference
);
behaviourGroup.add(autoTilingRow);
+ const alwaysMaximizeWithUpRow = this._buildSwitchRow(
+ Settings.KEY_ALWAYS_MAXIMIZE_WITH_UP,
+ _('Always maximize with Move Up'),
+ _(
+ 'When enabled, Move Up always maximizes on the current monitor instead of moving to the monitor above',
+ ),
+ );
+ behaviourGroup.add(alwaysMaximizeWithUpRow);
+
const resizeComplementingRow = this._buildSwitchRow(
Settings.KEY_RESIZE_COMPLEMENTING_WINDOWS,
_('Enable auto-resize of the complementing tiled windows'),
diff --git a/src/settings/settings.ts b/src/settings/settings.ts
index 59ff551c..53d7d9da 100644
--- a/src/settings/settings.ts
+++ b/src/settings/settings.ts
@@ -102,6 +102,7 @@ export default class Settings {
static KEY_ENABLE_BLUR_SELECTED_TILEPREVIEW = 'enable-blur-selected-tilepreview';
static KEY_ENABLE_MOVE_KEYBINDINGS = 'enable-move-keybindings';
static KEY_ENABLE_AUTO_TILING = 'enable-autotiling';
+ static KEY_ALWAYS_MAXIMIZE_WITH_UP = 'always-maximize-with-up';
static KEY_RAISE_TOGETHER = 'raise-together';
static KEY_ACTIVE_SCREEN_EDGES = 'active-screen-edges';
static KEY_TOP_EDGE_MAXIMIZE = 'top-edge-maximize';
@@ -341,6 +342,14 @@ export default class Settings {
set_boolean(Settings.KEY_ENABLE_AUTO_TILING, val);
}
+ static get ALWAYS_MAXIMIZE_WITH_UP(): boolean {
+ return get_boolean(Settings.KEY_ALWAYS_MAXIMIZE_WITH_UP);
+ }
+
+ static set ALWAYS_MAXIMIZE_WITH_UP(val: boolean) {
+ set_boolean(Settings.KEY_ALWAYS_MAXIMIZE_WITH_UP, val);
+ }
+
static get RAISE_TOGETHER(): boolean {
return get_boolean(Settings.KEY_RAISE_TOGETHER);
}