annotate background.js @ 32:aaed574396b8

Move pinned tabs correctly Pinned tabs need to be handled separately, the must either be moved before or after other pinned tabs or to index 0. The built-in behavior of the "Move to New Window" action is to unpin tabs. Follow this behavior for consistency. Furthermore, active, pinned tabs are not marked as active. Handle this case as well.
author Guido Berhoerster <guido+tab-mover@berhoerster.name>
date Thu, 08 Apr 2021 11:22:24 +0200
parents 8279a650da6b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
1 /*
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
2 * Copyright (C) 2018 Guido Berhoerster <guido+tab-mover@berhoerster.name>
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
3 *
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
4 * This Source Code Form is subject to the terms of the Mozilla Public
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
7 */
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
8
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
9 'use strict';
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
10
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
11 const ALLOWED_PROTOCOLS = new Set(['http:', 'https:', 'ftp:']);
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
12 var windowMenuIds = [];
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
13 var lastMenuInstanceId = 0;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
14 var nextMenuInstanceId = 1;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
15
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
16 function createMenuItem(createProperties) {
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
17 return new Promise((resolve, reject) => {
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
18 let id = browser.menus.create(createProperties, () => {
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
19 if (browser.runtime.lastError) {
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
20 reject(browser.runtime.lastError);
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
21 } else {
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
22 resolve(id);
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
23 }
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
24 });
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
25 });
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
26 }
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
27
24
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
28 async function moveTabs(tab, targetWindowId) {
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
29 // if the current tab is part of a highlighted group then move the whole
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
30 // group
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
31 let selectedTabs = (tab.highlighted) ? await browser.tabs.query({
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
32 highlighted: true,
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
33 windowId: tab.windowId
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
34 }) : [tab];
28
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
35 let activeTab = selectedTabs.find(tab => tab.active);
32
aaed574396b8 Move pinned tabs correctly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 28
diff changeset
36
aaed574396b8 Move pinned tabs correctly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 28
diff changeset
37 // unpin tabs before moving, this matches the built-in behavior
aaed574396b8 Move pinned tabs correctly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 28
diff changeset
38 let unpinningTabs = selectedTabs.flatMap(tab =>
aaed574396b8 Move pinned tabs correctly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 28
diff changeset
39 tab.pinned ? [browser.tabs.update(tab.id, {pinned: false})] : []);
aaed574396b8 Move pinned tabs correctly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 28
diff changeset
40 await Promise.all(unpinningTabs.map(p => p.catch(e => e)));
aaed574396b8 Move pinned tabs correctly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 28
diff changeset
41
28
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
42 await browser.tabs.move(selectedTabs.map(selectedTab => selectedTab.id),
24
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
43 {windowId: targetWindowId, index: -1});
28
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
44
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
45 // mark the previously active tab active again before highlighting other
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
46 // tabs since this resets the selected tabs
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
47 await browser.tabs.update(activeTab.id, {active: true});
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
48 for (let tab of selectedTabs) {
32
aaed574396b8 Move pinned tabs correctly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 28
diff changeset
49 if (typeof activeTab === 'undefined' || tab.id !== activeTab.id) {
28
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
50 browser.tabs.update(tab.id, {active: false, highlighted: true});
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
51 }
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
52 }
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
53 }
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
54
24
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
55 async function reopenTabs(tab, targetWindowId) {
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
56 // if the current tab is part of a highlighted group then reopen the whole
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
57 // group
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
58 let selectedTabs = (tab.highlighted) ? await browser.tabs.query({
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
59 highlighted: true,
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
60 windowId: tab.windowId
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
61 }) : [tab];
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
62 // filter out privileged tabs which cannot be reopened
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
63 selectedTabs = selectedTabs.filter(selectedTab =>
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
64 ALLOWED_PROTOCOLS.has(new URL(selectedTab.url).protocol));
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
65 if (selectedTabs.length === 0) {
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
66 return;
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
67 }
28
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
68 let activeTab = selectedTabs.find(tab => tab.active);
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
69 // the actually active tab may have been filtered out above, fall back to
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
70 // the first highlighted one
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
71 if (typeof activeTab === 'undefined') {
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
72 activeTab = selectedTabs[0];
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
73 activeTab.active = true;
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
74 }
24
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
75
28
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
76 let newTabs = await Promise.all(selectedTabs.map(selectedTab => {
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
77 return browser.tabs.create({
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
78 url: selectedTab.url,
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
79 windowId: targetWindowId,
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
80 active: selectedTab.active
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
81 });
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
82 }));
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
83 // tabs can only be highlighted after they have been created
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
84 for (let tab of newTabs) {
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
85 if (!tab.active) {
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
86 browser.tabs.update(tab.id, {active: false, highlighted: true});
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
87 }
8279a650da6b Preserve active and highlighted properties of moved tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 24
diff changeset
88 }
24
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
89 browser.tabs.remove(selectedTabs.map(selectedTab => selectedTab.id));
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
90 }
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
91
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
92 async function onMenuShown(info, tab) {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
93 let menuInstanceId = nextMenuInstanceId++;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
94 lastMenuInstanceId = menuInstanceId;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
95 let targetWindows = await browser.windows.getAll({
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
96 populate: true,
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
97 windowTypes: ['normal']
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
98 });
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
99 let creatingMenus = [];
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
100 let moveMenuItems = 0;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
101 let reopenMenuItems = 0;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
102 for (let targetWindow of targetWindows) {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
103 if (targetWindow.id === tab.windowId) {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
104 // ignore active window
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
105 continue;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
106 }
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
107 if (tab.incognito === targetWindow.incognito) {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
108 creatingMenus.push(createMenuItem({
24
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
109 onclick: (info, tab) => moveTabs(tab, targetWindow.id),
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
110 parentId: 'move-menu',
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
111 title: targetWindow.title
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
112 }));
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
113 moveMenuItems++;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
114 } else {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
115 creatingMenus.push(createMenuItem({
24
f418a6305f17 Allow moving multiple highlighted tabs
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 23
diff changeset
116 onclick: (info, tab) => reopenTabs(tab, targetWindow.id),
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
117 parentId: 'reopen-menu',
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
118 title: targetWindow.title
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
119 }));
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
120 reopenMenuItems++;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
121 }
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
122 }
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
123 let updatingMenus = [
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
124 browser.menus.update('move-menu', {enabled: moveMenuItems > 0}),
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
125 browser.menus.update('reopen-menu', {enabled: reopenMenuItems > 0})
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
126 ];
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
127 await Promise.all([...creatingMenus, ...updatingMenus]);
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
128 let newWindowMenuIds = await Promise.all(creatingMenus);
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
129 if (menuInstanceId !== lastMenuInstanceId) {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
130 // menu has been closed and opened again, remove the items of this
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
131 // instance again
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
132 for (let menuId of newWindowMenuIds) {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
133 browser.menus.remove(menuId);
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
134 }
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
135 return;
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
136 }
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
137 windowMenuIds = newWindowMenuIds;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
138 browser.menus.refresh();
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
139 }
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
140
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
141 async function onMenuHidden() {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
142 lastMenuInstanceId = 0;
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
143 browser.menus.update('move-menu', {enabled: false});
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
144 browser.menus.update('reopen-menu', {enabled: false});
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
145 for (let menuId of windowMenuIds) {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
146 browser.menus.remove(menuId);
0
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
147 }
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
148 }
480f8e4f4500 Initial revision
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents:
diff changeset
149
23
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
150 (async () => {
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
151 await Promise.all([
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
152 // create submenus
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
153 createMenuItem({
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
154 id: 'move-menu',
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
155 title: browser.i18n.getMessage('moveToWindowMenu'),
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
156 enabled: false,
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
157 contexts: ['tab']
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
158 }),
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
159 createMenuItem({
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
160 id: 'reopen-menu',
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
161 title: browser.i18n.getMessage('reopenInWindowMenu'),
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
162 enabled: false,
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
163 contexts: ['tab']
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
164 })
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
165 ]);
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
166 browser.menus.onShown.addListener(onMenuShown);
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
167 browser.menus.onHidden.addListener(onMenuHidden);
4704e5216412 Create menus on-the-fly
Guido Berhoerster <guido+tab-mover@berhoerster.name>
parents: 17
diff changeset
168 })();