From 560e2a7a41909fd1d05cdc1f780ae0345a957bac Mon Sep 17 00:00:00 2001 From: RaymonDev Date: Sat, 2 May 2026 00:08:05 +0200 Subject: [PATCH 1/3] Add GNOME Shell 50.1 compatibility metadata Adds Shell 50.1 to extension metadata and updates README support statement so downstream packaging/review reflects current compatibility target. Context for maintainers: Extension Manager currently flags Forge unsupported on 50.1 because the published EGO shell-version map stops at 49. This patch aligns metadata with current compatibility expectations and should be included in the next reviewed upload. --- README.md | 4 ++-- metadata.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9ac755f..9375d6d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Forge is a GNOME Shell extension that provides tiling/window management **_AND_* ## Features -- Works on GNOME 3.36+ (feature-freeze) and 40+. X11 and Wayland +- Works on GNOME 45 through 50.1. X11 and Wayland - Tree-based tiling with vertical and horizontal split containers similar to i3-wm and sway-wm - Vim-like keybindings for navigation/swapping windows/moving windows in the containers - Drag and drop tiling @@ -140,4 +140,4 @@ Thank you to: - Forge extension contributors - Michael Stapelberg/contributors for i3 - System76/contributors for pop-shell -- ReworkCSS/contributors for css-parse/css-stringify \ No newline at end of file +- ReworkCSS/contributors for css-parse/css-stringify diff --git a/metadata.json b/metadata.json index b6f467b..38c8c3e 100644 --- a/metadata.json +++ b/metadata.json @@ -4,7 +4,7 @@ "gettext-domain": "forge", "uuid": "forge@jmmaranan.com", "settings-schema": "org.gnome.shell.extensions.forge", - "shell-version": ["45", "46", "47", "48", "49", "50"], + "shell-version": ["45", "46", "47", "48", "49", "50", "50.1"], "session-modes": ["user", "unlock-dialog"], "url": "https://github.com/forge-ext/forge" } From 864989b38d2834775d616fea0aa080725aa6fd33 Mon Sep 17 00:00:00 2001 From: RaymonDev Date: Sat, 2 May 2026 10:03:22 +0200 Subject: [PATCH 2/3] Fix Prettier formatting in tree.js Formats lib/extension/tree.js to satisfy the repository prettier check used by CI. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- lib/extension/tree.js | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/lib/extension/tree.js b/lib/extension/tree.js index 7d2c169..ea957d2 100644 --- a/lib/extension/tree.js +++ b/lib/extension/tree.js @@ -1295,8 +1295,7 @@ export class Tree extends Node { let metaWin = w.nodeValue; try { this.extWm.move(metaWin, w.renderRect); - } catch (e) { - } + } catch (e) {} } else { Logger.debug(`ignoring apply for ${w.renderRect.width}x${w.renderRect.height}`); } @@ -1407,17 +1406,19 @@ export class Tree extends Node { } // Skip windows whose actors were destroyed mid-render - tiledChildren.filter((c) => c.isNodeValid()).forEach((child, index) => { - // A monitor can contain a window or container child - if (node.layout === LAYOUT_TYPES.HSPLIT || node.layout === LAYOUT_TYPES.VSPLIT) { - this.processSplit(node, child, params, index); - } else if (node.layout === LAYOUT_TYPES.STACKED) { - this.processStacked(node, child, params, index); - } else if (node.layout === LAYOUT_TYPES.TABBED) { - this.processTabbed(node, child, params, index); - } - this.processNode(child); - }); + tiledChildren + .filter((c) => c.isNodeValid()) + .forEach((child, index) => { + // A monitor can contain a window or container child + if (node.layout === LAYOUT_TYPES.HSPLIT || node.layout === LAYOUT_TYPES.VSPLIT) { + this.processSplit(node, child, params, index); + } else if (node.layout === LAYOUT_TYPES.STACKED) { + this.processStacked(node, child, params, index); + } else if (node.layout === LAYOUT_TYPES.TABBED) { + this.processTabbed(node, child, params, index); + } + this.processNode(child); + }); } if (node.isWindow()) { @@ -1558,8 +1559,7 @@ export class Tree extends Node { if (child.actor?.border) { borderWidth = child.actor.border.get_theme_node().get_border_width(St.Side.TOP); } - } catch (e) { - } + } catch (e) {} // Make adjustments to the gaps let adjust = 4 * Utils.dpi(); @@ -1584,8 +1584,7 @@ export class Tree extends Node { if (child.tab && !decoration.contains(child.tab)) { try { decoration.add_child(child.tab); - } catch (e) { - } + } catch (e) {} } } From 40ec3a893a815102ad73b1e939730873fb111bca Mon Sep 17 00:00:00 2001 From: RaymonDev Date: Sat, 2 May 2026 10:19:43 +0200 Subject: [PATCH 3/3] Make metadata generation portable across awk variants Fixes Makefile metadata generation to avoid non-portable awk -i usage and keep packaging working across environments. --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index f9ecee2..739ec5c 100644 --- a/Makefile +++ b/Makefile @@ -21,8 +21,8 @@ patchcss: metadata: echo "export const developers = Object.entries([" > lib/prefs/metadata.js - git shortlog -sne || echo "" >> lib/prefs/metadata.js - awk -i inplace '!/dependabot|noreply/' lib/prefs/metadata.js + git shortlog -sne >> lib/prefs/metadata.js || echo "" >> lib/prefs/metadata.js + awk '!/dependabot|noreply/' lib/prefs/metadata.js > lib/prefs/metadata.js.tmp && mv lib/prefs/metadata.js.tmp lib/prefs/metadata.js sed -i 's/^[[:space:]]*[0-9]*[[:space:]]*\(.*\) <\(.*\)>/ {name:"\1", email:"\2"},/g' lib/prefs/metadata.js echo "].reduce((acc, x) => ({ ...acc, [x.email]: acc[x.email] ?? x.name }), {})).map(([email, name]) => name + ' <' + email + '>')" >> lib/prefs/metadata.js