Skip to content

Commit 469276a

Browse files
committed
Destroy in-content UI after it is hidden
1 parent b6ef373 commit 469276a

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

webextensions/resources/module/InContentPanel.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,13 +268,13 @@ export default class InContentPanel {
268268
if (message.targetId) {
269269
this.lastTimestampFor.set(message.targetId, message.timestamp);
270270
}
271-
this.panel.classList.remove('open');
271+
this.hide();
272272
return true;
273273
})();
274274

275275
case 'treestyletab:notify-sidebar-closed':
276276
if (this.panel) {
277-
this.panel.classList.remove('open');
277+
this.hide();
278278
}
279279
break;
280280
}
@@ -289,7 +289,7 @@ export default class InContentPanel {
289289
return;
290290

291291
if (this.panel) {
292-
this.panel.parentNode.removeChild(this.panel);
292+
this.panel.remove();
293293
this.panel = null;
294294
}
295295

@@ -301,6 +301,23 @@ export default class InContentPanel {
301301
this.root = this.onMessageSelf = this.destroySelf = null;
302302
}
303303

304+
async hide() {
305+
if (!this.panel)
306+
return;
307+
308+
this.panel.classList.remove('open');
309+
310+
if (this.panel.classList.contains('animation')) {
311+
await new Promise((resolve, _reject) => {
312+
this.panel.addEventListener('transitionend', resolve, { once: true });
313+
});
314+
}
315+
316+
browser.runtime.sendMessage({
317+
type: `treestyletab:${this.type}:notify-panel-hidden`,
318+
});
319+
}
320+
304321
get UISource() { // this can be overridden by subclasses
305322
return '';
306323
}

webextensions/resources/module/InContentPanelController.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,22 @@ export default class InContentPanelController {
102102
this.hideIn(activeInfo.tabId, { timestamp });
103103
this.hideIn(activeInfo.previousTabId, { timestamp });
104104
});
105+
106+
browser.runtime.onMessage.addListener((message, sender) => {
107+
switch (message?.type) {
108+
case `treestyletab:${this.type}:notify-panel-hidden`:
109+
if (sender.tab) {
110+
browser.sessions.removeTabValue(sender.tab.id, KEY_CLOSED_CONTAINER_TYPE).catch(_error => null);
111+
browser.tabs.sendMessage(sender.tab.id, {
112+
type: `treestyletab:${this.type}:destroy`,
113+
});
114+
}
115+
break;
116+
117+
default:
118+
break;
119+
}
120+
});
105121
}
106122

107123
value(property) {
@@ -215,6 +231,7 @@ export default class InContentPanelController {
215231
if (message.stillVisibleInSplitView)
216232
return;
217233
case '${Constants.kCOMMAND_NOTIFY_TAB_DETACHED_FROM_WINDOW}':
234+
case 'treestyletab:' + instance.type + ':destroy':
218235
window.destroyClosedContents(destructor);
219236
break;
220237
}

0 commit comments

Comments
 (0)