diff --git a/src/ZenSidebarManager.mjs b/src/ZenSidebarManager.mjs index 5530098..f7a5c97 100644 --- a/src/ZenSidebarManager.mjs +++ b/src/ZenSidebarManager.mjs @@ -513,7 +513,9 @@ class ZenBrowserManagerSidebar extends ZenDOMOperatedFeature { _createWebPanelBrowser(data) { const titleContainer = document.getElementById('zen-sidebar-web-panel-title'); titleContainer.textContent = 'Loading...'; - let browser = gBrowser.createBrowser({}); + let browser = gBrowser.createBrowser({ + userContextId: data.userContextId, + }); const tab = this.sidebar.querySelector(`[zen-sidebar-id='${data.id}']`); this.setTabForBrowser(browser, tab); tab.linkedBrowser = browser; @@ -692,6 +694,30 @@ class ZenBrowserManagerSidebar extends ZenDOMOperatedFeature { } } + createContainerTabMenu(event) { + let window = event.target.ownerGlobal; + let data = this.sidebarData; + let panelData = data.data[this.contextTab]; + return window.createUserContextMenu(event, { + isContextMenu: true, + excludeUserContextId: panelData.userContextId, + showDefaultTab: true, + }); + } + + contextChangeContainerTab(event) { + let data = this.sidebarData; + let userContextId = parseInt(event.target.getAttribute('data-usercontextid')); + data.data[this.contextTab].userContextId = userContextId; + Services.prefs.setStringPref('zen.sidebar.data', JSON.stringify(data)); + let browser = this._getBrowserById(this.contextTab); + if (browser) { + browser.remove(); + // We need to re-apply a new browser so it takes the new userContextId + this._updateWebPanel(); + } + } + contextOpenNewTab() { let browser = this._getBrowserById(this.contextTab); let data = this.sidebarData; diff --git a/src/ZenWorkspaces.mjs b/src/ZenWorkspaces.mjs index 7d8d7a0..5657a4c 100644 --- a/src/ZenWorkspaces.mjs +++ b/src/ZenWorkspaces.mjs @@ -10,6 +10,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { console.warn('ZenWorkspaces: !!! ZenWorkspaces is disabled in hidden windows !!!'); return; // We are in a hidden window, don't initialize ZenWorkspaces } + this.ownerWindow = window; console.info('ZenWorkspaces: Initializing ZenWorkspaces...'); XPCOMUtils.defineLazyPreferenceGetter( this, @@ -339,24 +340,27 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { ); } - childs.querySelector('.zen-workspace-actions').addEventListener('command', (event) => { + childs.querySelector('.zen-workspace-actions').addEventListener('command', ((event) => { let button = event.target; - browser.ZenWorkspaces._contextMenuId = button + this._contextMenuId = button .closest('toolbarbutton[zen-workspace-id]') .getAttribute('zen-workspace-id'); const popup = button.ownerDocument.getElementById('zenWorkspaceActionsMenu'); popup.openPopup(button, 'after_end'); - }); + }).bind(browser.ZenWorkspaces)); element.appendChild(childs); element.onclick = (async () => { if (event.target.closest('.zen-workspace-actions')) { return; // Ignore clicks on the actions button } - await browser.ZenWorkspaces.changeWorkspace(workspace); - let panel = browser.document.getElementById('PanelUI-zen-workspaces'); + const workspaceId = element.getAttribute('zen-workspace-id'); + const workspaces = await this._workspaces(); + const workspace = workspaces.workspaces.find((w) => w.uuid === workspaceId); + await this.changeWorkspace(workspace); + let panel = this.ownerWindow.document.getElementById('PanelUI-zen-workspaces'); PanelMultiView.hidePopup(panel); - browser.document.getElementById('zen-workspaces-button').removeAttribute('open'); - }).bind(browser.ZenWorkspaces, workspace, browser); + this.ownerWindow.document.getElementById('zen-workspaces-button').removeAttribute('open'); + }).bind(browser.ZenWorkspaces); return element; }; browser.ZenWorkspaces._workspaceCache = null; @@ -624,7 +628,6 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature { const shouldAllowPinnedTabs = this._shouldAllowPinTab; this.tabContainer._invalidateCachedTabs(); let firstTab = undefined; - console.info('ZenWorkspaces: Changing workspace to', window.uuid); for (let tab of gBrowser.tabs) { if ( (tab.getAttribute('zen-workspace-id') === window.uuid && !(tab.pinned && !shouldAllowPinnedTabs)) ||