Compare commits
706
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad443ba451 | ||
|
|
d920760706 | ||
|
|
3bdb4d72b4 | ||
|
|
cef7e3fbcd | ||
|
|
0deab770e3 | ||
|
|
c815e506dd | ||
|
|
176206a38c | ||
|
|
72b2534790 | ||
|
|
28ac6906c2 | ||
|
|
e30f634d08 | ||
|
|
aed90a3f6c | ||
|
|
7054010520 | ||
|
|
cc3e2842a8 | ||
|
|
f6d4e44ee4 | ||
|
|
bcf0be86af | ||
|
|
fb86b18cf1 | ||
|
|
6400be4a6c | ||
|
|
b1f727fa34 | ||
|
|
97d0a0e514 | ||
|
|
8a7871b926 | ||
|
|
0e1895d7b7 | ||
|
|
d1422ddb33 | ||
|
|
5b0f7e40d4 | ||
|
|
70e2a02e69 | ||
|
|
079daac9bb | ||
|
|
99d49c1800 | ||
|
|
95c4bc5d87 | ||
|
|
451a12d1fd | ||
|
|
48b917ab86 | ||
|
|
d273dc4e59 | ||
|
|
683080441f | ||
|
|
5bbf7f5c6c | ||
|
|
f30990535f | ||
|
|
d14885f96d | ||
|
|
0a153b78f9 | ||
|
|
697380130b | ||
|
|
ec0eb48131 | ||
|
|
54390185c8 | ||
|
|
9c56e9c515 | ||
|
|
a49f851320 | ||
|
|
598007f994 | ||
|
|
06caed8c0c | ||
|
|
9991f90804 | ||
|
|
0bc77ef7c9 | ||
|
|
099b2eeb49 | ||
|
|
b13984a752 | ||
|
|
67cdd0bea2 | ||
|
|
87a849c5af | ||
|
|
f0bff952be | ||
|
|
b3ff771a1d | ||
|
|
3ef718d34c | ||
|
|
fb2d87c1da | ||
|
|
6d3fbceec9 | ||
|
|
4da312040b | ||
|
|
89276cc184 | ||
|
|
68e66259e2 | ||
|
|
75184584b9 | ||
|
|
a8e15a36af | ||
|
|
6521bbf9b9 | ||
|
|
dfa173cdfc | ||
|
|
da954b9b63 | ||
|
|
ad69a39c68 | ||
|
|
ca523c03e6 | ||
|
|
9386aa35a7 | ||
|
|
13fa15ba61 | ||
|
|
ec3382c6ae | ||
|
|
2716cb0b98 | ||
|
|
6048971663 | ||
|
|
04cab9954b | ||
|
|
cbb622a099 | ||
|
|
f3b505867f | ||
|
|
7bee509ecd | ||
|
|
b6ac158139 | ||
|
|
862f6e7845 | ||
|
|
64b9c0d057 | ||
|
|
94e90731ad | ||
|
|
ba61172de0 | ||
|
|
e3256255a4 | ||
|
|
9af1a79434 | ||
|
|
fa9e2dc71c | ||
|
|
e94f10ac16 | ||
|
|
0319c6e8cb | ||
|
|
fe1ae49dbe | ||
|
|
353598e6d8 | ||
|
|
36266e5a5a | ||
|
|
f7a371c0bf | ||
|
|
018815d9e9 | ||
|
|
82fd82b30c | ||
|
|
26f5e23faa | ||
|
|
0989cb3836 | ||
|
|
c55df7c239 | ||
|
|
9a840c437c | ||
|
|
f33a833f7c | ||
|
|
7c284b6bdc | ||
|
|
6af5cbe4e0 | ||
|
|
5d6c2a3008 | ||
|
|
7ffe7b9aec | ||
|
|
2e912861f1 | ||
|
|
f8ac973802 | ||
|
|
5bb15ae1cf | ||
|
|
34f379f6c7 | ||
|
|
14d6920dd3 | ||
|
|
3d1c253369 | ||
|
|
b5dd68d6f2 | ||
|
|
93c2c408be | ||
|
|
c2c57c8e29 | ||
|
|
9432ae260b | ||
|
|
69f3132f4c | ||
|
|
b1326b1fd7 | ||
|
|
39f4a16cfc | ||
|
|
dc8575ac89 | ||
|
|
2d56420241 | ||
|
|
3a32323337 | ||
|
|
1b0637abc0 | ||
|
|
4ccffbb27d | ||
|
|
8a9aa6a818 | ||
|
|
bd0e0db372 | ||
|
|
2d8cc4c0fb | ||
|
|
017c6470b9 | ||
|
|
1e25fc1b5a | ||
|
|
e28215f38f | ||
|
|
8d06bc8b64 | ||
|
|
9e475cb279 | ||
|
|
cbbb2d2869 | ||
|
|
f6157394d3 | ||
|
|
c72b8b2122 | ||
|
|
c302db7545 | ||
|
|
0554a8e97d | ||
|
|
039c66e7b7 | ||
|
|
7eb00e350e | ||
|
|
f76f9e8220 | ||
|
|
17c963b63f | ||
|
|
5d45a697ce | ||
|
|
ef729f2d66 | ||
|
|
87bfb01642 | ||
|
|
c74ab7aa23 | ||
|
|
48b00e6a0a | ||
|
|
6b2f4e801e | ||
|
|
1394e82bd0 | ||
|
|
ae9411a23d | ||
|
|
0334834a0f | ||
|
|
b0ba8ca5c0 | ||
|
|
9e61aaf08c | ||
|
|
ae00cf6b4e | ||
|
|
6ac76140a5 | ||
|
|
8c014a6b1d | ||
|
|
ee730d9e29 | ||
|
|
c290d7ddb3 | ||
|
|
de033a04fa | ||
|
|
2fe844f412 | ||
|
|
8185b43d54 | ||
|
|
1219dfc144 | ||
|
|
59ab3f834d | ||
|
|
dd16556530 | ||
|
|
8b6835c3d6 | ||
|
|
bb5bb70ac5 | ||
|
|
da90d365ec | ||
|
|
02ff72b2f0 | ||
|
|
9c7a086870 | ||
|
|
24ba03fe96 | ||
|
|
69d8d1a335 | ||
|
|
d495a2eed8 | ||
|
|
6b3990457e | ||
|
|
099cff0b95 | ||
|
|
fac7fedfd3 | ||
|
|
6ed1b56526 | ||
|
|
a2ffb1238f | ||
|
|
b55e7a4dc8 | ||
|
|
0c42f162d3 | ||
|
|
01a37c8f26 | ||
|
|
5e88c7d891 | ||
|
|
af23a8491c | ||
|
|
32a454f917 | ||
|
|
63ff5b2ac1 | ||
|
|
a9fff9861b | ||
|
|
89a3daf9fe | ||
|
|
078a5a01ae | ||
|
|
9c8c3495b6 | ||
|
|
25e854dde8 | ||
|
|
64060ef4c5 | ||
|
|
9c97f01bc2 | ||
|
|
8693a8a74c | ||
|
|
47c12c6279 | ||
|
|
e96015b9ea | ||
|
|
d3debab713 | ||
|
|
00045b7396 | ||
|
|
19877302a6 | ||
|
|
56a74abb8a | ||
|
|
421abfd1a6 | ||
|
|
b836faee4a | ||
|
|
48cf148c23 | ||
|
|
e566a22f22 | ||
|
|
3ea76e3ecc | ||
|
|
0d5685a279 | ||
|
|
78c3957f64 | ||
|
|
38e267ae64 | ||
|
|
59899a211d | ||
|
|
d3348761c3 | ||
|
|
79a01c62bc | ||
|
|
d2d5629bdd | ||
|
|
f590df238a | ||
|
|
7d92287596 | ||
|
|
9c08df11dc | ||
|
|
e65c561e6f | ||
|
|
6d36da1ce6 | ||
|
|
cd9341adf1 | ||
|
|
13842a012b | ||
|
|
f4f7d2dffb | ||
|
|
87a5fc42b8 | ||
|
|
f1456002d4 | ||
|
|
30266011bf | ||
|
|
5a76dedb50 | ||
|
|
dc8ab6cf77 | ||
|
|
b97efdb584 | ||
|
|
a91e6aad87 | ||
|
|
6f03ca0434 | ||
|
|
7a01e3e103 | ||
|
|
e539a65709 | ||
|
|
2402c1bef5 | ||
|
|
1fd238b31d | ||
|
|
21a65c1558 | ||
|
|
f42d1f7ca9 | ||
|
|
b77ecb2380 | ||
|
|
4fc80e0ef3 | ||
|
|
df61f9aadf | ||
|
|
7862bfd2aa | ||
|
|
f6c74e93b7 | ||
|
|
81880982b2 | ||
|
|
f53984670c | ||
|
|
537530707e | ||
|
|
e069f391c7 | ||
|
|
b00f5c4604 | ||
|
|
a326fa737e | ||
|
|
fcd5618321 | ||
|
|
55e085894a | ||
|
|
801ba69f54 | ||
|
|
abdd839073 | ||
|
|
24a5c5fd4e | ||
|
|
6d49de36a8 | ||
|
|
ef3c74db8a | ||
|
|
419b7fad10 | ||
|
|
ad43f16a9a | ||
|
|
db8b779859 | ||
|
|
67a91f9a1d | ||
|
|
ec95dcd330 | ||
|
|
b71ddd1b00 | ||
|
|
d6ffd7859e | ||
|
|
ded50f8b01 | ||
|
|
06066be0a8 | ||
|
|
fb52f89cc5 | ||
|
|
86761952c3 | ||
|
|
edc916533a | ||
|
|
6a7e99eb81 | ||
|
|
8ca1d5f3ee | ||
|
|
a3068dc145 | ||
|
|
3e9d648078 | ||
|
|
3e398b9a2f | ||
|
|
3fb756687b | ||
|
|
93fb1a6496 | ||
|
|
dfa328a769 | ||
|
|
90b59b6753 | ||
|
|
121c9d891b | ||
|
|
e6a8046d33 | ||
|
|
3cd964e60d | ||
|
|
fa8866d627 | ||
|
|
bf3cb76766 | ||
|
|
25d02d17d2 | ||
|
|
ffcbf03c9c | ||
|
|
fc5611719d | ||
|
|
ad69ee299f | ||
|
|
b912f8cd0b | ||
|
|
e5f43e9a90 | ||
|
|
2b7bb1798a | ||
|
|
8250b82869 | ||
|
|
e4183488d9 | ||
|
|
101ca9c738 | ||
|
|
7ecee1c9e6 | ||
|
|
1d7f37f420 | ||
|
|
b02e43d84c | ||
|
|
8ed3b72a56 | ||
|
|
a929cf9370 | ||
|
|
a5343c33ec | ||
|
|
8efd73c50e | ||
|
|
d5f617b3e2 | ||
|
|
d1ff099200 | ||
|
|
6bbc329e7b | ||
|
|
ed31f08f2f | ||
|
|
ed60502f10 | ||
|
|
0fa592a516 | ||
|
|
30a15387b5 | ||
|
|
b5b841dd38 | ||
|
|
5f2b199627 | ||
|
|
071584621e | ||
|
|
5c57f44838 | ||
|
|
93741e9e1c | ||
|
|
836f81f2e2 | ||
|
|
574638328e | ||
|
|
e0750db1bd | ||
|
|
5652182fb3 | ||
|
|
c3cbef19ac | ||
|
|
8c8f990a28 | ||
|
|
f6a6bdda99 | ||
|
|
0d5d06fdd7 | ||
|
|
d10b98c4fc | ||
|
|
8b7cfff558 | ||
|
|
25a75e1b0e | ||
|
|
91a1b8245b | ||
|
|
4abde90e82 | ||
|
|
abf3365cc2 | ||
|
|
1e254c1723 | ||
|
|
0676c02419 | ||
|
|
cb7b8e7c5a | ||
|
|
f27b239f55 | ||
|
|
7f192d0208 | ||
|
|
eff6f6ef88 | ||
|
|
dd8ee2931a | ||
|
|
f530acbf9e | ||
|
|
7d296d2fd2 | ||
|
|
fb858ed0e4 | ||
|
|
f576f1b1b6 | ||
|
|
b9d2a445b2 | ||
|
|
092b268823 | ||
|
|
b64cb0f195 | ||
|
|
2510bb3625 | ||
|
|
4fbd878208 | ||
|
|
e8840da00c | ||
|
|
153e100e7e | ||
|
|
3ea3d1a405 | ||
|
|
37de3bfba3 | ||
|
|
db24e0c6c3 | ||
|
|
4d741a1ece | ||
|
|
6ce713f305 | ||
|
|
db248b3ce6 | ||
|
|
2e2651ea4c | ||
|
|
696225fdc9 | ||
|
|
fd31c81873 | ||
|
|
981f094061 | ||
|
|
b9067eed79 | ||
|
|
68c7beabab | ||
|
|
3ba184bfe2 | ||
|
|
24fa8a6e04 | ||
|
|
923f204478 | ||
|
|
a69d37f2ee | ||
|
|
2e715149db | ||
|
|
26d067d301 | ||
|
|
c1df8cedb8 | ||
|
|
2189f8cc58 | ||
|
|
6cd74c86ae | ||
|
|
88657c2def | ||
|
|
68b7915bc6 | ||
|
|
f6e66faf8f | ||
|
|
ee0bb2c636 | ||
|
|
1edb245e85 | ||
|
|
7a010d5a72 | ||
|
|
9e4b7488b3 | ||
|
|
18cf40a521 | ||
|
|
ed6d806617 | ||
|
|
4f5e421539 | ||
|
|
72868ac7c5 | ||
|
|
5dea503cbd | ||
|
|
8f8292afb3 | ||
|
|
d505f75c9b | ||
|
|
a8a2729531 | ||
|
|
9306ee7a5d | ||
|
|
e8c8c7d940 | ||
|
|
871c9c39dc | ||
|
|
ecc955b4cd | ||
|
|
7e5f7eb0aa | ||
|
|
1c3407c05f | ||
|
|
26fb856ffc | ||
|
|
9d2b15ba26 | ||
|
|
28cdc1df1a | ||
|
|
0c501f84b9 | ||
|
|
c6d5ea5934 | ||
|
|
047f939b63 | ||
|
|
3d693372ad | ||
|
|
a33802d3e5 | ||
|
|
d483244ecb | ||
|
|
8e39e0d363 | ||
|
|
2762830b10 | ||
|
|
df1df4b8e1 | ||
|
|
210e86641b | ||
|
|
a8a49e3c65 | ||
|
|
bfe26eaf84 | ||
|
|
60a08debff | ||
|
|
132bd9259e | ||
|
|
5eb4dcf6bf | ||
|
|
295fb67225 | ||
|
|
a2c271d677 | ||
|
|
6901f6187d | ||
|
|
e2ee6bacd0 | ||
|
|
bc6c24fc4e | ||
|
|
58f72a073d | ||
|
|
c83a75766c | ||
|
|
c016fb531c | ||
|
|
1615745a1f | ||
|
|
dc50382d22 | ||
|
|
a5b84379f4 | ||
|
|
d168261fa5 | ||
|
|
e83760388f | ||
|
|
82d19a5433 | ||
|
|
e3e39728ce | ||
|
|
76dfb8ef31 | ||
|
|
544cf566b5 | ||
|
|
da88313488 | ||
|
|
2aa0720e93 | ||
|
|
be536ee32e | ||
|
|
339e06634f | ||
|
|
ff9527ea52 | ||
|
|
e2369147b1 | ||
|
|
5e559c4444 | ||
|
|
e30762ea43 | ||
|
|
1fa4a078d8 | ||
|
|
3e87fa8aa5 | ||
|
|
e52ca120c4 | ||
|
|
3eadbba8a1 | ||
|
|
41f9451070 | ||
|
|
d2f5bfdbfd | ||
|
|
b4a1953372 | ||
|
|
db1342e5ff | ||
|
|
86c5057d62 | ||
|
|
779dea8408 | ||
|
|
544f374e44 | ||
|
|
b55d783cc2 | ||
|
|
4e948b2b48 | ||
|
|
b6bce374ad | ||
|
|
6cbd8abdca | ||
|
|
5947f38421 | ||
|
|
29b24e391a | ||
|
|
0cdb80a9e0 | ||
|
|
a8907d6fb1 | ||
|
|
4851a66c57 | ||
|
|
1d5c2091cc | ||
|
|
e5abcaf7c8 | ||
|
|
d5733eed90 | ||
|
|
a22cc0dc4e | ||
|
|
276f6a1c6f | ||
|
|
e161e32b63 | ||
|
|
e31a351c56 | ||
|
|
f728c0172b | ||
|
|
136644d45e | ||
|
|
24308612fd | ||
|
|
1ae3e89b57 | ||
|
|
c1bb6ca349 | ||
|
|
b03d1b9cc7 | ||
|
|
3ce0485742 | ||
|
|
100651a74c | ||
|
|
5138e30a2a | ||
|
|
a69fa591da | ||
|
|
7f2a3eb2ca | ||
|
|
e45cc8cdc0 | ||
|
|
3c8edd7b3a | ||
|
|
855832d08b | ||
|
|
9f07981fe5 | ||
|
|
a27d6d3c7e | ||
|
|
2a4da355f1 | ||
|
|
ca47fbc16b | ||
|
|
5a3c3de1a4 | ||
|
|
ff9062ac17 | ||
|
|
9486fc3f98 | ||
|
|
28e873b5e0 | ||
|
|
39d532ca3f | ||
|
|
07a602e404 | ||
|
|
a448e48cdb | ||
|
|
092a3ee21a | ||
|
|
88cfcdbd2e | ||
|
|
f3378c7b6f | ||
|
|
50545c1486 | ||
|
|
ff678d06ea | ||
|
|
6345449d50 | ||
|
|
8951266183 | ||
|
|
6911624d4d | ||
|
|
da6efff220 | ||
|
|
cc99aff03b | ||
|
|
cdc5210c25 | ||
|
|
4838833d72 | ||
|
|
0fad184fda | ||
|
|
6d8c96d665 | ||
|
|
e6c1a3b052 | ||
|
|
71add2e391 | ||
|
|
61abd2a48f | ||
|
|
6ba2f49866 | ||
|
|
2fd2cf9074 | ||
|
|
d0d40f248d | ||
|
|
cc2a2ca153 | ||
|
|
2307b639dd | ||
|
|
1e0ea36a81 | ||
|
|
4e1250a6ba | ||
|
|
56d2852004 | ||
|
|
3fa8edcb1a | ||
|
|
edb14ea03c | ||
|
|
a2f554bc1e | ||
|
|
a289bbfb93 | ||
|
|
5486c2040d | ||
|
|
84c95be03f | ||
|
|
d9e6c6c4c5 | ||
|
|
25559e758c | ||
|
|
89ce4aee4a | ||
|
|
ba9d2e7919 | ||
|
|
9d0c742f34 | ||
|
|
1e69961bc7 | ||
|
|
e4ddc4c14e | ||
|
|
be149bab3d | ||
|
|
1b4bbe19e3 | ||
|
|
2e6b602a04 | ||
|
|
5b9012152c | ||
|
|
efd20bb4f7 | ||
|
|
7d595e4774 | ||
|
|
7b4c3085c0 | ||
|
|
7045a5dcea | ||
|
|
777bae87b5 | ||
|
|
06ae867c2f | ||
|
|
77ebd3d202 | ||
|
|
227f999001 | ||
|
|
e37782c2ce | ||
|
|
f210be5ab4 | ||
|
|
12b1a0639e | ||
|
|
34098b871b | ||
|
|
cc2ebff0e3 | ||
|
|
7c21766dd5 | ||
|
|
965dfd2d39 | ||
|
|
49e598b4b7 | ||
|
|
40f13f3afa | ||
|
|
356e2054fa | ||
|
|
dab22e927b | ||
|
|
a1f60be674 | ||
|
|
e0ec59d30b | ||
|
|
abc1c9ef7e | ||
|
|
3e4a778978 | ||
|
|
ca85495a1c | ||
|
|
41dc03222c | ||
|
|
3cf56d8270 | ||
|
|
9436564a76 | ||
|
|
142065d58b | ||
|
|
2ffd3d95bb | ||
|
|
6b9f87dbea | ||
|
|
3b2aee92fb | ||
|
|
12dac8ee62 | ||
|
|
f8df77051b | ||
|
|
fd9c0f6be4 | ||
|
|
cf05510b0d | ||
|
|
207923a1b6 | ||
|
|
fbbcb058fa | ||
|
|
cef1736de2 | ||
|
|
da10cfc062 | ||
|
|
7cbf2533fe | ||
|
|
1a9d1c235c | ||
|
|
5c8a19f54f | ||
|
|
44fe593f8a | ||
|
|
b8d1af4e50 | ||
|
|
18f189b887 | ||
|
|
c9776c97de | ||
|
|
57a4241749 | ||
|
|
163ff997b1 | ||
|
|
449e9879ce | ||
|
|
84350c3776 | ||
|
|
91027ae9a4 | ||
|
|
9db80785a5 | ||
|
|
a876817127 | ||
|
|
3a0c70aef7 | ||
|
|
bbb6a73af1 | ||
|
|
51119ec213 | ||
|
|
2690ee46f2 | ||
|
|
bc2e456a6a | ||
|
|
b27c3719f0 | ||
|
|
147482d5e8 | ||
|
|
514403e1ba | ||
|
|
109d3aad6a | ||
|
|
15779e204d | ||
|
|
49e403f822 | ||
|
|
ffb5b76f4e | ||
|
|
b21932ffd9 | ||
|
|
46d8f1c8d9 | ||
|
|
8caffac3d7 | ||
|
|
40da5360a4 | ||
|
|
5b9f91991f | ||
|
|
a565f2d984 | ||
|
|
0b7269a4b8 | ||
|
|
c7805b4b40 | ||
|
|
e6b65be75a | ||
|
|
7043fe592c | ||
|
|
f7d35c41ae | ||
|
|
afb4942a72 | ||
|
|
4f7bd0918b | ||
|
|
fb8d34254a | ||
|
|
2a390c4c25 | ||
|
|
040fbf72e9 | ||
|
|
395e9aea3c | ||
|
|
bb3508327f | ||
|
|
068ae45f6c | ||
|
|
02ff0f658b | ||
|
|
3c14d9b524 | ||
|
|
8de00babad | ||
|
|
59768f0514 | ||
|
|
e185fe30f8 | ||
|
|
0d20be43d4 | ||
|
|
356632063c | ||
|
|
3a592ddb59 | ||
|
|
652ade33b5 | ||
|
|
05e6188921 | ||
|
|
b222ebed80 | ||
|
|
179d9b9ae1 | ||
|
|
ab7f50d2c8 | ||
|
|
51cc3c7cd1 | ||
|
|
d51f14529a | ||
|
|
563dfc3d4d | ||
|
|
3ad72a04af | ||
|
|
d43130f779 | ||
|
|
ce997ff4fd | ||
|
|
7a5d530358 | ||
|
|
dd0520f334 | ||
|
|
aab9143c13 | ||
|
|
b689ec2ef4 | ||
|
|
c9c2da444b | ||
|
|
9c931c175c | ||
|
|
39db8f1768 | ||
|
|
f7ed9ff131 | ||
|
|
4423126272 | ||
|
|
5294bc510b | ||
|
|
1b599315a2 | ||
|
|
b561655503 | ||
|
|
64923382b4 | ||
|
|
5ef6525be7 | ||
|
|
6dc066f7dd | ||
|
|
380cf61811 | ||
|
|
4624ca952e | ||
|
|
6f1475e944 | ||
|
|
22256eec46 | ||
|
|
31a5de2577 | ||
|
|
269e008541 | ||
|
|
79d866e9b5 | ||
|
|
6d4341f8a4 | ||
|
|
61dd96a29e | ||
|
|
9e2a8e0fb2 | ||
|
|
82ff7afe2b | ||
|
|
0017eaebfc | ||
|
|
fa729854b8 | ||
|
|
5644aebac7 | ||
|
|
941f5e43b4 | ||
|
|
a595407d39 | ||
|
|
60417b361e | ||
|
|
c3adf1724c | ||
|
|
435bbff3b0 | ||
|
|
706ea0dd7e | ||
|
|
e7c37a9d54 | ||
|
|
a7f66d648e | ||
|
|
013dc818e3 | ||
|
|
9430670019 | ||
|
|
67c795b610 | ||
|
|
42158401ac | ||
|
|
06a9891d77 | ||
|
|
c53e5325c3 | ||
|
|
6161d531fc | ||
|
|
ad52e75e97 | ||
|
|
2db7b6756d | ||
|
|
2f70c6c8a7 | ||
|
|
8fd8943460 | ||
|
|
695b533be1 | ||
|
|
491e9fb3e9 | ||
|
|
4d8bccc861 | ||
|
|
88b5fea2f9 | ||
|
|
91e886c564 | ||
|
|
1e8ff58d82 | ||
|
|
0b84052458 | ||
|
|
4abc92ef44 | ||
|
|
d12833afc4 | ||
|
|
8de34e23a3 | ||
|
|
3158caa1be | ||
|
|
8a6d13c416 | ||
|
|
90fe2cfb36 | ||
|
|
c91d5ebec1 | ||
|
|
5a00d5e117 | ||
|
|
1b938d9d5b | ||
|
|
62cbbef068 | ||
|
|
684547a66d | ||
|
|
261569c9fd | ||
|
|
e8d3ad369a | ||
|
|
f81ae009f9 | ||
|
|
8b954a2937 | ||
|
|
1e58f48f1d | ||
|
|
1a0e9905fb | ||
|
|
8a04a843f6 | ||
|
|
814e57fbd0 | ||
|
|
f69389a76b | ||
|
|
3f9b1357ff | ||
|
|
e0cb098823 | ||
|
|
bc470533bf | ||
|
|
84d4e7efe3 | ||
|
|
39b900243e | ||
|
|
017aedadd2 | ||
|
|
7c06399818 | ||
|
|
26646997b0 | ||
|
|
1b3f651c7e | ||
|
|
23b002adaa | ||
|
|
d9118a8653 | ||
|
|
245714aa0c | ||
|
|
2618620d04 | ||
|
|
1d3d0585a2 | ||
|
|
2e263b1cdc | ||
|
|
f4aece9488 | ||
|
|
c1928689da | ||
|
|
6972b3458d | ||
|
|
bb6634bbb0 | ||
|
|
1b2a6bdc72 | ||
|
|
901c12671e | ||
|
|
3c564fd613 |
@@ -0,0 +1,17 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
|
||||||
|
indent_style = space
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.js]
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[meson.build]
|
||||||
|
indent_size = 2
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2011 Giovanni Campagna <gcampagna@src.gnome.org>
|
||||||
|
# SPDX-FileCopyrightText: 2023 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
po/gnome-shell-extensions.pot
|
||||||
|
zip-files/
|
||||||
|
*~
|
||||||
|
*.patch
|
||||||
|
*.sw?
|
||||||
|
.buildconfig
|
||||||
|
.vscode
|
||||||
+36
-36
@@ -3,8 +3,13 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml'
|
- remote: 'https://gitlab.gnome.org/Infrastructure/freedesktop-ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml'
|
||||||
- remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml"
|
- remote: "https://gitlab.gnome.org/Infrastructure/freedesktop-ci-templates/-/raw/bc70242ffb8402243e934659ecc1a2d1c89eca2b/templates/ci-fairy.yml"
|
||||||
|
- component: gitlab.gnome.org/GNOME/citemplates/release-service@master
|
||||||
|
inputs:
|
||||||
|
job-stage: deploy
|
||||||
|
dist-job-name: fedora-dist-tarball
|
||||||
|
tarball-artifact-path: "$TARBALL_ARTIFACT_PATH"
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- pre_review
|
- pre_review
|
||||||
@@ -14,7 +19,7 @@ stages:
|
|||||||
- deploy
|
- deploy
|
||||||
|
|
||||||
default:
|
default:
|
||||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/35:2022-02-18.0
|
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/41:2024-10-18.0
|
||||||
# Cancel jobs if newer commits are pushed to the branch
|
# Cancel jobs if newer commits are pushed to the branch
|
||||||
interruptible: true
|
interruptible: true
|
||||||
# Auto-retry jobs in case of infra failures
|
# Auto-retry jobs in case of infra failures
|
||||||
@@ -28,10 +33,13 @@ default:
|
|||||||
|
|
||||||
variables:
|
variables:
|
||||||
FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions
|
FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions
|
||||||
LINT_LOG: "eslint-report.xml"
|
MESON_BUILD_DIR: build
|
||||||
|
TARBALL_ARTIFACT_PATH: "${MESON_BUILD_DIR}/meson-dist/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.tar.xz"
|
||||||
|
|
||||||
workflow:
|
workflow:
|
||||||
rules:
|
rules:
|
||||||
|
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push"'
|
||||||
|
when: never
|
||||||
- if: '$CI_MERGE_REQUEST_IID'
|
- if: '$CI_MERGE_REQUEST_IID'
|
||||||
- if: '$CI_COMMIT_TAG'
|
- if: '$CI_COMMIT_TAG'
|
||||||
- if: '$CI_COMMIT_BRANCH'
|
- if: '$CI_COMMIT_BRANCH'
|
||||||
@@ -44,13 +52,6 @@ workflow:
|
|||||||
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
|
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
|
||||||
- when: 'manual'
|
- when: 'manual'
|
||||||
|
|
||||||
.gnome-shell-extensions.fedora:34:
|
|
||||||
variables:
|
|
||||||
FDO_DISTRIBUTION_VERSION: 34
|
|
||||||
FDO_DISTRIBUTION_TAG: '2021-08-31.0'
|
|
||||||
FDO_DISTRIBUTION_PACKAGES: >
|
|
||||||
meson git gettext sassc
|
|
||||||
|
|
||||||
.prereview_req: &prereview_req
|
.prereview_req: &prereview_req
|
||||||
needs:
|
needs:
|
||||||
- check_commit_log
|
- check_commit_log
|
||||||
@@ -102,13 +103,6 @@ check-reuse:
|
|||||||
script:
|
script:
|
||||||
- reuse lint
|
- reuse lint
|
||||||
|
|
||||||
build-fedora-container:
|
|
||||||
extends:
|
|
||||||
- .fdo.container-build@fedora@x86_64
|
|
||||||
- .gnome-shell-extensions.fedora:34
|
|
||||||
stage: prepare
|
|
||||||
<<: *prereview_req
|
|
||||||
|
|
||||||
js_check:
|
js_check:
|
||||||
stage: review
|
stage: review
|
||||||
<<: *prereview_req
|
<<: *prereview_req
|
||||||
@@ -118,14 +112,25 @@ js_check:
|
|||||||
eslint:
|
eslint:
|
||||||
stage: review
|
stage: review
|
||||||
<<: *prereview_req
|
<<: *prereview_req
|
||||||
|
variables:
|
||||||
|
LINT_LOG: "eslint-report.xml"
|
||||||
script:
|
script:
|
||||||
- export NODE_PATH=$(npm root -g)
|
- export NODE_PATH=$(npm root -g)
|
||||||
- ./.gitlab-ci/run-eslint --output-file ${LINT_LOG} --format junit --stdout
|
- ./.gitlab-ci/run-eslint --output-file "$LINT_LOG" --format junit --stdout
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- ${LINT_LOG}
|
- "$LINT_LOG"
|
||||||
reports:
|
reports:
|
||||||
junit: ${LINT_LOG}
|
junit: "$LINT_LOG"
|
||||||
|
|
||||||
|
potfile_js_check:
|
||||||
|
stage: review
|
||||||
|
<<: *prereview_req
|
||||||
|
script:
|
||||||
|
- gjs-check-potfiles
|
||||||
|
artifacts:
|
||||||
|
reports:
|
||||||
|
junit: gjs-check-potfiles.junit.xml
|
||||||
|
|
||||||
build-bundles:
|
build-bundles:
|
||||||
stage: build
|
stage: build
|
||||||
@@ -139,32 +144,25 @@ build-bundles:
|
|||||||
- zip-files/
|
- zip-files/
|
||||||
|
|
||||||
fedora-build:
|
fedora-build:
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .gnome-shell-extensions.fedora:34
|
|
||||||
stage: build
|
stage: build
|
||||||
needs:
|
<<: *prereview_req
|
||||||
- build-fedora-container
|
|
||||||
script:
|
script:
|
||||||
- meson setup build --werror -Dextension_set=all -Dclassic_mode=true
|
- meson setup "$MESON_BUILD_DIR" --werror -Dextension_set=all -Dclassic_mode=true
|
||||||
- meson compile -C build
|
- meson compile -C "$MESON_BUILD_DIR"
|
||||||
- meson test -C build
|
- meson test -C "$MESON_BUILD_DIR"
|
||||||
- meson install -C build
|
- meson install -C "$MESON_BUILD_DIR"
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- build
|
- "$MESON_BUILD_DIR"
|
||||||
|
|
||||||
fedora-dist:
|
fedora-dist:
|
||||||
extends:
|
|
||||||
- .fdo.distribution-image@fedora
|
|
||||||
- .gnome-shell-extensions.fedora:34
|
|
||||||
stage: deploy
|
stage: deploy
|
||||||
needs:
|
needs:
|
||||||
- fedora-build
|
- fedora-build
|
||||||
variables:
|
variables:
|
||||||
GIT_SUBMODULE_STRATEGY: normal
|
GIT_SUBMODULE_STRATEGY: normal
|
||||||
script:
|
script:
|
||||||
- meson dist -C build
|
- meson dist -C "$MESON_BUILD_DIR"
|
||||||
rules:
|
rules:
|
||||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||||
changes:
|
changes:
|
||||||
@@ -175,7 +173,9 @@ fedora-dist-tarball:
|
|||||||
extends: fedora-dist
|
extends: fedora-dist
|
||||||
artifacts:
|
artifacts:
|
||||||
expose_as: 'Get tarball here'
|
expose_as: 'Get tarball here'
|
||||||
|
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||||||
|
when: always
|
||||||
paths:
|
paths:
|
||||||
- build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz
|
- "$TARBALL_ARTIFACT_PATH"
|
||||||
rules:
|
rules:
|
||||||
- if: '$CI_COMMIT_TAG'
|
- if: '$CI_COMMIT_TAG'
|
||||||
|
|||||||
@@ -20,9 +20,6 @@ need in gnome-shell.
|
|||||||
Generally, we follow [GJS coding style][coding-style], which in short is:
|
Generally, we follow [GJS coding style][coding-style], which in short is:
|
||||||
indent 4 spaces, no tabs, space after comma, no space after function call.
|
indent 4 spaces, no tabs, space after comma, no space after function call.
|
||||||
|
|
||||||
The Emacs mode line for this
|
|
||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
||||||
|
|
||||||
Imports should be at the top, in two groups, one for standard
|
Imports should be at the top, in two groups, one for standard
|
||||||
imports (like imports.lang or imports.dbus) and introspection,
|
imports (like imports.lang or imports.dbus) and introspection,
|
||||||
the other for Shell API. Within the same group, put everything
|
the other for Shell API. Within the same group, put everything
|
||||||
|
|||||||
@@ -1,3 +1,164 @@
|
|||||||
|
47.3
|
||||||
|
====
|
||||||
|
* places-menu: Fix opening drives with mount operations [Florian; !361]
|
||||||
|
* window-list: Fix hiding when entering overview with gestures [Florian; !364]
|
||||||
|
* workspace-indicator: Only show previews of regular windows [Florian; !363]
|
||||||
|
* Misc. bug fixes and cleanups [Florian, Bartłomiej; !362, !365, !367,
|
||||||
|
!368, !370]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner, Bartłomiej Piotrowski
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Yi-Jyun Pan [zh_TW]
|
||||||
|
|
||||||
|
47.2
|
||||||
|
====
|
||||||
|
* places-menu: Fix a11y labelling [Florian; #542]
|
||||||
|
* screenshot-window-sizer: Mention shortcut in description [Florian; !358]
|
||||||
|
* Misc. bug fixes and cleanups [Florian; !353, !354]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Fabio Tomat [fur], Nathan Follens [nl], Марко Костић [sr]
|
||||||
|
|
||||||
|
47.1
|
||||||
|
====
|
||||||
|
* classic: Add missing top-bar indicators [Florian; !339]
|
||||||
|
* window-list: Fix window state styling [Florian; !342]
|
||||||
|
* window-list: Fix "ignore-workspace" setting getting reset [Florian; !341]
|
||||||
|
* Misc. bug fixes and cleanups [Florian; !337, !338, !345, !347, !349]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner
|
||||||
|
|
||||||
|
47.0
|
||||||
|
====
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
twlvnn kraftwerk [bg], Alexander Shopov [bg], Fran Dieguez [gl],
|
||||||
|
Aurimas Černius [lt], Daniel [es], Andika Triwidada [id],
|
||||||
|
Andi Chandler [en_GB], Ask Hjorth Larsen [da], Aefgh Threenine [th],
|
||||||
|
Dušan Kazik [sk], Rūdolfs Mazurs [lv], Irénée THIRION [fr]
|
||||||
|
|
||||||
|
47.rc
|
||||||
|
=====
|
||||||
|
* Misc. bug fixes and cleanups [Sophie; !333]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Sophie Herold
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Daniel Șerbănescu [ro], Giannis Antypas [el], Ekaterine Papava [ka],
|
||||||
|
Jordi Mas i Hernandez [ca], Yuri Chornoivan [uk], Jiri Grönroos [fi],
|
||||||
|
Daniel Rusek [cs], Vasil Pupkin [be], Luming Zh [zh_CN], Brage Fuglseth [nb],
|
||||||
|
Asier Sarasua Garmendia [eu], Danial Behzadi [fa], Rafael Fontenelle [pt_BR],
|
||||||
|
Quentin PAGÈS [oc], Anders Jonsson [sv], Jürgen Benvenuti [de],
|
||||||
|
Changwoo Ryu [ko], Hugo Carvalho [pt], Piotr Drąg [pl], Sabri Ünal [tr]
|
||||||
|
|
||||||
|
47.beta
|
||||||
|
=======
|
||||||
|
* window-list: Modernize styling [Jakub; !330]
|
||||||
|
* Include "status-icons" extension [Florian; !194]
|
||||||
|
* Misc. bug fixes and cleanups [Florian; !328, !331, !327]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner, Jakub Steiner
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Sabri Ünal [tr], Chao-Hsiung Liao [zh_TW]
|
||||||
|
|
||||||
|
47.alpha
|
||||||
|
========
|
||||||
|
* Improve workspace previews in window-list and workspace-indicator
|
||||||
|
[Florian; !307, !316]
|
||||||
|
* apps-menu: Fix a11y of category labels [Florian; !319]
|
||||||
|
* window-list: Fix long-press support [Florian; !320]
|
||||||
|
* window-list: Animate transitions [Florian; !325]
|
||||||
|
* Misc. bug fixes and cleanups [Florian; !315, !321, !324]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Jordi Mas i Hernandez [ca], Martin [sl], Hugo Carvalho [pt], Jose Riha [sk],
|
||||||
|
Scrambled 777 [hi], Artur S0 [ru], Милош Поповић [sr], Yosef Or Boczko [he],
|
||||||
|
Balázs Úr [hu]
|
||||||
|
|
||||||
|
46.1
|
||||||
|
====
|
||||||
|
* screenshot-window-sizer: Add flathub-recommended size [Florian; !317]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Rachida SACI [kab], Matheus Polkorny [pt_BR], Fabio Tomat [fur]
|
||||||
|
|
||||||
|
46.0
|
||||||
|
====
|
||||||
|
* system-monitor: Fix net speed [Florian; !313]
|
||||||
|
* Misc. bug fixes and cleanups [Aral; !311]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Aral Balkan, Florian Müllner
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Anders Jonsson [sv], Piotr Drąg [pl], Balázs Úr [hu], Milo Casagrande [it],
|
||||||
|
Quentin PAGÈS [oc], Athmane MOKRAOUI [kab], Changwoo Ryu [ko],
|
||||||
|
Ask Hjorth Larsen [da]
|
||||||
|
|
||||||
|
46.rc
|
||||||
|
=====
|
||||||
|
* Fix window previews in workspace indicator [Florian; !304]
|
||||||
|
* Fix menu ornament in workspace indicator [Florian; !305]
|
||||||
|
* Misc. bug fixes and cleanups [Florian; !306, !309]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Danial Behzadi [fa], Ekaterine Papava [ka], Sabri Ünal [tr], Artur S0 [ru],
|
||||||
|
Yuri Chornoivan [uk], Vasil Pupkin [be], Asier Sarasua Garmendia [eu],
|
||||||
|
Yaron Shahrabani [he], Brage Fuglseth [nb], Nathan Follens [nl],
|
||||||
|
Aurimas Černius [lt], Matej Urbančič [sl], Boyuan Yang [zh_CN],
|
||||||
|
Kukuh Syafaat [id], Fran Dieguez [gl], Andi Chandler [en_GB],
|
||||||
|
Baurzhan Muftakhidinov [kk], Rūdolfs Mazurs [lv], Guillaume Bernard [fr],
|
||||||
|
Daniel Mustieles [es], Jiri Grönroos [fi]
|
||||||
|
|
||||||
|
46.beta
|
||||||
|
=======
|
||||||
|
* apps-menu: Rename Applications to Apps [Allan; !299]
|
||||||
|
* Misc. bug fixes and cleanups [Florian; !296, !297, !300, !301, !302]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Allan Day, Florian Müllner
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Gabriel Brand [de], Daniel Rusek [cs], Fran Dieguez [gl],
|
||||||
|
Aefgh Threenine [th], Vasil Pupkin [be], Artur S0 [ru], Yosef Or Boczko [he],
|
||||||
|
Sabri Ünal [tr]
|
||||||
|
|
||||||
|
46.alpha
|
||||||
|
========
|
||||||
|
* workspace-indicator: Fix initial preview visibility [Florian; !280, !292]
|
||||||
|
* screenshot-window-sizer: Fix cycling between sizes backwards [Florian; !284]
|
||||||
|
* Add back overview in Classic session [Florian; !287]
|
||||||
|
* Allow running Classic session headless [Jonas; !289]
|
||||||
|
* window-list: Fix buttons not being clickable at the screen edge
|
||||||
|
[Florian; !291]
|
||||||
|
* Add system-monitor extension [Florian; !277]
|
||||||
|
* Fixed crash [Florian; !290]
|
||||||
|
* Misc. bug fixes and cleanups [Florian; !276, !275, !278, !281, !286, !288]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Florian Müllner
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Kristjan SCHMIDT [eo], Brage Fuglseth [nb]
|
||||||
|
|
||||||
45.0
|
45.0
|
||||||
====
|
====
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ GSettings key.
|
|||||||
|
|
||||||
* screenshot-window-sizer
|
* screenshot-window-sizer
|
||||||
|
|
||||||
Adds a shortcut for resizing the focus window to a size that is suitable for GNOME Software screenshots
|
Adds a shortcut for resizing the focus window to a size that is suitable for GNOME Software screenshots. Ctrl + Alt + s cycles forwards through the available sizes and Ctrl + Alt + Shift + s cycles backwards.
|
||||||
|
|
||||||
* user-theme
|
* user-theme
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
{
|
{
|
||||||
"parentMode": "user",
|
"parentMode": "user",
|
||||||
"colorScheme": "force-light",
|
"colorScheme": "force-light",
|
||||||
"hasOverview": false,
|
|
||||||
"showWelcomeDialog": false,
|
"showWelcomeDialog": false,
|
||||||
"enabledExtensions": [@CLASSIC_EXTENSIONS@],
|
"enabledExtensions": [@CLASSIC_EXTENSIONS@],
|
||||||
"panel": { "left": [],
|
"panel": { "left": ["activities"],
|
||||||
"center": [],
|
"center": [],
|
||||||
"right": ["a11y", "keyboard", "dateMenu", "quickSettings"]
|
"right": ["screenRecording", "screenSharing", "dwellClick", "a11y", "keyboard", "dateMenu", "quickSettings"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,3 +6,4 @@ TryExec=gnome-session
|
|||||||
Type=Application
|
Type=Application
|
||||||
DesktopNames=GNOME-Classic;GNOME;
|
DesktopNames=GNOME-Classic;GNOME;
|
||||||
X-GDM-SessionRegisters=true
|
X-GDM-SessionRegisters=true
|
||||||
|
X-GDM-CanRunHeadless=true
|
||||||
|
|||||||
@@ -6,3 +6,4 @@ TryExec=gnome-session
|
|||||||
Type=Application
|
Type=Application
|
||||||
DesktopNames=GNOME-Classic;GNOME;
|
DesktopNames=GNOME-Classic;GNOME;
|
||||||
X-GDM-SessionRegisters=true
|
X-GDM-SessionRegisters=true
|
||||||
|
X-GDM-CanRunHeadless=true
|
||||||
|
|||||||
+24
-24
@@ -10,33 +10,33 @@ session_desktops = [
|
|||||||
session_desktop_base + '-wayland',
|
session_desktop_base + '-wayland',
|
||||||
]
|
]
|
||||||
|
|
||||||
foreach name: session_desktops
|
foreach name : session_desktops
|
||||||
session_desktop = name + '.desktop'
|
session_desktop = name + '.desktop'
|
||||||
if name.endswith('-xorg')
|
if name.endswith('-xorg')
|
||||||
session_instdir = xsessiondir
|
session_instdir = xsessiondir
|
||||||
elif name.endswith('-wayland')
|
elif name.endswith('-wayland')
|
||||||
session_instdir = wlsessiondir
|
session_instdir = wlsessiondir
|
||||||
else
|
else
|
||||||
# FIXME: The same target can not be copied into two directories.
|
# FIXME: The same target can not be copied into two directories.
|
||||||
# There is a workaround in meson/session-post-install.py until proper
|
# There is a workaround in meson/session-post-install.py until proper
|
||||||
# solution arises:
|
# solution arises:
|
||||||
# https://github.com/mesonbuild/meson/issues/2416
|
# https://github.com/mesonbuild/meson/issues/2416
|
||||||
session_instdir = xsessiondir
|
session_instdir = xsessiondir
|
||||||
#session_instdir = [ xesssiondir, wlsessiondir ]
|
#session_instdir = [ xesssiondir, wlsessiondir ]
|
||||||
endif
|
endif
|
||||||
i18n.merge_file(
|
i18n.merge_file(
|
||||||
input: session_desktop + '.in',
|
input: session_desktop + '.in',
|
||||||
output: session_desktop,
|
output: session_desktop,
|
||||||
po_dir: '../po',
|
po_dir: '../po',
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: session_instdir,
|
install_dir: session_instdir,
|
||||||
type: 'desktop'
|
type: 'desktop',
|
||||||
)
|
)
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
classic_uuids = []
|
classic_uuids = []
|
||||||
foreach e : classic_extensions
|
foreach e : classic_extensions
|
||||||
classic_uuids += e + uuid_suffix
|
classic_uuids += e + uuid_suffix
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
mode_conf = configuration_data()
|
mode_conf = configuration_data()
|
||||||
@@ -47,7 +47,7 @@ configure_file(
|
|||||||
input: mode_file + '.in',
|
input: mode_file + '.in',
|
||||||
output: mode_file,
|
output: mode_file,
|
||||||
configuration: mode_conf,
|
configuration: mode_conf,
|
||||||
install_dir: modedir
|
install_dir: modedir,
|
||||||
)
|
)
|
||||||
|
|
||||||
classic_override = '00_org.gnome.shell.extensions.classic.gschema.override'
|
classic_override = '00_org.gnome.shell.extensions.classic.gschema.override'
|
||||||
|
|||||||
Vendored
+1040
File diff suppressed because it is too large
Load Diff
Vendored
+309
@@ -0,0 +1,309 @@
|
|||||||
|
Source: gnome-shell-extensions
|
||||||
|
Section: gnome
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
|
||||||
|
Uploaders: Iain Lane <laney@debian.org>, Jeremy Bícha <jbicha@ubuntu.com>, Laurent Bigonville <bigon@debian.org>, Marco Trevisan (Treviño) <marco@ubuntu.com>
|
||||||
|
Build-Depends: debhelper-compat (= 13),
|
||||||
|
dh-sequence-gnome,
|
||||||
|
dpkg-build-api (= 1),
|
||||||
|
libglib2.0-bin,
|
||||||
|
meson (>= 1.1.0),
|
||||||
|
sassc
|
||||||
|
Standards-Version: 4.7.0
|
||||||
|
Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell-extensions
|
||||||
|
Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell-extensions.git
|
||||||
|
Homepage: https://wiki.gnome.org/Projects/GnomeShell/Extensions
|
||||||
|
|
||||||
|
Package: gnome-shell-extensions
|
||||||
|
Section: oldlibs
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell-extension-apps-menu,
|
||||||
|
gnome-shell-extension-auto-move-windows,
|
||||||
|
gnome-shell-extension-drive-menu,
|
||||||
|
gnome-shell-extension-launch-new-instance,
|
||||||
|
gnome-shell-extension-light-style,
|
||||||
|
gnome-shell-extension-native-window-placement,
|
||||||
|
gnome-shell-extension-places-menu,
|
||||||
|
gnome-shell-extensions-common,
|
||||||
|
gnome-shell-extension-screenshot-window-sizer,
|
||||||
|
gnome-shell-extension-system-monitor,
|
||||||
|
gnome-shell-extension-user-theme,
|
||||||
|
gnome-shell-extension-window-list,
|
||||||
|
gnome-shell-extension-windows-navigator,
|
||||||
|
gnome-shell-extension-workspace-indicator,
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-classic
|
||||||
|
Description: Extensions to extend functionality of GNOME Shell
|
||||||
|
GNOME Shell is extensible using extensions. This package contains
|
||||||
|
all the official GNOME Shell extensions.
|
||||||
|
.
|
||||||
|
This is an empty transitional package and will likely be removed
|
||||||
|
in the future.
|
||||||
|
|
||||||
|
Package: gnome-classic
|
||||||
|
Architecture: all
|
||||||
|
Depends: fonts-cantarell,
|
||||||
|
gnome-session,
|
||||||
|
gnome-session-bin (>= 46),
|
||||||
|
gnome-session-common (>= 46),
|
||||||
|
gnome-shell-extension-apps-menu,
|
||||||
|
gnome-shell-extension-places-menu,
|
||||||
|
gnome-shell-extension-launch-new-instance,
|
||||||
|
gnome-shell-extension-window-list,
|
||||||
|
xdg-desktop-portal-gnome,
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-classic-xsession
|
||||||
|
Provides: x-session-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: Classic version of the GNOME desktop
|
||||||
|
This package contains the required components for the GNOME Classic
|
||||||
|
session, based on the GNOME Shell. It can be started from a display
|
||||||
|
manager such as GDM, and requires 3D acceleration to work properly.
|
||||||
|
.
|
||||||
|
The GNOME Shell provides core interface functions like switching
|
||||||
|
windows, launching applications or see your notifications. It takes
|
||||||
|
advantage of the capabilities of modern graphics hardware and
|
||||||
|
introduces innovative user interface concepts to provide a
|
||||||
|
delightful and easy to use experience. GNOME Shell is the defining
|
||||||
|
technology of the GNOME user experience.
|
||||||
|
.
|
||||||
|
GNOME Classic provides an alternative version of GNOME Shell that uses
|
||||||
|
more traditional design elements.
|
||||||
|
|
||||||
|
Package: gnome-classic-xsession
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-classic,
|
||||||
|
${misc:Depends}
|
||||||
|
Provides: x-session-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: Classic version of the GNOME desktop using Xorg
|
||||||
|
This package contains the required components for the GNOME Classic on Xorg
|
||||||
|
session, based on the GNOME Shell. It can be started from a display
|
||||||
|
manager such as GDM, and requires 3D acceleration to work properly.
|
||||||
|
.
|
||||||
|
The GNOME Shell provides core interface functions like switching
|
||||||
|
windows, launching applications or see your notifications. It takes
|
||||||
|
advantage of the capabilities of modern graphics hardware and
|
||||||
|
introduces innovative user interface concepts to provide a
|
||||||
|
delightful and easy to use experience. GNOME Shell is the defining
|
||||||
|
technology of the GNOME user experience.
|
||||||
|
.
|
||||||
|
GNOME Classic provides an alternative version of GNOME Shell that uses
|
||||||
|
more traditional design elements.
|
||||||
|
|
||||||
|
Package: gnome-shell-extensions-common
|
||||||
|
Architecture: all
|
||||||
|
Depends: ${misc:Depends}
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: common files for official GNOME Shell extensions
|
||||||
|
GNOME Shell is extensible using extensions. This package contains
|
||||||
|
common data files such as translations for the official GNOME Shell
|
||||||
|
extensions.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-apps-menu
|
||||||
|
Architecture: all
|
||||||
|
Depends: gir1.2-gmenu-3.0,
|
||||||
|
gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: Category based app menu for GNOME Shell
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to add a category based Apps menu
|
||||||
|
similar to what is found in classic desktops.
|
||||||
|
.
|
||||||
|
This package is part of the GNOME Classic default set of extensions.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-auto-move-windows
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: GNOME Shell extension to move apps to specific workspaces
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to move apps to specific workspaces when
|
||||||
|
they create windows.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-drive-menu
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: Removable drive status menu for GNOME Shell
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to add a status menu for accessing and
|
||||||
|
unmounting removable devices.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-launch-new-instance
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: GNOME Shell extension to launch new instances of apps
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to always launch a new instance of an
|
||||||
|
app when clicking in the Dash or the application view.
|
||||||
|
.
|
||||||
|
This package is part of the GNOME Classic default set of extensions.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-light-style
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: GNOME Shell extension to switch the Shell to light style
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to switch GNOME Shell to use a light
|
||||||
|
style instead of the default.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-native-window-placement
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: GNOME Shell extension to arrange windows in a more compact way
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to arrange windows in the GNOME Shell
|
||||||
|
overview in a more compact way.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-places-menu
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: Places menu for GNOME Shell
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to add a menu for quickly navigating to
|
||||||
|
places in the system, similar to the menu in GNOME 2.
|
||||||
|
.
|
||||||
|
This package is part of the GNOME Classic default set of extensions.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-screenshot-window-sizer
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: GNOME Shell extension to resize windows for GNOME Software screenshots
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to resize windows to the recommended
|
||||||
|
size for creating screenshots for use in the GNOME Software app.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-status-icons
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Description: GNOME Shell extension to show some status icons in the top bar
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to show some status icons in the top bar.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-system-monitor
|
||||||
|
Architecture: all
|
||||||
|
Depends: gir1.2-gtop-2.0,
|
||||||
|
gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: Display system information in GNOME Shell status bar
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to display system information such as
|
||||||
|
memory usage, cpu usage, network rates and more in the top bar.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-user-theme
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: GNOME Shell extension to load alternative GNOME Shell themes
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to allow switching to alternative
|
||||||
|
GNOME Shell themes.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-window-list
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: GNOME Shell extension to display a window list
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to display a window list at the bottom
|
||||||
|
of the screen.
|
||||||
|
.
|
||||||
|
This package is part of the GNOME Classic default set of extensions.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-windows-navigator
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: GNOME Shell extension to allow keyboard selection in overlay mode
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to allow keyboard selections of windows
|
||||||
|
and workspaces in overlay mode. Ctrl+number selects a workspace and
|
||||||
|
Alt+number selects a window.
|
||||||
|
|
||||||
|
Package: gnome-shell-extension-workspace-indicator
|
||||||
|
Architecture: all
|
||||||
|
Depends: gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gnome-shell-extensions-common (= ${source:Version}),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs | gnome-shell-extension-manager
|
||||||
|
Breaks: gnome-shell-extensions (<< 47)
|
||||||
|
Replaces: gnome-shell-extensions (<< 47)
|
||||||
|
Description: Workspace indicator for GNOME Shell
|
||||||
|
GNOME Shell is extensible using extensions. This package contains an
|
||||||
|
official GNOME Shell extension to add an indicator to the panel to
|
||||||
|
show what workspace you are using and allow you to switch to a different
|
||||||
|
workspace.
|
||||||
Vendored
+169
@@ -0,0 +1,169 @@
|
|||||||
|
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Source: https://download.gnome.org/sources/gnome-shell-extensions/
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: 2011-2013 Giovanni Campagna
|
||||||
|
2013-2024 Florian Müllner
|
||||||
|
2011 Iranian Free Software Users Group (IFSUG.org) translation team
|
||||||
|
2021-2022 Alexander Shopov
|
||||||
|
2011-2023 Red Hat, Inc
|
||||||
|
2013 Rosetta Contributors and Canonical Ltd
|
||||||
|
Free Software Foundation, Inc
|
||||||
|
Rūdofls Mazurs
|
||||||
|
Ville-Pekka Vainio
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: debian/*
|
||||||
|
Copyright: 2011 Victor Seva <linuxmaniac@torreviejawireless.org>
|
||||||
|
2011 Bilal Akhtar <bilalakhtar@ubuntu.com>
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/apps-menu/extension.js
|
||||||
|
Copyright: 2011 Giovanni Campagna
|
||||||
|
2011 Vamsi Krishna Brahmajosyula
|
||||||
|
2013 Debarshi Ray
|
||||||
|
2013 Florian Müllner
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/auto-move-windows/extension.js
|
||||||
|
Copyright: 2011 Alessandro Crismani
|
||||||
|
2011 Giovanni Campagna
|
||||||
|
2014 Florian Müllner
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/launch-new-instance/extension.js
|
||||||
|
Copyright: 2013 Florian Müllner
|
||||||
|
2013 Gabriel Rossetti
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/native-window-placement/extension.js
|
||||||
|
Copyright: 2011 Giovanni Campagna
|
||||||
|
2011 Stefano Facchini
|
||||||
|
2011 Wepmaschda
|
||||||
|
2015 Florian Müllner
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/places-menu/extension.js
|
||||||
|
Copyright: 2011 Giovanni Campagna
|
||||||
|
2011 Vamsi Krishna Brahmajosyula
|
||||||
|
2013 Florian Müllner
|
||||||
|
2016 Rémy Lefevre
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/places-menu/placeDisplay.js
|
||||||
|
Copyright: 2012 Giovanni Campagna
|
||||||
|
2013 Debarshi Ray
|
||||||
|
2015 Florian Müllner
|
||||||
|
2016 Rémy Lefevre
|
||||||
|
2017 Christian Kellner
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/screenshot-window-sizer/extension.js
|
||||||
|
Copyright: 2013 Owen Taylor
|
||||||
|
2013 Richard Hughes
|
||||||
|
2014 Florian Müllner
|
||||||
|
2016 Will Thompson
|
||||||
|
2017 Florian Müllner
|
||||||
|
2019 Adrien Plazas
|
||||||
|
2019 Willy Stadnick
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/status-icons/extension.js
|
||||||
|
Copyright: 2018 Adel Gadllah
|
||||||
|
2018 Florian Müllner
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/system-monitor/icons/*
|
||||||
|
Copyright: GNOME Design Team Icon Development Kit
|
||||||
|
License: CC0-1.0
|
||||||
|
|
||||||
|
Files: extensions/user-theme/extension.js
|
||||||
|
Copyright: 2011 Elad Alfassa
|
||||||
|
2011 Giovanni Campagna
|
||||||
|
2011 John Stowers
|
||||||
|
2014 Florian Müllner
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/window-list/prefs.js
|
||||||
|
Copyright: 2013 Florian Müllner
|
||||||
|
2014 Sylvain Pasche
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/window-list/stylesheet-light.css
|
||||||
|
extensions/workspace-indicator/stylesheet-light.css
|
||||||
|
Copyright: 2011-2013 Giovanni Campagna
|
||||||
|
2013-2024 Florian Müllner
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/windowsNavigator/extension.js
|
||||||
|
Copyright: 2011 Giovanni Campagna
|
||||||
|
2011, Maxim Ermilov
|
||||||
|
2017, Florian Müllner
|
||||||
|
2019, Marco Trevisan (Treviño)
|
||||||
|
2020, Thun Pin
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/windowsNavigator/stylesheet.css
|
||||||
|
Copyright: 2011 Maxim Ermilov
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: extensions/workspace-indicator/stylesheet-dark.css
|
||||||
|
Copyright: 2011 Erick Pérez Castellanos
|
||||||
|
2019 Florian Müllner
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: lint/eslintrc-gjs.yml
|
||||||
|
Copyright: 2018 Claudio André
|
||||||
|
License: Expat
|
||||||
|
|
||||||
|
Files: lint/eslintrc-shell.yml
|
||||||
|
Copyright: 2019 Florian Müllner
|
||||||
|
License: Expat
|
||||||
|
|
||||||
|
Files: meson/session-post-install.py
|
||||||
|
Copyright: 2021, Neal Gompa
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
License: CC0-1.0
|
||||||
|
To the extent possible under law, the author(s) have dedicated all copyright
|
||||||
|
and related and neighboring rights to this software to the public domain
|
||||||
|
worldwide. This software is distributed without any warranty.
|
||||||
|
.
|
||||||
|
You should have received a copy of the CC0 Public Domain Dedication along with
|
||||||
|
this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the CC0 1.0 Universal license can be
|
||||||
|
found in "/usr/share/common-licenses/CC0-1.0".
|
||||||
|
|
||||||
|
License: Expat
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
.
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
License: GPL-2+
|
||||||
|
This package is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
.
|
||||||
|
This package is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the GNU General
|
||||||
|
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
|
||||||
Vendored
+2
@@ -0,0 +1,2 @@
|
|||||||
|
NEWS
|
||||||
|
README.md
|
||||||
Vendored
+17
@@ -0,0 +1,17 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
pristine-tar = True
|
||||||
|
debian-branch = debian/latest
|
||||||
|
upstream-branch = upstream/latest
|
||||||
|
|
||||||
|
[buildpackage]
|
||||||
|
sign-tags = True
|
||||||
|
|
||||||
|
[dch]
|
||||||
|
multimaint-merge = True
|
||||||
|
|
||||||
|
[import-orig]
|
||||||
|
postimport = dch -v%(version)s New upstream release; git add debian/changelog; debcommit
|
||||||
|
upstream-vcs-tag = %(version%~%.)s
|
||||||
|
|
||||||
|
[pq]
|
||||||
|
patch-numbers = False
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
usr/share/xsessions
|
||||||
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
debian/local/gnome-session-classic usr/bin
|
||||||
|
usr/share/glib-2.0/schemas/00_org.gnome.shell.extensions.classic.gschema.override
|
||||||
|
usr/share/gnome-shell/modes/classic.json
|
||||||
|
usr/share/wayland-sessions
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
usr/share/glib-2.0/schemas/org.gnome.shell.extensions.apps-menu.gschema.xml
|
||||||
|
usr/share/gnome-shell/extensions/apps-menu@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
usr/share/glib-2.0/schemas/org.gnome.shell.extensions.auto-move-windows.gschema.xml
|
||||||
|
usr/share/gnome-shell/extensions/auto-move-windows@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
usr/share/gnome-shell/extensions/drive-menu@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
usr/share/gnome-shell/extensions/launch-new-instance@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
usr/share/gnome-shell/extensions/light-style@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
usr/share/glib-2.0/schemas/org.gnome.shell.extensions.native-window-placement.gschema.xml
|
||||||
|
usr/share/gnome-shell/extensions/native-window-placement@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
usr/share/gnome-shell/extensions/places-menu@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
usr/share/glib-2.0/schemas/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml
|
||||||
|
usr/share/gnome-shell/extensions/screenshot-window-sizer@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
usr/share/gnome-shell/extensions/status-icons@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
usr/share/glib-2.0/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml
|
||||||
|
usr/share/gnome-shell/extensions/system-monitor@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
usr/share/glib-2.0/schemas/org.gnome.shell.extensions.user-theme.gschema.xml
|
||||||
|
usr/share/gnome-shell/extensions/user-theme@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
usr/share/glib-2.0/schemas/org.gnome.shell.extensions.window-list.gschema.xml
|
||||||
|
usr/share/gnome-shell/extensions/window-list@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
usr/share/gnome-shell/extensions/windowsNavigator@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
usr/share/glib-2.0/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml
|
||||||
|
usr/share/gnome-shell/extensions/workspace-indicator@gnome-shell-extensions.gcampax.github.com
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
usr/share/locale
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
env GNOME_SHELL_SESSION_MODE=classic gnome-session "$@"
|
||||||
Vendored
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
override_dh_auto_configure:
|
||||||
|
dh_auto_configure -- \
|
||||||
|
-Dextension_set=all \
|
||||||
|
-Dclassic_mode=true
|
||||||
|
|
||||||
|
override_dh_gnome_clean:
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
3.0 (quilt)
|
||||||
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
Bug-Database: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues
|
||||||
|
Bug-Submit: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/new
|
||||||
|
Repository: https://gitlab.gnome.org/GNOME/gnome-shell-extensions.git
|
||||||
|
Repository-Browse: https://gitlab.gnome.org/GNOME/gnome-shell-extensions
|
||||||
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
version=4
|
||||||
|
opts="searchmode=plain, uversionmangle=s/\.(alpha|beta|rc)/~$1/, downloadurlmangle=s|cache.json||" \
|
||||||
|
https://download.gnome.org/sources/@PACKAGE@/cache.json \
|
||||||
|
[\d.]+/@PACKAGE@-([\d.]+\.?(?:beta|rc)?[\d.]*)@ARCHIVE_EXT@
|
||||||
+9
-7
@@ -8,16 +8,16 @@ srcdir=`dirname $0`
|
|||||||
srcdir=`(cd $srcdir && pwd)`
|
srcdir=`(cd $srcdir && pwd)`
|
||||||
|
|
||||||
builddir=`mktemp -p $srcdir -d _build.XXXXXX` || exit 1
|
builddir=`mktemp -p $srcdir -d _build.XXXXXX` || exit 1
|
||||||
installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1
|
destdir=`mktemp -p $srcdir -d _dest.XXXXXX` || exit 1
|
||||||
|
|
||||||
meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir
|
meson setup --prefix=/usr -Dextension_set=all $srcdir $builddir
|
||||||
meson install -C $builddir
|
meson install --destdir $destdir -C $builddir
|
||||||
|
|
||||||
rm -rf $srcdir/zip-files
|
rm -rf $srcdir/zip-files
|
||||||
mkdir $srcdir/zip-files
|
mkdir $srcdir/zip-files
|
||||||
|
|
||||||
extensiondir=$installdir/share/gnome-shell/extensions
|
extensiondir=$destdir/usr/share/gnome-shell/extensions
|
||||||
schemadir=$installdir/share/glib-2.0/schemas
|
schemadir=$destdir/usr/share/glib-2.0/schemas
|
||||||
|
|
||||||
for f in $extensiondir/*; do
|
for f in $extensiondir/*; do
|
||||||
name=`basename ${f%%@*}`
|
name=`basename ${f%%@*}`
|
||||||
@@ -39,7 +39,9 @@ for f in $extensiondir/*; do
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
cp $srcdir/NEWS $srcdir/COPYING $f
|
cp $srcdir/NEWS $srcdir/COPYING $f
|
||||||
sources=(NEWS COPYING $(cd $f; ls *.js))
|
sources=(NEWS COPYING $(cd $f; ls *.js *.css 2>/dev/null))
|
||||||
|
|
||||||
|
[ -d $f/icons ] && sources+=(icons)
|
||||||
|
|
||||||
[ -f $schema ] || unset schema
|
[ -f $schema ] || unset schema
|
||||||
|
|
||||||
@@ -48,4 +50,4 @@ for f in $extensiondir/*; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
rm -rf $builddir
|
rm -rf $builddir
|
||||||
rm -rf $installdir
|
rm -rf $destdir
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
||||||
import Atk from 'gi://Atk';
|
import Atk from 'gi://Atk';
|
||||||
import Clutter from 'gi://Clutter';
|
import Clutter from 'gi://Clutter';
|
||||||
import Gio from 'gi://Gio';
|
import Gio from 'gi://Gio';
|
||||||
@@ -125,7 +124,10 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|||||||
else
|
else
|
||||||
name = _('Favorites');
|
name = _('Favorites');
|
||||||
|
|
||||||
this.add_child(new St.Label({text: name}));
|
const label = new St.Label({text: name});
|
||||||
|
this.add_child(label);
|
||||||
|
this.actor.label_actor = label;
|
||||||
|
|
||||||
this.connect('motion-event', this._onMotionEvent.bind(this));
|
this.connect('motion-event', this._onMotionEvent.bind(this));
|
||||||
this.connect('notify::active', this._onActiveChanged.bind(this));
|
this.connect('notify::active', this._onActiveChanged.bind(this));
|
||||||
}
|
}
|
||||||
@@ -214,9 +216,9 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|||||||
this._grab?.dismiss();
|
this._grab?.dismiss();
|
||||||
delete this._grab;
|
delete this._grab;
|
||||||
|
|
||||||
let source = event.get_source();
|
const targetActor = global.stage.get_event_actor(event);
|
||||||
if (source instanceof St.Widget)
|
if (targetActor instanceof St.Widget)
|
||||||
source.sync_hover();
|
targetActor.sync_hover();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -255,7 +257,7 @@ class DesktopTarget extends EventEmitter {
|
|||||||
this._desktopDestroyedId = 0;
|
this._desktopDestroyedId = 0;
|
||||||
|
|
||||||
this._windowAddedId =
|
this._windowAddedId =
|
||||||
global.window_group.connect('actor-added',
|
global.window_group.connect('child-added',
|
||||||
this._onWindowAdded.bind(this));
|
this._onWindowAdded.bind(this));
|
||||||
|
|
||||||
global.get_window_actors().forEach(a => {
|
global.get_window_actors().forEach(a => {
|
||||||
@@ -363,6 +365,20 @@ class DesktopTarget extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MainLayout extends Clutter.BoxLayout {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_get_preferred_height(container, forWidth) {
|
||||||
|
const [mainChild] = container;
|
||||||
|
const [minHeight, natHeight] =
|
||||||
|
mainChild.get_preferred_height(forWidth);
|
||||||
|
|
||||||
|
return [minHeight, natHeight + MENU_HEIGHT_OFFSET];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class ApplicationsButton extends PanelMenu.Button {
|
class ApplicationsButton extends PanelMenu.Button {
|
||||||
static {
|
static {
|
||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
@@ -380,12 +396,12 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
this.accessible_role = Atk.Role.LABEL;
|
this.accessible_role = Atk.Role.LABEL;
|
||||||
|
|
||||||
this._label = new St.Label({
|
this._label = new St.Label({
|
||||||
text: _('Applications'),
|
text: _('Apps'),
|
||||||
y_expand: true,
|
y_expand: true,
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
y_align: Clutter.ActorAlign.CENTER,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.add_actor(this._label);
|
this.add_child(this._label);
|
||||||
this.name = 'panelApplications';
|
this.name = 'panelApplications';
|
||||||
this.label_actor = this._label;
|
this.label_actor = this._label;
|
||||||
|
|
||||||
@@ -432,15 +448,6 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_createVertSeparator() {
|
|
||||||
let separator = new St.DrawingArea({
|
|
||||||
style_class: 'calendar-vertical-separator',
|
|
||||||
pseudo_class: 'highlighted',
|
|
||||||
});
|
|
||||||
separator.connect('repaint', this._onVertSepRepaint.bind(this));
|
|
||||||
return separator;
|
|
||||||
}
|
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
super._onDestroy();
|
super._onDestroy();
|
||||||
|
|
||||||
@@ -462,21 +469,6 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
return super._onMenuKeyPress(actor, event);
|
return super._onMenuKeyPress(actor, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onVertSepRepaint(area) {
|
|
||||||
let cr = area.get_context();
|
|
||||||
let themeNode = area.get_theme_node();
|
|
||||||
let [width, height] = area.get_surface_size();
|
|
||||||
let stippleColor = themeNode.get_color('-stipple-color');
|
|
||||||
let stippleWidth = themeNode.get_length('-stipple-width');
|
|
||||||
let x = Math.floor(width / 2) + 0.5;
|
|
||||||
cr.moveTo(x, 0);
|
|
||||||
cr.lineTo(x, height);
|
|
||||||
Clutter.cairo_set_source_color(cr, stippleColor);
|
|
||||||
cr.setDash([1, 3], 1); // Hard-code for now
|
|
||||||
cr.setLineWidth(stippleWidth);
|
|
||||||
cr.stroke();
|
|
||||||
}
|
|
||||||
|
|
||||||
_onOpenStateChanged(menu, open) {
|
_onOpenStateChanged(menu, open) {
|
||||||
if (open) {
|
if (open) {
|
||||||
if (this.reloadFlag) {
|
if (this.reloadFlag) {
|
||||||
@@ -522,7 +514,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
scrollToButton(button) {
|
scrollToButton(button) {
|
||||||
let appsScrollBoxAdj = this.applicationsScrollBox.get_vscroll_bar().get_adjustment();
|
let appsScrollBoxAdj = this.applicationsScrollBox.get_vadjustment();
|
||||||
let appsScrollBoxAlloc = this.applicationsScrollBox.get_allocation_box();
|
let appsScrollBoxAlloc = this.applicationsScrollBox.get_allocation_box();
|
||||||
let currentScrollValue = appsScrollBoxAdj.get_value();
|
let currentScrollValue = appsScrollBoxAdj.get_value();
|
||||||
let boxHeight = appsScrollBoxAlloc.y2 - appsScrollBoxAlloc.y1;
|
let boxHeight = appsScrollBoxAlloc.y2 - appsScrollBoxAlloc.y1;
|
||||||
@@ -537,7 +529,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
scrollToCatButton(button) {
|
scrollToCatButton(button) {
|
||||||
let catsScrollBoxAdj = this.categoriesScrollBox.get_vscroll_bar().get_adjustment();
|
let catsScrollBoxAdj = this.categoriesScrollBox.get_vadjustment();
|
||||||
let catsScrollBoxAlloc = this.categoriesScrollBox.get_allocation_box();
|
let catsScrollBoxAlloc = this.categoriesScrollBox.get_allocation_box();
|
||||||
let currentScrollValue = catsScrollBoxAdj.get_value();
|
let currentScrollValue = catsScrollBoxAdj.get_value();
|
||||||
let boxHeight = catsScrollBoxAlloc.y2 - catsScrollBoxAlloc.y1;
|
let boxHeight = catsScrollBoxAlloc.y2 - catsScrollBoxAlloc.y1;
|
||||||
@@ -554,43 +546,29 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
_createLayout() {
|
_createLayout() {
|
||||||
let section = new PopupMenu.PopupMenuSection();
|
let section = new PopupMenu.PopupMenuSection();
|
||||||
this.menu.addMenuItem(section);
|
this.menu.addMenuItem(section);
|
||||||
this.mainBox = new St.BoxLayout({vertical: false});
|
this.mainBox = new St.BoxLayout({layoutManager: new MainLayout()});
|
||||||
this.leftBox = new St.BoxLayout({vertical: true});
|
this.leftBox = new St.BoxLayout({vertical: true});
|
||||||
this.applicationsScrollBox = new St.ScrollView({
|
this.applicationsScrollBox = new St.ScrollView({
|
||||||
style_class: 'apps-menu vfade',
|
style_class: 'apps-menu vfade',
|
||||||
x_expand: true,
|
x_expand: true,
|
||||||
});
|
});
|
||||||
this.applicationsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
|
||||||
let vscroll = this.applicationsScrollBox.get_vscroll_bar();
|
|
||||||
vscroll.connect('scroll-start', () => {
|
|
||||||
this.menu.passEvents = true;
|
|
||||||
});
|
|
||||||
vscroll.connect('scroll-stop', () => {
|
|
||||||
this.menu.passEvents = false;
|
|
||||||
});
|
|
||||||
this.categoriesScrollBox = new St.ScrollView({
|
this.categoriesScrollBox = new St.ScrollView({
|
||||||
style_class: 'vfade',
|
style_class: 'vfade',
|
||||||
});
|
});
|
||||||
this.categoriesScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
|
||||||
vscroll = this.categoriesScrollBox.get_vscroll_bar();
|
|
||||||
vscroll.connect('scroll-start', () => (this.menu.passEvents = true));
|
|
||||||
vscroll.connect('scroll-stop', () => (this.menu.passEvents = false));
|
|
||||||
this.leftBox.add_child(this.categoriesScrollBox);
|
this.leftBox.add_child(this.categoriesScrollBox);
|
||||||
|
|
||||||
this.applicationsBox = new St.BoxLayout({vertical: true});
|
this.applicationsBox = new St.BoxLayout({vertical: true});
|
||||||
this.applicationsScrollBox.add_actor(this.applicationsBox);
|
this.applicationsScrollBox.set_child(this.applicationsBox);
|
||||||
this.categoriesBox = new St.BoxLayout({vertical: true});
|
this.categoriesBox = new St.BoxLayout({vertical: true});
|
||||||
this.categoriesScrollBox.add_actor(this.categoriesBox);
|
this.categoriesScrollBox.set_child(this.categoriesBox);
|
||||||
|
|
||||||
this.mainBox.add(this.leftBox);
|
this.mainBox.add_child(this.leftBox);
|
||||||
this.mainBox.add_child(this._createVertSeparator());
|
|
||||||
this.mainBox.add_child(this.applicationsScrollBox);
|
this.mainBox.add_child(this.applicationsScrollBox);
|
||||||
section.actor.add_actor(this.mainBox);
|
section.actor.add_child(this.mainBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
_display() {
|
_display() {
|
||||||
this._applicationsButtons.clear();
|
this._applicationsButtons.clear();
|
||||||
this.mainBox.style = 'width: 35em;';
|
|
||||||
this.mainBox.hide();
|
this.mainBox.hide();
|
||||||
|
|
||||||
// Load categories
|
// Load categories
|
||||||
@@ -598,7 +576,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
this._tree.load_sync();
|
this._tree.load_sync();
|
||||||
let root = this._tree.get_root_directory();
|
let root = this._tree.get_root_directory();
|
||||||
let categoryMenuItem = new CategoryMenuItem(this, null);
|
let categoryMenuItem = new CategoryMenuItem(this, null);
|
||||||
this.categoriesBox.add_actor(categoryMenuItem);
|
this.categoriesBox.add_child(categoryMenuItem);
|
||||||
let iter = root.iter();
|
let iter = root.iter();
|
||||||
let nextType;
|
let nextType;
|
||||||
while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
|
while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
|
||||||
@@ -614,18 +592,12 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
this._loadCategory(categoryId, dir);
|
this._loadCategory(categoryId, dir);
|
||||||
if (this.applicationsByCategory[categoryId].length > 0) {
|
if (this.applicationsByCategory[categoryId].length > 0) {
|
||||||
categoryMenuItem = new CategoryMenuItem(this, dir);
|
categoryMenuItem = new CategoryMenuItem(this, dir);
|
||||||
this.categoriesBox.add_actor(categoryMenuItem);
|
this.categoriesBox.add_child(categoryMenuItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load applications
|
// Load applications
|
||||||
this._displayButtons(this._listApplications(null));
|
this._displayButtons(this._listApplications(null));
|
||||||
|
|
||||||
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
|
||||||
let scaleFactor = themeContext.scale_factor;
|
|
||||||
let categoriesHeight = this.categoriesBox.height / scaleFactor;
|
|
||||||
let height = Math.round(categoriesHeight) + MENU_HEIGHT_OFFSET;
|
|
||||||
this.mainBox.style += `height: ${height}px`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
selectCategory(dir) {
|
selectCategory(dir) {
|
||||||
@@ -633,7 +605,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
if (c._delegate instanceof PopupMenu.PopupSeparatorMenuItem)
|
if (c._delegate instanceof PopupMenu.PopupSeparatorMenuItem)
|
||||||
c._delegate.destroy();
|
c._delegate.destroy();
|
||||||
else
|
else
|
||||||
this.applicationsBox.remove_actor(c);
|
this.applicationsBox.remove_child(c);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (dir)
|
if (dir)
|
||||||
@@ -656,7 +628,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
this._applicationsButtons.set(app, item);
|
this._applicationsButtons.set(app, item);
|
||||||
}
|
}
|
||||||
if (!item.get_parent())
|
if (!item.get_parent())
|
||||||
this.applicationsBox.add_actor(item);
|
this.applicationsBox.add_child(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
"uuid": "@uuid@",
|
"uuid": "@uuid@",
|
||||||
"settings-schema": "@gschemaname@",
|
"settings-schema": "@gschemaname@",
|
||||||
"gettext-domain": "@gettext_domain@",
|
"gettext-domain": "@gettext_domain@",
|
||||||
"name": "Applications Menu",
|
"name": "Apps Menu",
|
||||||
"description": "Add a category-based menu for applications.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME's GitLab instance instead.",
|
"description": "Add a category-based menu for apps.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME's GitLab instance instead.",
|
||||||
"original-authors": [ "e2002@bk.ru", "debarshir@gnome.org" ],
|
"original-authors": [ "e2002@bk.ru", "debarshir@gnome.org" ],
|
||||||
"shell-version": [ "@shell_current@" ],
|
"shell-version": [ "@shell_current@" ],
|
||||||
"url": "@url@"
|
"url": "@url@"
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
.apps-menu {width: 26em;}
|
||||||
|
|
||||||
.apps-menu:ltr {
|
.apps-menu:ltr {
|
||||||
padding-right: 3px;
|
padding-right: 3px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
||||||
// Start apps on custom workspaces
|
|
||||||
|
|
||||||
import Shell from 'gi://Shell';
|
import Shell from 'gi://Shell';
|
||||||
|
|
||||||
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
@@ -22,7 +19,8 @@ class WindowMover {
|
|||||||
this._appSystem.connectObject('installed-changed',
|
this._appSystem.connectObject('installed-changed',
|
||||||
() => this._updateAppData(), this);
|
() => this._updateAppData(), this);
|
||||||
|
|
||||||
this._settings.connect('changed', this._updateAppConfigs.bind(this));
|
this._settings.connectObject('changed',
|
||||||
|
this._updateAppConfigs.bind(this), this);
|
||||||
this._updateAppConfigs();
|
this._updateAppConfigs();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,11 +56,8 @@ class WindowMover {
|
|||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
this._appSystem.disconnectObject(this);
|
this._appSystem.disconnectObject(this);
|
||||||
|
this._settings.disconnectObject(this);
|
||||||
if (this._settings) {
|
this._settings = null;
|
||||||
this._settings.run_dispose();
|
|
||||||
this._settings = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._appConfigs.clear();
|
this._appConfigs.clear();
|
||||||
this._updateAppData();
|
this._updateAppData();
|
||||||
|
|||||||
@@ -3,9 +3,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
||||||
// Start apps on custom workspaces
|
|
||||||
|
|
||||||
import Adw from 'gi://Adw';
|
import Adw from 'gi://Adw';
|
||||||
import Gio from 'gi://Gio';
|
import Gio from 'gi://Gio';
|
||||||
import GLib from 'gi://GLib';
|
import GLib from 'gi://GLib';
|
||||||
@@ -45,11 +42,11 @@ class NewItemModel extends GObject.Object {
|
|||||||
class Rule extends GObject.Object {
|
class Rule extends GObject.Object {
|
||||||
static [GObject.properties] = {
|
static [GObject.properties] = {
|
||||||
'app-info': GObject.ParamSpec.object(
|
'app-info': GObject.ParamSpec.object(
|
||||||
'app-info', 'app-info', 'app-info',
|
'app-info', null, null,
|
||||||
GObject.ParamFlags.READWRITE,
|
GObject.ParamFlags.READWRITE,
|
||||||
Gio.DesktopAppInfo),
|
Gio.DesktopAppInfo),
|
||||||
'workspace': GObject.ParamSpec.uint(
|
'workspace': GObject.ParamSpec.uint(
|
||||||
'workspace', 'workspace', 'workspace',
|
'workspace', null, null,
|
||||||
GObject.ParamFlags.READWRITE,
|
GObject.ParamFlags.READWRITE,
|
||||||
1, WORKSPACE_MAX, 1),
|
1, WORKSPACE_MAX, 1),
|
||||||
};
|
};
|
||||||
@@ -196,7 +193,7 @@ class AutoMoveSettingsWidget extends Adw.PreferencesGroup {
|
|||||||
class WorkspaceSelector extends Gtk.Widget {
|
class WorkspaceSelector extends Gtk.Widget {
|
||||||
static [GObject.properties] = {
|
static [GObject.properties] = {
|
||||||
'number': GObject.ParamSpec.uint(
|
'number': GObject.ParamSpec.uint(
|
||||||
'number', 'number', 'number',
|
'number', null, null,
|
||||||
GObject.ParamFlags.READWRITE,
|
GObject.ParamFlags.READWRITE,
|
||||||
1, WORKSPACE_MAX, 1),
|
1, WORKSPACE_MAX, 1),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -39,8 +39,6 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|||||||
|
|
||||||
this.mount = mount;
|
this.mount = mount;
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
|
||||||
|
|
||||||
let ejectIcon = new St.Icon({
|
let ejectIcon = new St.Icon({
|
||||||
icon_name: 'media-eject-symbolic',
|
icon_name: 'media-eject-symbolic',
|
||||||
style_class: 'popup-menu-icon',
|
style_class: 'popup-menu-icon',
|
||||||
@@ -50,7 +48,7 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|||||||
style_class: 'button',
|
style_class: 'button',
|
||||||
});
|
});
|
||||||
ejectButton.connect('clicked', this._eject.bind(this));
|
ejectButton.connect('clicked', this._eject.bind(this));
|
||||||
this.add(ejectButton);
|
this.add_child(ejectButton);
|
||||||
|
|
||||||
this.hide();
|
this.hide();
|
||||||
|
|
||||||
|
|||||||
@@ -16,18 +16,20 @@ foreach e : enabled_extensions
|
|||||||
metadata_conf.set('gschemaname', 'org.gnome.shell.extensions.' + e)
|
metadata_conf.set('gschemaname', 'org.gnome.shell.extensions.' + e)
|
||||||
metadata_conf.set('gettext_domain', gettext_domain)
|
metadata_conf.set('gettext_domain', gettext_domain)
|
||||||
metadata_conf.set('shell_current', shell_version)
|
metadata_conf.set('shell_current', shell_version)
|
||||||
metadata_conf.set('url', 'https://gitlab.gnome.org/GNOME/gnome-shell-extensions')
|
metadata_conf.set(
|
||||||
|
'url',
|
||||||
|
'https://gitlab.gnome.org/GNOME/gnome-shell-extensions',
|
||||||
|
)
|
||||||
|
|
||||||
extension_sources = files(e + '/extension.js')
|
extension_sources = files(e + '/extension.js')
|
||||||
extension_data = []
|
extension_data = []
|
||||||
|
|
||||||
subdir(e)
|
subdir(e)
|
||||||
|
|
||||||
install_data (extension_sources + extension_data,
|
install_data(
|
||||||
install_dir: join_paths(extensiondir, uuid)
|
extension_sources + extension_data,
|
||||||
|
install_dir: join_paths(extensiondir, uuid),
|
||||||
)
|
)
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
install_data (extension_schemas,
|
install_data(extension_schemas, install_dir: schemadir)
|
||||||
install_dir: schemadir
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
||||||
import Clutter from 'gi://Clutter';
|
import Clutter from 'gi://Clutter';
|
||||||
|
|
||||||
import {Extension, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
|
import {Extension, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
||||||
import Clutter from 'gi://Clutter';
|
import Clutter from 'gi://Clutter';
|
||||||
import GObject from 'gi://GObject';
|
import GObject from 'gi://GObject';
|
||||||
import St from 'gi://St';
|
import St from 'gi://St';
|
||||||
@@ -20,32 +19,17 @@ import {PlacesManager} from './placeDisplay.js';
|
|||||||
|
|
||||||
const N_ = x => x;
|
const N_ = x => x;
|
||||||
|
|
||||||
const PLACE_ICON_SIZE = 16;
|
class PlaceMenuItem extends PopupMenu.PopupImageMenuItem {
|
||||||
|
|
||||||
class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|
||||||
static {
|
static {
|
||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(info) {
|
constructor(info) {
|
||||||
super({
|
super(info.name, info.icon, {
|
||||||
style_class: 'place-menu-item',
|
style_class: 'place-menu-item',
|
||||||
});
|
});
|
||||||
this._info = info;
|
this._info = info;
|
||||||
|
|
||||||
this._icon = new St.Icon({
|
|
||||||
gicon: info.icon,
|
|
||||||
icon_size: PLACE_ICON_SIZE,
|
|
||||||
});
|
|
||||||
this.add_child(this._icon);
|
|
||||||
|
|
||||||
this._label = new St.Label({
|
|
||||||
text: info.name,
|
|
||||||
x_expand: true,
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
});
|
|
||||||
this.add_child(this._label);
|
|
||||||
|
|
||||||
if (info.isRemovable()) {
|
if (info.isRemovable()) {
|
||||||
this._ejectIcon = new St.Icon({
|
this._ejectIcon = new St.Icon({
|
||||||
icon_name: 'media-eject-symbolic',
|
icon_name: 'media-eject-symbolic',
|
||||||
@@ -70,8 +54,8 @@ class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_propertiesChanged(info) {
|
_propertiesChanged(info) {
|
||||||
this._icon.gicon = info.icon;
|
this.setIcon(info.icon);
|
||||||
this._label.text = info.name;
|
this.label.text = info.name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +79,7 @@ class PlacesMenu extends PanelMenu.Button {
|
|||||||
y_expand: true,
|
y_expand: true,
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
y_align: Clutter.ActorAlign.CENTER,
|
||||||
});
|
});
|
||||||
this.add_actor(label);
|
this.add_child(label);
|
||||||
|
|
||||||
this.placesManager = new PlacesManager();
|
this.placesManager = new PlacesManager();
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
import Gio from 'gi://Gio';
|
import Gio from 'gi://Gio';
|
||||||
import GLib from 'gi://GLib';
|
import GLib from 'gi://GLib';
|
||||||
import Shell from 'gi://Shell';
|
import Shell from 'gi://Shell';
|
||||||
@@ -61,15 +60,15 @@ class PlaceInfo extends EventEmitter {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let source = {
|
const source = {
|
||||||
get_icon: () => this.icon,
|
get_drive: () => null,
|
||||||
};
|
};
|
||||||
let op = new ShellMountOperation.ShellMountOperation(source);
|
let op = new ShellMountOperation.ShellMountOperation(source);
|
||||||
try {
|
try {
|
||||||
await this.file.mount_enclosing_volume(0, op.mountOp, null);
|
await this.file.mount_enclosing_volume(0, op.mountOp, null);
|
||||||
|
|
||||||
if (tryMount)
|
if (tryMount)
|
||||||
this._ensureMountAndLaunch(context, false);
|
this._ensureMountAndLaunch(context, false).catch(logError);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
|
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
|
||||||
Main.notifyError(_('Failed to mount volume for “%s”').format(this.name), e.message);
|
Main.notifyError(_('Failed to mount volume for “%s”').format(this.name), e.message);
|
||||||
@@ -81,7 +80,7 @@ class PlaceInfo extends EventEmitter {
|
|||||||
|
|
||||||
launch(timestamp) {
|
launch(timestamp) {
|
||||||
let launchContext = global.create_app_launch_context(timestamp, -1);
|
let launchContext = global.create_app_launch_context(timestamp, -1);
|
||||||
this._ensureMountAndLaunch(launchContext, true);
|
this._ensureMountAndLaunch(launchContext, true).catch(logError);
|
||||||
}
|
}
|
||||||
|
|
||||||
getIcon() {
|
getIcon() {
|
||||||
@@ -141,8 +140,8 @@ class RootInfo extends PlaceInfo {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._proxy = obj;
|
this._proxy = obj;
|
||||||
this._proxy.connect('g-properties-changed',
|
this._proxy.connectObject('g-properties-changed',
|
||||||
this._propertiesChanged.bind(this));
|
this._propertiesChanged.bind(this), this);
|
||||||
this._propertiesChanged(obj);
|
this._propertiesChanged(obj);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -161,10 +160,8 @@ class RootInfo extends PlaceInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
if (this._proxy) {
|
this._proxy?.disconnectObject(this);
|
||||||
this._proxy.run_dispose();
|
this._proxy = null;
|
||||||
this._proxy = null;
|
|
||||||
}
|
|
||||||
super.destroy();
|
super.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export default class ScreenshotWindowSizerExtension extends Extension {
|
|||||||
[624, 351],
|
[624, 351],
|
||||||
[800, 450],
|
[800, 450],
|
||||||
[1024, 576],
|
[1024, 576],
|
||||||
|
[1000, 700],
|
||||||
[1200, 675],
|
[1200, 675],
|
||||||
[1600, 900],
|
[1600, 900],
|
||||||
[360, 654], // Phone portrait maximized
|
[360, 654], // Phone portrait maximized
|
||||||
@@ -33,7 +34,7 @@ export default class ScreenshotWindowSizerExtension extends Extension {
|
|||||||
_flashMessage(message) {
|
_flashMessage(message) {
|
||||||
if (!this._text) {
|
if (!this._text) {
|
||||||
this._text = new St.Label({style_class: 'screenshot-sizer-message'});
|
this._text = new St.Label({style_class: 'screenshot-sizer-message'});
|
||||||
Main.uiGroup.add_actor(this._text);
|
Main.uiGroup.add_child(this._text);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._text.remove_all_transitions();
|
this._text.remove_all_transitions();
|
||||||
@@ -65,10 +66,7 @@ export default class ScreenshotWindowSizerExtension extends Extension {
|
|||||||
* @param {Meta.KeyBinding} binding - the key binding
|
* @param {Meta.KeyBinding} binding - the key binding
|
||||||
*/
|
*/
|
||||||
_cycleScreenshotSizes(display, window, binding) {
|
_cycleScreenshotSizes(display, window, binding) {
|
||||||
// Probably this isn't useful with 5 sizes, but you can decrease instead
|
const backwards = binding.is_reversed();
|
||||||
// of increase by holding down shift.
|
|
||||||
let modifiers = binding.get_modifiers();
|
|
||||||
let backwards = (modifiers & Meta.VirtualModifier.SHIFT_MASK) !== 0;
|
|
||||||
|
|
||||||
// Unmaximize first
|
// Unmaximize first
|
||||||
if (window.get_maximized() !== 0)
|
if (window.get_maximized() !== 0)
|
||||||
@@ -99,7 +97,7 @@ export default class ScreenshotWindowSizerExtension extends Extension {
|
|||||||
|
|
||||||
// get the next size up or down from ideal
|
// get the next size up or down from ideal
|
||||||
let newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length;
|
let newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length;
|
||||||
let [newWidth, newHeight] = scaledSizes[newIndex];
|
let [newWidth, newHeight] = scaledSizes.at(newIndex);
|
||||||
|
|
||||||
// Push the window onscreen if it would be resized offscreen
|
// Push the window onscreen if it would be resized offscreen
|
||||||
let newX = outerRect.x;
|
let newX = outerRect.x;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"settings-schema": "@gschemaname@",
|
"settings-schema": "@gschemaname@",
|
||||||
"gettext-domain": "@gettext_domain@",
|
"gettext-domain": "@gettext_domain@",
|
||||||
"name": "Screenshot Window Sizer",
|
"name": "Screenshot Window Sizer",
|
||||||
"description": "Resize windows for GNOME Software screenshots",
|
"description": "Resize windows for GNOME Software screenshots with Ctrl+Alt+s shortcut",
|
||||||
"shell-version": [ "@shell_current@" ],
|
"shell-version": [ "@shell_current@" ],
|
||||||
"url": "@url@"
|
"url": "@url@"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,91 @@
|
|||||||
|
// SPDX-FileCopyrightText: 2018 Adel Gadllah <adel.gadllah@gmail.com>
|
||||||
|
// SPDX-FileCopyrightText: 2018 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
import Clutter from 'gi://Clutter';
|
||||||
|
import Shell from 'gi://Shell';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
|
import {Button as PanelButton} from 'resource:///org/gnome/shell/ui/panelMenu.js';
|
||||||
|
|
||||||
|
const PANEL_ICON_SIZE = 16;
|
||||||
|
|
||||||
|
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = [
|
||||||
|
'bluetooth-applet',
|
||||||
|
'gnome-sound-applet',
|
||||||
|
'nm-applet',
|
||||||
|
'gnome-power-manager',
|
||||||
|
'keyboard',
|
||||||
|
'a11y-keyboard',
|
||||||
|
'kbd-scrolllock',
|
||||||
|
'kbd-numlock',
|
||||||
|
'kbd-capslock',
|
||||||
|
'ibus-ui-gtk',
|
||||||
|
];
|
||||||
|
|
||||||
|
export default class SysTray {
|
||||||
|
constructor() {
|
||||||
|
this._icons = new Map();
|
||||||
|
this._tray = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_onTrayIconAdded(o, icon) {
|
||||||
|
let wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : '';
|
||||||
|
if (STANDARD_TRAY_ICON_IMPLEMENTATIONS.includes(wmClass))
|
||||||
|
return;
|
||||||
|
|
||||||
|
let button = new PanelButton(0.5, null, true);
|
||||||
|
|
||||||
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
let iconSize = PANEL_ICON_SIZE * scaleFactor;
|
||||||
|
|
||||||
|
icon.set({
|
||||||
|
width: iconSize,
|
||||||
|
height: iconSize,
|
||||||
|
x_align: Clutter.ActorAlign.CENTER,
|
||||||
|
y_align: Clutter.ActorAlign.CENTER,
|
||||||
|
});
|
||||||
|
|
||||||
|
let iconBin = new St.Widget({
|
||||||
|
layout_manager: new Clutter.BinLayout(),
|
||||||
|
style_class: 'system-status-icon',
|
||||||
|
});
|
||||||
|
iconBin.add_child(icon);
|
||||||
|
button.add_child(iconBin);
|
||||||
|
|
||||||
|
this._icons.set(icon, button);
|
||||||
|
|
||||||
|
button.connect('button-release-event',
|
||||||
|
(actor, event) => icon.click(event));
|
||||||
|
button.connect('key-press-event',
|
||||||
|
(actor, event) => icon.click(event));
|
||||||
|
|
||||||
|
const role = `${icon}`;
|
||||||
|
Main.panel.addToStatusArea(role, button);
|
||||||
|
}
|
||||||
|
|
||||||
|
_onTrayIconRemoved(o, icon) {
|
||||||
|
const button = this._icons.get(icon);
|
||||||
|
button?.destroy();
|
||||||
|
this._icons.delete(icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
this._tray = new Shell.TrayManager();
|
||||||
|
this._tray.connect('tray-icon-added',
|
||||||
|
this._onTrayIconAdded.bind(this));
|
||||||
|
this._tray.connect('tray-icon-removed',
|
||||||
|
this._onTrayIconRemoved.bind(this));
|
||||||
|
this._tray.manage_screen(Main.panel);
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
this._icons.forEach(button => button.destroy());
|
||||||
|
this._icons.clear();
|
||||||
|
|
||||||
|
this._tray.unmanage_screen();
|
||||||
|
this._tray = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2018 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
extension_data += configure_file(
|
||||||
|
input: metadata_name + '.in',
|
||||||
|
output: metadata_name,
|
||||||
|
configuration: metadata_conf
|
||||||
|
)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Status Icons",
|
||||||
|
"description": "Show status icons in the top bar",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1,489 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2023 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Clutter from 'gi://Clutter';
|
||||||
|
import Gio from 'gi://Gio';
|
||||||
|
import GLib from 'gi://GLib';
|
||||||
|
import GObject from 'gi://GObject';
|
||||||
|
import GTop from 'gi://GTop';
|
||||||
|
import Pango from 'gi://Pango';
|
||||||
|
import Shell from 'gi://Shell';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
|
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
|
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
|
||||||
|
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
||||||
|
|
||||||
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
|
|
||||||
|
const THRESHOLD_HIGH = 0.80;
|
||||||
|
|
||||||
|
// adapted from load-graph.cpp in gnome-system-monitor
|
||||||
|
/**
|
||||||
|
* @param {string} str
|
||||||
|
* @returns {number}
|
||||||
|
*/
|
||||||
|
function strHash(str) {
|
||||||
|
let hash = 0xcbf29ce484222325n;
|
||||||
|
|
||||||
|
for (const c of str)
|
||||||
|
hash = (hash * 0x00000100000001B3n) ^ BigInt(c.codePointAt(0));
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
class StatSection extends St.BoxLayout {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(iconName, accessibleName) {
|
||||||
|
super({
|
||||||
|
style_class: 'system-monitor-stat-section',
|
||||||
|
accessibleName,
|
||||||
|
});
|
||||||
|
|
||||||
|
const ext = Extension.lookupByURL(import.meta.url);
|
||||||
|
const file =
|
||||||
|
ext.dir.resolve_relative_path(`icons/${iconName}.svg`);
|
||||||
|
|
||||||
|
this._icon = new St.Icon({
|
||||||
|
style_class: 'system-monitor-stat-section-icon',
|
||||||
|
gicon: new Gio.FileIcon({file}),
|
||||||
|
});
|
||||||
|
this.add_child(this._icon);
|
||||||
|
|
||||||
|
this.label = new St.Label({
|
||||||
|
style_class: 'system-monitor-stat-section-label',
|
||||||
|
y_align: Clutter.ActorAlign.CENTER,
|
||||||
|
});
|
||||||
|
this.label.clutter_text.set({
|
||||||
|
ellipsize: Pango.EllipsizeMode.NONE,
|
||||||
|
x_align: Clutter.ActorAlign.CENTER,
|
||||||
|
});
|
||||||
|
this.add_child(this.label);
|
||||||
|
|
||||||
|
this.connect('destroy', () => this._clearTimeout());
|
||||||
|
this.connect('notify::visible', () => this._sync());
|
||||||
|
this._sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
_ensureTimeout() {
|
||||||
|
if (this._updateId)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._updateId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 1,
|
||||||
|
() => {
|
||||||
|
this._update();
|
||||||
|
return GLib.SOURCE_CONTINUE;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_clearTimeout() {
|
||||||
|
if (this._updateId)
|
||||||
|
GLib.source_remove(this._updateId);
|
||||||
|
delete this._updateId;
|
||||||
|
}
|
||||||
|
|
||||||
|
_sync() {
|
||||||
|
if (this.visible)
|
||||||
|
this._ensureTimeout();
|
||||||
|
else
|
||||||
|
this._clearTimeout();
|
||||||
|
|
||||||
|
if (this.visible)
|
||||||
|
this._update();
|
||||||
|
}
|
||||||
|
|
||||||
|
_update() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LoadStatSection extends StatSection {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
#formatter = new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'percent',
|
||||||
|
});
|
||||||
|
|
||||||
|
_getLoadValue() {
|
||||||
|
}
|
||||||
|
|
||||||
|
_update() {
|
||||||
|
const load = this._getLoadValue();
|
||||||
|
this.label.text = this.#formatter.format(load);
|
||||||
|
|
||||||
|
if (load >= THRESHOLD_HIGH)
|
||||||
|
this.add_style_class_name('high-usage');
|
||||||
|
else
|
||||||
|
this.remove_style_class_name('high-usage');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CpuSection extends LoadStatSection {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
#prevCpu = new GTop.glibtop_cpu();
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super('processor-symbolic', _('CPU stats'));
|
||||||
|
}
|
||||||
|
|
||||||
|
_getLoadValue() {
|
||||||
|
const cpu = new GTop.glibtop_cpu();
|
||||||
|
GTop.glibtop_get_cpu(cpu);
|
||||||
|
|
||||||
|
const total = cpu.total - this.#prevCpu.total;
|
||||||
|
const user = cpu.user - this.#prevCpu.user;
|
||||||
|
const sys = cpu.sys - this.#prevCpu.sys;
|
||||||
|
const nice = cpu.nice - this.#prevCpu.nice;
|
||||||
|
|
||||||
|
this.#prevCpu = cpu;
|
||||||
|
|
||||||
|
return (user + sys + nice) / Math.max(total, 1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MemSection extends LoadStatSection {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super('memory-symbolic', _('Memory stats'));
|
||||||
|
}
|
||||||
|
|
||||||
|
_getLoadValue() {
|
||||||
|
const mem = new GTop.glibtop_mem();
|
||||||
|
GTop.glibtop_get_mem(mem);
|
||||||
|
|
||||||
|
const {user, total} = mem;
|
||||||
|
return user / Math.max(total, 1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class SwapSection extends LoadStatSection {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super('swap-symbolic', _('Swap stats'));
|
||||||
|
}
|
||||||
|
|
||||||
|
_getLoadValue() {
|
||||||
|
const swap = new GTop.glibtop_swap();
|
||||||
|
GTop.glibtop_get_swap(swap);
|
||||||
|
|
||||||
|
const {used, total} = swap;
|
||||||
|
return used / Math.max(total, 1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NetStatSection extends StatSection {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
#formats = [{
|
||||||
|
factor: 1000,
|
||||||
|
unitFactor: 1000,
|
||||||
|
formatter: new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'unit',
|
||||||
|
unit: 'kilobyte',
|
||||||
|
maximumFractionDigits: 1,
|
||||||
|
minimumFractionDigits: 1,
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
factor: 1000 * 10,
|
||||||
|
unitFactor: 1000,
|
||||||
|
formatter: new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'unit',
|
||||||
|
unit: 'kilobyte',
|
||||||
|
maximumFractionDigits: 0,
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
factor: 1000 * 1000,
|
||||||
|
unitFactor: 1000 * 1000,
|
||||||
|
formatter: new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'unit',
|
||||||
|
unit: 'megabyte',
|
||||||
|
maximumFractionDigits: 1,
|
||||||
|
minimumFractionDigits: 1,
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
factor: 1000 * 1000 * 10,
|
||||||
|
unitFactor: 1000 * 1000,
|
||||||
|
formatter: new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'unit',
|
||||||
|
unit: 'megabyte',
|
||||||
|
maximumFractionDigits: 0,
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
factor: 1000 * 1000 * 1000,
|
||||||
|
unitFactor: 1000 * 1000 * 1000,
|
||||||
|
formatter: new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'unit',
|
||||||
|
unit: 'gigabyte',
|
||||||
|
maximumFractionDigits: 1,
|
||||||
|
minimumFractionDigits: 1,
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
factor: 1000 * 1000 * 1000 * 10,
|
||||||
|
unitFactor: 1000 * 1000 * 1000,
|
||||||
|
formatter: new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'unit',
|
||||||
|
unit: 'gigabyte',
|
||||||
|
maximumFractionDigits: 0,
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
factor: 1000 * 1000 * 1000 * 1000,
|
||||||
|
unitFactor: 1000 * 1000 * 1000 * 1000,
|
||||||
|
formatter: new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'unit',
|
||||||
|
unit: 'terabyte',
|
||||||
|
maximumFractionDigits: 1,
|
||||||
|
minimumFractionDigits: 1,
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
factor: 1000 * 1000 * 1000 * 1000 * 10,
|
||||||
|
unitFactor: 1000 * 1000 * 1000 * 1000,
|
||||||
|
formatter: new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'unit',
|
||||||
|
unit: 'terabyte',
|
||||||
|
maximumFractionDigits: 0,
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
factor: 1000 * 1000 * 1000 * 1000 * 1000,
|
||||||
|
unitFactor: 1000 * 1000 * 1000 * 1000 * 1000,
|
||||||
|
formatter: new Intl.NumberFormat(undefined, {
|
||||||
|
style: 'unit',
|
||||||
|
unit: 'petabyte',
|
||||||
|
maximumFractionDigits: 1,
|
||||||
|
minimumFractionDigits: 1,
|
||||||
|
}),
|
||||||
|
}];
|
||||||
|
|
||||||
|
#lastBytes = 0;
|
||||||
|
#lastHash = 0;
|
||||||
|
#lastTime = 0;
|
||||||
|
|
||||||
|
_getBytes(_netload) {
|
||||||
|
}
|
||||||
|
|
||||||
|
_getFormat(bytes) {
|
||||||
|
for (let i = 1; i < this.#formats.length; i++) {
|
||||||
|
if (bytes < this.#formats.at(i).factor)
|
||||||
|
return this.#formats.at(i - 1);
|
||||||
|
}
|
||||||
|
return this.#formats.at(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
_update() {
|
||||||
|
const FLAG_LOOPBACK = 1 << 4; // GTop sucks
|
||||||
|
|
||||||
|
const netlist = new GTop.glibtop_netlist();
|
||||||
|
const ifnames = GTop.glibtop_get_netlist(netlist);
|
||||||
|
|
||||||
|
let bytes = 0;
|
||||||
|
let hash = 1n;
|
||||||
|
|
||||||
|
for (const ifname of ifnames) {
|
||||||
|
const netload = new GTop.glibtop_netload();
|
||||||
|
GTop.glibtop_get_netload(netload, ifname);
|
||||||
|
|
||||||
|
if (netload.if_flags & FLAG_LOOPBACK)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
bytes += this._getBytes(netload);
|
||||||
|
hash += strHash(ifname);
|
||||||
|
}
|
||||||
|
|
||||||
|
const time = GLib.get_monotonic_time();
|
||||||
|
|
||||||
|
let dbytes = 0;
|
||||||
|
|
||||||
|
// Skip calculation if new data is less than old (interface
|
||||||
|
// removed, counters reset, ...) or if it is the first time
|
||||||
|
if (bytes >= this.#lastBytes &&
|
||||||
|
hash === this.#lastHash &&
|
||||||
|
this.#lastTime !== 0) {
|
||||||
|
const dtime = (time - this.#lastTime) / GLib.USEC_PER_SEC;
|
||||||
|
dbytes = (bytes - this.#lastBytes) / dtime;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.#lastBytes = bytes;
|
||||||
|
this.#lastTime = time;
|
||||||
|
this.#lastHash = hash;
|
||||||
|
|
||||||
|
const {unitFactor, formatter} = this._getFormat(dbytes);
|
||||||
|
this.label.text = formatter.format(dbytes / unitFactor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class UploadSection extends NetStatSection {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super('upload-symbolic', _('Upload stats'));
|
||||||
|
}
|
||||||
|
|
||||||
|
_getBytes(netload) {
|
||||||
|
return netload.bytes_out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DownloadSection extends NetStatSection {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super('download-symbolic', _('Download stats'));
|
||||||
|
}
|
||||||
|
|
||||||
|
_getBytes(netload) {
|
||||||
|
return netload.bytes_in;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Indicator extends PanelMenu.Button {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(settings) {
|
||||||
|
super(0.5, _('System stats'));
|
||||||
|
|
||||||
|
this._settings = settings;
|
||||||
|
this.connect('destroy',
|
||||||
|
() => (this._settings = null));
|
||||||
|
|
||||||
|
const box = new St.BoxLayout({
|
||||||
|
styleClass: 'system-monitor-stat-sections',
|
||||||
|
});
|
||||||
|
|
||||||
|
this.add_child(box);
|
||||||
|
|
||||||
|
this._placeholder = new St.Icon({
|
||||||
|
styleClass: 'system-status-icon system-monitor-placeholder',
|
||||||
|
});
|
||||||
|
box.add_child(this._placeholder);
|
||||||
|
|
||||||
|
this._cpuSection = new CpuSection();
|
||||||
|
this._settings.bind('show-cpu',
|
||||||
|
this._cpuSection, 'visible',
|
||||||
|
Gio.SettingsBindFlags.GET);
|
||||||
|
box.add_child(this._cpuSection);
|
||||||
|
|
||||||
|
this._memSection = new MemSection();
|
||||||
|
this._settings.bind('show-memory',
|
||||||
|
this._memSection, 'visible',
|
||||||
|
Gio.SettingsBindFlags.GET);
|
||||||
|
box.add_child(this._memSection);
|
||||||
|
|
||||||
|
this._swapSection = new SwapSection();
|
||||||
|
this._settings.bind('show-swap',
|
||||||
|
this._swapSection, 'visible',
|
||||||
|
Gio.SettingsBindFlags.GET);
|
||||||
|
box.add_child(this._swapSection);
|
||||||
|
|
||||||
|
this._ulSection = new UploadSection();
|
||||||
|
this._settings.bind('show-upload',
|
||||||
|
this._ulSection, 'visible',
|
||||||
|
Gio.SettingsBindFlags.GET);
|
||||||
|
box.add_child(this._ulSection);
|
||||||
|
|
||||||
|
this._dlSection = new DownloadSection();
|
||||||
|
this._settings.bind('show-download',
|
||||||
|
this._dlSection, 'visible',
|
||||||
|
Gio.SettingsBindFlags.GET);
|
||||||
|
box.add_child(this._dlSection);
|
||||||
|
|
||||||
|
this.menu.addMenuItem(
|
||||||
|
new PopupMenu.PopupSeparatorMenuItem(_('Show')));
|
||||||
|
|
||||||
|
this._cpuItem = this.menu.addAction(_('CPU'),
|
||||||
|
() => this._toggleSettings('show-cpu'));
|
||||||
|
this._memItem = this.menu.addAction(_('Memory'),
|
||||||
|
() => this._toggleSettings('show-memory'));
|
||||||
|
this._swapItem = this.menu.addAction(_('Swap'),
|
||||||
|
() => this._toggleSettings('show-swap'));
|
||||||
|
this._ulItem = this.menu.addAction(_('Upload'),
|
||||||
|
() => this._toggleSettings('show-upload'));
|
||||||
|
this._dlItem = this.menu.addAction(_('Download'),
|
||||||
|
() => this._toggleSettings('show-download'));
|
||||||
|
|
||||||
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
|
||||||
|
this._appMenuItem = this.menu.addAction(_('Open System Monitor'),
|
||||||
|
() => this._openSystemMonitor());
|
||||||
|
|
||||||
|
const appSystem = Shell.AppSystem.get_default();
|
||||||
|
appSystem.connectObject('installed-changed',
|
||||||
|
() => this._updateSystemMonitorApp(), this);
|
||||||
|
this._updateSystemMonitorApp();
|
||||||
|
|
||||||
|
this._settings.connectObject('changed',
|
||||||
|
() => this._sync(), this);
|
||||||
|
this._sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateSystemMonitorApp() {
|
||||||
|
const appSystem = Shell.AppSystem.get_default();
|
||||||
|
this._systemMonitorApp =
|
||||||
|
appSystem.lookup_app('org.gnome.SystemMonitor.desktop');
|
||||||
|
this._placeholder.gicon = this._systemMonitorApp?.icon ?? null;
|
||||||
|
this.visible = this._systemMonitorApp != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_openSystemMonitor() {
|
||||||
|
this._systemMonitorApp.activate();
|
||||||
|
Main.overview.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
_toggleSettings(key) {
|
||||||
|
this._settings.set_boolean(key, !this._settings.get_boolean(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
_sync() {
|
||||||
|
this._cpuItem.setOrnament(this._settings.get_boolean('show-cpu')
|
||||||
|
? PopupMenu.Ornament.CHECK
|
||||||
|
: PopupMenu.Ornament.NONE);
|
||||||
|
this._memItem.setOrnament(this._settings.get_boolean('show-memory')
|
||||||
|
? PopupMenu.Ornament.CHECK
|
||||||
|
: PopupMenu.Ornament.NONE);
|
||||||
|
this._swapItem.setOrnament(this._settings.get_boolean('show-swap')
|
||||||
|
? PopupMenu.Ornament.CHECK
|
||||||
|
: PopupMenu.Ornament.NONE);
|
||||||
|
this._ulItem.setOrnament(this._settings.get_boolean('show-upload')
|
||||||
|
? PopupMenu.Ornament.CHECK
|
||||||
|
: PopupMenu.Ornament.NONE);
|
||||||
|
this._dlItem.setOrnament(this._settings.get_boolean('show-download')
|
||||||
|
? PopupMenu.Ornament.CHECK
|
||||||
|
: PopupMenu.Ornament.NONE);
|
||||||
|
|
||||||
|
this._placeholder.visible =
|
||||||
|
this._settings.list_keys().every(key => !this._settings.get_boolean(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class SystemMonitorExtension extends Extension {
|
||||||
|
enable() {
|
||||||
|
this._indicator = new Indicator(this.getSettings());
|
||||||
|
Main.panel.addToStatusArea(this.uuid, this._indicator);
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
this._indicator.destroy();
|
||||||
|
this._indicator = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<filter id="a" height="100%" width="100%" x="0%" y="0%">
|
||||||
|
<feColorMatrix color-interpolation-filters="sRGB" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
||||||
|
</filter>
|
||||||
|
<mask id="b">
|
||||||
|
<g filter="url(#a)">
|
||||||
|
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.5"/>
|
||||||
|
</g>
|
||||||
|
</mask>
|
||||||
|
<clipPath id="c">
|
||||||
|
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
|
||||||
|
</clipPath>
|
||||||
|
<mask id="d">
|
||||||
|
<g filter="url(#a)">
|
||||||
|
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.7"/>
|
||||||
|
</g>
|
||||||
|
</mask>
|
||||||
|
<clipPath id="e">
|
||||||
|
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
|
||||||
|
</clipPath>
|
||||||
|
<mask id="f">
|
||||||
|
<g filter="url(#a)">
|
||||||
|
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.35"/>
|
||||||
|
</g>
|
||||||
|
</mask>
|
||||||
|
<clipPath id="g">
|
||||||
|
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
|
||||||
|
</clipPath>
|
||||||
|
<g mask="url(#b)">
|
||||||
|
<g clip-path="url(#c)" transform="matrix(1 0 0 1 -920 -120)">
|
||||||
|
<path d="m 550 182 c -0.351562 0.003906 -0.695312 0.101562 -1 0.28125 v 3.4375 c 0.304688 0.179688 0.648438 0.277344 1 0.28125 c 1.105469 0 2 -0.894531 2 -2 s -0.894531 -2 -2 -2 z m 0 5 c -0.339844 0 -0.679688 0.058594 -1 0.175781 v 6.824219 h 4 v -4 c 0 -1.65625 -1.34375 -3 -3 -3 z m 0 0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g mask="url(#d)">
|
||||||
|
<g clip-path="url(#e)" transform="matrix(1 0 0 1 -920 -120)">
|
||||||
|
<path d="m 569 182 v 4 c 1.105469 0 2 -0.894531 2 -2 s -0.894531 -2 -2 -2 z m 0 5 v 7 h 3 v -4 c 0 -1.65625 -1.34375 -3 -3 -3 z m 0 0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g mask="url(#f)">
|
||||||
|
<g clip-path="url(#g)" transform="matrix(1 0 0 1 -920 -120)">
|
||||||
|
<path d="m 573 182.269531 v 3.449219 c 0.613281 -0.355469 0.996094 -1.007812 1 -1.71875 c 0 -0.714844 -0.382812 -1.375 -1 -1.730469 z m 0 4.90625 v 6.824219 h 2 v -4 c 0 -1.269531 -0.800781 -2.402344 -2 -2.824219 z m 0 0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path d="m 7.984375 1 c -0.550781 0 -1 0.449219 -1 1 v 8.585938 l -2.292969 -2.292969 c -0.1875 -0.1875 -0.441406 -0.292969 -0.707031 -0.292969 s -0.519531 0.105469 -0.707031 0.292969 c -0.390625 0.390625 -0.390625 1.023437 0 1.414062 l 4 4 c 0.390625 0.390625 1.023437 0.390625 1.414062 0 l 4 -4 c 0.390625 -0.390625 0.390625 -1.023437 0 -1.414062 s -1.023437 -0.390625 -1.414062 0 l -2.292969 2.292969 v -8.585938 c 0 -0.550781 -0.445313 -1 -1 -1 z m 0 0"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
SPDX-FileCopyrightText: Icon Development Kit
|
||||||
|
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 3 2 c -1.660156 0 -3 1.339844 -3 3 v 4 c 0 1.660156 1.339844 3 3 3 h 10 c 1.660156 0 3 -1.339844 3 -3 v -4 c 0 -1.660156 -1.339844 -3 -3 -3 z m 0 2 h 10 c 0.554688 0 1 0.445312 1 1 v 4 c 0 0.554688 -0.445312 1 -1 1 h -10 c -0.554688 0 -1 -0.445312 -1 -1 v -4 c 0 -0.554688 0.445312 -1 1 -1 z m 0 0"/><path d="m 2 10 h 12 v 4 h -12 z m 0 0"/><g fill-opacity="0.501961"><path d="m 4 5 h 2 v 4 h -2 z m 0 0"/><path d="m 7 5 h 2 v 4 h -2 z m 0 0"/><path d="m 10 5 h 2 v 4 h -2 z m 0 0"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 631 B |
@@ -0,0 +1,3 @@
|
|||||||
|
SPDX-FileCopyrightText: Icon Development Kit
|
||||||
|
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 5 5 h 6 v 6 h -6 z m 0 0"/><path d="m 13 5 h 3 v 1 h -3 z m 0 0"/><path d="m 13 7 h 3 v 1 h -3 z m 0 0"/><path d="m 13 9 h 3 v 1 h -3 z m 0 0"/><path d="m 0 6 h 3 v 1 h -3 z m 0 0"/><path d="m 0 8 h 3 v 1 h -3 z m 0 0"/><path d="m 0 10 h 3 v 1 h -3 z m 0 0"/><path d="m 5 0 h 1 v 3 h -1 z m 0 0"/><path d="m 7 0 h 1 v 3 h -1 z m 0 0"/><path d="m 9 0 h 1 v 3 h -1 z m 0 0"/><path d="m 10 13 h 1 v 3 h -1 z m 0 0"/><path d="m 8 13 h 1 v 3 h -1 z m 0 0"/><path d="m 6 13 h 1 v 3 h -1 z m 0 0"/><path d="m 5 2 c -1.644531 0 -3 1.355469 -3 3 v 6 c 0 1.644531 1.355469 3 3 3 h 6 c 1.644531 0 3 -1.355469 3 -3 v -6 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 2 h 6 c 0.570312 0 1 0.429688 1 1 v 6 c 0 0.570312 -0.429688 1 -1 1 h -6 c -0.570312 0 -1 -0.429688 -1 -1 v -6 c 0 -0.570312 0.429688 -1 1 -1 z m 0 0"/></svg>
|
||||||
|
After Width: | Height: | Size: 943 B |
@@ -0,0 +1,3 @@
|
|||||||
|
SPDX-FileCopyrightText: Icon Development Kit
|
||||||
|
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 5 7 c -0.308594 0 -0.613281 0.089844 -0.8125 0.28125 l -3.59375 3.71875 l 3.65625 3.71875 c 0.199219 0.191406 0.441406 0.28125 0.75 0.28125 h 1 v -1 c 0 -0.257812 -0.128906 -0.527344 -0.3125 -0.71875 l -1.28125 -1.28125 h 4.59375 c 0.527344 0.007812 1 -0.472656 1 -1 s -0.472656 -1.007812 -1 -1 h -4.625 l 1.21875 -1.28125 c 0.183594 -0.191406 0.40625 -0.460938 0.40625 -0.71875 v -1 z m 0 0"/><path d="m 11 9 c 0.308594 0 0.613281 -0.089844 0.8125 -0.28125 l 3.59375 -3.71875 l -3.65625 -3.71875 c -0.199219 -0.191406 -0.441406 -0.28125 -0.75 -0.28125 h -1 v 1 c 0 0.257812 0.128906 0.527344 0.3125 0.71875 l 1.28125 1.28125 h -4.59375 c -0.527344 -0.007812 -1 0.472656 -1 1 s 0.472656 1.007812 1 1 h 4.625 l -1.21875 1.28125 c -0.183594 0.191406 -0.40625 0.460938 -0.40625 0.71875 v 1 z m 0 0"/></svg>
|
||||||
|
After Width: | Height: | Size: 941 B |
@@ -0,0 +1,3 @@
|
|||||||
|
SPDX-FileCopyrightText: Icon Development Kit
|
||||||
|
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<filter id="a" height="100%" width="100%" x="0%" y="0%">
|
||||||
|
<feColorMatrix color-interpolation-filters="sRGB" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
||||||
|
</filter>
|
||||||
|
<mask id="b">
|
||||||
|
<g filter="url(#a)">
|
||||||
|
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.5"/>
|
||||||
|
</g>
|
||||||
|
</mask>
|
||||||
|
<clipPath id="c">
|
||||||
|
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
|
||||||
|
</clipPath>
|
||||||
|
<mask id="d">
|
||||||
|
<g filter="url(#a)">
|
||||||
|
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.7"/>
|
||||||
|
</g>
|
||||||
|
</mask>
|
||||||
|
<clipPath id="e">
|
||||||
|
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
|
||||||
|
</clipPath>
|
||||||
|
<mask id="f">
|
||||||
|
<g filter="url(#a)">
|
||||||
|
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.35"/>
|
||||||
|
</g>
|
||||||
|
</mask>
|
||||||
|
<clipPath id="g">
|
||||||
|
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
|
||||||
|
</clipPath>
|
||||||
|
<g mask="url(#b)">
|
||||||
|
<g clip-path="url(#c)" transform="matrix(1 0 0 1 -900 -120)">
|
||||||
|
<path d="m 550 182 c -0.351562 0.003906 -0.695312 0.101562 -1 0.28125 v 3.4375 c 0.304688 0.179688 0.648438 0.277344 1 0.28125 c 1.105469 0 2 -0.894531 2 -2 s -0.894531 -2 -2 -2 z m 0 5 c -0.339844 0 -0.679688 0.058594 -1 0.175781 v 6.824219 h 4 v -4 c 0 -1.65625 -1.34375 -3 -3 -3 z m 0 0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g mask="url(#d)">
|
||||||
|
<g clip-path="url(#e)" transform="matrix(1 0 0 1 -900 -120)">
|
||||||
|
<path d="m 569 182 v 4 c 1.105469 0 2 -0.894531 2 -2 s -0.894531 -2 -2 -2 z m 0 5 v 7 h 3 v -4 c 0 -1.65625 -1.34375 -3 -3 -3 z m 0 0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g mask="url(#f)">
|
||||||
|
<g clip-path="url(#g)" transform="matrix(1 0 0 1 -900 -120)">
|
||||||
|
<path d="m 573 182.269531 v 3.449219 c 0.613281 -0.355469 0.996094 -1.007812 1 -1.71875 c 0 -0.714844 -0.382812 -1.375 -1 -1.730469 z m 0 4.90625 v 6.824219 h 2 v -4 c 0 -1.269531 -0.800781 -2.402344 -2 -2.824219 z m 0 0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path d="m 8.015625 15 c 0.550781 0 1 -0.449219 1 -1 v -8.585938 l 2.292969 2.292969 c 0.1875 0.1875 0.441406 0.292969 0.707031 0.292969 s 0.519531 -0.105469 0.707031 -0.292969 c 0.390625 -0.390625 0.390625 -1.023437 0 -1.414062 l -4 -4 c -0.390625 -0.390625 -1.023437 -0.390625 -1.414062 0 l -4 4 c -0.390625 0.390625 -0.390625 1.023437 0 1.414062 s 1.023437 0.390625 1.414062 0 l 2.292969 -2.292969 v 8.585938 c 0 0.550781 0.445313 1 1 1 z m 0 0"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
SPDX-FileCopyrightText: Icon Development Kit
|
||||||
|
|
||||||
|
SPDX-License-Identifier: CC0-1.0
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2017 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
extension_data += configure_file(
|
||||||
|
input: metadata_name + '.in',
|
||||||
|
output: metadata_name,
|
||||||
|
configuration: metadata_conf
|
||||||
|
)
|
||||||
|
|
||||||
|
extension_data += files('stylesheet.css')
|
||||||
|
extension_schemas += files('schemas/' + metadata_conf.get('gschemaname') + '.gschema.xml')
|
||||||
|
|
||||||
|
install_subdir('icons', install_dir: join_paths(extensiondir, uuid))
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "System Monitor",
|
||||||
|
"description": "Monitor system from the top bar",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
<!--
|
||||||
|
SPDX-FileCopyrightText: 2023 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
-->
|
||||||
|
|
||||||
|
<schemalist gettext-domain="gnome-shell-extensions">
|
||||||
|
<schema id="org.gnome.shell.extensions.system-monitor"
|
||||||
|
path="/org/gnome/shell/extensions/system-monitor/">
|
||||||
|
<key name="show-cpu" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<summary>Show CPU usage</summary>
|
||||||
|
</key>
|
||||||
|
<key name="show-memory" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<summary>Show memory usage</summary>
|
||||||
|
</key>
|
||||||
|
<key name="show-swap" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<summary>Show swap usage</summary>
|
||||||
|
</key>
|
||||||
|
<key name="show-upload" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<summary>Show upload</summary>
|
||||||
|
</key>
|
||||||
|
<key name="show-download" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<summary>Show download</summary>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2023 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
.system-monitor-stat-section {
|
||||||
|
padding: 0 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.system-monitor-stat-section-icon {icon-size: 1.08em;}
|
||||||
|
.system-monitor-stat-section-label {
|
||||||
|
min-width: 3.0em;
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
.system-monitor-placeholder {-st-icon-style: symbolic;}
|
||||||
|
|
||||||
|
.panel-button .high-usage {color: #ff7800;}
|
||||||
@@ -5,9 +5,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
||||||
// Load shell theme from ~/.local/share/themes/name/gnome-shell
|
|
||||||
|
|
||||||
import Gio from 'gi://Gio';
|
import Gio from 'gi://Gio';
|
||||||
|
|
||||||
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
@@ -21,12 +18,13 @@ const SETTINGS_KEY = 'name';
|
|||||||
export default class ThemeManager extends Extension {
|
export default class ThemeManager extends Extension {
|
||||||
enable() {
|
enable() {
|
||||||
this._settings = this.getSettings();
|
this._settings = this.getSettings();
|
||||||
this._settings.connect(`changed::${SETTINGS_KEY}`, this._changeTheme.bind(this));
|
this._settings.connectObject(`changed::${SETTINGS_KEY}`,
|
||||||
|
this._changeTheme.bind(this), this);
|
||||||
this._changeTheme();
|
this._changeTheme();
|
||||||
}
|
}
|
||||||
|
|
||||||
disable() {
|
disable() {
|
||||||
this._settings?.run_dispose();
|
this._settings?.disconnectObject();
|
||||||
this._settings = null;
|
this._settings = null;
|
||||||
|
|
||||||
Main.setThemeStylesheet(null);
|
Main.setThemeStylesheet(null);
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
||||||
|
|
||||||
// we use async/await here to not block the mainloop, not to parallelize
|
// we use async/await here to not block the mainloop, not to parallelize
|
||||||
/* eslint-disable no-await-in-loop */
|
/* eslint-disable no-await-in-loop */
|
||||||
|
|
||||||
@@ -36,7 +34,7 @@ class UserThemePrefsWidget extends Adw.PreferencesGroup {
|
|||||||
this._actionGroup.add_action(
|
this._actionGroup.add_action(
|
||||||
this._settings.create_action('name'));
|
this._settings.create_action('name'));
|
||||||
|
|
||||||
this.connect('destroy', () => this._settings.run_dispose());
|
this.connect('destroy', () => (this._settings = null));
|
||||||
|
|
||||||
this._rows = new Map();
|
this._rows = new Map();
|
||||||
this._addTheme(''); // default
|
this._addTheme(''); // default
|
||||||
|
|||||||
+122
-181
@@ -10,6 +10,7 @@ import GLib from 'gi://GLib';
|
|||||||
import GObject from 'gi://GObject';
|
import GObject from 'gi://GObject';
|
||||||
import Gtk from 'gi://Gtk';
|
import Gtk from 'gi://Gtk';
|
||||||
import Meta from 'gi://Meta';
|
import Meta from 'gi://Meta';
|
||||||
|
import Mtk from 'gi://Mtk';
|
||||||
import Shell from 'gi://Shell';
|
import Shell from 'gi://Shell';
|
||||||
import St from 'gi://St';
|
import St from 'gi://St';
|
||||||
|
|
||||||
@@ -17,18 +18,14 @@ import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/ex
|
|||||||
|
|
||||||
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
|
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
|
||||||
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
import * as Overview from 'resource:///org/gnome/shell/ui/overview.js';
|
|
||||||
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
||||||
|
import {DashItemContainer} from 'resource:///org/gnome/shell/ui/dash.js';
|
||||||
|
|
||||||
import {WindowPicker, WindowPickerToggle} from './windowPicker.js';
|
|
||||||
import {WorkspaceIndicator} from './workspaceIndicator.js';
|
import {WorkspaceIndicator} from './workspaceIndicator.js';
|
||||||
|
|
||||||
const ICON_TEXTURE_SIZE = 24;
|
const ICON_TEXTURE_SIZE = 24;
|
||||||
const DND_ACTIVATE_TIMEOUT = 500;
|
const DND_ACTIVATE_TIMEOUT = 500;
|
||||||
|
|
||||||
const TOOLTIP_OFFSET = 6;
|
|
||||||
const TOOLTIP_ANIMATION_TIME = 150;
|
|
||||||
|
|
||||||
const GroupingMode = {
|
const GroupingMode = {
|
||||||
NEVER: 0,
|
NEVER: 0,
|
||||||
AUTO: 1,
|
AUTO: 1,
|
||||||
@@ -80,7 +77,7 @@ class WindowContextMenu extends PopupMenu.PopupMenu {
|
|||||||
'notify::minimized', this._updateMinimizeItem.bind(this),
|
'notify::minimized', this._updateMinimizeItem.bind(this),
|
||||||
'notify::maximized-horizontally', this._updateMaximizeItem.bind(this),
|
'notify::maximized-horizontally', this._updateMaximizeItem.bind(this),
|
||||||
'notify::maximized-vertically', this._updateMaximizeItem.bind(this),
|
'notify::maximized-vertically', this._updateMaximizeItem.bind(this),
|
||||||
this);
|
this.actor);
|
||||||
|
|
||||||
this._updateMinimizeItem();
|
this._updateMinimizeItem();
|
||||||
this._updateMaximizeItem();
|
this._updateMaximizeItem();
|
||||||
@@ -123,14 +120,10 @@ class WindowTitle extends St.BoxLayout {
|
|||||||
this._metaWindow = metaWindow;
|
this._metaWindow = metaWindow;
|
||||||
|
|
||||||
this._icon = new St.Bin({style_class: 'window-button-icon'});
|
this._icon = new St.Bin({style_class: 'window-button-icon'});
|
||||||
this.add(this._icon);
|
this.add_child(this._icon);
|
||||||
this.label_actor = new St.Label({y_align: Clutter.ActorAlign.CENTER});
|
this.label_actor = new St.Label({y_align: Clutter.ActorAlign.CENTER});
|
||||||
this.label_actor.clutter_text.single_line_mode = true;
|
this.label_actor.clutter_text.single_line_mode = true;
|
||||||
this.add(this.label_actor);
|
this.add_child(this.label_actor);
|
||||||
|
|
||||||
this._textureCache = St.TextureCache.get_default();
|
|
||||||
this._textureCache.connectObject('icon-theme-changed',
|
|
||||||
() => this._updateIcon(), this);
|
|
||||||
|
|
||||||
this._metaWindow.connectObject(
|
this._metaWindow.connectObject(
|
||||||
'notify::wm-class',
|
'notify::wm-class',
|
||||||
@@ -166,20 +159,20 @@ class WindowTitle extends St.BoxLayout {
|
|||||||
this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE);
|
this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE);
|
||||||
} else {
|
} else {
|
||||||
this._icon.child = new St.Icon({
|
this._icon.child = new St.Icon({
|
||||||
icon_name: 'icon-missing',
|
icon_name: 'application-x-executable',
|
||||||
icon_size: ICON_TEXTURE_SIZE,
|
icon_size: ICON_TEXTURE_SIZE,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class BaseButton extends St.Button {
|
class BaseButton extends DashItemContainer {
|
||||||
static {
|
static {
|
||||||
GObject.registerClass({
|
GObject.registerClass({
|
||||||
GTypeFlags: GObject.TypeFlags.ABSTRACT,
|
GTypeFlags: GObject.TypeFlags.ABSTRACT,
|
||||||
Properties: {
|
Properties: {
|
||||||
'ignore-workspace': GObject.ParamSpec.boolean(
|
'ignore-workspace': GObject.ParamSpec.boolean(
|
||||||
'ignore-workspace', 'ignore-workspace', 'ignore-workspace',
|
'ignore-workspace', null, null,
|
||||||
GObject.ParamFlags.READWRITE,
|
GObject.ParamFlags.READWRITE,
|
||||||
false),
|
false),
|
||||||
},
|
},
|
||||||
@@ -187,12 +180,22 @@ class BaseButton extends St.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constructor(perMonitor, monitorIndex) {
|
constructor(perMonitor, monitorIndex) {
|
||||||
super({
|
super();
|
||||||
|
|
||||||
|
this._button = new St.Button({
|
||||||
style_class: 'window-button',
|
style_class: 'window-button',
|
||||||
can_focus: true,
|
can_focus: true,
|
||||||
x_expand: true,
|
x_expand: true,
|
||||||
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
|
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
|
||||||
});
|
});
|
||||||
|
this.setChild(this._button);
|
||||||
|
|
||||||
|
this._button.connect('notify::hover', () => {
|
||||||
|
if (this._button.hover)
|
||||||
|
this.showLabel();
|
||||||
|
else
|
||||||
|
this.hideLabel();
|
||||||
|
});
|
||||||
|
|
||||||
this._perMonitor = perMonitor;
|
this._perMonitor = perMonitor;
|
||||||
this._monitorIndex = monitorIndex;
|
this._monitorIndex = monitorIndex;
|
||||||
@@ -200,7 +203,7 @@ class BaseButton extends St.Button {
|
|||||||
|
|
||||||
this.connect('notify::allocation',
|
this.connect('notify::allocation',
|
||||||
this._updateIconGeometry.bind(this));
|
this._updateIconGeometry.bind(this));
|
||||||
this.connect('clicked', this._onClicked.bind(this));
|
this._button.connect('clicked', this._onClicked.bind(this));
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
this.connect('popup-menu', this._onPopupMenu.bind(this));
|
this.connect('popup-menu', this._onPopupMenu.bind(this));
|
||||||
|
|
||||||
@@ -217,16 +220,10 @@ class BaseButton extends St.Button {
|
|||||||
this._windowEnteredOrLeftMonitor.bind(this),
|
this._windowEnteredOrLeftMonitor.bind(this),
|
||||||
this);
|
this);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._tooltip = new Tooltip(this, {
|
|
||||||
style_class: 'dash-label',
|
|
||||||
visible: false,
|
|
||||||
});
|
|
||||||
Main.uiGroup.add_child(this._tooltip);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get active() {
|
get active() {
|
||||||
return this.has_style_class_name('focused');
|
return this._button.has_style_class_name('focused');
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line camelcase
|
// eslint-disable-next-line camelcase
|
||||||
@@ -245,6 +242,18 @@ class BaseButton extends St.Button {
|
|||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showLabel() {
|
||||||
|
const [, , preferredTitleWidth] = this.label_actor.get_preferred_size();
|
||||||
|
const maxTitleWidth = this.label_actor.allocation.get_width();
|
||||||
|
const isTitleFullyShown = preferredTitleWidth <= maxTitleWidth;
|
||||||
|
|
||||||
|
const labelText = isTitleFullyShown
|
||||||
|
? '' : this.label_actor.text;
|
||||||
|
|
||||||
|
this.setLabelText(labelText);
|
||||||
|
super.showLabel();
|
||||||
|
}
|
||||||
|
|
||||||
_setLongPressTimeout() {
|
_setLongPressTimeout() {
|
||||||
if (this._longPressTimeoutId)
|
if (this._longPressTimeoutId)
|
||||||
return;
|
return;
|
||||||
@@ -267,24 +276,24 @@ class BaseButton extends St.Button {
|
|||||||
delete this._longPressTimeoutId;
|
delete this._longPressTimeoutId;
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_button_press_event(buttonEvent) {
|
vfunc_button_press_event(event) {
|
||||||
if (buttonEvent.button === 1)
|
if (event.get_button() === 1)
|
||||||
this._setLongPressTimeout();
|
this._setLongPressTimeout();
|
||||||
return super.vfunc_button_press_event(buttonEvent);
|
return super.vfunc_button_press_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_button_release_event(buttonEvent) {
|
vfunc_button_release_event(event) {
|
||||||
this._removeLongPressTimeout();
|
this._removeLongPressTimeout();
|
||||||
|
|
||||||
return super.vfunc_button_release_event(buttonEvent);
|
return super.vfunc_button_release_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_touch_event(touchEvent) {
|
vfunc_touch_event(event) {
|
||||||
if (touchEvent.type === Clutter.EventType.TOUCH_BEGIN)
|
if (event.type() === Clutter.EventType.TOUCH_BEGIN)
|
||||||
this._setLongPressTimeout();
|
this._setLongPressTimeout();
|
||||||
else if (touchEvent.type === Clutter.EventType.TOUCH_END)
|
else if (event.type() === Clutter.EventType.TOUCH_END)
|
||||||
this._removeLongPressTimeout();
|
this._removeLongPressTimeout();
|
||||||
return super.vfunc_touch_event(touchEvent);
|
return super.vfunc_touch_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
activate() {
|
activate() {
|
||||||
@@ -345,9 +354,9 @@ class BaseButton extends St.Button {
|
|||||||
|
|
||||||
_updateStyle() {
|
_updateStyle() {
|
||||||
if (this._isFocused())
|
if (this._isFocused())
|
||||||
this.add_style_class_name('focused');
|
this._button.add_style_class_name('focused');
|
||||||
else
|
else
|
||||||
this.remove_style_class_name('focused');
|
this._button.remove_style_class_name('focused');
|
||||||
}
|
}
|
||||||
|
|
||||||
_windowEnteredOrLeftMonitor(_metaDisplay, _monitorIndex, _metaWindow) {
|
_windowEnteredOrLeftMonitor(_metaDisplay, _monitorIndex, _metaWindow) {
|
||||||
@@ -369,7 +378,7 @@ class BaseButton extends St.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_getIconGeometry() {
|
_getIconGeometry() {
|
||||||
let rect = new Meta.Rectangle();
|
const rect = new Mtk.Rectangle();
|
||||||
|
|
||||||
[rect.x, rect.y] = this.get_transformed_position();
|
[rect.x, rect.y] = this.get_transformed_position();
|
||||||
[rect.width, rect.height] = this.get_transformed_size();
|
[rect.width, rect.height] = this.get_transformed_size();
|
||||||
@@ -383,7 +392,6 @@ class BaseButton extends St.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
this._tooltip.destroy();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -396,15 +404,17 @@ class WindowButton extends BaseButton {
|
|||||||
super(perMonitor, monitorIndex);
|
super(perMonitor, monitorIndex);
|
||||||
|
|
||||||
this.metaWindow = metaWindow;
|
this.metaWindow = metaWindow;
|
||||||
|
this._unmanaging = false;
|
||||||
metaWindow.connectObject(
|
metaWindow.connectObject(
|
||||||
'notify::skip-taskbar', () => this._updateVisibility(),
|
'notify::skip-taskbar', () => this._updateVisibility(),
|
||||||
'workspace-changed', () => this._updateVisibility(),
|
'workspace-changed', () => this._updateVisibility(),
|
||||||
|
'unmanaging', () => (this._unmanaging = true),
|
||||||
this);
|
this);
|
||||||
|
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
|
|
||||||
this._windowTitle = new WindowTitle(this.metaWindow);
|
this._windowTitle = new WindowTitle(this.metaWindow);
|
||||||
this.set_child(this._windowTitle);
|
this._button.set_child(this._windowTitle);
|
||||||
this.label_actor = this._windowTitle.label_actor;
|
this.label_actor = this._windowTitle.label_actor;
|
||||||
|
|
||||||
this._contextMenu = new WindowContextMenu(this, this.metaWindow);
|
this._contextMenu = new WindowContextMenu(this, this.metaWindow);
|
||||||
@@ -412,7 +422,7 @@ class WindowButton extends BaseButton {
|
|||||||
this._onMenuStateChanged.bind(this));
|
this._onMenuStateChanged.bind(this));
|
||||||
this._contextMenu.actor.hide();
|
this._contextMenu.actor.hide();
|
||||||
this._contextMenuManager.addMenu(this._contextMenu);
|
this._contextMenuManager.addMenu(this._contextMenu);
|
||||||
Main.uiGroup.add_actor(this._contextMenu.actor);
|
Main.uiGroup.add_child(this._contextMenu.actor);
|
||||||
|
|
||||||
global.display.connectObject('notify::focus-window',
|
global.display.connectObject('notify::focus-window',
|
||||||
() => this._updateStyle(), this);
|
() => this._updateStyle(), this);
|
||||||
@@ -439,9 +449,9 @@ class WindowButton extends BaseButton {
|
|||||||
super._updateStyle();
|
super._updateStyle();
|
||||||
|
|
||||||
if (this.metaWindow.minimized)
|
if (this.metaWindow.minimized)
|
||||||
this.add_style_class_name('minimized');
|
this._button.add_style_class_name('minimized');
|
||||||
else
|
else
|
||||||
this.remove_style_class_name('minimized');
|
this._button.remove_style_class_name('minimized');
|
||||||
}
|
}
|
||||||
|
|
||||||
_windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) {
|
_windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) {
|
||||||
@@ -450,6 +460,9 @@ class WindowButton extends BaseButton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_updateVisibility() {
|
_updateVisibility() {
|
||||||
|
if (this._unmanaging)
|
||||||
|
return;
|
||||||
|
|
||||||
this.visible = this._isWindowVisible(this.metaWindow);
|
this.visible = this._isWindowVisible(this.metaWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -533,30 +546,30 @@ class AppButton extends BaseButton {
|
|||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
|
|
||||||
let stack = new St.Widget({layout_manager: new Clutter.BinLayout()});
|
let stack = new St.Widget({layout_manager: new Clutter.BinLayout()});
|
||||||
this.set_child(stack);
|
this._button.set_child(stack);
|
||||||
|
|
||||||
this._singleWindowTitle = new St.Bin({
|
this._singleWindowTitle = new St.Bin({
|
||||||
x_expand: true,
|
x_expand: true,
|
||||||
});
|
});
|
||||||
stack.add_actor(this._singleWindowTitle);
|
stack.add_child(this._singleWindowTitle);
|
||||||
|
|
||||||
this._multiWindowTitle = new St.BoxLayout({
|
this._multiWindowTitle = new St.BoxLayout({
|
||||||
style_class: 'window-button-box',
|
style_class: 'window-button-box',
|
||||||
x_expand: true,
|
x_expand: true,
|
||||||
});
|
});
|
||||||
stack.add_actor(this._multiWindowTitle);
|
stack.add_child(this._multiWindowTitle);
|
||||||
|
|
||||||
this._icon = new St.Bin({
|
this._icon = new St.Bin({
|
||||||
style_class: 'window-button-icon',
|
style_class: 'window-button-icon',
|
||||||
child: app.create_icon_texture(ICON_TEXTURE_SIZE),
|
child: app.create_icon_texture(ICON_TEXTURE_SIZE),
|
||||||
});
|
});
|
||||||
this._multiWindowTitle.add(this._icon);
|
this._multiWindowTitle.add_child(this._icon);
|
||||||
|
|
||||||
let label = new St.Label({
|
let label = new St.Label({
|
||||||
text: app.get_name(),
|
text: app.get_name(),
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
y_align: Clutter.ActorAlign.CENTER,
|
||||||
});
|
});
|
||||||
this._multiWindowTitle.add(label);
|
this._multiWindowTitle.add_child(label);
|
||||||
this._multiWindowTitle.label_actor = label;
|
this._multiWindowTitle.label_actor = label;
|
||||||
|
|
||||||
this._menuManager = new PopupMenu.PopupMenuManager(this);
|
this._menuManager = new PopupMenu.PopupMenuManager(this);
|
||||||
@@ -566,18 +579,13 @@ class AppButton extends BaseButton {
|
|||||||
this._menu.actor.hide();
|
this._menu.actor.hide();
|
||||||
this._menu.connect('activate', this._onMenuActivate.bind(this));
|
this._menu.connect('activate', this._onMenuActivate.bind(this));
|
||||||
this._menuManager.addMenu(this._menu);
|
this._menuManager.addMenu(this._menu);
|
||||||
Main.uiGroup.add_actor(this._menu.actor);
|
Main.uiGroup.add_child(this._menu.actor);
|
||||||
|
|
||||||
this._appContextMenu = new AppContextMenu(this);
|
this._appContextMenu = new AppContextMenu(this);
|
||||||
this._appContextMenu.connect('open-state-changed',
|
this._appContextMenu.connect('open-state-changed',
|
||||||
this._onMenuStateChanged.bind(this));
|
this._onMenuStateChanged.bind(this));
|
||||||
this._appContextMenu.actor.hide();
|
this._appContextMenu.actor.hide();
|
||||||
Main.uiGroup.add_actor(this._appContextMenu.actor);
|
Main.uiGroup.add_child(this._appContextMenu.actor);
|
||||||
|
|
||||||
this._textureCache = St.TextureCache.get_default();
|
|
||||||
this._textureCache.connectObject('icon-theme-changed', () => {
|
|
||||||
this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE);
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.app.connectObject('windows-changed',
|
this.app.connectObject('windows-changed',
|
||||||
() => this._windowsChanged(), this);
|
() => this._windowsChanged(), this);
|
||||||
@@ -637,7 +645,7 @@ class AppButton extends BaseButton {
|
|||||||
this._windowContextMenu = new WindowContextMenu(this, this.metaWindow);
|
this._windowContextMenu = new WindowContextMenu(this, this.metaWindow);
|
||||||
this._windowContextMenu.connect(
|
this._windowContextMenu.connect(
|
||||||
'open-state-changed', this._onMenuStateChanged.bind(this));
|
'open-state-changed', this._onMenuStateChanged.bind(this));
|
||||||
Main.uiGroup.add_actor(this._windowContextMenu.actor);
|
Main.uiGroup.add_child(this._windowContextMenu.actor);
|
||||||
this._windowContextMenu.actor.hide();
|
this._windowContextMenu.actor.hide();
|
||||||
this._contextMenuManager.addMenu(this._windowContextMenu);
|
this._contextMenuManager.addMenu(this._windowContextMenu);
|
||||||
}
|
}
|
||||||
@@ -682,7 +690,7 @@ class AppButton extends BaseButton {
|
|||||||
for (let i = 0; i < windows.length; i++) {
|
for (let i = 0; i < windows.length; i++) {
|
||||||
let windowTitle = new WindowTitle(windows[i]);
|
let windowTitle = new WindowTitle(windows[i]);
|
||||||
let item = new PopupMenu.PopupBaseMenuItem();
|
let item = new PopupMenu.PopupBaseMenuItem();
|
||||||
item.add_actor(windowTitle);
|
item.add_child(windowTitle);
|
||||||
item._window = windows[i];
|
item._window = windows[i];
|
||||||
this._menu.addMenuItem(item);
|
this._menu.addMenuItem(item);
|
||||||
}
|
}
|
||||||
@@ -728,36 +736,26 @@ class WindowList extends St.Widget {
|
|||||||
this._monitor = monitor;
|
this._monitor = monitor;
|
||||||
|
|
||||||
let box = new St.BoxLayout({x_expand: true, y_expand: true});
|
let box = new St.BoxLayout({x_expand: true, y_expand: true});
|
||||||
this.add_actor(box);
|
this.add_child(box);
|
||||||
|
|
||||||
let toggle = new WindowPickerToggle();
|
this._windowList = new St.BoxLayout({
|
||||||
box.add_actor(toggle);
|
|
||||||
|
|
||||||
toggle.connect('notify::checked',
|
|
||||||
this._updateWindowListVisibility.bind(this));
|
|
||||||
|
|
||||||
let layout = new Clutter.BoxLayout({homogeneous: true});
|
|
||||||
this._windowList = new St.Widget({
|
|
||||||
style_class: 'window-list',
|
style_class: 'window-list',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
layout_manager: layout,
|
|
||||||
x_align: Clutter.ActorAlign.START,
|
x_align: Clutter.ActorAlign.START,
|
||||||
x_expand: true,
|
x_expand: true,
|
||||||
y_expand: true,
|
y_expand: true,
|
||||||
});
|
});
|
||||||
box.add_child(this._windowList);
|
box.add_child(this._windowList);
|
||||||
|
|
||||||
this._windowList.connect('style-changed', () => {
|
|
||||||
let node = this._windowList.get_theme_node();
|
|
||||||
let spacing = node.get_length('spacing');
|
|
||||||
this._windowList.layout_manager.spacing = spacing;
|
|
||||||
});
|
|
||||||
this._windowList.connect('scroll-event', this._onScrollEvent.bind(this));
|
this._windowList.connect('scroll-event', this._onScrollEvent.bind(this));
|
||||||
|
|
||||||
let indicatorsBox = new St.BoxLayout({x_align: Clutter.ActorAlign.END});
|
let indicatorsBox = new St.BoxLayout({x_align: Clutter.ActorAlign.END});
|
||||||
box.add(indicatorsBox);
|
box.add_child(indicatorsBox);
|
||||||
|
|
||||||
this._workspaceIndicator = new WorkspaceIndicator();
|
this._workspaceIndicator = new BottomWorkspaceIndicator({
|
||||||
|
baseStyleClass: 'window-list-workspace-indicator',
|
||||||
|
settings,
|
||||||
|
});
|
||||||
indicatorsBox.add_child(this._workspaceIndicator.container);
|
indicatorsBox.add_child(this._workspaceIndicator.container);
|
||||||
|
|
||||||
this._mutterSettings = new Gio.Settings({schema_id: 'org.gnome.mutter'});
|
this._mutterSettings = new Gio.Settings({schema_id: 'org.gnome.mutter'});
|
||||||
@@ -770,12 +768,15 @@ class WindowList extends St.Widget {
|
|||||||
this._updateWorkspaceIndicatorVisibility();
|
this._updateWorkspaceIndicatorVisibility();
|
||||||
|
|
||||||
this._menuManager = new PopupMenu.PopupMenuManager(this);
|
this._menuManager = new PopupMenu.PopupMenuManager(this);
|
||||||
this._menuManager.addMenu(this._workspaceIndicator.menu);
|
this._workspaceIndicator.connectObject('menu-set',
|
||||||
|
() => this._onWorkspaceMenuSet(), this);
|
||||||
|
this._onWorkspaceMenuSet();
|
||||||
|
|
||||||
Main.layoutManager.addChrome(this, {
|
const chromeOptions = {
|
||||||
affectsStruts: true,
|
affectsStruts: true,
|
||||||
trackFullscreen: true,
|
trackFullscreen: true,
|
||||||
});
|
};
|
||||||
|
Main.layoutManager.addChrome(this, chromeOptions);
|
||||||
Main.uiGroup.set_child_above_sibling(this, Main.layoutManager.panelBox);
|
Main.uiGroup.set_child_above_sibling(this, Main.layoutManager.panelBox);
|
||||||
Main.ctrlAltTabManager.addGroup(this, _('Window List'), 'start-here-symbolic');
|
Main.ctrlAltTabManager.addGroup(this, _('Window List'), 'start-here-symbolic');
|
||||||
|
|
||||||
@@ -812,10 +813,12 @@ class WindowList extends St.Widget {
|
|||||||
|
|
||||||
Main.overview.connectObject(
|
Main.overview.connectObject(
|
||||||
'showing', () => {
|
'showing', () => {
|
||||||
|
Main.layoutManager.untrackChrome(this);
|
||||||
this.hide();
|
this.hide();
|
||||||
this._updateKeyboardAnchor();
|
this._updateKeyboardAnchor();
|
||||||
},
|
},
|
||||||
'hidden', () => {
|
'hidden', () => {
|
||||||
|
Main.layoutManager.trackChrome(this);
|
||||||
this.visible = !this._monitor.inFullscreen;
|
this.visible = !this._monitor.inFullscreen;
|
||||||
this._updateKeyboardAnchor();
|
this._updateKeyboardAnchor();
|
||||||
}, this);
|
}, this);
|
||||||
@@ -828,8 +831,8 @@ class WindowList extends St.Widget {
|
|||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
this._windowSignals = new Map();
|
this._windowSignals = new Map();
|
||||||
this._windowCreatedId = global.display.connect(
|
global.display.connectObject(
|
||||||
'window-created', (dsp, win) => this._addWindow(win));
|
'window-created', (dsp, win) => this._addWindow(win, true), this);
|
||||||
|
|
||||||
Main.xdndHandler.connectObject(
|
Main.xdndHandler.connectObject(
|
||||||
'drag-begin', () => this._monitorDrag(),
|
'drag-begin', () => this._monitorDrag(),
|
||||||
@@ -844,8 +847,8 @@ class WindowList extends St.Widget {
|
|||||||
this._dndWindow = null;
|
this._dndWindow = null;
|
||||||
|
|
||||||
this._settings = settings;
|
this._settings = settings;
|
||||||
this._settings.connect('changed::grouping-mode',
|
this._settings.connectObject('changed::grouping-mode',
|
||||||
() => this._groupingModeChanged());
|
() => this._groupingModeChanged(), this);
|
||||||
this._grouped = undefined;
|
this._grouped = undefined;
|
||||||
this._groupingModeChanged();
|
this._groupingModeChanged();
|
||||||
}
|
}
|
||||||
@@ -867,6 +870,11 @@ class WindowList extends St.Widget {
|
|||||||
children[newActive].activate();
|
children[newActive].activate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onWorkspaceMenuSet() {
|
||||||
|
if (this._workspaceIndicator.menu)
|
||||||
|
this._menuManager.addMenu(this._workspaceIndicator.menu);
|
||||||
|
}
|
||||||
|
|
||||||
_updatePosition() {
|
_updatePosition() {
|
||||||
this.set_position(
|
this.set_position(
|
||||||
this._monitor.x,
|
this._monitor.x,
|
||||||
@@ -883,20 +891,6 @@ class WindowList extends St.Widget {
|
|||||||
this._workspaceIndicator.visible = hasWorkspaces && workspacesOnMonitor;
|
this._workspaceIndicator.visible = hasWorkspaces && workspacesOnMonitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateWindowListVisibility() {
|
|
||||||
const {windowPicker} = Extension.lookupByURL(import.meta.url);
|
|
||||||
const visible = !windowPicker.visible;
|
|
||||||
|
|
||||||
this._windowList.ease({
|
|
||||||
opacity: visible ? 255 : 0,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
duration: Overview.ANIMATION_TIME,
|
|
||||||
});
|
|
||||||
|
|
||||||
this._windowList.reactive = visible;
|
|
||||||
this._windowList.get_children().forEach(c => (c.reactive = visible));
|
|
||||||
}
|
|
||||||
|
|
||||||
_getPreferredUngroupedWindowListWidth() {
|
_getPreferredUngroupedWindowListWidth() {
|
||||||
if (this._windowList.get_n_children() === 0)
|
if (this._windowList.get_n_children() === 0)
|
||||||
return this._windowList.get_preferred_width(-1)[1];
|
return this._windowList.get_preferred_width(-1)[1];
|
||||||
@@ -955,14 +949,14 @@ class WindowList extends St.Widget {
|
|||||||
w2.metaWindow.get_stable_sequence();
|
w2.metaWindow.get_stable_sequence();
|
||||||
});
|
});
|
||||||
for (let i = 0; i < windows.length; i++)
|
for (let i = 0; i < windows.length; i++)
|
||||||
this._addWindow(windows[i].metaWindow);
|
this._addWindow(windows[i].metaWindow, false);
|
||||||
} else {
|
} else {
|
||||||
let apps = this._appSystem.get_running().sort((a1, a2) => {
|
let apps = this._appSystem.get_running().sort((a1, a2) => {
|
||||||
return _getAppStableSequence(a1) -
|
return _getAppStableSequence(a1) -
|
||||||
_getAppStableSequence(a2);
|
_getAppStableSequence(a2);
|
||||||
});
|
});
|
||||||
for (let i = 0; i < apps.length; i++)
|
for (let i = 0; i < apps.length; i++)
|
||||||
this._addApp(apps[i]);
|
this._addApp(apps[i], false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -976,26 +970,26 @@ class WindowList extends St.Widget {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (app.state === Shell.AppState.RUNNING)
|
if (app.state === Shell.AppState.RUNNING)
|
||||||
this._addApp(app);
|
this._addApp(app, true);
|
||||||
else if (app.state === Shell.AppState.STOPPED)
|
else if (app.state === Shell.AppState.STOPPED)
|
||||||
this._removeApp(app);
|
this._removeApp(app);
|
||||||
}
|
}
|
||||||
|
|
||||||
_addApp(app) {
|
_addApp(app, animate) {
|
||||||
let button = new AppButton(app, this._perMonitor, this._monitor.index);
|
let button = new AppButton(app, this._perMonitor, this._monitor.index);
|
||||||
this._settings.bind('display-all-workspaces',
|
this._settings.bind('display-all-workspaces',
|
||||||
button, 'ignore-workspace', Gio.SettingsBindFlags.GET);
|
button, 'ignore-workspace', Gio.SettingsBindFlags.GET);
|
||||||
this._windowList.add_child(button);
|
this._windowList.add_child(button);
|
||||||
|
button.show(animate);
|
||||||
}
|
}
|
||||||
|
|
||||||
_removeApp(app) {
|
_removeApp(app) {
|
||||||
let children = this._windowList.get_children();
|
let children = this._windowList.get_children();
|
||||||
let child = children.find(c => c.app === app);
|
let child = children.find(c => c.app === app);
|
||||||
if (child)
|
child?.animateOutAndDestroy();
|
||||||
child.destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_addWindow(win) {
|
_addWindow(win, animate) {
|
||||||
if (!this._grouped)
|
if (!this._grouped)
|
||||||
this._checkGrouping();
|
this._checkGrouping();
|
||||||
|
|
||||||
@@ -1013,6 +1007,7 @@ class WindowList extends St.Widget {
|
|||||||
this._settings.bind('display-all-workspaces',
|
this._settings.bind('display-all-workspaces',
|
||||||
button, 'ignore-workspace', Gio.SettingsBindFlags.GET);
|
button, 'ignore-workspace', Gio.SettingsBindFlags.GET);
|
||||||
this._windowList.add_child(button);
|
this._windowList.add_child(button);
|
||||||
|
button.show(animate);
|
||||||
}
|
}
|
||||||
|
|
||||||
_removeWindow(win) {
|
_removeWindow(win) {
|
||||||
@@ -1029,8 +1024,7 @@ class WindowList extends St.Widget {
|
|||||||
|
|
||||||
let children = this._windowList.get_children();
|
let children = this._windowList.get_children();
|
||||||
let child = children.find(c => c.metaWindow === win);
|
let child = children.find(c => c.metaWindow === win);
|
||||||
if (child)
|
child?.animateOutAndDestroy();
|
||||||
child.destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_monitorDrag() {
|
_monitorDrag() {
|
||||||
@@ -1092,7 +1086,8 @@ class WindowList extends St.Widget {
|
|||||||
|
|
||||||
this._stopMonitoringDrag();
|
this._stopMonitoringDrag();
|
||||||
|
|
||||||
this._settings.run_dispose();
|
this._settings.disconnectObject();
|
||||||
|
this._settings = null;
|
||||||
|
|
||||||
let windows = global.get_window_actors();
|
let windows = global.get_window_actors();
|
||||||
for (let i = 0; i < windows.length; i++)
|
for (let i = 0; i < windows.length; i++)
|
||||||
@@ -1100,12 +1095,33 @@ class WindowList extends St.Widget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class BottomWorkspaceIndicator extends WorkspaceIndicator {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(params) {
|
||||||
|
super(params);
|
||||||
|
|
||||||
|
this.remove_style_class_name('panel-button');
|
||||||
|
}
|
||||||
|
|
||||||
|
setMenu(menu) {
|
||||||
|
super.setMenu(menu);
|
||||||
|
|
||||||
|
if (!menu)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.menu.actor.updateArrowSide(St.Side.BOTTOM);
|
||||||
|
this.menu.actor.remove_style_class_name('panel-menu');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export default class WindowListExtension extends Extension {
|
export default class WindowListExtension extends Extension {
|
||||||
constructor(metadata) {
|
constructor(metadata) {
|
||||||
super(metadata);
|
super(metadata);
|
||||||
|
|
||||||
this._windowLists = null;
|
this._windowLists = null;
|
||||||
this._hideOverviewOrig = Main.overview.hide;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
@@ -1118,13 +1134,6 @@ export default class WindowListExtension extends Extension {
|
|||||||
Main.layoutManager.connectObject('monitors-changed',
|
Main.layoutManager.connectObject('monitors-changed',
|
||||||
() => this._buildWindowLists(), this);
|
() => this._buildWindowLists(), this);
|
||||||
|
|
||||||
this.windowPicker = new WindowPicker();
|
|
||||||
|
|
||||||
Main.overview.hide = () => {
|
|
||||||
this.windowPicker.close();
|
|
||||||
this._hideOverviewOrig.call(Main.overview);
|
|
||||||
};
|
|
||||||
|
|
||||||
this._buildWindowLists();
|
this._buildWindowLists();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1144,86 +1153,18 @@ export default class WindowListExtension extends Extension {
|
|||||||
if (!this._windowLists)
|
if (!this._windowLists)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._settings.disconnectObject(this);
|
|
||||||
Main.layoutManager.disconnectObject(this);
|
Main.layoutManager.disconnectObject(this);
|
||||||
|
this._settings.disconnectObject(this);
|
||||||
|
this._settings = null;
|
||||||
|
|
||||||
this._windowLists.forEach(windowList => {
|
this._windowLists.forEach(windowList => {
|
||||||
windowList.hide();
|
windowList.hide();
|
||||||
windowList.destroy();
|
windowList.destroy();
|
||||||
});
|
});
|
||||||
this._windowLists = null;
|
this._windowLists = null;
|
||||||
|
|
||||||
this.windowPicker.destroy();
|
|
||||||
delete this.windowPicker;
|
|
||||||
|
|
||||||
Main.overview.hide = this._hideOverviewOrig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
someWindowListContains(actor) {
|
someWindowListContains(actor) {
|
||||||
return this._windowLists.some(list => list.contains(actor));
|
return this._windowLists.some(list => list.contains(actor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Tooltip extends St.Label {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(widget, params) {
|
|
||||||
super(params);
|
|
||||||
|
|
||||||
this._widget = widget;
|
|
||||||
|
|
||||||
this._widget.connect('notify::hover', () => {
|
|
||||||
if (this._widget.hover)
|
|
||||||
this.open();
|
|
||||||
else
|
|
||||||
this.close();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
open() {
|
|
||||||
const buttonTitleWidget = this._widget.label_actor;
|
|
||||||
const [, , preferredTitleWidth] = buttonTitleWidget.get_preferred_size();
|
|
||||||
const maxTitleWidth = buttonTitleWidget.allocation.get_width();
|
|
||||||
const isTitleFullyShown = preferredTitleWidth <= maxTitleWidth;
|
|
||||||
|
|
||||||
if (isTitleFullyShown)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.set({
|
|
||||||
text: this._widget.label_actor.get_text(),
|
|
||||||
visible: true,
|
|
||||||
opacity: 0,
|
|
||||||
});
|
|
||||||
|
|
||||||
const [stageX, stageY] = this._widget.get_transformed_position();
|
|
||||||
const thumbWidth = this._widget.allocation.get_width();
|
|
||||||
const tipWidth = this.width;
|
|
||||||
const tipHeight = this.height;
|
|
||||||
const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
|
|
||||||
const monitor = Main.layoutManager.findMonitorForActor(this);
|
|
||||||
const x = Math.clamp(
|
|
||||||
stageX + xOffset,
|
|
||||||
monitor.x,
|
|
||||||
monitor.x + monitor.width - tipWidth);
|
|
||||||
const y = stageY - tipHeight - TOOLTIP_OFFSET;
|
|
||||||
this.set_position(x, y);
|
|
||||||
|
|
||||||
this.ease({
|
|
||||||
opacity: 255,
|
|
||||||
duration: TOOLTIP_ANIMATION_TIME,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete: () => (this.visible = this._widget.hover),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
close() {
|
|
||||||
this.ease({
|
|
||||||
opacity: 0,
|
|
||||||
duration: TOOLTIP_ANIMATION_TIME,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete: () => (this.visible = this._widget.hover),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -12,5 +12,32 @@ extension_data += files(
|
|||||||
'stylesheet-light.css'
|
'stylesheet-light.css'
|
||||||
)
|
)
|
||||||
|
|
||||||
extension_sources += files('prefs.js', 'windowPicker.js', 'workspaceIndicator.js')
|
transform_stylesheet = [
|
||||||
|
'sed', '-E',
|
||||||
|
'-e', 's:^\.(workspace-indicator):.window-list-\\1:',
|
||||||
|
'-e', '/^@import/d',
|
||||||
|
'@INPUT@',
|
||||||
|
]
|
||||||
|
|
||||||
|
workspaceIndicatorSources = [
|
||||||
|
configure_file(
|
||||||
|
input: '../workspace-indicator/workspaceIndicator.js',
|
||||||
|
output: '@PLAINNAME@',
|
||||||
|
copy: true,
|
||||||
|
),
|
||||||
|
configure_file(
|
||||||
|
input: '../workspace-indicator/stylesheet-dark.css',
|
||||||
|
output: 'stylesheet-workspace-switcher-dark.css',
|
||||||
|
command: transform_stylesheet,
|
||||||
|
capture: true,
|
||||||
|
),
|
||||||
|
configure_file(
|
||||||
|
input: '../workspace-indicator/stylesheet-light.css',
|
||||||
|
output: 'stylesheet-workspace-switcher-light.css',
|
||||||
|
command: transform_stylesheet,
|
||||||
|
capture: true,
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
extension_sources += files('prefs.js') + workspaceIndicatorSources
|
||||||
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
|
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
|
||||||
|
|||||||
@@ -36,5 +36,9 @@ SPDX-License-Identifier: GPL-2.0-or-later
|
|||||||
only on the primary one.
|
only on the primary one.
|
||||||
</description>
|
</description>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="embed-previews" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<summary>Show workspace previews in window list</summary>
|
||||||
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
</schemalist>
|
</schemalist>
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
||||||
import Adw from 'gi://Adw';
|
import Adw from 'gi://Adw';
|
||||||
import Gio from 'gi://Gio';
|
import Gio from 'gi://Gio';
|
||||||
import GLib from 'gi://GLib';
|
import GLib from 'gi://GLib';
|
||||||
@@ -30,6 +29,8 @@ class WindowListPrefsWidget extends Adw.PreferencesPage {
|
|||||||
this._settings.create_action('show-on-all-monitors'));
|
this._settings.create_action('show-on-all-monitors'));
|
||||||
this._actionGroup.add_action(
|
this._actionGroup.add_action(
|
||||||
this._settings.create_action('display-all-workspaces'));
|
this._settings.create_action('display-all-workspaces'));
|
||||||
|
this._actionGroup.add_action(
|
||||||
|
this._settings.create_action('embed-previews'));
|
||||||
|
|
||||||
const groupingGroup = new Adw.PreferencesGroup({
|
const groupingGroup = new Adw.PreferencesGroup({
|
||||||
title: _('Window Grouping'),
|
title: _('Window Grouping'),
|
||||||
@@ -58,28 +59,22 @@ class WindowListPrefsWidget extends Adw.PreferencesPage {
|
|||||||
const miscGroup = new Adw.PreferencesGroup();
|
const miscGroup = new Adw.PreferencesGroup();
|
||||||
this.add(miscGroup);
|
this.add(miscGroup);
|
||||||
|
|
||||||
let toggle = new Gtk.Switch({
|
let row = new Adw.SwitchRow({
|
||||||
action_name: 'window-list.show-on-all-monitors',
|
|
||||||
valign: Gtk.Align.CENTER,
|
|
||||||
});
|
|
||||||
let row = new Adw.ActionRow({
|
|
||||||
title: _('Show on all monitors'),
|
title: _('Show on all monitors'),
|
||||||
activatable_widget: toggle,
|
action_name: 'window-list.show-on-all-monitors',
|
||||||
});
|
});
|
||||||
row.add_suffix(toggle);
|
|
||||||
miscGroup.add(row);
|
miscGroup.add(row);
|
||||||
|
|
||||||
toggle = new Gtk.Switch({
|
row = new Adw.SwitchRow({
|
||||||
action_name: 'window-list.display-all-workspaces',
|
|
||||||
valign: Gtk.Align.CENTER,
|
|
||||||
});
|
|
||||||
this._settings.bind('display-all-workspaces',
|
|
||||||
toggle, 'active', Gio.SettingsBindFlags.DEFAULT);
|
|
||||||
row = new Adw.ActionRow({
|
|
||||||
title: _('Show windows from all workspaces'),
|
title: _('Show windows from all workspaces'),
|
||||||
activatable_widget: toggle,
|
action_name: 'window-list.display-all-workspaces',
|
||||||
|
});
|
||||||
|
miscGroup.add(row);
|
||||||
|
|
||||||
|
row = new Adw.SwitchRow({
|
||||||
|
title: _('Show workspace previews'),
|
||||||
|
action_name: 'window-list.embed-previews',
|
||||||
});
|
});
|
||||||
row.add_suffix(toggle);
|
|
||||||
miscGroup.add(row);
|
miscGroup.add(row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,117 +4,80 @@
|
|||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
*/
|
*/
|
||||||
|
@import url("stylesheet-workspace-switcher-dark.css");
|
||||||
|
|
||||||
.window-list {
|
.window-list {
|
||||||
spacing: 2px;
|
spacing: 2px;
|
||||||
font-size: 10pt;
|
font-size: 10pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom-panel {
|
.bottom-panel {
|
||||||
background-color: #000000;
|
background-color: #000000;
|
||||||
border-top-width: 0px;
|
border-top-width: 0px;
|
||||||
padding: 2px;
|
height: 2.45em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button {
|
.window-button {
|
||||||
padding: 2px, 1px;
|
padding: 4px, 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button:first-child:ltr {
|
.window-button:first-child:ltr {
|
||||||
padding-left: 2px;
|
padding-left: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button:last-child:rtl {
|
.window-button:last-child:rtl {
|
||||||
padding-right: 2px;
|
padding-right: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button-box {
|
.window-button-box {
|
||||||
spacing: 4px;
|
spacing: 4px;
|
||||||
}
|
|
||||||
|
|
||||||
.window-button > StWidget,
|
|
||||||
.window-picker-toggle > StWidget {
|
|
||||||
color: #bbb;
|
|
||||||
background-color: #1d1d1d;
|
|
||||||
border-radius: 4px;
|
|
||||||
padding: 3px 6px 1px;
|
|
||||||
transition: 100ms ease;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button > StWidget {
|
.window-button > StWidget {
|
||||||
-st-natural-width: 18.75em;
|
color: #fff;
|
||||||
max-width: 18.75em;
|
background-color: transparent;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 3px 6px 1px;
|
||||||
|
transition: 100ms ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button:hover > StWidget,
|
.window-button > StWidget {
|
||||||
.window-picker-toggle:hover > StWidget {
|
-st-natural-width: 18.75em;
|
||||||
color: #fff;
|
max-width: 18.75em;
|
||||||
background-color: #303030;
|
}
|
||||||
|
|
||||||
|
.window-button:hover > StWidget {
|
||||||
|
background-color: #303030;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button:active > StWidget,
|
.window-button:active > StWidget,
|
||||||
.window-button:focus > StWidget {
|
.window-button:focus > StWidget {
|
||||||
color: #fff;
|
background-color: st-lighten(#303030, 5%);
|
||||||
background-color: #3f3f3f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button.focused > StWidget,
|
.window-button.focused > StWidget {
|
||||||
.window-picker-toggle:checked > StWidget {
|
background-color: #5b5b5b;
|
||||||
color: #fff;
|
|
||||||
background-color: #3f3f3f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button.focused:active > StWidget,
|
.window-button.focused:hover > StWidget {
|
||||||
.window-picker-toggle:checked:active > StWidget {
|
background-color: st-lighten(#5b5b5b, 5%);
|
||||||
color: #fff;
|
}
|
||||||
background-color: #3f3f3f;
|
|
||||||
}
|
.window-button.focused:active > StWidget {
|
||||||
|
background-color: st-lighten(#5b5b5b, 10%);
|
||||||
|
}
|
||||||
|
|
||||||
.window-button.minimized > StWidget {
|
.window-button.minimized > StWidget {
|
||||||
color: #666;
|
color: #666;
|
||||||
background-color: #161616;
|
background-color: #161616;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button.minimized:active > StWidget {
|
.window-button.minimized:active > StWidget {
|
||||||
color: #666;
|
color: #666;
|
||||||
background-color: #161616;
|
background-color: #161616;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-button-icon {
|
.window-button-icon {
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 24px;
|
height: 24px;
|
||||||
}
|
|
||||||
|
|
||||||
.window-list-workspace-indicator .status-label-bin {
|
|
||||||
background-color: rgba(200, 200, 200, 0.3);
|
|
||||||
padding: 0 3px;
|
|
||||||
margin: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.window-list-workspace-indicator .workspaces-box {
|
|
||||||
spacing: 3px;
|
|
||||||
padding: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.window-list-workspace-indicator .workspace {
|
|
||||||
width: 52px;
|
|
||||||
border-radius: 4px;
|
|
||||||
background-color: #1e1e1e;
|
|
||||||
}
|
|
||||||
|
|
||||||
.window-list-workspace-indicator .workspace.active {
|
|
||||||
background-color: #3f3f3f;
|
|
||||||
}
|
|
||||||
|
|
||||||
.window-list-window-preview {
|
|
||||||
background-color: #bebebe;
|
|
||||||
border-radius: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.window-list-window-preview.active {
|
|
||||||
background-color: #d4d4d4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification {
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,70 +6,53 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
@import url("stylesheet-dark.css");
|
@import url("stylesheet-dark.css");
|
||||||
|
@import url("stylesheet-workspace-switcher-light.css");
|
||||||
|
|
||||||
#panel.bottom-panel {
|
#panel.bottom-panel {
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
border-bottom-width: 0px;
|
border-bottom-width: 0px;
|
||||||
height: 2.25em ;
|
height: 2.5em;
|
||||||
padding: 2px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom-panel .window-button > StWidget,
|
.bottom-panel .window-button > StWidget {
|
||||||
.bottom-panel .window-picker-toggle > StWidget {
|
|
||||||
color: #2e3436;
|
|
||||||
background-color: #eee;
|
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
padding: 3px 6px 1px;
|
padding: 3px 6px 1px;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
border: 1px solid rgba(0,0,0,0.2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom-panel .window-button > StWidget {
|
.window-button > StWidget {
|
||||||
-st-natural-width: 18.7em;
|
color: #000;
|
||||||
max-width: 18.75em;
|
background-color: transparent;
|
||||||
}
|
|
||||||
|
|
||||||
.bottom-panel .window-button:hover > StWidget,
|
|
||||||
.bottom-panel .window-picker-toggle:hover > StWidget {
|
|
||||||
background-color: #f9f9f9;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bottom-panel .window-button:active > StWidget,
|
|
||||||
.bottom-panel .window-button:focus > StWidget {
|
|
||||||
box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bottom-panel .window-button.focused > StWidget,
|
|
||||||
.bottom-panel .window-picker-toggle:checked > StWidget {
|
|
||||||
background-color: #ccc;
|
|
||||||
box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bottom-panel .window-button.focused:hover > StWidget {
|
|
||||||
background-color: #e9e9e9;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bottom-panel .window-button.minimized > StWidget {
|
|
||||||
color: #888;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* workspace switcher */
|
|
||||||
.window-list-workspace-indicator .workspace {
|
|
||||||
border: 2px solid #f6f5f4;
|
|
||||||
background-color: #ccc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-list-workspace-indicator .workspace.active {
|
.window-button:hover > StWidget {
|
||||||
border-color: #888;
|
background-color: st-darken(#eee,5%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-list-window-preview {
|
.window-button:active > StWidget,
|
||||||
background-color: #ededed;
|
.window-button:focus > StWidget {
|
||||||
border: 1px solid #ccc;
|
background-color: st-darken(#eee, 10%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-list-window-preview.active {
|
.window-button.focused > StWidget {
|
||||||
background-color: #f6f5f4;
|
background-color: st-darken(#eee,15%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.window-button.focused:hover > StWidget {
|
||||||
|
background-color: st-darken(#eee, 20%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.window-button.focused:active > StWidget {
|
||||||
|
background-color: st-darken(#eee, 25%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.window-button.minimized > StWidget {
|
||||||
|
color: #aaa;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.window-button.minimized:active > StWidget {
|
||||||
|
color: #aaa;
|
||||||
|
background-color: #f9f9f9;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,342 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
|
|
||||||
// SPDX-FileCopyrightText: 2019 Marco Trevisan (Treviño) <mail@3v1n0.net>
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
import Clutter from 'gi://Clutter';
|
|
||||||
import GObject from 'gi://GObject';
|
|
||||||
import Shell from 'gi://Shell';
|
|
||||||
import St from 'gi://St';
|
|
||||||
|
|
||||||
import {Extension, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
|
|
||||||
import * as Layout from 'resource:///org/gnome/shell/ui/layout.js';
|
|
||||||
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
|
||||||
import {WorkspacesDisplay} from 'resource:///org/gnome/shell/ui/workspacesView.js';
|
|
||||||
import * as Workspace from 'resource:///org/gnome/shell/ui/workspace.js';
|
|
||||||
|
|
||||||
import {VIGNETTE_BRIGHTNESS} from 'resource:///org/gnome/shell/ui/lightbox.js';
|
|
||||||
import {
|
|
||||||
SIDE_CONTROLS_ANIMATION_TIME,
|
|
||||||
OverviewAdjustment,
|
|
||||||
ControlsState
|
|
||||||
} from 'resource:///org/gnome/shell/ui/overviewControls.js';
|
|
||||||
|
|
||||||
class MyWorkspacesDisplay extends WorkspacesDisplay {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(controls, overviewAdjustment) {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
const workspaceAdjustment = new St.Adjustment({
|
|
||||||
value: workspaceManager.get_active_workspace_index(),
|
|
||||||
lower: 0,
|
|
||||||
page_increment: 1,
|
|
||||||
page_size: 1,
|
|
||||||
step_increment: 0,
|
|
||||||
upper: workspaceManager.n_workspaces,
|
|
||||||
});
|
|
||||||
|
|
||||||
super(controls, workspaceAdjustment, overviewAdjustment);
|
|
||||||
|
|
||||||
this._windowPicker = controls;
|
|
||||||
|
|
||||||
this._workspaceAdjustment = workspaceAdjustment;
|
|
||||||
this._workspaceAdjustment.actor = this;
|
|
||||||
|
|
||||||
workspaceManager.connectObject('notify::n-workspaces',
|
|
||||||
() => this._updateAdjustment(), this);
|
|
||||||
|
|
||||||
this.add_constraint(
|
|
||||||
new Layout.MonitorConstraint({
|
|
||||||
primary: true,
|
|
||||||
work_area: true,
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
prepareToEnterOverview(...args) {
|
|
||||||
if (!this._scrollEventId) {
|
|
||||||
this._scrollEventId = this._windowPicker.connect('scroll-event',
|
|
||||||
this._onScrollEvent.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
super.prepareToEnterOverview(...args);
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_hide(...args) {
|
|
||||||
if (this._scrollEventId > 0)
|
|
||||||
this._windowPicker.disconnect(this._scrollEventId);
|
|
||||||
this._scrollEventId = 0;
|
|
||||||
|
|
||||||
super.vfunc_hide(...args);
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateAdjustment() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
this._workspaceAdjustment.set({
|
|
||||||
upper: workspaceManager.n_workspaces,
|
|
||||||
value: workspaceManager.get_active_workspace_index(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class WindowPicker extends Clutter.Actor {
|
|
||||||
static [GObject.signals] = {
|
|
||||||
'open-state-changed': {param_types: [GObject.TYPE_BOOLEAN]},
|
|
||||||
};
|
|
||||||
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super({reactive: true});
|
|
||||||
|
|
||||||
this._visible = false;
|
|
||||||
this._modal = false;
|
|
||||||
|
|
||||||
this._stageKeyPressId = 0;
|
|
||||||
|
|
||||||
this._adjustment = new OverviewAdjustment(this);
|
|
||||||
|
|
||||||
this._injectionManager = new InjectionManager();
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
|
||||||
|
|
||||||
global.bind_property('screen-width',
|
|
||||||
this, 'width',
|
|
||||||
GObject.BindingFlags.SYNC_CREATE);
|
|
||||||
global.bind_property('screen-height',
|
|
||||||
this, 'height',
|
|
||||||
GObject.BindingFlags.SYNC_CREATE);
|
|
||||||
|
|
||||||
this._workspacesDisplay = new MyWorkspacesDisplay(this, this._adjustment);
|
|
||||||
this.add_child(this._workspacesDisplay);
|
|
||||||
|
|
||||||
Main.uiGroup.insert_child_below(this, global.window_group);
|
|
||||||
|
|
||||||
if (!Main.sessionMode.hasOverview) {
|
|
||||||
this._injectBackgroundShade();
|
|
||||||
|
|
||||||
global.display.connectObject('overlay-key', () => {
|
|
||||||
if (!this._visible)
|
|
||||||
this.open();
|
|
||||||
else
|
|
||||||
this.close();
|
|
||||||
}, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_injectBackgroundShade() {
|
|
||||||
const backgroundProto = Workspace.WorkspaceBackground.prototype;
|
|
||||||
this._injectionManager.overrideMethod(backgroundProto, '_updateBorderRadius',
|
|
||||||
() => {
|
|
||||||
return function () {};
|
|
||||||
});
|
|
||||||
this._injectionManager.overrideMethod(backgroundProto, 'vfunc_allocate',
|
|
||||||
() => {
|
|
||||||
/* eslint-disable no-invalid-this */
|
|
||||||
return function (box) {
|
|
||||||
this.set_allocation(box);
|
|
||||||
|
|
||||||
const themeNode = this.get_theme_node();
|
|
||||||
const contentBox = themeNode.get_content_box(box);
|
|
||||||
|
|
||||||
this._bin.allocate(contentBox);
|
|
||||||
|
|
||||||
const [contentWidth, contentHeight] = contentBox.get_size();
|
|
||||||
const monitor = Main.layoutManager.monitors[this._monitorIndex];
|
|
||||||
const xRatio = contentWidth / this._workarea.width;
|
|
||||||
const yRatio = contentHeight / this._workarea.height;
|
|
||||||
|
|
||||||
const right = area => area.x + area.width;
|
|
||||||
const bottom = area => area.y + area.height;
|
|
||||||
|
|
||||||
const offsets = {
|
|
||||||
left: xRatio * (this._workarea.x - monitor.x),
|
|
||||||
right: xRatio * (right(monitor) - right(this._workarea)),
|
|
||||||
top: yRatio * (this._workarea.y - monitor.y),
|
|
||||||
bottom: yRatio * (bottom(monitor) - bottom(this._workarea)),
|
|
||||||
};
|
|
||||||
|
|
||||||
contentBox.set_origin(-offsets.left, -offsets.top);
|
|
||||||
contentBox.set_size(
|
|
||||||
offsets.left + contentWidth + offsets.right,
|
|
||||||
offsets.top + contentHeight + offsets.bottom);
|
|
||||||
this._backgroundGroup.allocate(contentBox);
|
|
||||||
};
|
|
||||||
/* eslint-enable */
|
|
||||||
});
|
|
||||||
this._injectionManager.overrideMethod(backgroundProto, 'vfunc_parent_set',
|
|
||||||
() => {
|
|
||||||
/* eslint-disable no-invalid-this */
|
|
||||||
return function () {
|
|
||||||
setTimeout(() => {
|
|
||||||
const parent = this.get_parent();
|
|
||||||
if (!parent)
|
|
||||||
return;
|
|
||||||
|
|
||||||
parent._overviewAdjustment.connectObject('notify::value', () => {
|
|
||||||
const {value: progress} = parent._overviewAdjustment;
|
|
||||||
const brightness = 1 - (1 - VIGNETTE_BRIGHTNESS) * progress;
|
|
||||||
for (const bg of this._backgroundGroup ?? []) {
|
|
||||||
bg.content.set({
|
|
||||||
vignette: true,
|
|
||||||
brightness,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, this);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
/* eslint-enable */
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
get visible() {
|
|
||||||
return this._visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
open() {
|
|
||||||
if (this._visible)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._visible = true;
|
|
||||||
|
|
||||||
if (!this._syncGrab())
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._fakeOverviewVisible(true);
|
|
||||||
this._workspacesDisplay.prepareToEnterOverview();
|
|
||||||
Main.overview._animationInProgress = true;
|
|
||||||
|
|
||||||
this._adjustment.value = ControlsState.HIDDEN;
|
|
||||||
this._adjustment.ease(ControlsState.WINDOW_PICKER, {
|
|
||||||
duration: SIDE_CONTROLS_ANIMATION_TIME,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete: () => (Main.overview._animationInProgress = false),
|
|
||||||
});
|
|
||||||
|
|
||||||
this._stageKeyPressId = global.stage.connect('key-press-event',
|
|
||||||
(a, event) => {
|
|
||||||
let sym = event.get_key_symbol();
|
|
||||||
if (sym === Clutter.KEY_Escape) {
|
|
||||||
this.close();
|
|
||||||
return Clutter.EVENT_STOP;
|
|
||||||
}
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
});
|
|
||||||
|
|
||||||
this.emit('open-state-changed', this._visible);
|
|
||||||
}
|
|
||||||
|
|
||||||
close() {
|
|
||||||
if (!this._visible)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._visible = false;
|
|
||||||
|
|
||||||
if (!this._syncGrab())
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._workspacesDisplay.prepareToLeaveOverview();
|
|
||||||
|
|
||||||
Main.overview._animationInProgress = true;
|
|
||||||
this._adjustment.ease(ControlsState.HIDDEN, {
|
|
||||||
duration: SIDE_CONTROLS_ANIMATION_TIME,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete: () => {
|
|
||||||
Main.overview._animationInProgress = false;
|
|
||||||
this._workspacesDisplay.hide();
|
|
||||||
this._fakeOverviewVisible(false);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
global.stage.disconnect(this._stageKeyPressId);
|
|
||||||
this._stageKeyPressId = 0;
|
|
||||||
|
|
||||||
this.emit('open-state-changed', this._visible);
|
|
||||||
}
|
|
||||||
|
|
||||||
getWorkspacesBoxForState() {
|
|
||||||
return this.allocation;
|
|
||||||
}
|
|
||||||
|
|
||||||
_fakeOverviewVisible(visible) {
|
|
||||||
// Fake overview state for WorkspacesDisplay
|
|
||||||
Main.overview._visible = visible;
|
|
||||||
|
|
||||||
// Hide real windows
|
|
||||||
Main.layoutManager._inOverview = visible;
|
|
||||||
Main.layoutManager._updateVisibility();
|
|
||||||
}
|
|
||||||
|
|
||||||
_syncGrab() {
|
|
||||||
if (this._visible) {
|
|
||||||
if (this._modal)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
const grab = Main.pushModal(global.stage, {
|
|
||||||
actionMode: Shell.ActionMode.OVERVIEW,
|
|
||||||
});
|
|
||||||
if (grab.get_seat_state() !== Clutter.GrabState.NONE) {
|
|
||||||
this._grab = grab;
|
|
||||||
this._modal = true;
|
|
||||||
} else {
|
|
||||||
Main.popModal(grab);
|
|
||||||
this.hide();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (this._modal) {
|
|
||||||
Main.popModal(this._grab);
|
|
||||||
this._modal = false;
|
|
||||||
this._grab = null;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
this._injectionManager.clear();
|
|
||||||
|
|
||||||
if (this._stageKeyPressId)
|
|
||||||
global.stage.disconnect(this._stageKeyPressId);
|
|
||||||
this._stageKeyPressId = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class WindowPickerToggle extends St.Button {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
let iconBin = new St.Widget({
|
|
||||||
layout_manager: new Clutter.BinLayout(),
|
|
||||||
});
|
|
||||||
iconBin.add_child(new St.Icon({
|
|
||||||
icon_name: 'focus-windows-symbolic',
|
|
||||||
icon_size: 16,
|
|
||||||
x_expand: true,
|
|
||||||
y_expand: true,
|
|
||||||
x_align: Clutter.ActorAlign.CENTER,
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
}));
|
|
||||||
super({
|
|
||||||
style_class: 'window-picker-toggle',
|
|
||||||
child: iconBin,
|
|
||||||
visible: !Main.sessionMode.hasOverview,
|
|
||||||
toggle_mode: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
const {windowPicker} = Extension.lookupByURL(import.meta.url);
|
|
||||||
this.connect('notify::checked', () => {
|
|
||||||
if (this.checked)
|
|
||||||
windowPicker.open();
|
|
||||||
else
|
|
||||||
windowPicker.close();
|
|
||||||
});
|
|
||||||
|
|
||||||
windowPicker.connect('open-state-changed', () => {
|
|
||||||
this.checked = windowPicker.visible;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,424 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
import Clutter from 'gi://Clutter';
|
|
||||||
import Gio from 'gi://Gio';
|
|
||||||
import GObject from 'gi://GObject';
|
|
||||||
import Meta from 'gi://Meta';
|
|
||||||
import St from 'gi://St';
|
|
||||||
|
|
||||||
import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
|
||||||
|
|
||||||
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
|
|
||||||
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
|
||||||
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
|
|
||||||
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
|
||||||
|
|
||||||
const TOOLTIP_OFFSET = 6;
|
|
||||||
const TOOLTIP_ANIMATION_TIME = 150;
|
|
||||||
|
|
||||||
const MAX_THUMBNAILS = 6;
|
|
||||||
|
|
||||||
class WindowPreview extends St.Button {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(window) {
|
|
||||||
super({
|
|
||||||
style_class: 'window-list-window-preview',
|
|
||||||
});
|
|
||||||
|
|
||||||
this._delegate = this;
|
|
||||||
DND.makeDraggable(this, {restoreOnSuccess: true});
|
|
||||||
|
|
||||||
this._window = window;
|
|
||||||
|
|
||||||
this._window.connectObject(
|
|
||||||
'size-changed', () => this.queue_relayout(),
|
|
||||||
'position-changed', () => {
|
|
||||||
this._updateVisible();
|
|
||||||
this.queue_relayout();
|
|
||||||
},
|
|
||||||
'notify::minimized', this._updateVisible.bind(this),
|
|
||||||
this);
|
|
||||||
|
|
||||||
global.display.connectObject('notify::focus-window',
|
|
||||||
this._onFocusChanged.bind(this), this);
|
|
||||||
this._onFocusChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
// needed for DND
|
|
||||||
get metaWindow() {
|
|
||||||
return this._window;
|
|
||||||
}
|
|
||||||
|
|
||||||
_onFocusChanged() {
|
|
||||||
if (global.display.focus_window === this._window)
|
|
||||||
this.add_style_class_name('active');
|
|
||||||
else
|
|
||||||
this.remove_style_class_name('active');
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateVisible() {
|
|
||||||
const monitor = Main.layoutManager.findIndexForActor(this);
|
|
||||||
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
|
||||||
this.visible = this._window.get_frame_rect().overlap(workArea) &&
|
|
||||||
this._window.window_type !== Meta.WindowType.DESKTOP &&
|
|
||||||
this._window.showing_on_its_workspace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WorkspaceLayout extends Clutter.LayoutManager {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_get_preferred_width() {
|
|
||||||
return [0, 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_get_preferred_height() {
|
|
||||||
return [0, 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_allocate(container, box) {
|
|
||||||
const monitor = Main.layoutManager.findIndexForActor(container);
|
|
||||||
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
|
||||||
const hscale = box.get_width() / workArea.width;
|
|
||||||
const vscale = box.get_height() / workArea.height;
|
|
||||||
|
|
||||||
for (const child of container) {
|
|
||||||
const childBox = new Clutter.ActorBox();
|
|
||||||
const frameRect = child.metaWindow.get_frame_rect();
|
|
||||||
childBox.set_size(
|
|
||||||
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
|
|
||||||
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
|
|
||||||
childBox.set_origin(
|
|
||||||
Math.round((frameRect.x - workArea.x) * hscale),
|
|
||||||
Math.round((frameRect.y - workArea.y) * vscale));
|
|
||||||
child.allocate(childBox);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WorkspaceThumbnail extends St.Button {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(index) {
|
|
||||||
super({
|
|
||||||
style_class: 'workspace',
|
|
||||||
child: new Clutter.Actor({
|
|
||||||
layout_manager: new WorkspaceLayout(),
|
|
||||||
clip_to_allocation: true,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
this._tooltip = new St.Label({
|
|
||||||
style_class: 'dash-label',
|
|
||||||
visible: false,
|
|
||||||
});
|
|
||||||
Main.uiGroup.add_child(this._tooltip);
|
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
|
||||||
this.connect('notify::hover', this._syncTooltip.bind(this));
|
|
||||||
|
|
||||||
this._index = index;
|
|
||||||
this._delegate = this; // needed for DND
|
|
||||||
|
|
||||||
this._windowPreviews = new Map();
|
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
this._workspace = workspaceManager.get_workspace_by_index(index);
|
|
||||||
|
|
||||||
this._workspace.connectObject(
|
|
||||||
'window-added', (ws, window) => this._addWindow(window),
|
|
||||||
'window-removed', (ws, window) => this._removeWindow(window),
|
|
||||||
this);
|
|
||||||
|
|
||||||
global.display.connectObject('restacked',
|
|
||||||
this._onRestacked.bind(this), this);
|
|
||||||
|
|
||||||
this._workspace.list_windows().forEach(w => this._addWindow(w));
|
|
||||||
this._onRestacked();
|
|
||||||
}
|
|
||||||
|
|
||||||
acceptDrop(source) {
|
|
||||||
if (!source.metaWindow)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
this._moveWindow(source.metaWindow);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
handleDragOver(source) {
|
|
||||||
if (source.metaWindow)
|
|
||||||
return DND.DragMotionResult.MOVE_DROP;
|
|
||||||
else
|
|
||||||
return DND.DragMotionResult.CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
_addWindow(window) {
|
|
||||||
if (this._windowPreviews.has(window))
|
|
||||||
return;
|
|
||||||
|
|
||||||
let preview = new WindowPreview(window);
|
|
||||||
preview.connect('clicked', (a, btn) => this.emit('clicked', btn));
|
|
||||||
this._windowPreviews.set(window, preview);
|
|
||||||
this.child.add_child(preview);
|
|
||||||
}
|
|
||||||
|
|
||||||
_removeWindow(window) {
|
|
||||||
let preview = this._windowPreviews.get(window);
|
|
||||||
if (!preview)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._windowPreviews.delete(window);
|
|
||||||
preview.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
_onRestacked() {
|
|
||||||
let lastPreview = null;
|
|
||||||
let windows = global.get_window_actors().map(a => a.meta_window);
|
|
||||||
for (let i = 0; i < windows.length; i++) {
|
|
||||||
let preview = this._windowPreviews.get(windows[i]);
|
|
||||||
if (!preview)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
this.child.set_child_above_sibling(preview, lastPreview);
|
|
||||||
lastPreview = preview;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_moveWindow(window) {
|
|
||||||
let monitorIndex = Main.layoutManager.findIndexForActor(this);
|
|
||||||
if (monitorIndex !== window.get_monitor())
|
|
||||||
window.move_to_monitor(monitorIndex);
|
|
||||||
window.change_workspace_by_index(this._index, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
on_clicked() {
|
|
||||||
let ws = global.workspace_manager.get_workspace_by_index(this._index);
|
|
||||||
if (ws)
|
|
||||||
ws.activate(global.get_current_time());
|
|
||||||
}
|
|
||||||
|
|
||||||
_syncTooltip() {
|
|
||||||
if (this.hover) {
|
|
||||||
this._tooltip.set({
|
|
||||||
text: Meta.prefs_get_workspace_name(this._index),
|
|
||||||
visible: true,
|
|
||||||
opacity: 0,
|
|
||||||
});
|
|
||||||
|
|
||||||
const [stageX, stageY] = this.get_transformed_position();
|
|
||||||
const thumbWidth = this.allocation.get_width();
|
|
||||||
const tipWidth = this._tooltip.width;
|
|
||||||
const tipHeight = this._tooltip.height;
|
|
||||||
const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
|
|
||||||
const monitor = Main.layoutManager.findMonitorForActor(this);
|
|
||||||
const x = Math.clamp(
|
|
||||||
stageX + xOffset,
|
|
||||||
monitor.x,
|
|
||||||
monitor.x + monitor.width - tipWidth);
|
|
||||||
const y = stageY - tipHeight - TOOLTIP_OFFSET;
|
|
||||||
this._tooltip.set_position(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._tooltip.ease({
|
|
||||||
opacity: this.hover ? 255 : 0,
|
|
||||||
duration: TOOLTIP_ANIMATION_TIME,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete: () => (this._tooltip.visible = this.hover),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
this._tooltip.destroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class WorkspaceIndicator extends PanelMenu.Button {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super(0.5, _('Workspace Indicator'), true);
|
|
||||||
this.setMenu(new PopupMenu.PopupMenu(this, 0.0, St.Side.BOTTOM));
|
|
||||||
this.add_style_class_name('window-list-workspace-indicator');
|
|
||||||
this.remove_style_class_name('panel-button');
|
|
||||||
this.menu.actor.remove_style_class_name('panel-menu');
|
|
||||||
|
|
||||||
let container = new St.Widget({
|
|
||||||
layout_manager: new Clutter.BinLayout(),
|
|
||||||
x_expand: true,
|
|
||||||
y_expand: true,
|
|
||||||
});
|
|
||||||
this.add_actor(container);
|
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
this._currentWorkspace = workspaceManager.get_active_workspace_index();
|
|
||||||
this._statusLabel = new St.Label({text: this._getStatusText()});
|
|
||||||
|
|
||||||
this._statusBin = new St.Bin({
|
|
||||||
style_class: 'status-label-bin',
|
|
||||||
x_expand: true,
|
|
||||||
y_expand: true,
|
|
||||||
child: this._statusLabel,
|
|
||||||
});
|
|
||||||
container.add_actor(this._statusBin);
|
|
||||||
|
|
||||||
this._thumbnailsBox = new St.BoxLayout({
|
|
||||||
style_class: 'workspaces-box',
|
|
||||||
y_expand: true,
|
|
||||||
reactive: true,
|
|
||||||
});
|
|
||||||
this._thumbnailsBox.connect('scroll-event',
|
|
||||||
this._onScrollEvent.bind(this));
|
|
||||||
container.add_actor(this._thumbnailsBox);
|
|
||||||
|
|
||||||
this._workspacesItems = [];
|
|
||||||
|
|
||||||
workspaceManager.connectObject(
|
|
||||||
'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER,
|
|
||||||
'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER,
|
|
||||||
'notify::layout-rows', this._updateThumbnailVisibility.bind(this),
|
|
||||||
this);
|
|
||||||
|
|
||||||
this.connect('scroll-event', this._onScrollEvent.bind(this));
|
|
||||||
this._updateMenu();
|
|
||||||
this._updateThumbnails();
|
|
||||||
this._updateThumbnailVisibility();
|
|
||||||
|
|
||||||
this._settings = new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'});
|
|
||||||
this._settings.connectObject('changed::workspace-names',
|
|
||||||
() => this._updateMenuLabels(), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateThumbnailVisibility() {
|
|
||||||
const {workspaceManager} = global;
|
|
||||||
const vertical = workspaceManager.layout_rows === -1;
|
|
||||||
const useMenu =
|
|
||||||
vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS;
|
|
||||||
this.reactive = useMenu;
|
|
||||||
|
|
||||||
this._statusBin.visible = useMenu;
|
|
||||||
this._thumbnailsBox.visible = !useMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
_onWorkspaceSwitched() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
this._currentWorkspace = workspaceManager.get_active_workspace_index();
|
|
||||||
|
|
||||||
this._updateMenuOrnament();
|
|
||||||
this._updateActiveThumbnail();
|
|
||||||
|
|
||||||
this._statusLabel.set_text(this._getStatusText());
|
|
||||||
}
|
|
||||||
|
|
||||||
_nWorkspacesChanged() {
|
|
||||||
this._updateMenu();
|
|
||||||
this._updateThumbnails();
|
|
||||||
this._updateThumbnailVisibility();
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateMenuOrnament() {
|
|
||||||
for (let i = 0; i < this._workspacesItems.length; i++) {
|
|
||||||
this._workspacesItems[i].setOrnament(i === this._currentWorkspace
|
|
||||||
? PopupMenu.Ornament.DOT
|
|
||||||
: PopupMenu.Ornament.NONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateActiveThumbnail() {
|
|
||||||
let thumbs = this._thumbnailsBox.get_children();
|
|
||||||
for (let i = 0; i < thumbs.length; i++) {
|
|
||||||
if (i === this._currentWorkspace)
|
|
||||||
thumbs[i].add_style_class_name('active');
|
|
||||||
else
|
|
||||||
thumbs[i].remove_style_class_name('active');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_getStatusText() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
let current = workspaceManager.get_active_workspace_index();
|
|
||||||
let total = workspaceManager.n_workspaces;
|
|
||||||
|
|
||||||
return '%d / %d'.format(current + 1, total);
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateMenuLabels() {
|
|
||||||
for (let i = 0; i < this._workspacesItems.length; i++) {
|
|
||||||
let item = this._workspacesItems[i];
|
|
||||||
let name = Meta.prefs_get_workspace_name(i);
|
|
||||||
item.label.text = name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateMenu() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
this.menu.removeAll();
|
|
||||||
this._workspacesItems = [];
|
|
||||||
this._currentWorkspace = workspaceManager.get_active_workspace_index();
|
|
||||||
|
|
||||||
for (let i = 0; i < workspaceManager.n_workspaces; i++) {
|
|
||||||
let name = Meta.prefs_get_workspace_name(i);
|
|
||||||
let item = new PopupMenu.PopupMenuItem(name);
|
|
||||||
item.workspaceId = i;
|
|
||||||
|
|
||||||
item.connect('activate', () => {
|
|
||||||
this._activate(item.workspaceId);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (i === this._currentWorkspace)
|
|
||||||
item.setOrnament(PopupMenu.Ornament.DOT);
|
|
||||||
|
|
||||||
this.menu.addMenuItem(item);
|
|
||||||
this._workspacesItems[i] = item;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._statusLabel.set_text(this._getStatusText());
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateThumbnails() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
this._thumbnailsBox.destroy_all_children();
|
|
||||||
|
|
||||||
for (let i = 0; i < workspaceManager.n_workspaces; i++) {
|
|
||||||
let thumb = new WorkspaceThumbnail(i);
|
|
||||||
this._thumbnailsBox.add_actor(thumb);
|
|
||||||
}
|
|
||||||
this._updateActiveThumbnail();
|
|
||||||
}
|
|
||||||
|
|
||||||
_activate(index) {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
if (index >= 0 && index < workspaceManager.n_workspaces) {
|
|
||||||
let metaWorkspace = workspaceManager.get_workspace_by_index(index);
|
|
||||||
metaWorkspace.activate(global.get_current_time());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_onScrollEvent(actor, event) {
|
|
||||||
let direction = event.get_scroll_direction();
|
|
||||||
let diff = 0;
|
|
||||||
if (direction === Clutter.ScrollDirection.DOWN)
|
|
||||||
diff = 1;
|
|
||||||
else if (direction === Clutter.ScrollDirection.UP)
|
|
||||||
diff = -1;
|
|
||||||
else
|
|
||||||
return;
|
|
||||||
|
|
||||||
let newIndex = this._currentWorkspace + diff;
|
|
||||||
this._activate(newIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6,7 +6,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
||||||
import Clutter from 'gi://Clutter';
|
import Clutter from 'gi://Clutter';
|
||||||
import Graphene from 'gi://Graphene';
|
import Graphene from 'gi://Graphene';
|
||||||
import St from 'gi://St';
|
import St from 'gi://St';
|
||||||
@@ -86,7 +85,7 @@ export default class Extension {
|
|||||||
style_class: 'extension-windowsNavigator-window-tooltip',
|
style_class: 'extension-windowsNavigator-window-tooltip',
|
||||||
visible: false,
|
visible: false,
|
||||||
});
|
});
|
||||||
this.add_actor(this._tip);
|
this.add_child(this._tip);
|
||||||
|
|
||||||
this.connect('notify::scale-x', () => {
|
this.connect('notify::scale-x', () => {
|
||||||
this._tip.set_scale(1 / this.scale_x, 1 / this.scale_x);
|
this._tip.set_scale(1 / this.scale_x, 1 / this.scale_x);
|
||||||
|
|||||||
@@ -4,437 +4,17 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
import Clutter from 'gi://Clutter';
|
|
||||||
import Gio from 'gi://Gio';
|
|
||||||
import GObject from 'gi://GObject';
|
|
||||||
import Meta from 'gi://Meta';
|
|
||||||
import St from 'gi://St';
|
|
||||||
|
|
||||||
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
|
||||||
|
|
||||||
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
|
|
||||||
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
|
|
||||||
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
|
||||||
|
|
||||||
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
import {WorkspaceIndicator} from './workspaceIndicator.js';
|
||||||
const WORKSPACE_KEY = 'workspace-names';
|
|
||||||
|
|
||||||
const TOOLTIP_OFFSET = 6;
|
|
||||||
const TOOLTIP_ANIMATION_TIME = 150;
|
|
||||||
|
|
||||||
const MAX_THUMBNAILS = 6;
|
|
||||||
|
|
||||||
class WindowPreview extends St.Button {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(window) {
|
|
||||||
super({
|
|
||||||
style_class: 'workspace-indicator-window-preview',
|
|
||||||
});
|
|
||||||
|
|
||||||
this._delegate = this;
|
|
||||||
DND.makeDraggable(this, {restoreOnSuccess: true});
|
|
||||||
|
|
||||||
this._window = window;
|
|
||||||
|
|
||||||
this._window.connectObject(
|
|
||||||
'size-changed', () => this.queue_relayout(),
|
|
||||||
'position-changed', () => {
|
|
||||||
this._updateVisible();
|
|
||||||
this.queue_relayout();
|
|
||||||
},
|
|
||||||
'notify::minimized', this._updateVisible.bind(this),
|
|
||||||
this);
|
|
||||||
|
|
||||||
global.display.connectObject('notify::focus-window',
|
|
||||||
this._onFocusChanged.bind(this), this);
|
|
||||||
this._onFocusChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
// needed for DND
|
|
||||||
get metaWindow() {
|
|
||||||
return this._window;
|
|
||||||
}
|
|
||||||
|
|
||||||
_onFocusChanged() {
|
|
||||||
if (global.display.focus_window === this._window)
|
|
||||||
this.add_style_class_name('active');
|
|
||||||
else
|
|
||||||
this.remove_style_class_name('active');
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateVisible() {
|
|
||||||
const monitor = Main.layoutManager.findIndexForActor(this);
|
|
||||||
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
|
||||||
this.visible = this._window.get_frame_rect().overlap(workArea) &&
|
|
||||||
this._window.window_type !== Meta.WindowType.DESKTOP &&
|
|
||||||
this._window.showing_on_its_workspace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WorkspaceLayout extends Clutter.LayoutManager {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_get_preferred_width() {
|
|
||||||
return [0, 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_get_preferred_height() {
|
|
||||||
return [0, 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_allocate(container, box) {
|
|
||||||
const monitor = Main.layoutManager.findIndexForActor(container);
|
|
||||||
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
|
||||||
const hscale = box.get_width() / workArea.width;
|
|
||||||
const vscale = box.get_height() / workArea.height;
|
|
||||||
|
|
||||||
for (const child of container) {
|
|
||||||
const childBox = new Clutter.ActorBox();
|
|
||||||
const frameRect = child.metaWindow.get_frame_rect();
|
|
||||||
childBox.set_size(
|
|
||||||
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
|
|
||||||
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
|
|
||||||
childBox.set_origin(
|
|
||||||
Math.round((frameRect.x - workArea.x) * hscale),
|
|
||||||
Math.round((frameRect.y - workArea.y) * vscale));
|
|
||||||
child.allocate(childBox);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WorkspaceThumbnail extends St.Button {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(index) {
|
|
||||||
super({
|
|
||||||
style_class: 'workspace',
|
|
||||||
child: new Clutter.Actor({
|
|
||||||
layout_manager: new WorkspaceLayout(),
|
|
||||||
clip_to_allocation: true,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
this._tooltip = new St.Label({
|
|
||||||
style_class: 'dash-label',
|
|
||||||
visible: false,
|
|
||||||
});
|
|
||||||
Main.uiGroup.add_child(this._tooltip);
|
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
|
||||||
this.connect('notify::hover', this._syncTooltip.bind(this));
|
|
||||||
|
|
||||||
this._index = index;
|
|
||||||
this._delegate = this; // needed for DND
|
|
||||||
|
|
||||||
this._windowPreviews = new Map();
|
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
this._workspace = workspaceManager.get_workspace_by_index(index);
|
|
||||||
|
|
||||||
this._workspace.connectObject(
|
|
||||||
'window-added', (ws, window) => this._addWindow(window),
|
|
||||||
'window-removed', (ws, window) => this._removeWindow(window),
|
|
||||||
this);
|
|
||||||
|
|
||||||
global.display.connectObject('restacked',
|
|
||||||
this._onRestacked.bind(this), this);
|
|
||||||
|
|
||||||
this._workspace.list_windows().forEach(w => this._addWindow(w));
|
|
||||||
this._onRestacked();
|
|
||||||
}
|
|
||||||
|
|
||||||
acceptDrop(source) {
|
|
||||||
if (!source.metaWindow)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
this._moveWindow(source.metaWindow);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
handleDragOver(source) {
|
|
||||||
if (source.metaWindow)
|
|
||||||
return DND.DragMotionResult.MOVE_DROP;
|
|
||||||
else
|
|
||||||
return DND.DragMotionResult.CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
_addWindow(window) {
|
|
||||||
if (this._windowPreviews.has(window))
|
|
||||||
return;
|
|
||||||
|
|
||||||
let preview = new WindowPreview(window);
|
|
||||||
preview.connect('clicked', (a, btn) => this.emit('clicked', btn));
|
|
||||||
this._windowPreviews.set(window, preview);
|
|
||||||
this.child.add_child(preview);
|
|
||||||
}
|
|
||||||
|
|
||||||
_removeWindow(window) {
|
|
||||||
let preview = this._windowPreviews.get(window);
|
|
||||||
if (!preview)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._windowPreviews.delete(window);
|
|
||||||
preview.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
_onRestacked() {
|
|
||||||
let lastPreview = null;
|
|
||||||
let windows = global.get_window_actors().map(a => a.meta_window);
|
|
||||||
for (let i = 0; i < windows.length; i++) {
|
|
||||||
let preview = this._windowPreviews.get(windows[i]);
|
|
||||||
if (!preview)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
this.child.set_child_above_sibling(preview, lastPreview);
|
|
||||||
lastPreview = preview;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_moveWindow(window) {
|
|
||||||
let monitorIndex = Main.layoutManager.findIndexForActor(this);
|
|
||||||
if (monitorIndex !== window.get_monitor())
|
|
||||||
window.move_to_monitor(monitorIndex);
|
|
||||||
window.change_workspace_by_index(this._index, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
on_clicked() {
|
|
||||||
let ws = global.workspace_manager.get_workspace_by_index(this._index);
|
|
||||||
if (ws)
|
|
||||||
ws.activate(global.get_current_time());
|
|
||||||
}
|
|
||||||
|
|
||||||
_syncTooltip() {
|
|
||||||
if (this.hover) {
|
|
||||||
this._tooltip.set({
|
|
||||||
text: Meta.prefs_get_workspace_name(this._index),
|
|
||||||
visible: true,
|
|
||||||
opacity: 0,
|
|
||||||
});
|
|
||||||
|
|
||||||
const [stageX, stageY] = this.get_transformed_position();
|
|
||||||
const thumbWidth = this.allocation.get_width();
|
|
||||||
const thumbHeight = this.allocation.get_height();
|
|
||||||
const tipWidth = this._tooltip.width;
|
|
||||||
const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
|
|
||||||
const monitor = Main.layoutManager.findMonitorForActor(this);
|
|
||||||
const x = Math.clamp(
|
|
||||||
stageX + xOffset,
|
|
||||||
monitor.x,
|
|
||||||
monitor.x + monitor.width - tipWidth);
|
|
||||||
const y = stageY + thumbHeight + TOOLTIP_OFFSET;
|
|
||||||
this._tooltip.set_position(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._tooltip.ease({
|
|
||||||
opacity: this.hover ? 255 : 0,
|
|
||||||
duration: TOOLTIP_ANIMATION_TIME,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete: () => (this._tooltip.visible = this.hover),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
this._tooltip.destroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WorkspaceIndicator extends PanelMenu.Button {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super(0.5, _('Workspace Indicator'));
|
|
||||||
|
|
||||||
let container = new St.Widget({
|
|
||||||
layout_manager: new Clutter.BinLayout(),
|
|
||||||
x_expand: true,
|
|
||||||
y_expand: true,
|
|
||||||
});
|
|
||||||
this.add_actor(container);
|
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
this._currentWorkspace = workspaceManager.get_active_workspace_index();
|
|
||||||
this._statusLabel = new St.Label({
|
|
||||||
style_class: 'panel-workspace-indicator',
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
text: this._labelText(),
|
|
||||||
});
|
|
||||||
|
|
||||||
container.add_actor(this._statusLabel);
|
|
||||||
|
|
||||||
this._thumbnailsBox = new St.BoxLayout({
|
|
||||||
style_class: 'panel-workspace-indicator-box',
|
|
||||||
y_expand: true,
|
|
||||||
reactive: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
container.add_actor(this._thumbnailsBox);
|
|
||||||
|
|
||||||
this._workspacesItems = [];
|
|
||||||
this._workspaceSection = new PopupMenu.PopupMenuSection();
|
|
||||||
this.menu.addMenuItem(this._workspaceSection);
|
|
||||||
|
|
||||||
workspaceManager.connectObject(
|
|
||||||
'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER,
|
|
||||||
'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER,
|
|
||||||
'notify::layout-rows', this._updateThumbnailVisibility.bind(this),
|
|
||||||
this);
|
|
||||||
|
|
||||||
this.connect('scroll-event', this._onScrollEvent.bind(this));
|
|
||||||
this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this));
|
|
||||||
this._createWorkspacesSection();
|
|
||||||
this._updateThumbnails();
|
|
||||||
this._updateThumbnailVisibility();
|
|
||||||
|
|
||||||
this._settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA});
|
|
||||||
this._settings.connectObject(`changed::${WORKSPACE_KEY}`,
|
|
||||||
this._updateMenuLabels.bind(this), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
|
|
||||||
|
|
||||||
super._onDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateThumbnailVisibility() {
|
|
||||||
const {workspaceManager} = global;
|
|
||||||
const vertical = workspaceManager.layout_rows === -1;
|
|
||||||
const useMenu =
|
|
||||||
vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS;
|
|
||||||
this.reactive = useMenu;
|
|
||||||
|
|
||||||
this._statusLabel.visible = useMenu;
|
|
||||||
this._thumbnailsBox.visible = !useMenu;
|
|
||||||
|
|
||||||
// Disable offscreen-redirect when showing the workspace switcher
|
|
||||||
// so that clip-to-allocation works
|
|
||||||
Main.panel.set_offscreen_redirect(useMenu
|
|
||||||
? Clutter.OffscreenRedirect.ALWAYS
|
|
||||||
: Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY);
|
|
||||||
}
|
|
||||||
|
|
||||||
_onWorkspaceSwitched() {
|
|
||||||
this._currentWorkspace = global.workspace_manager.get_active_workspace_index();
|
|
||||||
|
|
||||||
this._updateMenuOrnament();
|
|
||||||
this._updateActiveThumbnail();
|
|
||||||
|
|
||||||
this._statusLabel.set_text(this._labelText());
|
|
||||||
}
|
|
||||||
|
|
||||||
_nWorkspacesChanged() {
|
|
||||||
this._createWorkspacesSection();
|
|
||||||
this._updateThumbnails();
|
|
||||||
this._updateThumbnailVisibility();
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateMenuOrnament() {
|
|
||||||
for (let i = 0; i < this._workspacesItems.length; i++) {
|
|
||||||
this._workspacesItems[i].setOrnament(i === this._currentWorkspace
|
|
||||||
? PopupMenu.Ornament.DOT
|
|
||||||
: PopupMenu.Ornament.NONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateActiveThumbnail() {
|
|
||||||
let thumbs = this._thumbnailsBox.get_children();
|
|
||||||
for (let i = 0; i < thumbs.length; i++) {
|
|
||||||
if (i === this._currentWorkspace)
|
|
||||||
thumbs[i].add_style_class_name('active');
|
|
||||||
else
|
|
||||||
thumbs[i].remove_style_class_name('active');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_labelText(workspaceIndex) {
|
|
||||||
if (workspaceIndex === undefined) {
|
|
||||||
workspaceIndex = this._currentWorkspace;
|
|
||||||
return (workspaceIndex + 1).toString();
|
|
||||||
}
|
|
||||||
return Meta.prefs_get_workspace_name(workspaceIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateMenuLabels() {
|
|
||||||
for (let i = 0; i < this._workspacesItems.length; i++)
|
|
||||||
this._workspacesItems[i].label.text = this._labelText(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
_createWorkspacesSection() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
this._workspaceSection.removeAll();
|
|
||||||
this._workspacesItems = [];
|
|
||||||
this._currentWorkspace = workspaceManager.get_active_workspace_index();
|
|
||||||
|
|
||||||
let i = 0;
|
|
||||||
for (; i < workspaceManager.n_workspaces; i++) {
|
|
||||||
this._workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i));
|
|
||||||
this._workspaceSection.addMenuItem(this._workspacesItems[i]);
|
|
||||||
this._workspacesItems[i].workspaceId = i;
|
|
||||||
this._workspacesItems[i].label_actor = this._statusLabel;
|
|
||||||
this._workspacesItems[i].connect('activate', (actor, _event) => {
|
|
||||||
this._activate(actor.workspaceId);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (i === this._currentWorkspace)
|
|
||||||
this._workspacesItems[i].setOrnament(PopupMenu.Ornament.DOT);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._statusLabel.set_text(this._labelText());
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateThumbnails() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
this._thumbnailsBox.destroy_all_children();
|
|
||||||
|
|
||||||
for (let i = 0; i < workspaceManager.n_workspaces; i++) {
|
|
||||||
let thumb = new WorkspaceThumbnail(i);
|
|
||||||
this._thumbnailsBox.add_actor(thumb);
|
|
||||||
}
|
|
||||||
this._updateActiveThumbnail();
|
|
||||||
}
|
|
||||||
|
|
||||||
_activate(index) {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
if (index >= 0 && index < workspaceManager.n_workspaces) {
|
|
||||||
let metaWorkspace = workspaceManager.get_workspace_by_index(index);
|
|
||||||
metaWorkspace.activate(global.get_current_time());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_onScrollEvent(actor, event) {
|
|
||||||
let direction = event.get_scroll_direction();
|
|
||||||
let diff = 0;
|
|
||||||
if (direction === Clutter.ScrollDirection.DOWN)
|
|
||||||
diff = 1;
|
|
||||||
else if (direction === Clutter.ScrollDirection.UP)
|
|
||||||
diff = -1;
|
|
||||||
else
|
|
||||||
return;
|
|
||||||
|
|
||||||
|
|
||||||
let newIndex = global.workspace_manager.get_active_workspace_index() + diff;
|
|
||||||
this._activate(newIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class WorkspaceIndicatorExtension extends Extension {
|
export default class WorkspaceIndicatorExtension extends Extension {
|
||||||
enable() {
|
enable() {
|
||||||
this._indicator = new WorkspaceIndicator();
|
this._indicator = new WorkspaceIndicator({
|
||||||
|
settings: this.getSettings(),
|
||||||
|
});
|
||||||
Main.panel.addToStatusArea('workspace-indicator', this._indicator);
|
Main.panel.addToStatusArea('workspace-indicator', this._indicator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ extension_data += configure_file(
|
|||||||
output: metadata_name,
|
output: metadata_name,
|
||||||
configuration: metadata_conf
|
configuration: metadata_conf
|
||||||
)
|
)
|
||||||
extension_data += files('stylesheet.css')
|
extension_data += files(
|
||||||
|
'stylesheet-dark.css',
|
||||||
|
'stylesheet-light.css',
|
||||||
|
)
|
||||||
|
extension_schemas += files('schemas/' + metadata_conf.get('gschemaname') + '.gschema.xml')
|
||||||
|
|
||||||
extension_sources += files('prefs.js')
|
extension_sources += files('prefs.js', 'workspaceIndicator.js')
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
//
|
//
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
|
||||||
import Adw from 'gi://Adw';
|
import Adw from 'gi://Adw';
|
||||||
import Gio from 'gi://Gio';
|
import Gio from 'gi://Gio';
|
||||||
import GLib from 'gi://GLib';
|
import GLib from 'gi://GLib';
|
||||||
@@ -18,6 +17,25 @@ const N_ = e => e;
|
|||||||
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
||||||
const WORKSPACE_KEY = 'workspace-names';
|
const WORKSPACE_KEY = 'workspace-names';
|
||||||
|
|
||||||
|
class GeneralGroup extends Adw.PreferencesGroup {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(settings) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
const row = new Adw.SwitchRow({
|
||||||
|
title: _('Show Previews In Top Bar'),
|
||||||
|
});
|
||||||
|
this.add(row);
|
||||||
|
|
||||||
|
settings.bind('embed-previews',
|
||||||
|
row, 'active',
|
||||||
|
Gio.SettingsBindFlags.DEFAULT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class NewItem extends GObject.Object {}
|
class NewItem extends GObject.Object {}
|
||||||
GObject.registerClass(NewItem);
|
GObject.registerClass(NewItem);
|
||||||
|
|
||||||
@@ -119,7 +137,7 @@ class WorkspacesList extends GObject.Object {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class WorkspaceSettingsWidget extends Adw.PreferencesGroup {
|
class WorkspacesGroup extends Adw.PreferencesGroup {
|
||||||
static {
|
static {
|
||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
|
|
||||||
@@ -265,6 +283,9 @@ class NewWorkspaceRow extends Adw.PreferencesRow {
|
|||||||
|
|
||||||
export default class WorkspaceIndicatorPrefs extends ExtensionPreferences {
|
export default class WorkspaceIndicatorPrefs extends ExtensionPreferences {
|
||||||
getPreferencesWidget() {
|
getPreferencesWidget() {
|
||||||
return new WorkspaceSettingsWidget();
|
const page = new Adw.PreferencesPage();
|
||||||
|
page.add(new GeneralGroup(this.getSettings()));
|
||||||
|
page.add(new WorkspacesGroup());
|
||||||
|
return page;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
<!--
|
||||||
|
SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
-->
|
||||||
|
|
||||||
|
<schemalist gettext-domain="gnome-shell-extensions">
|
||||||
|
<schema id="org.gnome.shell.extensions.workspace-indicator"
|
||||||
|
path="/org/gnome/shell/extensions/workspace-indicator/">
|
||||||
|
<key name="embed-previews" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<summary>Show workspace previews in top bar</summary>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2011 Erick Pérez Castellanos <erick.red@gmail.com>
|
||||||
|
* SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
.workspace-indicator .status-label {
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator .workspaces-view.hfade {
|
||||||
|
-st-hfade-offset: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-menu .workspaces-view {
|
||||||
|
max-width: 480px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator .workspaces-box {
|
||||||
|
spacing: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-menu .workspaces-box {
|
||||||
|
padding: 5px;
|
||||||
|
spacing: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator .workspace-box {
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator StButton:first-child:ltr > .workspace-box,
|
||||||
|
.workspace-indicator StButton:last-child:rtl > .workspace-box {
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
.workspace-indicator StButton:last-child:ltr > .workspace-box,
|
||||||
|
.workspace-indicator StButton:first-child:rtl > .workspace-box {
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-menu .workspace-box {
|
||||||
|
spacing: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-menu .workspace,
|
||||||
|
.workspace-indicator .workspace {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #3f3f3f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator .workspace {
|
||||||
|
width: 52px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-menu .workspace {
|
||||||
|
height: 80px;
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-menu .workspace.active,
|
||||||
|
.workspace-indicator .workspace.active {
|
||||||
|
border-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-window-preview {
|
||||||
|
background-color: #bebebe;
|
||||||
|
border: 1px solid #828282;
|
||||||
|
border-radius: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-window-preview.active {
|
||||||
|
background-color: #d4d4d4;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2013 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
* SPDX-FileCopyrightText: 2015 Jakub Steiner <jimmac@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("stylesheet-dark.css");
|
||||||
|
|
||||||
|
.workspace-indicator .workspace {
|
||||||
|
background-color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator .workspace.active {
|
||||||
|
border-color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-window-preview {
|
||||||
|
background-color: #ededed;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-indicator-window-preview.active {
|
||||||
|
background-color: #f6f5f4;
|
||||||
|
}
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2011 Erick Pérez Castellanos <erick.red@gmail.com>
|
|
||||||
* SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
.panel-workspace-indicator {
|
|
||||||
padding: 0 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.panel-workspace-indicator-box {
|
|
||||||
padding: 4px 0;
|
|
||||||
spacing: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.panel-workspace-indicator-box .workspace {
|
|
||||||
width: 40px;
|
|
||||||
border: 2px solid #000;
|
|
||||||
border-radius: 2px;
|
|
||||||
background-color: #595959;
|
|
||||||
}
|
|
||||||
|
|
||||||
.panel-workspace-indicator-box .workspace.active {
|
|
||||||
border-color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.workspace-indicator-window-preview {
|
|
||||||
background-color: #bebebe;
|
|
||||||
border: 1px solid #828282;
|
|
||||||
}
|
|
||||||
|
|
||||||
.workspace-indicator-window-preview.active {
|
|
||||||
background-color: #d4d4d4;
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,537 @@
|
|||||||
|
// SPDX-FileCopyrightText: 2011 Erick Pérez Castellanos <erick.red@gmail.com>
|
||||||
|
// SPDX-FileCopyrightText: 2011 Giovanni Campagna <gcampagna@src.gnome.org>
|
||||||
|
// SPDX-FileCopyrightText: 2017 Florian Müllner <fmuellner@gnome.org>
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
import Clutter from 'gi://Clutter';
|
||||||
|
import Gio from 'gi://Gio';
|
||||||
|
import GObject from 'gi://GObject';
|
||||||
|
import Meta from 'gi://Meta';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
|
import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
|
|
||||||
|
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
|
||||||
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
|
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
|
||||||
|
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
||||||
|
|
||||||
|
const TOOLTIP_OFFSET = 6;
|
||||||
|
const TOOLTIP_ANIMATION_TIME = 150;
|
||||||
|
|
||||||
|
const SCROLL_TIME = 100;
|
||||||
|
|
||||||
|
let baseStyleClassName = '';
|
||||||
|
|
||||||
|
class WindowPreview extends St.Button {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(window) {
|
||||||
|
super({
|
||||||
|
style_class: `${baseStyleClassName}-window-preview`,
|
||||||
|
});
|
||||||
|
|
||||||
|
this._delegate = this;
|
||||||
|
DND.makeDraggable(this, {restoreOnSuccess: true});
|
||||||
|
|
||||||
|
this._window = window;
|
||||||
|
|
||||||
|
this._window.connectObject(
|
||||||
|
'size-changed', () => this._checkRelayout(),
|
||||||
|
'position-changed', () => this._checkRelayout(),
|
||||||
|
'notify::minimized', this._updateVisible.bind(this),
|
||||||
|
'notify::skip-taskbar', this._updateVisible.bind(this),
|
||||||
|
this);
|
||||||
|
this._updateVisible();
|
||||||
|
|
||||||
|
global.display.connectObject('notify::focus-window',
|
||||||
|
this._onFocusChanged.bind(this), this);
|
||||||
|
this._onFocusChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
// needed for DND
|
||||||
|
get metaWindow() {
|
||||||
|
return this._window;
|
||||||
|
}
|
||||||
|
|
||||||
|
_onFocusChanged() {
|
||||||
|
if (global.display.focus_window === this._window)
|
||||||
|
this.add_style_class_name('active');
|
||||||
|
else
|
||||||
|
this.remove_style_class_name('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
_checkRelayout() {
|
||||||
|
const monitor = Main.layoutManager.findIndexForActor(this);
|
||||||
|
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
||||||
|
if (this._window.get_frame_rect().overlap(workArea))
|
||||||
|
this.queue_relayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateVisible() {
|
||||||
|
this.visible = !this._window.skip_taskbar &&
|
||||||
|
this._window.showing_on_its_workspace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class WorkspaceLayout extends Clutter.LayoutManager {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_get_preferred_width() {
|
||||||
|
return [0, 0];
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_get_preferred_height() {
|
||||||
|
return [0, 0];
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_allocate(container, box) {
|
||||||
|
const monitor = Main.layoutManager.findIndexForActor(container);
|
||||||
|
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
||||||
|
const hscale = box.get_width() / workArea.width;
|
||||||
|
const vscale = box.get_height() / workArea.height;
|
||||||
|
|
||||||
|
for (const child of container) {
|
||||||
|
const childBox = new Clutter.ActorBox();
|
||||||
|
const frameRect = child.metaWindow.get_frame_rect();
|
||||||
|
childBox.set_size(
|
||||||
|
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
|
||||||
|
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
|
||||||
|
childBox.set_origin(
|
||||||
|
Math.round((frameRect.x - workArea.x) * hscale),
|
||||||
|
Math.round((frameRect.y - workArea.y) * vscale));
|
||||||
|
child.allocate(childBox);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class WorkspaceThumbnail extends St.Button {
|
||||||
|
static [GObject.properties] = {
|
||||||
|
'active': GObject.ParamSpec.boolean(
|
||||||
|
'active', null, null,
|
||||||
|
GObject.ParamFlags.READWRITE,
|
||||||
|
false),
|
||||||
|
'show-label': GObject.ParamSpec.boolean(
|
||||||
|
'show-label', null, null,
|
||||||
|
GObject.ParamFlags.READWRITE,
|
||||||
|
false),
|
||||||
|
};
|
||||||
|
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(index) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
const box = new St.BoxLayout({
|
||||||
|
style_class: 'workspace-box',
|
||||||
|
y_expand: true,
|
||||||
|
vertical: true,
|
||||||
|
});
|
||||||
|
this.set_child(box);
|
||||||
|
|
||||||
|
this._preview = new St.Bin({
|
||||||
|
style_class: 'workspace',
|
||||||
|
child: new Clutter.Actor({
|
||||||
|
layout_manager: new WorkspaceLayout(),
|
||||||
|
clip_to_allocation: true,
|
||||||
|
x_expand: true,
|
||||||
|
y_expand: true,
|
||||||
|
}),
|
||||||
|
y_expand: true,
|
||||||
|
});
|
||||||
|
box.add_child(this._preview);
|
||||||
|
|
||||||
|
this._label = new St.Label({
|
||||||
|
x_align: Clutter.ActorAlign.CENTER,
|
||||||
|
text: Meta.prefs_get_workspace_name(index),
|
||||||
|
});
|
||||||
|
box.add_child(this._label);
|
||||||
|
|
||||||
|
this._tooltip = new St.Label({
|
||||||
|
style_class: 'dash-label',
|
||||||
|
visible: false,
|
||||||
|
});
|
||||||
|
Main.uiGroup.add_child(this._tooltip);
|
||||||
|
|
||||||
|
this.bind_property('show-label',
|
||||||
|
this._label, 'visible',
|
||||||
|
GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
|
||||||
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
this.connect('notify::hover', this._syncTooltip.bind(this));
|
||||||
|
|
||||||
|
const desktopSettings =
|
||||||
|
new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'});
|
||||||
|
desktopSettings.connectObject('changed::workspace-names', () => {
|
||||||
|
this._label.text = Meta.prefs_get_workspace_name(index);
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
this._index = index;
|
||||||
|
this._delegate = this; // needed for DND
|
||||||
|
|
||||||
|
this._windowPreviews = new Map();
|
||||||
|
|
||||||
|
let workspaceManager = global.workspace_manager;
|
||||||
|
this._workspace = workspaceManager.get_workspace_by_index(index);
|
||||||
|
|
||||||
|
this._workspace.bind_property('active',
|
||||||
|
this, 'active',
|
||||||
|
GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
|
||||||
|
this._workspace.connectObject(
|
||||||
|
'window-added', (ws, window) => this._addWindow(window),
|
||||||
|
'window-removed', (ws, window) => this._removeWindow(window),
|
||||||
|
this);
|
||||||
|
|
||||||
|
global.display.connectObject('restacked',
|
||||||
|
this._onRestacked.bind(this), this);
|
||||||
|
|
||||||
|
this._workspace.list_windows().forEach(w => this._addWindow(w));
|
||||||
|
this._onRestacked();
|
||||||
|
}
|
||||||
|
|
||||||
|
get active() {
|
||||||
|
return this._preview.has_style_class_name('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
set active(active) {
|
||||||
|
if (active)
|
||||||
|
this._preview.add_style_class_name('active');
|
||||||
|
else
|
||||||
|
this._preview.remove_style_class_name('active');
|
||||||
|
this.notify('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
acceptDrop(source) {
|
||||||
|
if (!source.metaWindow)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
this._moveWindow(source.metaWindow);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
handleDragOver(source) {
|
||||||
|
if (source.metaWindow)
|
||||||
|
return DND.DragMotionResult.MOVE_DROP;
|
||||||
|
else
|
||||||
|
return DND.DragMotionResult.CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
_addWindow(window) {
|
||||||
|
if (this._windowPreviews.has(window))
|
||||||
|
return;
|
||||||
|
|
||||||
|
let preview = new WindowPreview(window);
|
||||||
|
preview.connect('clicked', (a, btn) => this.emit('clicked', btn));
|
||||||
|
this._windowPreviews.set(window, preview);
|
||||||
|
this._preview.child.add_child(preview);
|
||||||
|
}
|
||||||
|
|
||||||
|
_removeWindow(window) {
|
||||||
|
let preview = this._windowPreviews.get(window);
|
||||||
|
if (!preview)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._windowPreviews.delete(window);
|
||||||
|
preview.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
_onRestacked() {
|
||||||
|
let lastPreview = null;
|
||||||
|
let windows = global.get_window_actors().map(a => a.meta_window);
|
||||||
|
for (let i = 0; i < windows.length; i++) {
|
||||||
|
let preview = this._windowPreviews.get(windows[i]);
|
||||||
|
if (!preview)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
this._preview.child.set_child_above_sibling(preview, lastPreview);
|
||||||
|
lastPreview = preview;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_moveWindow(window) {
|
||||||
|
let monitorIndex = Main.layoutManager.findIndexForActor(this);
|
||||||
|
if (monitorIndex !== window.get_monitor())
|
||||||
|
window.move_to_monitor(monitorIndex);
|
||||||
|
window.change_workspace_by_index(this._index, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
on_clicked() {
|
||||||
|
let ws = global.workspace_manager.get_workspace_by_index(this._index);
|
||||||
|
if (ws)
|
||||||
|
ws.activate(global.get_current_time());
|
||||||
|
}
|
||||||
|
|
||||||
|
_syncTooltip() {
|
||||||
|
if (this.showLabel)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (this.hover) {
|
||||||
|
this._tooltip.set({
|
||||||
|
text: Meta.prefs_get_workspace_name(this._index),
|
||||||
|
visible: true,
|
||||||
|
opacity: 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
const [stageX, stageY] = this.get_transformed_position();
|
||||||
|
const [thumbWidth, thumbHeight] = this.allocation.get_size();
|
||||||
|
const [tipWidth, tipHeight] = this._tooltip.get_size();
|
||||||
|
const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
|
||||||
|
const monitor = Main.layoutManager.findMonitorForActor(this);
|
||||||
|
const x = Math.clamp(
|
||||||
|
stageX + xOffset,
|
||||||
|
monitor.x,
|
||||||
|
monitor.x + monitor.width - tipWidth);
|
||||||
|
const y = stageY - monitor.y > thumbHeight + TOOLTIP_OFFSET
|
||||||
|
? stageY - tipHeight - TOOLTIP_OFFSET // show above
|
||||||
|
: stageY + thumbHeight + TOOLTIP_OFFSET; // show below
|
||||||
|
this._tooltip.set_position(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._tooltip.ease({
|
||||||
|
opacity: this.hover ? 255 : 0,
|
||||||
|
duration: TOOLTIP_ANIMATION_TIME,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onComplete: () => (this._tooltip.visible = this.hover),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
this._tooltip.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class WorkspacePreviews extends Clutter.Actor {
|
||||||
|
static [GObject.properties] = {
|
||||||
|
'show-labels': GObject.ParamSpec.boolean(
|
||||||
|
'show-labels', null, null,
|
||||||
|
GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY,
|
||||||
|
false),
|
||||||
|
};
|
||||||
|
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(params) {
|
||||||
|
super({
|
||||||
|
...params,
|
||||||
|
layout_manager: new Clutter.BinLayout(),
|
||||||
|
reactive: true,
|
||||||
|
y_expand: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.connect('scroll-event',
|
||||||
|
(a, event) => Main.wm.handleWorkspaceScroll(event));
|
||||||
|
|
||||||
|
const {workspaceManager} = global;
|
||||||
|
|
||||||
|
workspaceManager.connectObject(
|
||||||
|
'notify::n-workspaces', () => this._updateThumbnails(), GObject.ConnectFlags.AFTER,
|
||||||
|
'workspace-switched', () => this._updateScrollPosition(),
|
||||||
|
this);
|
||||||
|
|
||||||
|
this.connect('notify::mapped', () => {
|
||||||
|
if (this.mapped)
|
||||||
|
this._updateScrollPosition();
|
||||||
|
});
|
||||||
|
|
||||||
|
this._thumbnailsBox = new St.BoxLayout({
|
||||||
|
style_class: 'workspaces-box',
|
||||||
|
y_expand: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
this._scrollView = new St.ScrollView({
|
||||||
|
style_class: 'workspaces-view hfade',
|
||||||
|
enable_mouse_scrolling: false,
|
||||||
|
hscrollbar_policy: St.PolicyType.EXTERNAL,
|
||||||
|
vscrollbar_policy: St.PolicyType.NEVER,
|
||||||
|
y_expand: true,
|
||||||
|
child: this._thumbnailsBox,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.add_child(this._scrollView);
|
||||||
|
|
||||||
|
this._updateThumbnails();
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateThumbnails() {
|
||||||
|
const {nWorkspaces} = global.workspace_manager;
|
||||||
|
|
||||||
|
this._thumbnailsBox.destroy_all_children();
|
||||||
|
|
||||||
|
for (let i = 0; i < nWorkspaces; i++) {
|
||||||
|
const thumb = new WorkspaceThumbnail(i);
|
||||||
|
this.bind_property('show-labels',
|
||||||
|
thumb, 'show-label',
|
||||||
|
GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
this._thumbnailsBox.add_child(thumb);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.mapped)
|
||||||
|
this._updateScrollPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateScrollPosition() {
|
||||||
|
const adjustment = this._scrollView.hadjustment;
|
||||||
|
const {upper, pageSize} = adjustment;
|
||||||
|
let {value} = adjustment;
|
||||||
|
|
||||||
|
const activeWorkspace =
|
||||||
|
[...this._thumbnailsBox].find(a => a.active);
|
||||||
|
|
||||||
|
if (!activeWorkspace)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let offset = 0;
|
||||||
|
const hfade = this._scrollView.get_effect('fade');
|
||||||
|
if (hfade)
|
||||||
|
offset = hfade.fade_margins.left;
|
||||||
|
|
||||||
|
let {x1, x2} = activeWorkspace.get_allocation_box();
|
||||||
|
let parent = activeWorkspace.get_parent();
|
||||||
|
while (parent !== this._scrollView) {
|
||||||
|
if (!parent)
|
||||||
|
throw new Error('actor not in scroll view');
|
||||||
|
|
||||||
|
const box = parent.get_allocation_box();
|
||||||
|
x1 += box.x1;
|
||||||
|
x2 += box.x1;
|
||||||
|
parent = parent.get_parent();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x1 < value + offset)
|
||||||
|
value = Math.max(0, x1 - offset);
|
||||||
|
else if (x2 > value + pageSize - offset)
|
||||||
|
value = Math.min(upper, x2 + offset - pageSize);
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
adjustment.ease(value, {
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
duration: SCROLL_TIME,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class WorkspaceIndicator extends PanelMenu.Button {
|
||||||
|
static {
|
||||||
|
GObject.registerClass(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(params = {}) {
|
||||||
|
super(0.5, _('Workspace Indicator'), true);
|
||||||
|
|
||||||
|
const {
|
||||||
|
baseStyleClass = 'workspace-indicator',
|
||||||
|
settings,
|
||||||
|
} = params;
|
||||||
|
|
||||||
|
this._settings = settings;
|
||||||
|
|
||||||
|
baseStyleClassName = baseStyleClass;
|
||||||
|
this.add_style_class_name(baseStyleClassName);
|
||||||
|
|
||||||
|
let container = new St.Widget({
|
||||||
|
layout_manager: new Clutter.BinLayout(),
|
||||||
|
x_expand: true,
|
||||||
|
y_expand: true,
|
||||||
|
});
|
||||||
|
this.add_child(container);
|
||||||
|
|
||||||
|
let workspaceManager = global.workspace_manager;
|
||||||
|
|
||||||
|
this._currentWorkspace = workspaceManager.get_active_workspace_index();
|
||||||
|
this._statusLabel = new St.Label({
|
||||||
|
style_class: 'status-label',
|
||||||
|
y_align: Clutter.ActorAlign.CENTER,
|
||||||
|
text: this._getStatusText(),
|
||||||
|
});
|
||||||
|
container.add_child(this._statusLabel);
|
||||||
|
|
||||||
|
this._thumbnails = new WorkspacePreviews();
|
||||||
|
container.add_child(this._thumbnails);
|
||||||
|
|
||||||
|
this._workspacesItems = [];
|
||||||
|
|
||||||
|
workspaceManager.connectObject(
|
||||||
|
'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER,
|
||||||
|
this);
|
||||||
|
|
||||||
|
this.connect('scroll-event',
|
||||||
|
(a, event) => Main.wm.handleWorkspaceScroll(event));
|
||||||
|
|
||||||
|
this._inTopBar = false;
|
||||||
|
this.connect('notify::realized', () => {
|
||||||
|
if (!this.realized)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._inTopBar = Main.panel.contains(this);
|
||||||
|
this._updateTopBarRedirect();
|
||||||
|
});
|
||||||
|
|
||||||
|
this._settings.connect('changed::embed-previews',
|
||||||
|
() => this._updateThumbnailVisibility());
|
||||||
|
this._updateThumbnailVisibility();
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
if (this._inTopBar)
|
||||||
|
Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
|
||||||
|
this._inTopBar = false;
|
||||||
|
|
||||||
|
super._onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateThumbnailVisibility() {
|
||||||
|
const useMenu = !this._settings.get_boolean('embed-previews');
|
||||||
|
this.reactive = useMenu;
|
||||||
|
|
||||||
|
this._statusLabel.visible = useMenu;
|
||||||
|
this._thumbnails.visible = !useMenu;
|
||||||
|
|
||||||
|
this.setMenu(useMenu
|
||||||
|
? this._createPreviewMenu()
|
||||||
|
: null);
|
||||||
|
|
||||||
|
this._updateTopBarRedirect();
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateTopBarRedirect() {
|
||||||
|
if (!this._inTopBar)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Disable offscreen-redirect when showing the workspace switcher
|
||||||
|
// so that clip-to-allocation works
|
||||||
|
Main.panel.set_offscreen_redirect(this._thumbnails.visible
|
||||||
|
? Clutter.OffscreenRedirect.ALWAYS
|
||||||
|
: Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
_onWorkspaceSwitched() {
|
||||||
|
this._currentWorkspace = global.workspace_manager.get_active_workspace_index();
|
||||||
|
this._statusLabel.set_text(this._getStatusText());
|
||||||
|
}
|
||||||
|
|
||||||
|
_getStatusText() {
|
||||||
|
const {nWorkspaces} = global.workspace_manager;
|
||||||
|
const current = this._currentWorkspace + 1;
|
||||||
|
return `${current} / ${nWorkspaces}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
_createPreviewMenu() {
|
||||||
|
const menu = new PopupMenu.PopupMenu(this, 0.5, St.Side.TOP);
|
||||||
|
|
||||||
|
const previews = new WorkspacePreviews({show_labels: true});
|
||||||
|
menu.box.add_child(previews);
|
||||||
|
menu.actor.add_style_class_name(`${baseStyleClassName}-menu`);
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,7 +18,6 @@ Most extensions can be installed by configuring --prefix=$HOME/.local,
|
|||||||
and will be picked automatically at next login.
|
and will be picked automatically at next login.
|
||||||
</description>
|
</description>
|
||||||
<homepage rdf:resource="https://wiki.gnome.org/Projects/GnomeShell/Extensions" />
|
<homepage rdf:resource="https://wiki.gnome.org/Projects/GnomeShell/Extensions" />
|
||||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-shell-list" />
|
|
||||||
<support-forum rdf:resource="https://discourse.gnome.org/tag/shell" />
|
<support-forum rdf:resource="https://discourse.gnome.org/tag/shell" />
|
||||||
<download-page rdf:resource="https://download.gnome.org/sources/gnome-shell-extensions/" />
|
<download-page rdf:resource="https://download.gnome.org/sources/gnome-shell-extensions/" />
|
||||||
<bug-database rdf:resource="https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues" />
|
<bug-database rdf:resource="https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues" />
|
||||||
@@ -33,10 +32,4 @@ and will be picked automatically at next login.
|
|||||||
<gnome:userid>fmuellner</gnome:userid>
|
<gnome:userid>fmuellner</gnome:userid>
|
||||||
</foaf:Person>
|
</foaf:Person>
|
||||||
</maintainer>
|
</maintainer>
|
||||||
<maintainer>
|
|
||||||
<foaf:Person>
|
|
||||||
<foaf:name>Marge Bot</foaf:name>
|
|
||||||
<gnome:userid>marge-bot</gnome:userid>
|
|
||||||
</foaf:Person>
|
|
||||||
</maintainer>
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -12,6 +12,12 @@ rules:
|
|||||||
- error
|
- error
|
||||||
- smart
|
- smart
|
||||||
prefer-arrow-callback: error
|
prefer-arrow-callback: error
|
||||||
|
jsdoc/require-param-description: off
|
||||||
|
jsdoc/require-jsdoc:
|
||||||
|
- error
|
||||||
|
- exemptEmptyFunctions: true
|
||||||
|
publicOnly:
|
||||||
|
esm: true
|
||||||
globals:
|
globals:
|
||||||
global: readonly
|
global: readonly
|
||||||
parserOptions:
|
parserOptions:
|
||||||
|
|||||||
+18
-24
@@ -2,10 +2,11 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
project('gnome-shell-extensions',
|
project(
|
||||||
version: '45.0',
|
'gnome-shell-extensions',
|
||||||
meson_version: '>= 0.58.0',
|
version: '47.3',
|
||||||
license: 'GPL2+'
|
meson_version: '>= 1.1.0',
|
||||||
|
license: 'GPL-2.0-or-later',
|
||||||
)
|
)
|
||||||
|
|
||||||
gettext_domain = meson.project_name()
|
gettext_domain = meson.project_name()
|
||||||
@@ -34,7 +35,7 @@ classic_extensions = [
|
|||||||
'apps-menu',
|
'apps-menu',
|
||||||
'places-menu',
|
'places-menu',
|
||||||
'launch-new-instance',
|
'launch-new-instance',
|
||||||
'window-list'
|
'window-list',
|
||||||
]
|
]
|
||||||
|
|
||||||
default_extensions = classic_extensions
|
default_extensions = classic_extensions
|
||||||
@@ -42,16 +43,14 @@ default_extensions += [
|
|||||||
'drive-menu',
|
'drive-menu',
|
||||||
'light-style',
|
'light-style',
|
||||||
'screenshot-window-sizer',
|
'screenshot-window-sizer',
|
||||||
|
'status-icons',
|
||||||
|
'system-monitor',
|
||||||
'windowsNavigator',
|
'windowsNavigator',
|
||||||
'workspace-indicator'
|
'workspace-indicator',
|
||||||
]
|
]
|
||||||
|
|
||||||
all_extensions = default_extensions
|
all_extensions = default_extensions
|
||||||
all_extensions += [
|
all_extensions += ['auto-move-windows', 'native-window-placement', 'user-theme']
|
||||||
'auto-move-windows',
|
|
||||||
'native-window-placement',
|
|
||||||
'user-theme'
|
|
||||||
]
|
|
||||||
|
|
||||||
enabled_extensions = get_option('enable_extensions')
|
enabled_extensions = get_option('enable_extensions')
|
||||||
|
|
||||||
@@ -70,11 +69,10 @@ endif
|
|||||||
classic_mode_enabled = get_option('classic_mode')
|
classic_mode_enabled = get_option('classic_mode')
|
||||||
|
|
||||||
if classic_mode_enabled
|
if classic_mode_enabled
|
||||||
# Sanity check: Make sure all classic extensions are enabled
|
# Sanity check: Make sure all classic extensions are enabled
|
||||||
foreach e : classic_extensions
|
foreach e : classic_extensions
|
||||||
if not enabled_extensions.contains(e)
|
if not enabled_extensions.contains(e)
|
||||||
error('Classic mode is enabled, ' +
|
error(f'Classic mode is enabled, but the required extension @e@ is not')
|
||||||
'but the required extension @0@ is not.'.format(e))
|
|
||||||
endif
|
endif
|
||||||
endforeach
|
endforeach
|
||||||
endif
|
endif
|
||||||
@@ -82,7 +80,7 @@ endif
|
|||||||
# Sanity check: Make sure enabled extensions are valid
|
# Sanity check: Make sure enabled extensions are valid
|
||||||
foreach e : enabled_extensions
|
foreach e : enabled_extensions
|
||||||
if not all_extensions.contains(e)
|
if not all_extensions.contains(e)
|
||||||
error('Invalid extension @0@.'.format(e))
|
error(f'Invalid extension @e@.')
|
||||||
endif
|
endif
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
@@ -90,24 +88,20 @@ if classic_mode_enabled
|
|||||||
subdir('data')
|
subdir('data')
|
||||||
meson.add_install_script(
|
meson.add_install_script(
|
||||||
'meson/session-post-install.py',
|
'meson/session-post-install.py',
|
||||||
join_paths(get_option('prefix'), datadir)
|
join_paths(get_option('prefix'), datadir),
|
||||||
)
|
)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
subdir('extensions')
|
subdir('extensions')
|
||||||
subdir('po')
|
subdir('po')
|
||||||
|
|
||||||
gnome.post_install(
|
gnome.post_install(glib_compile_schemas: true)
|
||||||
glib_compile_schemas: true,
|
|
||||||
)
|
|
||||||
|
|
||||||
meson.add_dist_script('meson/check-version.py',
|
meson.add_dist_script('meson/check-version.py', meson.project_version(), 'NEWS')
|
||||||
meson.project_version(),
|
|
||||||
'NEWS')
|
|
||||||
|
|
||||||
summary_options = {
|
summary_options = {
|
||||||
'extensions': enabled_extensions,
|
'extensions': enabled_extensions,
|
||||||
'classic_mode': get_option('classic_mode'),
|
'classic_mode': get_option('classic_mode'),
|
||||||
}
|
}
|
||||||
|
|
||||||
summary_dirs = {
|
summary_dirs = {
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
import os, sys
|
import os, sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import argparse, subprocess
|
from xml.etree.ElementTree import ElementTree
|
||||||
|
import argparse
|
||||||
|
|
||||||
def check_version(version, file, type='news'):
|
def check_version(version, file, type='news'):
|
||||||
if type == 'news':
|
if type == 'news':
|
||||||
@@ -16,8 +17,11 @@ def check_version(version, file, type='news'):
|
|||||||
if not ok:
|
if not ok:
|
||||||
raise Exception("{} does not start with {}".format(file, version))
|
raise Exception("{} does not start with {}".format(file, version))
|
||||||
elif type == 'metainfo':
|
elif type == 'metainfo':
|
||||||
subprocess.run(['appstream-util', 'validate-version', file, version],
|
query = './releases/release[@version="{}"]'.format(version)
|
||||||
check=True)
|
ok = ElementTree(file=file).find(query) is not None
|
||||||
|
print("{}: {}".format(file, "OK" if ok else "FAILED"))
|
||||||
|
if not ok:
|
||||||
|
raise Exception("{} does not contain release {}".format(file, version))
|
||||||
else:
|
else:
|
||||||
raise Exception('Not implemented')
|
raise Exception('Not implemented')
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -11,11 +11,13 @@ extensions/native-window-placement/org.gnome.shell.extensions.native-window-plac
|
|||||||
extensions/places-menu/extension.js
|
extensions/places-menu/extension.js
|
||||||
extensions/places-menu/placeDisplay.js
|
extensions/places-menu/placeDisplay.js
|
||||||
extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml
|
extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml
|
||||||
|
extensions/system-monitor/extension.js
|
||||||
|
extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml
|
||||||
extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml
|
extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml
|
||||||
extensions/window-list/extension.js
|
extensions/window-list/extension.js
|
||||||
extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml
|
extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml
|
||||||
extensions/window-list/prefs.js
|
extensions/window-list/prefs.js
|
||||||
extensions/window-list/workspaceIndicator.js
|
|
||||||
extensions/windowsNavigator/extension.js
|
extensions/windowsNavigator/extension.js
|
||||||
extensions/workspace-indicator/extension.js
|
|
||||||
extensions/workspace-indicator/prefs.js
|
extensions/workspace-indicator/prefs.js
|
||||||
|
extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml
|
||||||
|
extensions/workspace-indicator/workspaceIndicator.js
|
||||||
|
|||||||
@@ -8,17 +8,17 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell-extensions master\n"
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2022-07-10 12:54+0000\n"
|
"POT-Creation-Date: 2024-04-29 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2022-10-19 15:20+0300\n"
|
"PO-Revision-Date: 2024-08-23 16:00+0300\n"
|
||||||
"Last-Translator: Launchpad translators\n"
|
"Last-Translator: Yuras Shumovich <shumovichy@gmail.com>\n"
|
||||||
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
||||||
"Language: be\n"
|
"Language: be\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
"X-Generator: Poedit 3.0\n"
|
"X-Generator: Poedit 3.4.4\n"
|
||||||
|
|
||||||
#: data/gnome-classic.desktop.in:3
|
#: data/gnome-classic.desktop.in:3
|
||||||
msgid "GNOME Classic"
|
msgid "GNOME Classic"
|
||||||
@@ -37,19 +37,19 @@ msgstr "Класічны GNOME на Wayland"
|
|||||||
msgid "GNOME Classic on Xorg"
|
msgid "GNOME Classic on Xorg"
|
||||||
msgstr "Класічны GNOME на Xorg"
|
msgstr "Класічны GNOME на Xorg"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:118
|
#: extensions/apps-menu/extension.js:126
|
||||||
msgid "Favorites"
|
msgid "Favorites"
|
||||||
msgstr "Абраныя"
|
msgstr "Абраныя"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:379
|
#: extensions/apps-menu/extension.js:400
|
||||||
msgid "Applications"
|
msgid "Apps"
|
||||||
msgstr "Праграмы"
|
msgstr "Праграмы"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||||
msgid "Application and workspace list"
|
msgid "Application and workspace list"
|
||||||
msgstr "Праграма і спіс працоўных прастор"
|
msgstr "Праграма і спіс працоўных прастор"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"A list of strings, each containing an application id (desktop file name), "
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
"followed by a colon and the workspace number"
|
"followed by a colon and the workspace number"
|
||||||
@@ -57,99 +57,171 @@ msgstr ""
|
|||||||
"Спіс радкоў, кожны з якіх змяшчае ідэнтыфікатар праграмы (імя файла *."
|
"Спіс радкоў, кожны з якіх змяшчае ідэнтыфікатар праграмы (імя файла *."
|
||||||
"desktop), затым двукроп'е і нумар працоўнай прасторы"
|
"desktop), затым двукроп'е і нумар працоўнай прасторы"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:152
|
#: extensions/auto-move-windows/prefs.js:159
|
||||||
msgid "Workspace Rules"
|
msgid "Workspace Rules"
|
||||||
msgstr "Правілы для працоўнай прасторы"
|
msgstr "Правілы для працоўнай прасторы"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:306
|
#: extensions/auto-move-windows/prefs.js:314
|
||||||
msgid "Add Rule"
|
msgid "Add Rule"
|
||||||
msgstr "Дадаць правіла"
|
msgstr "Дадаць правіла"
|
||||||
|
|
||||||
#. TRANSLATORS: %s is the filesystem name
|
#. TRANSLATORS: %s is the filesystem name
|
||||||
#: extensions/drive-menu/extension.js:126
|
#: extensions/drive-menu/extension.js:123
|
||||||
#: extensions/places-menu/placeDisplay.js:210
|
#: extensions/places-menu/placeDisplay.js:218
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Ejecting drive “%s” failed:"
|
msgid "Ejecting drive “%s” failed:"
|
||||||
msgstr "Не ўдалося выняць дыск «%s»:"
|
msgstr "Не ўдалося выняць дыск «%s»:"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:145
|
#: extensions/drive-menu/extension.js:142
|
||||||
msgid "Removable devices"
|
msgid "Removable devices"
|
||||||
msgstr "Здымныя прылады"
|
msgstr "Здымныя прылады"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:167
|
#: extensions/drive-menu/extension.js:164
|
||||||
msgid "Open Files"
|
msgid "Open Files"
|
||||||
msgstr "Адкрыць файлы"
|
msgstr "Адкрыць файлы"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||||
msgid "Use more screen for windows"
|
msgid "Use more screen for windows"
|
||||||
msgstr "Выкарыстоўваць большую плошчу экрана для вокнаў"
|
msgstr "Выкарыстоўваць большую плошчу экрана для вокнаў"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Try to use more screen for placing window thumbnails by adapting to screen "
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
"This setting applies only with the natural placement strategy."
|
"This setting applies only with the natural placement strategy."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Спрабаваць выкарыстаць большую плошчу экрана для размяшчэння мініяцюр праз "
|
"Спрабаваць выкарыстаць большую плошчу экрана для размяшчэння мініяцюр праз "
|
||||||
"змяненне суадносін бакоў экрана, ўшчыльняючы іх, каб зменшыць памеры "
|
"змяненне суадносін бакоў экрана, ушчыльняючы іх, каб зменшыць памеры "
|
||||||
"абмежавальнай рамкі. Гэты параметр ужываецца толькі з натуральным "
|
"абмежавальнай рамкі. Гэты параметр ужываецца толькі з натуральным "
|
||||||
"размяшчэннем мініяцюр."
|
"размяшчэннем мініяцюр."
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||||
msgid "Place window captions on top"
|
msgid "Place window captions on top"
|
||||||
msgstr "Размяшчаць подпіс акна зверху"
|
msgstr "Размяшчаць подпіс акна зверху"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"If true, place window captions on top the respective thumbnail, overriding "
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
"shell default of placing it at the bottom. Changing this setting requires "
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
"restarting the shell to have any effect."
|
"restarting the shell to have any effect."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Калі выбрана, подпіс акна будзе над мініяцюрай, а не пад ей (як "
|
"Калі выбрана, подпіс акна будзе над мініяцюрай, а не пад ёй (як "
|
||||||
"перадвызначана). Каб змена налады ўступіла ў сілу, трэба перазапусціць "
|
"перадвызначана). Каб змена налады ўступіла ў сілу, трэба перазапусціць "
|
||||||
"абалонку."
|
"абалонку."
|
||||||
|
|
||||||
|
#: extensions/places-menu/extension.js:91
|
||||||
#: extensions/places-menu/extension.js:94
|
#: extensions/places-menu/extension.js:94
|
||||||
#: extensions/places-menu/extension.js:97
|
|
||||||
msgid "Places"
|
msgid "Places"
|
||||||
msgstr "Месцы"
|
msgstr "Месцы"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:49
|
#: extensions/places-menu/placeDisplay.js:60
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Не ўдалося запусціць «%s»"
|
msgstr "Не ўдалося запусціць «%s»"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:64
|
#: extensions/places-menu/placeDisplay.js:75
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to mount volume for “%s”"
|
msgid "Failed to mount volume for “%s”"
|
||||||
msgstr "Не ўдалося прымацаваць том для «%s»."
|
msgstr "Не ўдалося прымацаваць том для «%s»."
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:125
|
#: extensions/places-menu/placeDisplay.js:135
|
||||||
#: extensions/places-menu/placeDisplay.js:148
|
#: extensions/places-menu/placeDisplay.js:158
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Камп'ютар"
|
msgstr "Камп'ютар"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:336
|
#: extensions/places-menu/placeDisplay.js:333
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Хатняя папка"
|
msgstr "Хатняя папка"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:381
|
#: extensions/places-menu/placeDisplay.js:378
|
||||||
msgid "Browse Network"
|
msgid "Browse Network"
|
||||||
msgstr "Агляд сеткі"
|
msgstr "Агляд сеткі"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||||
msgid "Cycle Screenshot Sizes"
|
msgid "Cycle Screenshot Sizes"
|
||||||
msgstr "Паслядоўнасць змены памераў для здымка экрана"
|
msgstr "Паслядоўнасць змены памераў для здымка экрана"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||||
msgid "Cycle Screenshot Sizes Backward"
|
msgid "Cycle Screenshot Sizes Backward"
|
||||||
msgstr "Адваротная паслядоўнасць змены памераў для здымка экрана"
|
msgstr "Адваротная паслядоўнасць змены памераў для здымка экрана"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
#: extensions/system-monitor/extension.js:135
|
||||||
|
msgid "CPU stats"
|
||||||
|
msgstr "Статыстыка выкарыстання працэсара"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:159
|
||||||
|
msgid "Memory stats"
|
||||||
|
msgstr "Статыстыка выкарыстання памяці"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:177
|
||||||
|
msgid "Swap stats"
|
||||||
|
msgstr "Статыстыка выкарыстання своп"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:336
|
||||||
|
msgid "Upload stats"
|
||||||
|
msgstr "Статыстыка адпраўлення даных"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:350
|
||||||
|
msgid "Download stats"
|
||||||
|
msgstr "Статыстыка атрымання даных"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:364
|
||||||
|
msgid "System stats"
|
||||||
|
msgstr "Статыстыка сістэмы"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:412
|
||||||
|
msgid "Show"
|
||||||
|
msgstr "Паказваць"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:414
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "Працэсар"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:416
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Памяць"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:418
|
||||||
|
msgid "Swap"
|
||||||
|
msgstr "Своп"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:420
|
||||||
|
msgid "Upload"
|
||||||
|
msgstr "Атрыманне"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:422
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Адпраўленне"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:427
|
||||||
|
msgid "Open System Monitor"
|
||||||
|
msgstr "Адкрыць сістэмны манітор"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
|
||||||
|
msgid "Show CPU usage"
|
||||||
|
msgstr "Паказваць выкарыстанне працэсара"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
|
||||||
|
msgid "Show memory usage"
|
||||||
|
msgstr "Паказваць выкарыстанне памяці"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
|
||||||
|
msgid "Show swap usage"
|
||||||
|
msgstr "Паказваць выкарыстанне своп"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
|
||||||
|
msgid "Show upload"
|
||||||
|
msgstr "Паказваць атрыманне даных"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
|
||||||
|
msgid "Show download"
|
||||||
|
msgstr "Паказваць адпраўленне даных"
|
||||||
|
|
||||||
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
|
||||||
msgid "Theme name"
|
msgid "Theme name"
|
||||||
msgstr "Назва тэмы"
|
msgstr "Назва тэмы"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
msgstr "Назва тэмы, што загрузіцца з ~/.themes/name/gnome-shell"
|
msgstr "Назва тэмы, што загрузіцца з ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
@@ -157,51 +229,51 @@ msgstr "Назва тэмы, што загрузіцца з ~/.themes/name/gnome
|
|||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Закрыць"
|
msgstr "Закрыць"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:99
|
||||||
msgid "Unminimize"
|
msgid "Unminimize"
|
||||||
msgstr "Скасаваць згортванне"
|
msgstr "Скасаваць згортванне"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:99
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Згарнуць"
|
msgstr "Згарнуць"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:106
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Скасаваць разгортванне"
|
msgstr "Скасаваць разгортванне"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:106
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Разгарнуць"
|
msgstr "Разгарнуць"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:483
|
#: extensions/window-list/extension.js:471
|
||||||
msgid "Minimize all"
|
msgid "Minimize all"
|
||||||
msgstr "Згарнуць усе"
|
msgstr "Згарнуць усе"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:489
|
#: extensions/window-list/extension.js:477
|
||||||
msgid "Unminimize all"
|
msgid "Unminimize all"
|
||||||
msgstr "Скасаваць згортванне для ўсіх"
|
msgstr "Скасаваць згортванне для ўсіх"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:495
|
#: extensions/window-list/extension.js:483
|
||||||
msgid "Maximize all"
|
msgid "Maximize all"
|
||||||
msgstr "Разгарнуць усе"
|
msgstr "Разгарнуць усе"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:503
|
#: extensions/window-list/extension.js:491
|
||||||
msgid "Unmaximize all"
|
msgid "Unmaximize all"
|
||||||
msgstr "Скасаваць разгортванне для ўсіх"
|
msgstr "Скасаваць разгортванне для ўсіх"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:511
|
#: extensions/window-list/extension.js:499
|
||||||
msgid "Close all"
|
msgid "Close all"
|
||||||
msgstr "Закрыць усе"
|
msgstr "Закрыць усе"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:795
|
#: extensions/window-list/extension.js:778
|
||||||
msgid "Window List"
|
msgid "Window List"
|
||||||
msgstr "Спіс вокнаў"
|
msgstr "Спіс вокнаў"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||||
msgid "When to group windows"
|
msgid "When to group windows"
|
||||||
msgstr "Умовы групавання вокнаў"
|
msgstr "Умовы групавання вокнаў"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"Decides when to group windows from the same application on the window list. "
|
"Decides when to group windows from the same application on the window list. "
|
||||||
"Possible values are “never”, “auto” and “always”."
|
"Possible values are “never”, “auto” and “always”."
|
||||||
@@ -209,26 +281,30 @@ msgstr ""
|
|||||||
"Вызначае калі групаваць вокны адной праграмы ў спісе вокнаў. Магчымыя "
|
"Вызначае калі групаваць вокны адной праграмы ў спісе вокнаў. Магчымыя "
|
||||||
"значэнні: «never» (ніколі), «auto» (аўтаматычна), «always» (заўсёды)."
|
"значэнні: «never» (ніколі), «auto» (аўтаматычна), «always» (заўсёды)."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||||
#: extensions/window-list/prefs.js:79
|
#: extensions/window-list/prefs.js:79
|
||||||
msgid "Show windows from all workspaces"
|
msgid "Show windows from all workspaces"
|
||||||
msgstr "Паказваць вокны з усіх працоўных прастор"
|
msgstr "Паказваць вокны з усіх працоўных прастор"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||||
msgid "Whether to show windows from all workspaces or only the current one."
|
msgid "Whether to show windows from all workspaces or only the current one."
|
||||||
msgstr "Паказваць вокны з усіх працоўных прастор ці толькі з бягучай."
|
msgstr "Паказваць вокны з усіх працоўных прастор ці толькі з бягучай."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||||
msgid "Show the window list on all monitors"
|
msgid "Show the window list on all monitors"
|
||||||
msgstr "Паказваць спіс вокнаў на ўсіх маніторах"
|
msgstr "Паказваць спіс вокнаў на ўсіх маніторах"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to show the window list on all connected monitors or only on the "
|
"Whether to show the window list on all connected monitors or only on the "
|
||||||
"primary one."
|
"primary one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Паказваць спіс вокнаў на ўсіх падлучаных маніторах ці толькі на асноўным."
|
"Паказваць спіс вокнаў на ўсіх падлучаных маніторах ці толькі на асноўным."
|
||||||
|
|
||||||
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
|
||||||
|
msgid "Show workspace previews in window list"
|
||||||
|
msgstr "Паказваць папярэдні прагляд працоўных прастор у спісе акон"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:35
|
#: extensions/window-list/prefs.js:35
|
||||||
msgid "Window Grouping"
|
msgid "Window Grouping"
|
||||||
msgstr "Групаванне вокнаў"
|
msgstr "Групаванне вокнаў"
|
||||||
@@ -249,24 +325,38 @@ msgstr "Заўсёды групаваць вокны"
|
|||||||
msgid "Show on all monitors"
|
msgid "Show on all monitors"
|
||||||
msgstr "Паказваць на ўсіх маніторах"
|
msgstr "Паказваць на ўсіх маніторах"
|
||||||
|
|
||||||
#: extensions/window-list/workspaceIndicator.js:261
|
#: extensions/window-list/prefs.js:92
|
||||||
#: extensions/workspace-indicator/extension.js:266
|
msgid "Show workspace previews"
|
||||||
msgid "Workspace Indicator"
|
msgstr "Паказваць папярэдні прагляд працоўных прастор"
|
||||||
msgstr "Індыкатар працоўнай прасторы"
|
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:62
|
#: extensions/workspace-indicator/prefs.js:30
|
||||||
|
msgid "Show Previews In Top Bar"
|
||||||
|
msgstr "Паказваць папярэдні прагляд у верхняй панэлі"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/prefs.js:88
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Workspace %d"
|
msgid "Workspace %d"
|
||||||
msgstr "Працоўная прастора %d"
|
msgstr "Працоўная прастора %d"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:129
|
#: extensions/workspace-indicator/prefs.js:155
|
||||||
msgid "Workspace Names"
|
msgid "Workspace Names"
|
||||||
msgstr "Назвы працоўных прастор"
|
msgstr "Назвы працоўных прастор"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:255
|
#: extensions/workspace-indicator/prefs.js:281
|
||||||
msgid "Add Workspace"
|
msgid "Add Workspace"
|
||||||
msgstr "Дадаць працоўную прастору"
|
msgstr "Дадаць працоўную прастору"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
|
||||||
|
msgid "Show workspace previews in top bar"
|
||||||
|
msgstr "Паказваць папярэдні прагляд працоўных прастор у верхняй панэлі"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/workspaceIndicator.js:430
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Індыкатар працоўнай прасторы"
|
||||||
|
|
||||||
|
#~ msgid "Applications"
|
||||||
|
#~ msgstr "Праграмы"
|
||||||
|
|
||||||
#~ msgid "Attach modal dialog to the parent window"
|
#~ msgid "Attach modal dialog to the parent window"
|
||||||
#~ msgstr "Прымацаваць мадальны дыялог да бацькоўскага акна"
|
#~ msgstr "Прымацаваць мадальны дыялог да бацькоўскага акна"
|
||||||
|
|
||||||
@@ -328,7 +418,7 @@ msgstr "Дадаць працоўную прастору"
|
|||||||
#~ "If not empty, it contains the text that will be shown when clicking on "
|
#~ "If not empty, it contains the text that will be shown when clicking on "
|
||||||
#~ "the panel."
|
#~ "the panel."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "Калі не пуста, ўтрымлівае тэкст, які будзе паказвацца пры націсканні на "
|
#~ "Калі не пуста, змяшчае тэкст, які будзе паказвацца пры націсканні на "
|
||||||
#~ "панэль."
|
#~ "панэль."
|
||||||
|
|
||||||
#~ msgid "Message"
|
#~ msgid "Message"
|
||||||
|
|||||||
@@ -1,24 +1,28 @@
|
|||||||
# Bulgarian translation for gnome-shell-extensions po-file.
|
# Bulgarian translation for gnome-shell-extensions po-file.
|
||||||
# Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc.
|
# Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc.
|
||||||
# Copyright (C) 2021, 2022 Alexander Shopov <ash@kambanaria.org>.
|
# Copyright (C) 2021, 2022 Alexander Shopov <ash@kambanaria.org>.
|
||||||
|
# Copyright (C) 2024 twlvnn kraftwerk <kraft_werk@tutanota.com>.
|
||||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
# Ivaylo Valkov <ivaylo@e-valkov.org>, 2014.
|
# Ivaylo Valkov <ivaylo@e-valkov.org>, 2014.
|
||||||
# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2021, 2022.
|
# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2021, 2022.
|
||||||
# Lyubomir Vasilev <lyubomirv@abv.bg>, 2017.
|
# Lyubomir Vasilev <lyubomirv@abv.bg>, 2017.
|
||||||
|
# twlvnn kraftwerk <kraft_werk@tutanota.com>, 2024.
|
||||||
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell-extensions master\n"
|
"Project-Id-Version: gnome-shell-extensions main\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2022-02-12 20:25+0000\n"
|
"POT-Creation-Date: 2024-09-01 12:03+0000\n"
|
||||||
"PO-Revision-Date: 2022-02-13 11:40+0100\n"
|
"PO-Revision-Date: 2024-09-02 10:49+0200\n"
|
||||||
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
|
"Last-Translator: twlvnn kraftwerk <kraft_werk@tutanota.com>\n"
|
||||||
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
|
"Language-Team: Bulgarian <dict@ludost.net>\n"
|
||||||
"Language: bg\n"
|
"Language: bg\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
"X-Generator: Gtranslator 46.1\n"
|
||||||
|
|
||||||
#: data/gnome-classic.desktop.in:3
|
#: data/gnome-classic.desktop.in:3
|
||||||
msgid "GNOME Classic"
|
msgid "GNOME Classic"
|
||||||
@@ -37,19 +41,19 @@ msgstr "Класически GNOME в Wayland"
|
|||||||
msgid "GNOME Classic on Xorg"
|
msgid "GNOME Classic on Xorg"
|
||||||
msgstr "Класически GNOME в Xorg"
|
msgstr "Класически GNOME в Xorg"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:112
|
#: extensions/apps-menu/extension.js:126
|
||||||
msgid "Favorites"
|
msgid "Favorites"
|
||||||
msgstr "Любими"
|
msgstr "Любими"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:370
|
#: extensions/apps-menu/extension.js:400
|
||||||
msgid "Applications"
|
msgid "Apps"
|
||||||
msgstr "Програми"
|
msgstr "Програми"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||||
msgid "Application and workspace list"
|
msgid "Application and workspace list"
|
||||||
msgstr "Списък с програмите и работните плотове"
|
msgstr "Списък с програмите и работните плотове"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"A list of strings, each containing an application id (desktop file name), "
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
"followed by a colon and the workspace number"
|
"followed by a colon and the workspace number"
|
||||||
@@ -57,34 +61,34 @@ msgstr ""
|
|||||||
"Списък от низове. Всеки съдържа идентификатор на програма (име на файл „."
|
"Списък от низове. Всеки съдържа идентификатор на програма (име на файл „."
|
||||||
"desktop“), следван от знака „:“ и номер на работен плот"
|
"desktop“), следван от знака „:“ и номер на работен плот"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:19
|
#: extensions/auto-move-windows/prefs.js:159
|
||||||
msgid "Workspace Rules"
|
msgid "Workspace Rules"
|
||||||
msgstr "Правила за работните плотове"
|
msgstr "Правила за работните плотове"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:245
|
#: extensions/auto-move-windows/prefs.js:314
|
||||||
msgid "Add Rule"
|
msgid "Add Rule"
|
||||||
msgstr "Добавяне на правило"
|
msgstr "Добавяне на правило"
|
||||||
|
|
||||||
#. TRANSLATORS: %s is the filesystem name
|
#. TRANSLATORS: %s is the filesystem name
|
||||||
#: extensions/drive-menu/extension.js:123
|
#: extensions/drive-menu/extension.js:123
|
||||||
#: extensions/places-menu/placeDisplay.js:210
|
#: extensions/places-menu/placeDisplay.js:218
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Ejecting drive “%s” failed:"
|
msgid "Ejecting drive “%s” failed:"
|
||||||
msgstr "Неуспешно изваждане на устройство „%s“:"
|
msgstr "Неуспешно изваждане на устройство „%s“:"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:139
|
#: extensions/drive-menu/extension.js:142
|
||||||
msgid "Removable devices"
|
msgid "Removable devices"
|
||||||
msgstr "Преносими медии"
|
msgstr "Преносими медии"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:161
|
#: extensions/drive-menu/extension.js:164
|
||||||
msgid "Open Files"
|
msgid "Open Files"
|
||||||
msgstr "Отваряне на файлове"
|
msgstr "Отваряне на файлове"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||||
msgid "Use more screen for windows"
|
msgid "Use more screen for windows"
|
||||||
msgstr "Повече пространство за прозорците"
|
msgstr "Повече пространство за прозорците"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Try to use more screen for placing window thumbnails by adapting to screen "
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
@@ -95,11 +99,11 @@ msgstr ""
|
|||||||
"смаляване на обхващащия ги правоъгълник. Тази настройка се прилага само при "
|
"смаляване на обхващащия ги правоъгълник. Тази настройка се прилага само при "
|
||||||
"естествената стратегия за поставяне на прозорците."
|
"естествената стратегия за поставяне на прозорците."
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||||
msgid "Place window captions on top"
|
msgid "Place window captions on top"
|
||||||
msgstr "Заглавия на прозорците отгоре"
|
msgstr "Заглавия на прозорците отгоре"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"If true, place window captions on top the respective thumbnail, overriding "
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
"shell default of placing it at the bottom. Changing this setting requires "
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
@@ -109,123 +113,195 @@ msgstr ""
|
|||||||
"им, а не както е стандартно — отдолу. За прилагане на промяната на "
|
"им, а не както е стандартно — отдолу. За прилагане на промяната на "
|
||||||
"настройката трябва да рестартирате обвивката на GNOME."
|
"настройката трябва да рестартирате обвивката на GNOME."
|
||||||
|
|
||||||
#: extensions/places-menu/extension.js:88
|
|
||||||
#: extensions/places-menu/extension.js:91
|
#: extensions/places-menu/extension.js:91
|
||||||
|
#: extensions/places-menu/extension.js:94
|
||||||
msgid "Places"
|
msgid "Places"
|
||||||
msgstr "Места"
|
msgstr "Места"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:49
|
#: extensions/places-menu/placeDisplay.js:60
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Неуспешно стартиране на „%s“"
|
msgstr "Неуспешно стартиране на „%s“"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:64
|
#: extensions/places-menu/placeDisplay.js:75
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to mount volume for “%s”"
|
msgid "Failed to mount volume for “%s”"
|
||||||
msgstr "Неуспешно монтиране на тома „%s“"
|
msgstr "Неуспешно монтиране на тома „%s“"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:125
|
#: extensions/places-menu/placeDisplay.js:135
|
||||||
#: extensions/places-menu/placeDisplay.js:148
|
#: extensions/places-menu/placeDisplay.js:158
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Компютър"
|
msgstr "Компютър"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:336
|
#: extensions/places-menu/placeDisplay.js:333
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Домашна папка"
|
msgstr "Домашна папка"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:381
|
#: extensions/places-menu/placeDisplay.js:378
|
||||||
msgid "Browse Network"
|
msgid "Browse Network"
|
||||||
msgstr "Мрежа"
|
msgstr "Мрежа"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||||
msgid "Cycle Screenshot Sizes"
|
msgid "Cycle Screenshot Sizes"
|
||||||
msgstr "Смяна на размерите на снимката на екрана"
|
msgstr "Смяна на размерите на снимката на екрана"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||||
msgid "Cycle Screenshot Sizes Backward"
|
msgid "Cycle Screenshot Sizes Backward"
|
||||||
msgstr "Смяна на размерите на снимката на екрана наобратно"
|
msgstr "Смяна на размерите на снимката на екрана наобратно"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
#: extensions/system-monitor/extension.js:135
|
||||||
|
msgid "CPU stats"
|
||||||
|
msgstr "Статистика на ЦП"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:159
|
||||||
|
msgid "Memory stats"
|
||||||
|
msgstr "Статистика на паметта"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:177
|
||||||
|
msgid "Swap stats"
|
||||||
|
msgstr "Статистика на виртуалната памет"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:336
|
||||||
|
msgid "Upload stats"
|
||||||
|
msgstr "Статистика на качване"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:350
|
||||||
|
msgid "Download stats"
|
||||||
|
msgstr "Статистика на изтегляне"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:364
|
||||||
|
msgid "System stats"
|
||||||
|
msgstr "Статистика на системата"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:412
|
||||||
|
msgid "Show"
|
||||||
|
msgstr "Показване"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:414
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "ЦП"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:416
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Памет"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:418
|
||||||
|
msgid "Swap"
|
||||||
|
msgstr "Виртуалната памет"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:420
|
||||||
|
msgid "Upload"
|
||||||
|
msgstr "Качване"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:422
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Изтегляне"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:427
|
||||||
|
msgid "Open System Monitor"
|
||||||
|
msgstr "Отваряне на „Наблюдение на системата“"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
|
||||||
|
msgid "Show CPU usage"
|
||||||
|
msgstr "Показване на ползван ЦП"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
|
||||||
|
msgid "Show memory usage"
|
||||||
|
msgstr "Показване на ползвана памет"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
|
||||||
|
msgid "Show swap usage"
|
||||||
|
msgstr "Показване на ползвана виртуалната памет"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
|
||||||
|
msgid "Show upload"
|
||||||
|
msgstr "Показване на качването"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
|
||||||
|
msgid "Show download"
|
||||||
|
msgstr "Показване на изтеглянето"
|
||||||
|
|
||||||
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
|
||||||
msgid "Theme name"
|
msgid "Theme name"
|
||||||
msgstr "Име на темата"
|
msgstr "Име на темата"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Името на темата, която да бъде заредена от „~/.themes/name/gnome-shell“"
|
"Името на темата, която да бъде заредена от „~/.themes/name/gnome-shell“"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:72
|
#: extensions/window-list/extension.js:70
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Затваряне"
|
msgstr "Затваряне"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:97
|
||||||
msgid "Unminimize"
|
msgid "Unminimize"
|
||||||
msgstr "Деминимизиране"
|
msgstr "Деминимизиране"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:97
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Минимизиране"
|
msgstr "Минимизиране"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:104
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Демаксимизиране"
|
msgstr "Демаксимизиране"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:104
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Максимизиране"
|
msgstr "Максимизиране"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:434
|
#: extensions/window-list/extension.js:489
|
||||||
msgid "Minimize all"
|
msgid "Minimize all"
|
||||||
msgstr "Минимизиране на всички"
|
msgstr "Минимизиране на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:440
|
#: extensions/window-list/extension.js:495
|
||||||
msgid "Unminimize all"
|
msgid "Unminimize all"
|
||||||
msgstr "Деминимизиране на всички"
|
msgstr "Деминимизиране на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:446
|
#: extensions/window-list/extension.js:501
|
||||||
msgid "Maximize all"
|
msgid "Maximize all"
|
||||||
msgstr "Максимизиране на всички"
|
msgstr "Максимизиране на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:454
|
#: extensions/window-list/extension.js:509
|
||||||
msgid "Unmaximize all"
|
msgid "Unmaximize all"
|
||||||
msgstr "Демаксимизиране на всички"
|
msgstr "Демаксимизиране на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:462
|
#: extensions/window-list/extension.js:517
|
||||||
msgid "Close all"
|
msgid "Close all"
|
||||||
msgstr "Затваряне на всички"
|
msgstr "Затваряне на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:741
|
#: extensions/window-list/extension.js:789
|
||||||
msgid "Window List"
|
msgid "Window List"
|
||||||
msgstr "Списък на прозорците"
|
msgstr "Списък на прозорците"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||||
msgid "When to group windows"
|
msgid "When to group windows"
|
||||||
msgstr "Кога прозорците да се групират"
|
msgstr "Кога прозорците да се групират"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"Decides when to group windows from the same application on the window list. "
|
"Decides when to group windows from the same application on the window list. "
|
||||||
"Possible values are “never”, “auto” and “always”."
|
"Possible values are “never”, “auto” and “always”."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Кога прозорците на една програма да се групират в списъка с прозорците. "
|
"Кога прозорците на една програма да се групират в списъка с прозорците. "
|
||||||
"Възможните стойности са „never“ (никога), „auto“ (автоматично) и "
|
"Възможните стойности са „never“ (никога), „auto“ (автоматично) и „always“ "
|
||||||
"„always“ (винаги)."
|
"(винаги)."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||||
#: extensions/window-list/prefs.js:76
|
#: extensions/window-list/prefs.js:79
|
||||||
msgid "Show windows from all workspaces"
|
msgid "Show windows from all workspaces"
|
||||||
msgstr "Да се показват прозорците от всички работни плотове"
|
msgstr "Да се показват прозорците от всички работни плотове"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||||
msgid "Whether to show windows from all workspaces or only the current one."
|
msgid "Whether to show windows from all workspaces or only the current one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Дали да се показват прозорците от всички работни плотове или само от текущия."
|
"Дали да се показват прозорците от всички работни плотове или само от текущия."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||||
msgid "Show the window list on all monitors"
|
msgid "Show the window list on all monitors"
|
||||||
msgstr "Извеждане на списъка с прозорци на всички монитори"
|
msgstr "Извеждане на списъка с прозорци на всички монитори"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to show the window list on all connected monitors or only on the "
|
"Whether to show the window list on all connected monitors or only on the "
|
||||||
"primary one."
|
"primary one."
|
||||||
@@ -233,40 +309,58 @@ msgstr ""
|
|||||||
"Дали списъкът с прозорци да се извежда на всички монитори или само на "
|
"Дали списъкът с прозорци да се извежда на всички монитори или само на "
|
||||||
"основния"
|
"основния"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:32
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
|
||||||
|
msgid "Show workspace previews in window list"
|
||||||
|
msgstr "Визуализиране на работните пространства в списъка с прозорци"
|
||||||
|
|
||||||
|
#: extensions/window-list/prefs.js:35
|
||||||
msgid "Window Grouping"
|
msgid "Window Grouping"
|
||||||
msgstr "Групиране на прозорци"
|
msgstr "Групиране на прозорци"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:37
|
#: extensions/window-list/prefs.js:40
|
||||||
msgid "Never group windows"
|
msgid "Never group windows"
|
||||||
msgstr "Никога да не се групират"
|
msgstr "Никога да не се групират"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:38
|
#: extensions/window-list/prefs.js:41
|
||||||
msgid "Group windows when space is limited"
|
msgid "Group windows when space is limited"
|
||||||
msgstr "Групиране при ограничено място"
|
msgstr "Групиране при ограничено място"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:39
|
#: extensions/window-list/prefs.js:42
|
||||||
msgid "Always group windows"
|
msgid "Always group windows"
|
||||||
msgstr "Винаги да се групират"
|
msgstr "Винаги да се групират"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:63
|
#: extensions/window-list/prefs.js:66
|
||||||
msgid "Show on all monitors"
|
msgid "Show on all monitors"
|
||||||
msgstr "На всички монитори"
|
msgstr "На всички монитори"
|
||||||
|
|
||||||
#: extensions/window-list/workspaceIndicator.js:249
|
#: extensions/window-list/prefs.js:92
|
||||||
#: extensions/workspace-indicator/extension.js:254
|
msgid "Show workspace previews"
|
||||||
msgid "Workspace Indicator"
|
msgstr "Визуализиране на работните пространства"
|
||||||
msgstr "Индикатор на работните плотове"
|
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:18
|
#: extensions/workspace-indicator/prefs.js:30
|
||||||
msgid "Workspace Names"
|
msgid "Show Previews In Top Bar"
|
||||||
msgstr "Имена на работните плотове"
|
msgstr "Визуализиране в горната лента"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:39
|
#: extensions/workspace-indicator/prefs.js:88
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Workspace %d"
|
msgid "Workspace %d"
|
||||||
msgstr "Работен плот %d"
|
msgstr "Работен плот %d"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:184
|
#: extensions/workspace-indicator/prefs.js:155
|
||||||
|
msgid "Workspace Names"
|
||||||
|
msgstr "Имена на работните плотове"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/prefs.js:281
|
||||||
msgid "Add Workspace"
|
msgid "Add Workspace"
|
||||||
msgstr "Добавяне на работен плот"
|
msgstr "Добавяне на работен плот"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
|
||||||
|
msgid "Show workspace previews in top bar"
|
||||||
|
msgstr "Визуализиране на работните пространства в горната лента"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/workspaceIndicator.js:430
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Индикатор на работните плотове"
|
||||||
|
|
||||||
|
#~ msgid "Applications"
|
||||||
|
#~ msgstr "Програми"
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell-extensions\n"
|
"Project-Id-Version: gnome-shell-extensions\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
|
"POT-Creation-Date: 2024-08-12 20:31+0000\n"
|
||||||
"PO-Revision-Date: 2017-07-08 13:29+0100\n"
|
"PO-Revision-Date: 2024-08-19 23:26+0200\n"
|
||||||
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
|
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
|
||||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
||||||
"Language: ca\n"
|
"Language: ca\n"
|
||||||
@@ -18,6 +18,8 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-DamnedLies-Scope: partial\n"
|
||||||
|
"X-Generator: Poedit 2.4.2\n"
|
||||||
|
|
||||||
#: data/gnome-classic.desktop.in:3
|
#: data/gnome-classic.desktop.in:3
|
||||||
msgid "GNOME Classic"
|
msgid "GNOME Classic"
|
||||||
@@ -36,19 +38,19 @@ msgstr "GNOME clàssic amb Wayland"
|
|||||||
msgid "GNOME Classic on Xorg"
|
msgid "GNOME Classic on Xorg"
|
||||||
msgstr "GNOME clàssic amb Xorg"
|
msgstr "GNOME clàssic amb Xorg"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:112
|
#: extensions/apps-menu/extension.js:126
|
||||||
msgid "Favorites"
|
msgid "Favorites"
|
||||||
msgstr "Preferides"
|
msgstr "Preferides"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:366
|
#: extensions/apps-menu/extension.js:400
|
||||||
msgid "Applications"
|
msgid "Apps"
|
||||||
msgstr "Aplicacions"
|
msgstr "Aplicacions"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||||
msgid "Application and workspace list"
|
msgid "Application and workspace list"
|
||||||
msgstr "Aplicació i llista d'espais de treball"
|
msgstr "Aplicació i llista d'espais de treball"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"A list of strings, each containing an application id (desktop file name), "
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
"followed by a colon and the workspace number"
|
"followed by a colon and the workspace number"
|
||||||
@@ -57,34 +59,34 @@ msgstr ""
|
|||||||
"d'aplicació (nom del fitxer de l'escriptori), seguit de dos punts i el "
|
"d'aplicació (nom del fitxer de l'escriptori), seguit de dos punts i el "
|
||||||
"número de l'espai de treball"
|
"número de l'espai de treball"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:34
|
#: extensions/auto-move-windows/prefs.js:159
|
||||||
msgid "Workspace Rules"
|
msgid "Workspace Rules"
|
||||||
msgstr "Regles dels espais de treball"
|
msgstr "Regles dels espais de treball"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:236
|
#: extensions/auto-move-windows/prefs.js:314
|
||||||
msgid "Add Rule"
|
msgid "Add Rule"
|
||||||
msgstr "Afegeix una regla"
|
msgstr "Afegeix una regla"
|
||||||
|
|
||||||
#. TRANSLATORS: %s is the filesystem name
|
#. TRANSLATORS: %s is the filesystem name
|
||||||
#: extensions/drive-menu/extension.js:133
|
#: extensions/drive-menu/extension.js:123
|
||||||
#: extensions/places-menu/placeDisplay.js:233
|
#: extensions/places-menu/placeDisplay.js:218
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Ejecting drive “%s” failed:"
|
msgid "Ejecting drive “%s” failed:"
|
||||||
msgstr "Ha fallat l'expulsió de la unitat «%s»:"
|
msgstr "Ha fallat l'expulsió de la unitat «%s»:"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:149
|
#: extensions/drive-menu/extension.js:142
|
||||||
msgid "Removable devices"
|
msgid "Removable devices"
|
||||||
msgstr "Dispositius extraïbles"
|
msgstr "Dispositius extraïbles"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:171
|
#: extensions/drive-menu/extension.js:164
|
||||||
msgid "Open Files"
|
msgid "Open Files"
|
||||||
msgstr "Obre els fitxers"
|
msgstr "Obre els fitxers"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||||
msgid "Use more screen for windows"
|
msgid "Use more screen for windows"
|
||||||
msgstr "Utilitza més pantalla per les finestres"
|
msgstr "Utilitza més pantalla per les finestres"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Try to use more screen for placing window thumbnails by adapting to screen "
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
@@ -96,11 +98,11 @@ msgstr ""
|
|||||||
"de configuració només s'aplica a l'estratègia de posicionament de finestres "
|
"de configuració només s'aplica a l'estratègia de posicionament de finestres "
|
||||||
"natural."
|
"natural."
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||||
msgid "Place window captions on top"
|
msgid "Place window captions on top"
|
||||||
msgstr "Posiciona els títols de les finestres al damunt"
|
msgstr "Posiciona els títols de les finestres al damunt"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"If true, place window captions on top the respective thumbnail, overriding "
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
"shell default of placing it at the bottom. Changing this setting requires "
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
@@ -111,99 +113,171 @@ msgstr ""
|
|||||||
"posicionar-lo a baix. Cal reiniciar el Shell per tal que aquest canvi tingui "
|
"posicionar-lo a baix. Cal reiniciar el Shell per tal que aquest canvi tingui "
|
||||||
"efecte."
|
"efecte."
|
||||||
|
|
||||||
#: extensions/places-menu/extension.js:88
|
|
||||||
#: extensions/places-menu/extension.js:91
|
#: extensions/places-menu/extension.js:91
|
||||||
|
#: extensions/places-menu/extension.js:94
|
||||||
msgid "Places"
|
msgid "Places"
|
||||||
msgstr "Llocs"
|
msgstr "Llocs"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:46
|
#: extensions/places-menu/placeDisplay.js:60
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "No s'ha pogut iniciar «%s»"
|
msgstr "No s'ha pogut iniciar «%s»"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:61
|
#: extensions/places-menu/placeDisplay.js:75
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to mount volume for “%s”"
|
msgid "Failed to mount volume for “%s”"
|
||||||
msgstr "No s'ha pogut muntar el volum «%s»"
|
msgstr "No s'ha pogut muntar el volum «%s»"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:148
|
#: extensions/places-menu/placeDisplay.js:135
|
||||||
#: extensions/places-menu/placeDisplay.js:171
|
#: extensions/places-menu/placeDisplay.js:158
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Ordinador"
|
msgstr "Ordinador"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:359
|
#: extensions/places-menu/placeDisplay.js:333
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Inici"
|
msgstr "Inici"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:404
|
#: extensions/places-menu/placeDisplay.js:378
|
||||||
msgid "Browse Network"
|
msgid "Browse Network"
|
||||||
msgstr "Navega per la xarxa"
|
msgstr "Navega per la xarxa"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||||
msgid "Cycle Screenshot Sizes"
|
msgid "Cycle Screenshot Sizes"
|
||||||
msgstr "Mostra cíclicament mides de captura de pantalla"
|
msgstr "Mostra cíclicament mides de captura de pantalla"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||||
msgid "Cycle Screenshot Sizes Backward"
|
msgid "Cycle Screenshot Sizes Backward"
|
||||||
msgstr "Mostra cíclicament cap enrere mides de captura de pantalla"
|
msgstr "Mostra cíclicament cap enrere mides de captura de pantalla"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
#: extensions/system-monitor/extension.js:135
|
||||||
|
msgid "CPU stats"
|
||||||
|
msgstr "Estadístiques de processador"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:159
|
||||||
|
msgid "Memory stats"
|
||||||
|
msgstr "Estadístiques de memòria"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:177
|
||||||
|
msgid "Swap stats"
|
||||||
|
msgstr "Estadístiques del «swap»"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:336
|
||||||
|
msgid "Upload stats"
|
||||||
|
msgstr "Estadístiques de pujada"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:350
|
||||||
|
msgid "Download stats"
|
||||||
|
msgstr "Estadístiques de descàrrega"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:364
|
||||||
|
msgid "System stats"
|
||||||
|
msgstr "Estadístiques del sistema"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:412
|
||||||
|
msgid "Show"
|
||||||
|
msgstr "Mostra"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:414
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "Processador"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:416
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Memòria"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:418
|
||||||
|
msgid "Swap"
|
||||||
|
msgstr "Espai d'intercanvi"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:420
|
||||||
|
msgid "Upload"
|
||||||
|
msgstr "Pujades"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:422
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Descàrregues"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:427
|
||||||
|
msgid "Open System Monitor"
|
||||||
|
msgstr "Obre el Monitor del sistema"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
|
||||||
|
msgid "Show CPU usage"
|
||||||
|
msgstr "Mostra l'ús de CPU"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
|
||||||
|
msgid "Show memory usage"
|
||||||
|
msgstr "Mostra l'ús de memòria"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
|
||||||
|
msgid "Show swap usage"
|
||||||
|
msgstr "Mostra l'ús de l'espai d'intercanvi"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
|
||||||
|
msgid "Show upload"
|
||||||
|
msgstr "Mostra les pujades"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
|
||||||
|
msgid "Show download"
|
||||||
|
msgstr "Mostra les descàrregues"
|
||||||
|
|
||||||
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
|
||||||
msgid "Theme name"
|
msgid "Theme name"
|
||||||
msgstr "Nom del tema"
|
msgstr "Nom del tema"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
msgstr "El nom del tema que es carregarà des de ~/.themes/name/gnome-shell"
|
msgstr "El nom del tema que es carregarà des de ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:72
|
#: extensions/window-list/extension.js:70
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Tanca"
|
msgstr "Tanca"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:97
|
||||||
msgid "Unminimize"
|
msgid "Unminimize"
|
||||||
msgstr "Desminimitza"
|
msgstr "Desminimitza"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:97
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Minimitza"
|
msgstr "Minimitza"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:104
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Desmaximitza"
|
msgstr "Desmaximitza"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:104
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Maximitza"
|
msgstr "Maximitza"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:434
|
#: extensions/window-list/extension.js:489
|
||||||
msgid "Minimize all"
|
msgid "Minimize all"
|
||||||
msgstr "Minimitza-ho tot"
|
msgstr "Minimitza-ho tot"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:440
|
#: extensions/window-list/extension.js:495
|
||||||
msgid "Unminimize all"
|
msgid "Unminimize all"
|
||||||
msgstr "Desminimitza-ho tot"
|
msgstr "Desminimitza-ho tot"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:446
|
#: extensions/window-list/extension.js:501
|
||||||
msgid "Maximize all"
|
msgid "Maximize all"
|
||||||
msgstr "Maximitza-ho tot"
|
msgstr "Maximitza-ho tot"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:454
|
#: extensions/window-list/extension.js:509
|
||||||
msgid "Unmaximize all"
|
msgid "Unmaximize all"
|
||||||
msgstr "Desmaximitza-ho tot"
|
msgstr "Desmaximitza-ho tot"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:462
|
#: extensions/window-list/extension.js:517
|
||||||
msgid "Close all"
|
msgid "Close all"
|
||||||
msgstr "Tanca-ho tot"
|
msgstr "Tanca-ho tot"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:741
|
#: extensions/window-list/extension.js:789
|
||||||
msgid "Window List"
|
msgid "Window List"
|
||||||
msgstr "Llista de finestres"
|
msgstr "Llista de finestres"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||||
msgid "When to group windows"
|
msgid "When to group windows"
|
||||||
msgstr "Quan s'han d'agrupar les finestres"
|
msgstr "Quan s'han d'agrupar les finestres"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"Decides when to group windows from the same application on the window list. "
|
"Decides when to group windows from the same application on the window list. "
|
||||||
"Possible values are “never”, “auto” and “always”."
|
"Possible values are “never”, “auto” and “always”."
|
||||||
@@ -212,22 +286,22 @@ msgstr ""
|
|||||||
"llista de finestres. Els valors possibles són: «never» (mai), "
|
"llista de finestres. Els valors possibles són: «never» (mai), "
|
||||||
"«auto» (automàticament) i «always» (sempre)."
|
"«auto» (automàticament) i «always» (sempre)."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||||
#: extensions/window-list/prefs.js:86
|
#: extensions/window-list/prefs.js:79
|
||||||
msgid "Show windows from all workspaces"
|
msgid "Show windows from all workspaces"
|
||||||
msgstr "Mostra les finestres de tots els espais de treball"
|
msgstr "Mostra les finestres de tots els espais de treball"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||||
msgid "Whether to show windows from all workspaces or only the current one."
|
msgid "Whether to show windows from all workspaces or only the current one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si es mostren les finestres de tots els espais de treballs o només de "
|
"Si es mostren les finestres de tots els espais de treballs o només de "
|
||||||
"l'actual."
|
"l'actual."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||||
msgid "Show the window list on all monitors"
|
msgid "Show the window list on all monitors"
|
||||||
msgstr "Mostra la llista de finestres a tots els monitors"
|
msgstr "Mostra la llista de finestres a tots els monitors"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to show the window list on all connected monitors or only on the "
|
"Whether to show the window list on all connected monitors or only on the "
|
||||||
"primary one."
|
"primary one."
|
||||||
@@ -235,40 +309,60 @@ msgstr ""
|
|||||||
"Si es mostra la llista de finestres en tots els monitors connectats o només "
|
"Si es mostra la llista de finestres en tots els monitors connectats o només "
|
||||||
"al primari."
|
"al primari."
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:39
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
|
||||||
|
msgid "Show workspace previews in window list"
|
||||||
|
msgstr ""
|
||||||
|
"Mostra les previsualitzacions dels espais de treball a la llista de finestres"
|
||||||
|
|
||||||
|
#: extensions/window-list/prefs.js:35
|
||||||
msgid "Window Grouping"
|
msgid "Window Grouping"
|
||||||
msgstr "Agrupació de finestres"
|
msgstr "Agrupació de finestres"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:63
|
#: extensions/window-list/prefs.js:40
|
||||||
msgid "Never group windows"
|
msgid "Never group windows"
|
||||||
msgstr "Mai agrupis les finestres"
|
msgstr "Mai agrupis les finestres"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:64
|
#: extensions/window-list/prefs.js:41
|
||||||
msgid "Group windows when space is limited"
|
msgid "Group windows when space is limited"
|
||||||
msgstr "Agrupa les finestres quan l'espai estigui limitat"
|
msgstr "Agrupa les finestres quan l'espai estigui limitat"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:65
|
#: extensions/window-list/prefs.js:42
|
||||||
msgid "Always group windows"
|
msgid "Always group windows"
|
||||||
msgstr "Agrupa les finestres sempre"
|
msgstr "Agrupa les finestres sempre"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:81
|
#: extensions/window-list/prefs.js:66
|
||||||
msgid "Show on all monitors"
|
msgid "Show on all monitors"
|
||||||
msgstr "Mostra a tots els monitors"
|
msgstr "Mostra a tots els monitors"
|
||||||
|
|
||||||
#: extensions/window-list/workspaceIndicator.js:249
|
#: extensions/window-list/prefs.js:92
|
||||||
#: extensions/workspace-indicator/extension.js:254
|
msgid "Show workspace previews"
|
||||||
msgid "Workspace Indicator"
|
msgstr "Mostra les previsualitzacions dels espais de treball"
|
||||||
msgstr "Indicador de l'espai de treball"
|
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:33
|
#: extensions/workspace-indicator/prefs.js:30
|
||||||
msgid "Workspace Names"
|
msgid "Show Previews In Top Bar"
|
||||||
msgstr "Noms dels espais de treball"
|
msgstr "Mostra previsualitzacions a la barra superior"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:66
|
#: extensions/workspace-indicator/prefs.js:88
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Workspace %d"
|
msgid "Workspace %d"
|
||||||
msgstr "Espai de treball %d"
|
msgstr "Espai de treball %d"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:207
|
#: extensions/workspace-indicator/prefs.js:155
|
||||||
|
msgid "Workspace Names"
|
||||||
|
msgstr "Noms dels espais de treball"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/prefs.js:281
|
||||||
msgid "Add Workspace"
|
msgid "Add Workspace"
|
||||||
msgstr "Afegeix un espai de treball"
|
msgstr "Afegeix un espai de treball"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
|
||||||
|
msgid "Show workspace previews in top bar"
|
||||||
|
msgstr ""
|
||||||
|
"Mostra les previsualitzacions dels espais de treball a la barra superior"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/workspaceIndicator.js:430
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Indicador de l'espai de treball"
|
||||||
|
|
||||||
|
#~ msgid "Applications"
|
||||||
|
#~ msgstr "Aplicacions"
|
||||||
|
|||||||
@@ -3,22 +3,23 @@
|
|||||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
# Petr Kovar <pknbe@volny.cz>, 2013.
|
# Petr Kovar <pknbe@volny.cz>, 2013.
|
||||||
# Marek Černocký <marek@manet.cz>, 2011, 2012, 2013, 2014, 2015, 2017, 2019, 2020, 2022.
|
# Marek Černocký <marek@manet.cz>, 2011, 2012, 2013, 2014, 2015, 2017, 2019, 2020, 2022.
|
||||||
|
# Vojtěch Perník <translations@pervoj.cz>, 2024.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell-extensions\n"
|
"Project-Id-Version: gnome-shell-extensions\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
|
"POT-Creation-Date: 2024-08-20 05:40+0000\n"
|
||||||
"PO-Revision-Date: 2022-02-16 09:58+0100\n"
|
"PO-Revision-Date: 2024-08-22 21:19+0200\n"
|
||||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
"Last-Translator: Vojtěch Perník <translations@pervoj.cz>\n"
|
||||||
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
|
||||||
"X-Generator: Gtranslator 2.91.6\n"
|
"X-Generator: Gtranslator 46.1\n"
|
||||||
|
|
||||||
#: data/gnome-classic.desktop.in:3
|
#: data/gnome-classic.desktop.in:3
|
||||||
msgid "GNOME Classic"
|
msgid "GNOME Classic"
|
||||||
@@ -37,19 +38,19 @@ msgstr "GNOME klasik na Waylandu"
|
|||||||
msgid "GNOME Classic on Xorg"
|
msgid "GNOME Classic on Xorg"
|
||||||
msgstr "GNOME klasik na Xorg"
|
msgstr "GNOME klasik na Xorg"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:112
|
#: extensions/apps-menu/extension.js:126
|
||||||
msgid "Favorites"
|
msgid "Favorites"
|
||||||
msgstr "Oblíbené"
|
msgstr "Oblíbené"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:366
|
#: extensions/apps-menu/extension.js:400
|
||||||
msgid "Applications"
|
msgid "Apps"
|
||||||
msgstr "Aplikace"
|
msgstr "Aplikace"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||||
msgid "Application and workspace list"
|
msgid "Application and workspace list"
|
||||||
msgstr "Seznam aplikací a pracovních ploch"
|
msgstr "Seznam aplikací a pracovních ploch"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"A list of strings, each containing an application id (desktop file name), "
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
"followed by a colon and the workspace number"
|
"followed by a colon and the workspace number"
|
||||||
@@ -57,34 +58,34 @@ msgstr ""
|
|||||||
"Seznam řetězců, z nichž každý obsahuje ID aplikace (název souboru pracovní "
|
"Seznam řetězců, z nichž každý obsahuje ID aplikace (název souboru pracovní "
|
||||||
"plochy), následovaný dvojtečkou a číslem pracovní plochy"
|
"plochy), následovaný dvojtečkou a číslem pracovní plochy"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:34
|
#: extensions/auto-move-windows/prefs.js:159
|
||||||
msgid "Workspace Rules"
|
msgid "Workspace Rules"
|
||||||
msgstr "Pravidla pracovních ploch"
|
msgstr "Pravidla pracovních ploch"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:236
|
#: extensions/auto-move-windows/prefs.js:314
|
||||||
msgid "Add Rule"
|
msgid "Add Rule"
|
||||||
msgstr "Přidat pravidlo"
|
msgstr "Přidat pravidlo"
|
||||||
|
|
||||||
#. TRANSLATORS: %s is the filesystem name
|
#. TRANSLATORS: %s is the filesystem name
|
||||||
#: extensions/drive-menu/extension.js:133
|
#: extensions/drive-menu/extension.js:123
|
||||||
#: extensions/places-menu/placeDisplay.js:233
|
#: extensions/places-menu/placeDisplay.js:218
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Ejecting drive “%s” failed:"
|
msgid "Ejecting drive “%s” failed:"
|
||||||
msgstr "Vysunutí disku „%s“ selhalo:"
|
msgstr "Vysunutí disku „%s“ selhalo:"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:149
|
#: extensions/drive-menu/extension.js:142
|
||||||
msgid "Removable devices"
|
msgid "Removable devices"
|
||||||
msgstr "Výměnná zařízení"
|
msgstr "Výměnná zařízení"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:171
|
#: extensions/drive-menu/extension.js:164
|
||||||
msgid "Open Files"
|
msgid "Open Files"
|
||||||
msgstr "Otevřít soubory"
|
msgstr "Otevřít soubory"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||||
msgid "Use more screen for windows"
|
msgid "Use more screen for windows"
|
||||||
msgstr "Použít větší část obrazovky pro okna"
|
msgstr "Použít větší část obrazovky pro okna"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Try to use more screen for placing window thumbnails by adapting to screen "
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
@@ -94,11 +95,11 @@ msgstr ""
|
|||||||
"využít větší část obrazovky pro umístění náhledů oken. Toto nastavení se "
|
"využít větší část obrazovky pro umístění náhledů oken. Toto nastavení se "
|
||||||
"použije pouze dohromady se strategií umisťování „natural“."
|
"použije pouze dohromady se strategií umisťování „natural“."
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||||
msgid "Place window captions on top"
|
msgid "Place window captions on top"
|
||||||
msgstr "Umístit název okna nahoru"
|
msgstr "Umístit název okna nahoru"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"If true, place window captions on top the respective thumbnail, overriding "
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
"shell default of placing it at the bottom. Changing this setting requires "
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
@@ -108,99 +109,171 @@ msgstr ""
|
|||||||
"přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto "
|
"přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto "
|
||||||
"nastavení vyžaduje restart shellu, aby se projevila."
|
"nastavení vyžaduje restart shellu, aby se projevila."
|
||||||
|
|
||||||
#: extensions/places-menu/extension.js:88
|
|
||||||
#: extensions/places-menu/extension.js:91
|
#: extensions/places-menu/extension.js:91
|
||||||
|
#: extensions/places-menu/extension.js:94
|
||||||
msgid "Places"
|
msgid "Places"
|
||||||
msgstr "Místa"
|
msgstr "Místa"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:46
|
#: extensions/places-menu/placeDisplay.js:60
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Selhalo spuštění „%s“"
|
msgstr "Selhalo spuštění „%s“"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:61
|
#: extensions/places-menu/placeDisplay.js:75
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to mount volume for “%s”"
|
msgid "Failed to mount volume for “%s”"
|
||||||
msgstr "Selhalo připojení svazku pro „%s“"
|
msgstr "Selhalo připojení svazku pro „%s“"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:148
|
#: extensions/places-menu/placeDisplay.js:135
|
||||||
#: extensions/places-menu/placeDisplay.js:171
|
#: extensions/places-menu/placeDisplay.js:158
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Počítač"
|
msgstr "Počítač"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:359
|
#: extensions/places-menu/placeDisplay.js:333
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Domů"
|
msgstr "Domů"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:404
|
#: extensions/places-menu/placeDisplay.js:378
|
||||||
msgid "Browse Network"
|
msgid "Browse Network"
|
||||||
msgstr "Procházet síť"
|
msgstr "Procházet síť"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||||
msgid "Cycle Screenshot Sizes"
|
msgid "Cycle Screenshot Sizes"
|
||||||
msgstr "Mění velikost pro snímky obrazovky"
|
msgstr "Mění velikost pro snímky obrazovky"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||||
msgid "Cycle Screenshot Sizes Backward"
|
msgid "Cycle Screenshot Sizes Backward"
|
||||||
msgstr "Mění pozpátku velikost pro snímky obrazovky"
|
msgstr "Mění pozpátku velikost pro snímky obrazovky"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
#: extensions/system-monitor/extension.js:135
|
||||||
|
msgid "CPU stats"
|
||||||
|
msgstr "Statistiky CPU"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:159
|
||||||
|
msgid "Memory stats"
|
||||||
|
msgstr "Statistiky paměti"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:177
|
||||||
|
msgid "Swap stats"
|
||||||
|
msgstr "Statistiky odkládacího prostoru"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:336
|
||||||
|
msgid "Upload stats"
|
||||||
|
msgstr "Statistiky nahrávání"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:350
|
||||||
|
msgid "Download stats"
|
||||||
|
msgstr "Statistiky stahování"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:364
|
||||||
|
msgid "System stats"
|
||||||
|
msgstr "Statistiky systému"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:412
|
||||||
|
msgid "Show"
|
||||||
|
msgstr "Zobrazit"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:414
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:416
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Paměť"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:418
|
||||||
|
msgid "Swap"
|
||||||
|
msgstr "Odkládací prostor"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:420
|
||||||
|
msgid "Upload"
|
||||||
|
msgstr "Nahrávání"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:422
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Stahování"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:427
|
||||||
|
msgid "Open System Monitor"
|
||||||
|
msgstr "Otevřít Sledování systému"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
|
||||||
|
msgid "Show CPU usage"
|
||||||
|
msgstr "Zobrazit využití CPU"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
|
||||||
|
msgid "Show memory usage"
|
||||||
|
msgstr "Zobrazit využití paměti"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
|
||||||
|
msgid "Show swap usage"
|
||||||
|
msgstr "Zobrazit využití odkládacího prostoru"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
|
||||||
|
msgid "Show upload"
|
||||||
|
msgstr "Zobrazit nahrávání"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
|
||||||
|
msgid "Show download"
|
||||||
|
msgstr "Zobrazit stahování"
|
||||||
|
|
||||||
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
|
||||||
msgid "Theme name"
|
msgid "Theme name"
|
||||||
msgstr "Název motivu"
|
msgstr "Název motivu"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
msgstr "Název motivu, který se má načíst z ~/.themes/name/gnome-shell"
|
msgstr "Název motivu, který se má načíst z ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:72
|
#: extensions/window-list/extension.js:70
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Zavřít"
|
msgstr "Zavřít"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:97
|
||||||
msgid "Unminimize"
|
msgid "Unminimize"
|
||||||
msgstr "Zrušit minimalizaci"
|
msgstr "Zrušit minimalizaci"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:97
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Minimalizovat"
|
msgstr "Minimalizovat"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:104
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Zrušit maximalizaci"
|
msgstr "Zrušit maximalizaci"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:104
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Maximalizovat"
|
msgstr "Maximalizovat"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:434
|
#: extensions/window-list/extension.js:489
|
||||||
msgid "Minimize all"
|
msgid "Minimize all"
|
||||||
msgstr "Minimalizovat všechna"
|
msgstr "Minimalizovat všechna"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:440
|
#: extensions/window-list/extension.js:495
|
||||||
msgid "Unminimize all"
|
msgid "Unminimize all"
|
||||||
msgstr "Zrušit minimalizaci všech"
|
msgstr "Zrušit minimalizaci všech"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:446
|
#: extensions/window-list/extension.js:501
|
||||||
msgid "Maximize all"
|
msgid "Maximize all"
|
||||||
msgstr "Maximalizovat všechna"
|
msgstr "Maximalizovat všechna"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:454
|
#: extensions/window-list/extension.js:509
|
||||||
msgid "Unmaximize all"
|
msgid "Unmaximize all"
|
||||||
msgstr "Zrušit maximalizaci všech"
|
msgstr "Zrušit maximalizaci všech"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:462
|
#: extensions/window-list/extension.js:517
|
||||||
msgid "Close all"
|
msgid "Close all"
|
||||||
msgstr "Zavřít všechna"
|
msgstr "Zavřít všechna"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:741
|
#: extensions/window-list/extension.js:789
|
||||||
msgid "Window List"
|
msgid "Window List"
|
||||||
msgstr "Seznam oken"
|
msgstr "Seznam oken"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||||
msgid "When to group windows"
|
msgid "When to group windows"
|
||||||
msgstr "Kdy seskupovat okna"
|
msgstr "Kdy seskupovat okna"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"Decides when to group windows from the same application on the window list. "
|
"Decides when to group windows from the same application on the window list. "
|
||||||
"Possible values are “never”, “auto” and “always”."
|
"Possible values are “never”, “auto” and “always”."
|
||||||
@@ -208,20 +281,20 @@ msgstr ""
|
|||||||
"Rozhoduje, kdy se mají v seznamu oken seskupovat okna stejné aplikace. Možné "
|
"Rozhoduje, kdy se mají v seznamu oken seskupovat okna stejné aplikace. Možné "
|
||||||
"hodnoty jsou „never“ (nikdy), „auto“ (automaticky) a „always“ (vždy)."
|
"hodnoty jsou „never“ (nikdy), „auto“ (automaticky) a „always“ (vždy)."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||||
#: extensions/window-list/prefs.js:86
|
#: extensions/window-list/prefs.js:79
|
||||||
msgid "Show windows from all workspaces"
|
msgid "Show windows from all workspaces"
|
||||||
msgstr "Zobrazovat okna ze všech pracovních ploch"
|
msgstr "Zobrazovat okna ze všech pracovních ploch"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||||
msgid "Whether to show windows from all workspaces or only the current one."
|
msgid "Whether to show windows from all workspaces or only the current one."
|
||||||
msgstr "Zda zobrazovat okna ze všech pracovních ploch nebo jen z aktuální."
|
msgstr "Zda zobrazovat okna ze všech pracovních ploch nebo jen z aktuální."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||||
msgid "Show the window list on all monitors"
|
msgid "Show the window list on all monitors"
|
||||||
msgstr "Zobrazovat seznam oken na všech monitorech"
|
msgstr "Zobrazovat seznam oken na všech monitorech"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to show the window list on all connected monitors or only on the "
|
"Whether to show the window list on all connected monitors or only on the "
|
||||||
"primary one."
|
"primary one."
|
||||||
@@ -229,40 +302,58 @@ msgstr ""
|
|||||||
"Zda zobrazovat seznam oken na všech připojených monitorech nebo jen na "
|
"Zda zobrazovat seznam oken na všech připojených monitorech nebo jen na "
|
||||||
"hlavním."
|
"hlavním."
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:39
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
|
||||||
|
msgid "Show workspace previews in window list"
|
||||||
|
msgstr "Zobrazit náhledy pracovních ploch v seznamu oken"
|
||||||
|
|
||||||
|
#: extensions/window-list/prefs.js:35
|
||||||
msgid "Window Grouping"
|
msgid "Window Grouping"
|
||||||
msgstr "Seskupování oken"
|
msgstr "Seskupování oken"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:63
|
#: extensions/window-list/prefs.js:40
|
||||||
msgid "Never group windows"
|
msgid "Never group windows"
|
||||||
msgstr "Nikdy neseskupovat okna"
|
msgstr "Nikdy neseskupovat okna"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:64
|
#: extensions/window-list/prefs.js:41
|
||||||
msgid "Group windows when space is limited"
|
msgid "Group windows when space is limited"
|
||||||
msgstr "Seskupovat okna při nedostatku místa"
|
msgstr "Seskupovat okna při nedostatku místa"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:65
|
#: extensions/window-list/prefs.js:42
|
||||||
msgid "Always group windows"
|
msgid "Always group windows"
|
||||||
msgstr "Vždy seskupovat okna"
|
msgstr "Vždy seskupovat okna"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:81
|
#: extensions/window-list/prefs.js:66
|
||||||
msgid "Show on all monitors"
|
msgid "Show on all monitors"
|
||||||
msgstr "Zobrazovat na všech monitorech"
|
msgstr "Zobrazovat na všech monitorech"
|
||||||
|
|
||||||
#: extensions/window-list/workspaceIndicator.js:249
|
#: extensions/window-list/prefs.js:92
|
||||||
#: extensions/workspace-indicator/extension.js:254
|
msgid "Show workspace previews"
|
||||||
msgid "Workspace Indicator"
|
msgstr "Zobrazit náhledy pracovních ploch"
|
||||||
msgstr "Ukazatel pracovní plochy"
|
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:33
|
#: extensions/workspace-indicator/prefs.js:30
|
||||||
msgid "Workspace Names"
|
msgid "Show Previews In Top Bar"
|
||||||
msgstr "Názvy pracovních ploch"
|
msgstr "Zobrazit náhledy v horním panelu"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:66
|
#: extensions/workspace-indicator/prefs.js:88
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Workspace %d"
|
msgid "Workspace %d"
|
||||||
msgstr "Pracovní plocha %d"
|
msgstr "Pracovní plocha %d"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:207
|
#: extensions/workspace-indicator/prefs.js:155
|
||||||
|
msgid "Workspace Names"
|
||||||
|
msgstr "Názvy pracovních ploch"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/prefs.js:281
|
||||||
msgid "Add Workspace"
|
msgid "Add Workspace"
|
||||||
msgstr "Přidat pracovní plochu"
|
msgstr "Přidat pracovní plochu"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
|
||||||
|
msgid "Show workspace previews in top bar"
|
||||||
|
msgstr "Zobrazit náhledy pracovních ploch v horním panelu"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/workspaceIndicator.js:430
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Ukazatel pracovní plochy"
|
||||||
|
|
||||||
|
#~ msgid "Applications"
|
||||||
|
#~ msgstr "Aplikace"
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
# Danish translation for gnome-shell-extensions.
|
# Danish translation for gnome-shell-extensions.
|
||||||
# Copyright (C) 2011-2017 gnome-shell-extensions's COPYRIGHT HOLDER
|
# Copyright (C) 2011-2017, 2024 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
#
|
#
|
||||||
# Kris Thomsen <mail@kristhomsen.dk>, 2011-2014.
|
# Kris Thomsen <mail@kristhomsen.dk>, 2011-2014.
|
||||||
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2015, 2017.
|
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2015, 2017, 2024.
|
||||||
# Joe Hansen <joedalton2@yahoo.dk>, 2017.
|
# Joe Hansen <joedalton2@yahoo.dk>, 2017.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -11,9 +11,9 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell-extensions master\n"
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
|
"POT-Creation-Date: 2024-04-29 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2022-02-27 13:21+0100\n"
|
"PO-Revision-Date: 2024-09-07 23:22+0200\n"
|
||||||
"Last-Translator: Alan Mortensen <alanmortensen.am@gmail.com>\n"
|
"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
|
||||||
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
|
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
|
||||||
"Language: da\n"
|
"Language: da\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -39,19 +39,19 @@ msgstr "GNOME Classic på Wayland"
|
|||||||
msgid "GNOME Classic on Xorg"
|
msgid "GNOME Classic on Xorg"
|
||||||
msgstr "GNOME Classic på Xorg"
|
msgstr "GNOME Classic på Xorg"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:112
|
#: extensions/apps-menu/extension.js:126
|
||||||
msgid "Favorites"
|
msgid "Favorites"
|
||||||
msgstr "Favoritter"
|
msgstr "Favoritter"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:366
|
#: extensions/apps-menu/extension.js:400
|
||||||
msgid "Applications"
|
msgid "Apps"
|
||||||
msgstr "Programmer"
|
msgstr "Programmer"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||||
msgid "Application and workspace list"
|
msgid "Application and workspace list"
|
||||||
msgstr "Liste over programmer og arbejdsområder"
|
msgstr "Liste over programmer og arbejdsområder"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"A list of strings, each containing an application id (desktop file name), "
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
"followed by a colon and the workspace number"
|
"followed by a colon and the workspace number"
|
||||||
@@ -59,34 +59,34 @@ msgstr ""
|
|||||||
"En liste over strenge, som hver indeholder et program-id "
|
"En liste over strenge, som hver indeholder et program-id "
|
||||||
"(skrivebordsfilnavn), efterfulgt af et kolon og arbejdsområdets nummer"
|
"(skrivebordsfilnavn), efterfulgt af et kolon og arbejdsområdets nummer"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:34
|
#: extensions/auto-move-windows/prefs.js:159
|
||||||
msgid "Workspace Rules"
|
msgid "Workspace Rules"
|
||||||
msgstr "Regler for arbejdsområde"
|
msgstr "Regler for arbejdsområde"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:236
|
#: extensions/auto-move-windows/prefs.js:314
|
||||||
msgid "Add Rule"
|
msgid "Add Rule"
|
||||||
msgstr "Tilføj regel"
|
msgstr "Tilføj regel"
|
||||||
|
|
||||||
#. TRANSLATORS: %s is the filesystem name
|
#. TRANSLATORS: %s is the filesystem name
|
||||||
#: extensions/drive-menu/extension.js:133
|
#: extensions/drive-menu/extension.js:123
|
||||||
#: extensions/places-menu/placeDisplay.js:233
|
#: extensions/places-menu/placeDisplay.js:218
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Ejecting drive “%s” failed:"
|
msgid "Ejecting drive “%s” failed:"
|
||||||
msgstr "Udskubning af drevet “%s” mislykkedes:"
|
msgstr "Udskubning af drevet “%s” mislykkedes:"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:149
|
#: extensions/drive-menu/extension.js:142
|
||||||
msgid "Removable devices"
|
msgid "Removable devices"
|
||||||
msgstr "Flytbare enheder"
|
msgstr "Flytbare enheder"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:171
|
#: extensions/drive-menu/extension.js:164
|
||||||
msgid "Open Files"
|
msgid "Open Files"
|
||||||
msgstr "Åbn filer"
|
msgstr "Åbn filer"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||||
msgid "Use more screen for windows"
|
msgid "Use more screen for windows"
|
||||||
msgstr "Brug mere skærmplads til vinduer"
|
msgstr "Brug mere skærmplads til vinduer"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Try to use more screen for placing window thumbnails by adapting to screen "
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
@@ -97,11 +97,11 @@ msgstr ""
|
|||||||
"yderligere for at reducere den omkransende boks.Denne indstilling gælder kun "
|
"yderligere for at reducere den omkransende boks.Denne indstilling gælder kun "
|
||||||
"med den naturlige placeringsstrategi."
|
"med den naturlige placeringsstrategi."
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||||
msgid "Place window captions on top"
|
msgid "Place window captions on top"
|
||||||
msgstr "Placér vinduestitler i toppen"
|
msgstr "Placér vinduestitler i toppen"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"If true, place window captions on top the respective thumbnail, overriding "
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
"shell default of placing it at the bottom. Changing this setting requires "
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
@@ -112,47 +112,119 @@ msgstr ""
|
|||||||
"Ændring af denne indstilling kræver at shell'en genstartes for at træde i "
|
"Ændring af denne indstilling kræver at shell'en genstartes for at træde i "
|
||||||
"kraft."
|
"kraft."
|
||||||
|
|
||||||
#: extensions/places-menu/extension.js:88
|
|
||||||
#: extensions/places-menu/extension.js:91
|
#: extensions/places-menu/extension.js:91
|
||||||
|
#: extensions/places-menu/extension.js:94
|
||||||
msgid "Places"
|
msgid "Places"
|
||||||
msgstr "Steder"
|
msgstr "Steder"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:46
|
#: extensions/places-menu/placeDisplay.js:60
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Kunne ikke åbne “%s”"
|
msgstr "Kunne ikke åbne “%s”"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:61
|
#: extensions/places-menu/placeDisplay.js:75
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to mount volume for “%s”"
|
msgid "Failed to mount volume for “%s”"
|
||||||
msgstr "Kunne ikke montere diskenhed for “%s”"
|
msgstr "Kunne ikke montere diskenhed for “%s”"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:148
|
#: extensions/places-menu/placeDisplay.js:135
|
||||||
#: extensions/places-menu/placeDisplay.js:171
|
#: extensions/places-menu/placeDisplay.js:158
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Computer"
|
msgstr "Computer"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:359
|
#: extensions/places-menu/placeDisplay.js:333
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Hjem"
|
msgstr "Hjem"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:404
|
#: extensions/places-menu/placeDisplay.js:378
|
||||||
msgid "Browse Network"
|
msgid "Browse Network"
|
||||||
msgstr "Gennemse netværk"
|
msgstr "Gennemse netværk"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||||
msgid "Cycle Screenshot Sizes"
|
msgid "Cycle Screenshot Sizes"
|
||||||
msgstr "Gennemgå størrelser af skærmbillede"
|
msgstr "Gennemgå størrelser af skærmbillede"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||||
msgid "Cycle Screenshot Sizes Backward"
|
msgid "Cycle Screenshot Sizes Backward"
|
||||||
msgstr "Gennemgå størrelser af skærmbillede baglæns"
|
msgstr "Gennemgå størrelser af skærmbillede baglæns"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
#: extensions/system-monitor/extension.js:135
|
||||||
|
msgid "CPU stats"
|
||||||
|
msgstr "CPU-statistik"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:159
|
||||||
|
msgid "Memory stats"
|
||||||
|
msgstr "Hukommelsesstatistik"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:177
|
||||||
|
msgid "Swap stats"
|
||||||
|
msgstr "Swapstatistik"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:336
|
||||||
|
msgid "Upload stats"
|
||||||
|
msgstr "Uploadstatistik"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:350
|
||||||
|
msgid "Download stats"
|
||||||
|
msgstr "Downloadstatistik"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:364
|
||||||
|
msgid "System stats"
|
||||||
|
msgstr "Systemstatistik"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:412
|
||||||
|
msgid "Show"
|
||||||
|
msgstr "Vis"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:414
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:416
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Hukommelse"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:418
|
||||||
|
msgid "Swap"
|
||||||
|
msgstr "Swap"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:420
|
||||||
|
msgid "Upload"
|
||||||
|
msgstr "Upload"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:422
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Download"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:427
|
||||||
|
msgid "Open System Monitor"
|
||||||
|
msgstr "Åbn Systemovervågning"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
|
||||||
|
msgid "Show CPU usage"
|
||||||
|
msgstr "Vis CPU-forbrug"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
|
||||||
|
msgid "Show memory usage"
|
||||||
|
msgstr "Vis hukommelsesforbrug"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
|
||||||
|
msgid "Show swap usage"
|
||||||
|
msgstr "Vis swapforbrug"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
|
||||||
|
msgid "Show upload"
|
||||||
|
msgstr "Vis upload"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
|
||||||
|
msgid "Show download"
|
||||||
|
msgstr "Vis download"
|
||||||
|
|
||||||
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
|
||||||
msgid "Theme name"
|
msgid "Theme name"
|
||||||
msgstr "Temanavn"
|
msgstr "Temanavn"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell"
|
msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
@@ -160,51 +232,51 @@ msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell"
|
|||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Luk"
|
msgstr "Luk"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:99
|
||||||
msgid "Unminimize"
|
msgid "Unminimize"
|
||||||
msgstr "Afminimér"
|
msgstr "Afminimér"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:99
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Minimér"
|
msgstr "Minimér"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:106
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Afmaksimér"
|
msgstr "Afmaksimér"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:106
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Maksimér"
|
msgstr "Maksimér"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:434
|
#: extensions/window-list/extension.js:471
|
||||||
msgid "Minimize all"
|
msgid "Minimize all"
|
||||||
msgstr "Minimér"
|
msgstr "Minimér"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:440
|
#: extensions/window-list/extension.js:477
|
||||||
msgid "Unminimize all"
|
msgid "Unminimize all"
|
||||||
msgstr "Afminimér alle"
|
msgstr "Afminimér alle"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:446
|
#: extensions/window-list/extension.js:483
|
||||||
msgid "Maximize all"
|
msgid "Maximize all"
|
||||||
msgstr "Maksimér alle"
|
msgstr "Maksimér alle"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:454
|
#: extensions/window-list/extension.js:491
|
||||||
msgid "Unmaximize all"
|
msgid "Unmaximize all"
|
||||||
msgstr "Afmaksimér alle"
|
msgstr "Afmaksimér alle"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:462
|
#: extensions/window-list/extension.js:499
|
||||||
msgid "Close all"
|
msgid "Close all"
|
||||||
msgstr "Luk alle"
|
msgstr "Luk alle"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:741
|
#: extensions/window-list/extension.js:778
|
||||||
msgid "Window List"
|
msgid "Window List"
|
||||||
msgstr "Vinduesliste"
|
msgstr "Vinduesliste"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||||
msgid "When to group windows"
|
msgid "When to group windows"
|
||||||
msgstr "Hvornår vinduer skal grupperes"
|
msgstr "Hvornår vinduer skal grupperes"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"Decides when to group windows from the same application on the window list. "
|
"Decides when to group windows from the same application on the window list. "
|
||||||
"Possible values are “never”, “auto” and “always”."
|
"Possible values are “never”, “auto” and “always”."
|
||||||
@@ -212,21 +284,21 @@ msgstr ""
|
|||||||
"Afgør hvornår vinduer fra samme program skal grupperes i vindueslisten. "
|
"Afgør hvornår vinduer fra samme program skal grupperes i vindueslisten. "
|
||||||
"Mulige værdier er “never” (aldrig), “auto” (automatisk) og “always” (altid)."
|
"Mulige værdier er “never” (aldrig), “auto” (automatisk) og “always” (altid)."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||||
#: extensions/window-list/prefs.js:86
|
#: extensions/window-list/prefs.js:79
|
||||||
msgid "Show windows from all workspaces"
|
msgid "Show windows from all workspaces"
|
||||||
msgstr "Vis vinduer fra alle arbejdsområder"
|
msgstr "Vis vinduer fra alle arbejdsområder"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||||
msgid "Whether to show windows from all workspaces or only the current one."
|
msgid "Whether to show windows from all workspaces or only the current one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Om der skal vises vinduer fra alle arbejdsområder eller kun det nuværende."
|
"Om der skal vises vinduer fra alle arbejdsområder eller kun det nuværende."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||||
msgid "Show the window list on all monitors"
|
msgid "Show the window list on all monitors"
|
||||||
msgstr "Vis vindueslisten på alle skærme"
|
msgstr "Vis vindueslisten på alle skærme"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to show the window list on all connected monitors or only on the "
|
"Whether to show the window list on all connected monitors or only on the "
|
||||||
"primary one."
|
"primary one."
|
||||||
@@ -234,44 +306,62 @@ msgstr ""
|
|||||||
"Om vindueslisten skal vise på alle tilsluttede skærme, eller kun på den "
|
"Om vindueslisten skal vise på alle tilsluttede skærme, eller kun på den "
|
||||||
"primære."
|
"primære."
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:39
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
|
||||||
|
msgid "Show workspace previews in window list"
|
||||||
|
msgstr "Forhåndsvis arbejdsområder i vinduesliste"
|
||||||
|
|
||||||
|
#: extensions/window-list/prefs.js:35
|
||||||
msgid "Window Grouping"
|
msgid "Window Grouping"
|
||||||
msgstr "Vinduesgruppering"
|
msgstr "Vinduesgruppering"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:63
|
#: extensions/window-list/prefs.js:40
|
||||||
msgid "Never group windows"
|
msgid "Never group windows"
|
||||||
msgstr "Gruppér aldrig vinduer"
|
msgstr "Gruppér aldrig vinduer"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:64
|
#: extensions/window-list/prefs.js:41
|
||||||
msgid "Group windows when space is limited"
|
msgid "Group windows when space is limited"
|
||||||
msgstr "Gruppér vinduer når pladsen er begrænset"
|
msgstr "Gruppér vinduer når pladsen er begrænset"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:65
|
#: extensions/window-list/prefs.js:42
|
||||||
msgid "Always group windows"
|
msgid "Always group windows"
|
||||||
msgstr "Gruppér altid vinduer"
|
msgstr "Gruppér altid vinduer"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:81
|
#: extensions/window-list/prefs.js:66
|
||||||
msgid "Show on all monitors"
|
msgid "Show on all monitors"
|
||||||
msgstr "Vis på alle skærme"
|
msgstr "Vis på alle skærme"
|
||||||
|
|
||||||
#: extensions/window-list/workspaceIndicator.js:249
|
#: extensions/window-list/prefs.js:92
|
||||||
#: extensions/workspace-indicator/extension.js:254
|
msgid "Show workspace previews"
|
||||||
msgid "Workspace Indicator"
|
msgstr "Forhåndsvis arbejdsområder"
|
||||||
msgstr "Arbejdsområdeindikator"
|
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:33
|
#: extensions/workspace-indicator/prefs.js:30
|
||||||
msgid "Workspace Names"
|
msgid "Show Previews In Top Bar"
|
||||||
msgstr "Navne på arbejdsområder"
|
msgstr "Inkludér forhåndsvisninger i topbjælken"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:66
|
#: extensions/workspace-indicator/prefs.js:88
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Workspace %d"
|
msgid "Workspace %d"
|
||||||
msgstr "Arbejdsområde %d"
|
msgstr "Arbejdsområde %d"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:207
|
#: extensions/workspace-indicator/prefs.js:155
|
||||||
|
msgid "Workspace Names"
|
||||||
|
msgstr "Navne på arbejdsområder"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/prefs.js:281
|
||||||
msgid "Add Workspace"
|
msgid "Add Workspace"
|
||||||
msgstr "Tilføj arbejdsområde"
|
msgstr "Tilføj arbejdsområde"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
|
||||||
|
msgid "Show workspace previews in top bar"
|
||||||
|
msgstr "Inkludér forhåndsvisninger af arbejdsområder i topbjælken"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/workspaceIndicator.js:430
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Arbejdsområdeindikator"
|
||||||
|
|
||||||
|
#~ msgid "Applications"
|
||||||
|
#~ msgstr "Programmer"
|
||||||
|
|
||||||
#~ msgid "Application"
|
#~ msgid "Application"
|
||||||
#~ msgstr "Program"
|
#~ msgstr "Program"
|
||||||
|
|
||||||
|
|||||||
@@ -8,22 +8,24 @@
|
|||||||
# Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2017.
|
# Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2017.
|
||||||
# Tim Sabsch <tim@sabsch.com>, 2019-2020.
|
# Tim Sabsch <tim@sabsch.com>, 2019-2020.
|
||||||
# Philipp Kiemle <philipp.kiemle@gmail.com>, 2022.
|
# Philipp Kiemle <philipp.kiemle@gmail.com>, 2022.
|
||||||
|
# Gabriel Brand <gabr.brand@gmail.com>, 2024.
|
||||||
|
# Jürgen Benvenuti <gastornis@posteo.org>, 2024.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell-extensions master\n"
|
"Project-Id-Version: gnome-shell-extensions main\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2022-03-07 15:35+0000\n"
|
"POT-Creation-Date: 2024-04-29 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2022-03-10 22:26+0100\n"
|
"PO-Revision-Date: 2024-08-29 10:01+0200\n"
|
||||||
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
|
"Last-Translator: Jürgen Benvenuti <gastornis@posteo.org>\n"
|
||||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 3.0.1\n"
|
"X-Generator: Poedit 3.4.4\n"
|
||||||
|
|
||||||
#: data/gnome-classic.desktop.in:3
|
#: data/gnome-classic.desktop.in:3
|
||||||
msgid "GNOME Classic"
|
msgid "GNOME Classic"
|
||||||
@@ -42,19 +44,19 @@ msgstr "GNOME Classic unter Wayland"
|
|||||||
msgid "GNOME Classic on Xorg"
|
msgid "GNOME Classic on Xorg"
|
||||||
msgstr "GNOME Classic unter Xorg"
|
msgstr "GNOME Classic unter Xorg"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:118
|
#: extensions/apps-menu/extension.js:126
|
||||||
msgid "Favorites"
|
msgid "Favorites"
|
||||||
msgstr "Favoriten"
|
msgstr "Favoriten"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:379
|
#: extensions/apps-menu/extension.js:400
|
||||||
msgid "Applications"
|
msgid "Apps"
|
||||||
msgstr "Anwendungen"
|
msgstr "Anwendungen"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||||
msgid "Application and workspace list"
|
msgid "Application and workspace list"
|
||||||
msgstr "Anwendungs- und Arbeitsflächenliste"
|
msgstr "Anwendungs- und Arbeitsflächenliste"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"A list of strings, each containing an application id (desktop file name), "
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
"followed by a colon and the workspace number"
|
"followed by a colon and the workspace number"
|
||||||
@@ -63,34 +65,34 @@ msgstr ""
|
|||||||
"Datei) enthält, gefolgt von einem Doppelpunkt und der Nummer der "
|
"Datei) enthält, gefolgt von einem Doppelpunkt und der Nummer der "
|
||||||
"Arbeitsfläche"
|
"Arbeitsfläche"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:152
|
#: extensions/auto-move-windows/prefs.js:159
|
||||||
msgid "Workspace Rules"
|
msgid "Workspace Rules"
|
||||||
msgstr "Arbeitsfläche-Regeln"
|
msgstr "Arbeitsfläche-Regeln"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:306
|
#: extensions/auto-move-windows/prefs.js:314
|
||||||
msgid "Add Rule"
|
msgid "Add Rule"
|
||||||
msgstr "Regel hinzufügen"
|
msgstr "Regel hinzufügen"
|
||||||
|
|
||||||
#. TRANSLATORS: %s is the filesystem name
|
#. TRANSLATORS: %s is the filesystem name
|
||||||
#: extensions/drive-menu/extension.js:126
|
#: extensions/drive-menu/extension.js:123
|
||||||
#: extensions/places-menu/placeDisplay.js:210
|
#: extensions/places-menu/placeDisplay.js:218
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Ejecting drive “%s” failed:"
|
msgid "Ejecting drive “%s” failed:"
|
||||||
msgstr "Auswerfen von Laufwerk »%s« schlug fehl:"
|
msgstr "Auswerfen von Laufwerk »%s« schlug fehl:"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:145
|
#: extensions/drive-menu/extension.js:142
|
||||||
msgid "Removable devices"
|
msgid "Removable devices"
|
||||||
msgstr "Wechseldatenträger"
|
msgstr "Wechseldatenträger"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:167
|
#: extensions/drive-menu/extension.js:164
|
||||||
msgid "Open Files"
|
msgid "Open Files"
|
||||||
msgstr "Dateien öffnen"
|
msgstr "Dateien öffnen"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||||
msgid "Use more screen for windows"
|
msgid "Use more screen for windows"
|
||||||
msgstr "Mehr Bildschirmbereich für Fenster verwenden"
|
msgstr "Mehr Bildschirmbereich für Fenster verwenden"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Try to use more screen for placing window thumbnails by adapting to screen "
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
@@ -102,11 +104,11 @@ msgstr ""
|
|||||||
"verkleinern. Diese Einstellung betrifft nur den natürlichen "
|
"verkleinern. Diese Einstellung betrifft nur den natürlichen "
|
||||||
"Platzierungsalgorithmus."
|
"Platzierungsalgorithmus."
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||||
msgid "Place window captions on top"
|
msgid "Place window captions on top"
|
||||||
msgstr "Fensterbeschriftungen oben platzieren"
|
msgstr "Fensterbeschriftungen oben platzieren"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"If true, place window captions on top the respective thumbnail, overriding "
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
"shell default of placing it at the bottom. Changing this setting requires "
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
@@ -116,47 +118,119 @@ msgstr ""
|
|||||||
"Vorschaubild platziert und damit die Voreinstellung der Shell übergangen. "
|
"Vorschaubild platziert und damit die Voreinstellung der Shell übergangen. "
|
||||||
"Eine Änderungseinstellung tritt erst mit einem Neustart der Shell in Kraft."
|
"Eine Änderungseinstellung tritt erst mit einem Neustart der Shell in Kraft."
|
||||||
|
|
||||||
|
#: extensions/places-menu/extension.js:91
|
||||||
#: extensions/places-menu/extension.js:94
|
#: extensions/places-menu/extension.js:94
|
||||||
#: extensions/places-menu/extension.js:97
|
|
||||||
msgid "Places"
|
msgid "Places"
|
||||||
msgstr "Orte"
|
msgstr "Orte"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:49
|
#: extensions/places-menu/placeDisplay.js:60
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Starten von »%s« fehlgeschlagen"
|
msgstr "Starten von »%s« fehlgeschlagen"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:64
|
#: extensions/places-menu/placeDisplay.js:75
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to mount volume for “%s”"
|
msgid "Failed to mount volume for “%s”"
|
||||||
msgstr "Datenträger für »%s« konnte nicht eingebunden werden"
|
msgstr "Datenträger für »%s« konnte nicht eingebunden werden"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:125
|
#: extensions/places-menu/placeDisplay.js:135
|
||||||
#: extensions/places-menu/placeDisplay.js:148
|
#: extensions/places-menu/placeDisplay.js:158
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Rechner"
|
msgstr "Rechner"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:336
|
#: extensions/places-menu/placeDisplay.js:333
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Persönlicher Ordner"
|
msgstr "Persönlicher Ordner"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:381
|
#: extensions/places-menu/placeDisplay.js:378
|
||||||
msgid "Browse Network"
|
msgid "Browse Network"
|
||||||
msgstr "Netzwerk durchsuchen"
|
msgstr "Netzwerk durchsuchen"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||||
msgid "Cycle Screenshot Sizes"
|
msgid "Cycle Screenshot Sizes"
|
||||||
msgstr "Bildschirmfotogrößen nacheinander anzeigen"
|
msgstr "Bildschirmfotogrößen nacheinander anzeigen"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||||
msgid "Cycle Screenshot Sizes Backward"
|
msgid "Cycle Screenshot Sizes Backward"
|
||||||
msgstr "Bildschirmfotogrößen in umgekehrter Reihenfolge anzeigen"
|
msgstr "Bildschirmfotogrößen in umgekehrter Reihenfolge anzeigen"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
#: extensions/system-monitor/extension.js:135
|
||||||
|
msgid "CPU stats"
|
||||||
|
msgstr "CPU-Statistiken"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:159
|
||||||
|
msgid "Memory stats"
|
||||||
|
msgstr "Speicherstatistiken"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:177
|
||||||
|
msgid "Swap stats"
|
||||||
|
msgstr "Auslagerungsspeicherstatistiken"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:336
|
||||||
|
msgid "Upload stats"
|
||||||
|
msgstr "Upload-Statistiken"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:350
|
||||||
|
msgid "Download stats"
|
||||||
|
msgstr "Download-Statistiken"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:364
|
||||||
|
msgid "System stats"
|
||||||
|
msgstr "Systemstatistiken"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:412
|
||||||
|
msgid "Show"
|
||||||
|
msgstr "Anzeigen"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:414
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:416
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Speicher"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:418
|
||||||
|
msgid "Swap"
|
||||||
|
msgstr "Auslagerungsspeicher"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:420
|
||||||
|
msgid "Upload"
|
||||||
|
msgstr "Upload"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:422
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Download"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/extension.js:427
|
||||||
|
msgid "Open System Monitor"
|
||||||
|
msgstr "Systemüberwachung öffnen"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
|
||||||
|
msgid "Show CPU usage"
|
||||||
|
msgstr "CPU-Nutzung anzeigen"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
|
||||||
|
msgid "Show memory usage"
|
||||||
|
msgstr "Speichernutzung anzeigen"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
|
||||||
|
msgid "Show swap usage"
|
||||||
|
msgstr "Auslagerungsspeichernutzung anzeigen"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
|
||||||
|
msgid "Show upload"
|
||||||
|
msgstr "Upload anzeigen"
|
||||||
|
|
||||||
|
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
|
||||||
|
msgid "Show download"
|
||||||
|
msgstr "Download anzeigen"
|
||||||
|
|
||||||
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
|
||||||
msgid "Theme name"
|
msgid "Theme name"
|
||||||
msgstr "Themenname"
|
msgstr "Themenname"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Der Name des Themas, welches aus ~/.themes/name/gnome-shell geladen werden "
|
"Der Name des Themas, welches aus ~/.themes/name/gnome-shell geladen werden "
|
||||||
@@ -166,51 +240,51 @@ msgstr ""
|
|||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Schließen"
|
msgstr "Schließen"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:99
|
||||||
msgid "Unminimize"
|
msgid "Unminimize"
|
||||||
msgstr "Minimieren rückgängig"
|
msgstr "Minimieren rückgängig"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:92
|
#: extensions/window-list/extension.js:99
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Minimieren"
|
msgstr "Minimieren"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:106
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Maximieren rückgängig"
|
msgstr "Maximieren rückgängig"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:99
|
#: extensions/window-list/extension.js:106
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Maximieren"
|
msgstr "Maximieren"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:441
|
#: extensions/window-list/extension.js:471
|
||||||
msgid "Minimize all"
|
msgid "Minimize all"
|
||||||
msgstr "Alle minimieren"
|
msgstr "Alle minimieren"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:447
|
#: extensions/window-list/extension.js:477
|
||||||
msgid "Unminimize all"
|
msgid "Unminimize all"
|
||||||
msgstr "Alle minimieren rückgängig"
|
msgstr "Alle minimieren rückgängig"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:453
|
#: extensions/window-list/extension.js:483
|
||||||
msgid "Maximize all"
|
msgid "Maximize all"
|
||||||
msgstr "Alle maximieren"
|
msgstr "Alle maximieren"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:461
|
#: extensions/window-list/extension.js:491
|
||||||
msgid "Unmaximize all"
|
msgid "Unmaximize all"
|
||||||
msgstr "Alle maximieren rückgängig"
|
msgstr "Alle maximieren rückgängig"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:469
|
#: extensions/window-list/extension.js:499
|
||||||
msgid "Close all"
|
msgid "Close all"
|
||||||
msgstr "Alle schließen"
|
msgstr "Alle schließen"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:753
|
#: extensions/window-list/extension.js:778
|
||||||
msgid "Window List"
|
msgid "Window List"
|
||||||
msgstr "Fensterliste"
|
msgstr "Fensterliste"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||||
msgid "When to group windows"
|
msgid "When to group windows"
|
||||||
msgstr "Legt fest, wann Fenster gruppiert werden"
|
msgstr "Legt fest, wann Fenster gruppiert werden"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"Decides when to group windows from the same application on the window list. "
|
"Decides when to group windows from the same application on the window list. "
|
||||||
"Possible values are “never”, “auto” and “always”."
|
"Possible values are “never”, “auto” and “always”."
|
||||||
@@ -219,22 +293,22 @@ msgstr ""
|
|||||||
"werden sollen. Mögliche Werte sind »never« (nie), »auto« (automatisch) und "
|
"werden sollen. Mögliche Werte sind »never« (nie), »auto« (automatisch) und "
|
||||||
"»always« (immer)."
|
"»always« (immer)."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||||
#: extensions/window-list/prefs.js:79
|
#: extensions/window-list/prefs.js:79
|
||||||
msgid "Show windows from all workspaces"
|
msgid "Show windows from all workspaces"
|
||||||
msgstr "Fenster von allen Arbeitsflächen anzeigen"
|
msgstr "Fenster von allen Arbeitsflächen anzeigen"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||||
msgid "Whether to show windows from all workspaces or only the current one."
|
msgid "Whether to show windows from all workspaces or only the current one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Legt fest, ob Fenster von allen oder nur der aktuellen Arbeitsflächen "
|
"Legt fest, ob Fenster von allen oder nur der aktuellen Arbeitsflächen "
|
||||||
"angezeigt werden."
|
"angezeigt werden."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||||
msgid "Show the window list on all monitors"
|
msgid "Show the window list on all monitors"
|
||||||
msgstr "Die Fensterliste auf allen Bildschirmen anzeigen"
|
msgstr "Die Fensterliste auf allen Bildschirmen anzeigen"
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to show the window list on all connected monitors or only on the "
|
"Whether to show the window list on all connected monitors or only on the "
|
||||||
"primary one."
|
"primary one."
|
||||||
@@ -242,6 +316,10 @@ msgstr ""
|
|||||||
"Legt fest, ob die Fensterliste auf allen angeschlossenen Bildschirmen "
|
"Legt fest, ob die Fensterliste auf allen angeschlossenen Bildschirmen "
|
||||||
"angezeigt wird oder nur auf dem Primären."
|
"angezeigt wird oder nur auf dem Primären."
|
||||||
|
|
||||||
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
|
||||||
|
msgid "Show workspace previews in window list"
|
||||||
|
msgstr "Arbeitsflächenvorschauen in der Fensterliste anzeigen"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:35
|
#: extensions/window-list/prefs.js:35
|
||||||
msgid "Window Grouping"
|
msgid "Window Grouping"
|
||||||
msgstr "Fenstergruppierung"
|
msgstr "Fenstergruppierung"
|
||||||
@@ -262,105 +340,34 @@ msgstr "Fenster immer gruppieren"
|
|||||||
msgid "Show on all monitors"
|
msgid "Show on all monitors"
|
||||||
msgstr "Auf allen Bildschirmen anzeigen"
|
msgstr "Auf allen Bildschirmen anzeigen"
|
||||||
|
|
||||||
#: extensions/window-list/workspaceIndicator.js:261
|
#: extensions/window-list/prefs.js:92
|
||||||
#: extensions/workspace-indicator/extension.js:266
|
msgid "Show workspace previews"
|
||||||
msgid "Workspace Indicator"
|
msgstr "Arbeitsflächenvorschauen anzeigen"
|
||||||
msgstr "Arbeitsflächenindikator"
|
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:62
|
#: extensions/workspace-indicator/prefs.js:30
|
||||||
|
msgid "Show Previews In Top Bar"
|
||||||
|
msgstr "Vorschauen in der oberen Leiste anzeigen"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/prefs.js:88
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Workspace %d"
|
msgid "Workspace %d"
|
||||||
msgstr "Arbeitsfläche %d"
|
msgstr "Arbeitsfläche %d"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:129
|
#: extensions/workspace-indicator/prefs.js:155
|
||||||
msgid "Workspace Names"
|
msgid "Workspace Names"
|
||||||
msgstr "Namen der Arbeitsflächen"
|
msgstr "Namen der Arbeitsflächen"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:255
|
#: extensions/workspace-indicator/prefs.js:281
|
||||||
msgid "Add Workspace"
|
msgid "Add Workspace"
|
||||||
msgstr "Arbeitsfläche hinzufügen"
|
msgstr "Arbeitsfläche hinzufügen"
|
||||||
|
|
||||||
#~ msgid "Application"
|
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
|
||||||
#~ msgstr "Anwendung"
|
msgid "Show workspace previews in top bar"
|
||||||
|
msgstr "Arbeitsflächenvorschauen in der oberen Leiste anzeigen"
|
||||||
|
|
||||||
#~ msgid "Create new matching rule"
|
#: extensions/workspace-indicator/workspaceIndicator.js:430
|
||||||
#~ msgstr "Neue Übereinstimmungsregel erstellen"
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Arbeitsflächenindikator"
|
||||||
|
|
||||||
#~ msgid "Add"
|
#~ msgid "Applications"
|
||||||
#~ msgstr "Hinzufügen"
|
#~ msgstr "Anwendungen"
|
||||||
|
|
||||||
#~ msgid "Name"
|
|
||||||
#~ msgstr "Name"
|
|
||||||
|
|
||||||
#~ msgid "Attach modal dialog to the parent window"
|
|
||||||
#~ msgstr "Einen modalen Dialog an das übergeordnete Fenster anhängen"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "Dieser Schlüssel überschreibt den Schlüssel in »org.gnome.mutter«, wenn "
|
|
||||||
#~ "die GNOME-Shell ausgeführt wird."
|
|
||||||
|
|
||||||
#~ msgid "Arrangement of buttons on the titlebar"
|
|
||||||
#~ msgstr "Anordnung von Knöpfen auf der Titelleiste"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
|
|
||||||
#~ "running GNOME Shell."
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "Dieser Schlüssel überschreibt den Schlüssel in »org.gnome.desktop.wm."
|
|
||||||
#~ "preferences«, wenn die GNOME-Shell ausgeführt wird."
|
|
||||||
|
|
||||||
# identisch zum Schüssel in »gnome-shell«
|
|
||||||
#~ msgid "Enable edge tiling when dropping windows on screen edges"
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "Größenanpassung aktivieren, wenn ein Fenster an die Bildschirmkante "
|
|
||||||
#~ "verschoben wird"
|
|
||||||
|
|
||||||
#~ msgid "Workspaces only on primary monitor"
|
|
||||||
#~ msgstr "Arbeitsflächen nur auf dem Primärmonitor"
|
|
||||||
|
|
||||||
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "Fokuswechsel im Mausmodus verzögern, bis sich der Zeiger nicht mehr "
|
|
||||||
#~ "bewegt."
|
|
||||||
|
|
||||||
#~ msgid "Thumbnail only"
|
|
||||||
#~ msgstr "Nur Vorschaubild"
|
|
||||||
|
|
||||||
#~ msgid "Application icon only"
|
|
||||||
#~ msgstr "Nur Anwendungssymbol"
|
|
||||||
|
|
||||||
#~ msgid "Thumbnail and application icon"
|
|
||||||
#~ msgstr "Vorschaubild und Anwendungssymbol"
|
|
||||||
|
|
||||||
#~ msgid "Present windows as"
|
|
||||||
#~ msgstr "Fenster darstellen als"
|
|
||||||
|
|
||||||
#~ msgid "Activities Overview"
|
|
||||||
#~ msgstr "Aktivitäten-Übersicht"
|
|
||||||
|
|
||||||
#~ msgid "Hello, world!"
|
|
||||||
#~ msgstr "Hallo Welt!"
|
|
||||||
|
|
||||||
#~ msgid "Alternative greeting text."
|
|
||||||
#~ msgstr "Alternativer Begrüßungstext."
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "If not empty, it contains the text that will be shown when clicking on "
|
|
||||||
#~ "the panel."
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "Falls nicht leer, ist dies der Text, der beim Anklicken des Panels "
|
|
||||||
#~ "angezeigt wird."
|
|
||||||
|
|
||||||
#~ msgid "Message"
|
|
||||||
#~ msgstr "Nachricht"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "Example aims to show how to build well behaved extensions for the Shell "
|
|
||||||
#~ "and as such it has little functionality on its own.\n"
|
|
||||||
#~ "Nevertheless it’s possible to customize the greeting message."
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "Das Beispiel soll zeigen, wie sich korrekt verhaltende Erweiterungen für "
|
|
||||||
#~ "die Shell erstellt werden. Es enthält grundlegende Funktionalität.\n"
|
|
||||||
#~ "Es ist möglich, die Begrüßungsnachricht zu ändern."
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user