Fix: Handle TabClose event in ZenPinnedTabManager

This commit addresses a bug where the `TabClose` event was not being handled correctly by the `ZenPinnedTabManager`. This resulted in incorrect behavior when closing tabs, particularly in the context of multiple windows.

The following changes were made:

- The `TabClose` event is now handled explicitly within the `_onTabEvent` method.
- The `_removePinnedAttributes` method is called to remove any pinned attributes associated with the closed tab.
- The `_onCloseTabShortcut` method is updated to use `e.target?.closest("tab")` to ensure it targets the correct tab element.

This fix ensures that pinned tab attributes are properly removed when a tab is closed, preventing unexpected behavior and data inconsistencies.
This commit is contained in:
Kristijan Ribarić 2024-11-04 08:45:28 +01:00
parent a82e2c2765
commit eb2df8cb18

View file

@ -178,10 +178,9 @@
delete tab._zenClickEventListener;
}
break;
// TODO: Do this in a better way. Closing a second window could trigger remove tab and delete it from db
// case "TabClose":
// this._removePinnedAttributes(tab);
// break;
case "TabClose":
this._removePinnedAttributes(tab);
break;
default:
console.warn('ZenPinnedTabManager: Unhandled tab event', action);
break;
@ -189,8 +188,8 @@
}
_onTabClick(e) {
const tab = e.target;
if (e.button === 1) {
const tab = e.target?.closest("tab");
if (e.button === 1 && tab) {
this._onCloseTabShortcut(e, tab);
}
}
@ -393,7 +392,7 @@
const element = window.MozXULElement.parseXULToFragment(`
<menuitem id="context_zen-pin-tab-global"
data-lazy-l10n-id="pin-tab-global"
data-lazy-l10n-id="tab-context-zen-pin-tab-global"
hidden="true"
oncommand="gZenPinnedTabManager._addGlobalPin();"/>
`);
@ -413,7 +412,7 @@
const isVisible = contextTab.pinned && !contextTab.multiselected;
document.getElementById("context_zen-reset-pinned-tab").hidden = !isVisible || !contextTab.getAttribute("zen-pin-id");
document.getElementById("context_zen-replace-pinned-url-with-current").hidden = !isVisible;
document.getElementById("context_zen-pin-tab-global").hidden = contextTab.pinned;
document.getElementById("context_zen-pin-tab-global").hidden = contextTab.pinned || !ZenWorkspaces.workspaceEnabled;
document.getElementById("context_zen-pinned-tab-separator").hidden = !isVisible;
}
}