Parcourir la source

fixed menu state displaying

Gildas il y a 7 ans
Parent
commit
c6abea617e
2 fichiers modifiés avec 24 ajouts et 4 suppressions
  1. 15 4
      extension/ui/bg/ui.js
  2. 9 0
      lib/browser-polyfill/custom-browser-polyfill.js

+ 15 - 4
extension/ui/bg/ui.js

@@ -91,11 +91,15 @@ singlefile.ui = (() => {
 	});
 	browser.tabs.onActivated.addListener(async activeInfo => {
 		const tab = await browser.tabs.get(activeInfo.tabId);
+		await refreshContextMenuState(tab);
+		onTabActivated(tab);
+	});
+	browser.tabs.onCreated.addListener(async tab => {
+		await refreshContextMenuState(tab);
 		onTabActivated(tab);
 	});
-	browser.tabs.onCreated.addListener(tab => onTabActivated(tab));
 	browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
-		if (tabs.autoSaveAll || tabs[tab.id] && tabs[tab.id].autoSave || (tabs.autoSaveUnpinned && !tab.pinned)) {
+		if (tabs[tab.id] && tabs[tab.id].autoSave || tabs.autoSaveAll || (tabs.autoSaveUnpinned && !tab.pinned)) {
 			if (changeInfo.status == "complete") {
 				processTab(tab, { autoSave: true });
 			}
@@ -130,7 +134,7 @@ singlefile.ui = (() => {
 					title: DEFAULT_TITLE
 				});
 				browser.menus.create({
-					id: "separator",
+					id: "separator-1",
 					contexts: ["all"],
 					type: "separator"
 				});
@@ -160,7 +164,7 @@ singlefile.ui = (() => {
 					title: "Save all tabs"
 				});
 				browser.menus.create({
-					id: "separator",
+					id: "separator-2",
 					contexts: ["all"],
 					type: "separator"
 				});
@@ -198,6 +202,13 @@ singlefile.ui = (() => {
 		}
 	}
 
+	async function refreshContextMenuState(tab) {
+		await browser.menus.update(MENU_ID_AUTO_SAVE_DISABLED, { checked: !tabs[tab.id] || !tabs[tab.id].autoSave });
+		await browser.menus.update(MENU_ID_AUTO_SAVE_TAB, { checked: tabs[tab.id] && tabs[tab.id].autoSave });
+		await browser.menus.update(MENU_ID_AUTO_SAVE_UNPINNED, { checked: tabs.autoSaveUnpinned });
+		await browser.menus.update(MENU_ID_AUTO_SAVE_ALL, { checked: tabs.autoSaveAll });
+	}
+
 	async function processTab(tab, options) {
 		const tabId = tab.id;
 		try {

+ 9 - 0
lib/browser-polyfill/custom-browser-polyfill.js

@@ -127,6 +127,15 @@
 					addListener: listener => chrome.contextMenus.onClicked.addListener(listener)
 				},
 				create: options => chrome.contextMenus.create(options),
+				update: (menuItemId, options) => new Promise((resolve, reject) => {
+					chrome.contextMenus.update(menuItemId, options, () => {
+						if (chrome.runtime.lastError) {
+							reject(chrome.runtime.lastError);
+						} else {
+							resolve();
+						}
+					});
+				}),
 				removeAll: () => new Promise((resolve, reject) => {
 					chrome.contextMenus.removeAll(() => {
 						if (chrome.runtime.lastError) {