Implement wait promise for preference changes in ZenVerticalTabsManager

This commit is contained in:
mr. M
2025-01-25 02:01:48 +01:00
parent 343bfe12fd
commit c0eeab939b

View File

@@ -118,6 +118,7 @@ var gZenUIManager = {
var gZenVerticalTabsManager = { var gZenVerticalTabsManager = {
init() { init() {
this._multiWindowFeature = new ZenMultiWindowFeature(); this._multiWindowFeature = new ZenMultiWindowFeature();
this._initWaitPromise();
ChromeUtils.defineLazyGetter(this, 'isWindowsStyledButtons', () => { ChromeUtils.defineLazyGetter(this, 'isWindowsStyledButtons', () => {
return !( return !(
@@ -135,8 +136,9 @@ var gZenVerticalTabsManager = {
}); });
var updateEvent = this._updateEvent.bind(this); var updateEvent = this._updateEvent.bind(this);
var onPrefChange = this._onPrefChange.bind(this);
this.initializePreferences(updateEvent); this.initializePreferences(onPrefChange);
this._toolbarOriginalParent = document.getElementById('nav-bar').parentElement; this._toolbarOriginalParent = document.getElementById('nav-bar').parentElement;
gZenCompactModeManager.addEventListener(updateEvent); gZenCompactModeManager.addEventListener(updateEvent);
@@ -243,6 +245,31 @@ var gZenVerticalTabsManager = {
); );
}, },
_initWaitPromise() {
this._waitPromise = new Promise((resolve) => {
this._resolveWaitPromise = resolve;
});
},
async _onPrefChange() {
this._resolveWaitPromise();
// only run if we are in the active window
await this._multiWindowFeature.foreachWindowAsActive(async (browser) => {
if (browser.gZenVerticalTabsManager._multiWindowFeature.windowIsActive(browser)) {
return;
}
await browser.gZenVerticalTabsManager._waitPromise;
browser.gZenVerticalTabsManager._updateEvent({ dontRebuildAreas: true });
browser.gZenVerticalTabsManager._initWaitPromise();
});
if (ZenMultiWindowFeature.isActiveWindow) {
this._updateEvent();
this._initWaitPromise();
}
},
_updateEvent({ forCustomizableMode = false, dontRebuildAreas = false } = {}) { _updateEvent({ forCustomizableMode = false, dontRebuildAreas = false } = {}) {
if (this._isUpdating) { if (this._isUpdating) {
return; return;