mirror of
https://github.com/zen-browser/desktop.git
synced 2025-10-26 12:27:50 +00:00
Compare commits
738 Commits
1.11b
...
better-sta
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc1e375cd1 | ||
|
|
6fa0e814de | ||
|
|
68191d2b47 | ||
|
|
81f7587958 | ||
|
|
d5e2acfd5b | ||
|
|
663243264b | ||
|
|
03ca00748c | ||
|
|
cbb1a4bc44 | ||
|
|
21f3ab23d3 | ||
|
|
18944d5ed8 | ||
|
|
5c6e5f7361 | ||
|
|
bd72aebd98 | ||
|
|
0278aea4f7 | ||
|
|
3c01004641 | ||
|
|
b8213569e5 | ||
|
|
4d27f9d741 | ||
|
|
3b56abf090 | ||
|
|
590ba6de1b | ||
|
|
4aa215e091 | ||
|
|
de175bff11 | ||
|
|
a6bc8d7105 | ||
|
|
e48e7caef1 | ||
|
|
015cdad2df | ||
|
|
ef6cf5fae1 | ||
|
|
797152da89 | ||
|
|
316ff45859 | ||
|
|
e0ac9ba424 | ||
|
|
09ca430b88 | ||
|
|
dda1dab6f3 | ||
|
|
fbf411c096 | ||
|
|
a3de3e221c | ||
|
|
4b0c6f2ca5 | ||
|
|
c32dc7ecd2 | ||
|
|
d6e14ca88c | ||
|
|
ebfc885745 | ||
|
|
89d7b29b12 | ||
|
|
6f5d20fd49 | ||
|
|
15bd0b2675 | ||
|
|
9132019cb3 | ||
|
|
a87cbfd7a3 | ||
|
|
d2c6c8b734 | ||
|
|
6c5be98173 | ||
|
|
d51838caf9 | ||
|
|
a61dd0ab87 | ||
|
|
d15b1f3c1e | ||
|
|
40d38b3961 | ||
|
|
addc318f29 | ||
|
|
ad124c9d95 | ||
|
|
4d48395c19 | ||
|
|
9eb0aa0de4 | ||
|
|
452b7e0e54 | ||
|
|
e10a16bc0d | ||
|
|
b26da26192 | ||
|
|
be55a26a94 | ||
|
|
22d4b22c53 | ||
|
|
00a86df321 | ||
|
|
b03cdba607 | ||
|
|
cce90e6ddc | ||
|
|
b6fc0e4db7 | ||
|
|
50ed1f0a64 | ||
|
|
f40b780b95 | ||
|
|
0f37364586 | ||
|
|
8cfff0e0bd | ||
|
|
e61963454c | ||
|
|
eac698d846 | ||
|
|
b536f98d94 | ||
|
|
469f94bddf | ||
|
|
7af0c64c30 | ||
|
|
8e6808ea61 | ||
|
|
153c0e2fc5 | ||
|
|
b18e946869 | ||
|
|
e3a341c88d | ||
|
|
7671266633 | ||
|
|
1e1f02c764 | ||
|
|
d3ec41d73f | ||
|
|
9982b1af34 | ||
|
|
133cce8bf8 | ||
|
|
bb78fc165b | ||
|
|
adfc235865 | ||
|
|
0392d60352 | ||
|
|
53ea662ef7 | ||
|
|
7a846fa458 | ||
|
|
273d7ce5d5 | ||
|
|
c378bf3842 | ||
|
|
e4de07d773 | ||
|
|
6dfb05e242 | ||
|
|
3e9d98233c | ||
|
|
8536634fa4 | ||
|
|
23b17b2635 | ||
|
|
afcf49b25d | ||
|
|
c54ad93db6 | ||
|
|
8d99a97a9e | ||
|
|
66003832b2 | ||
|
|
32b7af5834 | ||
|
|
b4f61e48de | ||
|
|
97e76a9cf2 | ||
|
|
52bfac98be | ||
|
|
0ebe4b4f0a | ||
|
|
1561525d47 | ||
|
|
d9c9e74cc8 | ||
|
|
e3193c54f4 | ||
|
|
90b0849308 | ||
|
|
01e3cc1374 | ||
|
|
e5294908ec | ||
|
|
3ed15335fe | ||
|
|
094fbb4ec8 | ||
|
|
190f1f0cb5 | ||
|
|
d908700a9c | ||
|
|
b669f81926 | ||
|
|
76c22cc896 | ||
|
|
d0d78d2953 | ||
|
|
8b5e26759f | ||
|
|
e4eb6d6fdd | ||
|
|
1a0ce0df7c | ||
|
|
c95f0fce88 | ||
|
|
2abd23b344 | ||
|
|
ccb1bc521c | ||
|
|
26163c62da | ||
|
|
8818d45d05 | ||
|
|
46941fe25a | ||
|
|
44ffc842d3 | ||
|
|
4641b8b590 | ||
|
|
148a5eebc2 | ||
|
|
523c1fadbc | ||
|
|
820652bd5e | ||
|
|
246e3b25a4 | ||
|
|
fe0e5a9101 | ||
|
|
d9a6bb5b2d | ||
|
|
c9f632c1b8 | ||
|
|
ab69ab8f80 | ||
|
|
297a95986c | ||
|
|
7c1bdbfa68 | ||
|
|
e712e8204d | ||
|
|
8e28e1a630 | ||
|
|
6d1742761c | ||
|
|
1c84a32a3c | ||
|
|
b07824489b | ||
|
|
619a8d39be | ||
|
|
9b8195d666 | ||
|
|
22d04ad729 | ||
|
|
bac3e38318 | ||
|
|
1d8e0fc3d7 | ||
|
|
086d1633df | ||
|
|
b260942e22 | ||
|
|
d7bf8b24fd | ||
|
|
0ded78eb06 | ||
|
|
c2d484a725 | ||
|
|
7ca3a9e377 | ||
|
|
2bd548fe41 | ||
|
|
d9d3076e2e | ||
|
|
b8254fdd36 | ||
|
|
562274a161 | ||
|
|
19f96241e5 | ||
|
|
d735a1fa91 | ||
|
|
40baf2627c | ||
|
|
5880636b3a | ||
|
|
531f569f3a | ||
|
|
00fcd74552 | ||
|
|
f594a0b5c0 | ||
|
|
94779133ec | ||
|
|
a2b1b38e0c | ||
|
|
cd3823f180 | ||
|
|
8451a71af7 | ||
|
|
455a2c005b | ||
|
|
4ad29e0ca5 | ||
|
|
52b19fc137 | ||
|
|
7958417f96 | ||
|
|
744618ac25 | ||
|
|
07296f19a6 | ||
|
|
db271db087 | ||
|
|
d30a24e768 | ||
|
|
2b359ea451 | ||
|
|
8af3faea16 | ||
|
|
0c5716fb81 | ||
|
|
d19a484cb0 | ||
|
|
38bf9bebc8 | ||
|
|
d79b89f79b | ||
|
|
7855d657fd | ||
|
|
67a52ae02c | ||
|
|
4b14c1e2f8 | ||
|
|
fc908f9d4a | ||
|
|
77bc3ced5d | ||
|
|
34dc835631 | ||
|
|
81b279be5f | ||
|
|
828c7bea19 | ||
|
|
b4a49636d7 | ||
|
|
1caa6d9aa5 | ||
|
|
ecc6df3301 | ||
|
|
0310e89c39 | ||
|
|
252af87d9b | ||
|
|
6732a69c2b | ||
|
|
3868f8e30f | ||
|
|
937408f3f6 | ||
|
|
e53a95e297 | ||
|
|
b74153290b | ||
|
|
0021c3522f | ||
|
|
367ad74fba | ||
|
|
0abf17cb6b | ||
|
|
be76e751e7 | ||
|
|
f8a893e6de | ||
|
|
89dfc86bfb | ||
|
|
bc894f8beb | ||
|
|
20120ecf27 | ||
|
|
a9c344d385 | ||
|
|
3cbfae7a8f | ||
|
|
90876532b9 | ||
|
|
641d4d0f87 | ||
|
|
7c12ad72b8 | ||
|
|
66e0dde1ed | ||
|
|
5a4877a141 | ||
|
|
f9b0f8c436 | ||
|
|
6552ec5f02 | ||
|
|
337b1aec53 | ||
|
|
33fff9e19b | ||
|
|
2cdaf4850d | ||
|
|
561da4b6ef | ||
|
|
3a8767ea5f | ||
|
|
4947b4c9a3 | ||
|
|
0f140b706e | ||
|
|
b4812e8182 | ||
|
|
7d94cad876 | ||
|
|
866e6987a2 | ||
|
|
524f34a461 | ||
|
|
949d93d546 | ||
|
|
bd638022df | ||
|
|
26e6d704f5 | ||
|
|
1be8b20b64 | ||
|
|
c8150ccdcc | ||
|
|
77bac52b07 | ||
|
|
3566289cb5 | ||
|
|
0b34cc3033 | ||
|
|
fdb71c6b0e | ||
|
|
ffea12305d | ||
|
|
e90f20e1d4 | ||
|
|
f58dbd71b6 | ||
|
|
b4c7a64631 | ||
|
|
e496655953 | ||
|
|
fea0e9b864 | ||
|
|
7a7fb01928 | ||
|
|
d4575841df | ||
|
|
d7e634fcfd | ||
|
|
b1e3df783d | ||
|
|
80dfcf5eaa | ||
|
|
c0d66ee649 | ||
|
|
93e8f6bbd6 | ||
|
|
cdbdaac913 | ||
|
|
9bec7a88fe | ||
|
|
50342e945d | ||
|
|
c087493f38 | ||
|
|
df3c554f27 | ||
|
|
e81994a748 | ||
|
|
0d1d75588d | ||
|
|
5ddedbbd50 | ||
|
|
fcc823c33a | ||
|
|
1a7f9d9ee0 | ||
|
|
1a2b527070 | ||
|
|
39a357fa57 | ||
|
|
d2c50df0ab | ||
|
|
5dc30c44ff | ||
|
|
01d705a3b5 | ||
|
|
fff86fd068 | ||
|
|
0fb9b51cc9 | ||
|
|
bda91cd9d5 | ||
|
|
0343430611 | ||
|
|
1df7da7836 | ||
|
|
dc018561a0 | ||
|
|
520b41215c | ||
|
|
3537680e45 | ||
|
|
d236035b72 | ||
|
|
e2e742aba2 | ||
|
|
3d8fc203f9 | ||
|
|
7b99f227cd | ||
|
|
1f68a45417 | ||
|
|
cc1619ab5d | ||
|
|
5c30c83341 | ||
|
|
d788ac4ad6 | ||
|
|
826802df21 | ||
|
|
3b4f96ab2f | ||
|
|
5a59eb6902 | ||
|
|
64293af6f7 | ||
|
|
8afd08a3d9 | ||
|
|
6a21a6fdb1 | ||
|
|
3e53787a62 | ||
|
|
9823353d8b | ||
|
|
d189221f10 | ||
|
|
271fa03cfc | ||
|
|
1fc2299801 | ||
|
|
7df278f7ed | ||
|
|
2f68f77f87 | ||
|
|
49a3974b34 | ||
|
|
7a00f3c67c | ||
|
|
e079732686 | ||
|
|
71f2680eef | ||
|
|
808a376c65 | ||
|
|
eff7cfc5fe | ||
|
|
bbb6ba4078 | ||
|
|
c10131aca8 | ||
|
|
49159a6d5c | ||
|
|
d80ba6b058 | ||
|
|
f2e188a86c | ||
|
|
2f03446c37 | ||
|
|
039b7ca85c | ||
|
|
507b27dbda | ||
|
|
78f54895e2 | ||
|
|
4ca172d40f | ||
|
|
81774ad352 | ||
|
|
ad32b31904 | ||
|
|
414bafde9c | ||
|
|
be1d8ec408 | ||
|
|
7f4effe4b6 | ||
|
|
7ca3396c8b | ||
|
|
853c204746 | ||
|
|
a22c5085d9 | ||
|
|
1021a78f46 | ||
|
|
637747ab53 | ||
|
|
15b8385e49 | ||
|
|
27d3b903d3 | ||
|
|
70b9f66f4c | ||
|
|
019779e425 | ||
|
|
951ff28688 | ||
|
|
d394702606 | ||
|
|
6f88c5d2d1 | ||
|
|
53332937c2 | ||
|
|
a79678a0cb | ||
|
|
f16b0526af | ||
|
|
808e186dae | ||
|
|
0a39cdef7c | ||
|
|
8a042cb110 | ||
|
|
2942ab3c08 | ||
|
|
1d269e9203 | ||
|
|
def0ed7a52 | ||
|
|
9d7c33228f | ||
|
|
54d5a747ba | ||
|
|
3b4c2f6d76 | ||
|
|
7968b79039 | ||
|
|
4c02f76187 | ||
|
|
ec90027c5e | ||
|
|
0588dbfd64 | ||
|
|
293c6b1de2 | ||
|
|
3f2dd0a60c | ||
|
|
89404cc649 | ||
|
|
2ade4030c8 | ||
|
|
7c81063b90 | ||
|
|
786903d57c | ||
|
|
395cc0a19d | ||
|
|
cc2c9044f3 | ||
|
|
d816bca7e0 | ||
|
|
87bcd7ccfb | ||
|
|
a9f136ae8a | ||
|
|
ef3b61ded7 | ||
|
|
c9d8623e4a | ||
|
|
13923b84f2 | ||
|
|
05df28ae72 | ||
|
|
f75e74b678 | ||
|
|
123cbfa644 | ||
|
|
5cc13cf77f | ||
|
|
56275abbaf | ||
|
|
6ccbdcbdfa | ||
|
|
ebbec7f0b2 | ||
|
|
a7d0719877 | ||
|
|
1831e3e2fa | ||
|
|
fc2c119b94 | ||
|
|
163b276f7e | ||
|
|
72ab38b9af | ||
|
|
991437ab2f | ||
|
|
57679238de | ||
|
|
d800c20905 | ||
|
|
2550b2fe41 | ||
|
|
8a72d253aa | ||
|
|
71558dca71 | ||
|
|
6dbc5bf6db | ||
|
|
98448b9572 | ||
|
|
79bd7794a5 | ||
|
|
3ab70ff9a8 | ||
|
|
e1894d5fb4 | ||
|
|
58646d1d08 | ||
|
|
2132f44812 | ||
|
|
62f56d7949 | ||
|
|
33ac98c2b3 | ||
|
|
8f962816ea | ||
|
|
e95363adc8 | ||
|
|
6250e9dfb2 | ||
|
|
0f57148418 | ||
|
|
9bd02871e2 | ||
|
|
f1fbe78f93 | ||
|
|
02c429993c | ||
|
|
beab17074d | ||
|
|
f608d6a8ce | ||
|
|
16c2ff8449 | ||
|
|
5c61ca688f | ||
|
|
095a5f38f3 | ||
|
|
696757003b | ||
|
|
9300004cbd | ||
|
|
9c13275aca | ||
|
|
5c6b4736be | ||
|
|
c566cc32fe | ||
|
|
8dc0e6b4bf | ||
|
|
f8f3f8abcb | ||
|
|
22414da6a8 | ||
|
|
150c94c0e9 | ||
|
|
d845853643 | ||
|
|
ffbf4a703b | ||
|
|
649378b695 | ||
|
|
8aa964bc78 | ||
|
|
6c89cd4a26 | ||
|
|
2ba4ffb4f8 | ||
|
|
38753ab8b0 | ||
|
|
9da8a28345 | ||
|
|
a4e79d4738 | ||
|
|
44cff2b498 | ||
|
|
5fe326aad8 | ||
|
|
b4a5c1504c | ||
|
|
270254c760 | ||
|
|
a71f24a1fa | ||
|
|
90bce607b0 | ||
|
|
1540d6b411 | ||
|
|
b51af13bb0 | ||
|
|
3eaeb4a0a1 | ||
|
|
aa6a03b5f9 | ||
|
|
3ca5b24e25 | ||
|
|
b074bf0690 | ||
|
|
3130c13c30 | ||
|
|
f0b60391a8 | ||
|
|
a4086122aa | ||
|
|
fe9ee85688 | ||
|
|
2cbe662019 | ||
|
|
be54733b13 | ||
|
|
053bc28e68 | ||
|
|
f38bea67ab | ||
|
|
8eec660d03 | ||
|
|
79e731e89c | ||
|
|
4f49ff3290 | ||
|
|
0dac5522fe | ||
|
|
a35ef0e735 | ||
|
|
c5515fc3ae | ||
|
|
2d40259c6e | ||
|
|
388e69cc38 | ||
|
|
d2df699ced | ||
|
|
be244cfe5a | ||
|
|
6ccf5053cd | ||
|
|
0f71de410b | ||
|
|
6b8f3b750e | ||
|
|
eebee9fb97 | ||
|
|
21e0496d6f | ||
|
|
9abc7f1a82 | ||
|
|
fa8354b133 | ||
|
|
b51c205538 | ||
|
|
73842430ea | ||
|
|
2b6f2980ce | ||
|
|
3d9a40beb9 | ||
|
|
2365fa9fbc | ||
|
|
0890180889 | ||
|
|
6b6339867d | ||
|
|
69405bda0f | ||
|
|
0f76a4814d | ||
|
|
81a02834de | ||
|
|
fa4315808b | ||
|
|
8acdb00570 | ||
|
|
d4a45ca006 | ||
|
|
d5225be720 | ||
|
|
8f7302f0ee | ||
|
|
446d198eca | ||
|
|
38111960f8 | ||
|
|
b83a9d94c6 | ||
|
|
a536c708ca | ||
|
|
53de112eb8 | ||
|
|
6662e0fa09 | ||
|
|
e90f188c63 | ||
|
|
e039ee1692 | ||
|
|
68fc9fb635 | ||
|
|
940a2ebc3f | ||
|
|
7f3d9fd9e7 | ||
|
|
5f552bb749 | ||
|
|
a233c6be8c | ||
|
|
0f3120e831 | ||
|
|
9c93a21421 | ||
|
|
8201b175bb | ||
|
|
78ee43347e | ||
|
|
7b23e4de11 | ||
|
|
7a7bd01717 | ||
|
|
7bb113d1f0 | ||
|
|
db5d318c74 | ||
|
|
139e7a8b25 | ||
|
|
390afc7e63 | ||
|
|
8fcf251916 | ||
|
|
cad9a299c3 | ||
|
|
3e53c9e338 | ||
|
|
8386b1b3e8 | ||
|
|
6c44ccf319 | ||
|
|
f0b96a1538 | ||
|
|
b490d91572 | ||
|
|
48bf0504e8 | ||
|
|
d15ee91ea0 | ||
|
|
af6fd8796d | ||
|
|
b7a5a878d6 | ||
|
|
68100bda86 | ||
|
|
a7d652ddca | ||
|
|
b8f54de530 | ||
|
|
8f86e40b5d | ||
|
|
aced6e170f | ||
|
|
988b7caf3d | ||
|
|
abb71a0feb | ||
|
|
26e1a1c58d | ||
|
|
4b1ff82756 | ||
|
|
f668a5c8f9 | ||
|
|
7f1a5eea20 | ||
|
|
b24f8e27fa | ||
|
|
aae3ed0872 | ||
|
|
6de445eaa1 | ||
|
|
18b4925dd4 | ||
|
|
7dc4bb728b | ||
|
|
61efc6b834 | ||
|
|
4cc687e2cd | ||
|
|
ff1795fe96 | ||
|
|
92e49efdc6 | ||
|
|
f7a19e8b14 | ||
|
|
1fa8d217f9 | ||
|
|
09ec1ad864 | ||
|
|
0eb1c7d419 | ||
|
|
9824e18dbf | ||
|
|
b95306348d | ||
|
|
de43cc6cd5 | ||
|
|
de435f8e7b | ||
|
|
f2e006fde9 | ||
|
|
5f7c3a41f1 | ||
|
|
3fbe8c0b6c | ||
|
|
3933f77968 | ||
|
|
68fc8cd6ed | ||
|
|
47fbae7e0d | ||
|
|
82a4ffdc12 | ||
|
|
6386f178d4 | ||
|
|
102d226269 | ||
|
|
b399247652 | ||
|
|
263db42602 | ||
|
|
8136387a75 | ||
|
|
e65991aa03 | ||
|
|
a7846a64d0 | ||
|
|
5dfc6a663f | ||
|
|
0c45a24f48 | ||
|
|
762d5de441 | ||
|
|
5bfb55a27d | ||
|
|
87bb2f38db | ||
|
|
fb1575d875 | ||
|
|
c153bef170 | ||
|
|
2fcf6c80e9 | ||
|
|
2e6e71e3b6 | ||
|
|
004b946716 | ||
|
|
6400722712 | ||
|
|
d9ec28459e | ||
|
|
407c1d24af | ||
|
|
de6d8d1153 | ||
|
|
3eb10fc05b | ||
|
|
1ab6f77f95 | ||
|
|
c1b15b59db | ||
|
|
3dae5a6d47 | ||
|
|
ec3e2ab870 | ||
|
|
a2810d65de | ||
|
|
1713c04834 | ||
|
|
dab2646054 | ||
|
|
03bc0d2f22 | ||
|
|
ad0485d651 | ||
|
|
7764c4bdd7 | ||
|
|
46bbbccdc9 | ||
|
|
ee28417a4c | ||
|
|
5332ab9cac | ||
|
|
746ac1eec7 | ||
|
|
13c763b0e8 | ||
|
|
8b67c4fdd1 | ||
|
|
c3e658d46a | ||
|
|
5d0419075b | ||
|
|
ebded1a73b | ||
|
|
cf879a5c23 | ||
|
|
99ed27ca61 | ||
|
|
4aa3e5b34d | ||
|
|
303e6066e2 | ||
|
|
861cd15240 | ||
|
|
d695ddb91a | ||
|
|
7abb2edb2f | ||
|
|
dfe8abd496 | ||
|
|
61b384ee56 | ||
|
|
d71a890430 | ||
|
|
2c85a85fff | ||
|
|
ce6074530f | ||
|
|
e20228153c | ||
|
|
e431170435 | ||
|
|
c671d1e389 | ||
|
|
31a5e70b26 | ||
|
|
0c68c72b29 | ||
|
|
2b158fdf57 | ||
|
|
dd005b31a4 | ||
|
|
0b467cc149 | ||
|
|
46e2fdca00 | ||
|
|
983b06266b | ||
|
|
cb8708d2d9 | ||
|
|
adbec11c04 | ||
|
|
404f00c02b | ||
|
|
5d346205fc | ||
|
|
db3f1a7c09 | ||
|
|
d2599f1f9a | ||
|
|
ed88aafdc1 | ||
|
|
d94deed341 | ||
|
|
4b49d87a81 | ||
|
|
4a6281ebf6 | ||
|
|
332443fe81 | ||
|
|
96c784704a | ||
|
|
b0d10919d7 | ||
|
|
b0e4681b5f | ||
|
|
2958f6ea7f | ||
|
|
4d46f94975 | ||
|
|
4cc7e9ca98 | ||
|
|
7688a11ef9 | ||
|
|
80b182cc54 | ||
|
|
b6936e7ca4 | ||
|
|
1590326fc1 | ||
|
|
1a1eb3264f | ||
|
|
3d80a8aa39 | ||
|
|
6cca084e05 | ||
|
|
1c2c496f7e | ||
|
|
8ab60be68b | ||
|
|
f1fe363083 | ||
|
|
db619790be | ||
|
|
608749ce1a | ||
|
|
1135744520 | ||
|
|
c8d616e657 | ||
|
|
3f8a6e04c8 | ||
|
|
851cd8e037 | ||
|
|
7b3dae8bea | ||
|
|
e04ec0a00b | ||
|
|
0a61c26cc1 | ||
|
|
ff35c58787 | ||
|
|
0a464fa93a | ||
|
|
a9958e88d0 | ||
|
|
d3eb5907a4 | ||
|
|
a2017cc4c7 | ||
|
|
87124fdaf4 | ||
|
|
394c2b54ce | ||
|
|
7117f1ad62 | ||
|
|
713e267c16 | ||
|
|
3932ec21f5 | ||
|
|
76dc50b052 | ||
|
|
73749aa34c | ||
|
|
897932f954 | ||
|
|
5a2b469e8a | ||
|
|
ad38e6c15e | ||
|
|
f5c6fc13a8 | ||
|
|
7c8625821a | ||
|
|
8a696ad088 | ||
|
|
3c1ca8b70f | ||
|
|
87b0cee53a | ||
|
|
a56aa7e308 | ||
|
|
98220c5e74 | ||
|
|
964c886fb6 | ||
|
|
f6536aa1d2 | ||
|
|
ec1c861b13 | ||
|
|
ae07ed9445 | ||
|
|
82b94db408 | ||
|
|
54d716e4b6 | ||
|
|
a0330465dd | ||
|
|
af026cfe66 | ||
|
|
b7d5f6655d | ||
|
|
964dedba0f | ||
|
|
f13537e812 | ||
|
|
037f1bf09f | ||
|
|
9ee4212060 | ||
|
|
e3c60cb4d8 | ||
|
|
6fa325065e | ||
|
|
cc88c99c45 | ||
|
|
9d36ed6b1b | ||
|
|
a6b8843c5c | ||
|
|
9cf4dbd710 | ||
|
|
589335f665 | ||
|
|
1a04cac47c | ||
|
|
417c6d09bf | ||
|
|
c36cb4a76a | ||
|
|
e65b786b46 | ||
|
|
713f1486c3 | ||
|
|
a0d3447202 | ||
|
|
286999599a | ||
|
|
9b6fae2523 | ||
|
|
c250279b46 | ||
|
|
f687df335e | ||
|
|
aeec7866b4 | ||
|
|
b49c47516e | ||
|
|
3bf854c6c3 | ||
|
|
b55edb8ae9 | ||
|
|
78bc66668c | ||
|
|
f965abe7f1 | ||
|
|
509cb2471d | ||
|
|
3c273d817b | ||
|
|
21817ca97a | ||
|
|
b31e712d2c | ||
|
|
8f1ee11ff2 | ||
|
|
0cb80ace3f | ||
|
|
295a2bb8b8 | ||
|
|
dd6757be5b | ||
|
|
e90e4b27a3 | ||
|
|
2932ca6c2b | ||
|
|
06a685fc31 | ||
|
|
e06c20d2f6 | ||
|
|
e5527cf825 | ||
|
|
6864af1b2f | ||
|
|
87ff59bfa7 | ||
|
|
ecd407d924 | ||
|
|
ce55e7eed5 | ||
|
|
f9b3fed403 | ||
|
|
484f77bffc | ||
|
|
814e697675 | ||
|
|
e469c04125 | ||
|
|
a33e2cbd88 | ||
|
|
4ecccd67bd | ||
|
|
8af25b4c67 | ||
|
|
d6c30caf1b | ||
|
|
7025efa6f8 | ||
|
|
d0877eb6bc | ||
|
|
87c62b4319 | ||
|
|
9d3382d773 | ||
|
|
5333e92c42 | ||
|
|
f2c6d0a6b9 | ||
|
|
a7e217152b | ||
|
|
91c993da13 | ||
|
|
5e7423bdce | ||
|
|
ba48e15f5f | ||
|
|
4e407fb0b9 | ||
|
|
5d1963e0ec | ||
|
|
c9bb6b25e9 | ||
|
|
3bf433992e | ||
|
|
a3a82b9fe7 | ||
|
|
513f04d41b | ||
|
|
5b318a8aaf | ||
|
|
c75de7a096 | ||
|
|
2cd5140600 | ||
|
|
eaca3d6cc8 | ||
|
|
2ce89bf24b | ||
|
|
97cbd76e8e | ||
|
|
683bb7eb41 | ||
|
|
8b0fd0af85 | ||
|
|
80d177aa92 | ||
|
|
dea4ccbe58 |
20
.formal-git/components
Normal file
20
.formal-git/components
Normal file
@@ -0,0 +1,20 @@
|
||||
split-view
|
||||
kbs
|
||||
folders
|
||||
workspaces
|
||||
mods
|
||||
tests
|
||||
glance
|
||||
media
|
||||
images
|
||||
vendor
|
||||
tabs
|
||||
compact-mode
|
||||
common
|
||||
fonts
|
||||
welcome
|
||||
scripts
|
||||
workflows
|
||||
winsign
|
||||
flatpak
|
||||
configs
|
||||
1
.formal-git/template
Normal file
1
.formal-git/template
Normal file
@@ -0,0 +1 @@
|
||||
{type}: {message}, b=({bugId}), c={components}
|
||||
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -1 +1,4 @@
|
||||
*.patch linguist-language=C++
|
||||
*.d.ts linguist-language=TypeScript
|
||||
|
||||
src/zen/tests/*.js linguist-language=Test
|
||||
|
||||
22
.github/workflows/build.yml
vendored
22
.github/workflows/build.yml
vendored
@@ -475,7 +475,18 @@ jobs:
|
||||
if: ${{ inputs.create_release || inputs.update_branch == 'twilight' }}
|
||||
permissions: write-all
|
||||
name: Release
|
||||
needs: [build-data, linux, windows-step-3, check-release, mac-uni, appimage, source, lint, stop-self-hosted]
|
||||
needs:
|
||||
[
|
||||
build-data,
|
||||
linux,
|
||||
windows-step-3,
|
||||
check-release,
|
||||
mac-uni,
|
||||
appimage,
|
||||
source,
|
||||
lint,
|
||||
stop-self-hosted,
|
||||
]
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: ${{ inputs.update_branch == 'release' && 'Deploy-Release' || 'Deploy-Twilight' }}
|
||||
@@ -490,9 +501,6 @@ jobs:
|
||||
- name: Download artifact
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: List
|
||||
run: find .
|
||||
|
||||
- name: Checkout updates repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -503,7 +511,7 @@ jobs:
|
||||
- name: Download object files
|
||||
if: ${{ inputs.update_branch == 'release' }}
|
||||
run: |
|
||||
git clone https://github.com/zen-browser/windows-binaries.git .github/workflows/object
|
||||
git clone https://github.com/zen-browser/windows-binaries.git .github/workflows/object --depth 1
|
||||
|
||||
- name: Copy update manifests
|
||||
env:
|
||||
@@ -645,7 +653,7 @@ jobs:
|
||||
pwd
|
||||
ls .
|
||||
ls ..
|
||||
mv releases.xml ./build/flatpak/app.zen_browser.zen.metainfo.xml
|
||||
mv releases.xml ./flatpak/app.zen_browser.zen.metainfo.xml
|
||||
# output the version to the file
|
||||
echo -n ${{ needs.build-data.outputs.version }} > ./flatpak/version
|
||||
|
||||
@@ -707,7 +715,7 @@ jobs:
|
||||
--linux-archive zen.linux-x86_64.tar.xz \
|
||||
--linux-aarch64-archive zen.linux-aarch64.tar.xz \
|
||||
--output app.zen_browser.zen.yml \
|
||||
--template-root ./zen-browser/flatpak
|
||||
--template-root ./zen-browser/build/flatpak
|
||||
|
||||
- name: Commit changes
|
||||
run: |
|
||||
|
||||
@@ -5,6 +5,9 @@ on:
|
||||
- cron: '59 4 * * 2'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
check_candidates:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
5
.github/workflows/code-linter.yml
vendored
5
.github/workflows/code-linter.yml
vendored
@@ -10,8 +10,11 @@ on:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
pr-test:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
|
||||
5
.github/workflows/issue-metrics.yml
vendored
5
.github/workflows/issue-metrics.yml
vendored
@@ -1,4 +1,7 @@
|
||||
name: Monthly issue metrics
|
||||
permissions:
|
||||
contents: write
|
||||
issues: read
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
@@ -59,6 +62,6 @@ jobs:
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: 'Update monthly issue metrics'
|
||||
commit_message: 'docs: Update monthly issue metrics, b=(no bug), c={docs}'
|
||||
commit_user_name: Zen Browser Robot
|
||||
commit_user_email: zen-browser-auto@users.noreply.github.com
|
||||
|
||||
17
.github/workflows/macos-release-build.yml
vendored
17
.github/workflows/macos-release-build.yml
vendored
@@ -1,4 +1,6 @@
|
||||
name: macOS Release Build
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -24,7 +26,7 @@ on:
|
||||
jobs:
|
||||
mac-build:
|
||||
name: Build macOS - ${{ matrix.arch }}
|
||||
runs-on: ${{ inputs.release-branch == 'release' && 'macos-14' || 'macos-14' }}
|
||||
runs-on: macos-15
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -113,19 +115,20 @@ jobs:
|
||||
- name: Download Firefox source and dependencies
|
||||
run: npm run download
|
||||
|
||||
- name: Import
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
run: npm run import -- --verbose
|
||||
|
||||
- name: Bootstrap
|
||||
run: |
|
||||
cd engine
|
||||
export SURFER_PLATFORM="darwin"
|
||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||
./mach --no-interactive bootstrap --application-choice browser --no-system-changes
|
||||
# Always exist with 0, even if bootstrap fails
|
||||
./mach --no-interactive bootstrap --application-choice browser --no-system-changes --exclude macos-sdk || true
|
||||
cd ..
|
||||
|
||||
- name: Import
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
run: npm run import -- --verbose
|
||||
|
||||
- name: Build language packs
|
||||
run: sh scripts/download-language-packs.sh
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ on:
|
||||
jobs:
|
||||
mac-build:
|
||||
name: Unify macOS (Universal)
|
||||
runs-on: 'macos-14'
|
||||
runs-on: 'macos-15'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -83,7 +83,7 @@ jobs:
|
||||
cd engine
|
||||
export SURFER_PLATFORM="darwin"
|
||||
export PATH="$(python3 -m site --user-base)/bin":$PATH
|
||||
./mach --no-interactive bootstrap --application-choice browser --no-system-changes
|
||||
./mach --no-interactive bootstrap --application-choice browser --no-system-changes || true
|
||||
cd ..
|
||||
|
||||
- name: Import
|
||||
|
||||
2
.github/workflows/pr-test.yml
vendored
2
.github/workflows/pr-test.yml
vendored
@@ -1,4 +1,6 @@
|
||||
name: Pull request test
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
@@ -25,7 +25,7 @@ EOF
|
||||
if [ "$RELEASE_BRANCH" = "release" ]; then
|
||||
echo "${EXTRA_NOTES}" >> "release_notes.md"
|
||||
|
||||
if echo "$LATEST_RELEASE" | jq -e 'has("features")' > /dev/null; then
|
||||
if echo "$LATEST_RELEASE" | jq -e '(.features // []) | length > 0' > /dev/null; then
|
||||
cat << EOF >> "release_notes.md"
|
||||
|
||||
## New Features
|
||||
@@ -33,7 +33,7 @@ $(echo "$LATEST_RELEASE" | jq -r '.features[] | "- " + .')
|
||||
EOF
|
||||
fi
|
||||
|
||||
if echo "$LATEST_RELEASE" | jq -e 'has("fixes")' > /dev/null; then
|
||||
if echo "$LATEST_RELEASE" | jq -e '(.fixes // []) | length > 0' > /dev/null; then
|
||||
cat << EOF >> "release_notes.md"
|
||||
|
||||
## Fixes
|
||||
@@ -41,7 +41,7 @@ EOF
|
||||
echo "$LATEST_RELEASE" | jq -r '.fixes[] | if type=="object" then "- " + .description + " ([#" + (.issue|tostring) + "](" + "https://github.com/zen-browser/desktop/issues/" + (.issue|tostring) + "))" else "- " + . end' >> "release_notes.md"
|
||||
fi
|
||||
|
||||
if echo "$LATEST_RELEASE" | jq -e 'has("breakingChanges")' > /dev/null; then
|
||||
if echo "$LATEST_RELEASE" | jq -e '(.breakingChanges // []) | length > 0' > /dev/null; then
|
||||
cat << EOF >> "release_notes.md"
|
||||
|
||||
## Breaking Changes
|
||||
@@ -49,7 +49,7 @@ EOF
|
||||
echo "$LATEST_RELEASE" | jq -r '.breakingChanges[] | if type=="string" then "- " + . else "- " + .description + " [Learn more](" + .link + ")" end' >> "release_notes.md"
|
||||
fi
|
||||
|
||||
if echo "$LATEST_RELEASE" | jq -e 'has("themeChanges")' > /dev/null; then
|
||||
if echo "$LATEST_RELEASE" | jq -e '(.themeChanges // []) | length > 0' > /dev/null; then
|
||||
cat << EOF >> "release_notes.md"
|
||||
|
||||
## Theme Changes
|
||||
|
||||
2
.github/workflows/src/release-build.sh
vendored
2
.github/workflows/src/release-build.sh
vendored
@@ -3,7 +3,7 @@
|
||||
set -xe
|
||||
|
||||
if command -v apt-get &> /dev/null; then
|
||||
sudo add-apt-repository ppa:kisak/kisak-mesa
|
||||
sudo apt-get install python3-launchpadlib
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y xvfb libnvidia-egl-wayland1 mesa-utils libgl1-mesa-dri
|
||||
fi
|
||||
|
||||
@@ -10,11 +10,6 @@ on:
|
||||
required: false
|
||||
type: boolean
|
||||
default: true
|
||||
use-sccache:
|
||||
description: 'Use sccache'
|
||||
required: false
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
jobs:
|
||||
twilight-release-schedule:
|
||||
@@ -25,7 +20,7 @@ jobs:
|
||||
with:
|
||||
create_release: ${{ github.event_name != 'workflow_dispatch' && true || inputs.create_release }}
|
||||
update_branch: twilight
|
||||
use-sccache: ${{ github.event_name != 'workflow_dispatch' && false || inputs.use-sccache }}
|
||||
use-sccache: false
|
||||
update_version: false
|
||||
|
||||
post-build:
|
||||
|
||||
10
.github/workflows/windows-profile-build.yml
vendored
10
.github/workflows/windows-profile-build.yml
vendored
@@ -1,5 +1,8 @@
|
||||
name: Windows PGO Builds
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
@@ -65,7 +68,7 @@ jobs:
|
||||
- name: Setup
|
||||
run: |
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe", "C:\MozillaBuildSetup-Latest.exe")
|
||||
C:\MozillaBuildSetup-Latest.exe /S
|
||||
C:\MozillaBuildSetup-Latest.exe /S | out-null
|
||||
|
||||
- name: Download Firefox and dependencies
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
@@ -82,15 +85,16 @@ jobs:
|
||||
- name: Generate
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
run: |
|
||||
ls
|
||||
$Env:USE_MINTTY = "0"
|
||||
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\", "/"
|
||||
$workspace_dir = $workspace_dir_current + "/engine"
|
||||
echo $workspace_dir
|
||||
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
|
||||
echo 'export PATH=/c/mozilla-build/msys2/usr/bin:$PATH' '' >> mozilla-build-run.sh
|
||||
echo './mach --no-interactive bootstrap --application-choice browser' '' >> mozilla-build-run.sh
|
||||
echo 'LLVM_PROFDATA=/c/Users/runneradmin/.mozbuild/clang/bin/llvm-profdata.exe JARLOG_FILE=en-US.log ./mach python build/pgo/profileserver.py --binary /c/artifact/zen/zen.exe' '' >> mozilla-build-run.sh
|
||||
echo 'Running Profile Build:'
|
||||
C:\mozilla-build\start-shell.bat mozilla-build-run.sh
|
||||
C:\mozilla-build\start-shell.bat $workspace_dir_current\mozilla-build-run.sh
|
||||
|
||||
- name: Move profile data
|
||||
if: ${{ matrix.arch == 'x86_64' }}
|
||||
|
||||
37
.github/workflows/windows-release-build.yml
vendored
37
.github/workflows/windows-release-build.yml
vendored
@@ -1,5 +1,8 @@
|
||||
name: Windows Release Build
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
@@ -111,6 +114,7 @@ jobs:
|
||||
set -x
|
||||
mkdir -p ~/win-cross
|
||||
cd engine/
|
||||
sudo apt-get install python3-launchpadlib
|
||||
sudo add-apt-repository ppa:savoury1/backports
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y python3-pip autoconf \
|
||||
@@ -161,6 +165,12 @@ jobs:
|
||||
echo Setup Visual Studio
|
||||
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
|
||||
|
||||
- name: Import
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
run: npm run import -- --verbose
|
||||
|
||||
- name: Bootstrap
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
run: |
|
||||
@@ -196,12 +206,6 @@ jobs:
|
||||
echo "" >> ../configs/common/mozconfig
|
||||
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.58.0" >> ../configs/common/mozconfig
|
||||
|
||||
- name: Import
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
env:
|
||||
SURFER_COMPAT: ${{ matrix.arch }}
|
||||
run: npm run import -- --verbose
|
||||
|
||||
- name: Build language packs
|
||||
if: ${{ !(inputs.generate-gpo && matrix.arch == 'aarch64') }}
|
||||
run: sh scripts/download-language-packs.sh
|
||||
@@ -280,21 +284,24 @@ jobs:
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
run: |
|
||||
set -x
|
||||
if test "${{ matrix.arch }}" = "aarch64"; then
|
||||
find engine/obj-aarch64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type d -not -name 'dist' -exec rm -rf {} \;
|
||||
find engine/obj-aarch64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type f -not -name 'dist' -exec rm -f {} \;
|
||||
else
|
||||
find engine/obj-x86_64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type d -not -name 'dist' -exec rm -rf {} \;
|
||||
find engine/obj-x86_64-pc-windows-msvc/ -mindepth 1 -maxdepth 1 -type f -not -name 'dist' -exec rm -f {} \;
|
||||
fi
|
||||
mkdir obj-${{ matrix.arch }}-pc-windows-msvc/
|
||||
|
||||
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/_tests
|
||||
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/config/autoconf.mk
|
||||
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/config.statusd/substs/
|
||||
rm -rf engine/obj-${{ matrix.arch }}-pc-windows-msvc/dist/install
|
||||
|
||||
find engine/obj-${{ matrix.arch }}-pc-windows-msvc/dist -maxdepth 1 -type f -name "*.zip" -delete
|
||||
|
||||
cp -r --no-dereference engine/obj-${{ matrix.arch }}-pc-windows-msvc/* obj-${{ matrix.arch }}-pc-windows-msvc/ || true
|
||||
|
||||
- name: Upload dist object
|
||||
if: ${{ !inputs.generate-gpo }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
retention-days: 5
|
||||
retention-days: 2
|
||||
name: windows-x64-obj-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}
|
||||
path: engine/obj-${{ matrix.arch == 'aarch64' && 'aarch64' || 'x86_64' }}-pc-windows-msvc/
|
||||
path: obj-${{ matrix.arch }}-pc-windows-msvc
|
||||
|
||||
- name: Upload artifact (if Twilight branch, binary)
|
||||
if: ${{ inputs.release-branch == 'twilight' && !inputs.generate-gpo }}
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -11,3 +11,6 @@ windsign-temp/
|
||||
venv/
|
||||
|
||||
!firefox-cache/
|
||||
win-cross/
|
||||
|
||||
!firefox-patches/
|
||||
|
||||
@@ -9,6 +9,8 @@ engine/
|
||||
|
||||
**/*.svg
|
||||
|
||||
**/*.inc.css
|
||||
|
||||
surfer.json
|
||||
|
||||
src/browser/app/profile/*.js
|
||||
@@ -22,9 +24,10 @@ docs/issue-metrics/*.md
|
||||
|
||||
# Some CSS files are preprocessed and prettier doesn't handle them well
|
||||
# We also dont want to format the CSS files that are generated by the build
|
||||
src/browser/base/content/zen-styles/zen-tabs/vertical-tabs.css
|
||||
src/browser/base/content/zen-styles/zen-compact-mode.css
|
||||
src/browser/base/zen-components/ZenEmojies.mjs
|
||||
build/codesign/codesign.bash
|
||||
src/zen/tabs/zen-tabs.css
|
||||
src/zen/compact-mode/zen-compact-mode.css
|
||||
src/zen/common/ZenEmojies.mjs
|
||||
|
||||
src/zen/workspaces/zen-workspaces.css
|
||||
|
||||
*.inc
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
"useTabs": false,
|
||||
"jsxSingleQuote": false,
|
||||
"semi": true,
|
||||
"printWidth": 128,
|
||||
"printWidth": 100,
|
||||
"plugins": ["prettier-plugin-sh"]
|
||||
}
|
||||
|
||||
30
.vscode/settings.json
vendored
30
.vscode/settings.json
vendored
@@ -1,30 +0,0 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"*.inc": "cpp",
|
||||
"typeindex": "cpp",
|
||||
"typeinfo": "cpp",
|
||||
"functional": "cpp",
|
||||
"array": "cpp",
|
||||
"*.tcc": "cpp",
|
||||
"memory": "cpp",
|
||||
"future": "cpp",
|
||||
"istream": "cpp",
|
||||
"tuple": "cpp",
|
||||
"utility": "cpp",
|
||||
"variant": "cpp",
|
||||
"compare": "cpp",
|
||||
"thread": "cpp",
|
||||
"string": "cpp",
|
||||
"string_view": "cpp",
|
||||
"span": "cpp",
|
||||
"vector": "cpp",
|
||||
"charconv": "cpp",
|
||||
"chrono": "cpp",
|
||||
"optional": "cpp",
|
||||
"format": "cpp",
|
||||
"ratio": "cpp",
|
||||
"system_error": "cpp",
|
||||
"regex": "cpp",
|
||||
"type_traits": "cpp"
|
||||
}
|
||||
}
|
||||
1
.well-known/funding-manifest-urls
Normal file
1
.well-known/funding-manifest-urls
Normal file
@@ -0,0 +1 @@
|
||||
https://zen-browser.app/funding.json
|
||||
15
README.md
15
README.md
@@ -1,3 +1,4 @@
|
||||
<!-- TODO: Get a job -->
|
||||
<img src="./docs/assets/zen-dark.svg" width="100px" align="left">
|
||||
|
||||
### `Zen Browser`
|
||||
@@ -28,9 +29,9 @@
|
||||
|
||||
## 🖥️ Compatibility
|
||||
|
||||
Zen is currently built using Firefox version `136.0.2`! 🚀
|
||||
Zen is currently built using Firefox version `139.0`! 🚀
|
||||
|
||||
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 136.0`!
|
||||
- [`Zen Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 139.0`!
|
||||
- Check out the latest [release notes](https://zen-browser.app/release-notes)!
|
||||
- Part of our mission is to keep Zen up-to-date with the latest version of Firefox, so you can enjoy the latest features and security updates!
|
||||
|
||||
@@ -57,10 +58,6 @@ Zen is divided into 2 main branches. We use `dev` for development and `stable` f
|
||||
|
||||
We divide into 2 branches in case there's any really important security update (for example) that needs to be released before the next stable release. This allows us to do patches without releasing unstable versions to the public.
|
||||
|
||||
## ⚡ Performance
|
||||
|
||||
Zen is built with performance in mind, and we have optimized the browser to be as fast as possible! Checkout the latest [performance benchmarks](https://docs.zen-browser.app/benchmarks)!
|
||||
|
||||
## 📥 Installation
|
||||
|
||||
### Supported Operating Systems
|
||||
@@ -85,7 +82,7 @@ winget install --id Zen-Team.Zen-Browser
|
||||
You can also install Zen using Homebrew:
|
||||
|
||||
```
|
||||
brew install --cask zen-browser
|
||||
brew install zen-browser
|
||||
```
|
||||
|
||||
#### Linux
|
||||
@@ -118,11 +115,11 @@ To upgrade the browser to a newer version, use the embedded update functionality
|
||||
|
||||
## 👨💻 Development and Contributing
|
||||
|
||||
Some components used by @zen-browser as an attempt to make firefox forks a better place, and for other to enjoy the beauty of OSS. You can find them [here](https://github.com/zen-browser/desktop/tree/dev/src/browser/base/zen-components).
|
||||
Some components used by @zen-browser as an attempt to make Firefox forks a better place, and for other to enjoy the beauty of OSS. You can find them [here](https://github.com/zen-browser/desktop/tree/dev/src/zen).
|
||||
|
||||
#### `Run Locally`
|
||||
|
||||
In order to download and run Zen locally, please follow [these instructions](https://docs.zen-browser.app/building).
|
||||
In order to download and run Zen locally, please follow [these instructions](https://docs.zen-browser.app/guides/building).
|
||||
|
||||
#### `Special Thanks`
|
||||
|
||||
|
||||
5
SECURITY.md
Normal file
5
SECURITY.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please report security vulnerabilities [here](https://github.com/zen-browser/desktop/security/advisories/new)
|
||||
3
babel.config.json
Normal file
3
babel.config.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"presets": ["@babel/preset-typescript"]
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
e834aca3620253ea774e85826e43dd55e0c4f8b2
|
||||
da30619f3ea895b356ded705b8dff9e4f271198f
|
||||
@@ -49,6 +49,12 @@ modules:
|
||||
strip-components: 0
|
||||
only-arches:
|
||||
- x86_64
|
||||
x-checker-data:
|
||||
type: json
|
||||
url: https://api.github.com/repos/zen-browser/desktop/releases/latest
|
||||
version-query: .tag_name
|
||||
url-query: .assets[] | select(.name=="zen.linux-x86_64.tar.xz") | .browser_download_url
|
||||
is-main-source: true
|
||||
|
||||
- type: archive
|
||||
url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-aarch64.tar.xz
|
||||
@@ -56,6 +62,12 @@ modules:
|
||||
strip-components: 0
|
||||
only-arches:
|
||||
- aarch64
|
||||
x-checker-data:
|
||||
type: json
|
||||
url: https://api.github.com/repos/zen-browser/desktop/releases/latest
|
||||
version-query: .tag_name
|
||||
url-query: .assets[] | select(.name=="zen.linux-aarch64.tar.xz") | .browser_download_url
|
||||
is-main-source: true
|
||||
|
||||
- type: archive
|
||||
url: https://github.com/zen-browser/flatpak/releases/download/{version}/archive.tar
|
||||
|
||||
10
build/ts/transform-ts.js
Normal file
10
build/ts/transform-ts.js
Normal file
@@ -0,0 +1,10 @@
|
||||
const fs = require('fs');
|
||||
const MJS_FILES = ['src/zen/split-view/ZenViewSplitter.ts'];
|
||||
|
||||
for (const file of MJS_FILES) {
|
||||
const code = fs.readFileSync(file, 'utf8');
|
||||
require('@babel/core').transformSync(code, {
|
||||
presets: ['@babel/preset-typescript'],
|
||||
filename: file,
|
||||
});
|
||||
}
|
||||
9
build/winsign/bootstrap.ps1
Normal file
9
build/winsign/bootstrap.ps1
Normal file
@@ -0,0 +1,9 @@
|
||||
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe", "C:\MozillaBuildSetup-Latest.exe")
|
||||
C:\MozillaBuildSetup-Latest.exe /S | out-null
|
||||
|
||||
rustup target add aarch64-pc-windows-msvc
|
||||
rustup target add x86_64-pc-windows-msvc
|
||||
|
||||
cd engine
|
||||
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ../win-cross/vs2022
|
||||
cd ..
|
||||
@@ -6,7 +6,7 @@ param(
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
echo "Preparing environment"
|
||||
git pull --recurse-submodules
|
||||
git pull --recurse
|
||||
mkdir windsign-temp -ErrorAction SilentlyContinue
|
||||
|
||||
# Download in parallel
|
||||
@@ -19,40 +19,145 @@ mkdir windsign-temp -ErrorAction SilentlyContinue
|
||||
# echo "Downloaded git objects repo to"
|
||||
#} -Verbose -ArgumentList $PWD -Debug
|
||||
|
||||
gh run download $GithubRunId --name windows-x64-obj-arm64 -D windsign-temp\windows-x64-obj-arm64
|
||||
echo "Downloaded arm64 artifacts"
|
||||
gh run download $GithubRunId --name windows-x64-obj-x86_64 -D windsign-temp\windows-x64-obj-x86_64
|
||||
echo "Downloaded x86_64 artifacts"
|
||||
Start-Job -Name "DownloadGitl10n" -ScriptBlock {
|
||||
param($PWD)
|
||||
cd $PWD
|
||||
$env:ZEN_L10N_CURR_DIR=[regex]::replace($PWD, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\", "/"
|
||||
C:\mozilla-build\start-shell.bat $PWD\scripts\download-language-packs.sh
|
||||
echo "Fetched l10n and Firefox's one"
|
||||
} -Verbose -ArgumentList $PWD -Debug
|
||||
|
||||
Start-Job -Name "SurferInit" -ScriptBlock {
|
||||
param($PWD)
|
||||
cd $PWD
|
||||
npm run import -- --verbose
|
||||
npm run surfer -- ci --brand release
|
||||
} -Verbose -ArgumentList $PWD -Debug
|
||||
|
||||
#Wait-Job -Name "DownloadGitObjectsRepo"
|
||||
echo "Downloading artifacts info"
|
||||
$artifactsInfo=gh api repos/zen-browser/desktop/actions/runs/$GithubRunId/artifacts
|
||||
$token = gh auth token
|
||||
|
||||
function New-TemporaryDirectory {
|
||||
$tmp = [System.IO.Path]::GetTempPath() # Not $env:TEMP, see https://stackoverflow.com/a/946017
|
||||
$name = (New-Guid).ToString("N")
|
||||
New-Item -ItemType Directory -Path (Join-Path $tmp $name)
|
||||
}
|
||||
|
||||
function DownloadFile($url, $targetFile) {
|
||||
$uri = New-Object "System.Uri" "$url"
|
||||
$request = [System.Net.HttpWebRequest]::Create($uri)
|
||||
$request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
|
||||
$request.Headers.Add("Authorization", "Bearer $token")
|
||||
$response = $request.GetResponse()
|
||||
$totalLength = [System.Math]::Floor($response.get_ContentLength()/1024)
|
||||
$responseStream = $response.GetResponseStream()
|
||||
$targetStream = New-Object -TypeName System.IO.FileStream -ArgumentList $targetFile, Create
|
||||
$buffer = new-object byte[] 10KB
|
||||
$count = $responseStream.Read($buffer,0,$buffer.length)
|
||||
$downloadedBytes = $count
|
||||
|
||||
while ($count -gt 0) {
|
||||
$targetStream.Write($buffer, 0, $count)
|
||||
$count = $responseStream.Read($buffer,0,$buffer.length)
|
||||
$downloadedBytes = $downloadedBytes + $count
|
||||
Write-Progress -activity "Downloading file '$($url.split('/') | Select -Last 1)'" -status "Downloaded ($([System.Math]::Floor($downloadedBytes/1024))K of $($totalLength)K): " -PercentComplete ((([System.Math]::Floor($downloadedBytes/1024)) / $totalLength) * 100)
|
||||
}
|
||||
|
||||
Write-Progress -activity "Finished downloading file '$($url.split('/') | Select -Last 1)'"
|
||||
|
||||
$targetStream.Flush()
|
||||
$targetStream.Close()
|
||||
$targetStream.Dispose()
|
||||
$responseStream.Dispose()
|
||||
}
|
||||
|
||||
function DownloadArtifacts($name) {
|
||||
echo "Downloading artifacts for $name"
|
||||
$artifactUrl=$($artifactsInfo | jq -r --arg NAME "windows-x64-obj-$name" '.artifacts[] | select(.name == $NAME) | .archive_download_url')
|
||||
echo "Artifact URL: $artifactUrl"
|
||||
|
||||
# download the artifact
|
||||
$outputPath="$PWD\windsign-temp\windows-x64-obj-$name"
|
||||
$tempDir = New-TemporaryDirectory
|
||||
$tempFile = Join-Path $tempDir "artifact-$($name).zip"
|
||||
|
||||
echo "Downloading artifact to $tempFile"
|
||||
DownloadFile $artifactUrl $tempFile
|
||||
|
||||
Start-Job -Name "UnzipArtifact$name" -ScriptBlock {
|
||||
param($tempFile, $outputPath)
|
||||
echo "Unzipping artifact to $outputPath"
|
||||
Expand-Archive -Path $tempFile -DestinationPath $outputPath -Force
|
||||
echo "Unzipped artifact to $outputPath"
|
||||
} -ArgumentList $tempFile, $outputPath -Verbose -Debug
|
||||
}
|
||||
|
||||
DownloadArtifacts arm64
|
||||
DownloadArtifacts x86_64
|
||||
|
||||
# Wait for the jobs to finish
|
||||
Wait-Job -Name "UnzipArtifactarm64"
|
||||
Wait-Job -Name "UnzipArtifactx86_64"
|
||||
|
||||
mkdir engine\obj-x86_64-pc-windows-msvc\ -ErrorAction SilentlyContinue
|
||||
|
||||
npm run surfer -- ci --brand release
|
||||
# Collect all .exe and .dll files into a list
|
||||
$files = Get-ChildItem windsign-temp\windows-x64-obj-x86_64\ -Recurse -Include *.exe
|
||||
$files += Get-ChildItem windsign-temp\windows-x64-obj-x86_64\ -Recurse -Include *.dll
|
||||
|
||||
$files += Get-ChildItem windsign-temp\windows-x64-obj-arm64\ -Recurse -Include *.exe
|
||||
$files += Get-ChildItem windsign-temp\windows-x64-obj-arm64\ -Recurse -Include *.dll
|
||||
|
||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
||||
|
||||
$env:ZEN_RELEASE="true"
|
||||
$env:SURFER_SIGNING_MODE="true"
|
||||
Wait-Job -Name "SurferInit"
|
||||
Wait-Job -Name "DownloadGitl10n"
|
||||
|
||||
function SignAndPackage($name) {
|
||||
echo "Executing on $name"
|
||||
rmdir .\dist -Recurse -ErrorAction SilentlyContinue
|
||||
rmdir engine\obj-x86_64-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
||||
cp windsign-temp\windows-x64-obj-$name engine\obj-x86_64-pc-windows-msvc\ -Recurse
|
||||
echo "Signing $name"
|
||||
rmdir engine\obj-$name-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
||||
$objName=$name
|
||||
# instead of arm, use aarch64
|
||||
if ($name -eq "arm64") {
|
||||
$objName="aarch64"
|
||||
}
|
||||
|
||||
# Collect all .exe and .dll files into a list
|
||||
$files = Get-ChildItem engine\obj-x86_64-pc-windows-msvc\ -Recurse -Include *.exe
|
||||
$files += Get-ChildItem engine\obj-x86_64-pc-windows-msvc\ -Recurse -Include *.dll
|
||||
echo "Removing old obj dir"
|
||||
rmdir engine\obj-$objName-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
||||
echo "Packaging $name"
|
||||
$env:SURFER_SIGNING_MODE="sign"
|
||||
$env:MAR="$PWD\\build\\winsign\\mar.exe"
|
||||
echo "Creating new obj dir"
|
||||
cp windsign-temp\windows-x64-obj-$name engine\obj-$objName-pc-windows-msvc\ -Recurse
|
||||
|
||||
echo "Copying setup.exe into obj dir"
|
||||
$env:ZEN_SETUP_EXE_PATH="$PWD\windsign-temp\windows-x64-obj-$name\browser\installer\windows\instgen\setup.exe"
|
||||
|
||||
if ($name -eq "arm64") {
|
||||
$env:WIN32_REDIST_DIR="$PWD\win-cross\vs2022\VC\Redist\MSVC\14.38.33135\arm64\Microsoft.VC143.CRT"
|
||||
} else {
|
||||
$env:WIN32_REDIST_DIR="$PWD\win-cross\vs2022\VC\Redist\MSVC\14.38.33135\x64\Microsoft.VC143.CRT"
|
||||
}
|
||||
|
||||
$env:MAR="..\\build\\winsign\\mar.exe"
|
||||
if ($name -eq "arm64") {
|
||||
$env:SURFER_COMPAT="aarch64"
|
||||
} else {
|
||||
$env:SURFER_COMPAT="x86_64"
|
||||
}
|
||||
|
||||
echo "Compat Mode? $env:SURFER_COMPAT"
|
||||
|
||||
# Configure each time since we are cloning from a linux environment into
|
||||
# a windows environment, and the build system is not smart enough to detect that
|
||||
# we are on a different platform.
|
||||
cd .\engine
|
||||
echo "Configuring for $name"
|
||||
.\mach configure
|
||||
cd ..
|
||||
|
||||
echo "Packaging $name"
|
||||
npm run package -- --verbose
|
||||
|
||||
# In the release script, we do the following:
|
||||
@@ -62,7 +167,6 @@ function SignAndPackage($name) {
|
||||
# - update_manifest/*
|
||||
# - windows.mar
|
||||
# - zen.installer.exe
|
||||
# - zen.win-x86_64.zip
|
||||
echo "Creating tar for $name"
|
||||
rm .\windsign-temp\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
|
||||
mkdir windsign-temp\windows-x64-signed-$name
|
||||
@@ -83,30 +187,13 @@ function SignAndPackage($name) {
|
||||
mv .\dist\zen.installer.exe windsign-temp\windows-x64-signed-$name\zen.installer.exe
|
||||
}
|
||||
|
||||
# Move the zip
|
||||
echo "Moving zip for $name"
|
||||
if ($name -eq "arm64") {
|
||||
mv (Get-Item .\dist\*.en-US.win64-aarch64.zip) windsign-temp\windows-x64-signed-$name\zen.win-arm64.zip
|
||||
} else {
|
||||
mv (Get-Item .\dist\*.en-US.win64.zip) windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
|
||||
}
|
||||
|
||||
# Extract the zip, sign everything inside, and repackage it
|
||||
Expand-Archive -Path windsign-temp\windows-x64-signed-$name\zen.win-$name.zip -DestinationPath windsign-temp\windows-x64-signed-$name\zen.win-$name
|
||||
rm windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
|
||||
$files = Get-ChildItem windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -Include *.exe
|
||||
$files += Get-ChildItem windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -Include *.dll
|
||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
||||
Compress-Archive -Path windsign-temp\windows-x64-signed-$name\zen.win-$name -DestinationPath windsign-temp\windows-x64-signed-$name\zen.win-$name.zip
|
||||
rmdir windsign-temp\windows-x64-signed-$name\zen.win-$name -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
# Move the manifest
|
||||
mv .\dist\update\. windsign-temp\windows-x64-signed-$name\update_manifest
|
||||
|
||||
echo "Invoking tar for $name"
|
||||
# note: We need to sign it into a parent folder, called windows-x64-signed-$name
|
||||
rmdir .\windsign-temp\windows-binaries\windows-x64-signed-$name -Recurse -ErrorAction SilentlyContinue
|
||||
mv windsign-temp\windows-x64-signed-$name .\windsign-temp\windows-binaries -Force
|
||||
rmdir engine\obj-$objName-pc-windows-msvc\ -Recurse -ErrorAction SilentlyContinue
|
||||
|
||||
echo "Finished $name"
|
||||
}
|
||||
@@ -114,6 +201,9 @@ function SignAndPackage($name) {
|
||||
SignAndPackage arm64
|
||||
SignAndPackage x86_64
|
||||
|
||||
$files = Get-ChildItem .\windsign-temp\windows-binaries -Recurse -Include *.exe
|
||||
signtool.exe sign /n "$SignIdentity" /t http://time.certum.pl/ /fd sha256 /v $files
|
||||
|
||||
echo "All artifacts signed and packaged, ready for release!"
|
||||
echo "Commiting the changes to the repository"
|
||||
cd windsign-temp\windows-binaries
|
||||
|
||||
@@ -107,6 +107,9 @@ mk_add_options MOZ_DATA_REPORTING=
|
||||
mk_add_options MOZ_SERVICES_HEALTHREPORT=
|
||||
mk_add_options MOZ_TELEMETRY_REPORTING=
|
||||
|
||||
ac_add_options MOZ_DATA_REPORTING=
|
||||
ac_add_options MOZ_TELEMETRY_REPORTING=
|
||||
|
||||
# Allow loading unsigned extensions
|
||||
export MOZ_REQUIRE_SIGNING=
|
||||
mk_add_options MOZ_REQUIRE_SIGNING=
|
||||
|
||||
@@ -3,8 +3,6 @@ unset MOZ_STDCXX_COMPAT
|
||||
ac_add_options --disable-dmd
|
||||
ac_add_options --enable-eme=widevine
|
||||
|
||||
export MOZ_MACBUNDLE_ID=${appId}
|
||||
|
||||
# override LTO settings
|
||||
# TODO: Dont use LTO for now, it's causing a lot of issues
|
||||
export MOZ_LTO=cross,thin
|
||||
|
||||
@@ -17,7 +17,6 @@ if test "$ZEN_CROSS_COMPILING"; then
|
||||
else
|
||||
export WIN32_REDIST_DIR="$(echo ~)/win-cross/vs2022/VC/Redist/MSVC/14.38.33135/x64/Microsoft.VC143.CRT"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
#? https://bugzilla.mozilla.org/show_bug.cgi?id=1617793
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
| video playing windows go blank for split second | https://github.com/zen-browser/desktop/issues/3313 | None | None |
|
||||
| Light mode makes some buttons look disabled | https://github.com/zen-browser/desktop/issues/3312 | 0:40:59 | 20 days, 19:57:32 |
|
||||
| Tabs unloading with the feature disabled | https://github.com/zen-browser/desktop/issues/3311 | None | None |
|
||||
| Default browser settings changes to firefox when i close the Zen | https://github.com/zen-browser/desktop/issues/3310 | None | None |
|
||||
| Default browser settings changes to Firefox when i close the Zen | https://github.com/zen-browser/desktop/issues/3310 | None | None |
|
||||
| zen.source.tar.gz is incorrectly named, should be .tar.zst instead | https://github.com/zen-browser/desktop/issues/3308 | None | None |
|
||||
| Tab temporarely is compacted to the width of my sidebar before loading in when switching from a split-view | https://github.com/zen-browser/desktop/issues/3307 | None | None |
|
||||
| Pre-assigned url to a container, and associate a container to a workspace, but that chain is broken | https://github.com/zen-browser/desktop/issues/3306 | None | 9 days, 21:18:59 |
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
| "Show all tabs" keyboard shortcut not working | https://github.com/zen-browser/desktop/issues/3765 | 4:43:13 | None |
|
||||
| URL bar missing on windows of different workspaces | https://github.com/zen-browser/desktop/issues/3764 | 1 day, 12:20:03 | 9 days, 9:18:05 |
|
||||
| The tab pane shakes in compact mode when hovering on the buttons | https://github.com/zen-browser/desktop/issues/3763 | None | 9 days, 3:05:22 |
|
||||
| this last update is GARBAGE!!! why would you do that to the address bar when you click once it moves to the center. and the new logo sucks. im probably going back to firefox | https://github.com/zen-browser/desktop/issues/3762 | 2:15:10 | 17:24:07 |
|
||||
| this last update is GARBAGE!!! why would you do that to the address bar when you click once it moves to the center. and the new logo sucks. im probably going back to Firefox | https://github.com/zen-browser/desktop/issues/3762 | 2:15:10 | 17:24:07 |
|
||||
| Floating Web Panel Disappears When Clicking elsewhere on the Screen | https://github.com/zen-browser/desktop/issues/3759 | 18:57:22 | 18:57:22 |
|
||||
| Visual problems occur when playing embedded videos on websites presented in picture-in-picture mode in zen browser using it under GNU/Linux. | https://github.com/zen-browser/desktop/issues/3758 | 21:40:26 | 1 day, 0:38:06 |
|
||||
| URL Bar weird behaviour on compact mode and shortcuts | https://github.com/zen-browser/desktop/issues/3757 | 14:46:59 | 4 days, 21:05:40 |
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
| Compact mode won't disable after changing which toolbars are hidden | https://github.com/zen-browser/desktop/issues/4649 | 16:26:34 | None |
|
||||
| Problem with tab bar and top bar | https://github.com/zen-browser/desktop/issues/4648 | 7:28:57 | None |
|
||||
| Excessive margin between bookmark sidebar and center pane | https://github.com/zen-browser/desktop/issues/4647 | 7:37:12 | None |
|
||||
| I am not able to save my bookmarks of zen with the autoExportHTML flag, this works fine on firefox though. | https://github.com/zen-browser/desktop/issues/4646 | None | None |
|
||||
| I am not able to save my bookmarks of zen with the autoExportHTML flag, this works fine on Firefox though. | https://github.com/zen-browser/desktop/issues/4646 | None | None |
|
||||
| Dropdown input is not selected | https://github.com/zen-browser/desktop/issues/4645 | None | None |
|
||||
| Toolbar becomes big after customizing the bookmarks placement | https://github.com/zen-browser/desktop/issues/4641 | None | None |
|
||||
| Zen Mods are not properly installing | https://github.com/zen-browser/desktop/issues/4640 | None | None |
|
||||
@@ -349,7 +349,7 @@
|
||||
| Page refresh | https://github.com/zen-browser/desktop/issues/4338 | 11:57:25 | None |
|
||||
| Expand Side's bar changes position of forward and backward buttons | https://github.com/zen-browser/desktop/issues/4336 | 12:19:39 | None |
|
||||
| breaks after using rectify11 and mica for everyone | https://github.com/zen-browser/desktop/issues/4335 | None | 3:03:08 |
|
||||
| Link "Zen support site" redirects to firefox support site | https://github.com/zen-browser/desktop/issues/4333 | 16:39:30 | 16:39:30 |
|
||||
| Link "Zen support site" redirects to Firefox support site | https://github.com/zen-browser/desktop/issues/4333 | 16:39:30 | 16:39:30 |
|
||||
| Opening discord keeps crashing the tab | https://github.com/zen-browser/desktop/issues/4332 | 0:24:48 | 0:24:48 |
|
||||
| space between essentials/tabs and the workspace title is different for default vs others | https://github.com/zen-browser/desktop/issues/4329 | None | 1 day, 0:42:55 |
|
||||
| Essential disappears, but it's still there | https://github.com/zen-browser/desktop/issues/4328 | 17:21:42 | 2 days, 3:52:35 |
|
||||
@@ -362,7 +362,7 @@
|
||||
| Slow scrolling speed on the vertical tab bar in 1.6b | https://github.com/zen-browser/desktop/issues/4321 | 1:18:21 | 1 day, 5:19:47 |
|
||||
| browser.urlbar.suggest.topsites set to false make url cannot be edited | https://github.com/zen-browser/desktop/issues/4319 | 1 day, 3:38:03 | 2 days, 9:54:46 |
|
||||
| Tab volume icon not showing in collapsed toolbar unless tab is active | https://github.com/zen-browser/desktop/issues/4316 | None | 0:08:41 |
|
||||
| Profile avatar picture flashes and is overridden by firefox account avatar | https://github.com/zen-browser/desktop/issues/4315 | 8:16:31 | 8:16:31 |
|
||||
| Profile avatar picture flashes and is overridden by Firefox account avatar | https://github.com/zen-browser/desktop/issues/4315 | 8:16:31 | 8:16:31 |
|
||||
| Zen Browser Turn Light At Lost Focus | https://github.com/zen-browser/desktop/issues/4314 | 2 days, 4:11:22 | 5 days, 16:04:18 |
|
||||
| "Log-in to this network" modal & button not interactible | https://github.com/zen-browser/desktop/issues/4313 | None | None |
|
||||
| Sudden Crashes on Arch Linux with Multiple Tabs Opened | https://github.com/zen-browser/desktop/issues/4309 | 2:56:11 | None |
|
||||
|
||||
@@ -516,7 +516,7 @@
|
||||
| icon is in not visible in the toolbar | https://github.com/zen-browser/desktop/issues/5215 | 4 days, 19:21:15 | None |
|
||||
| Issue: New Tab Not Opening When Searching in Korean | https://github.com/zen-browser/desktop/issues/5213 | 0:14:43 | 6 days, 13:05:20 |
|
||||
| Right-Click Context Menu: Keyboard Shortcuts Require Enter to Activate | https://github.com/zen-browser/desktop/issues/5212 | None | None |
|
||||
| Support daily.dev extension in zen browser. firefox doesn't. | https://github.com/zen-browser/desktop/issues/5211 | 0:05:56 | 0:05:56 |
|
||||
| Support daily.dev extension in zen browser. Firefox doesn't. | https://github.com/zen-browser/desktop/issues/5211 | 0:05:56 | 0:05:56 |
|
||||
| Error at the bottom right when opening a tab | https://github.com/zen-browser/desktop/issues/5210 | 0:28:59 | 0:28:59 |
|
||||
| Pen Tablet Scrolling Not Working in Sidebar | https://github.com/zen-browser/desktop/issues/5209 | None | None |
|
||||
| Essentials icons are off center | https://github.com/zen-browser/desktop/issues/5207 | 19:44:34 | 22:48:36 |
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
| Some browser dialogs appear off-screen | https://github.com/zen-browser/desktop/issues/7076 | 1 day, 1:32:55 | None |
|
||||
| Mouse over floating sidebar prevents hide | https://github.com/zen-browser/desktop/issues/7075 | None | None |
|
||||
| CRX Installer Not working in Zen Browser. | https://github.com/zen-browser/desktop/issues/7074 | 2 days, 23:32:33 | 3 days, 2:39:52 |
|
||||
| Cannot resize native firefox sidebar when positioned on the right after restarting the browser | https://github.com/zen-browser/desktop/issues/7073 | None | None |
|
||||
| Cannot resize native Firefox sidebar when positioned on the right after restarting the browser | https://github.com/zen-browser/desktop/issues/7073 | None | None |
|
||||
| compact mode color bug | https://github.com/zen-browser/desktop/issues/7068 | 0:19:56 | 2:12:33 |
|
||||
| Unable to assign Cmd+Z for undo | https://github.com/zen-browser/desktop/issues/7067 | None | None |
|
||||
| "change theme colors" cannot be undone and breaks other theming features | https://github.com/zen-browser/desktop/issues/7066 | None | None |
|
||||
@@ -560,7 +560,7 @@
|
||||
| New tab opens black page with only search option | https://github.com/zen-browser/desktop/issues/6418 | 1:30:09 | 1 day, 20:19:37 |
|
||||
| Black text on dark theme | https://github.com/zen-browser/desktop/issues/6416 | 1 day, 0:41:57 | 16 days, 1:56:48 |
|
||||
| Login pop-ups instant crashed. | https://github.com/zen-browser/desktop/issues/6414 | None | 3 days, 11:52:50 |
|
||||
| Only last workspace tabs are synced via firefox account | https://github.com/zen-browser/desktop/issues/6413 | 3:29:46 | 16 days, 2:45:09 |
|
||||
| Only last workspace tabs are synced via Firefox account | https://github.com/zen-browser/desktop/issues/6413 | 3:29:46 | 16 days, 2:45:09 |
|
||||
| Open in split window in split window undefined behaviour | https://github.com/zen-browser/desktop/issues/6412 | 16 days, 2:55:23 | 16 days, 2:55:24 |
|
||||
| Sidebar Stucked | https://github.com/zen-browser/desktop/issues/6411 | 16 days, 3:17:38 | 16 days, 3:17:39 |
|
||||
| Keyboard shortcuts not working with non-English layouts (e.g., Turkish) | https://github.com/zen-browser/desktop/issues/6410 | 16 days, 3:27:56 | 16 days, 3:27:56 |
|
||||
@@ -613,7 +613,7 @@
|
||||
| mica broke again | https://github.com/zen-browser/desktop/issues/6346 | 17 days, 16:46:21 | 17 days, 16:46:21 |
|
||||
| Search engine selector gone | https://github.com/zen-browser/desktop/issues/6345 | 4 days, 20:07:21 | 17 days, 17:17:10 |
|
||||
| PDF files open to a blank page when Zen is closed | https://github.com/zen-browser/desktop/issues/6343 | 12:43:24 | 17 days, 18:13:02 |
|
||||
| Tab peek controls overlap firefox ai chat sidebar | https://github.com/zen-browser/desktop/issues/6342 | 17 days, 18:38:25 | 17 days, 18:38:26 |
|
||||
| Tab peek controls overlap Firefox ai chat sidebar | https://github.com/zen-browser/desktop/issues/6342 | 17 days, 18:38:25 | 17 days, 18:38:26 |
|
||||
| Cant open a link with left click. | https://github.com/zen-browser/desktop/issues/6341 | 17 days, 18:56:56 | 17 days, 18:56:57 |
|
||||
| Distorted UI during first use - fresh install | https://github.com/zen-browser/desktop/issues/6340 | 17 days, 19:04:58 | 17 days, 19:04:59 |
|
||||
| Ctrl+Tab fails to switch tabs when dragging a file | https://github.com/zen-browser/desktop/issues/6339 | 17 days, 20:59:02 | 17 days, 20:59:03 |
|
||||
@@ -758,7 +758,7 @@
|
||||
| Extension icons hang off the side of the sidebar, and extension addition confirmation window hangs off the screen | https://github.com/zen-browser/desktop/issues/6135 | 18 days, 8:19:50 | 22 days, 6:38:20 |
|
||||
| Settings show zen-split-view-modifier which is unclear, I think it should be with spaces? | https://github.com/zen-browser/desktop/issues/6134 | 22 days, 7:27:49 | 22 days, 7:27:50 |
|
||||
| Grayish White Rounded Corners Visible when fullscreen in a video on youtube | https://github.com/zen-browser/desktop/issues/6132 | 8:50:42 | 22 days, 9:35:57 |
|
||||
| Zen Browser local building and running shows firefox only not zen type visual | https://github.com/zen-browser/desktop/issues/6128 | None | 3 days, 10:31:16 |
|
||||
| Zen Browser local building and running shows Firefox only not zen type visual | https://github.com/zen-browser/desktop/issues/6128 | None | 3 days, 10:31:16 |
|
||||
| Cannot download files with the flatpak version of Zen | https://github.com/zen-browser/desktop/issues/6127 | 10:53:18 | 22 days, 18:27:20 |
|
||||
| File Browser doesnt list user home directory files | https://github.com/zen-browser/desktop/issues/6126 | 22 days, 18:35:54 | 22 days, 18:35:55 |
|
||||
| Dragging sidebar moves the window | https://github.com/zen-browser/desktop/issues/6125 | 19:01:23 | 22 days, 19:16:45 |
|
||||
@@ -800,7 +800,7 @@
|
||||
| YouTube not opening in theater mode | https://github.com/zen-browser/desktop/issues/6078 | 24 days, 1:55:03 | 24 days, 1:55:03 |
|
||||
| Cannot Finish Initial Config due to missing Next Button on Color / Accent Chooser | https://github.com/zen-browser/desktop/issues/6076 | 24 days, 2:23:02 | 24 days, 2:23:02 |
|
||||
| Unable to fully integrate GTK and QT themes | https://github.com/zen-browser/desktop/issues/6074 | 1 day, 4:58:09 | 24 days, 4:44:34 |
|
||||
| can not install any firefox themes | https://github.com/zen-browser/desktop/issues/6073 | 18:28:31 | 18:28:31 |
|
||||
| can not install any Firefox themes | https://github.com/zen-browser/desktop/issues/6073 | 18:28:31 | 18:28:31 |
|
||||
| No icon on windows | https://github.com/zen-browser/desktop/issues/6071 | 0:12:31 | 0:23:42 |
|
||||
| Twilight Browser: Unexpected Blur Transparency After Update | https://github.com/zen-browser/desktop/issues/6069 | 7:36:42 | 24 days, 11:03:57 |
|
||||
| New tabs open as essentials; essentials do not retain order | https://github.com/zen-browser/desktop/issues/6068 | None | 1 day, 15:21:33 |
|
||||
|
||||
587
docs/issue-metrics/2025_2025-04-01..2025-04-30.md
Normal file
587
docs/issue-metrics/2025_2025-04-01..2025-04-30.md
Normal file
@@ -0,0 +1,587 @@
|
||||
# Issue Metrics
|
||||
|
||||
| Metric | Average | Median | 90th percentile |
|
||||
| --- | --- | --- | ---: |
|
||||
| Time to first response | 1 day, 10:58:31 | 4:19:41 | 4 days, 7:38:02 |
|
||||
| Time to close | 2 days, 13:49:59 | 11:11:45 | 9 days, 19:10:27 |
|
||||
|
||||
| Metric | Count |
|
||||
| --- | ---: |
|
||||
| Number of items that remain open | 236 |
|
||||
| Number of items closed | 333 |
|
||||
| Total number of items created | 569 |
|
||||
|
||||
| Title | URL | Time to first response | Time to close |
|
||||
| --- | --- | --- | --- |
|
||||
| Cloudflare Turnstile can't be passed on Zen | https://github.com/zen-browser/desktop/issues/7948 | None | None |
|
||||
| [Gecko engine] - Zen doesn't load a site (Doom loading) | https://github.com/zen-browser/desktop/issues/7946 | 0:09:25 | 0:09:25 |
|
||||
| Unable to open URL bar when sidebar is unfocused | https://github.com/zen-browser/desktop/issues/7944 | 1:22:42 | None |
|
||||
| Remove AutoPlay Icon | https://github.com/zen-browser/desktop/issues/7943 | None | None |
|
||||
| "Prevent tab unload" doesn't save it's state on browser restart | https://github.com/zen-browser/desktop/issues/7942 | None | None |
|
||||
| Unable to emoji picker when creating/editing workspace | https://github.com/zen-browser/desktop/issues/7940 | None | None |
|
||||
| Tabs crash when loading any video stream. | https://github.com/zen-browser/desktop/issues/7939 | None | None |
|
||||
| Resizing the window on MacOS triggers websites shortcuts | https://github.com/zen-browser/desktop/issues/7937 | None | None |
|
||||
| MDN Search add-on does not work anymore | https://github.com/zen-browser/desktop/issues/7936 | 6:23:47 | None |
|
||||
| Browser extensions often fail to work, randomly breaking in different workspaces. | https://github.com/zen-browser/desktop/issues/7934 | None | None |
|
||||
| The Settings Page does not resize based on browser view size. | https://github.com/zen-browser/desktop/issues/7933 | None | None |
|
||||
| Often Zen fills ram and makes computer unresponsive | https://github.com/zen-browser/desktop/issues/7931 | None | None |
|
||||
| weird newtab behaviour in certain sites | https://github.com/zen-browser/desktop/issues/7930 | None | None |
|
||||
| YouTube fails to load any content that is not specifically a video stream | https://github.com/zen-browser/desktop/issues/7929 | 11:28:37 | 18:24:51 |
|
||||
| Empty url bar looses focus | https://github.com/zen-browser/desktop/issues/7926 | 0:33:26 | 3:02:07 |
|
||||
| The toolbar is still unable to adapt with the rest of the theme | https://github.com/zen-browser/desktop/issues/7925 | None | None |
|
||||
| Closing the frozen browser, deletes all tabs | https://github.com/zen-browser/desktop/issues/7923 | 0:45:02 | 0:45:02 |
|
||||
| split tab shortcut is already taken by OS shortcut on macOS | https://github.com/zen-browser/desktop/issues/7922 | 15:41:24 | 15:41:24 |
|
||||
| Zen not properly restoring previously opened tabs in the previous session (Only pinned tabs restored; potential container or Sidebery issue?) | https://github.com/zen-browser/desktop/issues/7920 | 3:01:11 | None |
|
||||
| Help entrypoints in Help menu and About Zen go to Firefox docs | https://github.com/zen-browser/desktop/issues/7919 | None | None |
|
||||
| "Split horizontal" shortcut conflicts with macOS default | https://github.com/zen-browser/desktop/issues/7918 | None | None |
|
||||
| Zen not remembering where the tabs opened in the previous sessions. | https://github.com/zen-browser/desktop/issues/7916 | 15:46:31 | None |
|
||||
| Incorrect behavior when pressing ctrl+enter in URL bar after typing a string | https://github.com/zen-browser/desktop/issues/7915 | 14:56:31 | 14:56:31 |
|
||||
| Additional Zen icons added to Dock when links are opened | https://github.com/zen-browser/desktop/issues/7914 | None | None |
|
||||
| New Tab Startup Opening | https://github.com/zen-browser/desktop/issues/7912 | 2:27:10 | 2:27:10 |
|
||||
| Cannot scroll webpages using Wacom Pen tablet | https://github.com/zen-browser/desktop/issues/7911 | None | 1 day, 1:16:05 |
|
||||
| When using Tabs on the Right, the Glance controls are on the wrong side | https://github.com/zen-browser/desktop/issues/7910 | None | None |
|
||||
| Displaying the Wrong Information | https://github.com/zen-browser/desktop/issues/7909 | 19:28:41 | 19:28:41 |
|
||||
| Compact mode doesn't hide sidebar | https://github.com/zen-browser/desktop/issues/7908 | 5:31:34 | None |
|
||||
| Black content on extensions window | https://github.com/zen-browser/desktop/issues/7907 | 0:09:00 | 4:16:12 |
|
||||
| Slash character (/) in URL field opens search bar and making it impossible to write https:// | https://github.com/zen-browser/desktop/issues/7906 | 1 day, 0:32:34 | None |
|
||||
| After I delete everything in the address bar, I lose focus and have to click it again to type. Is there a way to fix this? | https://github.com/zen-browser/desktop/issues/7905 | None | 0:01:26 |
|
||||
| Tabs not restored on startup under specific conditions | https://github.com/zen-browser/desktop/issues/7902 | 6:24:57 | 12:52:38 |
|
||||
| Duplicating a renamed Pinned Tab causes the duplicated tab to be named "New Tab" instead of the website name | https://github.com/zen-browser/desktop/issues/7900 | None | 5:09:46 |
|
||||
| When the theme is set to System theme - Auto and the System theme is Dark, the highlighted search suggestion is the wrong color | https://github.com/zen-browser/desktop/issues/7899 | None | None |
|
||||
| Inconsistent/Incorrect behavior when using ctrl+enter from new tab addressbar | https://github.com/zen-browser/desktop/issues/7898 | 1 day, 16:47:43 | 3 days, 2:50:21 |
|
||||
| [Twilight 1.11.5] Sizing issue with essentials in multi toolbar mode | https://github.com/zen-browser/desktop/issues/7897 | 1:40:18 | 5:03:44 |
|
||||
| AWS Console Session/Credential Error "Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1" | https://github.com/zen-browser/desktop/issues/7896 | None | None |
|
||||
| Dark Mode not persistent | https://github.com/zen-browser/desktop/issues/7894 | None | None |
|
||||
| pinned tabs closed via firefox on android open after restart | https://github.com/zen-browser/desktop/issues/7892 | None | None |
|
||||
| Idle inhibit not released after fullscreen video finishes playing on Wayland | https://github.com/zen-browser/desktop/issues/7891 | None | 0:19:07 |
|
||||
| Not every window in compact mode on startup if multiple window is open. | https://github.com/zen-browser/desktop/issues/7890 | None | 4:40:46 |
|
||||
| ctrl+tab goes through essentials and pinned tabs | https://github.com/zen-browser/desktop/issues/7889 | 11:45:57 | 11:46:05 |
|
||||
| Extensions only show a blank popup in full-screen | https://github.com/zen-browser/desktop/issues/7888 | None | 0:01:28 |
|
||||
| Command+Option+[arrow key] switches tabs on Mac but not on Windows | https://github.com/zen-browser/desktop/issues/7886 | 15:40:50 | 15:40:50 |
|
||||
| Dark mode (despite changing to light) | https://github.com/zen-browser/desktop/issues/7885 | 1 day, 20:57:57 | 1 day, 20:57:57 |
|
||||
| Spotify seems broken on Zen browser | https://github.com/zen-browser/desktop/issues/7878 | 0:10:25 | 0:25:06 |
|
||||
| ALT not being recognize when using the key | https://github.com/zen-browser/desktop/issues/7877 | 4 days, 2:54:12 | None |
|
||||
| Tooltips and popups flickering on Zen / OS X | https://github.com/zen-browser/desktop/issues/7876 | 0:06:03 | 1:33:13 |
|
||||
| Intermittent pink frame in YT videos | https://github.com/zen-browser/desktop/issues/7874 | 0:21:12 | None |
|
||||
| Extensions view is blank when opened in taskbar | https://github.com/zen-browser/desktop/issues/7873 | 0:46:08 | 0:46:08 |
|
||||
| SSL certificate error on trusted custom root CA: SEC_ERROR_UNKNOWN_ISSUER | https://github.com/zen-browser/desktop/issues/7872 | 10:27:53 | 10:27:53 |
|
||||
| [BUG?] High RAM consumption | https://github.com/zen-browser/desktop/issues/7871 | None | 12:00:20 |
|
||||
| Compact sidebar appearch when switching tabs with the shortcuts | https://github.com/zen-browser/desktop/issues/7870 | 3:10:22 | 14:26:17 |
|
||||
| Horizontal Scrollbar Appears in Full-Screen Mode on YouTube | https://github.com/zen-browser/desktop/issues/7867 | 1 day, 1:53:22 | None |
|
||||
| Tabs crashing after click Links in Thunderbird Mail | https://github.com/zen-browser/desktop/issues/7866 | 1 day, 0:14:36 | 2 days, 2:58:17 |
|
||||
| Ctrl+Tab Cycling through tabs crashes if pressed without recent tabs | https://github.com/zen-browser/desktop/issues/7865 | None | 3:20:55 |
|
||||
| Browser freezes when using Glance with webpages open in another workspace | https://github.com/zen-browser/desktop/issues/7864 | 1:54:48 | 3 days, 22:16:17 |
|
||||
| youtube video flickers on nvidia gpu | https://github.com/zen-browser/desktop/issues/7860 | 0:58:00 | 1 day, 3:33:06 |
|
||||
| Feedback on Tab and Sidebar Behavior | https://github.com/zen-browser/desktop/issues/7859 | 0:07:25 | 0:07:25 |
|
||||
| YouTube Music Media Controller Pause Button has no Effect | https://github.com/zen-browser/desktop/issues/7858 | None | 0:04:51 |
|
||||
| Text jitter in popup window on macOS | https://github.com/zen-browser/desktop/issues/7856 | 7:16:06 | None |
|
||||
| Setting theme in Firefox also applies to Zen | https://github.com/zen-browser/desktop/issues/7855 | 7:45:30 | None |
|
||||
| Clearing cookies fails when using the single toolbar layout | https://github.com/zen-browser/desktop/issues/7851 | None | None |
|
||||
| Pinned Tabs: "open in new tab" from glance window places the tab into pinned tabs automatically | https://github.com/zen-browser/desktop/issues/7850 | None | 4:17:16 |
|
||||
| Bug with enlarged extension icon after expanding and minimazing right sidebar. | https://github.com/zen-browser/desktop/issues/7848 | 0:09:31 | 0:13:57 |
|
||||
| Running firefox in incognito mode makes Zen lose saved tabs (Windows) | https://github.com/zen-browser/desktop/issues/7847 | 1:51:53 | None |
|
||||
| Picture-in-picture "Back to tab" button restores pin in the incorrect workspace | https://github.com/zen-browser/desktop/issues/7845 | 6:23:29 | 1 day, 7:14:12 |
|
||||
| weird link opening behavior | https://github.com/zen-browser/desktop/issues/7844 | 6:08:34 | 6:18:12 |
|
||||
| Linux-zen can not access directory page directly | https://github.com/zen-browser/desktop/issues/7841 | 11:54:43 | 11:54:43 |
|
||||
| Moving a split screen tab across workspaces is broken | https://github.com/zen-browser/desktop/issues/7840 | 6:28:28 | 2 days, 10:33:34 |
|
||||
| The web panel is gone? | https://github.com/zen-browser/desktop/issues/7839 | 0:02:32 | 0:02:32 |
|
||||
| Tabs on right has an empty margin | https://github.com/zen-browser/desktop/issues/7838 | 4:55:32 | None |
|
||||
| Twitch.tv - Zen Browser | https://github.com/zen-browser/desktop/issues/7837 | 1:55:02 | 1:55:02 |
|
||||
| Zen Mod "Better Tab indicators v1.0.0" not function | https://github.com/zen-browser/desktop/issues/7833 | 0:41:23 | 0:45:22 |
|
||||
| Pinned tabs remember scrolling position when unloaded and reset | https://github.com/zen-browser/desktop/issues/7830 | 0:30:46 | 6:04:50 |
|
||||
| SponsorBlock Breaks the custom volume slider and theme. | https://github.com/zen-browser/desktop/issues/7829 | 5:24:28 | 5:24:29 |
|
||||
| Problem with video uploads on Xiaohongshu's Creator Platform through Zen | https://github.com/zen-browser/desktop/issues/7828 | 3 days, 1:04:18 | 3 days, 2:55:43 |
|
||||
| Cant click/open essentials | https://github.com/zen-browser/desktop/issues/7826 | 1 day, 15:20:15 | 1 day, 15:20:15 |
|
||||
| [Twilight 1.11.5t] Tabs break and browser flickers after unloading pinned tabs | https://github.com/zen-browser/desktop/issues/7825 | 3 days, 3:19:07 | 3 days, 6:38:13 |
|
||||
| [Twilight 1.11.5t] Close window button doesn't work. | https://github.com/zen-browser/desktop/issues/7824 | 2:28:27 | 1 day, 15:45:18 |
|
||||
| iCloud Passwords broken with latest macOS | https://github.com/zen-browser/desktop/issues/7823 | None | None |
|
||||
| Tab scrollbar dragging is broken again | https://github.com/zen-browser/desktop/issues/7821 | 1 day, 21:12:24 | None |
|
||||
| "Unload tab" doesn't work when tabs are in Split Mode | https://github.com/zen-browser/desktop/issues/7819 | 22:02:39 | 22:02:39 |
|
||||
| Compact mode single toolbar repeatedly goes from hidden to visible while using Raycast focus | https://github.com/zen-browser/desktop/issues/7818 | 0:22:13 | 1:20:26 |
|
||||
| Performance benchmarks link in README.md is broken | https://github.com/zen-browser/desktop/issues/7817 | None | 0:07:57 |
|
||||
| Google Meet Widget's Microphone and Camera Controls Have no Effects | https://github.com/zen-browser/desktop/issues/7815 | None | 0:02:32 |
|
||||
| Every startup does not display the homepage | https://github.com/zen-browser/desktop/issues/7814 | 0:11:47 | 0:11:47 |
|
||||
| Unable to click links from Thunderbird and other apps to jump to zen browser | https://github.com/zen-browser/desktop/issues/7813 | 0:26:55 | 0:27:32 |
|
||||
| Suspicious New Tab in every startup | https://github.com/zen-browser/desktop/issues/7812 | 1:14:48 | 1:14:48 |
|
||||
| Using private window always prompts the user to solve a Google CAPTCHA for "unusual traffic" | https://github.com/zen-browser/desktop/issues/7811 | 4:08:25 | 4:08:25 |
|
||||
| No keyboard shortcut assigned, yet still error 'conflict with another shortcut' | https://github.com/zen-browser/desktop/issues/7810 | 7:33:18 | None |
|
||||
| Show Bookmarks Toolbar shortcut not wroking in Single Toolbar Layout | https://github.com/zen-browser/desktop/issues/7809 | 0:48:50 | 10:04:21 |
|
||||
| Cannot inject scripts into same-origin iframes | https://github.com/zen-browser/desktop/issues/7808 | 10:11:50 | 10:11:50 |
|
||||
| Change Tab(s) to Workspace not working with split tabs | https://github.com/zen-browser/desktop/issues/7806 | 13:20:30 | 4 days, 9:18:08 |
|
||||
| Reset and pin tab button doesn't work for local folder path | https://github.com/zen-browser/desktop/issues/7805 | None | None |
|
||||
| Middle-click to open new tab unintentionally pastes clipboard contents into address bar | https://github.com/zen-browser/desktop/issues/7804 | 8:36:38 | None |
|
||||
| Chinese Language in URL Bar Causes Zen to Soft-Freeze | https://github.com/zen-browser/desktop/issues/7803 | 6 days, 13:54:47 | None |
|
||||
| "New Tab" button at bottom of tab list doesn't do... anything? | https://github.com/zen-browser/desktop/issues/7802 | None | 0:01:24 |
|
||||
| Default Workspace not showing `Essentials` Tabs. | https://github.com/zen-browser/desktop/issues/7800 | 1:30:16 | 13:48:39 |
|
||||
| Muting a tab from the media controller does not change the state of the "Mute Tab" button to "Unmute Tab" | https://github.com/zen-browser/desktop/issues/7798 | None | 3 days, 16:05:34 |
|
||||
| "Expand Sidebar" button shifts slightly and when sidebar is toggled | https://github.com/zen-browser/desktop/issues/7797 | 10:56:40 | None |
|
||||
| Zen doesn't remember selected tab between sessions | https://github.com/zen-browser/desktop/issues/7795 | 3:15:56 | 3 days, 3:12:31 |
|
||||
| The app name in GNOME notifications is "Mozilla zen" | https://github.com/zen-browser/desktop/issues/7794 | 1:09:59 | 1:35:44 |
|
||||
| ctrl+space shortcut white space | https://github.com/zen-browser/desktop/issues/7793 | None | None |
|
||||
| Compact Mode Expand-on-Hover Single Toolbar Does Not Have Same Padding as Browser Viewport | https://github.com/zen-browser/desktop/issues/7792 | None | 0:00:18 |
|
||||
| Zen Bar closing when changing language | https://github.com/zen-browser/desktop/issues/7791 | 2 days, 9:32:56 | None |
|
||||
| Compact mode open/close animation bugged | https://github.com/zen-browser/desktop/issues/7789 | 0:07:52 | 3:17:28 |
|
||||
| Bookmarks unaccessible when no tabs are open in compact mode | https://github.com/zen-browser/desktop/issues/7788 | None | 0:13:38 |
|
||||
| Zen forgets named Tabs after reopening | https://github.com/zen-browser/desktop/issues/7787 | 1:26:39 | None |
|
||||
| After adding the Bing search engine, searching in the address bar, the search prompt cannot be displayed | https://github.com/zen-browser/desktop/issues/7786 | 1:28:38 | 1 day, 1:15:18 |
|
||||
| Watt Toolkit's Network routing service fails to accelerate zen browser access to github | https://github.com/zen-browser/desktop/issues/7785 | 4:45:53 | 4:45:53 |
|
||||
| Terrible performance on Power Saving mode | https://github.com/zen-browser/desktop/issues/7784 | 1:03:17 | None |
|
||||
| duplicate of 504 | https://github.com/zen-browser/desktop/issues/7781 | None | 2:30:56 |
|
||||
| hitting `Ctrl+T` in Fullscreen mode opens new tab menu only when fullscreen mode is exited | https://github.com/zen-browser/desktop/issues/7779 | None | 9:22:25 |
|
||||
| Button that works on Firefox does not work on Zen | https://github.com/zen-browser/desktop/issues/7778 | 0:45:05 | None |
|
||||
| No homepage or totally blank homepage problem! | https://github.com/zen-browser/desktop/issues/7773 | 7:35:50 | 7:35:50 |
|
||||
| Firefox multi-account container and browsing history | https://github.com/zen-browser/desktop/issues/7768 | 20:19:15 | None |
|
||||
| The Extensions Not Work | https://github.com/zen-browser/desktop/issues/7766 | None | 0:26:32 |
|
||||
| Bitwarden blank window after sign-in | https://github.com/zen-browser/desktop/issues/7763 | 10:45:22 | 7 days, 5:07:50 |
|
||||
| The Facebook page turns pale white after open link. | https://github.com/zen-browser/desktop/issues/7760 | 7:32:21 | 6 days, 9:26:33 |
|
||||
| Linux arm64 builds does neither have drm enable option nor detect widevine CDM in plugins | https://github.com/zen-browser/desktop/issues/7759 | 20:47:30 | 2 days, 13:42:10 |
|
||||
| Spliting Essentials or Pinned Tabs is off | https://github.com/zen-browser/desktop/issues/7758 | 7:05:27 | 7:05:27 |
|
||||
| Zen browser does not support higher refresh rates on macOS | https://github.com/zen-browser/desktop/issues/7757 | 16:41:57 | 2 days, 10:42:28 |
|
||||
| Address bar loses focus when changing language in GNOME | https://github.com/zen-browser/desktop/issues/7756 | None | 1:48:13 |
|
||||
| Customize Toolbar tab becomes transparent | https://github.com/zen-browser/desktop/issues/7755 | None | None |
|
||||
| Auto-PIP was enabled by default and cant find how to turn it off | https://github.com/zen-browser/desktop/issues/7754 | 0:19:14 | 0:19:14 |
|
||||
| Higher CPU Usage and Choppy Video Playback in Glance | https://github.com/zen-browser/desktop/issues/7753 | None | 0:04:19 |
|
||||
| Auto-PIP does not work if the PIP button is disabled | https://github.com/zen-browser/desktop/issues/7752 | None | 0:11:15 |
|
||||
| F1 TV bug | https://github.com/zen-browser/desktop/issues/7751 | 0:26:19 | 0:26:19 |
|
||||
| Zen crashes after sometime while screensharing on discord web | https://github.com/zen-browser/desktop/issues/7750 | 17:39:57 | None |
|
||||
| Picture-in-Picture auto-starts when changing tabs or workspaces | https://github.com/zen-browser/desktop/issues/7749 | 0:13:43 | 0:26:03 |
|
||||
| Toolbar disappears | https://github.com/zen-browser/desktop/issues/7746 | 0:51:00 | None |
|
||||
| [GNOME] changing keyboard layout while on the search bar makes the search bar disappear | https://github.com/zen-browser/desktop/issues/7744 | None | 0:12:23 |
|
||||
| AI Chatbot selecting text shortcut open AI website in new tab instead of sidebar. | https://github.com/zen-browser/desktop/issues/7742 | 0:39:10 | None |
|
||||
| switching workspaces focuses on the URL bar | https://github.com/zen-browser/desktop/issues/7741 | 0:49:53 | 1:10:53 |
|
||||
| split tabs issue | https://github.com/zen-browser/desktop/issues/7736 | 1:40:14 | None |
|
||||
| PIP video covers new tab | https://github.com/zen-browser/desktop/issues/7735 | 0:03:58 | 1:36:34 |
|
||||
| After an update, Zen is installed twice. As visible in "Installed Apps" in Windows. | https://github.com/zen-browser/desktop/issues/7734 | None | None |
|
||||
| CMD+T | floating URL bar does not show | https://github.com/zen-browser/desktop/issues/7733 | 1:14:20 | 0:59:06 |
|
||||
| The rounded corner theme affects the mouse's access to the scroll bar | https://github.com/zen-browser/desktop/issues/7732 | 3 days, 9:30:14 | 3 days, 10:14:34 |
|
||||
| Menubar Text Turns Black in Dark Mode When Switching Apps via Stage Manager | https://github.com/zen-browser/desktop/issues/7731 | None | None |
|
||||
| Epic Games Store - no audio in videos | https://github.com/zen-browser/desktop/issues/7730 | 2:21:02 | 4:06:29 |
|
||||
| Wrong aspect ratio when opening on sway wm | https://github.com/zen-browser/desktop/issues/7729 | 12:23:25 | None |
|
||||
| Moving cursor from addon popup to website keeps tab sidebar showing in compact mode | https://github.com/zen-browser/desktop/issues/7728 | None | None |
|
||||
| URL bar not focused upon opening zen (with replace-newtab: false) | https://github.com/zen-browser/desktop/issues/7727 | None | 0:22:28 |
|
||||
| Pop up video(PIP) window that won't go away (Facebook) | https://github.com/zen-browser/desktop/issues/7726 | 11:06:08 | 1 day, 12:17:11 |
|
||||
| Zen does not use system theme setting | https://github.com/zen-browser/desktop/issues/7725 | 1:16:41 | 1:30:14 |
|
||||
| Zen doesnt Display Proxmox WebUi correctly.... | https://github.com/zen-browser/desktop/issues/7724 | 12:19:36 | None |
|
||||
| css attribute "breakout="true"" not persistant | https://github.com/zen-browser/desktop/issues/7722 | 0:08:57 | 0:08:57 |
|
||||
| Media control incorrectly shows a duration for onging live stream on youtube | https://github.com/zen-browser/desktop/issues/7721 | None | None |
|
||||
| Cannot copy selected text when right-clicking on the address bar in Linux Mint | https://github.com/zen-browser/desktop/issues/7719 | None | 0:58:16 |
|
||||
| Zen freezes - nothing responds | https://github.com/zen-browser/desktop/issues/7718 | 2:01:46 | 2:41:50 |
|
||||
| sidebar not hiding on blankpage | https://github.com/zen-browser/desktop/issues/7717 | 2:53:33 | 2:53:33 |
|
||||
| Zen seems to crash randomly when switching tabs | https://github.com/zen-browser/desktop/issues/7716 | 1 day, 14:07:42 | 10 days, 18:03:06 |
|
||||
| Invalid page background in dark themes | https://github.com/zen-browser/desktop/issues/7715 | 5:05:23 | 5:05:23 |
|
||||
| Hardware Acceleration - Browser almost unusable without it | https://github.com/zen-browser/desktop/issues/7714 | 5:32:14 | 5:48:30 |
|
||||
| Magic Mouse swipe does not change workspaces on macOS | https://github.com/zen-browser/desktop/issues/7713 | 5 days, 3:11:30 | None |
|
||||
| Where is zen sidebar | https://github.com/zen-browser/desktop/issues/7712 | 1:06:23 | 5:59:31 |
|
||||
| URL bar flashes when exiting fullscreen mode | https://github.com/zen-browser/desktop/issues/7711 | 1:31:07 | None |
|
||||
| Inconsistent behaviour of reset button when tab is loading | https://github.com/zen-browser/desktop/issues/7710 | None | None |
|
||||
| user.js | https://github.com/zen-browser/desktop/issues/7709 | 0:08:13 | 0:08:13 |
|
||||
| Changing Zoom keybindings is not taking effect on windows | https://github.com/zen-browser/desktop/issues/7708 | None | None |
|
||||
| Google Maps not showing route (the blue line) | https://github.com/zen-browser/desktop/issues/7707 | 3:34:36 | 2 days, 5:27:24 |
|
||||
| Basic Authorization doesn't works on some websites | https://github.com/zen-browser/desktop/issues/7706 | 1:59:13 | 1:59:13 |
|
||||
| Sometimes there are vertical black bars on the left/right size of picture in picture mini player | https://github.com/zen-browser/desktop/issues/7705 | None | None |
|
||||
| Blank Extension Popup when activated using the keyboard shortcut | https://github.com/zen-browser/desktop/issues/7703 | None | 10:14:29 |
|
||||
| Can no longer cycle through tabs in Macos using cmd+opt+right for seemingly no reason | https://github.com/zen-browser/desktop/issues/7702 | 1 day, 8:49:40 | 1 day, 8:49:40 |
|
||||
| about:protections advertises "Zen for Android and iOS," links to Firefox | https://github.com/zen-browser/desktop/issues/7701 | None | None |
|
||||
| In the new window, voice input is not working. This prevents me from writing in the browsers. | https://github.com/zen-browser/desktop/issues/7698 | None | None |
|
||||
| picture in picture disappears | https://github.com/zen-browser/desktop/issues/7697 | 1 day, 13:00:12 | None |
|
||||
| Tab Switching Unresponsive in Split View Mode | https://github.com/zen-browser/desktop/issues/7696 | 2:24:28 | None |
|
||||
| content-element-separation=0 doesn't show browser windows controls | https://github.com/zen-browser/desktop/issues/7694 | None | 0:03:33 |
|
||||
| last used tabs not in focus in startup | https://github.com/zen-browser/desktop/issues/7693 | 0:58:59 | 1:06:21 |
|
||||
| Unexpected Behavior When Opening New Tab (CTRL + T) During YouTube Fullscreen Video | https://github.com/zen-browser/desktop/issues/7692 | 2:48:18 | 23:21:28 |
|
||||
| Zen does not appear in Start Menu | https://github.com/zen-browser/desktop/issues/7691 | 0:17:52 | 1:41:13 |
|
||||
| Unable to perform new update | https://github.com/zen-browser/desktop/issues/7689 | None | 1:46:21 |
|
||||
| Bitwarden does not ask to save new passwords | https://github.com/zen-browser/desktop/issues/7687 | None | None |
|
||||
| YouTube eventually gets very slow and sluggish to use | https://github.com/zen-browser/desktop/issues/7685 | 10 days, 7:27:25 | None |
|
||||
| Small inconsistencies with zen.urlbar.replace-newtab disabled | https://github.com/zen-browser/desktop/issues/7684 | 0:39:19 | 1 day, 6:02:08 |
|
||||
| Clicking New Tab multiple times briefly flickers the browser back to the previous tab. | https://github.com/zen-browser/desktop/issues/7683 | None | None |
|
||||
| Compact mode not active for 2/3 windows on startup, switching to single toolbar and back again breaks layout | https://github.com/zen-browser/desktop/issues/7682 | 1 day, 2:24:51 | None |
|
||||
| Zen did not auto update to 1.11.3b when I thought it did | https://github.com/zen-browser/desktop/issues/7681 | 1:36:45 | 1:36:45 |
|
||||
| Text colors arent correctly visible while `zen.theme.gradient.show-custom-colors` is enabled | https://github.com/zen-browser/desktop/issues/7680 | 6:46:05 | 6:46:05 |
|
||||
| Zen shows warning icon next to "This is a secure Zen page" | https://github.com/zen-browser/desktop/issues/7679 | 2:12:33 | None |
|
||||
| Tabs alignment is off when the tab-bar is collapsed and there are enough tabs that they can be scrolled | https://github.com/zen-browser/desktop/issues/7678 | None | None |
|
||||
| Zen using a lot of memory | https://github.com/zen-browser/desktop/issues/7673 | 0:08:16 | 9:36:13 |
|
||||
| Cannot play DRM content (Specifcally crunchyroll.com) on Linux since 1.11.3b | https://github.com/zen-browser/desktop/issues/7671 | 1:10:45 | 10 days, 6:30:28 |
|
||||
| zen seemingly tiling into 4 windows on hyprland | https://github.com/zen-browser/desktop/issues/7670 | None | None |
|
||||
| Tabs are not opening on startup when closing using X button | https://github.com/zen-browser/desktop/issues/7669 | 2:08:51 | 1 day, 10:29:12 |
|
||||
| When I hit ctrl+t for new tab, start writing url, change my mind and cancel it, then invoke it again, the typed text is still there | https://github.com/zen-browser/desktop/issues/7667 | 0:53:10 | 7:59:08 |
|
||||
| URL Bar not showing on fullscreen mode and glitchin when exiting it | https://github.com/zen-browser/desktop/issues/7665 | 0:21:09 | None |
|
||||
| Flatpak reverted to an older version today. | https://github.com/zen-browser/desktop/issues/7664 | 8:07:44 | 17:35:17 |
|
||||
| Hyprland blur not working at the start | https://github.com/zen-browser/desktop/issues/7663 | 9:54:03 | None |
|
||||
| Switch Profile Button Gone | https://github.com/zen-browser/desktop/issues/7662 | 10:56:49 | 1 day, 1:39:17 |
|
||||
| Issue with Zen browser after unexpected PC crash. | https://github.com/zen-browser/desktop/issues/7661 | 7:06:45 | None |
|
||||
| Zen tries to automatically download a PDF on sites that use iframe elements to embed a PDF | https://github.com/zen-browser/desktop/issues/7660 | 0:23:40 | 1:47:54 |
|
||||
| [Twilight 1.11.3t] Essential/Pinned tabs reload when already loading. | https://github.com/zen-browser/desktop/issues/7659 | 15:23:47 | 1 day, 4:59:18 |
|
||||
| Nvidia RTX video super resolution doesn't work in Zen | https://github.com/zen-browser/desktop/issues/7658 | 12:30:11 | 21:59:00 |
|
||||
| "zen.view.grey-out-inactive-windows" is bugged on Windows | https://github.com/zen-browser/desktop/issues/7657 | 22:45:09 | None |
|
||||
| Twitch not supported | https://github.com/zen-browser/desktop/issues/7656 | 1:28:28 | None |
|
||||
| Tab unloading fails on tabs using the Glance view | https://github.com/zen-browser/desktop/issues/7655 | 0:57:35 | None |
|
||||
| Renamed Tabs do not show up in URL Bar | https://github.com/zen-browser/desktop/issues/7654 | 0:17:42 | None |
|
||||
| When a tab is not loaded, searching it via % clones it instead of switching to it | https://github.com/zen-browser/desktop/issues/7653 | 0:37:13 | None |
|
||||
| If you clear the contents of the address bar, the focus of the address bar will be released. | https://github.com/zen-browser/desktop/issues/7651 | 1:48:28 | 11 days, 5:19:00 |
|
||||
| New tab search, stay on right click. | https://github.com/zen-browser/desktop/issues/7650 | None | 0:22:00 |
|
||||
| Context Menu Colors Incorrectly Follow Application Theme | https://github.com/zen-browser/desktop/issues/7649 | 11 days, 5:49:13 | 12 days, 1:15:41 |
|
||||
| Screen Sharing Bug on Mac | https://github.com/zen-browser/desktop/issues/7648 | None | 0:01:19 |
|
||||
| Scrolling on the tabs on a touch screen does nothing | https://github.com/zen-browser/desktop/issues/7647 | None | 0:00:58 |
|
||||
| Scrollbar in tabs doesn't appear in collapsed toolbar layout | https://github.com/zen-browser/desktop/issues/7646 | 0:13:13 | 0:19:22 |
|
||||
| Overflow menu icon missing in single sidebar view mode | https://github.com/zen-browser/desktop/issues/7644 | 0:01:07 | 0:01:07 |
|
||||
| Zen browser doesnt show minimize button on linux | https://github.com/zen-browser/desktop/issues/7643 | 2:28:48 | 2:28:48 |
|
||||
| Claude “App Integration” panel disappears instantly after click | https://github.com/zen-browser/desktop/issues/7642 | 1:32:22 | 1:32:22 |
|
||||
| Unable to revert "On macos, you can now cycle through tabs with cmd+opt+UP or cmd+opt+DOWN" | https://github.com/zen-browser/desktop/issues/7640 | 3:46:56 | 3:46:55 |
|
||||
| Missing .dll files after installation | https://github.com/zen-browser/desktop/issues/7638 | None | 0:14:40 |
|
||||
| Webpage content overflow window region after initing Zen | https://github.com/zen-browser/desktop/issues/7637 | None | 0:04:41 |
|
||||
| Mouse history back and history forward buttons change workspaces when not inside tab container | https://github.com/zen-browser/desktop/issues/7636 | 6 days, 12:45:14 | None |
|
||||
| Spotify Skips and Only Plays 10 seconds of audio | https://github.com/zen-browser/desktop/issues/7635 | 2:06:02 | 2:06:02 |
|
||||
| Add-ons GUIs are not loaded correctly | https://github.com/zen-browser/desktop/issues/7633 | 13:04:07 | None |
|
||||
| Zen window gaining focus makes the hidden sidebar glitch | https://github.com/zen-browser/desktop/issues/7632 | 6:31:37 | 21:43:01 |
|
||||
| Dragging a tab to essentials makes it disappear | https://github.com/zen-browser/desktop/issues/7631 | 0:15:33 | 23:19:25 |
|
||||
| VC Runtime Errors in Installer | https://github.com/zen-browser/desktop/issues/7630 | 3:31:22 | 8:34:38 |
|
||||
| Perform a component refactoring | https://github.com/zen-browser/desktop/issues/7628 | None | 0:23:06 |
|
||||
| zen mods and Tag records | https://github.com/zen-browser/desktop/issues/7623 | None | None |
|
||||
| Losing all tabs when closing the main window with the private one open | https://github.com/zen-browser/desktop/issues/7622 | 2:04:11 | 2:04:11 |
|
||||
| Can't re-arrange essential Icons | https://github.com/zen-browser/desktop/issues/7617 | 0:09:59 | 5:01:31 |
|
||||
| Sidebar breifly appears when exiting fullscreen video | https://github.com/zen-browser/desktop/issues/7615 | 0:57:48 | 2 days, 11:44:49 |
|
||||
| Resetting the fixed tab is invalid, it is not possible to click the tab icon to reset the tab | https://github.com/zen-browser/desktop/issues/7614 | 7:47:12 | 21:41:31 |
|
||||
| Ctrl+Tab Cycling preview is at desktop size instead of window size | https://github.com/zen-browser/desktop/issues/7612 | None | None |
|
||||
| Synced containers disrupted in synced workspaces | https://github.com/zen-browser/desktop/issues/7611 | 3 days, 8:25:51 | None |
|
||||
| [a11y] Yellow-on-white warning when rebinding keys | https://github.com/zen-browser/desktop/issues/7609 | 1:38:15 | None |
|
||||
| missing workspace emojis | https://github.com/zen-browser/desktop/issues/7608 | None | None |
|
||||
| Two workspace managers , I can't delete the lowest workspace manager, it takes up half the browser screen ,no option to change wokspace manager to "menu" type in settings anymore. | https://github.com/zen-browser/desktop/issues/7607 | 3:17:15 | None |
|
||||
| Issues with Detaching Tabs from Parent Window | https://github.com/zen-browser/desktop/issues/7606 | 0:04:52 | None |
|
||||
| New Window doesn't focus URL bar on compact mode | https://github.com/zen-browser/desktop/issues/7605 | 0:05:43 | 1 day, 18:08:01 |
|
||||
| Unable to copy clean link | https://github.com/zen-browser/desktop/issues/7604 | 0:26:36 | 5:16:04 |
|
||||
| Closing the last tab doesn't close the window | https://github.com/zen-browser/desktop/issues/7603 | None | 0:21:59 |
|
||||
| split screen not working on draging the tabs | https://github.com/zen-browser/desktop/issues/7601 | 0:46:35 | None |
|
||||
| Closing a pinned tab won't open it to the reset URL when opening it again | https://github.com/zen-browser/desktop/issues/7600 | 9:10:40 | 19:51:32 |
|
||||
| Cannot Screenshare with Zen (Teams, Meet, Jitsi, and alike) | https://github.com/zen-browser/desktop/issues/7597 | 0:35:35 | None |
|
||||
| Microsoft teams fails to initialize | https://github.com/zen-browser/desktop/issues/7596 | 3:00:35 | 2 days, 6:17:50 |
|
||||
| Microsoft Word Online prevents Zen from opening split view | https://github.com/zen-browser/desktop/issues/7595 | 12 days, 5:47:57 | None |
|
||||
| splitView.change-on-hover not working | https://github.com/zen-browser/desktop/issues/7594 | 7:21:42 | 7:21:42 |
|
||||
| Transparent background on toolbar customization page on Linux (Fedora 42, GNOME 48) | https://github.com/zen-browser/desktop/issues/7593 | None | None |
|
||||
| Compact mode state not being consistant to all workspaces | https://github.com/zen-browser/desktop/issues/7591 | 11:38:56 | None |
|
||||
| Zen window gaining focus makes the hidden sidebar glitch | https://github.com/zen-browser/desktop/issues/7590 | 3:49:52 | None |
|
||||
| youtube theater option not available | https://github.com/zen-browser/desktop/issues/7589 | None | 0:03:22 |
|
||||
| Address Bar shifts slightly when selecting part of the URL, changing the selection | https://github.com/zen-browser/desktop/issues/7586 | 10:21:52 | None |
|
||||
| "Profiles" Persists in Menu After Disabling `browser.profiles.enabled` | https://github.com/zen-browser/desktop/issues/7584 | 0:33:05 | 2:55:19 |
|
||||
| Window Tab Managment breaks when using "Switch to Tab" with multiple windows | https://github.com/zen-browser/desktop/issues/7583 | 1 day, 19:13:20 | None |
|
||||
| If You Open a Second Zen Browser Instance You Lose Your Split Tabs If You Close The Main Window First | https://github.com/zen-browser/desktop/issues/7582 | 10:22:23 | None |
|
||||
| Dragging Tabs Quickly Causes Split Position to Lock Left Even When Hovering Right | https://github.com/zen-browser/desktop/issues/7581 | None | None |
|
||||
| URL box in bookmark editing window is small | https://github.com/zen-browser/desktop/issues/7580 | 21:15:14 | None |
|
||||
| Tabs crashed | https://github.com/zen-browser/desktop/issues/7577 | None | None |
|
||||
| bug: modifying app-id with `--name` doesn't work anymore | https://github.com/zen-browser/desktop/issues/7576 | 9:00:29 | None |
|
||||
| iCloud Password Firefox extension is not working! | https://github.com/zen-browser/desktop/issues/7575 | 0:34:42 | 0:34:42 |
|
||||
| With firefox sidebar opened on left, glance view control botton floats over the sidebar | https://github.com/zen-browser/desktop/issues/7574 | 1 day, 2:06:38 | None |
|
||||
| Flatpak version of Zen browser tries to upgrade to v1.7b instead of v1.11.2b | https://github.com/zen-browser/desktop/issues/7571 | 0:23:15 | 1:50:02 |
|
||||
| no firefox labs button & feature highlight , Ai chatbot & picture in Picture on tab switch etc. | https://github.com/zen-browser/desktop/issues/7568 | None | 3:17:25 |
|
||||
| 1.11.2b : no firefox labs button & feature highlight , Ai chatbot & picture in Picture on tab switch etc. | https://github.com/zen-browser/desktop/issues/7567 | None | 0:02:13 |
|
||||
| Vieus IDP.HEUR.28 detected by Norton when trying to install Zen browser | https://github.com/zen-browser/desktop/issues/7565 | None | 0:55:15 |
|
||||
| Alert box cutoff half way | https://github.com/zen-browser/desktop/issues/7564 | 5:12:02 | 13 days, 8:10:41 |
|
||||
| Retaining pinned split essential tabs and changing layout for split essential tabs | https://github.com/zen-browser/desktop/issues/7563 | None | None |
|
||||
| Horizontal splitting vertical split and closing split leaves page buggy | https://github.com/zen-browser/desktop/issues/7562 | None | None |
|
||||
| Closing the tab shortcut doesn't close the window. | https://github.com/zen-browser/desktop/issues/7561 | 9:21:08 | 9:21:08 |
|
||||
| Zen minimizes after closing download options | https://github.com/zen-browser/desktop/issues/7559 | 8:22:23 | 17:23:11 |
|
||||
| URL Bar disappearing when no text is there even when behaviour is always floating. | https://github.com/zen-browser/desktop/issues/7558 | 8:30:20 | 11:46:40 |
|
||||
| Updating Zen hides all my tabs in the tab list | https://github.com/zen-browser/desktop/issues/7557 | 0:12:37 | 0:15:56 |
|
||||
| Zen is being updated by another instance | https://github.com/zen-browser/desktop/issues/7556 | 1:06:46 | None |
|
||||
| URL bar in sidebar transitions faster than the sidebar itself when enabling compact mode without floating mode | https://github.com/zen-browser/desktop/issues/7554 | 2:25:13 | None |
|
||||
| Can't display local files properly | https://github.com/zen-browser/desktop/issues/7553 | 2:48:35 | 2:48:35 |
|
||||
| Drag & Drop Essentials To Split Incompatible With Mod "Bottom Essentials" | https://github.com/zen-browser/desktop/issues/7552 | None | 0:04:48 |
|
||||
| Zen browser does not save a web page | https://github.com/zen-browser/desktop/issues/7551 | 2:45:42 | 5:12:17 |
|
||||
| Workspace Bug | https://github.com/zen-browser/desktop/issues/7549 | 0:31:53 | 1 day, 5:23:29 |
|
||||
| no sidebar in compact mode | https://github.com/zen-browser/desktop/issues/7548 | 6:22:41 | 17:25:22 |
|
||||
| Deleted workspaces remain accessible and breaks the browser | https://github.com/zen-browser/desktop/issues/7547 | 2 days, 0:29:41 | None |
|
||||
| Ukrainian language not available in "Translate Selection" menu despite being downloaded | https://github.com/zen-browser/desktop/issues/7546 | None | None |
|
||||
| about:editprofile does not work | https://github.com/zen-browser/desktop/issues/7545 | 1:10:38 | 8:57:39 |
|
||||
| Sidebar overflow on restart | https://github.com/zen-browser/desktop/issues/7544 | None | 2 days, 13:49:54 |
|
||||
| Unable to resize the pane if it's on the right side | https://github.com/zen-browser/desktop/issues/7543 | 0:20:18 | 2 days, 8:54:19 |
|
||||
| changing Workspace position doesn't work | https://github.com/zen-browser/desktop/issues/7542 | 1:54:30 | 4 days, 23:51:53 |
|
||||
| Web Developer Toolbar in the Network tab does not show the response of streamed XHR calls | https://github.com/zen-browser/desktop/issues/7541 | 0:34:03 | 1:46:10 |
|
||||
| Inconsistent Tab Unload When Disabled (Context Menu Item Missing) | https://github.com/zen-browser/desktop/issues/7539 | 0:31:50 | None |
|
||||
| Button to switch between profiles has disappeared from the toolbar since 1.8.1b | https://github.com/zen-browser/desktop/issues/7538 | 1:38:27 | 5:12:38 |
|
||||
| Icon on macOS: slightly alter the black background | https://github.com/zen-browser/desktop/issues/7537 | None | None |
|
||||
| Delayed loading of secondary components on YouTube pages while main video loads immediately | https://github.com/zen-browser/desktop/issues/7536 | 2:21:49 | 5:27:13 |
|
||||
| Closing an essential tab removes it from essentials | https://github.com/zen-browser/desktop/issues/7534 | 1:29:28 | 3:16:13 |
|
||||
| What is "menu bar" | https://github.com/zen-browser/desktop/issues/7531 | 21:31:23 | 21:31:28 |
|
||||
| unwanted corners rendering during fullscreen videos | https://github.com/zen-browser/desktop/issues/7530 | None | 0:21:41 |
|
||||
| splitting tab with pip freezes browser | https://github.com/zen-browser/desktop/issues/7529 | None | 3 days, 2:31:32 |
|
||||
| Toggle Floating Sidebar keyboard shortcut not working | https://github.com/zen-browser/desktop/issues/7528 | 22:40:20 | None |
|
||||
| Windows 11 taskbar previewing all tabs instead of window instance and preview icon not shown | https://github.com/zen-browser/desktop/issues/7527 | 1:23:13 | 1:23:13 |
|
||||
| Cant CTRL+T to open a new tab, while in fullscreen (e.g. YouTube Fullscreen) | https://github.com/zen-browser/desktop/issues/7526 | 2:21:27 | 13:13:36 |
|
||||
| Cant scroll tab list on touch screen. | https://github.com/zen-browser/desktop/issues/7524 | None | None |
|
||||
| Glance gets stuck in half-open state | https://github.com/zen-browser/desktop/issues/7522 | 14 days, 18:10:24 | 14 days, 18:10:24 |
|
||||
| Restarting zen causes sidebar to not appear when hovered (compact mode, hide both) | https://github.com/zen-browser/desktop/issues/7521 | 6:01:35 | 9:15:43 |
|
||||
| Facebook page goes all blue if I open one ot its links in Glance | https://github.com/zen-browser/desktop/issues/7520 | None | None |
|
||||
| Sidebar action previews are glitchy when you hover (Extensions, Back button, Forward button, Tabs and etc) | https://github.com/zen-browser/desktop/issues/7518 | 0:49:25 | 10:15:00 |
|
||||
| Youtube videos not loading if i update zen-browser: (1.10.3b-1 => 1.11.1b-1) | https://github.com/zen-browser/desktop/issues/7517 | None | 10:37:45 |
|
||||
| If the download file is in Chinese, the file name encoding is incorrect | https://github.com/zen-browser/desktop/issues/7515 | 1:06:02 | None |
|
||||
| Extensions are not getting pinned. | https://github.com/zen-browser/desktop/issues/7514 | 1 day, 14:33:37 | 16 days, 5:13:01 |
|
||||
| The tab on the right displays an exception | https://github.com/zen-browser/desktop/issues/7513 | None | None |
|
||||
| Sidebar tab UI breaks when dragging tab to pinned area during Glance preview | https://github.com/zen-browser/desktop/issues/7511 | 1:30:49 | None |
|
||||
| The sidetab is bugged | https://github.com/zen-browser/desktop/issues/7510 | 7:06:42 | None |
|
||||
| The pop-up window has two lines | https://github.com/zen-browser/desktop/issues/7509 | 1 day, 10:21:56 | 1 day, 10:21:56 |
|
||||
| Delay in updating changes during web development on Windows 11 | https://github.com/zen-browser/desktop/issues/7508 | 11 days, 1:09:00 | None |
|
||||
| Closing tabs is too slow when many tabs are open | https://github.com/zen-browser/desktop/issues/7507 | None | 6 days, 10:18:17 |
|
||||
| Zen browser does not have rounded corners on the bottom | https://github.com/zen-browser/desktop/issues/7506 | 1 day, 11:22:11 | 1 day, 11:22:11 |
|
||||
| Many keyboard shortctut stopped working | https://github.com/zen-browser/desktop/issues/7504 | None | 1 day, 13:16:17 |
|
||||
| Keyboard Shortcuts Conflict with Polish Programmer Layout on Windows | https://github.com/zen-browser/desktop/issues/7502 | None | 1 day, 16:06:30 |
|
||||
| "wheel" event does not fire for horizontal scrolling on web pages | https://github.com/zen-browser/desktop/issues/7499 | 0:23:12 | 1 day, 6:35:06 |
|
||||
| handoffToAwesomebar set to false no longer works. | https://github.com/zen-browser/desktop/issues/7494 | 7:04:46 | 7:04:46 |
|
||||
| Zen Sidebar got really big and I cannot use the browser | https://github.com/zen-browser/desktop/issues/7493 | 0:50:22 | 8:53:04 |
|
||||
| Closing Glance from Essentials or Pinned tabs exits tab to blank screen | https://github.com/zen-browser/desktop/issues/7492 | 1 day, 13:50:43 | 1 day, 13:50:43 |
|
||||
| logs off from every account on restart on MAC x64 | https://github.com/zen-browser/desktop/issues/7491 | 12 days, 4:18:12 | 12 days, 13:46:23 |
|
||||
| Tab Preview not working | https://github.com/zen-browser/desktop/issues/7490 | 3:07:01 | 7:09:23 |
|
||||
| [Twilight 1.11.2] Sidebar wont open in compact mode upon startup | https://github.com/zen-browser/desktop/issues/7489 | 12:38:26 | 21:42:47 |
|
||||
| Zen specific Shortcut Keys not working | https://github.com/zen-browser/desktop/issues/7488 | 3 days, 1:42:36 | 6 days, 12:29:56 |
|
||||
| Tabs not opening in startup | https://github.com/zen-browser/desktop/issues/7485 | 3:07:38 | 7 days, 2:44:07 |
|
||||
| Incognito mode doent work | https://github.com/zen-browser/desktop/issues/7483 | None | 1 day, 23:03:21 |
|
||||
| reddit comments can't be seen | https://github.com/zen-browser/desktop/issues/7482 | 3:00:09 | None |
|
||||
| Multi-Containers add-on fails display setting sub-pages | https://github.com/zen-browser/desktop/issues/7481 | None | None |
|
||||
| Essentials MAJOR layout shift when entering or exiting Compact Mode | https://github.com/zen-browser/desktop/issues/7480 | 8:02:54 | 2 days, 9:04:45 |
|
||||
| Gnome Extensions addon not working | https://github.com/zen-browser/desktop/issues/7479 | 1 day, 0:41:57 | None |
|
||||
| The Web Panel is missing (alt+p) | https://github.com/zen-browser/desktop/issues/7478 | 0:04:11 | 1:02:59 |
|
||||
| Workspace icon not visible, unable to create new workspaces | https://github.com/zen-browser/desktop/issues/7476 | 9:46:52 | 9:46:53 |
|
||||
| Sidebar option "Move sidebar to the right"/"Move sidebar to the left" stopped working. | https://github.com/zen-browser/desktop/issues/7474 | 0:39:39 | 0:39:39 |
|
||||
| Unable to reorder essentials - dragging puts them at the end | https://github.com/zen-browser/desktop/issues/7473 | 5 days, 19:40:17 | None |
|
||||
| Profile damaged after a power outage | https://github.com/zen-browser/desktop/issues/7472 | 2:36:37 | 2:36:37 |
|
||||
| Refresh button going out of the single toolbar view (Tab) | https://github.com/zen-browser/desktop/issues/7469 | 1 day, 10:13:58 | None |
|
||||
| Can't open Google page, but Edge can | https://github.com/zen-browser/desktop/issues/7468 | 3:34:47 | 7:01:59 |
|
||||
| Tabs close when opening a private window | https://github.com/zen-browser/desktop/issues/7467 | 1:49:32 | 19:09:09 |
|
||||
| Sidebar does not really hide properly and it still visible without tab bars | https://github.com/zen-browser/desktop/issues/7466 | 0:06:06 | 1:28:35 |
|
||||
| In continuous loop of crashes after update | https://github.com/zen-browser/desktop/issues/7465 | 12:02:49 | None |
|
||||
| Unable to produce videos from Disney and Netflix pages | https://github.com/zen-browser/desktop/issues/7463 | 0:40:20 | 12:38:43 |
|
||||
| "Find in Settings" box can't type anything into | https://github.com/zen-browser/desktop/issues/7460 | None | 12:49:08 |
|
||||
| Browser breaks shortly after 'Close other tabs' | https://github.com/zen-browser/desktop/issues/7459 | None | 17:27:47 |
|
||||
| Split View fails when the history tab is open | https://github.com/zen-browser/desktop/issues/7458 | 8:04:46 | 16:12:37 |
|
||||
| "The application has failed to start because its side-by-side configuration is incorrect." | https://github.com/zen-browser/desktop/issues/7457 | 0:54:42 | 4:45:02 |
|
||||
| opacity of #urlbar element is sometimes overwritten | https://github.com/zen-browser/desktop/issues/7454 | None | 2:25:01 |
|
||||
| Enable Restore pinned tabs to their originally pinned URL on startup setting does not work | https://github.com/zen-browser/desktop/issues/7453 | 2:00:44 | 9 days, 18:38:49 |
|
||||
| misclick caused by tab context menu | https://github.com/zen-browser/desktop/issues/7452 | 0:56:17 | 0:56:17 |
|
||||
| Cookie named SESS disappears after restart | https://github.com/zen-browser/desktop/issues/7451 | 3 days, 21:47:30 | None |
|
||||
| Impossible to click "Add mailto handler" popup — only visible on hover and disappears immediately | https://github.com/zen-browser/desktop/issues/7450 | 6 days, 5:39:09 | None |
|
||||
| pinned extensions appear visually bugged when activating 'toggle sidebars width' shortcut from single toolbar mode. | https://github.com/zen-browser/desktop/issues/7448 | 0:30:31 | 0:30:31 |
|
||||
| URL only appears after typing even when set to Always Floating | https://github.com/zen-browser/desktop/issues/7446 | 0:47:21 | 2 days, 5:09:45 |
|
||||
| Drag and drop files not working on Linux | https://github.com/zen-browser/desktop/issues/7445 | 1:14:52 | 10:51:52 |
|
||||
| Tooltips flickering when there is a tab with a video(even if the video is paused) | https://github.com/zen-browser/desktop/issues/7444 | 0:05:12 | 0:08:28 |
|
||||
| Zen URL Bar floats on New Tab with 'Floating Only When Typing' option | https://github.com/zen-browser/desktop/issues/7441 | 4:37:47 | None |
|
||||
| Essentials Tab – Confusing Right-Click Options (Close Tab & Remove from Essentails function exactly the same) | https://github.com/zen-browser/desktop/issues/7440 | 0:15:16 | 0:47:28 |
|
||||
| Cannot close customize toolbar tab | https://github.com/zen-browser/desktop/issues/7438 | 9:45:55 | None |
|
||||
| Miniplayer strange behaviour when redirecting to the music tab on another workspace | https://github.com/zen-browser/desktop/issues/7436 | None | None |
|
||||
| Pinned Tab URL update toast being overlayed by container name | https://github.com/zen-browser/desktop/issues/7435 | None | None |
|
||||
| "Open link in New Tab" does not follow the "Move the new tab button to the top" Setting | https://github.com/zen-browser/desktop/issues/7432 | 23:59:16 | None |
|
||||
| Print Menu/Screen does not Adjust to Split Tabs | https://github.com/zen-browser/desktop/issues/7431 | 10 days, 16:43:02 | None |
|
||||
| Mouse-over highlight colors in dropdown menus are virtually impossible to read. | https://github.com/zen-browser/desktop/issues/7430 | None | None |
|
||||
| Sidebar padding takes space in full screen | https://github.com/zen-browser/desktop/issues/7429 | 2:42:13 | None |
|
||||
| Passkey doesn't work on Windows Machine | https://github.com/zen-browser/desktop/issues/7428 | 3:55:01 | 4 days, 14:45:14 |
|
||||
| Split button in search bar no longer present | https://github.com/zen-browser/desktop/issues/7427 | 4:46:19 | 1 day, 2:35:50 |
|
||||
| Opening new window breaks essentials section | https://github.com/zen-browser/desktop/issues/7426 | 1 day, 20:57:12 | 2 days, 17:13:45 |
|
||||
| Fixed split tabs don't preserve width after closing the browser | https://github.com/zen-browser/desktop/issues/7425 | 14 days, 19:41:02 | 18 days, 21:07:37 |
|
||||
| Tab Hover Text Flickering | https://github.com/zen-browser/desktop/issues/7424 | 0:44:39 | 21:20:07 |
|
||||
| Customise toolbar: Transparent background | https://github.com/zen-browser/desktop/issues/7423 | 2 days, 0:20:25 | None |
|
||||
| The split-view view mode switch button is gone | https://github.com/zen-browser/desktop/issues/7422 | 0:24:53 | 1:15:04 |
|
||||
| Close button bug on windows | https://github.com/zen-browser/desktop/issues/7421 | 3:16:32 | 6:04:38 |
|
||||
| Button to manage split view no longer exists after recent update | https://github.com/zen-browser/desktop/issues/7420 | 0:07:59 | 1:47:42 |
|
||||
| Right Click on tab spawns dropdown menu under mouse cursor leading to instantly chosing menu item. | https://github.com/zen-browser/desktop/issues/7419 | None | None |
|
||||
| File Handler Dialog not opening in Archlinux (Hyprland) | https://github.com/zen-browser/desktop/issues/7418 | 14 days, 20:46:21 | None |
|
||||
| New Tab UI Issue When Fullscreen | https://github.com/zen-browser/desktop/issues/7416 | 3:16:51 | 1 day, 10:25:21 |
|
||||
| Re-arranging essentials tabs doesn't work as expected | https://github.com/zen-browser/desktop/issues/7415 | 8 days, 14:53:44 | None |
|
||||
| Moderate hardening causes new tab functionality to break | https://github.com/zen-browser/desktop/issues/7414 | 1:28:39 | 1:45:02 |
|
||||
| Mute icon of tab are clipped in compact mode | https://github.com/zen-browser/desktop/issues/7413 | 13:32:26 | 5 days, 9:41:24 |
|
||||
| Terrible video playback performance, stuttering, freezing | https://github.com/zen-browser/desktop/issues/7412 | 7:19:05 | 9 days, 0:12:29 |
|
||||
| Firefox notes doesn't open on the right even though that setting is toggled | https://github.com/zen-browser/desktop/issues/7411 | 2:24:04 | 11:55:33 |
|
||||
| Popping sound when skipping/exiting YouTube videos | https://github.com/zen-browser/desktop/issues/7410 | None | None |
|
||||
| 1.8b new Color Picker always clears custom colors after switching workspaces | https://github.com/zen-browser/desktop/issues/7409 | 2 days, 5:06:41 | 2 days, 11:01:52 |
|
||||
| [Regression 1.8b+] Tab session extensions cannot record across workspaces anymore | https://github.com/zen-browser/desktop/issues/7408 | None | 5 days, 11:39:13 |
|
||||
| While watching product videos on Temu.com, most of the time it does not open. | https://github.com/zen-browser/desktop/issues/7406 | 0:35:26 | None |
|
||||
| search shortcut issues | https://github.com/zen-browser/desktop/issues/7405 | 0:59:18 | 2 days, 21:18:57 |
|
||||
| Moving sidebar to right dosen't work | https://github.com/zen-browser/desktop/issues/7404 | 0:40:33 | 0:40:35 |
|
||||
| Change tab to workspace doesn't work | https://github.com/zen-browser/desktop/issues/7403 | 0:54:36 | 5:40:26 |
|
||||
| Closing the right hand side of a split tab shows the next tab, rather than the left side of the split. | https://github.com/zen-browser/desktop/issues/7402 | None | None |
|
||||
| Search engines in search box selector gone | https://github.com/zen-browser/desktop/issues/7401 | 0:26:12 | 1:42:08 |
|
||||
| Update Container while switching tab to another workspace | https://github.com/zen-browser/desktop/issues/7399 | 1:37:45 | 3:02:04 |
|
||||
| Tooltips flickering | https://github.com/zen-browser/desktop/issues/7395 | 1 day, 8:58:26 | 1 day, 17:13:03 |
|
||||
| Unable to render page when closing last tab with Ctrl+F4 | https://github.com/zen-browser/desktop/issues/7392 | None | None |
|
||||
| Zen does not respect `gtk-application-prefer-dark-theme` | https://github.com/zen-browser/desktop/issues/7391 | 21:15:24 | 9 days, 9:00:51 |
|
||||
| alt is not being recognize | https://github.com/zen-browser/desktop/issues/7390 | None | None |
|
||||
| Zen HSTS Security Issue on genuine Websites | https://github.com/zen-browser/desktop/issues/7389 | None | None |
|
||||
| Tiktok gives error while using | https://github.com/zen-browser/desktop/issues/7388 | 0:40:53 | 9 days, 11:10:46 |
|
||||
| With v1.11b upgrade Firefox v137 but Not group tabs | https://github.com/zen-browser/desktop/issues/7387 | 0:47:12 | 0:51:31 |
|
||||
| Alt + Clicking a link to open it in glance mode does not work in http pages | https://github.com/zen-browser/desktop/issues/7386 | 5 days, 9:24:16 | 5 days, 9:24:16 |
|
||||
| URL click selects entire url instead of placing cursor at the clicked position | https://github.com/zen-browser/desktop/issues/7385 | 6 days, 1:13:15 | None |
|
||||
| Close Window Keyboard Shortcut does nothing (due to conflict with Toggle DOM shortcut) | https://github.com/zen-browser/desktop/issues/7384 | 16 days, 14:22:58 | None |
|
||||
| Bookmark/side bar aligns left when set to right | https://github.com/zen-browser/desktop/issues/7382 | 0:12:08 | 5 days, 0:06:03 |
|
||||
| Opening the Web Inspector destroys Zen's layout in an unrecoverable manner with letterboxing | https://github.com/zen-browser/desktop/issues/7380 | 2 days, 10:03:45 | None |
|
||||
| Extension Popout not Working on Multiple Toolbar View | https://github.com/zen-browser/desktop/issues/7379 | None | None |
|
||||
| Extension background remains while extension window closes when moving main window | https://github.com/zen-browser/desktop/issues/7378 | 10:05:14 | 9 days, 2:14:11 |
|
||||
| Firefox Labs Missing in 1.11.1b | https://github.com/zen-browser/desktop/issues/7377 | 1 day, 7:24:11 | None |
|
||||
| Crashing of zen, reopening as a new browser every time | https://github.com/zen-browser/desktop/issues/7376 | 4:07:26 | 16 days, 7:00:23 |
|
||||
| COMPLETE COLLAPSED TOOLBAR DISAPPERED | https://github.com/zen-browser/desktop/issues/7375 | 0:02:50 | 3:15:12 |
|
||||
| Sidebar Scroll undraggable by mouse | https://github.com/zen-browser/desktop/issues/7374 | None | 9 days, 12:16:46 |
|
||||
| Unload Tab Doesn't Release Resources | https://github.com/zen-browser/desktop/issues/7373 | 7:19:58 | 10 days, 9:05:02 |
|
||||
| Tabs sent to another device go to the default workspace | https://github.com/zen-browser/desktop/issues/7371 | None | None |
|
||||
| Color gradient window glitching when windowing browser | https://github.com/zen-browser/desktop/issues/7370 | None | 8:53:18 |
|
||||
| (Gradient) Custom colors multiplying their instance in 1.11.1 | https://github.com/zen-browser/desktop/issues/7369 | 0:37:52 | 3 days, 12:39:46 |
|
||||
| Opening in new tab from a Glance window opens under unloaded tabs instead of the current tab | https://github.com/zen-browser/desktop/issues/7368 | None | None |
|
||||
| Extremely annoying update popups | https://github.com/zen-browser/desktop/issues/7367 | None | None |
|
||||
| Unload Tabs Showing in Tab Cycling | https://github.com/zen-browser/desktop/issues/7365 | None | 9 days, 19:18:22 |
|
||||
| Restoring previous session puts Zen into broken state | https://github.com/zen-browser/desktop/issues/7364 | 17 days, 21:23:34 | None |
|
||||
| Unable to use split view with essentials | https://github.com/zen-browser/desktop/issues/7363 | 8:30:43 | 11:11:45 |
|
||||
| Blurry text on ultrawide resolutions | https://github.com/zen-browser/desktop/issues/7362 | 0:06:03 | 23 days, 11:20:05 |
|
||||
| Floating URL bar disappears on right click | https://github.com/zen-browser/desktop/issues/7361 | None | 7 days, 3:53:43 |
|
||||
| Extension thinks it is always running in a private window | https://github.com/zen-browser/desktop/issues/7358 | None | None |
|
||||
| All tabs keep crashing | https://github.com/zen-browser/desktop/issues/7356 | 1:29:18 | None |
|
||||
| Error building Zen browser from AUR repositories | https://github.com/zen-browser/desktop/issues/7354 | 0:39:39 | 4:20:43 |
|
||||
| Reproducable softlock on moving workspace | https://github.com/zen-browser/desktop/issues/7353 | 20:45:28 | None |
|
||||
| Notifications appear as dialogue boxes | https://github.com/zen-browser/desktop/issues/7352 | 2:49:03 | None |
|
||||
| Quiting browser closes all tabs when pressing the red close button (top left mac) | https://github.com/zen-browser/desktop/issues/7351 | 2:01:54 | 17:06:35 |
|
||||
| YouTube player sometimes incorrectly opens in fullscreen mode | https://github.com/zen-browser/desktop/issues/7350 | None | None |
|
||||
| Youtube video playback hangs when switching audio device | https://github.com/zen-browser/desktop/issues/7349 | 2:28:29 | None |
|
||||
| AppImage GearLever updates broken since v1.11 | https://github.com/zen-browser/desktop/issues/7348 | None | None |
|
||||
| On launch and changing workspace, will open first tab in tab list | https://github.com/zen-browser/desktop/issues/7347 | 22:54:43 | None |
|
||||
| Subtitle in the Picture-In-Picture mode does not work properly | https://github.com/zen-browser/desktop/issues/7346 | None | 0:11:37 |
|
||||
| Opening Findbar shifts main browser windows content up for a split second | https://github.com/zen-browser/desktop/issues/7345 | None | None |
|
||||
| Bookmarks not showing in full-screen mode. | https://github.com/zen-browser/desktop/issues/7344 | 2 days, 21:14:21 | None |
|
||||
| Cannot change sidebar location | https://github.com/zen-browser/desktop/issues/7342 | None | 0:02:42 |
|
||||
| Workspace switch keyboard shortcut not working | https://github.com/zen-browser/desktop/issues/7341 | 7:44:33 | 10 days, 22:57:22 |
|
||||
| The split tabs from glance aren't restored after browser restarted | https://github.com/zen-browser/desktop/issues/7340 | None | None |
|
||||
| In split view, top bar onHover response is inconsistent | https://github.com/zen-browser/desktop/issues/7339 | 1:20:40 | 21 days, 0:00:20 |
|
||||
| "Learn more" hyperlink leads to broken releases URL | https://github.com/zen-browser/desktop/issues/7338 | None | None |
|
||||
| Flickering unusable menus if `widget.wayland.fractional-scale.enabled` is enabled | https://github.com/zen-browser/desktop/issues/7337 | None | None |
|
||||
| Web Panel is missing and sidebar cant move to right side | https://github.com/zen-browser/desktop/issues/7335 | 0:32:24 | 1 day, 5:28:09 |
|
||||
| Got IDBDatabase.transaction error when I tried to import Yomitan's dictionary | https://github.com/zen-browser/desktop/issues/7334 | 9:27:22 | 9:27:22 |
|
||||
| Vsync is broken (Linux) | https://github.com/zen-browser/desktop/issues/7333 | 1:43:20 | 2:45:25 |
|
||||
| Sidebar layout takes space when switching to fullscreen in compact mode | https://github.com/zen-browser/desktop/issues/7332 | 15:21:13 | 6 days, 1:37:58 |
|
||||
| Input type `number` accept string | https://github.com/zen-browser/desktop/issues/7330 | 4 days, 5:56:33 | 4 days, 5:56:33 |
|
||||
| Blur is no longer working on Linux | https://github.com/zen-browser/desktop/issues/7329 | 12:53:00 | 18:37:20 |
|
||||
| Black text in right click menu | https://github.com/zen-browser/desktop/issues/7328 | 4 days, 9:19:32 | None |
|
||||
| Window does not close with last tab, even with `browser.tabs.closeWindowWithLastTab` set to true | https://github.com/zen-browser/desktop/issues/7327 | 2 days, 23:22:12 | None |
|
||||
| zen minimal exit buttons become square on new update | https://github.com/zen-browser/desktop/issues/7325 | 6:01:23 | None |
|
||||
| Grey flash under mica context menus when clicked | https://github.com/zen-browser/desktop/issues/7324 | 4 days, 11:00:40 | 4 days, 11:00:40 |
|
||||
| Zen Browser Releases replaced | https://github.com/zen-browser/desktop/issues/7322 | 0:13:52 | 0:13:54 |
|
||||
| Tab Restore failed on Automatic Update | https://github.com/zen-browser/desktop/issues/7321 | 0:20:15 | None |
|
||||
| Can't move sidebar to the right? | https://github.com/zen-browser/desktop/issues/7320 | 0:15:28 | 1 day, 9:22:24 |
|
||||
| Glance Broken on Pinned Tabs | https://github.com/zen-browser/desktop/issues/7318 | 2:30:41 | 23:13:21 |
|
||||
| Sidebar width becomes thinner in compact upon startup (doesn't retain predetermined width) | https://github.com/zen-browser/desktop/issues/7316 | 0:04:57 | 6 days, 2:27:44 |
|
||||
| Greyed out part of URL sometimes turns back to white incosistently | https://github.com/zen-browser/desktop/issues/7315 | None | None |
|
||||
| Dynamic theme mode not working | https://github.com/zen-browser/desktop/issues/7313 | 1 day, 2:42:51 | 2 days, 15:43:17 |
|
||||
| Reading mode button is missing in single sidebar mode | https://github.com/zen-browser/desktop/issues/7312 | None | None |
|
||||
| The sidebar is a little smaller, than its set size on startup in compact mode. | https://github.com/zen-browser/desktop/issues/7311 | 0:17:43 | 0:22:32 |
|
||||
| Online TV doesn't show picture, there's only sound | https://github.com/zen-browser/desktop/issues/7309 | None | None |
|
||||
| Glance window expand button doesn't work | https://github.com/zen-browser/desktop/issues/7308 | 2:01:15 | 2:01:15 |
|
||||
| Resizing windows is broken when "privacy.resistfingerprinting" enabled and set to 1920x1080 | https://github.com/zen-browser/desktop/issues/7307 | 4 days, 0:12:26 | None |
|
||||
| Going to the next or previous workspace using keyboard shortcuts is not working when the current tab has figma open | https://github.com/zen-browser/desktop/issues/7306 | None | None |
|
||||
| Profile badge no longer shows up on taskbar icon | https://github.com/zen-browser/desktop/issues/7305 | None | 21 days, 20:20:01 |
|
||||
| Unable to change how the new tab works | https://github.com/zen-browser/desktop/issues/7304 | 14:37:11 | 5 days, 22:16:36 |
|
||||
| Bookmarks won't open when current container tab is not the default container of the workspace | https://github.com/zen-browser/desktop/issues/7303 | None | None |
|
||||
| Extension view not rendered in single toolbar view | https://github.com/zen-browser/desktop/issues/7301 | 1:02:07 | None |
|
||||
| scroll icon not working | https://github.com/zen-browser/desktop/issues/7299 | None | 1 day, 5:21:02 |
|
||||
| see through background or grey. | https://github.com/zen-browser/desktop/issues/7298 | None | None |
|
||||
| Glance split view button opens full page | https://github.com/zen-browser/desktop/issues/7297 | 8:01:18 | 14:37:04 |
|
||||
| No split view icon in urlbar | https://github.com/zen-browser/desktop/issues/7296 | 2:35:01 | 12:19:25 |
|
||||
| Workspaces temporarily inherit essential tabs from the source workspace a container tab was switched from | https://github.com/zen-browser/desktop/issues/7295 | 7 days, 16:30:59 | 11 days, 23:18:33 |
|
||||
| UI misalignments in sidebar | https://github.com/zen-browser/desktop/issues/7294 | None | 1 day, 12:20:56 |
|
||||
| Single Toolbar icons shuffle position on restart | https://github.com/zen-browser/desktop/issues/7293 | None | None |
|
||||
| Fix for #7078 has broken zen workspaces (upon restart) | https://github.com/zen-browser/desktop/issues/7289 | 0:19:19 | 2 days, 0:09:09 |
|
||||
| Anthropic's Claude freezes only on Zen browser | https://github.com/zen-browser/desktop/issues/7287 | 0:53:16 | 1:25:34 |
|
||||
| Unable to change tabs in the certificate manager. | https://github.com/zen-browser/desktop/issues/7286 | 0:29:07 | 5:25:58 |
|
||||
| Cyrillic display problem | https://github.com/zen-browser/desktop/issues/7285 | None | None |
|
||||
| Panel goes off the screen when adding new extension | https://github.com/zen-browser/desktop/issues/7281 | None | 1 day, 2:35:00 |
|
||||
| XDG Base Directory support, and/or data directory environment variable | https://github.com/zen-browser/desktop/issues/7280 | 2 days, 10:45:19 | None |
|
||||
| Short width and fixed Side Bar | https://github.com/zen-browser/desktop/issues/7279 | 1:29:03 | 1 day, 2:14:11 |
|
||||
| Switch to tab not working if tab is unloaded | https://github.com/zen-browser/desktop/issues/7278 | 1 day, 11:01:11 | None |
|
||||
| Incorrect Cedilla Input Rendering | https://github.com/zen-browser/desktop/issues/7276 | None | None |
|
||||
| Key bindings without modifier still apply when typing in to input fields | https://github.com/zen-browser/desktop/issues/7275 | None | None |
|
||||
| MX Master 3 Forward/Back Mouse Buttons Don't Work For Switching Workspaces While Logi Options+ is Installed | https://github.com/zen-browser/desktop/issues/7274 | 12:18:06 | 13 days, 10:49:45 |
|
||||
| Tab preview on hover doesn't work | https://github.com/zen-browser/desktop/issues/7273 | None | 0:03:37 |
|
||||
| Change Tab(s) To Workspace broken in 1.11b | https://github.com/zen-browser/desktop/issues/7272 | 10:07:25 | 11:07:25 |
|
||||
| Bookmarks don't open in new tab when using new tab | https://github.com/zen-browser/desktop/issues/7271 | 1:24:44 | None |
|
||||
| Portable Installation Mode will no longer exist and will not be updated? | https://github.com/zen-browser/desktop/issues/7270 | 16:31:52 | 11 days, 17:33:57 |
|
||||
| Split glance tab button opens in new tab when opened from Essentials tab | https://github.com/zen-browser/desktop/issues/7269 | 11 days, 17:48:17 | 11 days, 17:48:17 |
|
||||
| Open animation for menus start from the wrong side | https://github.com/zen-browser/desktop/issues/7267 | 11 days, 18:21:58 | 11 days, 18:21:58 |
|
||||
| There is no workspaces in fresh Zen install.. | https://github.com/zen-browser/desktop/issues/7266 | 0:16:38 | 14:56:31 |
|
||||
| Extension Settings not displaying when no tab is selected | https://github.com/zen-browser/desktop/issues/7265 | 6 days, 14:56:37 | None |
|
||||
| Modal window for a "New Tab" dissapears when switching language using Win + Space on Linux Mint | https://github.com/zen-browser/desktop/issues/7264 | 11 days, 19:09:08 | 11 days, 19:09:08 |
|
||||
| Glance not works on local http pages | https://github.com/zen-browser/desktop/issues/7263 | 0:39:34 | 11 days, 19:55:22 |
|
||||
| Compact mode leaves empty space after sidebar disappeared | https://github.com/zen-browser/desktop/issues/7262 | 0:10:52 | 15 days, 8:01:40 |
|
||||
| In WIN10, when browser is maximized, an autohide taskbar cannot unhide | https://github.com/zen-browser/desktop/issues/7261 | None | 3 days, 7:50:43 |
|
||||
| "Move sidebar to right" is not working | https://github.com/zen-browser/desktop/issues/7260 | 3:02:35 | 4 days, 3:22:44 |
|
||||
| Side by side view leaves a gap in the tabs at the side bar | https://github.com/zen-browser/desktop/issues/7258 | None | None |
|
||||
| White text in right click menu on browser chrome in light mode | https://github.com/zen-browser/desktop/issues/7257 | 8 days, 21:19:48 | None |
|
||||
| URL always focused when I open a new tab. | https://github.com/zen-browser/desktop/issues/7255 | 5:53:57 | 9 days, 23:59:28 |
|
||||
| Essential tabs. Glance window expanding event trigger the Leave event of the Google Meet stream | https://github.com/zen-browser/desktop/issues/7254 | 5:29:41 | 18:32:56 |
|
||||
| IDN address shows punny code in URL | https://github.com/zen-browser/desktop/issues/7253 | None | None |
|
||||
| UI display exception in right tab mode | https://github.com/zen-browser/desktop/issues/7252 | 18:35:56 | None |
|
||||
| Bugs in Tiktok web site | https://github.com/zen-browser/desktop/issues/7250 | None | None |
|
||||
| Pinned sidebar overlaps bookmarks bar in compact mode with no tabs open | https://github.com/zen-browser/desktop/issues/7249 | 1:14:48 | 13 days, 2:45:51 |
|
||||
| Search Window Closes When Switching Keyboard Language in GNOME | https://github.com/zen-browser/desktop/issues/7248 | None | None |
|
||||
| The Window Control Buttons sometimes are unavailable after screen sharing. | https://github.com/zen-browser/desktop/issues/7247 | None | None |
|
||||
| [BUG] Extensions become huge after collapsing the side bar | https://github.com/zen-browser/desktop/issues/7246 | 0:05:27 | None |
|
||||
| Essential tabs do not auto-load when opened after reopening Zen | https://github.com/zen-browser/desktop/issues/7245 | None | None |
|
||||
| Azure Devops Server not loading properly | https://github.com/zen-browser/desktop/issues/7244 | None | None |
|
||||
| Image Previews Not Displaying in Google Chat on Zen Browser | https://github.com/zen-browser/desktop/issues/7243 | 0:02:08 | None |
|
||||
| [Twilight 1.11] Janky rendering behaviour with split view | https://github.com/zen-browser/desktop/issues/7242 | None | 1 day, 14:55:44 |
|
||||
| INSANE MEMORY LEAK THAT YOU KEEP CLOSING & IGNORING | https://github.com/zen-browser/desktop/issues/7240 | 0:10:04 | 2:32:53 |
|
||||
| --zen-sidebar-width not set correctly when opening Zen with compact mode enabled | https://github.com/zen-browser/desktop/issues/7239 | 7:28:04 | 7:56:39 |
|
||||
| Ctrl + T and Ctrl + L popup address bar only shows up after starting to type | https://github.com/zen-browser/desktop/issues/7238 | None | None |
|
||||
| Some Shortcuts not working in some keyboard layouts. | https://github.com/zen-browser/desktop/issues/7237 | 13 days, 9:31:33 | 13 days, 9:31:33 |
|
||||
| Re-Opening: Stopping YouTube video on Zen forcing Alcove (dynamic island app) to quit and cannot be launched again | https://github.com/zen-browser/desktop/issues/7235 | None | None |
|
||||
| Thumbwheel MX Master 3s to switch a workspace | https://github.com/zen-browser/desktop/issues/7234 | 14 days, 15:00:31 | None |
|
||||
| Browser unsupported error on Google Docs | https://github.com/zen-browser/desktop/issues/7233 | None | None |
|
||||
| Previous windows and tabs are not reopened on Zen for mac | https://github.com/zen-browser/desktop/issues/7232 | None | None |
|
||||
| Keyboard shortcut binding: Recieve keys as accent characters | https://github.com/zen-browser/desktop/issues/7230 | 10 days, 2:40:15 | 13 days, 14:20:32 |
|
||||
| Cannot login to Syncthing GUI with username/password | https://github.com/zen-browser/desktop/issues/7228 | 4 days, 11:35:55 | None |
|
||||
| Minimize to taskbar and full screen buttons not showing up - Linux | https://github.com/zen-browser/desktop/issues/7227 | None | None |
|
||||
| Zen makes PC completely unresponsive | https://github.com/zen-browser/desktop/issues/7226 | 1 day, 20:39:55 | 11 days, 16:18:54 |
|
||||
| Bookmark Manager: Workspace not populated nor editable | https://github.com/zen-browser/desktop/issues/7225 | 2:56:17 | 2:56:17 |
|
||||
| Twilight and Zen side by side install bugged on macOS | https://github.com/zen-browser/desktop/issues/7224 | None | None |
|
||||
| Element.io: clicking on link can steal focus, dim page | https://github.com/zen-browser/desktop/issues/7222 | 22:41:10 | None |
|
||||
| Essential tabs disappear if they are assigned to different containers | https://github.com/zen-browser/desktop/issues/7220 | 20:50:53 | None |
|
||||
| Pages Not Loading – Only Works in Private Mode | https://github.com/zen-browser/desktop/issues/7219 | 15:48:55 | 7 days, 12:35:00 |
|
||||
| Youtube Audio Jitters while i play league of legends | https://github.com/zen-browser/desktop/issues/7217 | None | None |
|
||||
| Split tabs resizing bar shows through Side web panels | https://github.com/zen-browser/desktop/issues/7216 | None | None |
|
||||
| Close button hover makes browser have an epileptic attack | https://github.com/zen-browser/desktop/issues/7215 | None | None |
|
||||
| Zen Support Link in Settings menu links to Mozilla instead of Zen | https://github.com/zen-browser/desktop/issues/7214 | None | None |
|
||||
| Editing a URL always opens a new tab | https://github.com/zen-browser/desktop/issues/7213 | 19:28:32 | 20:39:12 |
|
||||
| Keeps logging out of my accounts | https://github.com/zen-browser/desktop/issues/7212 | 20 days, 0:43:00 | None |
|
||||
| Split View - Grid: When reopening Zen, grid layout is "forgotten" and reset back to default | https://github.com/zen-browser/desktop/issues/7211 | 16 days, 1:00:24 | None |
|
||||
| iCloud Password Extension Bug on Mac 15.4 - This extension requires Sonoma or above / Verification Code does not appear | https://github.com/zen-browser/desktop/issues/7210 | 1 day, 8:30:59 | None |
|
||||
| Status bar graphical issue/glitch | https://github.com/zen-browser/desktop/issues/7208 | 20:10:21 | 9 days, 12:31:32 |
|
||||
| When restoring session manually, It always creates extra window apart from the previous session | https://github.com/zen-browser/desktop/issues/7207 | None | None |
|
||||
| Split view bugs out when open a pop up page | https://github.com/zen-browser/desktop/issues/7206 | 0:48:48 | None |
|
||||
| Can't Switch Profile | https://github.com/zen-browser/desktop/issues/7205 | 1:13:14 | 1:13:14 |
|
||||
| start too slowly | https://github.com/zen-browser/desktop/issues/7204 | 0:29:57 | 1:43:28 |
|
||||
| [twilight 1.10.3] can't create workspaces at all | https://github.com/zen-browser/desktop/issues/7203 | 1:36:25 | 2:02:36 |
|
||||
| Zen ignores system trusted certs when run in flatpak | https://github.com/zen-browser/desktop/issues/7202 | 2:03:40 | None |
|
||||
| Google Docs stops accepting keyboard input | https://github.com/zen-browser/desktop/issues/7201 | 1 day, 6:00:18 | None |
|
||||
| Default Profile Cannot be Deleted | https://github.com/zen-browser/desktop/issues/7200 | 5:20:28 | 5 days, 16:04:35 |
|
||||
| Zen not respecting system theme | https://github.com/zen-browser/desktop/issues/7199 | 3:10:26 | 4:25:44 |
|
||||
| Opening multiple tabs to Zen Mods site to try multiple mods overwrites all new mods except the most recent | https://github.com/zen-browser/desktop/issues/7198 | None | None |
|
||||
| INSANE MEMORY LEAK THAT YOU KEEP CLOSING & IGNORING | https://github.com/zen-browser/desktop/issues/7197 | 0:30:36 | 6:55:54 |
|
||||
| ETP icon missing | https://github.com/zen-browser/desktop/issues/7195 | 0:05:14 | 8:42:37 |
|
||||
| Any web page is not displayed | https://github.com/zen-browser/desktop/issues/7194 | 8:23:51 | 5 days, 1:34:24 |
|
||||
| Window buttons aren't filled to the top right. | https://github.com/zen-browser/desktop/issues/7193 | 11:18:10 | 11:18:10 |
|
||||
| Cursor not hiding when entering fullscreen playback on MacOS | https://github.com/zen-browser/desktop/issues/7192 | 0:02:58 | None |
|
||||
| Crash on wayland when using discrete GPU | https://github.com/zen-browser/desktop/issues/7190 | None | 24 days, 7:14:40 |
|
||||
| Web panel does not obey default zoom | https://github.com/zen-browser/desktop/issues/7189 | None | 3 days, 9:18:34 |
|
||||
| Compact mode does not show popup/redirect warnings | https://github.com/zen-browser/desktop/issues/7188 | 14 days, 19:04:37 | None |
|
||||
| Using lots of ram on mac | https://github.com/zen-browser/desktop/issues/7187 | 4:56:02 | 16:12:58 |
|
||||
| Background goes gray when I maximize the window | https://github.com/zen-browser/desktop/issues/7185 | None | None |
|
||||
| Level1techs forum loads VERY slowly only on Zen | https://github.com/zen-browser/desktop/issues/7184 | 5:43:12 | 17 days, 4:27:11 |
|
||||
| After deleting the non-deafult workspaces, any reference to workspaces disappeared | https://github.com/zen-browser/desktop/issues/7183 | 10 days, 20:48:36 | 14 days, 6:48:03 |
|
||||
| Essentials and pinned tabs get stuck in a half-glance state if a glance window is forced into a new container tab | https://github.com/zen-browser/desktop/issues/7182 | 7:36:25 | None |
|
||||
| Workspace navigation emojis should be emojis at all times | https://github.com/zen-browser/desktop/issues/7181 | 5:37:07 | 21 days, 20:30:16 |
|
||||
| Closing glance view with escape minimizes Zen on MacOS | https://github.com/zen-browser/desktop/issues/7179 | 7 days, 19:04:25 | None |
|
||||
| Thick Border around the context menus | https://github.com/zen-browser/desktop/issues/7177 | 12 days, 0:26:31 | None |
|
||||
| Sidebar popup doesn't work if running new tab from link on webpage | https://github.com/zen-browser/desktop/issues/7175 | 10 days, 10:52:50 | 15 days, 2:43:49 |
|
||||
| Slow startup on Windows | https://github.com/zen-browser/desktop/issues/7174 | None | None |
|
||||
| Glance opens on magnet links | https://github.com/zen-browser/desktop/issues/7173 | 23:54:11 | 1 day, 23:56:02 |
|
||||
| WebGL isn't supported | https://github.com/zen-browser/desktop/issues/7172 | 4 days, 9:42:07 | 4 days, 9:42:07 |
|
||||
| Cursor Auto-Highlight on Ctrl+Tab Disrupts Tab Cycling | https://github.com/zen-browser/desktop/issues/7170 | 11:18:59 | None |
|
||||
| Confirmation dialog before quitting prevents unattended macOS updates | https://github.com/zen-browser/desktop/issues/7169 | None | None |
|
||||
| Extension's options pop-up in the address after switching between single and multiple toolbars | https://github.com/zen-browser/desktop/issues/7168 | None | None |
|
||||
| Lag and auto-scroll upon switching from a workspace that has split tabs open | https://github.com/zen-browser/desktop/issues/7167 | None | None |
|
||||
| Essentials turning into pinned tab in new window | https://github.com/zen-browser/desktop/issues/7166 | None | None |
|
||||
| Option "Open links in tabs instead of new windows" unchecked after restart browser | https://github.com/zen-browser/desktop/issues/7165 | 4:30:57 | None |
|
||||
| Massive Screen Time spikes on MacOS | https://github.com/zen-browser/desktop/issues/7163 | 17 days, 15:28:42 | None |
|
||||
| Split screen weird behaviour | https://github.com/zen-browser/desktop/issues/7162 | 2 days, 7:25:53 | None |
|
||||
|
||||
_This report was generated with the [Issue Metrics Action](https://github.com/github/issue-metrics)_
|
||||
Search query used to find these items: `repo:zen-browser/desktop is:issue created:2025-04-01..2025-04-30`
|
||||
@@ -16,4 +16,4 @@
|
||||
|
||||
To save the tabs and identity them, they will contain a `zen-workspace-uuid` attribute with the workspace uuid.
|
||||
|
||||
We will make use of firefox's builtin session restore feature to save the tabs and windows after the user closes the browser.
|
||||
We will make use of Firefox's builtin session restore feature to save the tabs and windows after the user closes the browser.
|
||||
|
||||
2
l10n
2
l10n
Submodule l10n updated: 950562cd71...ebecb32da8
1269
package-lock.json
generated
1269
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -23,7 +23,9 @@
|
||||
"lint": "npx prettier . --check && autopep8 --diff scripts/ src/",
|
||||
"prepare": "husky",
|
||||
"reset-ff": "surfer reset",
|
||||
"surfer": "surfer"
|
||||
"surfer": "surfer",
|
||||
"test": "python3 scripts/run_tests.py",
|
||||
"test:dbg": "python3 scripts/run_tests.py --jsdebugger --debug-on-failure"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -40,9 +42,11 @@
|
||||
},
|
||||
"homepage": "https://github.com/zen-browser/desktop#readme",
|
||||
"dependencies": {
|
||||
"@zen-browser/surfer": "^1.11.6"
|
||||
"@zen-browser/surfer": "^1.11.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/preset-typescript": "^7.27.0",
|
||||
"formal-git": "^1.1.5",
|
||||
"husky": "^9.1.7",
|
||||
"lint-staged": "^15.3.0",
|
||||
"prettier": "^3.4.2",
|
||||
|
||||
@@ -38,7 +38,7 @@ def get_rc_response() -> Optional[str]:
|
||||
for tag_dict in data["tags"]:
|
||||
tag = tag_dict["tag"]
|
||||
if (tag.startswith("FIREFOX") and tag.endswith("_BUILD1")
|
||||
and "ESR" not in tag and "b" not in tag):
|
||||
and "ESR" not in tag and "b" not in tag and "ANDROID" not in tag):
|
||||
return (tag.replace("FIREFOX_", "").replace("_BUILD1",
|
||||
"").replace("_", "."))
|
||||
except (FileNotFoundError, json.JSONDecodeError) as e:
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
set -ex
|
||||
set -x
|
||||
|
||||
if ! [ -z "$ZEN_L10N_CURR_DIR" ]; then
|
||||
cd $ZEN_L10N_CURR_DIR
|
||||
fi
|
||||
|
||||
# remove "\r" from ./l10n/supported-languages
|
||||
# note: it's fine if it fails
|
||||
sed -i 's/\r$//' ./l10n/supported-languages
|
||||
|
||||
CURRENT_DIR=$(pwd)
|
||||
|
||||
@@ -17,6 +25,16 @@ cd firefox-l10n
|
||||
git checkout $LAST_FIREFOX_L10N_COMMIT
|
||||
cd $CURRENT_DIR
|
||||
|
||||
rsyncExists=$(command -v rsync)
|
||||
|
||||
if [ -z "$rsyncExists" ]; then
|
||||
echo "rsync not found, using cp instead"
|
||||
else
|
||||
echo "rsync found!"
|
||||
fi
|
||||
|
||||
set -e
|
||||
|
||||
update_language() {
|
||||
langId=$1
|
||||
cd ./l10n
|
||||
@@ -24,7 +42,13 @@ update_language() {
|
||||
|
||||
echo "Updating $langId"
|
||||
# move the contents from ../firefox-l10n/$langId to ./l10n/$langId
|
||||
rsync -av --progress ../firefox-l10n/$langId/ . --exclude .git
|
||||
# if rsync exists, use it
|
||||
# if not, use cp
|
||||
if [ -z "$rsyncExists" ]; then
|
||||
cp -r $CURRENT_DIR/l10n/firefox-l10n/$langId/* .
|
||||
else
|
||||
rsync -av --progress ../firefox-l10n/$langId/ . --exclude .git
|
||||
fi
|
||||
|
||||
cd $CURRENT_DIR
|
||||
}
|
||||
|
||||
30
scripts/fetch-formal-git-components.sh
Normal file
30
scripts/fetch-formal-git-components.sh
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
COMPONENT_ROOT=$(pwd)/src/zen
|
||||
|
||||
EXTRA_COMPONENTS=(
|
||||
"scripts"
|
||||
"workflows"
|
||||
"winsign"
|
||||
"flatpak"
|
||||
"configs"
|
||||
)
|
||||
|
||||
echo "" > .formal-git/components
|
||||
|
||||
# iterate top directories and adding the base name to .formal-git/components
|
||||
for dir in $(find $COMPONENT_ROOT -maxdepth 1 -type d | grep -v '\.git' | grep -v 'node_modules' | grep -v 'engine'); do
|
||||
if [ "$dir" != "$COMPONENT_ROOT" ]; then
|
||||
echo "$(basename $dir)" >> .formal-git/components
|
||||
fi
|
||||
done
|
||||
|
||||
# iterate over the extra components and adding them to .formal-git/components
|
||||
for extra in "${EXTRA_COMPONENTS[@]}"; do
|
||||
echo "$extra" >> .formal-git/components
|
||||
done
|
||||
|
||||
# remove all empty lines
|
||||
sed -i '/^$/d' .formal-git/components
|
||||
45
scripts/run_tests.py
Normal file
45
scripts/run_tests.py
Normal file
@@ -0,0 +1,45 @@
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def main():
|
||||
project_root = Path(__file__).resolve().parent.parent
|
||||
package_json = project_root / 'package.json'
|
||||
|
||||
# Ensure script is run from project root
|
||||
if not package_json.exists():
|
||||
print("Please run this script from the root of the project", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
args = sys.argv[1:]
|
||||
path = ""
|
||||
for arg in args:
|
||||
if not arg.startswith("--"):
|
||||
path = arg
|
||||
break
|
||||
|
||||
# Collect any additional arguments
|
||||
other_args = [arg for arg in args if arg != path]
|
||||
|
||||
engine_dir = project_root / 'engine'
|
||||
os.chdir(engine_dir)
|
||||
|
||||
def run_mach_with_paths(test_paths):
|
||||
command = ['./mach', 'mochitest'] + other_args + test_paths
|
||||
subprocess.run(command, check=True)
|
||||
|
||||
if path in ("", "all"):
|
||||
test_dirs = [p for p in Path("zen/tests").iterdir() if p.is_dir()]
|
||||
test_paths = [str(p) for p in test_dirs]
|
||||
run_mach_with_paths(test_paths)
|
||||
else:
|
||||
run_mach_with_paths([f"zen/tests/{path}"])
|
||||
|
||||
# Return to original directory
|
||||
os.chdir(project_root)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
43
scripts/update_ts_types.py
Normal file
43
scripts/update_ts_types.py
Normal file
@@ -0,0 +1,43 @@
|
||||
|
||||
import os
|
||||
|
||||
FILES = [
|
||||
"index.d.ts",
|
||||
"lib.gecko.darwin.d.ts",
|
||||
"lib.gecko.dom.d.ts",
|
||||
"lib.gecko.glean.d.ts",
|
||||
"lib.gecko.linux.d.ts",
|
||||
"lib.gecko.modules.d.ts",
|
||||
"lib.gecko.nsresult.d.ts",
|
||||
"lib.gecko.services.d.ts",
|
||||
"lib.gecko.tweaks.d.ts",
|
||||
"lib.gecko.win32.d.ts",
|
||||
"lib.gecko.xpcom.d.ts",
|
||||
"lib.gecko.xpidl.d.ts",
|
||||
]
|
||||
|
||||
ENGINE_PATH = os.path.join("engine", "tools", "@types")
|
||||
SRC_PATH = os.path.join("src", "zen", "@types")
|
||||
|
||||
|
||||
def update_ts_types():
|
||||
os.system("cd engine && ./mach ts build && ./mach ts update")
|
||||
# copy the files from engine/tools/@types to src/@types
|
||||
for file in FILES:
|
||||
src_file = os.path.join(ENGINE_PATH, file)
|
||||
dest_file = os.path.join(SRC_PATH, file)
|
||||
if os.path.exists(src_file):
|
||||
os.system(f"cp {src_file} {dest_file}")
|
||||
else:
|
||||
print(f"File {src_file} does not exist.")
|
||||
|
||||
# add zen.d.ts to the end of index.d.ts
|
||||
with open(os.path.join(SRC_PATH, "index.d.ts"), "a") as f:
|
||||
f.write("\n")
|
||||
f.write('/// <reference types="./zen.d.ts" />\n')
|
||||
f.write('\n')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
update_ts_types()
|
||||
print("Updated TypeScript types.")
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/Cargo.lock b/Cargo.lock
|
||||
index c91f39b3afbe712355194593ae39514a83de6605..e6c2b77a69d9274ff1c7578ab4df4f07533f7441 100644
|
||||
index f7ebed9b2a71da90c5751cfd5d5f018cc8b73612..96e881c7782198f1e58be2578f167c7079a8191e 100644
|
||||
--- a/Cargo.lock
|
||||
+++ b/Cargo.lock
|
||||
@@ -3850,8 +3850,6 @@ dependencies = [
|
||||
@@ -4014,8 +4014,6 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "mime_guess"
|
||||
version = "2.0.4"
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
diff --git a/Cargo.toml b/Cargo.toml
|
||||
index a99b447250d36dd0146e031fa22503bc88eeae39..86829fc7075054f832a04825c98325a925cf5b0f 100644
|
||||
index 8c6b99bc629ec26e01ab3746f2ae46174bfaa0b1..5791c7470923c7c15986089b40357ce80365e942 100644
|
||||
--- a/Cargo.toml
|
||||
+++ b/Cargo.toml
|
||||
@@ -205,6 +205,9 @@ rure = { path = "third_party/rust/rure" }
|
||||
@@ -233,6 +233,9 @@ rure = { path = "third_party/rust/rure" }
|
||||
# Patch `plist` to work with `indexmap` 2.*
|
||||
plist = { path = "third_party/rust/plist" }
|
||||
|
||||
+# Patch mime_guess to add missing mime types
|
||||
+mime_guess = { path = "third_party/rust/mime_guess" }
|
||||
+
|
||||
# To-be-published changes.
|
||||
unicode-bidi = { git = "https://github.com/servo/unicode-bidi", rev = "ca612daf1c08c53abe07327cb3e6ef6e0a760f0c" }
|
||||
nss-gk-api = { git = "https://github.com/beurdouche/nss-gk-api", rev = "e48a946811ffd64abc78de3ee284957d8d1c0d63" }
|
||||
# Patch `unicode-width` 0.1.* to 0.2.
|
||||
unicode-width = { path = "build/rust/unicode-width" }
|
||||
|
||||
|
||||
12
src/browser/actors/WebRTCParent-sys-mjs.patch
Normal file
12
src/browser/actors/WebRTCParent-sys-mjs.patch
Normal file
@@ -0,0 +1,12 @@
|
||||
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
|
||||
index 4ed2dd19207fc38b9e5cc22ea2947aba94b2f5ad..ffc88d62dc46683399c68cdfd35f1b1efde70902 100644
|
||||
--- a/browser/actors/WebRTCParent.sys.mjs
|
||||
+++ b/browser/actors/WebRTCParent.sys.mjs
|
||||
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {
|
||||
|
||||
let tabbrowser = browser.ownerGlobal.gBrowser;
|
||||
if (tabbrowser) {
|
||||
+ browser.ownerGlobal.gZenMediaController.updateMediaSharing(state);
|
||||
tabbrowser.updateBrowserSharing(browser, {
|
||||
webRTC: state,
|
||||
});
|
||||
6
src/browser/app/profile/ai.inc
Normal file
6
src/browser/app/profile/ai.inc
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
pref("browser.ml.chat.enabled", false);
|
||||
pref("browser.ml.chat.shortcuts", false);
|
||||
pref("browser.ml.chat.shortcuts.custom", false);
|
||||
pref("browser.ml.chat.sidebar", false);
|
||||
pref("browser.ml.enable", false);
|
||||
52
src/browser/app/profile/browser.inc
Normal file
52
src/browser/app/profile/browser.inc
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
|
||||
// Restore session on startup
|
||||
pref("browser.startup.page", 3);
|
||||
pref("browser.sessionstore.restore_pinned_tabs_on_demand", true);
|
||||
|
||||
// Toolbars
|
||||
pref("browser.tabs.closeWindowWithLastTab", false);
|
||||
pref("browser.tabs.loadBookmarksInTabs", false);
|
||||
pref("browser.tabs.hoverPreview.enabled", false);
|
||||
pref("browser.tabs.dragdrop.moveOverThresholdPercent", 50);
|
||||
pref("browser.tabs.unloadTabInContextMenu", true);
|
||||
pref("browser.tabs.fadeOutExplicitlyUnloadedTabs", true);
|
||||
|
||||
pref('browser.toolbars.bookmarks.visibility', 'never');
|
||||
pref("browser.bookmarks.openInTabClosesMenu", false);
|
||||
pref("browser.menu.showViewImageInfo", true);
|
||||
pref("findbar.highlightAll", true);
|
||||
|
||||
pref("layout.word_select.eat_space_to_next_word", false);
|
||||
|
||||
// Better Windows theming
|
||||
pref("widget.non-native-theme.scrollbar.style", 2);
|
||||
pref("widget.non-native-theme.use-theme-accent", true);
|
||||
|
||||
// for the new layout:
|
||||
pref('browser.download.autohideButton', false);
|
||||
|
||||
// Disable Firefox's revamp
|
||||
pref("sidebar.revamp", false, locked);
|
||||
pref("sidebar.verticalTabs", false, locked);
|
||||
|
||||
// Enable experimental settings page (Used for Zen Labs)
|
||||
pref('browser.preferences.experimental', true);
|
||||
|
||||
// Downloads
|
||||
pref("browser.download.manager.addToRecentDocs", false);
|
||||
pref('browser.download.open_pdf_attachments_inline', true);
|
||||
pref('browser.download.alwaysOpenPanel', false);
|
||||
|
||||
// Updates
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
pref("app.update.checkInstallTime.days", 6);
|
||||
#endif
|
||||
|
||||
#include fullscreen.inc
|
||||
#include ai.inc
|
||||
#include disablemozilla.inc
|
||||
|
||||
// TODO: Check this out!
|
||||
pref("browser.profiles.enabled", false);
|
||||
pref("browser.tabs.groups.enabled", false);
|
||||
11
src/browser/app/profile/disablemozilla.inc
Normal file
11
src/browser/app/profile/disablemozilla.inc
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
// Common UI changes
|
||||
pref("browser.privatebrowsing.vpnpromourl", "", locked);
|
||||
pref("extensions.getAddons.showPane", false);
|
||||
pref("extensions.htmlaboutaddons.recommendations.enabled", false);
|
||||
pref("browser.discovery.enabled", false);
|
||||
pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
|
||||
pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
|
||||
pref("browser.preferences.moreFromMozilla", false, locked);
|
||||
pref("browser.aboutwelcome.enabled", false);
|
||||
pref("browser.contentblocking.report.show_mobile_app", false, locked);
|
||||
5
src/browser/app/profile/extensions.inc
Normal file
5
src/browser/app/profile/extensions.inc
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
// security: They must enable this themselves, to avoid people downloading malware
|
||||
pref('xpinstall.signatures.required', true);
|
||||
pref("extensions.pocket.enabled", false);
|
||||
|
||||
142
src/browser/app/profile/features.inc
Normal file
142
src/browser/app/profile/features.inc
Normal file
@@ -0,0 +1,142 @@
|
||||
|
||||
pref('zen.welcome-screen.seen', false, sticky);
|
||||
|
||||
pref('zen.tabs.vertical', true);
|
||||
pref('zen.tabs.vertical.right-side', false);
|
||||
pref('zen.tabs.rename-tabs', true);
|
||||
pref('zen.tabs.show-newtab-vertical', true);
|
||||
|
||||
pref('zen.ctrlTab.show-pending-tabs', false);
|
||||
|
||||
pref('zen.theme.accent-color', "#ffb787");
|
||||
pref('zen.theme.content-element-separation', 8); // In pixels
|
||||
pref('zen.theme.gradient', true);
|
||||
pref('zen.theme.gradient.show-custom-colors', false);
|
||||
pref('zen.theme.essentials-favicon-bg', true);
|
||||
|
||||
pref('zen.view.show-newtab-button-border-top', false);
|
||||
pref('zen.view.show-newtab-button-top', true);
|
||||
|
||||
pref('zen.mediacontrols.enabled', true);
|
||||
|
||||
// Exposure:
|
||||
pref('zen.haptic-feedback.enabled', true);
|
||||
|
||||
pref('zen.mods.auto-update-days', 20); // In days
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
pref('zen.mods.auto-update', true);
|
||||
pref('zen.rice.api.url', 'https://share.zen-browser.app', locked);
|
||||
pref('zen.injections.match-urls', 'https://zen-browser.app/*,https://share.zen-browser.app/*', locked);
|
||||
#else
|
||||
pref('zen.mods.auto-update', false);
|
||||
pref('zen.rice.api.url', "http://localhost", locked);
|
||||
pref('zen.injections.match-urls', 'http://localhost/*', locked);
|
||||
#endif
|
||||
|
||||
pref('zen.rice.share.notice.accepted', false);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
pref('zen.theme.border-radius', 10); // In pixels
|
||||
#else
|
||||
pref('zen.theme.border-radius', 8); // In pixels
|
||||
#endif
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
pref('zen.theme.acrylic-elements', false);
|
||||
#else
|
||||
pref('zen.theme.acrylic-elements', false);
|
||||
#endif
|
||||
|
||||
pref('zen.theme.color-prefs.use-workspace-colors', true);
|
||||
|
||||
pref('zen.view.compact.hide-tabbar', true);
|
||||
pref('zen.view.compact.hide-toolbar', false);
|
||||
pref('zen.view.compact.toolbar-flash-popup', false);
|
||||
pref('zen.view.compact.toolbar-flash-popup.duration', 800);
|
||||
pref('zen.view.compact.toolbar-hide-after-hover.duration', 1000);
|
||||
pref('zen.view.compact.color-toolbar', true);
|
||||
pref('zen.view.compact.color-sidebar', true);
|
||||
pref('zen.view.compact.animate-sidebar', true);
|
||||
pref('zen.view.compact.show-sidebar-and-toolbar-on-hover', true);
|
||||
pref('zen.view.compact.show-background-tab-toast', true);
|
||||
|
||||
pref('zen.urlbar.replace-newtab', true);
|
||||
pref('zen.urlbar.show-protections-icon', false);
|
||||
pref('zen.urlbar.behavior', 'floating-on-type'); // default, floating-on-type, float
|
||||
pref('zen.urlbar.wait-to-clear', 45000); // in ms (default 45s)
|
||||
pref('zen.urlbar.show-domain-only-in-sidebar', true);
|
||||
pref('zen.urlbar.hide-one-offs', true);
|
||||
pref('zen.urlbar.enable-overrides', false);
|
||||
|
||||
// Glance
|
||||
pref('zen.glance.enabled', true);
|
||||
pref('zen.glance.hold-duration', 300); // in ms
|
||||
pref('zen.glance.open-essential-external-links', true);
|
||||
pref('zen.glance.activation-method', 'alt'); // ctrl, alt, shift, none, hold
|
||||
|
||||
pref('zen.view.sidebar-height-throttle', 200); // in ms
|
||||
pref('zen.view.sidebar-expanded.max-width', 500);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
pref('zen.view.mac.show-three-dot-menu', false);
|
||||
pref('zen.widget.mac.mono-window-controls', true);
|
||||
#endif
|
||||
pref('zen.view.use-single-toolbar', true);
|
||||
pref('zen.view.sidebar-expanded', true);
|
||||
pref('zen.view.sidebar-collapsed.hide-mute-button', true);
|
||||
pref('zen.view.experimental-force-window-controls-left', false);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
pref('zen.view.grey-out-inactive-windows', false);
|
||||
#else
|
||||
pref('zen.view.grey-out-inactive-windows', true);
|
||||
#endif
|
||||
|
||||
pref('zen.view.hide-window-controls', true);
|
||||
pref('zen.view.experimental-no-window-controls', false);
|
||||
|
||||
pref('zen.keyboard.shortcuts.enabled', true);
|
||||
pref('zen.keyboard.shortcuts.version', 0); // Empty string means default shortcuts
|
||||
pref('zen.keyboard.shortcuts.disable-mainkeyset-clear', false); // for debugging
|
||||
|
||||
pref('zen.themes.updated-value-observer', false);
|
||||
|
||||
pref('zen.pinned-tab-manager.debug', false);
|
||||
pref('zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url', false);
|
||||
pref('zen.pinned-tab-manager.close-shortcut-behavior', 'reset-unload-switch');
|
||||
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
pref('zen.watermark.enabled', true, sticky);
|
||||
#else
|
||||
pref('zen.watermark.enabled', false, sticky);
|
||||
#endif
|
||||
|
||||
// Startup flags
|
||||
pref('zen.startup.smooth-scroll-in-tabs', true);
|
||||
|
||||
// Zen Workspaces
|
||||
pref('zen.workspaces.continue-where-left-off', false);
|
||||
pref('zen.workspaces.hide-default-container-indicator', true);
|
||||
pref('zen.workspaces.force-container-workspace', false);
|
||||
pref('zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed', false);
|
||||
pref('zen.workspaces.swipe-actions', true);
|
||||
pref('zen.workspaces.wrap-around-navigation', true);
|
||||
pref('zen.workspaces.natural-scroll', false);
|
||||
pref('zen.workspaces.scroll-modifier-key','ctrl'); // can be ctrl, alt, shift, or a meta key
|
||||
pref('services.sync.engine.workspaces', false);
|
||||
pref('zen.workspaces.container-specific-essentials-enabled', false);
|
||||
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
pref('zen.workspaces.debug', false);
|
||||
#else
|
||||
pref('zen.workspaces.debug', true);
|
||||
#endif
|
||||
|
||||
// Zen Split View
|
||||
pref('zen.splitView.enable-tab-drop', true);
|
||||
pref('zen.splitView.min-resize-width', 7);
|
||||
pref('zen.splitView.rearrange-hover-size', 24);
|
||||
|
||||
// Zen Download Animations
|
||||
pref('zen.downloads.download-animation', true);
|
||||
pref('zen.downloads.download-animation-duration', 1000); // ms
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
|
||||
index 97acbf826f9427b06e0a54679b30269ce7b695f5..aeadcd0c72816612cd5c1ca1199fe2a363c637f4 100644
|
||||
index beced8067e6c8b5c8cf8e3f6060ba259ec9a294d..33a264e7f9cf97944da3888bdb957fa6e7c4c346 100644
|
||||
--- a/browser/app/profile/firefox.js
|
||||
+++ b/browser/app/profile/firefox.js
|
||||
@@ -3362,3 +3362,5 @@ pref("toolkit.contentRelevancy.enabled", false);
|
||||
@@ -3398,3 +3398,5 @@ pref("toolkit.contentRelevancy.enabled", false);
|
||||
pref("toolkit.contentRelevancy.ingestEnabled", false);
|
||||
// Pref to enable extra logging for the content relevancy feature
|
||||
pref("toolkit.contentRelevancy.log", false);
|
||||
|
||||
5
src/browser/app/profile/fullscreen.inc
Normal file
5
src/browser/app/profile/fullscreen.inc
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
pref("full-screen-api.transition-duration.enter", "0 0");
|
||||
pref("full-screen-api.transition-duration.leave", "0 0");
|
||||
pref("full-screen-api.warning.delay", -1);
|
||||
pref("full-screen-api.warning.timeout", 0);
|
||||
11
src/browser/app/profile/linux.inc
Normal file
11
src/browser/app/profile/linux.inc
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
pref("widget.gtk.rounded-bottom-corners.enabled", true);
|
||||
|
||||
// Enable transparent background for linux
|
||||
#ifdef MOZ_WIDGET_GTK
|
||||
pref('zen.widget.linux.transparency', false);
|
||||
|
||||
// VAAPI/FFMPEG is Linux only
|
||||
pref('media.ffmpeg.vaapi.enabled', true);
|
||||
pref('media.ffmpeg.encoder.enabled', true);
|
||||
#endif
|
||||
11
src/browser/app/profile/macos.inc
Normal file
11
src/browser/app/profile/macos.inc
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
// Enable transparent background for macos
|
||||
pref('widget.macos.titlebar-blend-mode.behind-window', true);
|
||||
// 1. hudWindow
|
||||
// 2. fullScreenUI
|
||||
// 3. popover
|
||||
// 4. menu
|
||||
// 5. toolTip
|
||||
// 6. headerView
|
||||
// 7. underlay
|
||||
pref('zen.widget.macos.window-material', 3);
|
||||
6
src/browser/app/profile/media.inc
Normal file
6
src/browser/app/profile/media.inc
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
pref('image.jxl.enabled', true, locked);
|
||||
pref("svg.context-properties.content.enabled", true);
|
||||
pref("image.avif.enabled", true, locked);
|
||||
|
||||
pref("media.eme.enabled", true);
|
||||
9
src/browser/app/profile/newtab.inc
Normal file
9
src/browser/app/profile/newtab.inc
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
pref('browser.newtabpage.activity-stream.feeds.topsites', false);
|
||||
pref('browser.newtabpage.activity-stream.feeds.section.topstories', false);
|
||||
pref("browser.topsites.contile.enabled", false);
|
||||
pref('browser.newtabpage.activity-stream.system.showWeather', false);
|
||||
|
||||
pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
|
||||
pref('browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled', true);
|
||||
pref('browser.translations.newSettingsUI.enable', true);
|
||||
4
src/browser/app/profile/pdf.inc
Normal file
4
src/browser/app/profile/pdf.inc
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
pref('pdfjs.enableHighlightEditor', true);
|
||||
pref('pdfjs.enableHighlightFloatingButton', true);
|
||||
pref("pdfjs.enableScripting", false);
|
||||
41
src/browser/app/profile/performance.inc
Normal file
41
src/browser/app/profile/performance.inc
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
// ---- Experimental settings to try make zen faster
|
||||
pref("media.memory_cache_max_size", 1048576);
|
||||
pref("media.cache_readahead_limit", 9000);
|
||||
pref("media.cache_resume_threshold", 3600);
|
||||
pref("media.memory_caches_combined_limit_kb", 2560000);
|
||||
|
||||
pref("image.mem.decode_bytes_at_a_time", 32768);
|
||||
|
||||
// Enable GPU by default
|
||||
pref("gfx.canvas.accelerated", true);
|
||||
pref("media.hardware-video-decoding.enabled", true);
|
||||
pref("layers.gpu-process.enabled", true);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
// Pref to control the reponse taken on macOS when the OS is under memory
|
||||
// pressure. Changes to the pref take effect immediately. Browser restart not
|
||||
// required. The pref value is a bitmask:
|
||||
// 0x0: No response (other than recording for telemetry, crash reporting)
|
||||
// 0x1: Use the tab unloading feature to reduce memory use. Requires that
|
||||
// the above "browser.tabs.unloadOnLowMemory" pref be set to true for tab
|
||||
// unloading to occur.
|
||||
// 0x2: Issue the internal "memory-pressure" notification to reduce memory use
|
||||
// 0x3: Both 0x1 and 0x2.
|
||||
pref("browser.lowMemoryResponseMask", 3);
|
||||
#endif
|
||||
|
||||
// Prefetching:
|
||||
pref("network.dns.disablePrefetch", false);
|
||||
pref("network.prefetch-next", true);
|
||||
pref("network.dns.disablePrefetchFromHTTPS", false);
|
||||
pref("network.predictor.enable-hover-on-ssl", true);
|
||||
pref("network.http.rcwn.enabled", false);
|
||||
|
||||
// Experimental Zen Features
|
||||
// Strategy to use for bytecode cache (Thanks https://github.com/gunir)
|
||||
pref('dom.script_loader.bytecode_cache.strategy', 2);
|
||||
pref("layout.css.grid-template-masonry-value.enabled", true);
|
||||
|
||||
// No Proxy should be default, Use system proxy allows antivirus, virus or system proxy to MITM or slowing down Zen
|
||||
pref("network.proxy.type", 0);
|
||||
4
src/browser/app/profile/pip.inc
Normal file
4
src/browser/app/profile/pip.inc
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
pref("media.videocontrols.picture-in-picture.video-toggle.enabled", true);
|
||||
// TODO: Enable once we have a proper settings page
|
||||
pref("media.videocontrols.picture-in-picture.enable-when-switching-tabs.enabled", false);
|
||||
44
src/browser/app/profile/privacy.inc
Normal file
44
src/browser/app/profile/privacy.inc
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
pref("datareporting.policy.dataSubmissionEnabled", false, locked);
|
||||
pref("datareporting.healthreport.uploadEnabled", false, locked);
|
||||
pref("toolkit.telemetry.unified", false, locked);
|
||||
pref("toolkit.telemetry.enabled", false, locked);
|
||||
pref("toolkit.telemetry.server", "data:,", locked);
|
||||
pref("toolkit.telemetry.archive.enabled", false, locked);
|
||||
pref("toolkit.telemetry.newProfilePing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.shutdownPingSender.enabled", false, locked);
|
||||
pref("toolkit.telemetry.updatePing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.bhrPing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.firstShutdownPing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.coverage.opt-out", true, locked);
|
||||
pref("toolkit.coverage.opt-out", true, locked);
|
||||
pref("toolkit.coverage.endpoint.base", "", locked);
|
||||
pref("browser.newtabpage.activity-stream.feeds.telemetry", false, locked);
|
||||
pref("browser.newtabpage.activity-stream.telemetry", false, locked);
|
||||
pref("browser.ping-centre.telemetry", false);
|
||||
pref("browser.attribution.enabled", false);
|
||||
pref("toolkit.telemetry.pioneer-new-studies-available", false);
|
||||
pref("app.shield.optoutstudies.enabled", false, locked);
|
||||
pref("app.normandy.enabled", false);
|
||||
pref("app.normandy.api_url", "", locked);
|
||||
|
||||
// Crash reports
|
||||
pref("breakpad.reportURL", "");
|
||||
pref("browser.tabs.crashReporting.sendReport", false);
|
||||
pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
|
||||
|
||||
// Other privacy
|
||||
pref("extensions.getAddons.cache.enabled", false);
|
||||
|
||||
// Disable cache for private browsing
|
||||
pref("browser.privatebrowsing.forceMediaMemoryCache", true);
|
||||
|
||||
// Tracking protection
|
||||
pref("browser.helperApps.deleteTempFileOnExit", true);
|
||||
pref("browser.uitour.enabled", false);
|
||||
|
||||
pref("privacy.globalprivacycontrol.enabled", true);
|
||||
|
||||
// Contextual identity
|
||||
pref('privacy.userContext.enabled', true);
|
||||
pref('privacy.userContext.ui.enabled', true);
|
||||
14
src/browser/app/profile/smoothscroll.inc
Normal file
14
src/browser/app/profile/smoothscroll.inc
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
pref("apz.overscroll.enabled", true);
|
||||
pref("general.smoothScroll", true);
|
||||
pref("general.smoothScroll.msdPhysics.enabled", true);
|
||||
pref("general.smoothScroll.currentVelocityWeighting", "0.15");
|
||||
pref("general.smoothScroll.stopDecelerationWeighting", "0.6");
|
||||
pref("mousewheel.min_line_scroll_amount", 10);
|
||||
pref("general.smoothScroll.mouseWheel.durationMinMS", 80);
|
||||
pref("general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS", 12);
|
||||
pref("general.smoothScroll.msdPhysics.motionBeginSpringConstant", 600);
|
||||
pref("general.smoothScroll.msdPhysics.regularSpringConstant", 650);
|
||||
pref("general.smoothScroll.msdPhysics.slowdownMinDeltaMS", 25);
|
||||
pref("general.smoothScroll.msdPhysics.slowdownSpringConstant", 250);
|
||||
pref("mousewheel.default.delta_multiplier_y", 200);
|
||||
32
src/browser/app/profile/urlbar.inc
Normal file
32
src/browser/app/profile/urlbar.inc
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
pref('browser.urlbar.unitConversion.enabled', true);
|
||||
pref('browser.urlbar.trending.featureGate', false);
|
||||
pref('browser.urlbar.weather.featureGate', false);
|
||||
pref('browser.urlbar.quickactions.enabled', true);
|
||||
pref('browser.urlbar.clipboard.featureGate', true);
|
||||
pref('browser.urlbar.suggest.calculator', true);
|
||||
|
||||
pref("browser.urlbar.trimHttps", true);
|
||||
pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
|
||||
|
||||
// Keep in sync with browser/components/topsites/constants.mjs
|
||||
pref("browser.urlbar.maxRichResults", 7);
|
||||
|
||||
// Enable private suggestions
|
||||
pref('browser.search.suggest.enabled', false);
|
||||
pref('browser.search.suggest.enabled.private', false);
|
||||
|
||||
pref("browser.urlbar.trimHttps", true);
|
||||
pref("browser.search.separatePrivateDefault.ui.enabled", true);
|
||||
pref("browser.urlbar.update2.engineAliasRefresh", true);
|
||||
pref("browser.urlbar.quicksuggest.enabled", false, locked);
|
||||
pref("browser.urlbar.suggest.quicksuggest.sponsored", false, locked);
|
||||
pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false, locked);
|
||||
pref("browser.urlbar.groupLabels.enabled", false);
|
||||
pref("browser.urlbar.keepPanelOpenDuringImeComposition", true); // IMPORTANT: Fixes closing the urlbar when on some languages
|
||||
pref("browser.formfill.enable", false);
|
||||
pref("security.insecure_connection_text.enabled", true);
|
||||
pref("security.insecure_connection_text.pbmode.enabled", true);
|
||||
pref("network.IDN_show_punycode", true);
|
||||
|
||||
pref("browser.urlbar.suggest.topsites", true, locked);
|
||||
7
src/browser/app/profile/windows.inc
Normal file
7
src/browser/app/profile/windows.inc
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
// Mica
|
||||
pref("widget.windows.mica", true);
|
||||
pref("widget.windows.mica.popups", true);
|
||||
pref("widget.windows.mica.toplevel-backdrop", 2);
|
||||
|
||||
pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", false);
|
||||
@@ -8,454 +8,37 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
pref("browser.tabs.hoverPreview.enabled", false);
|
||||
|
||||
#ifdef MOZ_UPDATE_CHANNEL
|
||||
pref("devtools.debugger.prompt-connection", true);
|
||||
#endif
|
||||
|
||||
// Dont download the multilingual dictionary
|
||||
pref("intl.multilingual.downloadEnabled", false);
|
||||
|
||||
// Restore session on startup
|
||||
pref("browser.startup.page", 3);
|
||||
|
||||
// Theme
|
||||
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
|
||||
pref('browser.compactmode.show', true);
|
||||
|
||||
#ifdef XP_WIN
|
||||
pref("browser.privateWindowSeparation.enabled", false);
|
||||
#include windows.inc
|
||||
#endif
|
||||
|
||||
pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
|
||||
pref('browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled', true);
|
||||
pref('browser.translations.newSettingsUI.enable', true);
|
||||
|
||||
pref('privacy.userContext.enabled', true);
|
||||
pref('privacy.userContext.ui.enabled', true);
|
||||
|
||||
pref("browser.urlbar.trimHttps", true);
|
||||
pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
|
||||
|
||||
// Url bar
|
||||
pref('browser.urlbar.unitConversion.enabled', true);
|
||||
pref('browser.urlbar.trending.featureGate', false);
|
||||
pref('browser.urlbar.weather.featureGate', true);
|
||||
pref('browser.urlbar.quickactions.enabled', true);
|
||||
pref('browser.urlbar.clipboard.featureGate', true);
|
||||
pref('browser.urlbar.suggest.calculator', true);
|
||||
|
||||
// new tab page
|
||||
pref('browser.newtabpage.activity-stream.feeds.topsites', false);
|
||||
pref('browser.newtabpage.activity-stream.feeds.section.topstories', false);
|
||||
pref("browser.topsites.contile.enabled", true);
|
||||
|
||||
// Pdf
|
||||
pref('browser.download.open_pdf_attachments_inline', true);
|
||||
pref('pdfjs.enableHighlightEditor', true);
|
||||
pref('pdfjs.enableHighlightFloatingButton', true);
|
||||
|
||||
pref("alerts.showFavicons", true);
|
||||
|
||||
// Toolbars
|
||||
pref("browser.tabs.closeWindowWithLastTab", false);
|
||||
pref("browser.tabs.loadBookmarksInTabs", false);
|
||||
pref("browser.tabs.dragdrop.moveOverThresholdPercent", 50);
|
||||
pref('browser.toolbars.bookmarks.visibility', 'never');
|
||||
pref("browser.bookmarks.openInTabClosesMenu", false);
|
||||
pref("browser.menu.showViewImageInfo", true);
|
||||
pref("findbar.highlightAll", true);
|
||||
pref("layout.word_select.eat_space_to_next_word", false);
|
||||
|
||||
// TODO:
|
||||
pref("browser.tabs.groups.enabled", false);
|
||||
|
||||
// Enable Do Not Track and GPC by default.
|
||||
pref("privacy.donottrackheader.enabled", false);
|
||||
pref("privacy.globalprivacycontrol.enabled", true);
|
||||
|
||||
pref("app.update.checkInstallTime.days", 6);
|
||||
|
||||
// CUSTOM ZEN PREFS
|
||||
|
||||
pref('zen.welcome-screen.seen', false, sticky);
|
||||
|
||||
pref('zen.tabs.vertical', true);
|
||||
pref('zen.tabs.vertical.right-side', false);
|
||||
pref('zen.tabs.rename-tabs', true);
|
||||
pref('zen.theme.accent-color', "#ffb787");
|
||||
pref('zen.theme.content-element-separation', 8); // In pixels
|
||||
pref('zen.theme.gradient', true);
|
||||
pref('zen.theme.gradient.show-custom-colors', false);
|
||||
pref('zen.theme.essentials-favicon-bg', true);
|
||||
|
||||
pref('zen.tabs.show-newtab-vertical', true);
|
||||
pref('zen.view.show-newtab-button-border-top', false);
|
||||
pref('zen.view.show-newtab-button-top', true);
|
||||
|
||||
pref('zen.mediacontrols.enabled', true);
|
||||
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
pref('zen.rice.api.url', 'https://share.zen-browser.app', locked);
|
||||
pref('zen.injections.match-urls', 'https://zen-browser.app/*,https://share.zen-browser.app/*', locked);
|
||||
#else
|
||||
pref('zen.rice.api.url', "http://localhost", locked);
|
||||
pref('zen.injections.match-urls', 'http://localhost/*', locked);
|
||||
#ifdef UNIX_BUT_NOT_MAC
|
||||
#include linux.inc
|
||||
#endif
|
||||
pref('zen.rice.share.notice.accepted', false);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
pref('zen.theme.border-radius', 10); // In pixels
|
||||
#else
|
||||
pref('zen.theme.border-radius', 8); // In pixels
|
||||
#include macos.inc
|
||||
#endif
|
||||
|
||||
pref('zen.theme.color-prefs.use-workspace-colors', true);
|
||||
#include urlbar.inc
|
||||
#include newtab.inc
|
||||
#include pdf.inc
|
||||
#include extensions.inc
|
||||
#include privacy.inc
|
||||
#include media.inc
|
||||
#include browser.inc
|
||||
|
||||
pref('zen.view.compact.hide-tabbar', true);
|
||||
pref('zen.view.compact.hide-toolbar', false);
|
||||
pref('zen.view.compact.toolbar-flash-popup', true);
|
||||
pref('zen.view.compact.toolbar-flash-popup.duration', 800);
|
||||
pref('zen.view.compact.toolbar-hide-after-hover.duration', 1000);
|
||||
pref('zen.view.compact.color-toolbar', true);
|
||||
pref('zen.view.compact.color-sidebar', true);
|
||||
pref('zen.view.compact.animate-sidebar', true);
|
||||
pref('zen.view.compact.show-sidebar-and-toolbar-on-hover', true);
|
||||
#include features.inc
|
||||
|
||||
pref('zen.urlbar.replace-newtab', true);
|
||||
pref('zen.urlbar.show-protections-icon', false);
|
||||
pref('zen.urlbar.behavior', 'floating-on-type'); // default, floating-on-type, float
|
||||
pref('zen.urlbar.wait-to-clear', 45000); // in ms (default 45s)
|
||||
pref('zen.urlbar.show-domain-only-in-sidebar', true);
|
||||
pref('zen.urlbar.hide-one-offs', true);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
// Disable for macos in the meantime until @HarryHeres finds a solution for hight DPI screens
|
||||
pref('zen.view.experimental-rounded-view', false);
|
||||
#else
|
||||
pref('zen.view.experimental-rounded-view', true);
|
||||
#endif
|
||||
|
||||
#ifdef XP_WIN
|
||||
pref('zen.widget.windows.acrylic', true);
|
||||
#endif
|
||||
|
||||
// Glance
|
||||
pref('zen.glance.enabled', true);
|
||||
pref('zen.glance.hold-duration', 300); // in ms
|
||||
pref('zen.glance.open-essential-external-links', true);
|
||||
pref('zen.glance.activation-method', 'alt'); // ctrl, alt, shift, none, hold
|
||||
|
||||
pref('zen.view.sidebar-height-throttle', 200); // in ms
|
||||
pref('zen.view.sidebar-expanded.max-width', 500);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
pref('zen.view.mac.show-three-dot-menu', false);
|
||||
pref('zen.widget.mac.mono-window-controls', true);
|
||||
#endif
|
||||
pref('zen.view.use-single-toolbar', true);
|
||||
pref('zen.view.sidebar-expanded', true);
|
||||
pref('zen.view.sidebar-collapsed.hide-mute-button', true);
|
||||
pref('zen.view.experimental-force-window-controls-left', false);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
pref('zen.view.grey-out-inactive-windows', false);
|
||||
#else
|
||||
pref('zen.view.grey-out-inactive-windows', true);
|
||||
#endif
|
||||
|
||||
pref('zen.view.hide-window-controls', true);
|
||||
pref('zen.view.experimental-no-window-controls', false);
|
||||
|
||||
pref('zen.tabs.dim-pending', true);
|
||||
|
||||
pref('zen.keyboard.shortcuts.enabled', true);
|
||||
pref('zen.keyboard.shortcuts.version', 0); // Empty string means default shortcuts
|
||||
pref('zen.keyboard.shortcuts.disable-mainkeyset-clear', false); // for debugging
|
||||
|
||||
pref('zen.themes.updated-value-observer', false);
|
||||
|
||||
pref('zen.tab-unloader.enabled', true);
|
||||
pref('zen.tab-unloader.timeout-minutes', 40);
|
||||
pref('zen.tab-unloader.excluded-urls', "example.com,example.org");
|
||||
|
||||
pref('zen.pinned-tab-manager.debug', false);
|
||||
pref('zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url', false);
|
||||
pref('zen.pinned-tab-manager.close-shortcut-behavior', 'reset-unload-switch');
|
||||
|
||||
// TODO: Check this out!
|
||||
pref("browser.profiles.enabled", false);
|
||||
|
||||
// Zen Split View
|
||||
pref('zen.splitView.enable-tab-drop', true);
|
||||
pref('zen.splitView.min-resize-width', 7);
|
||||
pref('zen.splitView.rearrange-hover-size', 24);
|
||||
|
||||
// Startup flags
|
||||
pref('zen.startup.smooth-scroll-in-tabs', true);
|
||||
|
||||
// Zen Workspaces
|
||||
pref('zen.workspaces.disabled_for_testing', false);
|
||||
pref('zen.workspaces.hide-default-container-indicator', true);
|
||||
pref('zen.workspaces.force-container-workspace', false);
|
||||
pref('zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed', false);
|
||||
pref('zen.workspaces.show-workspace-indicator', true);
|
||||
pref('zen.workspaces.swipe-actions', true);
|
||||
pref('zen.workspaces.wrap-around-navigation', true);
|
||||
pref('zen.workspaces.natural-scroll', false);
|
||||
pref('zen.workspaces.scroll-modifier-key','ctrl'); // can be ctrl, alt, shift, or a meta key
|
||||
pref('services.sync.engine.workspaces', false);
|
||||
pref('zen.workspaces.container-specific-essentials-enabled', false);
|
||||
|
||||
// Essentials
|
||||
pref('zen.essentials.enabled', true);
|
||||
|
||||
// Zen Watermark
|
||||
#ifdef MOZILLA_OFFICIAL
|
||||
pref('zen.watermark.enabled', true, sticky);
|
||||
#else
|
||||
pref('zen.watermark.enabled', false, sticky);
|
||||
#endif
|
||||
|
||||
// Privacy
|
||||
pref('dom.private-attribution.submission.enabled', false);
|
||||
pref('dom.security.https_only_mode', true);
|
||||
|
||||
// Enable EME
|
||||
pref('media.eme.enabled', true);
|
||||
|
||||
// Crash reports
|
||||
pref("breakpad.reportURL", "");
|
||||
pref("browser.tabs.crashReporting.sendReport", false);
|
||||
pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
|
||||
|
||||
// TLS / SSL
|
||||
pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
|
||||
pref("browser.xul.error_pages.expert_bad_cert", true);
|
||||
pref("security.tls.enable_0rtt_data", false);
|
||||
pref("network.http.http3.enable_0rtt", false);
|
||||
|
||||
// Network
|
||||
pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
|
||||
pref("network.dnsCacheExpiration", 3600);
|
||||
pref("network.http.max-persistent-connections-per-proxy", 48); // default=32
|
||||
pref("network.websocket.max-connections", 400); // default=200
|
||||
pref("network.ssl_tokens_cache_capacity", 32768);
|
||||
|
||||
// Enable importers for other browsers
|
||||
pref('browser.migrate.vivaldi.enabled', true);
|
||||
pref('browser.migrate.opera-gx.enabled', true);
|
||||
pref('browser.migrate.opera.enabled', true);
|
||||
|
||||
// DNS
|
||||
// pref('network.trr.mode', 5);
|
||||
|
||||
// security: They must enable this themselves, to avoid people downloading malware
|
||||
pref('xpinstall.signatures.required', true);
|
||||
|
||||
// Experimental Zen Features
|
||||
// Strategy to use for bytecode cache (Thanks https://github.com/gunir)
|
||||
pref('dom.script_loader.bytecode_cache.strategy', 2);
|
||||
pref("dom.text_fragments.enabled", true);
|
||||
|
||||
pref("layout.css.grid-template-masonry-value.enabled", true);
|
||||
pref("dom.security.sanitizer.enabled", true);
|
||||
|
||||
// Pocket
|
||||
pref("extensions.pocket.enabled", false);
|
||||
|
||||
// MIXED CONTENT + CROSS-SITE
|
||||
pref("pdfjs.enableScripting", false);
|
||||
pref("extensions.postDownloadThirdPartyPrompt", false);
|
||||
|
||||
// Downloads
|
||||
pref("browser.download.always_ask_before_handling_new_types", true);
|
||||
pref("browser.download.manager.addToRecentDocs", false);
|
||||
|
||||
// Tracking protection
|
||||
pref("urlclassifier.trackingSkipURLs", "*.reddit.com, *.x.com, *.twimg.com, *.tiktok.com");
|
||||
pref("urlclassifier.features.socialtracking.skipURLs", "*.instagram.com, *.x.com, *.twimg.com");
|
||||
pref("network.cookie.sameSite.noneRequiresSecure", true);
|
||||
pref("browser.helperApps.deleteTempFileOnExit", true);
|
||||
pref("browser.uitour.enabled", false);
|
||||
|
||||
// Disable cache for private browsing
|
||||
pref("browser.privatebrowsing.forceMediaMemoryCache", true);
|
||||
|
||||
// Enable private suggestions
|
||||
pref('browser.search.suggest.enabled', true);
|
||||
pref('browser.search.suggest.enabled.private', true);
|
||||
|
||||
pref("extensions.enabledScopes", 5); // [HIDDEN PREF]
|
||||
|
||||
// Media codecs
|
||||
pref('image.jxl.enabled', true, locked);
|
||||
pref("svg.context-properties.content.enabled", true);
|
||||
pref("image.avif.enabled", true, locked);
|
||||
|
||||
// Smooth scrolling
|
||||
#ifndef XP_MACOSX
|
||||
pref("apz.overscroll.enabled", true);
|
||||
pref("general.smoothScroll", true);
|
||||
pref("general.smoothScroll.msdPhysics.enabled", true);
|
||||
pref("general.smoothScroll.currentVelocityWeighting", "0.15");
|
||||
pref("general.smoothScroll.stopDecelerationWeighting", "0.6");
|
||||
pref("mousewheel.min_line_scroll_amount", 10);
|
||||
pref("general.smoothScroll.mouseWheel.durationMinMS", 80);
|
||||
pref("general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS", 12);
|
||||
pref("general.smoothScroll.msdPhysics.motionBeginSpringConstant", 600);
|
||||
pref("general.smoothScroll.msdPhysics.regularSpringConstant", 650);
|
||||
pref("general.smoothScroll.msdPhysics.slowdownMinDeltaMS", 25);
|
||||
pref("general.smoothScroll.msdPhysics.slowdownSpringConstant", 250);
|
||||
pref("mousewheel.default.delta_multiplier_y", 200);
|
||||
#include smoothscroll.inc
|
||||
#endif
|
||||
|
||||
#if defined(XP_WIN)
|
||||
pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", false);
|
||||
#endif
|
||||
|
||||
pref('browser.sessionstore.restore_pinned_tabs_on_demand', true);
|
||||
pref('browser.newtabpage.activity-stream.system.showWeather', true);
|
||||
|
||||
// Enable experimental settings page (Used for Zen Labs)
|
||||
pref('browser.preferences.experimental', true);
|
||||
|
||||
// Prefetching:
|
||||
pref("network.dns.disablePrefetch", false);
|
||||
pref("network.prefetch-next", true);
|
||||
pref("network.predictor.enabled", true);
|
||||
pref("network.dns.disablePrefetchFromHTTPS", false);
|
||||
pref("network.predictor.enable-hover-on-ssl", true);
|
||||
pref("network.http.speculative-parallel-limit", 10);
|
||||
pref("network.http.rcwn.enabled", false);
|
||||
|
||||
// Enable Browser Toolbox, Ctrl+Shift+Alt+I for debugging and modifying UI
|
||||
pref("devtools.debugger.remote-enabled", false);
|
||||
pref("devtools.chrome.enabled", true);
|
||||
|
||||
// Disable firefox's revamp
|
||||
pref("sidebar.revamp", false, locked);
|
||||
pref("sidebar.verticalTabs", false, locked);
|
||||
|
||||
// Better Windows theming
|
||||
pref("widget.non-native-theme.scrollbar.style", 2);
|
||||
pref("widget.non-native-theme.use-theme-accent", true);
|
||||
|
||||
// Expose Letterboxing https://github.com/zen-browser/desktop/issues/475
|
||||
pref("privacy.resistFingerprinting.letterboxing", false);
|
||||
pref("privacy.resistFingerprinting.letterboxing.dimensions", "");
|
||||
|
||||
// Remove Inspect Accessibity Properties menu
|
||||
pref("devtools.accessibility.enabled", false);
|
||||
|
||||
// Enable GPU by default
|
||||
// pref('gfx.webrender.all', true);
|
||||
|
||||
// VAAPI/FFMPEG is Linux only
|
||||
#ifdef MOZ_WIDGET_GTK
|
||||
pref('media.ffmpeg.vaapi.enabled', true);
|
||||
pref('media.ffmpeg.encoder.enabled', true);
|
||||
#endif
|
||||
|
||||
// Fix buffering issues: Youtube, Archive bugzilla.mozilla.org/show_bug.cgi?id=1854077
|
||||
pref("network.fetchpriority.enabled", true);
|
||||
|
||||
// No Proxy should be default, Use system proxy allows antivirus, virus or system proxy to MITM or slowing down Zen
|
||||
pref("network.proxy.type", 0);
|
||||
|
||||
// for the new layout:
|
||||
pref('browser.download.autohideButton', false);
|
||||
|
||||
// Enable transparent background for macos
|
||||
#ifdef XP_MACOSX
|
||||
pref('widget.macos.titlebar-blend-mode.behind-window', true);
|
||||
// 1. hudWindow
|
||||
// 2. fullScreenUI
|
||||
// 3. popover
|
||||
// 4. menu
|
||||
// 5. toolTip
|
||||
// 6. headerView
|
||||
// 7. underlay
|
||||
pref('zen.widget.macos.window-material', 3);
|
||||
#endif
|
||||
|
||||
// Urlbar and autocomplete
|
||||
pref("browser.urlbar.maxRichResults", 6);
|
||||
pref("browser.urlbar.trimHttps", true);
|
||||
pref("browser.search.separatePrivateDefault.ui.enabled", true);
|
||||
pref("browser.urlbar.update2.engineAliasRefresh", true);
|
||||
pref("browser.search.suggest.enabled", false);
|
||||
pref("browser.urlbar.quicksuggest.enabled", false);
|
||||
pref("browser.urlbar.suggest.quicksuggest.sponsored", false);
|
||||
pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false);
|
||||
pref("browser.urlbar.groupLabels.enabled", false);
|
||||
pref("browser.urlbar.keepPanelOpenDuringImeComposition", true); // IMPORTANT: Fixes closing the urlbar when on some languages
|
||||
pref("browser.formfill.enable", false);
|
||||
pref("security.insecure_connection_text.enabled", true);
|
||||
pref("security.insecure_connection_text.pbmode.enabled", true);
|
||||
pref("network.IDN_show_punycode", true);
|
||||
|
||||
// Telemetry
|
||||
pref("datareporting.policy.dataSubmissionEnabled", false, locked);
|
||||
pref("datareporting.healthreport.uploadEnabled", false, locked);
|
||||
pref("toolkit.telemetry.unified", false, locked);
|
||||
pref("toolkit.telemetry.enabled", false, locked);
|
||||
pref("toolkit.telemetry.server", "data:,", locked);
|
||||
pref("toolkit.telemetry.archive.enabled", false, locked);
|
||||
pref("toolkit.telemetry.newProfilePing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.shutdownPingSender.enabled", false, locked);
|
||||
pref("toolkit.telemetry.updatePing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.bhrPing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.firstShutdownPing.enabled", false, locked);
|
||||
pref("toolkit.telemetry.coverage.opt-out", true, locked);
|
||||
pref("toolkit.coverage.opt-out", true, locked);
|
||||
pref("toolkit.coverage.endpoint.base", "", locked);
|
||||
pref("browser.newtabpage.activity-stream.feeds.telemetry", false, locked);
|
||||
pref("browser.newtabpage.activity-stream.telemetry", false, locked);
|
||||
pref("browser.ping-centre.telemetry", false);
|
||||
pref("browser.attribution.enabled", false);
|
||||
pref("toolkit.telemetry.pioneer-new-studies-available", false);
|
||||
pref("app.shield.optoutstudies.enabled", false, locked);
|
||||
pref("app.normandy.enabled", false, locked);
|
||||
pref("app.normandy.api_url", "", locked);
|
||||
|
||||
// Fullscreen notice
|
||||
pref("full-screen-api.transition-duration.enter", "0 0");
|
||||
pref("full-screen-api.transition-duration.leave", "0 0");
|
||||
pref("full-screen-api.warning.delay", -1);
|
||||
pref("full-screen-api.warning.timeout", 0);
|
||||
|
||||
// Common UI changes
|
||||
pref("browser.privatebrowsing.vpnpromourl", "", locked);
|
||||
pref("extensions.getAddons.showPane", false);
|
||||
pref("extensions.htmlaboutaddons.recommendations.enabled", false);
|
||||
pref("browser.discovery.enabled", false);
|
||||
pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
|
||||
pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
|
||||
pref("browser.preferences.moreFromMozilla", false, locked);
|
||||
pref("browser.aboutwelcome.enabled", false);
|
||||
|
||||
// AI/ML stuff
|
||||
pref("browser.ml.chat.enabled", false);
|
||||
pref("browser.ml.chat.shortcuts", false);
|
||||
pref("browser.ml.chat.shortcuts.custom", false);
|
||||
pref("browser.ml.chat.sidebar", false);
|
||||
pref("browser.ml.enable", false);
|
||||
|
||||
// ---- Experimental settings to try make zen faster
|
||||
pref("gfx.canvas.accelerated.cache-items", 32768);
|
||||
pref("gfx.canvas.accelerated.cache-size", 256);
|
||||
pref("gfx.content.skia-font-cache-size", 80);
|
||||
|
||||
pref("media.memory_cache_max_size", 1048576);
|
||||
pref("media.cache_readahead_limit", 9000);
|
||||
pref("media.cache_resume_threshold", 3600);
|
||||
pref("media.memory_caches_combined_limit_kb", 2560000);
|
||||
|
||||
pref("image.mem.decode_bytes_at_a_time", 32768);
|
||||
|
||||
// Enable GPU by default
|
||||
pref("gfx.canvas.accelerated", true);
|
||||
pref("media.hardware-video-decoding.enabled", true);
|
||||
pref("layers.gpu-process.enabled", true);
|
||||
#include performance.inc
|
||||
#include pip.inc
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/aboutDialog.js b/browser/base/content/aboutDialog.js
|
||||
index f6e1391baf12abb91c85a95107bb3923118746c0..76c7b75a4e29056110f1631a50047c4ddd8b1f4a 100644
|
||||
index f6e1391baf12abb91c85a95107bb3923118746c0..cac04aa288e8a305d0c8b28e0c919abce87658e5 100644
|
||||
--- a/browser/base/content/aboutDialog.js
|
||||
+++ b/browser/base/content/aboutDialog.js
|
||||
@@ -52,7 +52,7 @@ function init() {
|
||||
@@ -20,3 +20,18 @@ index f6e1391baf12abb91c85a95107bb3923118746c0..76c7b75a4e29056110f1631a50047c4d
|
||||
versionIdKey += "-nightly";
|
||||
let buildID = Services.appinfo.appBuildID;
|
||||
let year = buildID.slice(0, 4);
|
||||
@@ -125,14 +125,6 @@ function init() {
|
||||
window.close();
|
||||
});
|
||||
if (AppConstants.MOZ_UPDATER) {
|
||||
- document
|
||||
- .getElementById("aboutDialogHelpLink")
|
||||
- .addEventListener("click", () => {
|
||||
- openHelpLink("firefox-help");
|
||||
- });
|
||||
- document
|
||||
- .getElementById("submit-feedback")
|
||||
- .addEventListener("click", openFeedbackPage);
|
||||
document
|
||||
.getElementById("checkForUpdatesButton")
|
||||
.addEventListener("command", () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/aboutDialog.xhtml b/browser/base/content/aboutDialog.xhtml
|
||||
index c64980810570fcea84e33fdc2d66ac42a79f4e46..b7198e810a7510fa82cc6801cfd01c88a08d42c1 100644
|
||||
index c64980810570fcea84e33fdc2d66ac42a79f4e46..6ef9bf4b88f0a0539d833f662c4dd890fd1fde93 100644
|
||||
--- a/browser/base/content/aboutDialog.xhtml
|
||||
+++ b/browser/base/content/aboutDialog.xhtml
|
||||
@@ -35,6 +35,7 @@
|
||||
@@ -10,7 +10,18 @@ index c64980810570fcea84e33fdc2d66ac42a79f4e46..b7198e810a7510fa82cc6801cfd01c88
|
||||
</linkset>
|
||||
|
||||
<html:div id="aboutDialogContainer">
|
||||
@@ -125,21 +126,23 @@
|
||||
@@ -102,10 +103,6 @@
|
||||
<label id="version" class="update"/>
|
||||
<label id="releasenotes" is="text-link" hidden="true" data-l10n-id="releaseNotes-link"/>
|
||||
</hbox>
|
||||
- <description class="text-blurb">
|
||||
- <label id="aboutDialogHelpLink" is="text-link" data-l10n-id="aboutdialog-help-user"/>
|
||||
- <label id="submit-feedback" is="text-link" data-l10n-id="aboutdialog-submit-feedback"/>
|
||||
- </description>
|
||||
</vbox>
|
||||
#endif
|
||||
</hbox>
|
||||
@@ -125,21 +122,17 @@
|
||||
</description>
|
||||
</vbox>
|
||||
<description class="text-blurb" id="communityDesc" data-l10n-id="community-2">
|
||||
@@ -18,12 +29,10 @@ index c64980810570fcea84e33fdc2d66ac42a79f4e46..b7198e810a7510fa82cc6801cfd01c88
|
||||
+ <label is="text-link" href="https://github.com/zen-browser/desktop" data-l10n-name="community-mozillaLink"/>
|
||||
<label is="text-link" useoriginprincipal="true" href="about:credits" data-l10n-name="community-creditsLink"/>
|
||||
</description>
|
||||
+#if 0
|
||||
<description class="text-blurb" id="contributeDesc" data-l10n-id="helpus">
|
||||
<label is="text-link" href="https://foundation.mozilla.org/?form=firefox-about" data-l10n-name="helpus-donateLink"/>
|
||||
<label is="text-link" href="https://www.mozilla.org/contribute/?utm_source=firefox-browser&utm_medium=firefox-desktop&utm_campaign=about-dialog" data-l10n-name="helpus-getInvolvedLink"/>
|
||||
</description>
|
||||
+#endif
|
||||
- <description class="text-blurb" id="contributeDesc" data-l10n-id="helpus">
|
||||
- <label is="text-link" href="https://foundation.mozilla.org/?form=firefox-about" data-l10n-name="helpus-donateLink"/>
|
||||
- <label is="text-link" href="https://www.mozilla.org/contribute/?utm_source=firefox-browser&utm_medium=firefox-desktop&utm_campaign=about-dialog" data-l10n-name="helpus-getInvolvedLink"/>
|
||||
- </description>
|
||||
</vbox>
|
||||
</vbox>
|
||||
</hbox>
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
diff --git a/browser/base/content/appmenu-viewcache.inc.xhtml b/browser/base/content/appmenu-viewcache.inc.xhtml
|
||||
index 3c5c4f29b1de25a4ce17089502f2251a27e5c7f5..dfa3260ed3c2bb6067745696fbf103c7e56c639a 100644
|
||||
--- a/browser/base/content/appmenu-viewcache.inc.xhtml
|
||||
+++ b/browser/base/content/appmenu-viewcache.inc.xhtml
|
||||
@@ -421,6 +421,10 @@
|
||||
class="subviewbutton"
|
||||
data-l10n-id="appmenu-customizetoolbar"
|
||||
command="cmd_CustomizeToolbars"/>
|
||||
+ <toolbarbutton id="appmenu-zen-share-rice"
|
||||
+ class="subviewbutton"
|
||||
+ data-l10n-id="appmenu-zen-share-rice"
|
||||
+ oncommand="gZenThemePicker.shareTheme()" />
|
||||
<toolbarseparator/>
|
||||
<html:h2 id="appmenu-developer-tools"
|
||||
data-l10n-id="appmenu-developer-tools-subheader"
|
||||
@@ -1,8 +1,35 @@
|
||||
diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js
|
||||
index 992d07daaef1abc4554a43aa654888f66963c575..73e620b70b7ed14e9d140e875c2cd5f5ac31456b 100644
|
||||
index 73593191936cc345ee8e2c28cb251dc13f4c2fd4..e6c459c1ebc60a1f3930a55e212570f696bf07a0 100644
|
||||
--- a/browser/base/content/browser-addons.js
|
||||
+++ b/browser/base/content/browser-addons.js
|
||||
@@ -2105,18 +2105,20 @@ var gUnifiedExtensions = {
|
||||
@@ -735,7 +735,7 @@ var gXPInstallObserver = {
|
||||
persistent: true,
|
||||
hideClose: true,
|
||||
popupOptions: {
|
||||
- position: "bottomright topright",
|
||||
+ position: gZenUIManager.panelUIPosition,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -942,7 +942,7 @@ var gXPInstallObserver = {
|
||||
hideClose: true,
|
||||
timeout: Date.now() + 30000,
|
||||
popupOptions: {
|
||||
- position: "bottomright topright",
|
||||
+ position: gZenUIManager.panelUIPosition,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -2125,7 +2125,7 @@ var gUnifiedExtensions = {
|
||||
|
||||
panel.hidden = false;
|
||||
PanelMultiView.openPopup(panel, this._button, {
|
||||
- position: "bottomright topright",
|
||||
+ position: gZenUIManager.panelUIPosition,
|
||||
triggerEvent: aEvent,
|
||||
});
|
||||
}
|
||||
@@ -2294,18 +2294,20 @@ var gUnifiedExtensions = {
|
||||
this._maybeMoveWidgetNodeBack(widgetId);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml
|
||||
index 2ca8bdd2674fb4addf3bbf94ff17abc5c93c6293..dd965d8d190e8cdacbeb3d80995ad1a906e64079 100644
|
||||
index 7d7e8697f02f90d4f336c9ab0a73a89848e0c21c..64e950106dd05b443ce72107613ac9cc405d56ea 100644
|
||||
--- a/browser/base/content/browser-box.inc.xhtml
|
||||
+++ b/browser/base/content/browser-box.inc.xhtml
|
||||
@@ -26,7 +26,13 @@
|
||||
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
|
||||
<box id="after-splitter"></box>
|
||||
</div>
|
||||
@@ -23,7 +23,15 @@
|
||||
<browser id="sidebar" autoscroll="false" disablehistory="true" disablefullscreen="true" tooltip="aHTMLTooltip"/>
|
||||
</vbox>
|
||||
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
|
||||
+<vbox flex="1" id="zen-appcontent-wrapper">
|
||||
+<html:div id="zen-appcontent-navbar-container"></html:div>
|
||||
+<hbox id="zen-tabbox-wrapper" flex="1">
|
||||
+ <html:div id="zen-appcontent-navbar-wrapper">
|
||||
+ <html:div id="zen-appcontent-navbar-container"></html:div>
|
||||
+ </html:div>
|
||||
+ <hbox id="zen-tabbox-wrapper" flex="1">
|
||||
<tabbox id="tabbrowser-tabbox" flex="1" tabcontainer="tabbrowser-tabs">
|
||||
+#include zen-tabbrowser-elements.inc.xhtml
|
||||
<tabpanels id="tabbrowser-tabpanels" flex="1" selectedIndex="0"/>
|
||||
|
||||
@@ -15,7 +15,7 @@ index 3d5173315812589c0b79beec5f0419fc37cb8868..c4216db9e414fbbaead6ecd89b40366b
|
||||
TelemetryTimestamps.add("delayedStartupStarted");
|
||||
|
||||
this._cancelDelayedStartup();
|
||||
+ ZenWorkspaces.afterLoadInit();
|
||||
+ gZenWorkspaces.afterLoadInit();
|
||||
|
||||
gBrowser.addEventListener(
|
||||
"PermissionStateChange",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
|
||||
index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f288919ae0d 100644
|
||||
index 6d664917a5a3bb1cea8a747e42e8bc0065ec999e..5059293ebfa29d646455b7a3505bd6eae408ba64 100644
|
||||
--- a/browser/base/content/browser.js
|
||||
+++ b/browser/base/content/browser.js
|
||||
@@ -33,6 +33,7 @@ ChromeUtils.defineESModuleGetters(this, {
|
||||
@@ -10,33 +10,32 @@ index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f28
|
||||
DevToolsSocketStatus:
|
||||
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
|
||||
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
|
||||
@@ -2698,6 +2699,11 @@ var XULBrowserWindow = {
|
||||
@@ -2340,6 +2341,10 @@ var XULBrowserWindow = {
|
||||
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
|
||||
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
|
||||
|
||||
+ gZenViewSplitter.onLocationChange(gBrowser.selectedBrowser);
|
||||
+ ZenWorkspaces.onLocationChange(gBrowser.selectedBrowser);
|
||||
+ gZenTabUnloader.onLocationChange(gBrowser.selectedBrowser);
|
||||
+ gZenWorkspaces.onLocationChange(gBrowser.selectedBrowser);
|
||||
+ gZenPinnedTabManager.onLocationChange(gBrowser.selectedBrowser);
|
||||
+
|
||||
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
|
||||
|
||||
if (!gMultiProcessBrowser) {
|
||||
@@ -5194,7 +5200,7 @@ function switchToTabHavingURI(
|
||||
@@ -4816,7 +4821,7 @@ function switchToTabHavingURI(
|
||||
ignoreQueryString || replaceQueryString,
|
||||
ignoreFragmentWhenComparing
|
||||
);
|
||||
- let browsers = aWindow.gBrowser.browsers;
|
||||
+ let browsers = aWindow.ZenWorkspaces.allUsedBrowsers;
|
||||
+ let browsers = aWindow.gZenWorkspaces.allUsedBrowsers;
|
||||
for (let i = 0; i < browsers.length; i++) {
|
||||
let browser = browsers[i];
|
||||
let browserCompare = cleanURL(
|
||||
@@ -5235,7 +5241,7 @@ function switchToTabHavingURI(
|
||||
@@ -4859,7 +4864,7 @@ function switchToTabHavingURI(
|
||||
}
|
||||
|
||||
if (!doAdopt) {
|
||||
- aWindow.gBrowser.tabContainer.selectedIndex = i;
|
||||
+ aWindow.ZenWorkspaces.switchIfNeeded(browser, i);
|
||||
+ aWindow.gZenWorkspaces.switchIfNeeded(browser, i);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
|
||||
index 0d0a559a6473149b50f4bf18d059e86907c4acd3..a5a48ba1d50b3bf74dec3f3d371a76228e246a9e 100644
|
||||
index 8f8c5536cb6e54300897180ca3f950974c60e930..79305485631f14712d8b2674f477b641ec53fcd6 100644
|
||||
--- a/browser/base/content/browser.xhtml
|
||||
+++ b/browser/base/content/browser.xhtml
|
||||
@@ -26,6 +26,7 @@
|
||||
@@ -10,37 +10,27 @@ index 0d0a559a6473149b50f4bf18d059e86907c4acd3..a5a48ba1d50b3bf74dec3f3d371a7622
|
||||
persist="screenX screenY width height sizemode"
|
||||
data-l10n-sync="true">
|
||||
<head>
|
||||
@@ -104,6 +105,8 @@
|
||||
@@ -105,8 +106,11 @@
|
||||
|
||||
<title data-l10n-id="browser-main-window-default-title"></title>
|
||||
|
||||
+#include zen-preloaded.inc.xhtml
|
||||
+
|
||||
# All JS files which are needed by browser.xhtml and other top level windows to
|
||||
# support MacOS specific features *must* go into the global-scripts.inc file so
|
||||
# that they can be shared with macWindow.inc.xhtml.
|
||||
@@ -148,6 +151,7 @@
|
||||
window.addEventListener("DOMContentLoaded",
|
||||
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
|
||||
</script>
|
||||
<script src="chrome://browser/content/global-scripts.js"></script>
|
||||
<script src="chrome://browser/content/browser-main.js"></script>
|
||||
+#include zen-assets.inc.xhtml
|
||||
</head>
|
||||
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
# All sets except for popupsets (commands, keys, and stringbundles)
|
||||
@@ -169,9 +173,13 @@
|
||||
@@ -128,9 +132,11 @@
|
||||
</vbox>
|
||||
</html:template>
|
||||
|
||||
-#include navigator-toolbox.inc.xhtml
|
||||
-
|
||||
-#include browser-box.inc.xhtml
|
||||
+ <hbox id="zen-main-app-wrapper" flex="1" persist="zen-compact-mode">
|
||||
+ <vbox id="zen-toast-container"></vbox>
|
||||
+ #include navigator-toolbox.inc.xhtml
|
||||
+ <html:span id="zen-sidebar-box-container">
|
||||
+ </html:span>
|
||||
+ #include browser-box.inc.xhtml
|
||||
+ </hbox>
|
||||
+<hbox id="zen-main-app-wrapper" flex="1" persist="zen-compact-mode">
|
||||
#include navigator-toolbox.inc.xhtml
|
||||
|
||||
#include browser-box.inc.xhtml
|
||||
+</hbox>
|
||||
|
||||
<html:template id="customizationPanel">
|
||||
<box id="customization-container" flex="1" hidden="true"><![CDATA[
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c5d0f33a6 100644
|
||||
index 00c8976d3e258c0875d7da2f3ec823d8907a84c9..cc61d5a845b5ce22a61f5a1aab8b280b2bcdf101 100644
|
||||
--- a/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
@@ -2,7 +2,7 @@
|
||||
@@ -11,55 +11,35 @@ index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c
|
||||
<script src="chrome://browser/content/navigator-toolbox.js" />
|
||||
|
||||
<!-- Menu -->
|
||||
@@ -17,9 +17,8 @@
|
||||
@@ -17,9 +17,9 @@
|
||||
#include browser-menubar.inc
|
||||
</toolbaritem>
|
||||
<spacer flex="1" skipintoolbarset="true" style="order: 1000;"/>
|
||||
-#include titlebar-items.inc.xhtml
|
||||
</toolbar>
|
||||
-
|
||||
|
||||
+<hbox id="titlebar">
|
||||
<toolbar id="TabsToolbar"
|
||||
class="browser-toolbar browser-titlebar"
|
||||
fullscreentoolbar="true"
|
||||
@@ -32,7 +31,7 @@
|
||||
|
||||
<hbox class="titlebar-spacer" type="pre-tabs"/>
|
||||
|
||||
- <hbox flex="1" align="end" class="toolbar-items">
|
||||
+ <hbox flex="1" align="start" class="toolbar-items">
|
||||
<toolbartabstop/>
|
||||
<hbox id="TabsToolbar-customization-target" flex="1">
|
||||
<toolbarbutton id="firefox-view-button"
|
||||
@@ -40,6 +39,7 @@
|
||||
data-l10n-id="toolbar-button-firefox-view-2"
|
||||
role="button"
|
||||
aria-pressed="false"
|
||||
+ hidden="true"
|
||||
cui-areatype="toolbar"
|
||||
removable="true"/>
|
||||
|
||||
@@ -50,6 +50,10 @@
|
||||
@@ -50,6 +50,8 @@
|
||||
tooltip="tabbrowser-tab-tooltip"
|
||||
orient="horizontal"
|
||||
stopwatchid="FX_TAB_CLICK_MS">
|
||||
+<html:div id="zen-essentials-container" skipintoolbarset="true"></html:div>
|
||||
+<hbox id="zen-current-workspace-indicator-container"></hbox>
|
||||
stopwatchid="tabClick">
|
||||
+<html:div id="zen-essentials" skipintoolbarset="true"></html:div>
|
||||
+<html:div id="zen-tabs-wrapper">
|
||||
+<html:div id="zen-browser-tabs-container">
|
||||
<hbox class="tab-drop-indicator" hidden="true"/>
|
||||
<html:span id="tab-drag-empty-feedback" role="presentation"/>
|
||||
# If the name (tabbrowser-arrowscrollbox) or structure of this changes
|
||||
# significantly, there is an optimization in
|
||||
@@ -75,6 +79,8 @@
|
||||
@@ -76,6 +78,7 @@
|
||||
tooltip="dynamic-shortcut-tooltip"
|
||||
data-l10n-id="tabs-toolbar-new-tab"/>
|
||||
<html:span id="tabbrowser-tab-a11y-desc" hidden="true"/>
|
||||
+</html:div>
|
||||
+</html:div>
|
||||
</tabs>
|
||||
|
||||
<toolbarbutton id="new-tab-button"
|
||||
@@ -100,10 +106,10 @@
|
||||
@@ -101,9 +104,10 @@
|
||||
#include private-browsing-indicator.inc.xhtml
|
||||
<toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/>
|
||||
|
||||
@@ -67,20 +47,7 @@ index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c
|
||||
+#include zen-sidebar-icons.inc.xhtml
|
||||
|
||||
</toolbar>
|
||||
-
|
||||
+</hbox>
|
||||
|
||||
<toolbar id="nav-bar"
|
||||
class="browser-toolbar chromeclass-location"
|
||||
data-l10n-id="navbar-accessible"
|
||||
@@ -489,10 +495,10 @@
|
||||
consumeanchor="PanelUI-button"
|
||||
data-l10n-id="appmenu-menu-button-closed2"/>
|
||||
</toolbaritem>
|
||||
+#include titlebar-items.inc.xhtml
|
||||
<hbox class="titlebar-spacer" type="post-tabs"/>
|
||||
#include private-browsing-indicator.inc.xhtml
|
||||
<toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/>
|
||||
-#include titlebar-items.inc.xhtml
|
||||
</toolbar>
|
||||
|
||||
<toolbar id="PersonalToolbar"
|
||||
|
||||
@@ -1,16 +1,11 @@
|
||||
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
|
||||
index 94d3c2bb401c2e4246340a6c2d63c9d3561ff5e1..62c599f78748e708c8f36c05935822e8808996b5 100644
|
||||
index 3bd0ee8af8b696161d18fd2a978f9e25972ed3ad..9e602a942271bd54231dc66363f8db51aea9e78a 100644
|
||||
--- a/browser/base/content/nsContextMenu.sys.mjs
|
||||
+++ b/browser/base/content/nsContextMenu.sys.mjs
|
||||
@@ -1109,6 +1109,13 @@ export class nsContextMenu {
|
||||
@@ -1111,6 +1111,8 @@ export class nsContextMenu {
|
||||
!this.isSecureAboutPage()
|
||||
);
|
||||
|
||||
+ this.showItem(
|
||||
+ "context-zenAddToWebPanel",
|
||||
+ this.onLink && !this.onMailtoLink && !this.onTelLink
|
||||
+ );
|
||||
+
|
||||
+ this.showItem("context-zenSplitLink", this.onLink && !this.onMailtoLink && !this.onTelLink);
|
||||
+
|
||||
let canNotStrip =
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-tabs.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-browser-ui.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-gradient-generator.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-rices.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-panel-ui.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-single-components.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-browser-container.css" />
|
||||
@@ -19,7 +18,6 @@
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-decks.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-folders.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-glance.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-sidebar-panels.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-popup.css" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-compact-mode.css" />
|
||||
@@ -27,24 +25,19 @@
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-branding.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-welcome.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-media-controls.css" />
|
||||
<link rel="stylesheet" type="text/css" href="chrome://browser/content/zen-styles/zen-download-box-animation.css" />
|
||||
</linkset>
|
||||
|
||||
# Scripts used all over the browser
|
||||
<script>
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenFolders.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesCommon.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesImporter.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenCompactMode.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenTabUnloader.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenPinnedTabsStorage.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenPinnedTabManager.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenGradientGenerator.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenViewSplitter.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenGlanceManager.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenMediaController.mjs", this);
|
||||
|
||||
// Unimportant scripts
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenRices.mjs", this);
|
||||
</script>
|
||||
<script src="chrome://browser/content/ZenUIManager.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenFolders.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenMods.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenCompactMode.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenPinnedTabsStorage.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenPinnedTabManager.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenGradientGenerator.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenViewSplitter.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenGlanceManager.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenMediaController.mjs"></script>
|
||||
<script src="chrome://browser/content/zen-components/ZenDownloadAnimation.mjs"></script>
|
||||
|
||||
@@ -1,83 +1,103 @@
|
||||
|
||||
|
||||
content/browser/zenThemeModifier.js (content/zenThemeModifier.js)
|
||||
content/browser/ZenStartup.mjs (content/ZenStartup.mjs)
|
||||
content/browser/zen-sets.js (content/zen-sets.js)
|
||||
content/browser/ZenUIManager.mjs (content/ZenUIManager.mjs)
|
||||
content/browser/ZenCustomizableUI.sys.mjs (content/ZenCustomizableUI.sys.mjs)
|
||||
content/browser/zen-components/ZenUIMigration.mjs (zen-components/ZenUIMigration.mjs)
|
||||
content/browser/zen-components/ZenCompactMode.mjs (zen-components/ZenCompactMode.mjs)
|
||||
content/browser/zen-components/ZenViewSplitter.mjs (zen-components/ZenViewSplitter.mjs)
|
||||
content/browser/zen-components/ZenThemesCommon.mjs (zen-components/ZenThemesCommon.mjs)
|
||||
content/browser/zen-components/ZenWorkspaces.mjs (zen-components/ZenWorkspaces.mjs)
|
||||
content/browser/zen-components/ZenWorkspacesStorage.mjs (zen-components/ZenWorkspacesStorage.mjs)
|
||||
content/browser/zen-components/ZenWorkspacesSync.mjs (zen-components/ZenWorkspacesSync.mjs)
|
||||
content/browser/zen-components/ZenKeyboardShortcuts.mjs (zen-components/ZenKeyboardShortcuts.mjs)
|
||||
content/browser/zen-components/ZenThemesImporter.mjs (zen-components/ZenThemesImporter.mjs)
|
||||
content/browser/zen-components/ZenTabUnloader.mjs (zen-components/ZenTabUnloader.mjs)
|
||||
content/browser/zen-components/ZenPinnedTabsStorage.mjs (zen-components/ZenPinnedTabsStorage.mjs)
|
||||
content/browser/zen-components/ZenPinnedTabManager.mjs (zen-components/ZenPinnedTabManager.mjs)
|
||||
content/browser/zen-components/ZenCommonUtils.mjs (zen-components/ZenCommonUtils.mjs)
|
||||
content/browser/zen-components/ZenGradientGenerator.mjs (zen-components/ZenGradientGenerator.mjs)
|
||||
content/browser/zen-components/ZenGlanceManager.mjs (zen-components/ZenGlanceManager.mjs)
|
||||
content/browser/zen-components/ZenFolders.mjs (zen-components/ZenFolders.mjs)
|
||||
content/browser/zen-components/ZenActorsManager.mjs (zen-components/ZenActorsManager.mjs)
|
||||
content/browser/zen-components/ZenRices.mjs (zen-components/ZenRices.mjs)
|
||||
content/browser/zen-components/ZenEmojies.mjs (zen-components/ZenEmojies.mjs)
|
||||
content/browser/zen-components/ZenWelcome.mjs (zen-components/ZenWelcome.mjs)
|
||||
content/browser/zen-components/ZenMediaController.mjs (zen-components/ZenMediaController.mjs)
|
||||
content/browser/zenThemeModifier.js (../../zen/common/zenThemeModifier.js)
|
||||
content/browser/ZenStartup.mjs (../../zen/common/ZenStartup.mjs)
|
||||
content/browser/zen-sets.js (../../zen/common/zen-sets.js)
|
||||
content/browser/ZenUIManager.mjs (../../zen/common/ZenUIManager.mjs)
|
||||
content/browser/zen-components/ZenActorsManager.mjs (../../zen/common/ZenActorsManager.mjs)
|
||||
content/browser/zen-components/ZenEmojies.mjs (../../zen/common/ZenEmojies.mjs)
|
||||
content/browser/ZenCustomizableUI.sys.mjs (../../zen/common/ZenCustomizableUI.sys.mjs)
|
||||
content/browser/zen-components/ZenUIMigration.mjs (../../zen/common/ZenUIMigration.mjs)
|
||||
content/browser/zen-components/ZenCommonUtils.mjs (../../zen/common/ZenCommonUtils.mjs)
|
||||
content/browser/zen-components/ZenSessionStore.mjs (../../zen/common/ZenSessionStore.mjs)
|
||||
|
||||
content/browser/zen-styles/zen-theme.css (content/zen-styles/zen-theme.css)
|
||||
content/browser/zen-styles/zen-buttons.css (content/zen-styles/zen-buttons.css)
|
||||
content/browser/zen-styles/zen-tabs.css (content/zen-styles/zen-tabs.css)
|
||||
* content/browser/zen-styles/zen-tabs/vertical-tabs.css (content/zen-styles/zen-tabs/vertical-tabs.css)
|
||||
content/browser/zen-styles/zen-tabs/horizontal-tabs.css (content/zen-styles/zen-tabs/horizontal-tabs.css)
|
||||
content/browser/zen-styles/zen-browser-ui.css (content/zen-styles/zen-browser-ui.css)
|
||||
content/browser/zen-styles/zen-animations.css (content/zen-styles/zen-animations.css)
|
||||
content/browser/zen-styles/zen-panel-ui.css (content/zen-styles/zen-panel-ui.css)
|
||||
content/browser/zen-styles/zen-single-components.css (content/zen-styles/zen-single-components.css)
|
||||
content/browser/zen-styles/zen-sidebar.css (content/zen-styles/zen-sidebar.css)
|
||||
content/browser/zen-styles/zen-toolbar.css (content/zen-styles/zen-toolbar.css)
|
||||
content/browser/zen-styles/zen-decks.css (content/zen-styles/zen-decks.css)
|
||||
content/browser/zen-styles/zen-folders.css (content/zen-styles/zen-folders.css)
|
||||
content/browser/zen-styles/zen-glance.css (content/zen-styles/zen-glance.css)
|
||||
content/browser/zen-styles/zen-browser-container.css (content/zen-styles/zen-browser-container.css)
|
||||
content/browser/zen-styles/zen-workspaces.css (content/zen-styles/zen-workspaces.css)
|
||||
content/browser/zen-styles/zen-urlbar.css (content/zen-styles/zen-urlbar.css)
|
||||
content/browser/zen-styles/zen-popup.css (content/zen-styles/zen-popup.css)
|
||||
content/browser/zen-styles/zen-sidebar-panels.css (content/zen-styles/zen-sidebar-panels.css)
|
||||
content/browser/zen-styles/zen-gradient-generator.css (content/zen-styles/zen-gradient-generator.css)
|
||||
content/browser/zen-styles/zen-rices.css (content/zen-styles/zen-rices.css)
|
||||
content/browser/zen-styles/zen-branding.css (content/zen-styles/zen-branding.css)
|
||||
content/browser/zen-styles/zen-welcome.css (content/zen-styles/zen-welcome.css)
|
||||
content/browser/zen-styles/zen-media-controls.css (content/zen-styles/zen-media-controls.css)
|
||||
content/browser/zen-styles/zen-theme.css (../../zen/common/styles/zen-theme.css)
|
||||
content/browser/zen-styles/zen-buttons.css (../../zen/common/styles/zen-buttons.css)
|
||||
content/browser/zen-styles/zen-browser-ui.css (../../zen/common/styles/zen-browser-ui.css)
|
||||
content/browser/zen-styles/zen-animations.css (../../zen/common/styles/zen-animations.css)
|
||||
content/browser/zen-styles/zen-panel-ui.css (../../zen/common/styles/zen-panel-ui.css)
|
||||
content/browser/zen-styles/zen-single-components.css (../../zen/common/styles/zen-single-components.css)
|
||||
content/browser/zen-styles/zen-sidebar.css (../../zen/common/styles/zen-sidebar.css)
|
||||
content/browser/zen-styles/zen-toolbar.css (../../zen/common/styles/zen-toolbar.css)
|
||||
content/browser/zen-styles/zen-browser-container.css (../../zen/common/styles/zen-browser-container.css)
|
||||
content/browser/zen-styles/zen-urlbar.css (../../zen/common/styles/zen-urlbar.css)
|
||||
content/browser/zen-styles/zen-popup.css (../../zen/common/styles/zen-popup.css)
|
||||
content/browser/zen-styles/zen-branding.css (../../zen/common/styles/zen-branding.css)
|
||||
|
||||
content/browser/zen-styles/zen-panels/bookmarks.css (content/zen-styles/zen-panels/bookmarks.css)
|
||||
content/browser/zen-styles/zen-panels/extensions.css (content/zen-styles/zen-panels/extensions.css)
|
||||
content/browser/zen-styles/zen-panels/print.css (content/zen-styles/zen-panels/print.css)
|
||||
content/browser/zen-styles/zen-panels/dialog.css (content/zen-styles/zen-panels/dialog.css)
|
||||
content/browser/zen-styles/zen-panels/bookmarks.css (../../zen/common/styles/zen-panels/bookmarks.css)
|
||||
content/browser/zen-styles/zen-panels/extensions.css (../../zen/common/styles/zen-panels/extensions.css)
|
||||
content/browser/zen-styles/zen-panels/print.css (../../zen/common/styles/zen-panels/print.css)
|
||||
content/browser/zen-styles/zen-panels/dialog.css (../../zen/common/styles/zen-panels/dialog.css)
|
||||
|
||||
content/browser/zen-components/ZenCompactMode.mjs (../../zen/compact-mode/ZenCompactMode.mjs)
|
||||
* content/browser/zen-styles/zen-compact-mode.css (../../zen/compact-mode/zen-compact-mode.css)
|
||||
|
||||
content/browser/zen-components/ZenViewSplitter.mjs (../../zen/split-view/ZenViewSplitter.mjs)
|
||||
content/browser/zen-styles/zen-decks.css (../../zen/split-view/zen-decks.css)
|
||||
|
||||
content/browser/zen-components/ZenMods.mjs (../../zen/mods/ZenMods.mjs)
|
||||
|
||||
content/browser/zen-components/ZenWorkspaceIcons.mjs (../../zen/workspaces/ZenWorkspaceIcons.mjs)
|
||||
content/browser/zen-components/ZenWorkspace.mjs (../../zen/workspaces/ZenWorkspace.mjs)
|
||||
content/browser/zen-components/ZenWorkspaces.mjs (../../zen/workspaces/ZenWorkspaces.mjs)
|
||||
content/browser/zen-components/ZenWorkspacesStorage.mjs (../../zen/workspaces/ZenWorkspacesStorage.mjs)
|
||||
content/browser/zen-components/ZenWorkspacesSync.mjs (../../zen/workspaces/ZenWorkspacesSync.mjs)
|
||||
content/browser/zen-components/ZenGradientGenerator.mjs (../../zen/workspaces/ZenGradientGenerator.mjs)
|
||||
* content/browser/zen-styles/zen-workspaces.css (../../zen/workspaces/zen-workspaces.css)
|
||||
content/browser/zen-styles/zen-gradient-generator.css (../../zen/workspaces/zen-gradient-generator.css)
|
||||
|
||||
content/browser/zen-components/ZenKeyboardShortcuts.mjs (../../zen/kbs/ZenKeyboardShortcuts.mjs)
|
||||
|
||||
content/browser/zen-components/ZenPinnedTabsStorage.mjs (../../zen/tabs/ZenPinnedTabsStorage.mjs)
|
||||
content/browser/zen-components/ZenPinnedTabManager.mjs (../../zen/tabs/ZenPinnedTabManager.mjs)
|
||||
* content/browser/zen-styles/zen-tabs.css (../../zen/tabs/zen-tabs.css)
|
||||
content/browser/zen-styles/zen-tabs/vertical-tabs.css (../../zen/tabs/zen-tabs/vertical-tabs.css)
|
||||
|
||||
content/browser/zen-components/ZenGlanceManager.mjs (../../zen/glance/ZenGlanceManager.mjs)
|
||||
content/browser/zen-styles/zen-glance.css (../../zen/glance/zen-glance.css)
|
||||
|
||||
content/browser/zen-components/ZenFolders.mjs (../../zen/folders/ZenFolders.mjs)
|
||||
content/browser/zen-styles/zen-folders.css (../../zen/folders/zen-folders.css)
|
||||
|
||||
content/browser/zen-components/ZenWelcome.mjs (../../zen/welcome/ZenWelcome.mjs)
|
||||
content/browser/zen-styles/zen-welcome.css (../../zen/welcome/zen-welcome.css)
|
||||
|
||||
content/browser/zen-components/ZenMediaController.mjs (../../zen/media/ZenMediaController.mjs)
|
||||
content/browser/zen-styles/zen-media-controls.css (../../zen/media/zen-media-controls.css)
|
||||
|
||||
content/browser/zen-components/ZenDownloadAnimation.mjs (../../zen/downloads/ZenDownloadAnimation.mjs)
|
||||
content/browser/zen-styles/zen-download-arc-animation.css (../../zen/downloads/zen-download-arc-animation.css)
|
||||
content/browser/zen-styles/zen-download-box-animation.css (../../zen/downloads/zen-download-box-animation.css)
|
||||
|
||||
* content/browser/zen-styles/zen-compact-mode.css (content/zen-styles/zen-compact-mode.css)
|
||||
|
||||
# Images
|
||||
content/browser/zen-images/gradient.png (content/zen-images/gradient.png)
|
||||
content/browser/zen-images/brand-header.svg (content/zen-images/brand-header.svg)
|
||||
content/browser/zen-images/layouts/collapsed.png (content/zen-images/layouts/collapsed.png)
|
||||
content/browser/zen-images/layouts/multiple-toolbar.png (content/zen-images/layouts/multiple-toolbar.png)
|
||||
content/browser/zen-images/layouts/single-toolbar.png (content/zen-images/layouts/single-toolbar.png)
|
||||
content/browser/zen-images/grain-bg.png (content/zen-images/grain-bg.png)
|
||||
content/browser/zen-images/note-indicator.svg (content/zen-images/note-indicator.svg)
|
||||
content/browser/zen-images/gradient.png (../../zen/images/gradient.png)
|
||||
content/browser/zen-images/brand-header.svg (../../zen/images/brand-header.svg)
|
||||
content/browser/zen-images/layouts/collapsed.png (../../zen/images/layouts/collapsed.png)
|
||||
content/browser/zen-images/layouts/multiple-toolbar.png (../../zen/images/layouts/multiple-toolbar.png)
|
||||
content/browser/zen-images/layouts/single-toolbar.png (../../zen/images/layouts/single-toolbar.png)
|
||||
content/browser/zen-images/grain-bg.png (../../zen/images/grain-bg.png)
|
||||
content/browser/zen-images/note-indicator.svg (../../zen/images/note-indicator.svg)
|
||||
|
||||
# Actors
|
||||
content/browser/zen-components/actors/ZenThemeMarketplaceParent.sys.mjs (zen-components/actors/ZenThemeMarketplaceParent.sys.mjs)
|
||||
content/browser/zen-components/actors/ZenThemeMarketplaceChild.sys.mjs (zen-components/actors/ZenThemeMarketplaceChild.sys.mjs)
|
||||
content/browser/zen-components/actors/ZenGlanceChild.sys.mjs (zen-components/actors/ZenGlanceChild.sys.mjs)
|
||||
content/browser/zen-components/actors/ZenGlanceParent.sys.mjs (zen-components/actors/ZenGlanceParent.sys.mjs)
|
||||
content/browser/zen-images/downloads/download.svg (../../zen/images/downloads/download.svg)
|
||||
content/browser/zen-images/downloads/archive.svg (../../zen/images/downloads/archive.svg)
|
||||
|
||||
# Fonts
|
||||
content/browser/zen-fonts/JunicodeVF-Italic.woff2 (content/zen-fonts/JunicodeVF-Italic.woff2)
|
||||
content/browser/zen-fonts/JunicodeVF-Roman.woff2 (content/zen-fonts/JunicodeVF-Roman.woff2)
|
||||
content/browser/zen-fonts/JunicodeVF-Italic.woff2 (../../zen/fonts/JunicodeVF-Italic.woff2)
|
||||
content/browser/zen-fonts/JunicodeVF-Roman.woff2 (../../zen/fonts/JunicodeVF-Roman.woff2)
|
||||
|
||||
# JS Vendor
|
||||
content/browser/zen-vendor/tsparticles.confetti.bundle.min.js (content/zen-vendor/tsparticles.confetti.bundle.min.js)
|
||||
content/browser/zen-vendor/motion.min.mjs (content/zen-vendor/motion.min.mjs)
|
||||
content/browser/zen-vendor/tsparticles.confetti.bundle.min.js (../../zen/vendor/tsparticles.confetti.bundle.min.js)
|
||||
content/browser/zen-vendor/motion.min.mjs (../../zen/vendor/motion.min.mjs)
|
||||
|
||||
# FavIcons for startup
|
||||
content/browser/zen-images/favicons/calendar.ico (../../zen/images/favicons/calendar.ico)
|
||||
content/browser/zen-images/favicons/discord.ico (../../zen/images/favicons/discord.ico)
|
||||
content/browser/zen-images/favicons/figma.ico (../../zen/images/favicons/figma.ico)
|
||||
content/browser/zen-images/favicons/github.ico (../../zen/images/favicons/github.ico)
|
||||
content/browser/zen-images/favicons/notion.ico (../../zen/images/favicons/notion.ico)
|
||||
content/browser/zen-images/favicons/obsidian.ico (../../zen/images/favicons/obsidian.ico)
|
||||
content/browser/zen-images/favicons/slack.ico (../../zen/images/favicons/slack.ico)
|
||||
content/browser/zen-images/favicons/reddit.ico (../../zen/images/favicons/reddit.ico)
|
||||
content/browser/zen-images/favicons/x.ico (../../zen/images/favicons/x.ico)
|
||||
content/browser/zen-images/favicons/trello.ico (../../zen/images/favicons/trello.ico)
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
<command id="cmd_zenCompactModeToggle" />
|
||||
<command id="cmd_zenCompactModeShowSidebar" />
|
||||
<command id="cmd_zenCompactModeShowToolbar" />
|
||||
<command id="cmd_zenCompactModeHideSidebar" />
|
||||
<command id="cmd_zenCompactModeHideToolbar" />
|
||||
<command id="cmd_zenCompactModeHideBoth" />
|
||||
|
||||
<command id="cmd_zenWorkspaceForward" />
|
||||
<command id="cmd_zenWorkspaceBackward" />
|
||||
@@ -11,6 +14,7 @@
|
||||
<command id="cmd_zenSplitViewHorizontal" />
|
||||
<command id="cmd_zenSplitViewUnsplit" />
|
||||
<command id="cmd_zenSplitViewLinkInNewTab" />
|
||||
<command id="cmd_zenSplitViewContextMenu" />
|
||||
|
||||
<!-- Workspace commands -->
|
||||
<command id="cmd_zenWorkspaceSwitch1" />
|
||||
@@ -25,7 +29,7 @@
|
||||
<command id="cmd_zenWorkspaceSwitch10" />
|
||||
|
||||
<command id="cmd_zenOpenZenThemePicker" />
|
||||
<command id="cmd_zenChangeWorkspaceTabColor" />
|
||||
<command id="cmd_zenChangeWorkspaceTab" />
|
||||
<command id="cmd_zenToggleTabsOnRight" />
|
||||
|
||||
<command id="cmd_zenReplacePinnedUrlWithCurrent" />
|
||||
@@ -39,10 +43,6 @@
|
||||
|
||||
<command id="cmd_zenCopyCurrentURL" />
|
||||
<command id="cmd_zenCopyCurrentURLMarkdown" />
|
||||
|
||||
<command id="cmd_zenUnloadTab" />
|
||||
<command id="cmd_zenPreventUnloadTab" />
|
||||
<command id="cmd_zenIgnoreUnloadTab" />
|
||||
</commandset>
|
||||
|
||||
<keyset id="zenKeyset"></keyset>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
<panel flip="side" type="arrow" orient="vertical" id="PanelUI-zen-gradient-generator" position="bottomright topright" mainview="true" side="left" onpopuphidden="gZenThemePicker.handlePanelClose();" onpopupshowing="gZenThemePicker.handlePanelOpen();">
|
||||
<panel flip="side" type="arrow" orient="vertical" id="PanelUI-zen-gradient-generator" position="bottomright topright" mainview="true" side="left">
|
||||
<panelmultiview id="PanelUI-zen-gradient-generator-multiview" mainViewId="PanelUI-zen-gradient-generator-view">
|
||||
<panelview id="PanelUI-zen-gradient-generator-view" class="PanelUI-subView zen-theme-picker" role="document" mainview-with-header="true" has-custom-header="true">
|
||||
<hbox>
|
||||
@@ -34,7 +34,7 @@
|
||||
<hbox id="PanelUI-zen-gradient-colors-wrapper">
|
||||
<vbox flex="1">
|
||||
<label data-l10n-id="zen-panel-ui-gradient-generator-opacity-text"></label>
|
||||
<html:input type="range" min="0" max="1" value="0.5" step="0.05" oninput="gZenThemePicker.onOpacityChange(event);" id="PanelUI-zen-gradient-generator-opacity" />
|
||||
<html:input type="range" min="0" max="1" value="0.5" step="0.05" id="PanelUI-zen-gradient-generator-opacity" />
|
||||
</vbox>
|
||||
<vbox id="PanelUI-zen-gradient-generator-texture-wrapper">
|
||||
</vbox>
|
||||
@@ -45,7 +45,7 @@
|
||||
<label data-l10n-id="zen-panel-ui-gradient-generator-custom-color"></label>
|
||||
<hbox>
|
||||
<html:input type="text" placeholder="#000000" id="PanelUI-zen-gradient-generator-custom-input" />
|
||||
<toolbarbutton id="PanelUI-zen-gradient-generator-color-custom-add" class="subviewbutton" oncommand="gZenThemePicker.addCustomColor();" data-l10n-id="zen-panel-ui-gradient-generator-custom-color-add">
|
||||
<toolbarbutton id="PanelUI-zen-gradient-generator-color-custom-add" class="subviewbutton">
|
||||
<image></image>
|
||||
</toolbarbutton>
|
||||
</hbox>
|
||||
@@ -57,16 +57,16 @@
|
||||
</panelmultiview>
|
||||
</panel>
|
||||
|
||||
<panel flip="slide" type="arrow" orient="vertical" id="PanelUI-zen-workspaces" position="bottomright topright" mainview="true" side="left" onpopuphidden="ZenWorkspaces.handlePanelHidden();">
|
||||
<panel flip="slide" type="arrow" orient="vertical" id="PanelUI-zen-workspaces" position="bottomright topright" mainview="true" side="left">
|
||||
<panelmultiview id="PanelUI-zen-workspaces-multiview" mainViewId="PanelUI-zen-workspaces-view">
|
||||
<panelview id="PanelUI-zen-workspaces-view" class="PanelUI-subView" role="document" mainview-with-header="true" has-custom-header="true" closemenu="none">
|
||||
<vbox>
|
||||
<hbox>
|
||||
<h3 data-l10n-id="zen-panel-ui-workspaces-text" id="PanelUI-zen-workspaces-header"></h3>
|
||||
<toolbarbutton id="PanelUI-zen-workspaces-reorder-mode" oncommand="ZenWorkspaces.toggleReorderMode();" class="subviewbutton">
|
||||
<toolbarbutton id="PanelUI-zen-workspaces-reorder-mode" class="subviewbutton">
|
||||
<image></image>
|
||||
</toolbarbutton>
|
||||
<toolbarbutton id="PanelUI-zen-workspaces-new" oncommand="ZenWorkspaces.openSaveDialog();" class="subviewbutton">
|
||||
<toolbarbutton id="PanelUI-zen-workspaces-new" class="subviewbutton">
|
||||
<image></image>
|
||||
</toolbarbutton>
|
||||
</hbox>
|
||||
@@ -78,14 +78,14 @@
|
||||
<vbox class="PanelUI-zen-workspaces-user-create">
|
||||
<h1 data-l10n-id="zen-panel-ui-workspaces-create-text"></h1>
|
||||
<hbox class="PanelUI-zen-workspaces-creation-wraper">
|
||||
<hbox class="PanelUI-zen-workspaces-icons-container create" onclick="ZenWorkspaces.onWorkspaceIconContainerClick(event);"></hbox>
|
||||
<html:input autofocus="true" id="PanelUI-zen-workspaces-create-input" type="text" placeholder="Enter workspace name" oninput="ZenWorkspaces.onWorkspaceCreationNameChange(this);" />
|
||||
<hbox class="PanelUI-zen-workspaces-icons-container create"></hbox>
|
||||
<html:input autofocus="true" id="PanelUI-zen-workspaces-create-input" type="text" placeholder="Enter workspace name" />
|
||||
</hbox>
|
||||
</vbox>
|
||||
<html:moz-button-group class="panel-footer" id="PanelUI-zen-workspaces-create-footer">
|
||||
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-create-save" oncommand="ZenWorkspaces.saveWorkspaceFromCreate();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-save">
|
||||
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-create-save" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-save">
|
||||
</button>
|
||||
<button id="PanelUI-zen-workspaces-create-cancel" oncommand="ZenWorkspaces.closeWorkspacesSubView();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-cancel">
|
||||
<button id="PanelUI-zen-workspaces-create-cancel" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-cancel">
|
||||
</button>
|
||||
</html:moz-button-group>
|
||||
</panelview>
|
||||
@@ -93,43 +93,39 @@
|
||||
<vbox class="PanelUI-zen-workspaces-user-create">
|
||||
<h1 data-l10n-id="zen-panel-ui-workspaces-edit-text"></h1>
|
||||
<hbox class="PanelUI-zen-workspaces-creation-wraper">
|
||||
<hbox class="PanelUI-zen-workspaces-icons-container edit" onclick="ZenWorkspaces.onWorkspaceIconContainerClick(event);"></hbox>
|
||||
<html:input autofocus="true" id="PanelUI-zen-workspaces-edit-input" type="text" placeholder="Enter workspace name" oninput="ZenWorkspaces.onWorkspaceEditChange();" />
|
||||
<hbox class="PanelUI-zen-workspaces-icons-container edit"></hbox>
|
||||
<html:input autofocus="true" id="PanelUI-zen-workspaces-edit-input" type="text" placeholder="Enter workspace name" />
|
||||
</hbox>
|
||||
</vbox>
|
||||
<html:moz-button-group class="panel-footer" id="PanelUI-zen-workspaces-edit-footer">
|
||||
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-edit-save" oncommand="ZenWorkspaces.saveWorkspaceFromEdit();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-save">
|
||||
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-edit-save" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-save">
|
||||
</button>
|
||||
<button id="PanelUI-zen-workspaces-edit-cancel" oncommand="ZenWorkspaces.closeWorkspacesSubView();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-cancel">
|
||||
<button id="PanelUI-zen-workspaces-edit-cancel" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-cancel">
|
||||
</button>
|
||||
</html:moz-button-group>
|
||||
</panelview>
|
||||
<panelview id="PanelUI-zen-workspaces-icon-picker" class="PanelUI-subView" role="document" mainview-with-header="true" has-custom-header="true">
|
||||
<vbox id="PanelUI-zen-workspaces-icon-picker-wrapper">
|
||||
<html:div id="PanelUI-zen-workspaces-icon-search-bar">
|
||||
<html:input autofocus="true" type="text" id="PanelUI-zen-workspaces-icon-search-input" oninput="ZenWorkspaces.conductSearch();"/>
|
||||
<html:input autofocus="true" type="text" id="PanelUI-zen-workspaces-icon-search-input"/>
|
||||
</html:div>
|
||||
</vbox>
|
||||
</panelview>
|
||||
</panelmultiview>
|
||||
</panel>
|
||||
|
||||
<menupopup id="zenWorkspaceActionsMenu"
|
||||
onpopupshowing="ZenWorkspaces.updateContextMenu(this);"
|
||||
onpopuphidden="if (event.target == this) ZenWorkspaces.onContextMenuClose();">
|
||||
<menuitem id="context_zenOpenWorkspace" oncommand="ZenWorkspaces.openWorkspace();" data-l10n-id="zen-workspaces-panel-context-open"/>
|
||||
<menupopup id="zenWorkspaceActionsMenu">
|
||||
<menuitem id="context_zenOpenWorkspace" data-l10n-id="zen-workspaces-panel-context-open"/>
|
||||
<menuseparator/>
|
||||
<menuitem id="context_zenSetAsDefaultWorkspace" oncommand="ZenWorkspaces.setDefaultWorkspace();" data-l10n-id="zen-workspaces-panel-context-set-default"/>
|
||||
<menuitem id="context_zenEditWorkspace" oncommand="ZenWorkspaces.contextEdit(event);" data-l10n-id="zen-workspaces-panel-context-edit"/>
|
||||
<menuitem id="context_zenEditWorkspace" data-l10n-id="zen-workspaces-panel-context-edit"/>
|
||||
<menu id="context_zenWorkspacesOpenInContainerTab"
|
||||
data-l10n-id="zen-workspaces-panel-context-open-in-container-tab"
|
||||
selection-type="single"
|
||||
node-type="link"
|
||||
hide-if-private-browsing="true"
|
||||
hide-if-usercontext-disabled="true">
|
||||
<menupopup oncommand="ZenWorkspaces.contextChangeContainerTab(event);"
|
||||
onpopupshowing="return ZenWorkspaces.createContainerTabMenu(event);" />
|
||||
<menupopup />
|
||||
</menu>
|
||||
<menuseparator/>
|
||||
<menuitem id="context_zenDeleteWorkspace" oncommand="ZenWorkspaces.contextDelete(event);" data-l10n-id="zen-workspaces-panel-context-delete"/>
|
||||
<menuitem id="context_zenDeleteWorkspace" data-l10n-id="zen-workspaces-panel-context-delete"/>
|
||||
</menupopup>
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
# This needs to be here, before all the other scripts, because it's used before
|
||||
# the window is fully loaded.
|
||||
# Make sure they are loaded before the global-scripts.inc file.
|
||||
<script type="text/javascript">
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-sets.js", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenCommonUtils.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenKeyboardShortcuts.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspaces.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspacesSync.mjs", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenActorsManager.mjs", this);
|
||||
</script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-sets.js"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenCommonUtils.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenKeyboardShortcuts.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspaceIcons.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspace.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspaces.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspacesSync.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenActorsManager.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenSessionStore.mjs"></script>
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#include zen-media-player.inc.xhtml
|
||||
#include ../../../zen/media/zen-media-controls.inc.xhtml
|
||||
<toolbar brighttext="true"
|
||||
id="zen-sidebar-bottom-buttons"
|
||||
fullscreentoolbar="true"
|
||||
class="browser-toolbar customization-target zen-dont-hide-on-fullscreen"
|
||||
class="browser-toolbar customization-target"
|
||||
data-l10n-id="tabs-toolbar"
|
||||
customizable="true"
|
||||
skipintoolbarset="true"
|
||||
context="toolbar-context-menu"
|
||||
mode="icons">
|
||||
<toolbarbutton removable="true" class="chromeclass-toolbar-additional toolbarbutton-1 zen-sidebar-action-button" id="zen-expand-sidebar-button" data-l10n-id="sidebar-zen-expand" cui-areatype="toolbar" oncommand="gZenVerticalTabsManager.toggleExpand();"></toolbarbutton>
|
||||
<toolbarbutton id="zen-workspaces-button" class="chromeclass-toolbar-additional" overflows="false" removable="false"></toolbarbutton>
|
||||
<toolbarbutton removable="true" class="chromeclass-toolbar-additional toolbarbutton-1 zen-sidebar-action-button" id="zen-expand-sidebar-button" command="cmd_zenToggleSidebar" data-l10n-id="sidebar-zen-expand"></toolbarbutton>
|
||||
<zen-workspace-icons id="zen-workspaces-button" overflows="false" removable="false"></zen-workspace-icons>
|
||||
</toolbar>
|
||||
|
||||
@@ -1,393 +0,0 @@
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
/* All overrides for compact mode go here */
|
||||
|
||||
:root[zen-compact-mode='true']:not([customizing]):not([inDOMFullscreen='true']) {
|
||||
%include zen-tabs/vertical-tabs-topbuttons-fix.css
|
||||
|
||||
@media -moz-pref('zen.view.compact.hide-tabbar') or -moz-pref('zen.view.use-single-toolbar') {
|
||||
#zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel[pinned='true']) {
|
||||
margin-left: var(--zen-sidebar-web-panel-spacing) !important;
|
||||
}
|
||||
|
||||
#zen-tabbox-wrapper {
|
||||
/* Remove extra 1px of margine we have to add to the tabbox */
|
||||
margin-left: var(--zen-element-separation) !important;
|
||||
margin-right: var(--zen-element-separation) !important;
|
||||
}
|
||||
|
||||
#zen-appcontent-wrapper {
|
||||
& #tabbrowser-tabbox {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
#zen-sidebar-top-buttons-customization-target {
|
||||
padding-inline-start: calc(var(--zen-toolbox-padding) - var(--toolbarbutton-outer-padding)) !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-splitter {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
&:not([zen-window-buttons-reversed='true']) #zen-appcontent-navbar-container #nav-bar {
|
||||
margin-left: var(--zen-element-separation) !important;
|
||||
}
|
||||
|
||||
&[zen-window-buttons-reversed='true'] #zen-appcontent-navbar-container #nav-bar {
|
||||
margin-right: var(--zen-element-separation) !important;
|
||||
}
|
||||
|
||||
#navigator-toolbox {
|
||||
--zen-toolbox-max-width: 64px !important;
|
||||
--zen-compact-float: var(--zen-element-separation);
|
||||
|
||||
/* Initial padding for when we are animating */
|
||||
padding: 0 0 0 var(--zen-toolbox-padding) !important;
|
||||
|
||||
&:not([animate='true']) {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
transition:
|
||||
left 0.15s ease,
|
||||
right 0.15s ease,
|
||||
opacity 1.5s ease;
|
||||
top: 0;
|
||||
bottom: var(--zen-element-separation);
|
||||
padding: 0 var(--zen-compact-float) !important;
|
||||
opacity: 0;
|
||||
|
||||
:root[zen-single-toolbar='true'] & {
|
||||
top: calc(var(--zen-element-separation) / 2);
|
||||
height: calc(100% - var(--zen-element-separation));
|
||||
}
|
||||
|
||||
& #zen-sidebar-top-buttons {
|
||||
margin: 0 0 calc(var(--zen-toolbox-padding) / 2) 0;
|
||||
}
|
||||
}
|
||||
|
||||
&:not([zen-right-side='true']) #nav-bar {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
&:not([zen-right-side='true']) #navigator-toolbox {
|
||||
left: calc(-1 * var(--actual-zen-sidebar-width) + 1px);
|
||||
}
|
||||
|
||||
/* When we have multiple toolbars and the top-toolbar is NOT being hidden,
|
||||
* we need to adjust the top-padding of the toolbox to account for the
|
||||
* extra toolbar height. */
|
||||
@media not -moz-pref('zen.view.compact.hide-toolbar') {
|
||||
&:not([zen-single-toolbar='true']) {
|
||||
#navigator-toolbox:not([animate='true']) {
|
||||
margin-top: var(--zen-toolbar-height) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&[zen-right-side='true'] {
|
||||
& #navigator-toolbox {
|
||||
--zen-compact-float: calc(var(--zen-element-separation) + 1px);
|
||||
|
||||
&:not([animate='true']) {
|
||||
right: calc(-1 * var(--actual-zen-sidebar-width) + 1px);
|
||||
}
|
||||
}
|
||||
|
||||
& .browserSidebarContainer {
|
||||
margin-left: 0 !important;
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
#navigator-toolbox:not([animate='true']) #titlebar {
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
border-radius: calc(var(--zen-native-inner-radius) + var(--zen-element-separation) / 4);
|
||||
padding: var(--zen-toolbox-padding) !important;
|
||||
position: relative;
|
||||
background: var(--zen-dialog-background);
|
||||
outline: 1px solid var(--zen-colors-border-contrast);
|
||||
outline-offset: -1px;
|
||||
/* times 4 because we have the inner padding and the outter padding to consider */
|
||||
:root[zen-sidebar-expanded='true'] & {
|
||||
&[has-animated-padding='true'] {
|
||||
width: calc(var(--zen-sidebar-width) + var(--zen-toolbox-padding));
|
||||
}
|
||||
|
||||
&:not([has-animated-padding='true']) {
|
||||
width: calc(var(--zen-sidebar-width) - var(--zen-toolbox-padding));
|
||||
}
|
||||
}
|
||||
|
||||
:root[zen-single-toolbar='true'] {
|
||||
padding-top: 0 !important;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
@media -moz-pref('zen.view.compact.color-sidebar') {
|
||||
background: var(--zen-main-browser-background-toolbar) !important;
|
||||
background-attachment: fixed !important;
|
||||
background-size: 2000px !important; /* Dont ask me why */
|
||||
/* NOTE: We MUST not add a backdrop-filter if we want the URL
|
||||
* bar to be floating correctly:
|
||||
* https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_display/Containing_block#identifying_the_containing_block */
|
||||
}
|
||||
|
||||
& #urlbar[open][zen-floating-urlbar='true'] {
|
||||
transition: left 0.05s ease;
|
||||
visibility: visible;
|
||||
|
||||
#navigator-toolbox:has(&) {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-image: url(chrome://browser/content/zen-images/grain-bg.png);
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
opacity: var(--zen-grainy-background-opacity, 0);
|
||||
mix-blend-mode: overlay;
|
||||
}
|
||||
}
|
||||
|
||||
#navigator-toolbox[zen-has-hover]:not(:has(#urlbar[zen-floating-urlbar='true']:hover)),
|
||||
#navigator-toolbox[zen-user-show],
|
||||
#navigator-toolbox[zen-has-empty-tab],
|
||||
#navigator-toolbox[flash-popup],
|
||||
#navigator-toolbox[has-popup-menu],
|
||||
#navigator-toolbox[movingtab],
|
||||
#navigator-toolbox:has(.tabbrowser-tab:active),
|
||||
&[zen-renaming-tab='true'] #navigator-toolbox,
|
||||
#navigator-toolbox:has(
|
||||
*:is([panelopen='true'], [open='true'], #urlbar:focus-within):not(#urlbar[zen-floating-urlbar='true']):not(tab):not(.zen-compact-mode-ignore)
|
||||
) {
|
||||
&:not([animate='true']) {
|
||||
--zen-compact-mode-func: linear(
|
||||
0 0%,
|
||||
0.002748 1%,
|
||||
0.010544 2%,
|
||||
0.022757 3%,
|
||||
0.038804 4%,
|
||||
0.058151 5%,
|
||||
0.080308 6%,
|
||||
0.104828 7.000000000000001%,
|
||||
0.131301 8%,
|
||||
0.159358 9%,
|
||||
0.188662 10%,
|
||||
0.21891 11%,
|
||||
0.249828 12%,
|
||||
0.281172 13%,
|
||||
0.312724 14.000000000000002%,
|
||||
0.344288 15%,
|
||||
0.375693 16%,
|
||||
0.40679 17%,
|
||||
0.437447 18%,
|
||||
0.467549 19%,
|
||||
0.497 20%,
|
||||
0.525718 21%,
|
||||
0.553633 22%,
|
||||
0.580688 23%,
|
||||
0.60684 24%,
|
||||
0.632052 25%,
|
||||
0.656298 26%,
|
||||
0.679562 27%,
|
||||
0.701831 28.000000000000004%,
|
||||
0.723104 28.999999999999996%,
|
||||
0.743381 30%,
|
||||
0.76267 31%,
|
||||
0.780983 32%,
|
||||
0.798335 33%,
|
||||
0.814744 34%,
|
||||
0.830233 35%,
|
||||
0.844826 36%,
|
||||
0.858549 37%,
|
||||
0.87143 38%,
|
||||
0.883498 39%,
|
||||
0.894782 40%,
|
||||
0.905314 41%,
|
||||
0.915125 42%,
|
||||
0.924247 43%,
|
||||
0.93271 44%,
|
||||
0.940547 45%,
|
||||
0.947787 46%,
|
||||
0.954463 47%,
|
||||
0.960603 48%,
|
||||
0.966239 49%,
|
||||
0.971397 50%,
|
||||
0.976106 51%,
|
||||
0.980394 52%,
|
||||
0.984286 53%,
|
||||
0.987808 54%,
|
||||
0.990984 55.00000000000001%,
|
||||
0.993837 56.00000000000001%,
|
||||
0.99639 56.99999999999999%,
|
||||
0.998664 57.99999999999999%,
|
||||
1.000679 59%,
|
||||
1.002456 60%,
|
||||
1.004011 61%,
|
||||
1.005363 62%,
|
||||
1.006528 63%,
|
||||
1.007522 64%,
|
||||
1.008359 65%,
|
||||
1.009054 66%,
|
||||
1.009618 67%,
|
||||
1.010065 68%,
|
||||
1.010405 69%,
|
||||
1.010649 70%,
|
||||
1.010808 71%,
|
||||
1.01089 72%,
|
||||
1.010904 73%,
|
||||
1.010857 74%,
|
||||
1.010757 75%,
|
||||
1.010611 76%,
|
||||
1.010425 77%,
|
||||
1.010205 78%,
|
||||
1.009955 79%,
|
||||
1.009681 80%,
|
||||
1.009387 81%,
|
||||
1.009077 82%,
|
||||
1.008754 83%,
|
||||
1.008422 84%,
|
||||
1.008083 85%,
|
||||
1.00774 86%,
|
||||
1.007396 87%,
|
||||
1.007052 88%,
|
||||
1.00671 89%,
|
||||
1.006372 90%,
|
||||
1.00604 91%,
|
||||
1.005713 92%,
|
||||
1.005394 93%,
|
||||
1.005083 94%,
|
||||
1.004782 95%,
|
||||
1.004489 96%,
|
||||
1.004207 97%,
|
||||
1.003935 98%,
|
||||
1.003674 99%,
|
||||
1.003423 100%
|
||||
);
|
||||
transition:
|
||||
left 0.25s var(--zen-compact-mode-func),
|
||||
right 0.25s var(--zen-compact-mode-func);
|
||||
opacity: 1;
|
||||
|
||||
&:not([supress-primary-adjustment='true']) {
|
||||
left: calc(var(--zen-element-separation) / -2);
|
||||
:root[zen-right-side='true'] & {
|
||||
right: calc(var(--zen-element-separation) / -2);
|
||||
left: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media -moz-pref('zen.view.compact.hide-toolbar') {
|
||||
&:not([zen-single-toolbar='true']) {
|
||||
& #navigator-toolbox {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
& #navigator-toolbox {
|
||||
--zen-toolbox-top-align: var(--zen-element-separation);
|
||||
}
|
||||
|
||||
& #sidebar-box,
|
||||
& #titlebar,
|
||||
& #zen-appcontent-wrapper,
|
||||
& #zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel:not([pinned='true'])) {
|
||||
margin-top: var(--zen-element-separation) !important;
|
||||
}
|
||||
|
||||
& #zen-appcontent-wrapper {
|
||||
z-index: 3 !important;
|
||||
}
|
||||
|
||||
& #zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel[pinned='true']) {
|
||||
margin-top: calc(var(--zen-element-separation) * 2) !important;
|
||||
}
|
||||
|
||||
& #zen-appcontent-navbar-container {
|
||||
--zen-compact-toolbar-offset: 5px;
|
||||
position: absolute;
|
||||
top: calc((-1 * var(--zen-toolbar-height)) + var(--zen-element-separation) + 1px);
|
||||
left: 0;
|
||||
z-index: 20;
|
||||
box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.3) !important;
|
||||
border-bottom-left-radius: var(--zen-border-radius);
|
||||
border-bottom-right-radius: var(--zen-border-radius);
|
||||
border-top-left-radius: env(-moz-gtk-csd-titlebar-radius);
|
||||
border-top-right-radius: env(-moz-gtk-csd-titlebar-radius);
|
||||
transition: all 0.15s ease;
|
||||
width: 100%;
|
||||
opacity: 0;
|
||||
background: var(--zen-dialog-background);
|
||||
|
||||
max-height: var(--zen-toolbar-height);
|
||||
overflow: hidden;
|
||||
|
||||
& > * {
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
& #urlbar {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
@media -moz-pref('zen.view.compact.color-toolbar') {
|
||||
background-attachment: fixed;
|
||||
background: var(--zen-main-browser-background-toolbar);
|
||||
background-size: 100% 2000px;
|
||||
border-bottom: 1px solid var(--zen-colors-border);
|
||||
}
|
||||
}
|
||||
|
||||
& #zen-appcontent-navbar-container[zen-has-hover],
|
||||
& #zen-appcontent-navbar-container:focus-within,
|
||||
& #zen-appcontent-navbar-container[zen-user-show],
|
||||
& #zen-appcontent-navbar-container[has-popup-menu],
|
||||
& #zen-appcontent-navbar-container:has(*:is([panelopen='true'], [open='true']):not(.zen-compact-mode-ignore)) {
|
||||
opacity: 1;
|
||||
border-top-width: 1px;
|
||||
|
||||
top: -1px;
|
||||
overflow: initial;
|
||||
max-height: unset;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-image: url(chrome://browser/content/zen-images/grain-bg.png);
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
opacity: var(--zen-grainy-background-opacity, 0);
|
||||
mix-blend-mode: overlay;
|
||||
}
|
||||
|
||||
& #urlbar {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
& #urlbar[breakout-extend='true']:not([zen-floating-urlbar='true']) {
|
||||
top: 2px !important;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,226 +0,0 @@
|
||||
#zen-rice-share-dialog-overlay:not([hidden]) {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
z-index: 3;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#zen-rice-share-dialog,
|
||||
#zen-rice-share-dialog-notice {
|
||||
color: var(--panel-color);
|
||||
background: var(--arrowpanel-background);
|
||||
border-radius: var(--zen-native-inner-radius);
|
||||
box-shadow: 0 0 1px 1px hsla(0, 0%, 0%, 0.2);
|
||||
border: var(--zen-appcontent-border);
|
||||
overflow: hidden;
|
||||
|
||||
animation: zen-jello-animation-large 0.4s ease;
|
||||
max-width: 400px;
|
||||
|
||||
&[animate='true'] {
|
||||
animation: zen-rice-submit-animation 1s cubic-bezier(0.77, 0, 0.18, 1);
|
||||
}
|
||||
|
||||
& .zen-rice-share-content {
|
||||
padding: 10px 0;
|
||||
border-top: var(--zen-appcontent-border);
|
||||
background: var(--arrowpanel-background);
|
||||
position: relative;
|
||||
align-items: center;
|
||||
|
||||
min-height: 50px;
|
||||
|
||||
&:has(#zen-rice-share-first-form:not([fade-out])),
|
||||
&:has(#zen-rice-share-success) {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
& > vbox {
|
||||
width: 100%;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
& #zen-rice-share-first-form input[type='text'] {
|
||||
width: 100%;
|
||||
padding: 1px 2px;
|
||||
border: 0;
|
||||
border-bottom: 1px solid var(--zen-appcontent-border);
|
||||
background: transparent;
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
& #zen-rice-share-name {
|
||||
font-style: normal !important;
|
||||
font-size: 24px;
|
||||
margin-left: 1px;
|
||||
}
|
||||
|
||||
& .indent {
|
||||
margin-left: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
& .zen-rice-share-header {
|
||||
height: 200px;
|
||||
margin-bottom: -20px;
|
||||
}
|
||||
|
||||
& #zen-rice-share-options {
|
||||
padding: 10px 0;
|
||||
|
||||
max-height: 30px;
|
||||
overflow: hidden;
|
||||
transition:
|
||||
max-height 0.3s ease,
|
||||
height 0.3s ease;
|
||||
&[zen-collapsed='false'] {
|
||||
max-height: 350px;
|
||||
}
|
||||
|
||||
& > .options-header {
|
||||
font-weight: 600;
|
||||
margin-bottom: 5px;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
align-items: center;
|
||||
|
||||
color: inherit;
|
||||
-moz-context-properties: fill, fill-opacity;
|
||||
fill: var(--toolbarbutton-icon-fill);
|
||||
|
||||
& label {
|
||||
width: fit-content;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
& > .options-header image {
|
||||
transition: transform 0.3s ease;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
&[zen-collapsed='false'] > .options-header image {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
& > checkbox {
|
||||
margin-left: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
& .panel-footer {
|
||||
margin: 0;
|
||||
margin-top: 10px;
|
||||
|
||||
& button {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
#zen-rice-share-error {
|
||||
border: 1px solid rgba(255, 0, 0, 0.5);
|
||||
background: rgba(255, 0, 0, 0.1);
|
||||
padding: 5px;
|
||||
transition: opacity 0.3s ease;
|
||||
border-radius: var(--zen-native-inner-radius);
|
||||
|
||||
@starting-style {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
& button {
|
||||
margin-left: auto;
|
||||
margin-top: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Animations */
|
||||
#zen-rice-share-first-form[fade-out] {
|
||||
position: absolute;
|
||||
transform: translateX(-100%);
|
||||
pointer-events: none;
|
||||
animation: zen-rice-form-out 0.5s ease;
|
||||
}
|
||||
|
||||
#zen-rice-share-second-form {
|
||||
animation: zen-rice-form-in 0.5s ease forwards;
|
||||
justify-content: center;
|
||||
|
||||
& > hbox {
|
||||
width: 100%;
|
||||
height: 5px;
|
||||
border-radius: 100px;
|
||||
border: 1px solid var(--zen-colors-border);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: var(--zen-primary-color);
|
||||
transition: width 4s cubic-bezier(1, 0, 0, 1);
|
||||
|
||||
@starting-style {
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&[fade-out] {
|
||||
position: absolute !important;
|
||||
animation: zen-rice-form-out 0.5s ease forwards;
|
||||
}
|
||||
}
|
||||
|
||||
#zen-rice-share-success {
|
||||
overflow-y: hidden;
|
||||
max-height: 0px;
|
||||
animation: zen-rice-form-in-2 0.5s ease forwards;
|
||||
|
||||
& > h1 {
|
||||
margin: 0;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
& > p {
|
||||
color: var(--text-color-deemphasized);
|
||||
}
|
||||
|
||||
& label {
|
||||
margin: 0;
|
||||
margin-top: 15px;
|
||||
font-weight: 600;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#zen-rice-share-dialog-notice {
|
||||
padding: 15px;
|
||||
|
||||
& br {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
& > p {
|
||||
color: var(--text-color-deemphasized);
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.panel-footer {
|
||||
margin-top: 10px;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
@@ -1,306 +0,0 @@
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#zen-sidebar-panels-wrapper {
|
||||
/*min-height: 500px;*/
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
#zen-sidebar-panels-sites {
|
||||
background: transparent;
|
||||
max-width: 1px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#zen-sidebar-add-panel-button:not(:hover) image,
|
||||
.zen-sidebar-panel-button:not([selected='true'], #zen-sidebar-add-panel-button) image {
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
.zen-sidebar-panel-button {
|
||||
width: var(--zen-sidebar-action-button-width);
|
||||
height: var(--zen-sidebar-action-button-width);
|
||||
max-height: var(--zen-sidebar-action-button-width);
|
||||
padding: 0 3px !important;
|
||||
margin: 0;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.zen-sidebar-panel-button image {
|
||||
border-radius: 10px !important;
|
||||
border: 2px solid transparent;
|
||||
}
|
||||
|
||||
.zen-sidebar-panel-button:hover image {
|
||||
background: color-mix(in srgb, var(--toolbarbutton-hover-background) 12%, transparent);
|
||||
}
|
||||
|
||||
.zen-sidebar-panel-button[selected='true'] image {
|
||||
border-color: var(--zen-primary-color);
|
||||
}
|
||||
|
||||
/** Sidebar view */
|
||||
|
||||
#zen-sidebar-web-panel-wrapper {
|
||||
--zen-default-sidebar-width: 300px;
|
||||
--zen-sidebar-web-panel-spacing: var(--zen-element-separation);
|
||||
position: relative;
|
||||
margin-right: 0;
|
||||
display: flex;
|
||||
pointer-events: none;
|
||||
transition: width 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel[hidden='true']) {
|
||||
max-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: none;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel-wrapper:has(#zen-sidebar-web-panel[pinned='true']) {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
width: calc(100% - var(--zen-sidebar-web-panel-spacing) * 3);
|
||||
margin: var(--zen-sidebar-web-panel-spacing);
|
||||
/* Why times 3?
|
||||
* + 1 for the top margin, making the element overflow the view.
|
||||
* + 1 for the margin we want to add at the bottom
|
||||
* + 1 so that the panel can be correctly spaced from the border of the webview
|
||||
*/
|
||||
height: calc(100% - var(--zen-sidebar-web-panel-spacing) * 4);
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel {
|
||||
border-radius: var(--zen-native-inner-radius);
|
||||
z-index: 2;
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
background: var(--zen-colors-tertiary);
|
||||
opacity: 0;
|
||||
animation-delay: 0.1s;
|
||||
flex-direction: column;
|
||||
min-width: var(--zen-default-sidebar-width);
|
||||
max-width: 720px;
|
||||
min-height: var(--zen-default-sidebar-width);
|
||||
width: calc(var(--zen-default-sidebar-width) + 200px);
|
||||
pointer-events: all;
|
||||
height: calc(100% - 20px);
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel:not([pinned='true']) {
|
||||
/* We need to always override the height */
|
||||
height: unset !important;
|
||||
}
|
||||
|
||||
.zen-sidebar-web-panel-splitter,
|
||||
.zen-split-view-splitter[orient='vertical'],
|
||||
#zen-sidebar-splitter {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
width: var(--zen-element-separation);
|
||||
background: transparent;
|
||||
border: none;
|
||||
cursor: ew-resize;
|
||||
z-index: 3;
|
||||
|
||||
&:is(.zen-split-view-splitter[orient='vertical']) {
|
||||
/* Bit of a hacky solution, but it works */
|
||||
width: var(--zen-split-row-gap);
|
||||
margin-left: calc(var(--zen-element-separation) * -1 - 1px);
|
||||
height: unset;
|
||||
cursor: ew-resize;
|
||||
}
|
||||
|
||||
&::before {
|
||||
height: 50px;
|
||||
width: 2px;
|
||||
background: var(--button-primary-bgcolor);
|
||||
border-radius: 2px;
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
opacity: 0;
|
||||
transition: opacity 0.1s ease-in-out;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
&:hover::before {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.zen-sidebar-web-panel-splitter[side='right'] {
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
.zen-sidebar-web-panel-splitter[side='left'] {
|
||||
right: 100%;
|
||||
}
|
||||
|
||||
.zen-sidebar-web-panel-splitter[orient='horizontal'] {
|
||||
width: 100%;
|
||||
height: 7px;
|
||||
cursor: ns-resize;
|
||||
|
||||
&::before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.zen-sidebar-web-panel-splitter[side='bottom'] {
|
||||
top: initial;
|
||||
bottom: -2px;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel[hidden='true'] .zen-sidebar-web-panel-splitter,
|
||||
#zen-sidebar-web-panel-wrapper[hidden='true'] + .zen-sidebar-web-panel-splitter,
|
||||
#zen-sidebar-web-panel:not([pinned='true']) .zen-sidebar-web-panel-splitter[orient='horizontal'],
|
||||
#zen-sidebar-web-panel:not([pinned='true']) .zen-sidebar-web-panel-splitter[side='left'] {
|
||||
display: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#main-window[customizing='true'] #zen-sidebar-web-panel-wrapper {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel:not([hidden='true']) {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel[pinned='true'] {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel[hidden='true'][pinned='true'] {
|
||||
display: flex;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-header,
|
||||
#zen-sidebar-panels-wrapper {
|
||||
width: 100%;
|
||||
min-height: var(--zen-toolbar-height) !important;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 5px;
|
||||
border: var(--zen-appcontent-border);
|
||||
border-width: 0 !important;
|
||||
border-bottom-width: 1px !important;
|
||||
background: transparent;
|
||||
position: relative;
|
||||
color-scheme: var(--toolbar-color-scheme);
|
||||
-moz-window-dragging: no-drag;
|
||||
|
||||
--toolbarbutton-inner-padding: var(--zen-toolbar-button-inner-padding) !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-header {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-header toolbarbutton {
|
||||
fill: color-mix(in srgb, var(--toolbarbutton-icon-fill) 70%, transparent);
|
||||
}
|
||||
|
||||
#zen-sidebar-panels-wrapper {
|
||||
border-top-width: 1px !important;
|
||||
border-bottom-width: 0px !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel-browser-containers {
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#zen-sidebar-introduction-panel {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 0 auto;
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
#zen-sidebar-introduction-panel[hidden='true'] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#zen-sidebar-introduction-panel h1 {
|
||||
font-size: 1.5em;
|
||||
font-weight: 600;
|
||||
margin: 0;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
#zen-sidebar-introduction-panel p {
|
||||
opacity: 0.7;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel browser[zen-sidebar-id] {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel-title {
|
||||
font-size: 0.9em;
|
||||
font-weight: 600;
|
||||
margin: 0 10px;
|
||||
padding: 0;
|
||||
color: var(--text-color-deemphasized);
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: -moz-available;
|
||||
text-align: center;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel[pinned] {
|
||||
transform-origin: 50% 20%;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel[pinned]:not([hidden]) {
|
||||
animation: better-sidebar-pinned-show 0.15s ease-in-out forwards !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel[pinned][hidden] {
|
||||
animation: better-sidebar-pinned-hide 0.15s ease-in-out forwards !important;
|
||||
}
|
||||
|
||||
/** UNPINNED **/
|
||||
#zen-sidebar-web-panel {
|
||||
/* Sets perspective */
|
||||
transform-origin: 50% 20%;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel:not([hidden]) #zen-sidebar-introduction-panel * {
|
||||
opacity: 0;
|
||||
animation: better-sidebar-intro-show 0.5s 0.4s ease-out forwards !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel:not([hidden]) #zen-sidebar-introduction-panel p {
|
||||
animation: better-sidebar-intro-show 0.5s 0.8s ease-out forwards !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel:not([hidden]) {
|
||||
animation: better-sidebar-show 0.15s ease-in-out forwards !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-web-panel[hidden] {
|
||||
animation: better-sidebar-hide 0.15s ease-in-out forwards !important;
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#zen-profile-button {
|
||||
& stack {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
& .toolbarbutton-badge {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
& stack {
|
||||
width: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important;
|
||||
height: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
& > image {
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
& #zen-profile-button-icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
list-style-image: var(--avatar-image-url);
|
||||
border-radius: 50%;
|
||||
pointer-events: none;
|
||||
list-style-image: var(--avatar-image-url);
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
border: 1px solid var(--zen-colors-border);
|
||||
}
|
||||
}
|
||||
|
||||
/* Bookmarks sidebar */
|
||||
#zen-tabbox-wrapper {
|
||||
& #sidebar-splitter {
|
||||
opacity: 0;
|
||||
margin: 0 calc(-1 * var(--zen-element-separation));
|
||||
}
|
||||
|
||||
& #sidebar-box {
|
||||
border-radius: var(--zen-native-inner-radius);
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
overflow: hidden;
|
||||
|
||||
:root:not([zen-right-side='true']) &[positionend='true'] {
|
||||
margin-right: var(--zen-element-separation);
|
||||
}
|
||||
|
||||
:root[zen-right-side='true'] & {
|
||||
margin-left: var(--zen-element-separation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Menubar */
|
||||
#toolbar-menubar {
|
||||
display: none !important;
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
/* Styles for both vertical and horizontal tabs */
|
||||
@import url('chrome://browser/content/zen-styles/zen-tabs/vertical-tabs.css');
|
||||
@import url('chrome://browser/content/zen-styles/zen-tabs/horizontal-tabs.css');
|
||||
|
||||
#zen-tabbox-wrapper {
|
||||
position: relative;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
@media -moz-pref('zen.workspaces.hide-default-container-indicator') {
|
||||
.tabbrowser-tab[zenDefaultUserContextId='true'] .tab-context-line {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
@@ -1,335 +0,0 @@
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
@media not -moz-pref('zen.tabs.vertical') {
|
||||
:root #browser {
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
}
|
||||
|
||||
& #navigator-toolbox {
|
||||
display: flex !important;
|
||||
flex-direction: row !important;
|
||||
max-width: unset !important;
|
||||
min-width: unset !important;
|
||||
width: 100% !important;
|
||||
padding: var(--zen-toolbox-padding) !important;
|
||||
}
|
||||
|
||||
#tabbrowser-tabs {
|
||||
display: -webkit-box !important;
|
||||
-webkit-box-orient: horizontal;
|
||||
-webkit-box-pack: start;
|
||||
max-width: 10000px !important;
|
||||
|
||||
--tabstrip-min-height: calc(var(--tab-min-height) - 4 * var(--tab-block-margin));
|
||||
--tab-min-height: 10px !important;
|
||||
}
|
||||
|
||||
.vertical-pinned-tabs-container-separator {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#zen-essentials-container,
|
||||
#vertical-pinned-tabs-container,
|
||||
#tabbrowser-arrowscrollbox {
|
||||
-webkit-box-flex: 1;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container:empty {
|
||||
-webkit-box-flex: 0 !important;
|
||||
width: 0 !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
border: none !important;
|
||||
visibility: collapse !important;
|
||||
}
|
||||
#navigator-toolbox {
|
||||
flex-direction: row !important;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#titlebar {
|
||||
flex-direction: row !important;
|
||||
width: 100%;
|
||||
height: 36px !important;
|
||||
}
|
||||
|
||||
#zen-essentials-container {
|
||||
--tab-min-height: 36px !important;
|
||||
display: flex !important;
|
||||
flex-direction: row !important;
|
||||
padding-inline-end: 0 !important;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container {
|
||||
display: flex !important;
|
||||
flex-direction: row !important;
|
||||
padding-inline-end: 0 !important;
|
||||
}
|
||||
|
||||
#zen-essentials-container .tabbrowser-tab {
|
||||
width: 0% !important;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container .tabbrowser-tab {
|
||||
width: 0% !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab[zen-glance-tab='true'] {
|
||||
.tab-label-container {
|
||||
display: none !important;
|
||||
width: 0px !important;
|
||||
max-width: 0px !important;
|
||||
}
|
||||
}
|
||||
|
||||
#tabbrowser-arrowscrollbox {
|
||||
display: flex !important;
|
||||
max-width: -moz-available;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
#TabsToolbar {
|
||||
flex-direction: row !important;
|
||||
gap: 8px;
|
||||
overflow: hidden !important;
|
||||
display: flex !important;
|
||||
}
|
||||
|
||||
#TabsToolbar-customization-target {
|
||||
flex-direction: row !important;
|
||||
}
|
||||
|
||||
#tabbrowser-tabs[orient='vertical'] {
|
||||
flex-direction: row !important;
|
||||
}
|
||||
|
||||
tabs {
|
||||
flex-direction: row !important;
|
||||
}
|
||||
|
||||
#zen-essentials-container {
|
||||
container-name: tab-container;
|
||||
container-type: normal;
|
||||
max-width: 36px !important;
|
||||
flex: 1 1 36px !important;
|
||||
}
|
||||
#vertical-pinned-tabs-container {
|
||||
container-name: tab-container;
|
||||
container-type: normal;
|
||||
max-width: 36px !important;
|
||||
min-width: 36px !important;
|
||||
flex: 1 1 36px !important;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container .tab-close-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container .tab-reset-button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container .tab-label-container {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container .tab-icon-image {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab {
|
||||
container-name: tab-container;
|
||||
container-type: normal;
|
||||
min-width: 40px !important;
|
||||
flex: 1 1 150px !important;
|
||||
width: -moz-available;
|
||||
|
||||
&:is(:hover, [visuallyselected]) .tab-close-button {
|
||||
display: block;
|
||||
--tab-inline-padding: 0; /* Avoid weird padding */
|
||||
margin-inline-end: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.tabbrowser-tab[selected] {
|
||||
flex: 2 0 150px !important;
|
||||
}
|
||||
|
||||
@container tab-container (max-width: 80px) {
|
||||
.tab-close-button {
|
||||
margin-right: 0px !important;
|
||||
}
|
||||
.tab-icon-image {
|
||||
padding: 0 !important;
|
||||
margin-left: min(2.5px, 5%) !important;
|
||||
margin-right: min(10px, 5%) !important;
|
||||
}
|
||||
.tab-label-container,
|
||||
.tab-content {
|
||||
margin: 0 !important;
|
||||
padding-left: min(8px, 5%) !important;
|
||||
padding-right: min(8px, 5%) !important;
|
||||
}
|
||||
}
|
||||
|
||||
@container tab-container (max-width: 44px) {
|
||||
.tab-label-container {
|
||||
display: none !important;
|
||||
}
|
||||
.tab-content {
|
||||
justify-content: space-around !important;
|
||||
}
|
||||
.tab-close-button {
|
||||
display: none !important;
|
||||
}
|
||||
.tabbrowser-tab[selected] {
|
||||
& .tab-icon-image,
|
||||
.tab-icon-stack {
|
||||
display: none !important;
|
||||
}
|
||||
& .tab-content {
|
||||
justify-content: space-around !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
.tab-close-button {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container::after {
|
||||
z-index: -1;
|
||||
content: '';
|
||||
position: absolute;
|
||||
right: 0;
|
||||
width: 1px;
|
||||
height: 45%;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
background: hsl(255, 10%, 100%);
|
||||
}
|
||||
|
||||
/* Other UI Elements */
|
||||
.zen-current-workspace-indicator {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-splitter {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#tabbrowser-tabpanels {
|
||||
padding-left: var(--zen-element-separation) !important;
|
||||
}
|
||||
|
||||
#appcontent * {
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
#TabsToolbar-customization-target::after {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#zen-sidebar-bottom-buttons {
|
||||
width: auto !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
/* Height Adjustments */
|
||||
#vertical-pinned-tabs-container,
|
||||
#zen-essentials-container,
|
||||
#tabbrowser-arrowscrollbox {
|
||||
max-height: none !important;
|
||||
}
|
||||
|
||||
#PanelUI-zen-gradient-generator {
|
||||
min-width: 390px !important;
|
||||
}
|
||||
|
||||
#zen-essentials-container:not(:empty),
|
||||
#vertical-pinned-tabs-container:not(:empty),
|
||||
#tabbrowser-arrowscrollbox {
|
||||
-webkit-box-flex: 1;
|
||||
min-width: min-content;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container:not(:empty) {
|
||||
display: -webkit-box !important;
|
||||
-webkit-box-orient: horizontal;
|
||||
min-width: fit-content !important;
|
||||
width: fit-content !important;
|
||||
position: relative;
|
||||
margin-right: -1px !important;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container:not(:empty) .tabbrowser-tab {
|
||||
position: relative;
|
||||
display: -webkit-box !important;
|
||||
}
|
||||
|
||||
#tabbrowser-arrowscrollbox {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container:empty,
|
||||
#zen-essentials-container:empty {
|
||||
-webkit-box-flex: 0 !important;
|
||||
width: 0 !important;
|
||||
min-width: 0 !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
border: none !important;
|
||||
visibility: collapse !important;
|
||||
}
|
||||
|
||||
#nav-bar {
|
||||
width: unset !important;
|
||||
min-width: 500px !important;
|
||||
}
|
||||
|
||||
#tabbrowser-arrowscrollbox-periphery {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
hbox#nav-bar-customization-target toolbarbutton.chromeclass-toolbar-additional:nth-of-type(1) {
|
||||
padding-inline-start: var(--toolbar-start-end-padding) !important;
|
||||
}
|
||||
|
||||
toolbar#PersonalToolbar {
|
||||
padding-left: 6px !important;
|
||||
}
|
||||
|
||||
.tab-context-line {
|
||||
width: 100% !important;
|
||||
height: 3px !important;
|
||||
}
|
||||
|
||||
.tabbrowser-tab[zen-glance-tab='true'] {
|
||||
flex-basis: fit-content !important;
|
||||
max-width: 36px !important;
|
||||
}
|
||||
|
||||
#zen-essentials-container .tabbrowser-tab[zen-glance-tab='true'] {
|
||||
left: 2px;
|
||||
}
|
||||
|
||||
#vertical-pinned-tabs-container .tabbrowser-tab[zen-glance-tab='true'] {
|
||||
position: absolute !important;
|
||||
}
|
||||
|
||||
#TabsToolbar-customization-target toolbarbutton,
|
||||
#TabsToolbar-customization-target toolbarpaletteitem {
|
||||
-webkit-box-flex: 0 !important;
|
||||
min-width: min-content;
|
||||
width: auto !important;
|
||||
|
||||
.toolbarbutton-text {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,2 +1,4 @@
|
||||
#include zen-splitview-overlay.inc.xhtml
|
||||
#include zen-glance.inc.xhtml
|
||||
<vbox id="zen-toast-container"></vbox>
|
||||
|
||||
#include ../../../zen/split-view/zen-splitview-overlay.inc.xhtml
|
||||
#include ../../../zen/glance/zen-glance.inc.xhtml
|
||||
File diff suppressed because one or more lines are too long
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
|
||||
index 824c5df20ee13af7af2ce8657506f6f3f457aafc..6ef49535676325768497c1804f91c9e93959199a 100644
|
||||
index 4401c78d34007fa7481f8b8eeb070d17110821ae..064f14a7adf4ce1b98d58302998272444466c3ee 100644
|
||||
--- a/browser/base/jar.mn
|
||||
+++ b/browser/base/jar.mn
|
||||
@@ -103,3 +103,5 @@ browser.jar:
|
||||
@@ -105,3 +105,5 @@ browser.jar:
|
||||
|
||||
# L10n resources and overrides.
|
||||
% override chrome://global/locale/appstrings.properties chrome://browser/locale/appstrings.properties
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
diff --git a/browser/base/moz.build b/browser/base/moz.build
|
||||
index 636e0841786735a63ddea00e819c0b6f0b8a5d4d..6685d857180944d68bf4f049919f81361084c481 100644
|
||||
index 9da444880c4dbf188443d43e8d0a71d98311a2b7..3a654be6f78931e92479b30de6f0a6e50da81908 100644
|
||||
--- a/browser/base/moz.build
|
||||
+++ b/browser/base/moz.build
|
||||
@@ -87,3 +87,5 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] in ("windows", "gtk"):
|
||||
DEFINES["MENUBAR_CAN_AUTOHIDE"] = 1
|
||||
@@ -81,3 +81,5 @@ DEFINES["MOZ_APP_VERSION_DISPLAY"] = CONFIG["MOZ_APP_VERSION_DISPLAY"]
|
||||
DEFINES["APP_LICENSE_BLOCK"] = "%s/content/overrides/app-license.html" % SRCDIR
|
||||
|
||||
JAR_MANIFESTS += ["jar.mn"]
|
||||
+
|
||||
+DIRS += ["zen-components"]
|
||||
+DIRS += ["../../zen"]
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
// Utility to register JSWindowActors
|
||||
var gZenActorsManager = {
|
||||
_actors: new Set(),
|
||||
|
||||
addJSWindowActor(...args) {
|
||||
if (this._actors.has(args[0])) {
|
||||
// Actor already registered, nothing to do
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
ChromeUtils.registerWindowActor(...args);
|
||||
this._actors.add(args[0]);
|
||||
} catch (e) {
|
||||
console.warn(`Failed to register JSWindowActor: ${e}`);
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -1,478 +0,0 @@
|
||||
const lazyCompactMode = {};
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazyCompactMode,
|
||||
'COMPACT_MODE_FLASH_DURATION',
|
||||
'zen.view.compact.toolbar-flash-popup.duration',
|
||||
800
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazyCompactMode,
|
||||
'COMPACT_MODE_FLASH_ENABLED',
|
||||
'zen.view.compact.toolbar-flash-popup',
|
||||
true
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazyCompactMode,
|
||||
'COMPACT_MODE_CAN_ANIMATE_SIDEBAR',
|
||||
'zen.view.compact.animate-sidebar',
|
||||
true
|
||||
);
|
||||
|
||||
ChromeUtils.defineLazyGetter(lazyCompactMode, 'mainAppWrapper', () => document.getElementById('zen-main-app-wrapper'));
|
||||
|
||||
var gZenCompactModeManager = {
|
||||
_flashTimeouts: {},
|
||||
_evenListeners: [],
|
||||
_removeHoverFrames: {},
|
||||
_animating: false,
|
||||
|
||||
init() {
|
||||
Services.prefs.addObserver('zen.tabs.vertical.right-side', this._updateSidebarIsOnRight.bind(this));
|
||||
|
||||
gZenUIManager.addPopupTrackingAttribute(this.sidebar);
|
||||
gZenUIManager.addPopupTrackingAttribute(document.getElementById('zen-appcontent-navbar-container'));
|
||||
|
||||
this.addMouseActions();
|
||||
this.addContextMenu();
|
||||
|
||||
// Clear hover states when window state changes (minimize, maximize, etc.)
|
||||
window.addEventListener('sizemodechange', () => this._clearAllHoverStates());
|
||||
|
||||
if (AppConstants.platform == 'macosx') {
|
||||
window.addEventListener('mouseover', (event) => {
|
||||
const buttons = gZenVerticalTabsManager.actualWindowButtons;
|
||||
if (event.target.closest('.titlebar-buttonbox-container') === buttons) return;
|
||||
buttons.removeAttribute('zen-has-hover');
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
get preference() {
|
||||
if (!document.documentElement.hasAttribute('zen-compact-mode')) {
|
||||
window.addEventListener(
|
||||
'MozAfterPaint',
|
||||
() => {
|
||||
document.documentElement.setAttribute(
|
||||
'zen-compact-mode',
|
||||
lazyCompactMode.mainAppWrapper.getAttribute('zen-compact-mode')
|
||||
);
|
||||
},
|
||||
{ once: true }
|
||||
);
|
||||
}
|
||||
return lazyCompactMode.mainAppWrapper.getAttribute('zen-compact-mode') === 'true';
|
||||
},
|
||||
|
||||
set preference(value) {
|
||||
if (this.preference === value || this._animating) {
|
||||
// We dont want the user to be able to spam the button
|
||||
return value;
|
||||
}
|
||||
// We use this element in order to make it persis across restarts, by using the XULStore.
|
||||
// main-window can't store attributes other than window sizes, so we use this instead
|
||||
lazyCompactMode.mainAppWrapper.setAttribute('zen-compact-mode', value);
|
||||
document.documentElement.setAttribute('zen-compact-mode', value);
|
||||
this._updateEvent();
|
||||
return value;
|
||||
},
|
||||
|
||||
get sidebarIsOnRight() {
|
||||
if (typeof this._sidebarIsOnRight !== 'undefined') {
|
||||
return this._sidebarIsOnRight;
|
||||
}
|
||||
this._sidebarIsOnRight = Services.prefs.getBoolPref('zen.tabs.vertical.right-side');
|
||||
return this._sidebarIsOnRight;
|
||||
},
|
||||
|
||||
get sidebar() {
|
||||
if (!this._sidebar) {
|
||||
this._sidebar = document.getElementById('navigator-toolbox');
|
||||
}
|
||||
return this._sidebar;
|
||||
},
|
||||
|
||||
flashSidebarIfNecessary(aInstant = false) {
|
||||
if (!aInstant && this.preference && lazyCompactMode.COMPACT_MODE_FLASH_ENABLED && !gZenGlanceManager._animating) {
|
||||
this.flashSidebar();
|
||||
}
|
||||
},
|
||||
|
||||
addContextMenu() {
|
||||
const fragment = window.MozXULElement.parseXULToFragment(`
|
||||
<menu id="zen-context-menu-compact-mode" data-l10n-id="zen-toolbar-context-compact-mode">
|
||||
<menupopup>
|
||||
<menuitem id="zen-context-menu-compact-mode-toggle" data-l10n-id="zen-toolbar-context-compact-mode-enable" type="checkbox" oncommand="gZenCompactModeManager.toggle();"/>
|
||||
<menuseparator/>
|
||||
<menuitem id="zen-context-menu-compact-mode-hide-sidebar" data-l10n-id="zen-toolbar-context-compact-mode-just-tabs" type="radio" oncommand="gZenCompactModeManager.hideSidebar();"/>
|
||||
<menuitem id="zen-context-menu-compact-mode-hide-toolbar" data-l10n-id="zen-toolbar-context-compact-mode-just-toolbar" type="radio" oncommand="gZenCompactModeManager.hideToolbar();"/>
|
||||
<menuitem id="zen-context-menu-compact-mode-hide-both" data-l10n-id="zen-toolbar-context-compact-mode-hide-both" type="radio" oncommand="gZenCompactModeManager.hideBoth();"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
`);
|
||||
document.getElementById('viewToolbarsMenuSeparator').before(fragment);
|
||||
this.updateContextMenu();
|
||||
},
|
||||
|
||||
updateCompactModeContext(isSingleToolbar) {
|
||||
const IDs = [
|
||||
'zen-context-menu-compact-mode-hide-sidebar',
|
||||
'zen-context-menu-compact-mode-hide-toolbar',
|
||||
'zen-context-menu-compact-mode-hide-both',
|
||||
];
|
||||
for (let id of IDs) {
|
||||
document.getElementById(id).disabled = isSingleToolbar;
|
||||
}
|
||||
},
|
||||
|
||||
hideSidebar() {
|
||||
Services.prefs.setBoolPref('zen.view.compact.hide-tabbar', true);
|
||||
Services.prefs.setBoolPref('zen.view.compact.hide-toolbar', false);
|
||||
},
|
||||
|
||||
hideToolbar() {
|
||||
Services.prefs.setBoolPref('zen.view.compact.hide-toolbar', true);
|
||||
Services.prefs.setBoolPref('zen.view.compact.hide-tabbar', false);
|
||||
},
|
||||
|
||||
hideBoth() {
|
||||
Services.prefs.setBoolPref('zen.view.compact.hide-tabbar', true);
|
||||
Services.prefs.setBoolPref('zen.view.compact.hide-toolbar', true);
|
||||
},
|
||||
|
||||
addEventListener(callback) {
|
||||
this._evenListeners.push(callback);
|
||||
},
|
||||
|
||||
_updateEvent() {
|
||||
this._evenListeners.forEach((callback) => callback());
|
||||
this.updateContextMenu();
|
||||
this.animateCompactMode();
|
||||
},
|
||||
|
||||
// NOTE: Dont actually use event, it's just so we make sure
|
||||
// the caller is from the ResizeObserver
|
||||
getAndApplySidebarWidth(event = undefined) {
|
||||
let sidebarWidth = this.sidebar.getBoundingClientRect().width;
|
||||
if (sidebarWidth > 1) {
|
||||
gZenUIManager.restoreScrollbarState();
|
||||
// Second variable to get the genuine width of the sidebar
|
||||
this.sidebar.style.setProperty('--actual-zen-sidebar-width', `${sidebarWidth}px`);
|
||||
if (event && this.preference) {
|
||||
return;
|
||||
}
|
||||
this.sidebar.style.setProperty('--zen-sidebar-width', `${sidebarWidth}px`);
|
||||
}
|
||||
return sidebarWidth;
|
||||
},
|
||||
|
||||
animateCompactMode() {
|
||||
this._animating = true;
|
||||
const isCompactMode = this.preference;
|
||||
const canHideSidebar =
|
||||
Services.prefs.getBoolPref('zen.view.compact.hide-tabbar') || gZenVerticalTabsManager._hasSetSingleToolbar;
|
||||
const canAnimate =
|
||||
lazyCompactMode.COMPACT_MODE_CAN_ANIMATE_SIDEBAR &&
|
||||
!this.sidebar.hasAttribute('zen-user-show') &&
|
||||
!this.sidebar.hasAttribute('zen-has-empty-tab') &&
|
||||
!this.sidebar.hasAttribute('zen-has-hover');
|
||||
// Do this so we can get the correct width ONCE compact mode styled have been applied
|
||||
const titlebar = this.sidebar.querySelector('#titlebar');
|
||||
if (canAnimate) {
|
||||
this.sidebar.setAttribute('animate', 'true');
|
||||
titlebar.setAttribute('has-animated-padding', 'true');
|
||||
} else {
|
||||
titlebar.removeAttribute('has-animated-padding');
|
||||
}
|
||||
this.sidebar.style.removeProperty('margin-right');
|
||||
this.sidebar.style.removeProperty('margin-left');
|
||||
this.sidebar.style.removeProperty('transform');
|
||||
window.requestAnimationFrame(() => {
|
||||
let sidebarWidth = this.getAndApplySidebarWidth();
|
||||
if (!canAnimate) {
|
||||
this.sidebar.removeAttribute('animate');
|
||||
this._animating = false;
|
||||
return;
|
||||
}
|
||||
if (canHideSidebar && isCompactMode) {
|
||||
gZenUIManager.motion
|
||||
.animate(
|
||||
this.sidebar,
|
||||
this.sidebarIsOnRight
|
||||
? {
|
||||
marginRight: `-${sidebarWidth}px`,
|
||||
}
|
||||
: { marginLeft: `-${sidebarWidth}px` },
|
||||
{
|
||||
ease: 'easeIn',
|
||||
type: 'spring',
|
||||
bounce: 0,
|
||||
duration: 0.2,
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
window.requestAnimationFrame(() => {
|
||||
this.sidebar.style.transition = 'none';
|
||||
this.sidebar.removeAttribute('animate');
|
||||
this.sidebar.style.visibility = 'hidden';
|
||||
this.sidebar.style.removeProperty('margin-right');
|
||||
this.sidebar.style.removeProperty('margin-left');
|
||||
this.sidebar.style.removeProperty('transform');
|
||||
setTimeout(() => {
|
||||
this._animating = false;
|
||||
this.sidebar.style.removeProperty('visibility');
|
||||
this.sidebar.style.removeProperty('transition');
|
||||
this.sidebar.style.removeProperty('opacity');
|
||||
}, 300);
|
||||
});
|
||||
});
|
||||
} else if (canHideSidebar && !isCompactMode) {
|
||||
document.getElementById('browser').style.overflow = 'clip';
|
||||
if (this.sidebarIsOnRight) {
|
||||
this.sidebar.style.marginRight = `-${sidebarWidth}px`;
|
||||
} else {
|
||||
this.sidebar.style.marginLeft = `-${sidebarWidth}px`;
|
||||
}
|
||||
gZenUIManager.motion
|
||||
.animate(
|
||||
this.sidebar,
|
||||
this.sidebarIsOnRight
|
||||
? {
|
||||
marginRight: [`-${sidebarWidth}px`, 0],
|
||||
transform: ['translateX(100%)', 'translateX(0)'],
|
||||
}
|
||||
: { marginLeft: 0 },
|
||||
{
|
||||
ease: 'easeOut',
|
||||
type: 'spring',
|
||||
bounce: 0,
|
||||
duration: 0.2,
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
this.sidebar.removeAttribute('animate');
|
||||
document.getElementById('browser').style.removeProperty('overflow');
|
||||
this.sidebar.style.transition = 'none';
|
||||
this.sidebar.style.removeProperty('margin-right');
|
||||
this.sidebar.style.removeProperty('margin-left');
|
||||
this.sidebar.style.removeProperty('transform');
|
||||
this._animating = false;
|
||||
setTimeout(() => {
|
||||
this.sidebar.style.removeProperty('transition');
|
||||
});
|
||||
});
|
||||
} else {
|
||||
this.sidebar.removeAttribute('animate'); // remove the attribute if we are not animating
|
||||
this._animating = false;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
updateContextMenu() {
|
||||
document.getElementById('zen-context-menu-compact-mode-toggle').setAttribute('checked', this.preference);
|
||||
|
||||
const hideTabBar = Services.prefs.getBoolPref('zen.view.compact.hide-tabbar', false);
|
||||
const hideToolbar = Services.prefs.getBoolPref('zen.view.compact.hide-toolbar', false);
|
||||
const hideBoth = hideTabBar && hideToolbar;
|
||||
|
||||
const idName = 'zen-context-menu-compact-mode-hide-';
|
||||
document.getElementById(idName + 'sidebar').setAttribute('checked', !hideBoth && hideTabBar);
|
||||
document.getElementById(idName + 'toolbar').setAttribute('checked', !hideBoth && hideToolbar);
|
||||
document.getElementById(idName + 'both').setAttribute('checked', hideBoth);
|
||||
},
|
||||
|
||||
_removeOpenStateOnUnifiedExtensions() {
|
||||
// Fix for bug https://github.com/zen-browser/desktop/issues/1925
|
||||
const buttons = document.querySelectorAll('toolbarbutton:is(#unified-extensions-button, .webextension-browser-action)');
|
||||
for (let button of buttons) {
|
||||
button.removeAttribute('open');
|
||||
}
|
||||
},
|
||||
|
||||
toggle() {
|
||||
return (this.preference = !this.preference);
|
||||
},
|
||||
|
||||
_updateSidebarIsOnRight() {
|
||||
this._sidebarIsOnRight = Services.prefs.getBoolPref('zen.tabs.vertical.right-side');
|
||||
},
|
||||
|
||||
toggleSidebar() {
|
||||
this.sidebar.toggleAttribute('zen-user-show');
|
||||
},
|
||||
|
||||
get hideAfterHoverDuration() {
|
||||
if (this._hideAfterHoverDuration) {
|
||||
return this._hideAfterHoverDuration;
|
||||
}
|
||||
return Services.prefs.getIntPref('zen.view.compact.toolbar-hide-after-hover.duration');
|
||||
},
|
||||
|
||||
get hoverableElements() {
|
||||
if (typeof this._showSidebarAndToolbarOnHover === 'undefined') {
|
||||
this._showSidebarAndToolbarOnHover = Services.prefs.getBoolPref(
|
||||
'zen.view.compact.show-sidebar-and-toolbar-on-hover',
|
||||
true
|
||||
);
|
||||
}
|
||||
return [
|
||||
...(!this._showSidebarAndToolbarOnHover
|
||||
? []
|
||||
: [
|
||||
{
|
||||
element: this.sidebar,
|
||||
screenEdge: this.sidebarIsOnRight ? 'right' : 'left',
|
||||
keepHoverDuration: 100,
|
||||
},
|
||||
{
|
||||
element: document.getElementById('zen-appcontent-navbar-container'),
|
||||
screenEdge: 'top',
|
||||
},
|
||||
]),
|
||||
{
|
||||
element: gZenVerticalTabsManager.actualWindowButtons,
|
||||
},
|
||||
];
|
||||
},
|
||||
|
||||
flashSidebar(duration = lazyCompactMode.COMPACT_MODE_FLASH_DURATION) {
|
||||
let tabPanels = document.getElementById('tabbrowser-tabpanels');
|
||||
if (!tabPanels.matches("[zen-split-view='true']")) {
|
||||
this.flashElement(this.sidebar, duration, this.sidebar.id);
|
||||
}
|
||||
},
|
||||
|
||||
flashElement(element, duration, id, attrName = 'flash-popup') {
|
||||
//if (element.matches(':hover')) {
|
||||
// return;
|
||||
//}
|
||||
if (this._flashTimeouts[id]) {
|
||||
clearTimeout(this._flashTimeouts[id]);
|
||||
} else {
|
||||
requestAnimationFrame(() => element.setAttribute(attrName, 'true'));
|
||||
}
|
||||
this._flashTimeouts[id] = setTimeout(() => {
|
||||
window.requestAnimationFrame(() => {
|
||||
element.removeAttribute(attrName);
|
||||
this._flashTimeouts[id] = null;
|
||||
});
|
||||
}, duration);
|
||||
},
|
||||
|
||||
clearFlashTimeout(id) {
|
||||
clearTimeout(this._flashTimeouts[id]);
|
||||
this._flashTimeouts[id] = null;
|
||||
},
|
||||
|
||||
addMouseActions() {
|
||||
for (let i = 0; i < this.hoverableElements.length; i++) {
|
||||
let target = this.hoverableElements[i].element;
|
||||
const onEnter = (event) => {
|
||||
if (event.type === 'mouseenter' && !event.target.matches(':hover')) return;
|
||||
// Dont register the hover if the urlbar is floating and we are hovering over it
|
||||
if (event.target.querySelector('#urlbar[zen-floating-urlbar]')) return;
|
||||
this.clearFlashTimeout('has-hover' + target.id);
|
||||
window.requestAnimationFrame(() => target.setAttribute('zen-has-hover', 'true'));
|
||||
};
|
||||
|
||||
const onLeave = (event) => {
|
||||
if (AppConstants.platform == 'macosx') {
|
||||
const buttonRect = gZenVerticalTabsManager.actualWindowButtons.getBoundingClientRect();
|
||||
const MAC_WINDOW_BUTTONS_X_BORDER = buttonRect.width + buttonRect.x;
|
||||
const MAC_WINDOW_BUTTONS_Y_BORDER = buttonRect.height + buttonRect.y;
|
||||
if (
|
||||
event.clientX < MAC_WINDOW_BUTTONS_X_BORDER &&
|
||||
event.clientY < MAC_WINDOW_BUTTONS_Y_BORDER &&
|
||||
event.clientX > buttonRect.x &&
|
||||
event.clientY > buttonRect.y
|
||||
) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// When moving the cursor between the url bar and bookmarks, or in-between bookmarks in the bookmark bar, the
|
||||
// mouseLeave event is triggered without a relatedTarget.
|
||||
// TODO: Experiment with this for some time, see if people still have issues with the hover state
|
||||
//if (event.relatedTarget == null) {
|
||||
// return;
|
||||
//}
|
||||
|
||||
// If it's a child element but not the target, ignore the event
|
||||
if (target.contains(event.explicitOriginalTarget) && event.explicitOriginalTarget !== target) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.hoverableElements[i].keepHoverDuration && !event.target.querySelector('#urlbar[zen-floating-urlbar]')) {
|
||||
this.flashElement(target, this.hoverableElements[i].keepHoverDuration, 'has-hover' + target.id, 'zen-has-hover');
|
||||
} else {
|
||||
this._removeHoverFrames[target.id] = window.requestAnimationFrame(() => target.removeAttribute('zen-has-hover'));
|
||||
}
|
||||
};
|
||||
|
||||
target.addEventListener('mouseenter', onEnter);
|
||||
target.addEventListener('dragover', onEnter);
|
||||
|
||||
target.addEventListener('mouseleave', onLeave);
|
||||
target.addEventListener('dragleave', onLeave);
|
||||
}
|
||||
|
||||
document.documentElement.addEventListener('mouseleave', (event) => {
|
||||
const screenEdgeCrossed = this._getCrossedEdge(event.pageX, event.pageY);
|
||||
if (!screenEdgeCrossed) return;
|
||||
for (let entry of this.hoverableElements) {
|
||||
if (screenEdgeCrossed !== entry.screenEdge) continue;
|
||||
const target = entry.element;
|
||||
const boundAxis = entry.screenEdge === 'right' || entry.screenEdge === 'left' ? 'y' : 'x';
|
||||
if (!this._positionInBounds(boundAxis, target, event.pageX, event.pageY, 7)) {
|
||||
continue;
|
||||
}
|
||||
window.cancelAnimationFrame(this._removeHoverFrames[target.id]);
|
||||
|
||||
this.flashElement(target, this.hideAfterHoverDuration, 'has-hover' + target.id, 'zen-has-hover');
|
||||
document.addEventListener(
|
||||
'mousemove',
|
||||
() => {
|
||||
if (target.matches(':hover')) return;
|
||||
target.removeAttribute('zen-has-hover');
|
||||
this.clearFlashTimeout('has-hover' + target.id);
|
||||
},
|
||||
{ once: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
_getCrossedEdge(posX, posY, element = document.documentElement, maxDistance = 10) {
|
||||
const targetBox = element.getBoundingClientRect();
|
||||
posX = Math.max(targetBox.left, Math.min(posX, targetBox.right));
|
||||
posY = Math.max(targetBox.top, Math.min(posY, targetBox.bottom));
|
||||
return ['top', 'bottom', 'left', 'right'].find((edge, i) => {
|
||||
const distance = Math.abs((i < 2 ? posY : posX) - targetBox[edge]);
|
||||
return distance <= maxDistance;
|
||||
});
|
||||
},
|
||||
|
||||
_positionInBounds(axis = 'x', element, x, y, error = 0) {
|
||||
const bBox = element.getBoundingClientRect();
|
||||
if (axis === 'y') return bBox.top - error < y && y < bBox.bottom + error;
|
||||
else return bBox.left - error < x && x < bBox.right + error;
|
||||
},
|
||||
|
||||
toggleToolbar() {
|
||||
let toolbar = document.getElementById('zen-appcontent-navbar-container');
|
||||
toolbar.toggleAttribute('zen-user-show');
|
||||
},
|
||||
|
||||
_clearAllHoverStates() {
|
||||
// Clear hover attributes from all hoverable elements
|
||||
for (let entry of this.hoverableElements) {
|
||||
const target = entry.element;
|
||||
if (target && !target.matches(':hover') && target.hasAttribute('zen-has-hover')) {
|
||||
target.removeAttribute('zen-has-hover');
|
||||
this.clearFlashTimeout('has-hover' + target.id);
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -1,533 +0,0 @@
|
||||
class ZenMediaController {
|
||||
_currentMediaController = null;
|
||||
_currentBrowser = null;
|
||||
_mediaUpdateInterval = null;
|
||||
|
||||
mediaTitle = null;
|
||||
mediaArtist = null;
|
||||
mediaControlBar = null;
|
||||
mediaProgressBar = null;
|
||||
mediaCurrentTime = null;
|
||||
mediaDuration = null;
|
||||
mediaFocusButton = null;
|
||||
mediaProgressBarContainer = null;
|
||||
|
||||
supportedKeys = ['playpause', 'previoustrack', 'nexttrack'];
|
||||
|
||||
pipEligibilityMap = new Map();
|
||||
mediaControllersMap = new Map();
|
||||
|
||||
_tabTimeout = null;
|
||||
_controllerSwitchTimeout = null;
|
||||
|
||||
init() {
|
||||
if (!Services.prefs.getBoolPref('zen.mediacontrols.enabled', true)) return;
|
||||
|
||||
this.mediaTitle = document.querySelector('#zen-media-title');
|
||||
this.mediaArtist = document.querySelector('#zen-media-artist');
|
||||
this.mediaControlBar = document.querySelector('#zen-media-controls-toolbar');
|
||||
this.mediaProgressBar = document.querySelector('#zen-media-progress-bar');
|
||||
this.mediaCurrentTime = document.querySelector('#zen-media-current-time');
|
||||
this.mediaDuration = document.querySelector('#zen-media-duration');
|
||||
this.mediaFocusButton = document.querySelector('#zen-media-focus-button');
|
||||
this.mediaProgressBarContainer = document.querySelector('#zen-media-progress-hbox');
|
||||
|
||||
this.onPositionstateChange = this._onPositionstateChange.bind(this);
|
||||
this.onPlaybackstateChange = this._onPlaybackstateChange.bind(this);
|
||||
this.onSupportedKeysChange = this._onSupportedKeysChange.bind(this);
|
||||
this.onMetadataChange = this._onMetadataChange.bind(this);
|
||||
this.onDeactivated = this._onDeactivated.bind(this);
|
||||
this.onPipModeChange = this._onPictureInPictureModeChange.bind(this);
|
||||
|
||||
this.#initEventListeners();
|
||||
}
|
||||
|
||||
#initEventListeners() {
|
||||
this.mediaControlBar.addEventListener('command', (event) => {
|
||||
const button = event.target.closest('toolbarbutton');
|
||||
if (!button) return;
|
||||
switch (button.id) {
|
||||
case 'zen-media-pip-button':
|
||||
this.onMediaPip();
|
||||
break;
|
||||
case 'zen-media-close-button':
|
||||
this.onControllerClose();
|
||||
break;
|
||||
case 'zen-media-focus-button':
|
||||
this.onMediaFocus();
|
||||
break;
|
||||
case 'zen-media-mute-button':
|
||||
this.onMediaMute();
|
||||
break;
|
||||
case 'zen-media-previoustrack-button':
|
||||
this.onMediaPlayPrev();
|
||||
break;
|
||||
case 'zen-media-nexttrack-button':
|
||||
this.onMediaPlayNext();
|
||||
break;
|
||||
case 'zen-media-playpause-button':
|
||||
this.onMediaToggle();
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
this.mediaProgressBar.addEventListener('input', this.onMediaSeekDrag.bind(this));
|
||||
this.mediaProgressBar.addEventListener('change', this.onMediaSeekComplete.bind(this));
|
||||
|
||||
window.addEventListener('TabSelect', (event) => {
|
||||
const linkedBrowser = event.target.linkedBrowser;
|
||||
this.switchController();
|
||||
|
||||
if (this._currentBrowser) {
|
||||
if (linkedBrowser.browserId === this._currentBrowser.browserId) {
|
||||
if (this._tabTimeout) {
|
||||
clearTimeout(this._tabTimeout);
|
||||
this._tabTimeout = null;
|
||||
}
|
||||
|
||||
this.hideMediaControls();
|
||||
} else {
|
||||
this._tabTimeout = setTimeout(() => {
|
||||
if (!this.mediaControlBar.hasAttribute('pip')) this.showMediaControls();
|
||||
else this._tabTimeout = null;
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const onTabDiscardedOrClosed = this.onTabDiscardedOrClosed.bind(this);
|
||||
window.addEventListener('TabClose', onTabDiscardedOrClosed);
|
||||
|
||||
window.addEventListener('DOMAudioPlaybackStarted', (event) => {
|
||||
setTimeout(() => {
|
||||
if (
|
||||
this._currentMediaController?.isPlaying &&
|
||||
this.mediaControlBar.hasAttribute('hidden') &&
|
||||
!this.mediaControlBar.hasAttribute('pip')
|
||||
) {
|
||||
const { selectedBrowser } = gBrowser;
|
||||
if (selectedBrowser.browserId !== this._currentBrowser.browserId) {
|
||||
this.showMediaControls();
|
||||
}
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
this.activateMediaControls(event.target.browsingContext.mediaController, event.target);
|
||||
});
|
||||
|
||||
window.addEventListener('DOMAudioPlaybackStopped', () => this.updateMuteState());
|
||||
}
|
||||
|
||||
onTabDiscardedOrClosed(event) {
|
||||
const linkedBrowser = event.target.linkedBrowser;
|
||||
if (!linkedBrowser?.browsingContext?.mediaController) return;
|
||||
this.deinitMediaController(
|
||||
linkedBrowser.browsingContext.mediaController,
|
||||
true,
|
||||
linkedBrowser.browserId === this._currentBrowser?.browserId,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
async deinitMediaController(mediaController, shouldForget = true, shouldOverride = true, shouldHide = true) {
|
||||
if (!mediaController) return;
|
||||
|
||||
const retrievedMediaController = this.mediaControllersMap.get(mediaController.id);
|
||||
|
||||
if (shouldForget) {
|
||||
mediaController.removeEventListener('pictureinpicturemodechange', this.onPipModeChange);
|
||||
mediaController.removeEventListener('positionstatechange', this.onPositionstateChange);
|
||||
mediaController.removeEventListener('playbackstatechange', this.onPlaybackstateChange);
|
||||
mediaController.removeEventListener('supportedkeyschange', this.onSupportedKeysChange);
|
||||
mediaController.removeEventListener('metadatachange', this.onMetadataChange);
|
||||
mediaController.removeEventListener('deactivated', this.onDeactivated);
|
||||
|
||||
this.mediaControllersMap.delete(mediaController.id);
|
||||
this.pipEligibilityMap.delete(retrievedMediaController?.browser?.browserId);
|
||||
}
|
||||
|
||||
if (shouldOverride) {
|
||||
this._currentMediaController = null;
|
||||
this._currentBrowser = null;
|
||||
|
||||
if (this._mediaUpdateInterval) {
|
||||
clearInterval(this._mediaUpdateInterval);
|
||||
this._mediaUpdateInterval = null;
|
||||
}
|
||||
|
||||
if (shouldHide) await this.hideMediaControls();
|
||||
this.mediaControlBar.removeAttribute('muted');
|
||||
this.mediaControlBar.classList.remove('playing');
|
||||
}
|
||||
}
|
||||
|
||||
hideMediaControls() {
|
||||
if (this.mediaControlBar.hasAttribute('hidden')) return;
|
||||
|
||||
return gZenUIManager.motion
|
||||
.animate(
|
||||
this.mediaControlBar,
|
||||
{
|
||||
opacity: [1, 0],
|
||||
y: [0, 10],
|
||||
},
|
||||
{
|
||||
duration: 0.1,
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
this.mediaControlBar.setAttribute('hidden', 'true');
|
||||
gZenUIManager.updateTabsToolbar();
|
||||
gZenUIManager.restoreScrollbarState();
|
||||
});
|
||||
}
|
||||
|
||||
showMediaControls() {
|
||||
if (!this._currentMediaController) return;
|
||||
|
||||
if (this._currentMediaController.isBeingUsedInPIPModeOrFullscreen) return this.hideMediaControls();
|
||||
if (!this.mediaControlBar.hasAttribute('hidden')) return;
|
||||
|
||||
this.updatePipButton();
|
||||
const mediaInfoElements = [this.mediaTitle, this.mediaArtist];
|
||||
for (const element of mediaInfoElements) {
|
||||
element.removeAttribute('overflow'); // So we can properly recalculate the overflow
|
||||
}
|
||||
|
||||
this.mediaControlBar.removeAttribute('hidden');
|
||||
window.requestAnimationFrame(() => {
|
||||
this.mediaControlBar.style.height =
|
||||
this.mediaControlBar.querySelector('toolbaritem').getBoundingClientRect().height + 'px';
|
||||
this.mediaControlBar.style.opacity = 0;
|
||||
gZenUIManager.updateTabsToolbar();
|
||||
gZenUIManager.restoreScrollbarState();
|
||||
gZenUIManager.motion.animate(
|
||||
this.mediaControlBar,
|
||||
{
|
||||
opacity: [0, 1],
|
||||
y: [10, 0],
|
||||
},
|
||||
{}
|
||||
);
|
||||
this.addLabelOverflows(mediaInfoElements);
|
||||
});
|
||||
}
|
||||
|
||||
addLabelOverflows(elements) {
|
||||
for (const element of elements) {
|
||||
const parent = element.parentElement;
|
||||
if (element.scrollWidth > parent.clientWidth) {
|
||||
element.setAttribute('overflow', '');
|
||||
} else {
|
||||
element.removeAttribute('overflow');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setupMediaController(mediaController, browser) {
|
||||
this._currentMediaController = mediaController;
|
||||
this._currentBrowser = browser;
|
||||
|
||||
this.updatePipButton();
|
||||
}
|
||||
|
||||
setupMediaControlUI(metadata, positionState) {
|
||||
this.updatePipButton();
|
||||
|
||||
if (!this.mediaControlBar.classList.contains('playing') && this._currentMediaController.isPlaying) {
|
||||
this.mediaControlBar.classList.add('playing');
|
||||
}
|
||||
|
||||
const iconURL = this._currentBrowser.mIconURL || `page-icon:${this._currentBrowser.currentURI.spec}`;
|
||||
this.mediaFocusButton.style.listStyleImage = `url(${iconURL})`;
|
||||
|
||||
this.mediaTitle.textContent = metadata.title || '';
|
||||
this.mediaArtist.textContent = metadata.artist || '';
|
||||
|
||||
gZenUIManager.updateTabsToolbar();
|
||||
gZenUIManager.restoreScrollbarState();
|
||||
|
||||
this._currentPosition = positionState.position;
|
||||
this._currentDuration = positionState.duration;
|
||||
this._currentPlaybackRate = positionState.playbackRate;
|
||||
|
||||
this.updateMediaPosition();
|
||||
|
||||
for (const key of this.supportedKeys) {
|
||||
const button = this.mediaControlBar.querySelector(`#zen-media-${key}-button`);
|
||||
button.disabled = !this._currentMediaController.supportedKeys.includes(key);
|
||||
}
|
||||
}
|
||||
|
||||
activateMediaControls(mediaController, browser) {
|
||||
this.updateMuteState();
|
||||
this.switchController();
|
||||
|
||||
if (!mediaController.isActive || this._currentBrowser?.browserId === browser.browserId) return;
|
||||
|
||||
const metadata = mediaController.getMetadata();
|
||||
const positionState = mediaController.getPositionState();
|
||||
this.mediaControllersMap.set(mediaController.id, {
|
||||
controller: mediaController,
|
||||
browser,
|
||||
position: positionState.position,
|
||||
duration: positionState.duration,
|
||||
playbackRate: positionState.playbackRate,
|
||||
lastUpdated: Date.now(),
|
||||
});
|
||||
|
||||
if (!this._currentBrowser) {
|
||||
this.setupMediaController(mediaController, browser);
|
||||
this.setupMediaControlUI(metadata, positionState);
|
||||
}
|
||||
|
||||
mediaController.addEventListener('pictureinpicturemodechange', this.onPipModeChange);
|
||||
mediaController.addEventListener('positionstatechange', this.onPositionstateChange);
|
||||
mediaController.addEventListener('playbackstatechange', this.onPlaybackstateChange);
|
||||
mediaController.addEventListener('supportedkeyschange', this.onSupportedKeysChange);
|
||||
mediaController.addEventListener('metadatachange', this.onMetadataChange);
|
||||
mediaController.addEventListener('deactivated', this.onDeactivated);
|
||||
}
|
||||
|
||||
updatePipEligibility(browser, isEligible) {
|
||||
this.pipEligibilityMap.set(browser.browserId, isEligible);
|
||||
}
|
||||
|
||||
_onDeactivated(event) {
|
||||
this.deinitMediaController(event.target, true, event.target.id === this._currentMediaController.id, true);
|
||||
this.switchController();
|
||||
}
|
||||
|
||||
_onPlaybackstateChange() {
|
||||
if (this._currentMediaController?.isPlaying) {
|
||||
this.mediaControlBar.classList.add('playing');
|
||||
} else {
|
||||
this.switchController();
|
||||
this.mediaControlBar.classList.remove('playing');
|
||||
}
|
||||
}
|
||||
|
||||
_onSupportedKeysChange(event) {
|
||||
if (event.target.id !== this._currentMediaController?.id) return;
|
||||
for (const key of this.supportedKeys) {
|
||||
const button = this.mediaControlBar.querySelector(`#zen-media-${key}-button`);
|
||||
button.disabled = !event.target.supportedKeys.includes(key);
|
||||
}
|
||||
}
|
||||
|
||||
_onPositionstateChange(event) {
|
||||
const mediaController = this.mediaControllersMap.get(event.target.id);
|
||||
this.mediaControllersMap.set(event.target.id, {
|
||||
...mediaController,
|
||||
position: event.position,
|
||||
duration: event.duration,
|
||||
playbackRate: event.playbackRate,
|
||||
lastUpdated: Date.now(),
|
||||
});
|
||||
|
||||
if (event.target.id !== this._currentMediaController?.id) return;
|
||||
|
||||
this._currentPosition = event.position;
|
||||
this._currentDuration = event.duration;
|
||||
this._currentPlaybackRate = event.playbackRate;
|
||||
|
||||
this.updateMediaPosition();
|
||||
}
|
||||
|
||||
switchController(force = false) {
|
||||
let timeout = 3000;
|
||||
|
||||
if (this._controllerSwitchTimeout) {
|
||||
clearTimeout(this._controllerSwitchTimeout);
|
||||
this._controllerSwitchTimeout = null;
|
||||
}
|
||||
|
||||
if (this.mediaControllersMap.size === 1) timeout = 0;
|
||||
this._controllerSwitchTimeout = setTimeout(() => {
|
||||
if (!this._currentMediaController?.isPlaying || force) {
|
||||
const nextController = Array.from(this.mediaControllersMap.values())
|
||||
.filter(
|
||||
(ctrl) =>
|
||||
ctrl.controller.isPlaying &&
|
||||
gBrowser.selectedBrowser.browserId !== ctrl.browser.browserId &&
|
||||
ctrl.controller.id !== this._currentMediaController?.id
|
||||
)
|
||||
.sort((a, b) => b.lastUpdated - a.lastUpdated)
|
||||
.shift();
|
||||
|
||||
if (nextController) {
|
||||
this.deinitMediaController(this._currentMediaController, false, true).then(() => {
|
||||
this.setupMediaController(nextController.controller, nextController.browser);
|
||||
const elapsedTime = Math.floor((Date.now() - nextController.lastUpdated) / 1000);
|
||||
|
||||
this.setupMediaControlUI(nextController.controller.getMetadata(), {
|
||||
position: nextController.position + (nextController.controller.isPlaying ? elapsedTime : 0),
|
||||
duration: nextController.duration,
|
||||
playbackRate: nextController.playbackRate,
|
||||
});
|
||||
|
||||
this.showMediaControls();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
this._controllerSwitchTimeout = null;
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
updateMediaPosition() {
|
||||
if (this._mediaUpdateInterval) {
|
||||
clearInterval(this._mediaUpdateInterval);
|
||||
this._mediaUpdateInterval = null;
|
||||
}
|
||||
|
||||
if (this._currentDuration >= 900_000) return this.mediaControlBar.setAttribute('media-position-hidden', 'true');
|
||||
else this.mediaControlBar.removeAttribute('media-position-hidden');
|
||||
|
||||
if (!this._currentDuration) return;
|
||||
|
||||
this.mediaCurrentTime.textContent = this.formatSecondsToTime(this._currentPosition);
|
||||
this.mediaDuration.textContent = this.formatSecondsToTime(this._currentDuration);
|
||||
this.mediaProgressBar.value = (this._currentPosition / this._currentDuration) * 100;
|
||||
|
||||
this._mediaUpdateInterval = setInterval(() => {
|
||||
if (this._currentMediaController?.isPlaying) {
|
||||
this._currentPosition += 1 * this._currentPlaybackRate;
|
||||
if (this._currentPosition > this._currentDuration) {
|
||||
this._currentPosition = this._currentDuration;
|
||||
}
|
||||
this.mediaCurrentTime.textContent = this.formatSecondsToTime(this._currentPosition);
|
||||
this.mediaProgressBar.value = (this._currentPosition / this._currentDuration) * 100;
|
||||
} else {
|
||||
clearInterval(this._mediaUpdateInterval);
|
||||
this._mediaUpdateInterval = null;
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
formatSecondsToTime(seconds) {
|
||||
if (!seconds || isNaN(seconds)) return '0:00';
|
||||
|
||||
const totalSeconds = Math.max(0, Math.ceil(seconds));
|
||||
const hours = Math.floor(totalSeconds / 3600);
|
||||
const minutes = Math.floor((totalSeconds % 3600) / 60).toString();
|
||||
const secs = (totalSeconds % 60).toString();
|
||||
|
||||
if (hours > 0) {
|
||||
return `${hours}:${minutes.padStart(2, '0')}:${secs.padStart(2, '0')}`;
|
||||
}
|
||||
|
||||
return `${minutes}:${secs.padStart(2, '0')}`;
|
||||
}
|
||||
|
||||
_onMetadataChange(event) {
|
||||
if (event.target.id !== this._currentMediaController?.id) return;
|
||||
this.updatePipButton();
|
||||
|
||||
const metadata = event.target.getMetadata();
|
||||
this.mediaTitle.textContent = metadata.title || '';
|
||||
this.mediaArtist.textContent = metadata.artist || '';
|
||||
|
||||
const mediaInfoElements = [this.mediaTitle, this.mediaArtist];
|
||||
for (const element of mediaInfoElements) {
|
||||
element.removeAttribute('overflow');
|
||||
}
|
||||
|
||||
this.addLabelOverflows(mediaInfoElements);
|
||||
}
|
||||
|
||||
_onPictureInPictureModeChange(event) {
|
||||
if (event.target.id !== this._currentMediaController?.id) return;
|
||||
if (event.target.isBeingUsedInPIPModeOrFullscreen) {
|
||||
this.hideMediaControls();
|
||||
this.mediaControlBar.setAttribute('pip', '');
|
||||
} else {
|
||||
const { selectedBrowser } = gBrowser;
|
||||
if (selectedBrowser.browserId !== this._currentBrowser.browserId) {
|
||||
this.showMediaControls();
|
||||
}
|
||||
|
||||
this.mediaControlBar.removeAttribute('pip');
|
||||
}
|
||||
}
|
||||
|
||||
onMediaPlayPrev() {
|
||||
if (this._currentMediaController?.supportedKeys.includes('previoustrack')) {
|
||||
this._currentMediaController.prevTrack();
|
||||
}
|
||||
}
|
||||
|
||||
onMediaPlayNext() {
|
||||
if (this._currentMediaController?.supportedKeys.includes('nexttrack')) {
|
||||
this._currentMediaController.nextTrack();
|
||||
}
|
||||
}
|
||||
|
||||
onMediaSeekDrag(event) {
|
||||
this._currentMediaController?.pause();
|
||||
const newTime = (event.target.value / 100) * this._currentDuration;
|
||||
this.mediaCurrentTime.textContent = this.formatSecondsToTime(newTime);
|
||||
}
|
||||
|
||||
onMediaSeekComplete(event) {
|
||||
const newPosition = (event.target.value / 100) * this._currentDuration;
|
||||
if (this._currentMediaController?.supportedKeys.includes('seekto')) {
|
||||
this._currentMediaController.seekTo(newPosition);
|
||||
this._currentMediaController.play();
|
||||
}
|
||||
}
|
||||
|
||||
onMediaFocus() {
|
||||
if (!this._currentBrowser) return;
|
||||
this._currentMediaController?.focus();
|
||||
}
|
||||
|
||||
onMediaMute() {
|
||||
if (!this.mediaControlBar.hasAttribute('muted')) {
|
||||
this._currentBrowser.mute();
|
||||
this.mediaControlBar.setAttribute('muted', '');
|
||||
} else {
|
||||
this._currentBrowser.unmute();
|
||||
this.mediaControlBar.removeAttribute('muted');
|
||||
}
|
||||
}
|
||||
|
||||
onMediaToggle() {
|
||||
if (this.mediaControlBar.classList.contains('playing')) {
|
||||
this._currentMediaController?.pause();
|
||||
} else {
|
||||
this._currentMediaController?.play();
|
||||
}
|
||||
}
|
||||
|
||||
onControllerClose() {
|
||||
this._currentMediaController?.pause();
|
||||
this.switchController(true);
|
||||
this.deinitMediaController(this._currentMediaController);
|
||||
}
|
||||
|
||||
onMediaPip() {
|
||||
this._currentBrowser.browsingContext.currentWindowGlobal
|
||||
.getActor('PictureInPictureLauncher')
|
||||
.sendAsyncMessage('PictureInPicture:KeyToggle');
|
||||
}
|
||||
|
||||
updateMuteState() {
|
||||
if (!this._currentBrowser) return;
|
||||
if (this._currentBrowser._audioMuted) {
|
||||
this.mediaControlBar.setAttribute('muted', '');
|
||||
} else {
|
||||
this.mediaControlBar.removeAttribute('muted');
|
||||
}
|
||||
}
|
||||
|
||||
updatePipButton() {
|
||||
if (!this._currentBrowser) return;
|
||||
|
||||
const isPipEligible = this.pipEligibilityMap.get(this._currentBrowser.browserId);
|
||||
if (isPipEligible) this.mediaControlBar.setAttribute('can-pip', '');
|
||||
else this.mediaControlBar.removeAttribute('can-pip');
|
||||
}
|
||||
}
|
||||
|
||||
window.gZenMediaController = new ZenMediaController();
|
||||
@@ -1,428 +0,0 @@
|
||||
{
|
||||
const ZEN_RICE_API = Services.prefs.getStringPref('zen.rice.api.url', '');
|
||||
|
||||
class ZenRiceCollector {
|
||||
constructor() {}
|
||||
|
||||
clear() {
|
||||
this._userChrome = null;
|
||||
this._userContent = null;
|
||||
this._enabledMods = null;
|
||||
this._preferences = null;
|
||||
this._workspaceThemes = null;
|
||||
}
|
||||
|
||||
async gatherAll({
|
||||
userUserChrome = true,
|
||||
userContent = true,
|
||||
enabledMods = true,
|
||||
preferences = true,
|
||||
modPrefs = true,
|
||||
workspaceThemes = true,
|
||||
} = {}) {
|
||||
this.clear();
|
||||
// Get the mods first, as they may be needed for the preferences
|
||||
if (enabledMods) {
|
||||
await this.gatherEnabledMods();
|
||||
}
|
||||
await Promise.all([
|
||||
userUserChrome && this.gatherUserChrome(),
|
||||
userContent && this.gatherUserContent(),
|
||||
preferences && this.gatherPreferences({ modPrefs }),
|
||||
workspaceThemes && this.gatherWorkspaceThemes(),
|
||||
]);
|
||||
}
|
||||
|
||||
get profileDir() {
|
||||
return PathUtils.profileDir;
|
||||
}
|
||||
|
||||
async gatherUserChrome() {
|
||||
try {
|
||||
const path = PathUtils.join(this.profileDir, 'chrome', 'userChrome.css');
|
||||
this._userChrome = await IOUtils.readUTF8(path);
|
||||
} catch (e) {
|
||||
console.warn('[ZenRiceCollector]: Error reading userChrome.css: ', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async gatherUserContent() {
|
||||
try {
|
||||
const path = PathUtils.join(this.profileDir, 'chrome', 'userContent.css');
|
||||
this._userContent = await IOUtils.readUTF8(path);
|
||||
} catch (e) {
|
||||
console.warn('[ZenRiceCollector]: Error reading userContent.css: ', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async gatherEnabledMods() {
|
||||
const activeThemes = await gZenThemesImporter.getEnabledThemes();
|
||||
if (activeThemes.length === 0) {
|
||||
return;
|
||||
}
|
||||
this._enabledMods = activeThemes;
|
||||
}
|
||||
|
||||
_getThemePrefValue(theme, pref) {
|
||||
if (pref.type === 'checkbox') {
|
||||
return Services.prefs.getBoolPref(pref.property);
|
||||
}
|
||||
return Services.prefs.getStringPref(pref.property);
|
||||
}
|
||||
|
||||
async gatherPreferences({ modPrefs = true } = {}) {
|
||||
this._preferences = {};
|
||||
if (modPrefs && this._enabledMods) {
|
||||
for (const theme of this._enabledMods) {
|
||||
const prefs = await ZenThemesCommon.getThemePreferences(theme);
|
||||
for (const pref of prefs) {
|
||||
this._preferences[pref.property] = this._getThemePrefValue(theme, pref);
|
||||
}
|
||||
}
|
||||
}
|
||||
const boolPrefsToCollect = [
|
||||
'zen.view.use-single-toolbar',
|
||||
'zen.view.sidebar-expanded',
|
||||
'zen.tabs.vertical.right-side',
|
||||
'zen.view.experimental-no-window-controls',
|
||||
'zen.view.hide-window-controls',
|
||||
...(gZenOperatingSystemCommonUtils.currentOperatingSystem === 'windows' ? ['widget.windows.mica'] : []),
|
||||
...(gZenOperatingSystemCommonUtils.currentOperatingSystem === 'macos'
|
||||
? ['widget.macos.titlebar-blend-mode.behind-window']
|
||||
: []),
|
||||
];
|
||||
const stringPrefsToCollect = ['browser.uiCustomization.state'];
|
||||
for (const pref of boolPrefsToCollect) {
|
||||
this._preferences[pref] = Services.prefs.getBoolPref(pref);
|
||||
}
|
||||
for (const pref of stringPrefsToCollect) {
|
||||
this._preferences[pref] = Services.prefs.getStringPref(pref);
|
||||
}
|
||||
}
|
||||
|
||||
async gatherWorkspaceThemes() {
|
||||
const workspaces = (await ZenWorkspaces._workspaces()).workspaces;
|
||||
this._workspaceThemes = workspaces.map((w) => w.theme);
|
||||
}
|
||||
|
||||
async packRice(...args) {
|
||||
await this.gatherAll(...args);
|
||||
const rice = {
|
||||
userChrome: this._userChrome,
|
||||
userContent: this._userContent,
|
||||
enabledMods: this._enabledMods?.map((t) => t.id),
|
||||
preferences: this._preferences,
|
||||
workspaceThemes: this._workspaceThemes,
|
||||
};
|
||||
return rice;
|
||||
}
|
||||
}
|
||||
|
||||
class ZenRiceManager {
|
||||
constructor() {
|
||||
this._collector = new ZenRiceCollector();
|
||||
}
|
||||
|
||||
init() {}
|
||||
|
||||
get conffettiWrapper() {
|
||||
if (!this.confetti) {
|
||||
Services.scriptloader.loadSubScript('chrome://browser/content/zen-vendor/tsparticles.confetti.bundle.min.js', this);
|
||||
}
|
||||
return this.confetti;
|
||||
}
|
||||
|
||||
async packRice() {
|
||||
return await this._collector.packRice();
|
||||
}
|
||||
|
||||
get shareDialog() {
|
||||
if (this._shareDialog) {
|
||||
return this._shareDialog;
|
||||
}
|
||||
this._shareDialog = window.MozXULElement.parseXULToFragment(`
|
||||
<vbox id="zen-rice-share-dialog-overlay" hidden="true">
|
||||
<vbox id="zen-rice-share-dialog-notice">
|
||||
<h1 data-l10n-id="zen-rice-share-notice" />
|
||||
<p data-l10n-id="zen-rice-share-notice-description" />
|
||||
<html:moz-button-group class="panel-footer">
|
||||
<html:a href="https://docs.zen-browser.app/guides/" target="_blank" data-l10n-id="zen-learn-more-text" onclick="gZenThemePicker.riceManager.openLink(event)" />
|
||||
<button onclick="gZenThemePicker.riceManager.acceptNotice()" class="footer-button" data-l10n-id="zen-rice-share-accept" slot="primary" default="true" />
|
||||
</html:moz-button-group>
|
||||
</vbox>
|
||||
<vbox id="zen-rice-share-dialog" hidden="true">
|
||||
<html:img src="chrome://browser/content/zen-images/brand-header.svg" class="zen-rice-share-header" />
|
||||
<hbox class="zen-rice-share-content">
|
||||
<vbox id="zen-rice-share-first-form">
|
||||
<html:input type="text" data-l10n-id="zen-rice-share-name" id="zen-rice-share-name" oninput="gZenThemePicker.riceManager.validateShareDialog()" />
|
||||
<hbox class="zen-rice-share-author">
|
||||
<label data-l10n-id="zen-rice-share-author" />
|
||||
<html:input type="text" data-l10n-id="zen-rice-share-author-input" id="zen-rice-share-author" oninput="gZenThemePicker.riceManager.validateShareDialog();" />
|
||||
</hbox>
|
||||
<vbox zen-collapsed="true" id="zen-rice-share-options" onclick="gZenThemePicker.riceManager.toggleOptions(event)">
|
||||
<hbox class="options-header">
|
||||
<label data-l10n-id="zen-rice-share-include" />
|
||||
<image></image>
|
||||
</hbox>
|
||||
<checkbox data-l10n-id="zen-rice-share-include-userchrome" id="zen-rice-share-include-userchrome" />
|
||||
<checkbox data-l10n-id="zen-rice-share-include-usercontent" id="zen-rice-share-include-usercontent" />
|
||||
<checkbox data-l10n-id="zen-rice-share-include-mods" id="zen-rice-share-include-mods" />
|
||||
<vbox class="indent">
|
||||
<checkbox data-l10n-id="zen-rice-share-include-mod-prefs" id="zen-rice-share-include-mod-prefs" />
|
||||
</vbox>
|
||||
<checkbox data-l10n-id="zen-rice-share-include-preferences" id="zen-rice-share-include-preferences" />
|
||||
<checkbox data-l10n-id="zen-rice-share-include-workspace-themes" id="zen-rice-share-include-workspace-themes" />
|
||||
</vbox>
|
||||
<html:moz-button-group class="panel-footer">
|
||||
<button onclick="gZenThemePicker.riceManager.cancel()" class="footer-button" data-l10n-id="zen-general-cancel" />
|
||||
<button onclick="gZenThemePicker.riceManager.submit()" class="footer-button" data-l10n-id="zen-rice-share-save" default="true" slot="primary" id="zen-rice-share-save" disabled="true" />
|
||||
</html:moz-button-group>
|
||||
</vbox>
|
||||
<vbox id="zen-rice-share-second-form" hidden="true">
|
||||
<hbox></hbox>
|
||||
<vbox id="zen-rice-share-error" hidden="true">
|
||||
<label data-l10n-id="zen-rice-share-error" />
|
||||
<button onclick="gZenThemePicker.riceManager.resetShareDialog()" data-l10n-id="zen-close-label" class="footer-button" />
|
||||
</vbox>
|
||||
</vbox>
|
||||
<vbox id="zen-rice-share-success" hidden="true">
|
||||
<h1 data-l10n-id="zen-rice-share-success" />
|
||||
<p data-l10n-id="zen-rice-share-succes-details" />
|
||||
<label data-l10n-id="zen-rice-share-success-link" />
|
||||
<html:input type="text" readonly="true" id="zen-rice-share-success-link" onclick="this.select()" />
|
||||
<html:moz-button-group class="panel-footer">
|
||||
<button onclick="gZenThemePicker.riceManager.resetShareDialog()" data-l10n-id="zen-close-label" class="footer-button" slot="primary" default="true" />
|
||||
</html:moz-button-group>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</vbox>
|
||||
`);
|
||||
document.getElementById('zen-main-app-wrapper').appendChild(this._shareDialog);
|
||||
this._shareDialog = document.getElementById('zen-rice-share-dialog-overlay');
|
||||
return this._shareDialog;
|
||||
}
|
||||
|
||||
get hasAcceptedNotice() {
|
||||
return Services.prefs.getBoolPref('zen.rice.share.notice.accepted', false);
|
||||
}
|
||||
|
||||
set hasAcceptedNotice(value) {
|
||||
Services.prefs.setBoolPref('zen.rice.share.notice.accepted', value);
|
||||
}
|
||||
|
||||
openLink(event) {
|
||||
event.stopPropagation();
|
||||
this.cancel();
|
||||
gZenUIManager.openAndChangeToTab('https://docs.zen-browser.app/guides/');
|
||||
}
|
||||
|
||||
acceptNotice() {
|
||||
this.hasAcceptedNotice = true;
|
||||
const notice = document.getElementById('zen-rice-share-dialog-notice');
|
||||
notice.setAttribute('hidden', 'true');
|
||||
this.openShareDialog();
|
||||
}
|
||||
|
||||
toggleOptions(event) {
|
||||
if (event.originalTarget.closest('.options-header')) {
|
||||
const options = document.getElementById('zen-rice-share-options');
|
||||
options.setAttribute('zen-collapsed', options.getAttribute('zen-collapsed') === 'true' ? 'false' : 'true');
|
||||
}
|
||||
this.validateShareDialog();
|
||||
}
|
||||
|
||||
openShareDialog() {
|
||||
window.docShell.treeOwner.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIAppWindow).rollupAllPopups();
|
||||
const dialog = this.shareDialog;
|
||||
dialog.removeAttribute('hidden');
|
||||
|
||||
if (!this.hasAcceptedNotice) {
|
||||
const notice = document.getElementById('zen-rice-share-dialog-notice');
|
||||
notice.removeAttribute('hidden');
|
||||
return;
|
||||
}
|
||||
|
||||
document.getElementById('zen-rice-share-dialog').removeAttribute('hidden');
|
||||
document.getElementById('zen-rice-share-dialog-notice').setAttribute('hidden', 'true');
|
||||
document.getElementById('zen-rice-share-name').focus();
|
||||
|
||||
// Initialize the dialog with the current values
|
||||
this.validateShareDialog();
|
||||
}
|
||||
|
||||
resetShareDialog() {
|
||||
const dialog = this.shareDialog;
|
||||
dialog.setAttribute('hidden', 'true');
|
||||
document.getElementById('zen-rice-share-dialog').removeAttribute('animate');
|
||||
document.getElementById('zen-rice-share-name').value = '';
|
||||
document.getElementById('zen-rice-share-author').value = '';
|
||||
document.getElementById('zen-rice-share-save').disabled = true;
|
||||
document.getElementById('zen-rice-share-first-form').removeAttribute('fade-out');
|
||||
document.getElementById('zen-rice-share-second-form').setAttribute('hidden', 'true');
|
||||
document.getElementById('zen-rice-share-second-form').removeAttribute('fade-out');
|
||||
document.getElementById('zen-rice-share-error').setAttribute('hidden', 'true');
|
||||
document.getElementById('zen-rice-share-success').setAttribute('hidden', 'true');
|
||||
document.getElementById('zen-rice-share-options').setAttribute('zen-collapsed', 'true');
|
||||
|
||||
// Remove confetti module from memory
|
||||
this.confetti = null;
|
||||
}
|
||||
|
||||
cancel() {
|
||||
this.resetShareDialog();
|
||||
}
|
||||
|
||||
getAllowedRice() {
|
||||
return {
|
||||
userChrome: document.getElementById('zen-rice-share-include-userchrome').checked,
|
||||
userContent: document.getElementById('zen-rice-share-include-usercontent').checked,
|
||||
mods: document.getElementById('zen-rice-share-include-mods').checked,
|
||||
modPrefs: document.getElementById('zen-rice-share-include-mod-prefs').checked,
|
||||
preferences: document.getElementById('zen-rice-share-include-preferences').checked,
|
||||
workspaceThemes: document.getElementById('zen-rice-share-include-workspace-themes').checked,
|
||||
};
|
||||
}
|
||||
|
||||
get userAgent() {
|
||||
return `ZenBrowser/${Services.appinfo.version} (${gZenOperatingSystemCommonUtils.currentOperatingSystem})`;
|
||||
}
|
||||
|
||||
canShareRice() {
|
||||
const allowedRice = this.getAllowedRice();
|
||||
const modsPrefs = document.getElementById('zen-rice-share-include-mod-prefs');
|
||||
// remove "share mod prefs" if mods are not included
|
||||
if (!allowedRice.mods) {
|
||||
allowedRice.modPrefs = false;
|
||||
modsPrefs.disabled = true;
|
||||
}
|
||||
modsPrefs.disabled = !allowedRice.mods;
|
||||
return Object.values(allowedRice).some((v) => v);
|
||||
}
|
||||
|
||||
validateShareDialog() {
|
||||
const saveButton = document.getElementById('zen-rice-share-save');
|
||||
const authorInput = document.getElementById('zen-rice-share-author');
|
||||
const input = document.getElementById('zen-rice-share-name');
|
||||
saveButton.disabled =
|
||||
!this.canShareRice() ||
|
||||
input.value.trim().length < 3 ||
|
||||
input.value.trim().length > 30 ||
|
||||
authorInput.value.trim().length < 3 ||
|
||||
authorInput.value.trim().length > 15;
|
||||
}
|
||||
|
||||
async submit() {
|
||||
const firstForm = document.getElementById('zen-rice-share-first-form');
|
||||
const secondForm = document.getElementById('zen-rice-share-second-form');
|
||||
firstForm.setAttribute('fade-out', 'true');
|
||||
secondForm.removeAttribute('hidden');
|
||||
await this._submit();
|
||||
}
|
||||
|
||||
async _submit() {
|
||||
const allowedRice = this.getAllowedRice();
|
||||
const rice = await this._collector.packRice(allowedRice);
|
||||
const name = document.getElementById('zen-rice-share-name').value;
|
||||
const author = document.getElementById('zen-rice-share-author').value;
|
||||
const response = await this._sendRice({ name, author, rice });
|
||||
if (response) {
|
||||
this.showSuccessDialog(response);
|
||||
}
|
||||
}
|
||||
|
||||
async _sendRice({ name, author, rice }) {
|
||||
const headers = new Headers();
|
||||
headers.append('X-Zen-Rice-Name', name);
|
||||
headers.append('X-Zen-Rice-Author', author);
|
||||
headers.append('User-Agent', this.userAgent);
|
||||
headers.append('Content-Type', 'application/json');
|
||||
headers.append('Accept', 'application/json');
|
||||
let response;
|
||||
try {
|
||||
response = await fetch(`${ZEN_RICE_API}/rices`, {
|
||||
method: 'POST',
|
||||
headers,
|
||||
body: JSON.stringify(rice),
|
||||
});
|
||||
} catch (e) {
|
||||
this.showErrorMessage('An error occurred while sharing your rice. Please try again later.');
|
||||
console.error(e);
|
||||
return null;
|
||||
}
|
||||
// Here, response will never be a null object
|
||||
return await this._verifyResponse(response);
|
||||
}
|
||||
|
||||
async _verifyResponse(response) {
|
||||
const json = await response.json();
|
||||
if (!response.ok) {
|
||||
const message = json.message || 'An error occurred while sharing your rice.';
|
||||
this.showErrorMessage(message);
|
||||
console.error(json);
|
||||
return null;
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
showErrorMessage(message) {
|
||||
const errorBox = document.getElementById('zen-rice-share-error');
|
||||
errorBox.removeAttribute('hidden');
|
||||
errorBox.querySelector('label').textContent = message;
|
||||
}
|
||||
|
||||
showSuccessDialog(riceInfo) {
|
||||
const { slug, token } = riceInfo;
|
||||
// 'token' is like some sort of password to edit the rice, do NOT expose it
|
||||
setTimeout(() => {
|
||||
document.getElementById('zen-rice-share-dialog').setAttribute('animate', 'true');
|
||||
const successBox = document.getElementById('zen-rice-share-success');
|
||||
document.getElementById('zen-rice-share-second-form').setAttribute('fade-out', 'true');
|
||||
successBox.removeAttribute('hidden');
|
||||
const link = document.getElementById('zen-rice-share-success-link');
|
||||
link.value = `${ZEN_RICE_API}/rices/${slug}`;
|
||||
this.showConffetti();
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
showConffetti() {
|
||||
const end = Date.now() + 2500;
|
||||
function frame() {
|
||||
this.conffettiWrapper({
|
||||
angle: 135,
|
||||
spread: 55,
|
||||
particleCount: 5,
|
||||
startVelocity: 55,
|
||||
origin: { y: 0.6 },
|
||||
});
|
||||
this.conffettiWrapper({
|
||||
angle: 45,
|
||||
spread: 55,
|
||||
particleCount: 5,
|
||||
startVelocity: 55,
|
||||
origin: { y: 0.6 },
|
||||
});
|
||||
this.conffettiWrapper({
|
||||
angle: 90,
|
||||
spread: 55,
|
||||
particleCount: 5,
|
||||
startVelocity: 55,
|
||||
origin: { y: 0.6 },
|
||||
});
|
||||
if (Date.now() < end) {
|
||||
requestAnimationFrame(frame.bind(this));
|
||||
}
|
||||
}
|
||||
frame.call(this);
|
||||
}
|
||||
|
||||
openRicePage({ name, id, author }) {
|
||||
console.log('Opening rice page: ', name, id, author);
|
||||
gBrowser.removeTab(gBrowser.selectedTab);
|
||||
}
|
||||
}
|
||||
|
||||
window.ZenRiceManager = ZenRiceManager;
|
||||
}
|
||||
@@ -1,294 +0,0 @@
|
||||
{
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(lazy, 'zenTabUnloaderEnabled', 'zen.tab-unloader.enabled', false);
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(lazy, 'zenTabUnloaderTimeout', 'zen.tab-unloader.timeout-minutes', 20);
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(lazy, 'zenTabUnloaderExcludedUrls', 'zen.tab-unloader.excluded-urls', '');
|
||||
|
||||
const ZEN_TAB_UNLOADER_DEFAULT_EXCLUDED_URLS = [
|
||||
'^about:',
|
||||
'^chrome:',
|
||||
'^devtools:',
|
||||
'^file:',
|
||||
'^resource:',
|
||||
'^view-source:',
|
||||
'^view-image:',
|
||||
];
|
||||
|
||||
class ZenTabsObserver {
|
||||
static ALL_EVENTS = [
|
||||
'TabAttrModified',
|
||||
'TabPinned',
|
||||
'TabUnpinned',
|
||||
'TabShow',
|
||||
'TabHide',
|
||||
'TabOpen',
|
||||
'TabClose',
|
||||
'TabSelect',
|
||||
'TabMultiSelect',
|
||||
];
|
||||
|
||||
#listeners = [];
|
||||
|
||||
constructor() {
|
||||
this.#listenAllEvents();
|
||||
}
|
||||
|
||||
#listenAllEvents() {
|
||||
const eventListener = this.#eventListener.bind(this);
|
||||
for (const event of ZenTabsObserver.ALL_EVENTS) {
|
||||
window.addEventListener(event, eventListener);
|
||||
}
|
||||
window.addEventListener('unload', () => {
|
||||
for (const event of ZenTabsObserver.ALL_EVENTS) {
|
||||
window.removeEventListener(event, eventListener);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#eventListener(event) {
|
||||
for (const listener of this.#listeners) {
|
||||
listener(event.type, event);
|
||||
}
|
||||
}
|
||||
|
||||
addTabsListener(listener) {
|
||||
this.#listeners.push(listener);
|
||||
}
|
||||
}
|
||||
|
||||
class ZenTabsIntervalUnloader {
|
||||
static INTERVAL = 1000 * 60; // 1 minute
|
||||
|
||||
interval = null;
|
||||
unloader = null;
|
||||
|
||||
#excludedUrls = [];
|
||||
#compiledExcludedUrls = [];
|
||||
|
||||
constructor(unloader) {
|
||||
this.unloader = unloader;
|
||||
this.interval = setInterval(this.intervalListener.bind(this), ZenTabsIntervalUnloader.INTERVAL);
|
||||
this.#excludedUrls = this.lazyExcludeUrls;
|
||||
}
|
||||
|
||||
get lazyExcludeUrls() {
|
||||
return [
|
||||
...ZEN_TAB_UNLOADER_DEFAULT_EXCLUDED_URLS,
|
||||
...lazy.zenTabUnloaderExcludedUrls.split(',').map((url) => url.trim()),
|
||||
];
|
||||
}
|
||||
|
||||
arraysEqual(a, b) {
|
||||
if (a === b) return true;
|
||||
if (a == null || b == null) return false;
|
||||
if (a.length !== b.length) return false;
|
||||
|
||||
// If you don't care about the order of the elements inside
|
||||
// the array, you should sort both arrays here.
|
||||
// Please note that calling sort on an array will modify that array.
|
||||
// you might want to clone your array first.
|
||||
|
||||
for (var i = 0; i < a.length; ++i) {
|
||||
if (a[i] !== b[i]) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
get excludedUrls() {
|
||||
// Check if excludedrls is the same as the pref value
|
||||
const excludedUrls = this.lazyExcludeUrls;
|
||||
if (!this.arraysEqual(this.#excludedUrls, excludedUrls) || !this.#compiledExcludedUrls.length) {
|
||||
this.#excludedUrls = excludedUrls;
|
||||
this.#compiledExcludedUrls = excludedUrls.map((url) => new RegExp(url));
|
||||
}
|
||||
return this.#compiledExcludedUrls;
|
||||
}
|
||||
|
||||
intervalListener() {
|
||||
if (!lazy.zenTabUnloaderEnabled) {
|
||||
return;
|
||||
}
|
||||
const currentTimestamp = Date.now();
|
||||
const excludedUrls = this.excludedUrls;
|
||||
const tabs = ZenWorkspaces.allStoredTabs;
|
||||
for (let i = 0; i < tabs.length; i++) {
|
||||
const tab = tabs[i];
|
||||
if (this.unloader.canUnloadTab(tab, currentTimestamp, excludedUrls)) {
|
||||
this.unloader.unload(tab);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ZenTabUnloader extends ZenDOMOperatedFeature {
|
||||
static ACTIVITY_MODIFIERS = ['muted', 'soundplaying', 'label', 'attention'];
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
if (!lazy.zenTabUnloaderEnabled) {
|
||||
return;
|
||||
}
|
||||
this.intervalUnloader = new ZenTabsIntervalUnloader(this);
|
||||
}
|
||||
|
||||
init() {
|
||||
if (!lazy.zenTabUnloaderEnabled) {
|
||||
return;
|
||||
}
|
||||
this.insertIntoContextMenu();
|
||||
this.observer = new ZenTabsObserver();
|
||||
this.observer.addTabsListener(this.onTabEvent.bind(this));
|
||||
}
|
||||
|
||||
onTabEvent(action, event) {
|
||||
const tab = event.target;
|
||||
switch (action) {
|
||||
case 'TabPinned':
|
||||
case 'TabUnpinned':
|
||||
case 'TabShow':
|
||||
case 'TabHide':
|
||||
break;
|
||||
case 'TabAttrModified':
|
||||
this.handleTabAttrModified(tab, event);
|
||||
break;
|
||||
case 'TabOpen':
|
||||
this.handleTabOpen(tab);
|
||||
break;
|
||||
case 'TabClose':
|
||||
this.handleTabClose(tab);
|
||||
break;
|
||||
case 'TabSelect':
|
||||
case 'TabMultiSelect':
|
||||
this.updateTabActivity(tab);
|
||||
break;
|
||||
default:
|
||||
console.warn('ZenTabUnloader: Unhandled tab event', action);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
onLocationChange(browser) {
|
||||
const tab = browser.ownerGlobal.gBrowser.getTabForBrowser(browser);
|
||||
this.updateTabActivity(tab);
|
||||
}
|
||||
|
||||
handleTabClose(tab) {
|
||||
tab.lastActivity = null;
|
||||
}
|
||||
|
||||
handleTabOpen(tab) {
|
||||
this.updateTabActivity(tab);
|
||||
}
|
||||
|
||||
handleTabAttrModified(tab, event) {
|
||||
for (const modifier of ZenTabUnloader.ACTIVITY_MODIFIERS) {
|
||||
if (event.detail.changed.includes(modifier)) {
|
||||
this.updateTabActivity(tab);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updateTabActivity(tab) {
|
||||
const currentTimestamp = Date.now();
|
||||
tab.lastActivity = currentTimestamp;
|
||||
}
|
||||
|
||||
insertIntoContextMenu() {
|
||||
const element = window.MozXULElement.parseXULToFragment(`
|
||||
<menuseparator/>
|
||||
<menuitem id="context_zenUnloadTab"
|
||||
data-lazy-l10n-id="tab-zen-unload"
|
||||
command="cmd_zenUnloadTab"/>
|
||||
<menu data-lazy-l10n-id="zen-tabs-unloader-tab-actions" id="context_zenTabActions">
|
||||
<menupopup>
|
||||
<menuitem id="context_zenPreventUnloadTab"
|
||||
data-lazy-l10n-id="tab-zen-prevent-unload"
|
||||
command="cmd_zenPreventUnloadTab"/>
|
||||
<menuitem id="context_zenIgnoreUnloadTab"
|
||||
data-lazy-l10n-id="tab-zen-ignore-unload"
|
||||
command="cmd_zenIgnoreUnloadTab"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
`);
|
||||
document.getElementById('context_closeDuplicateTabs').parentNode.appendChild(element);
|
||||
}
|
||||
|
||||
unload(tab, skipPermitUnload = false) {
|
||||
gBrowser.explicitUnloadTabs([tab], skipPermitUnload);
|
||||
tab.removeAttribute('linkedpanel');
|
||||
}
|
||||
|
||||
unloadTab() {
|
||||
const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab];
|
||||
this.explicitUnloadTabs(tabs);
|
||||
}
|
||||
|
||||
explicitUnloadTabs(tabs, extraArgs = {}) {
|
||||
for (let i = 0; i < tabs.length; i++) {
|
||||
if (this.canUnloadTab(tabs[i], Date.now(), this.intervalUnloader.excludedUrls, true, extraArgs)) {
|
||||
this.unload(tabs[i], true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
preventUnloadTab() {
|
||||
const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab];
|
||||
for (let i = 0; i < tabs.length; i++) {
|
||||
const tab = tabs[i];
|
||||
tab.zenIgnoreUnload = true;
|
||||
}
|
||||
}
|
||||
|
||||
ignoreUnloadTab() {
|
||||
const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab];
|
||||
for (let i = 0; i < tabs.length; i++) {
|
||||
const tab = tabs[i];
|
||||
tab.zenIgnoreUnload = false;
|
||||
}
|
||||
}
|
||||
|
||||
canUnloadTab(tab, currentTimestamp, excludedUrls, ignoreTimestamp = false, extraArgs = {}) {
|
||||
if (
|
||||
(tab.pinned && !ignoreTimestamp) ||
|
||||
tab.selected ||
|
||||
(tab.multiselected && !ignoreTimestamp) ||
|
||||
(tab.hasAttribute('busy') && !ignoreTimestamp) ||
|
||||
!tab.linkedPanel ||
|
||||
tab.splitView ||
|
||||
tab.group?.hasAttribute('split-view-group') ||
|
||||
tab.attention ||
|
||||
tab.hasAttribute('glance-id') ||
|
||||
tab.linkedBrowser?.zenModeActive ||
|
||||
(tab.pictureinpicture && !ignoreTimestamp) ||
|
||||
(tab.soundPlaying && !ignoreTimestamp) ||
|
||||
(tab.zenIgnoreUnload && !ignoreTimestamp) ||
|
||||
(excludedUrls.some((url) => url.test(tab.linkedBrowser?.currentURI.spec)) &&
|
||||
tab.linkedBrowser?.currentURI.spec !== 'about:blank')
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if (ignoreTimestamp) {
|
||||
return this._tabPermitsUnload(tab, extraArgs);
|
||||
}
|
||||
const lastActivity = tab.lastActivity;
|
||||
if (!lastActivity) {
|
||||
return false;
|
||||
}
|
||||
const diff = currentTimestamp - lastActivity;
|
||||
// Check if the tab has been inactive for more than the timeout
|
||||
return diff > lazy.zenTabUnloaderTimeout * 60 * 1000 && this._tabPermitsUnload(tab, extraArgs);
|
||||
}
|
||||
|
||||
_tabPermitsUnload(tab, extraArgs) {
|
||||
return typeof extraArgs.permitUnload === 'undefined'
|
||||
? tab.linkedBrowser?.permitUnload()?.permitUnload
|
||||
: extraArgs.permitUnload;
|
||||
}
|
||||
}
|
||||
|
||||
window.gZenTabUnloader = new ZenTabUnloader();
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user