diff --git a/locales/en-US/browser/browser/zen-workspaces.ftl b/locales/en-US/browser/browser/zen-workspaces.ftl
index 5b6452475..0933f225c 100644
--- a/locales/en-US/browser/browser/zen-workspaces.ftl
+++ b/locales/en-US/browser/browser/zen-workspaces.ftl
@@ -23,6 +23,9 @@ zen-workspaces-panel-change-icon =
zen-workspaces-panel-context-default-profile =
.label = Set Profile
+zen-workspaces-panel-unload =
+ .label = Unload Space
+
zen-workspaces-how-to-reorder-title = How to reorder spaces
zen-workspaces-how-to-reorder-desc = Drag the space icons at the bottom of the sidebar to reorder them
diff --git a/src/browser/base/content/zen-commands.inc.xhtml b/src/browser/base/content/zen-commands.inc.xhtml
index 25db87158..d1cbacd7a 100644
--- a/src/browser/base/content/zen-commands.inc.xhtml
+++ b/src/browser/base/content/zen-commands.inc.xhtml
@@ -39,6 +39,7 @@
+
diff --git a/src/browser/base/content/zen-panels/popups.inc b/src/browser/base/content/zen-panels/popups.inc
index cdada5655..d94f76ae0 100644
--- a/src/browser/base/content/zen-panels/popups.inc
+++ b/src/browser/base/content/zen-panels/popups.inc
@@ -25,6 +25,7 @@
hide-if-usercontext-disabled="true">
+
diff --git a/src/zen/common/zen-sets.js b/src/zen/common/zen-sets.js
index 4609d2e76..e9ca4b8bc 100644
--- a/src/zen/common/zen-sets.js
+++ b/src/zen/common/zen-sets.js
@@ -122,6 +122,10 @@ document.addEventListener(
}
break;
}
+ case 'cmd_zenUnloadWorkspace': {
+ gZenWorkspaces.unloadWorkspace();
+ break;
+ }
default:
gZenGlanceManager.handleMainCommandSet(event);
if (event.target.id.startsWith('cmd_zenWorkspaceSwitch')) {
diff --git a/src/zen/workspaces/ZenWorkspaces.mjs b/src/zen/workspaces/ZenWorkspaces.mjs
index 708ac626e..41e983f70 100644
--- a/src/zen/workspaces/ZenWorkspaces.mjs
+++ b/src/zen/workspaces/ZenWorkspaces.mjs
@@ -1479,6 +1479,26 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature {
});
}
+ async unloadWorkspace() {
+ const workspaceId = this.#contextMenuData?.workspaceId || this.activeWorkspace;
+
+ const tabsToUnload = this.allStoredTabs.filter(
+ (tab) =>
+ tab.getAttribute('zen-workspace-id') === workspaceId &&
+ !tab.hasAttribute('zen-empty-tab') &&
+ !tab.hasAttribute('zen-essential') &&
+ !tab.hasAttribute('pending')
+ );
+
+ if (tabsToUnload.length === 0) {
+ return;
+ }
+
+ this.log('Unloading workspace', workspaceId);
+
+ await gBrowser.explicitUnloadTabs(tabsToUnload); // TODO: unit test this
+ }
+
moveTabToWorkspace(tab, workspaceID) {
return this.moveTabsToWorkspace([tab], workspaceID);
}