mirror of
https://cagebreak.project-repo.co/cagebreak.git
synced 2026-08-09 15:19:11 +02:00
Compare commits
819 commits
master
...
feature/pe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7bdb04df99 | ||
|
|
5807ece09c | ||
|
|
f9188a2c8b | ||
|
|
82cf042819 | ||
|
|
65b6e9e427 | ||
|
|
6b89645161 | ||
|
|
f6025b4f19 | ||
|
|
407275fa67 | ||
|
|
d44df4e265 | ||
|
|
a4bea6fc8b | ||
|
|
cc97840a03 | ||
|
|
b582884148 | ||
|
|
1099a31575 | ||
|
|
53331b7337 | ||
|
|
26a59e4055 | ||
|
|
b6a96b39e0 | ||
|
|
ac06ed23df | ||
|
|
feb76646fc | ||
|
|
0d51301f76 | ||
|
|
309f95cdb3 | ||
|
|
00610801ba | ||
|
|
96501911e4 |
||
|
|
a581453272 | ||
|
|
9c55eff87e | ||
|
|
33092b1099 | ||
|
|
39fafe0407 | ||
|
|
2e73eb4680 | ||
|
|
d796b3c094 | ||
|
|
1d88189511 | ||
|
|
42c9391a0d | ||
|
|
374813681c | ||
|
|
a3718221ef | ||
|
|
b10dad8ac7 | ||
|
|
e1520ec46d | ||
|
|
498d69b4b6 | ||
|
|
6199ed0a9a | ||
|
|
0209c3ae1a | ||
|
|
b8a70d662a | ||
|
|
679c5562af | ||
|
|
9d707e8154 | ||
|
|
d68c97cdc0 | ||
|
|
a87ecefab0 | ||
|
|
24cebe6336 | ||
|
|
ef898b0ce4 | ||
|
|
58890fd6e0 | ||
|
|
2ffb410681 | ||
|
|
e921a7da43 | ||
|
|
747a473538 | ||
|
|
8f1ef0383b | ||
|
|
6f5eb8f73f | ||
|
|
004935ae06 | ||
|
|
d65b1f6d95 | ||
|
|
8850488f0e |
||
|
|
000e6f1410 | ||
|
|
750bf48cda | ||
|
|
c2e95272ea | ||
|
|
66a4f9f00a | ||
|
|
591059faa1 | ||
|
|
f0ebae61a6 | ||
|
|
053e0c9a50 | ||
|
|
def3d3a118 | ||
|
|
1a1fa3c7f9 | ||
|
|
1b25c72787 | ||
|
|
f5060e5870 | ||
|
|
4947fe3142 | ||
|
|
afd99dfaa0 | ||
|
|
859fcb2efc | ||
|
|
75aea2cee2 | ||
|
|
3cfb18f481 | ||
|
|
3b22453cca | ||
|
|
de0f7a091b | ||
|
|
22554f128f | ||
|
|
bb7c7e3ca1 | ||
|
|
58b91b7f42 | ||
|
|
d39dae68b0 | ||
|
|
d6885cec30 | ||
|
|
9f022a3c77 | ||
|
|
f4c2f4e810 | ||
|
|
0df01ea8d0 | ||
|
|
03e3b1cab8 | ||
|
|
3bcaa8122d | ||
|
|
562685feac | ||
|
|
3e03721256 | ||
|
|
a3a7e2c1cc | ||
|
|
4be769b004 | ||
|
|
47e9f28019 | ||
|
|
47a2415022 | ||
|
|
8abd46569a | ||
|
|
d30f590569 | ||
|
|
6ee279c061 | ||
|
|
8af1286c57 | ||
|
|
b732b92cea | ||
|
|
fb736d7986 | ||
|
|
f99c39516d | ||
|
|
77e2b392ed | ||
|
|
4f38f0f1e1 | ||
|
|
e130498ecd | ||
|
|
333c1feb9e | ||
|
|
879f01da89 | ||
|
|
b2e8bc7f5a | ||
|
|
9123464c3e | ||
|
|
3e895dfa41 | ||
|
|
0fce2a807f | ||
|
|
a76f0d6d55 | ||
|
|
d00de8fb1e | ||
|
|
9c2aa86182 | ||
|
|
8eb0dcdd48 | ||
|
|
89d9dae4ca | ||
|
|
f8273dec9f | ||
|
|
f8df676572 | ||
|
|
a5e10f8c6f | ||
|
|
89dbf74e70 | ||
|
|
b64c38a1b9 | ||
|
|
336ed71500 | ||
|
|
604bcff8ab | ||
|
|
b9aa898c11 | ||
|
|
88378f38ce | ||
|
|
b59be56e36 | ||
|
|
bf52c641f3 | ||
|
|
299eeb10d6 | ||
|
|
94773ebdeb | ||
|
|
aeec55f30d | ||
|
|
0c0e9aa083 | ||
|
|
e469916766 | ||
|
|
e433bead8b | ||
|
|
8f13be1f7c | ||
|
|
4c0f4f7d7a | ||
|
|
270405cb3c | ||
|
|
699974e910 | ||
|
|
9f5a029156 | ||
|
|
25d6610038 | ||
|
|
d6fb8d19f3 | ||
|
|
a7f1e3fa36 | ||
|
|
441cee33c7 | ||
|
|
480298d96b | ||
|
|
e852d3487a | ||
|
|
37beab8994 | ||
|
|
09c75e5a15 | ||
|
|
5856b3c9c5 | ||
|
|
8fbcba1c38 | ||
|
|
358f759166 | ||
|
|
78212cc830 | ||
|
|
1889c60484 | ||
|
|
439385750d | ||
|
|
d209a7801f | ||
|
|
ceb61e6492 | ||
|
|
67ad848002 | ||
|
|
89a4c5d609 | ||
|
|
1a8912c9c2 | ||
|
|
401733d092 | ||
|
|
c1d0902a6d | ||
|
|
628dbc1314 | ||
|
|
a222a5a60f | ||
|
|
d9f61d86fb | ||
|
|
f0a31d3156 | ||
|
|
e7c9cd0471 | ||
|
|
567f12c29f | ||
|
|
1bcfce8d4f | ||
|
|
eaaef616d6 | ||
|
|
ba590d7d89 | ||
|
|
c23c899515 | ||
|
|
defaaea9d1 | ||
|
|
0ee4e286b9 | ||
|
|
2dc27c4b21 | ||
|
|
73fcbbf142 | ||
|
|
15590ab39a | ||
|
|
0ccbd554d3 | ||
|
|
b32659963c | ||
|
|
d7f58ce07f | ||
|
|
d6c07d1443 | ||
|
|
b63fa48f30 | ||
|
|
7102d3ee96 | ||
|
|
a9d5db0254 | ||
|
|
e3f637b173 | ||
|
|
fc10010021 | ||
|
|
a5749888e0 | ||
|
|
b291f59d54 | ||
|
|
9ad7c921d6 |
||
|
|
39b45be3df | ||
|
|
3d9f8d596f | ||
|
|
7abfd5b0b3 | ||
|
|
66ef231d58 | ||
|
|
b9dd21c0b4 | ||
|
|
1796c38b03 | ||
|
|
1990b203af | ||
|
|
87e50fc63e | ||
|
|
65b237536a | ||
|
|
89c92c5166 | ||
|
|
48f3a749aa | ||
|
|
3b10ac8250 | ||
|
|
c068ae57e8 | ||
|
|
0f7187b3f5 | ||
|
|
9a49821d25 | ||
|
|
d7f3c81f50 | ||
|
|
ffe580fb8e | ||
|
|
4e4d51178c | ||
|
|
7c7413b410 | ||
|
|
eede8b79c4 | ||
|
|
e46a32ab43 | ||
|
|
8660346f76 | ||
|
|
d017f53a25 | ||
|
|
fc20ab4aed | ||
|
|
9e5c1814be | ||
|
|
c07a734262 | ||
|
|
a6fdd0a27b | ||
|
|
b3e238e442 | ||
|
|
226d471794 | ||
|
|
d7a21aacb1 | ||
|
|
57ee9a06b6 | ||
|
|
7002b00b28 | ||
|
|
74bc47d3a5 | ||
|
|
6ee98a32c7 | ||
|
|
4e1c085568 | ||
|
|
2baa1f614e | ||
|
|
d99ae42734 | ||
|
|
7c673ae20e | ||
|
|
1813245e21 | ||
|
|
3cbf59a348 | ||
|
|
40c73b8f41 | ||
|
|
9f4be786a7 | ||
|
|
8e97b7c697 | ||
|
|
0de9c50a70 | ||
|
|
432291f7e2 | ||
|
|
0772817055 | ||
|
|
3773a5f167 | ||
|
|
02b73fb2b2 | ||
|
|
9d1cafa2f6 | ||
|
|
4339bc01db | ||
|
|
70664c428d | ||
|
|
afe4a8385b | ||
|
|
3cdc6ec369 | ||
|
|
450d812855 | ||
|
|
41a6ee2fc1 | ||
|
|
6b480ebf07 | ||
|
|
4853f24390 | ||
|
|
cf53f8a970 | ||
|
|
424266ec03 | ||
|
|
fbd33e8fa6 | ||
|
|
5b2a9e84ce | ||
|
|
989f3bb35a | ||
|
|
a352dd13a7 | ||
|
|
d5774d321d | ||
|
|
f640d75ba5 | ||
|
|
6572260432 | ||
|
|
c2ea3a5133 | ||
|
|
22eb4853c2 | ||
|
|
c806e4f0fe | ||
|
|
e644c7f8b7 | ||
|
|
e8a868e7f3 | ||
|
|
b809804657 | ||
|
|
41af11ecbb | ||
|
|
7162b62b98 | ||
|
|
9fdbc769b5 | ||
|
|
8f811e9809 | ||
|
|
468d7df9b9 | ||
|
|
026768ef3c | ||
|
|
80073faac8 | ||
|
|
25a14182e6 | ||
|
|
78b287153c | ||
|
|
9b712e27ff | ||
|
|
8ab41ce342 | ||
|
|
7da953ca20 | ||
|
|
8d78a17320 | ||
|
|
67ce6f1c4c | ||
|
|
0c335e84d3 | ||
|
|
7e6fb865e7 | ||
|
|
134ba83f00 | ||
|
|
7555b379e3 | ||
|
|
22068b3bbf | ||
|
|
18e6569712 | ||
|
|
46671bb8fa | ||
|
|
3a66943513 | ||
|
|
c83aed6728 | ||
|
|
e1c89b311b | ||
|
|
646eb934d3 | ||
|
|
50bef0e8f1 | ||
|
|
8e735264d1 | ||
|
|
dce1f9ee8d | ||
|
|
f7d9e69d31 | ||
|
|
4d5acdb4a6 | ||
|
|
85c8597224 | ||
|
|
11299eb8f0 | ||
|
|
46f921f636 | ||
|
|
f2ebea72de | ||
|
|
ebbc3f2431 | ||
|
|
d66b2ee6ab | ||
|
|
29011ac792 | ||
|
|
fef49429f5 | ||
|
|
c78607a4fd | ||
|
|
1ff7d3f60a | ||
|
|
806c370987 | ||
|
|
8a645a0dc3 | ||
|
|
52195268e6 | ||
|
|
1ab70173b0 | ||
|
|
379c41d8e7 | ||
|
|
e02ab558ec | ||
|
|
be38bcf232 | ||
|
|
9dd07b1caf | ||
|
|
1fc026a6f3 | ||
|
|
b9fe176f3c | ||
|
|
b16a5d64c4 | ||
|
|
d586fba128 | ||
|
|
494fd6444b | ||
|
|
73e0a421d2 | ||
|
|
32095b4253 | ||
|
|
39505dc8b2 | ||
|
|
ed575c36ab | ||
|
|
baeb39579b | ||
|
|
ee71d0bde9 | ||
|
|
cce8121595 | ||
|
|
9a60bef105 | ||
|
|
559009f780 | ||
|
|
1ac785b781 | ||
|
|
29943b50e6 |
||
|
|
4077064bc8 | ||
|
|
44f9ce3502 | ||
|
|
8e831fe878 | ||
|
|
1c4b72f97e | ||
|
|
0514c521c2 | ||
|
|
6c9e309c16 | ||
|
|
ee81b89467 | ||
|
|
aa73eb44ae | ||
|
|
0744d3a19a | ||
|
|
34d1e764f1 | ||
|
|
c8656d2744 | ||
|
|
e2b790d571 | ||
|
|
10f842a8ee | ||
|
|
f9cd517bfe | ||
|
|
6f3952e883 | ||
|
|
9ef5922d4c | ||
|
|
7699666076 | ||
|
|
b0ea3c5e5b | ||
|
|
d99ff361b1 | ||
|
|
fb01ae953a | ||
|
|
68a74115ed | ||
|
|
70f0ed07cd | ||
|
|
23e0accf9a | ||
|
|
211e65e353 | ||
|
|
b9a284730b | ||
|
|
cfa83a38d1 | ||
|
|
aa3c503ac2 | ||
|
|
afaae1554e | ||
|
|
4c93f3cc9b | ||
|
|
a71406b23e | ||
|
|
c7630bfddb | ||
|
|
aacb7eb125 | ||
|
|
40115efe1e | ||
|
|
6a03ea553e | ||
|
|
66dca96991 | ||
|
|
6b6e50ff45 | ||
|
|
5f636ef13f | ||
|
|
d9f8630a52 | ||
|
|
751b947a66 | ||
|
|
caafee6e0a | ||
|
|
60141498f2 | ||
|
|
4c7e21b1c1 | ||
|
|
88630bbad6 | ||
|
|
a33c032838 | ||
|
|
f3ad7bae63 | ||
|
|
395cbc7c1a | ||
|
|
c4704659f2 | ||
|
|
77dfee19e7 | ||
|
|
6b3bcdb659 | ||
|
|
4e40cf955d | ||
|
|
3e45e1f5bb | ||
|
|
23ad14f44d | ||
|
|
cd01274710 | ||
|
|
3b175f915d | ||
|
|
32e13e13a5 | ||
|
|
a9224567f9 | ||
|
|
cffe8e1991 | ||
|
|
b151ce8fc2 | ||
|
|
3e572107ed | ||
|
|
7e28cf6b1c | ||
|
|
3247d8cfd1 | ||
|
|
c72c68a99b | ||
|
|
4d81403a50 | ||
|
|
ebe4826d12 | ||
|
|
c73cc64199 | ||
|
|
55d4115c8e | ||
|
|
740b9ce649 | ||
|
|
ca6add83ef | ||
|
|
09a6886053 | ||
|
|
97ef5306a1 | ||
|
|
a8148690d6 | ||
|
|
5305eead4c | ||
|
|
bc9c7a7555 | ||
|
|
3b5b85070f | ||
|
|
cda1d645d2 | ||
|
|
346e021dbb | ||
|
|
5de047b141 | ||
|
|
36f002dbe0 | ||
|
|
aa8f6b4208 | ||
|
|
6461894cbe | ||
|
|
424cc0af25 | ||
|
|
586b6b5db0 | ||
|
|
b649529f67 | ||
|
|
00c9c4bb65 | ||
|
|
60dbf4c8b1 | ||
|
|
33877210d9 | ||
|
|
2457a37da8 | ||
|
|
8afd69d057 | ||
|
|
c1769a2ed4 | ||
|
|
79645a8f2e | ||
|
|
6527d964ef | ||
|
|
6f03363507 | ||
|
|
ab8f4a2dbe | ||
|
|
9bee3fddc4 | ||
|
|
dab95aab04 | ||
|
|
f31ee224ca | ||
|
|
ce80f86b49 | ||
|
|
83b1562a55 | ||
|
|
55ac751fc1 | ||
|
|
e5cce909b6 | ||
|
|
a3c5e6baf1 | ||
|
|
132112c2a5 | ||
|
|
1f9a720809 | ||
|
|
f4b7a5a498 | ||
|
|
02368600eb | ||
|
|
6e1464127f | ||
|
|
e801f162d6 | ||
|
|
fe9b22c66b | ||
|
|
e10e09025c | ||
|
|
cb7b551e24 | ||
|
|
ed5cca9390 | ||
|
|
373e210b5c | ||
|
|
f12a16160c | ||
|
|
b1dd437997 | ||
|
|
da1f973532 | ||
|
|
bb924f6388 | ||
|
|
c5800b2223 | ||
|
|
296b106d44 | ||
|
|
d71139b500 | ||
|
|
5b470aa3d7 | ||
|
|
932ce1df55 | ||
|
|
38fee7ea71 | ||
|
|
7449faf021 | ||
|
|
fd671ac2dd | ||
|
|
aff1de892b | ||
|
|
bc22892a06 | ||
|
|
348925e30a | ||
|
|
da1a5898f4 | ||
|
|
851a2f8935 | ||
|
|
8f995b9745 | ||
|
|
1e747747ca | ||
|
|
0c683158a7 | ||
|
|
1e76f9253d | ||
|
|
aad150f4b0 | ||
|
|
0b2f9afad9 | ||
|
|
5aad3ca615 | ||
|
|
816fdeb953 | ||
|
|
5693731705 | ||
|
|
29b7574cb3 | ||
|
|
3528c10915 | ||
|
|
1f6a0062fd | ||
|
|
4f46f020fa | ||
|
|
9df55bb7cd | ||
|
|
1a0290c0d4 | ||
|
|
713f863062 | ||
|
|
cf460a5342 | ||
|
|
24705616c4 | ||
|
|
aebc593635 | ||
|
|
2ab4955c46 | ||
|
|
61f53e3c7f | ||
|
|
7a4c9cff36 | ||
|
|
47082c9afc | ||
|
|
6ae77a341b | ||
|
|
43c6c82326 | ||
|
|
85b8cefd8d | ||
|
|
95af01b119 | ||
|
|
69fe10f4be | ||
|
|
cc4780eb71 | ||
|
|
4c6bc1b59d | ||
|
|
4ed9966d7b | ||
|
|
e684a81efb | ||
|
|
dec38bd8f0 | ||
|
|
b878e48619 | ||
|
|
54107a6876 | ||
|
|
c149918026 | ||
|
|
f9efd40c9d | ||
|
|
985b5f65db | ||
|
|
25bb1fbe4a | ||
|
|
57719a2c2d | ||
|
|
4733c73a47 | ||
|
|
b3058d6891 | ||
|
|
9d73ab3cc5 | ||
|
|
71d6351c8c | ||
|
|
839e2cba09 | ||
|
|
71dc42cc25 | ||
|
|
addd8a0710 | ||
|
|
da9800d2b0 | ||
|
|
cb049d7ab5 | ||
|
|
e4ebc1e292 | ||
|
|
d57869d43a | ||
|
|
97578dcd4f | ||
|
|
6db4c0edd3 | ||
|
|
3f2e386b4b | ||
|
|
ffc922e6b0 | ||
|
|
fec0e24206 | ||
|
|
054a8cc49f | ||
|
|
b97ba95ee9 | ||
|
|
a8f2a7940d | ||
|
|
f2718ba9c8 | ||
|
|
dcb8a7ef7c | ||
|
|
731f09dc81 | ||
|
|
09571f6743 | ||
|
|
bfa667503e | ||
|
|
da61cb7d2f | ||
|
|
9cc701e2dc | ||
|
|
5637cd7b68 | ||
|
|
fd367eb397 | ||
|
|
e299ec0363 | ||
|
|
090f1ca8f0 | ||
|
|
d77c10ae5b | ||
|
|
d43094e440 | ||
|
|
6a4c0b7d16 | ||
|
|
907db16ebe | ||
|
|
29de328322 | ||
|
|
3883c15bda | ||
|
|
76afb942bd | ||
|
|
d675f369db | ||
|
|
7ebec0cde5 | ||
|
|
855da72623 | ||
|
|
65f2734f78 | ||
|
|
94c6d970d6 | ||
|
|
a2f8a0c66e | ||
|
|
0eb3111e77 | ||
|
|
3234691909 | ||
|
|
9623ccd4d4 | ||
|
|
7d175afc07 | ||
|
|
20ce9ae3a4 | ||
|
|
72bcf8f1de | ||
|
|
b989fe50f0 | ||
|
|
a69cf18f7c | ||
|
|
98eb1a4be8 | ||
|
|
2c499e20c3 | ||
|
|
b6ef26fa81 | ||
|
|
24e0681579 | ||
|
|
0b97338738 | ||
|
|
89d6272775 | ||
|
|
0b48dc359f | ||
|
|
f6c103ae7c | ||
|
|
a2d82f1384 | ||
|
|
c017bd5138 | ||
|
|
c3c806ae0d | ||
|
|
b14996d7ee | ||
|
|
7aef1c5d12 | ||
|
|
dc62580d66 | ||
|
|
54afbd29b5 | ||
|
|
74651ee39f | ||
|
|
07856670cd | ||
|
|
c4a4a9df12 | ||
|
|
4a21c74541 | ||
|
|
85408845ba | ||
|
|
fb2590afa1 | ||
|
|
9d64c170f1 | ||
|
|
456ada7c0a | ||
|
|
436c891b20 | ||
|
|
103641c35c |
||
|
|
96785a8db5 | ||
|
|
9de597b0c1 | ||
|
|
0778cb050f | ||
|
|
5840d12a2e | ||
|
|
759f0ee748 | ||
|
|
9a7ce94546 | ||
|
|
eb297a8dbd | ||
|
|
865bb901a4 | ||
|
|
0f762c0b53 | ||
|
|
615552b843 | ||
|
|
4776ba4e5f | ||
|
|
59d10ee410 | ||
|
|
1b51acac49 | ||
|
|
9d0a33c25e | ||
|
|
0dc85e635f | ||
|
|
dd867f0a79 | ||
|
|
0c4b2c306b | ||
|
|
c98d972de1 | ||
|
|
b2193f4c1d | ||
|
|
90475c24cb | ||
|
|
8925bf0d3a | ||
|
|
a33864f85f | ||
|
|
242aea61d6 | ||
|
|
f7365f02fc | ||
|
|
b4d7eac7f0 | ||
|
|
e79d5dee3a | ||
|
|
937c8983d3 | ||
|
|
a2e0a55d2e | ||
|
|
7c2620fe54 | ||
|
|
4c3aefa11c | ||
|
|
38ec452ea7 | ||
|
|
ef152f9b63 | ||
|
|
e16d118014 | ||
|
|
eab24c31ef | ||
|
|
cc457cdcfb | ||
|
|
be9cdca75a | ||
|
|
84d20ca5cb | ||
|
|
edceb0218d | ||
|
|
a538e0fd4f | ||
|
|
442eaf9f45 | ||
|
|
275248ad7a | ||
|
|
a04ec0e76f | ||
|
|
a042ae624a | ||
|
|
256000c6d8 | ||
|
|
2cdffbc285 | ||
|
|
6648ff5f05 | ||
|
|
67b4ecd843 | ||
|
|
269b2dfe7b | ||
|
|
4dfe431c1c | ||
|
|
09583986d9 | ||
|
|
4392fc57b8 | ||
|
|
70d2448924 | ||
|
|
20caa1f499 | ||
|
|
df83beaf39 | ||
|
|
10a09b1d72 | ||
|
|
cd03381bc4 | ||
|
|
172fa34f6a | ||
|
|
80ada7d14b | ||
|
|
530a5417f1 | ||
|
|
4515ed8574 | ||
|
|
2f63535ae5 | ||
|
|
f24105f4ad | ||
|
|
984a931dd5 | ||
|
|
91adbb6b0d | ||
|
|
2de543877b | ||
|
|
2c28a69221 | ||
|
|
def72ed84a | ||
|
|
becd94e6ba | ||
|
|
c11e73c752 | ||
|
|
6594a39a8b | ||
|
|
ca0eb25e1f | ||
|
|
83f80ca5e6 | ||
|
|
d2ba8af36a | ||
|
|
b0aa100e3e | ||
|
|
3ccf430030 | ||
|
|
8778ace0ce | ||
|
|
3e2f90fa1e | ||
|
|
73e8db1fa3 | ||
|
|
daddc8f2e5 | ||
|
|
4280e97b06 | ||
|
|
248e7ac250 | ||
|
|
54e19b9154 | ||
|
|
62b4169d77 | ||
|
|
b0c6e54caf | ||
|
|
79e25dddc6 | ||
|
|
8256bbbefe | ||
|
|
fd99f55dba | ||
|
|
5cb26b8063 | ||
|
|
e2a21b215f | ||
|
|
d411a499a5 | ||
|
|
518341869f | ||
|
|
da2d5923cf | ||
|
|
578e6e28d7 | ||
|
|
523761fc46 | ||
|
|
70730eb90f | ||
|
|
bcb898238c | ||
|
|
7f5a59f1a7 | ||
|
|
21482cef3c | ||
|
|
509ff38dc9 | ||
|
|
4623681030 | ||
|
|
a08b84b381 | ||
|
|
cc0d5cac20 | ||
|
|
7ede33a3f2 | ||
|
|
8df8c6f90b | ||
|
|
e31fd8f4ba | ||
|
|
1365fc8d54 | ||
|
|
149cf94998 | ||
|
|
1e8ccdab4d | ||
|
|
6557fccf77 | ||
|
|
91bd897920 | ||
|
|
b69c360484 | ||
|
|
41e32aa23c | ||
|
|
be2d9e4877 | ||
|
|
36d1f9bb6d | ||
|
|
86b04cd154 | ||
|
|
7aeb0eca6a | ||
|
|
b711a4fb0b | ||
|
|
ecd620dd98 | ||
|
|
bb2ae9f3b1 | ||
|
|
e98a5318ea | ||
|
|
fa10639ec0 | ||
|
|
8756f4eab3 | ||
|
|
8c1c317d48 | ||
|
|
50c1268f5e | ||
|
|
3937c05237 | ||
|
|
1661c449fb | ||
|
|
b08ec3692f | ||
|
|
d71230cdfe | ||
|
|
65dfd15177 | ||
|
|
46a9bf9e39 | ||
|
|
a68462cb95 | ||
|
|
7bbf2f330a | ||
|
|
cc0a97649b | ||
|
|
e40fcaf737 | ||
|
|
a7c51888e1 | ||
|
|
78c5b30e81 | ||
|
|
5374b3728e | ||
|
|
f14261d455 | ||
|
|
98e57c5341 | ||
|
|
bd43989987 | ||
|
|
9594434025 | ||
|
|
82093b2843 | ||
|
|
35a15670ea | ||
|
|
4de82c076f | ||
|
|
29da707463 | ||
|
|
c84e2c994e | ||
|
|
9a8b6fa600 | ||
|
|
32dc8c3717 | ||
|
|
5bd9164c3b | ||
|
|
a277f06224 | ||
|
|
30adf4b1a5 | ||
|
|
b10dfb287d | ||
|
|
9605d7c243 | ||
|
|
f9babbe522 | ||
|
|
2f366fb4ca | ||
|
|
d8f801bb06 | ||
|
|
43b06932d7 | ||
|
|
816283cdb1 | ||
|
|
e98378bffd | ||
|
|
b8ba8186ec | ||
|
|
8f67fc93f2 | ||
|
|
8f9ed72201 | ||
|
|
d11e744bc3 | ||
|
|
0990153323 | ||
|
|
dab657e2f3 | ||
|
|
08dc40376d | ||
|
|
ab33d5c230 | ||
|
|
66d3f51e68 | ||
|
|
b3e19cb9a0 | ||
|
|
c3db5393b0 | ||
|
|
8c3821c75e | ||
|
|
eb86303e84 | ||
|
|
82398c777b | ||
|
|
f55f70e867 | ||
|
|
f568f5379e | ||
|
|
68950664e3 | ||
|
|
64a305cd4c | ||
|
|
66683293b5 | ||
|
|
07ec19e45e | ||
|
|
4bae00f593 | ||
|
|
5c0d68e2e5 | ||
|
|
fd9c301c4d | ||
|
|
4482bb495c | ||
|
|
0017ad48c5 | ||
|
|
989438a1cb | ||
|
|
8e7f954b32 | ||
|
|
4b383b5574 | ||
|
|
7b83f7a319 | ||
|
|
af6adcc973 | ||
|
|
19e1407983 | ||
|
|
d797032694 | ||
|
|
3367d8e0ba | ||
|
|
9ac95ce69c | ||
|
|
d23a73f2b9 | ||
|
|
b23d597c99 | ||
|
|
b8607e366c | ||
|
|
a0a6b2625d | ||
|
|
d163b321ad | ||
|
|
212da7a345 | ||
|
|
9a5b26716f | ||
|
|
91bf4913b2 | ||
|
|
da8d0304a6 | ||
|
|
3f277d2b7f | ||
|
|
50be52b7fc | ||
|
|
ce9b68d448 | ||
|
|
484ad8280e | ||
|
|
a2fb7dab29 | ||
|
|
e2fd797138 | ||
|
|
0f0631ee3b | ||
|
|
2bc16978fc | ||
|
|
e0e6fd50bd | ||
|
|
e998b5b31d | ||
|
|
ddae878c85 | ||
|
|
9608770bc7 | ||
|
|
f25e5d9ec3 | ||
|
|
e0e980d828 | ||
|
|
fda713694a | ||
|
|
d54c2ecea9 | ||
|
|
5ebc5bac65 | ||
|
|
a1af1ca3ac | ||
|
|
3461b70baa | ||
|
|
c9e3e2dbee | ||
|
|
9c93e3d4e8 | ||
|
|
4bdc2640a7 | ||
|
|
6a1266bc21 | ||
|
|
8eb17bc54b | ||
|
|
c794d3519b | ||
|
|
935cf11817 | ||
|
|
1934b56fa1 | ||
|
|
b8749110f4 | ||
|
|
78fc95e098 | ||
|
|
82512a5b52 | ||
|
|
d40db590f5 | ||
|
|
741a0a4928 | ||
|
|
9363a59b95 | ||
|
|
14a15feebb | ||
|
|
30bfa9b689 | ||
|
|
b11e2409c6 | ||
|
|
8ffac22f1b | ||
|
|
f6240e9f68 | ||
|
|
3035866d78 | ||
|
|
0c7719011b | ||
|
|
56ee91d396 | ||
|
|
bdfbc4cd32 | ||
|
|
e7ca6d693f | ||
|
|
cb46e463a3 | ||
|
|
54991cb638 | ||
|
|
27fa2b70b9 | ||
|
|
1a87477e19 | ||
|
|
f10395a16e | ||
|
|
8ebacb4a28 | ||
|
|
fa7101acc2 | ||
|
|
6ff175b048 | ||
|
|
6fdc55c9a5 | ||
|
|
33d245b60b | ||
|
|
0d4bb36068 | ||
|
|
58746ee52f | ||
|
|
a2cc047132 | ||
|
|
80c8e51400 | ||
|
|
375e4d5ea5 |
16 changed files with 278 additions and 175 deletions
|
|
@ -18,6 +18,7 @@
|
||||||
#include <wayland-client.h>
|
#include <wayland-client.h>
|
||||||
#include <wayland-server-core.h>
|
#include <wayland-server-core.h>
|
||||||
#include <wlr/backend.h>
|
#include <wlr/backend.h>
|
||||||
|
#include <wlr/backend/headless.h>
|
||||||
#include <wlr/render/allocator.h>
|
#include <wlr/render/allocator.h>
|
||||||
#include <wlr/render/wlr_renderer.h>
|
#include <wlr/render/wlr_renderer.h>
|
||||||
#include <wlr/types/wlr_compositor.h>
|
#include <wlr/types/wlr_compositor.h>
|
||||||
|
|
@ -369,6 +370,7 @@ main(int argc, char *argv[]) {
|
||||||
server.event_loop = event_loop;
|
server.event_loop = event_loop;
|
||||||
|
|
||||||
backend = wlr_backend_autocreate(server.wl_display);
|
backend = wlr_backend_autocreate(server.wl_display);
|
||||||
|
server.headless_backend=wlr_headless_backend_create(server.wl_display);
|
||||||
if(!backend) {
|
if(!backend) {
|
||||||
wlr_log(WLR_ERROR, "Unable to create the wlroots backend");
|
wlr_log(WLR_ERROR, "Unable to create the wlroots backend");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
|
|
||||||
85
keybinding.c
85
keybinding.c
|
|
@ -249,8 +249,7 @@ swap_tile(struct cg_tile *tile,
|
||||||
"{\"event_name\":\"swap_tile\",\"tile_id\":%d,\"swap_"
|
"{\"event_name\":\"swap_tile\",\"tile_id\":%d,\"swap_"
|
||||||
"tile_id\":%d,\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
"tile_id\":%d,\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
||||||
tile->id, swap_tile->id, tile->workspace->num + 1,
|
tile->id, swap_tile->id, tile->workspace->num + 1,
|
||||||
tile->workspace->output->wlr_output->name,
|
tile->workspace->output->name, output_get_num(tile->workspace->output));
|
||||||
output_get_num(tile->workspace->output));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -400,8 +399,7 @@ resize(struct cg_tile *tile, const struct cg_tile *parent, int coord_offset,
|
||||||
"\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
"\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
||||||
tile->id, old_x, old_y, old_height, old_width, tile->tile.x,
|
tile->id, old_x, old_y, old_height, old_width, tile->tile.x,
|
||||||
tile->tile.y, tile->tile.height, tile->tile.width,
|
tile->tile.y, tile->tile.height, tile->tile.width,
|
||||||
tile->workspace->num + 1,
|
tile->workspace->num + 1, tile->workspace->output->name,
|
||||||
tile->workspace->output->wlr_output->name,
|
|
||||||
output_get_num(tile->workspace->output));
|
output_get_num(tile->workspace->output));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -456,18 +454,18 @@ resize_vertical(struct cg_tile *tile, struct cg_tile *parent, int y_offset,
|
||||||
void
|
void
|
||||||
resize_tile(struct cg_server *server, int hpixs, int vpixs) {
|
resize_tile(struct cg_server *server, int hpixs, int vpixs) {
|
||||||
struct cg_output *output = server->curr_output;
|
struct cg_output *output = server->curr_output;
|
||||||
struct wlr_box output_box;
|
|
||||||
wlr_output_layout_get_box(output->server->output_layout, output->wlr_output,
|
|
||||||
&output_box);
|
|
||||||
|
|
||||||
struct cg_tile *focused =
|
struct cg_tile *focused =
|
||||||
output->workspaces[output->curr_workspace]->focused_tile;
|
output->workspaces[output->curr_workspace]->focused_tile;
|
||||||
/* First do the horizontal adjustment */
|
/* First do the horizontal adjustment */
|
||||||
if(hpixs != 0 && focused->tile.width < output_box.width &&
|
if(hpixs != 0 &&
|
||||||
is_between_strict(0, output_box.width, focused->tile.width + hpixs)) {
|
focused->tile.width < output_get_layout_box(output).width &&
|
||||||
|
is_between_strict(0, output_get_layout_box(output).width,
|
||||||
|
focused->tile.width + hpixs)) {
|
||||||
int x_offset = 0;
|
int x_offset = 0;
|
||||||
/* In case we are on the total right, move the left edge of the tile */
|
/* In case we are on the total right, move the left edge of the tile */
|
||||||
if(focused->tile.x + focused->tile.width == output_box.width) {
|
if(focused->tile.x + focused->tile.width ==
|
||||||
|
output_get_layout_box(output).width) {
|
||||||
x_offset = -hpixs;
|
x_offset = -hpixs;
|
||||||
}
|
}
|
||||||
bool resize_allowed =
|
bool resize_allowed =
|
||||||
|
|
@ -477,10 +475,13 @@ resize_tile(struct cg_server *server, int hpixs, int vpixs) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Repeat for vertical */
|
/* Repeat for vertical */
|
||||||
if(vpixs != 0 && focused->tile.height < output_box.height &&
|
if(vpixs != 0 &&
|
||||||
is_between_strict(0, output_box.height, focused->tile.height + vpixs)) {
|
focused->tile.height < output_get_layout_box(output).height &&
|
||||||
|
is_between_strict(0, output_get_layout_box(output).height,
|
||||||
|
focused->tile.height + vpixs)) {
|
||||||
int y_offset = 0;
|
int y_offset = 0;
|
||||||
if(focused->tile.y + focused->tile.height == output_box.height) {
|
if(focused->tile.y + focused->tile.height ==
|
||||||
|
output_get_layout_box(output).height) {
|
||||||
y_offset = -vpixs;
|
y_offset = -vpixs;
|
||||||
}
|
}
|
||||||
bool resize_allowed =
|
bool resize_allowed =
|
||||||
|
|
@ -501,7 +502,7 @@ keybinding_workspace_fullscreen(struct cg_server *server) {
|
||||||
"\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
"\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
||||||
output->workspaces[output->curr_workspace]->focused_tile->id,
|
output->workspaces[output->curr_workspace]->focused_tile->id,
|
||||||
output->workspaces[output->curr_workspace]->num + 1,
|
output->workspaces[output->curr_workspace]->num + 1,
|
||||||
output->wlr_output->name, output_get_num(output));
|
output->name, output_get_num(output));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Switch to a differerent virtual terminal
|
// Switch to a differerent virtual terminal
|
||||||
|
|
@ -595,8 +596,8 @@ keybinding_split_output(struct cg_output *output, bool vertical) {
|
||||||
"{\"event_name\":\"split\",\"tile_id\":%d,\"new_tile_id\":%d,"
|
"{\"event_name\":\"split\",\"tile_id\":%d,\"new_tile_id\":%d,"
|
||||||
"\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d,\"vertical\":%d}",
|
"\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d,\"vertical\":%d}",
|
||||||
curr_workspace->focused_tile->id, new_tile->id, curr_workspace->num + 1,
|
curr_workspace->focused_tile->id, new_tile->id, curr_workspace->num + 1,
|
||||||
curr_workspace->output->wlr_output->name,
|
curr_workspace->output->name, output_get_num(curr_workspace->output),
|
||||||
output_get_num(curr_workspace->output), vertical);
|
vertical);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -614,8 +615,7 @@ keybinding_close_view(struct cg_view *view) {
|
||||||
outp->server,
|
outp->server,
|
||||||
"{\"event_name\":\"close\",\"view_id\":%d,\"view_pid\":%d,\"tile_id\":"
|
"{\"event_name\":\"close\",\"view_id\":%d,\"view_pid\":%d,\"tile_id\":"
|
||||||
"%d,\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
"%d,\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
||||||
view_id, view_pid, tile_id, ws + 1, outp->wlr_output->name,
|
view_id, view_pid, tile_id, ws + 1, outp->name, output_get_num(outp));
|
||||||
output_get_num(outp));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -670,8 +670,8 @@ keybinding_cycle_outputs(struct cg_server *server, bool reverse,
|
||||||
"{\"event_name\":\"cycle_outputs\",\"old_output\":\"%s\",\"old_"
|
"{\"event_name\":\"cycle_outputs\",\"old_output\":\"%s\",\"old_"
|
||||||
"output_id\":%d,"
|
"output_id\":%d,"
|
||||||
"\"new_output\":\"%s\",\"new_output_id\":%d,\"reverse\":%d}",
|
"\"new_output\":\"%s\",\"new_output_id\":%d,\"reverse\":%d}",
|
||||||
old_output->wlr_output->name, output_get_num(old_output),
|
old_output->name, output_get_num(old_output), output->name,
|
||||||
output->wlr_output->name, output_get_num(output), reverse);
|
output_get_num(output), reverse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -721,7 +721,7 @@ keybinding_cycle_views(struct cg_server *server, bool reverse, bool ipc) {
|
||||||
curr_id, curr_pid, next_view == NULL ? -1 : (int)next_view->id,
|
curr_id, curr_pid, next_view == NULL ? -1 : (int)next_view->id,
|
||||||
next_view == NULL ? -1 : (int)next_view->impl->get_pid(next_view),
|
next_view == NULL ? -1 : (int)next_view->impl->get_pid(next_view),
|
||||||
next_view->tile->id, curr_workspace->num + 1,
|
next_view->tile->id, curr_workspace->num + 1,
|
||||||
curr_workspace->output->wlr_output->name,
|
curr_workspace->output->name,
|
||||||
output_get_num(curr_workspace->output));
|
output_get_num(curr_workspace->output));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -744,7 +744,7 @@ keybinding_focus_tile(struct cg_server *server, uint32_t tile_id) {
|
||||||
"{\"event_name\":\"focus_tile\",\"old_tile_id\":%d,\"new_tile_"
|
"{\"event_name\":\"focus_tile\",\"old_tile_id\":%d,\"new_tile_"
|
||||||
"id\":%d,\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
"id\":%d,\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
||||||
old_tile->id, workspace->focused_tile->id, workspace->num + 1,
|
old_tile->id, workspace->focused_tile->id, workspace->num + 1,
|
||||||
output->wlr_output->name, output_get_num(output));
|
output->name, output_get_num(output));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -778,8 +778,7 @@ keybinding_switch_ws(struct cg_server *server, uint32_t ws) {
|
||||||
ipc_send_event(output->server,
|
ipc_send_event(output->server,
|
||||||
"{\"event_name\":\"switch_ws\",\"old_workspace\":%d,"
|
"{\"event_name\":\"switch_ws\",\"old_workspace\":%d,"
|
||||||
"\"new_workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
"\"new_workspace\":%d,\"output\":\"%s\",\"output_id\":%d}",
|
||||||
old_ws + 1, ws + 1, output->wlr_output->name,
|
old_ws + 1, ws + 1, output->name, output_get_num(output));
|
||||||
output_get_num(output));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1019,19 +1018,17 @@ print_output(struct cg_output *outp) {
|
||||||
struct dyn_str outp_str;
|
struct dyn_str outp_str;
|
||||||
outp_str.len = 0;
|
outp_str.len = 0;
|
||||||
outp_str.cur_pos = 0;
|
outp_str.cur_pos = 0;
|
||||||
uint32_t nmemb = 8;
|
uint32_t nmemb = 9;
|
||||||
struct wlr_box outp_box;
|
|
||||||
wlr_output_layout_get_box(outp->server->output_layout, outp->wlr_output,
|
|
||||||
&outp_box);
|
|
||||||
outp_str.str_arr = calloc(nmemb, sizeof(char *));
|
outp_str.str_arr = calloc(nmemb, sizeof(char *));
|
||||||
print_str(&outp_str, "\"%s\": {\n", outp->wlr_output->name);
|
print_str(&outp_str, "\"%s\": {\n", outp->name);
|
||||||
print_str(&outp_str, "\"priority\": %d,\n", outp->priority);
|
print_str(&outp_str, "\"priority\": %d,\n", outp->priority);
|
||||||
print_str(&outp_str, "\"coords\": {\"x\":%d,\"y\":%d},\n", outp_box.x,
|
print_str(&outp_str, "\"coords\": {\"x\":%d,\"y\":%d},\n",
|
||||||
outp_box.y);
|
output_get_layout_box(outp).x, output_get_layout_box(outp).y);
|
||||||
print_str(&outp_str, "\"size\": {\"width\":%d,\"height\":%d},\n",
|
print_str(&outp_str, "\"size\": {\"width\":%d,\"height\":%d},\n",
|
||||||
outp->wlr_output->width, outp->wlr_output->height);
|
outp->wlr_output->width, outp->wlr_output->height);
|
||||||
print_str(&outp_str, "\"refresh_rate\": %f,\n",
|
print_str(&outp_str, "\"refresh_rate\": %f,\n",
|
||||||
(float)outp->wlr_output->refresh / 1000.0);
|
(float)outp->wlr_output->refresh / 1000.0);
|
||||||
|
print_str(&outp_str, "\"permanent\": %d,\n", outp->role == OUTPUT_ROLE_PERMANENT);
|
||||||
print_str(&outp_str, "\"curr_workspace\": %d,\n", outp->curr_workspace + 1);
|
print_str(&outp_str, "\"curr_workspace\": %d,\n", outp->curr_workspace + 1);
|
||||||
char *workspaces_str = print_workspaces(outp);
|
char *workspaces_str = print_workspaces(outp);
|
||||||
if(workspaces_str != NULL) {
|
if(workspaces_str != NULL) {
|
||||||
|
|
@ -1202,8 +1199,7 @@ keybinding_dump(struct cg_server *server) {
|
||||||
}
|
}
|
||||||
print_str(&str, "\"views_curr_id\":%d,\n", curr_view_id);
|
print_str(&str, "\"views_curr_id\":%d,\n", curr_view_id);
|
||||||
print_str(&str, "\"tiles_curr_id\":%d,\n", curr_tile_id);
|
print_str(&str, "\"tiles_curr_id\":%d,\n", curr_tile_id);
|
||||||
print_str(&str, "\"curr_output\":\"%s\",\n",
|
print_str(&str, "\"curr_output\":\"%s\",\n", server->curr_output->name);
|
||||||
server->curr_output->wlr_output->name);
|
|
||||||
print_str(&str, "\"default_mode\":\"%s\",\n",
|
print_str(&str, "\"default_mode\":\"%s\",\n",
|
||||||
get_mode_name(server->modes, server->seat->default_mode));
|
get_mode_name(server->modes, server->seat->default_mode));
|
||||||
print_modes(&str, server->modes);
|
print_modes(&str, server->modes);
|
||||||
|
|
@ -1298,9 +1294,8 @@ keybinding_move_view_to_cycle_output(struct cg_server *server, bool reverse) {
|
||||||
"{\"event_name\":\"move_view_to_cycle_output\",\"view_id\":%d,\"view_"
|
"{\"event_name\":\"move_view_to_cycle_output\",\"view_id\":%d,\"view_"
|
||||||
"pid\":%d,\"old_output\":\"%s\",\"old_output_id\":%d,\"new_output\":\"%"
|
"pid\":%d,\"old_output\":\"%s\",\"old_output_id\":%d,\"new_output\":\"%"
|
||||||
"s\",\"new_output_id\":%d,\"old_tile_id\":%d,\"new_tile_id\":%d}",
|
"s\",\"new_output_id\":%d,\"old_tile_id\":%d,\"new_tile_id\":%d}",
|
||||||
id, pid, old_outp->wlr_output->name, output_get_num(old_outp),
|
id, pid, old_outp->name, output_get_num(old_outp),
|
||||||
server->curr_output->wlr_output->name,
|
server->curr_output->name, output_get_num(server->curr_output),
|
||||||
output_get_num(server->curr_output),
|
|
||||||
old_outp->workspaces[old_outp->curr_workspace]->focused_tile->id,
|
old_outp->workspaces[old_outp->curr_workspace]->focused_tile->id,
|
||||||
server->curr_output->workspaces[server->curr_output->curr_workspace]
|
server->curr_output->workspaces[server->curr_output->curr_workspace]
|
||||||
->focused_tile->id);
|
->focused_tile->id);
|
||||||
|
|
@ -1422,8 +1417,8 @@ keybinding_switch_output(struct cg_server *server, int output) {
|
||||||
"{\"event_name\":\"switch_output\",\"old_output\":"
|
"{\"event_name\":\"switch_output\",\"old_output\":"
|
||||||
"\"%s\",\"old_output_id\":%d,\"new_output\":\"%s\","
|
"\"%s\",\"old_output_id\":%d,\"new_output\":\"%s\","
|
||||||
"\"new_output_id\":%d}",
|
"\"new_output_id\":%d}",
|
||||||
old_outp->wlr_output->name, output_get_num(old_outp),
|
old_outp->name, output_get_num(old_outp), it->name,
|
||||||
it->wlr_output->name, output_get_num(it));
|
output_get_num(it));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
++count;
|
++count;
|
||||||
|
|
@ -1469,8 +1464,7 @@ keybinding_move_view_to_output(struct cg_server *server, int output_num) {
|
||||||
server,
|
server,
|
||||||
"{\"event_name\":\"move_view_to_output\",\"view_id\":%d,\"old_"
|
"{\"event_name\":\"move_view_to_output\",\"view_id\":%d,\"old_"
|
||||||
"output\":\"%s\",\"new_output\":\"%s\"}",
|
"output\":\"%s\",\"new_output\":\"%s\"}",
|
||||||
view_id, old_outp->wlr_output->name,
|
view_id, old_outp->name, server->curr_output->name);
|
||||||
server->curr_output->wlr_output->name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1505,7 +1499,7 @@ keybinding_move_view_to_workspace(struct cg_server *server, uint32_t ws) {
|
||||||
"\"old_workspace\":%d,\"new_workspace\":%d,"
|
"\"old_workspace\":%d,\"new_workspace\":%d,"
|
||||||
"\"output\":\"%s\",\"output_id\":%d,\"view_pid\":%d}",
|
"\"output\":\"%s\",\"output_id\":%d,\"view_pid\":%d}",
|
||||||
view == NULL ? -1 : (int)view->id, old_ws + 1, ws + 1,
|
view == NULL ? -1 : (int)view->id, old_ws + 1, ws + 1,
|
||||||
server->curr_output->wlr_output->name,
|
server->curr_output->name,
|
||||||
output_get_num(server->curr_output),
|
output_get_num(server->curr_output),
|
||||||
view == NULL ? 0 : view->impl->get_pid(view));
|
view == NULL ? 0 : view->impl->get_pid(view));
|
||||||
}
|
}
|
||||||
|
|
@ -1554,17 +1548,18 @@ keybinding_configure_output(struct cg_server *server,
|
||||||
|
|
||||||
struct cg_output *output, *tmp_output;
|
struct cg_output *output, *tmp_output;
|
||||||
wl_list_for_each_safe(output, tmp_output, &server->outputs, link) {
|
wl_list_for_each_safe(output, tmp_output, &server->outputs, link) {
|
||||||
if(strcmp(config->output_name, output->wlr_output->name) == 0) {
|
if(strcmp(config->output_name, output->name) == 0) {
|
||||||
|
int output_num=output_get_num(output);
|
||||||
output_configure(server, output);
|
output_configure(server, output);
|
||||||
ipc_send_event(output->server,
|
ipc_send_event(server,
|
||||||
"{\"event_name\":\"configure_output\",\"output\":\"%"
|
"{\"event_name\":\"configure_output\",\"output\":\"%"
|
||||||
"s\",\"output_id\":%d}",
|
"s\",\"output_id\":%d}",
|
||||||
cfg->output_name, output_get_num(output));
|
cfg->output_name, output_num);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wl_list_for_each_safe(output, tmp_output, &server->disabled_outputs, link) {
|
wl_list_for_each_safe(output, tmp_output, &server->disabled_outputs, link) {
|
||||||
if(strcmp(config->output_name, output->wlr_output->name) == 0) {
|
if(strcmp(config->output_name, output->name) == 0) {
|
||||||
output_configure(server, output);
|
output_configure(server, output);
|
||||||
ipc_send_event(
|
ipc_send_event(
|
||||||
output->server,
|
output->server,
|
||||||
|
|
|
||||||
|
|
@ -219,7 +219,7 @@ output_by_name_or_id(const char *name_or_id, struct cg_server *server) {
|
||||||
char identifier[128];
|
char identifier[128];
|
||||||
output_get_identifier(identifier, sizeof(identifier), output);
|
output_get_identifier(identifier, sizeof(identifier), output);
|
||||||
if(strcasecmp(identifier, name_or_id) == 0 ||
|
if(strcasecmp(identifier, name_or_id) == 0 ||
|
||||||
strcasecmp(output->wlr_output->name, name_or_id) == 0) {
|
strcasecmp(output->name, name_or_id) == 0) {
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -271,7 +271,7 @@ message <text>
|
||||||
*only*
|
*only*
|
||||||
Remove all splits and make current window fill the entire screen
|
Remove all splits and make current window fill the entire screen
|
||||||
|
|
||||||
*output <name> [[pos <xpos> <ypos> res <width>x<height> rate <rate> [scale <scale>]] | enable | disable | prio <n> | rotate <n>]*
|
*output <name> [[pos <xpos> <ypos> res <width>x<height> rate <rate> [scale <scale>]] | enable | disable | [permanent|peripheral] | prio <n> | rotate <n>]*
|
||||||
Configure output "<name>" -
|
Configure output "<name>" -
|
||||||
- <xpos> and <ypos> are the position of the
|
- <xpos> and <ypos> are the position of the
|
||||||
monitor in pixels. The top-left monitor should have the coordinates 0 0.
|
monitor in pixels. The top-left monitor should have the coordinates 0 0.
|
||||||
|
|
@ -281,6 +281,15 @@ message <text>
|
||||||
- enable and disable enable or disable <name>. Note that if
|
- enable and disable enable or disable <name>. Note that if
|
||||||
<output> is the only enabled output, *output <output> disable* has
|
<output> is the only enabled output, *output <output> disable* has
|
||||||
no effect.
|
no effect.
|
||||||
|
- permanent sets <name> to persist even on disconnect. Thus when
|
||||||
|
the physical monitor is disconnected, the output is nevertheless
|
||||||
|
maintained and operates identically to the attached monitor. On reconnect,
|
||||||
|
the monitor operates as though it was never disconnected. Setting the
|
||||||
|
output role to peripheral when the monitor is disconnected, immediately
|
||||||
|
destroys the output, as if the monitor were disconnected.
|
||||||
|
- peripheral sets the role of <name> to peripheral, meaning that on
|
||||||
|
disconnecting the respective monitor, all views will be moved to another
|
||||||
|
available output. The default role is peripheral.
|
||||||
- prio <n> is used to set the priority of an output. If
|
- prio <n> is used to set the priority of an output. If
|
||||||
nothing else is set, outputs are added as they request to be added
|
nothing else is set, outputs are added as they request to be added
|
||||||
and have a numerical priority of -1. Using prio <n> it is possible
|
and have a numerical priority of -1. Using prio <n> it is possible
|
||||||
|
|
|
||||||
23
message.c
23
message.c
|
|
@ -236,17 +236,18 @@ message_set_output(struct cg_output *output, const char *string,
|
||||||
wlr_scene_buffer_create(&scene_output->scene->tree, &buf->base);
|
wlr_scene_buffer_create(&scene_output->scene->tree, &buf->base);
|
||||||
wlr_scene_node_raise_to_top(&message->message->node);
|
wlr_scene_node_raise_to_top(&message->message->node);
|
||||||
wlr_scene_node_set_enabled(&message->message->node, true);
|
wlr_scene_node_set_enabled(&message->message->node, true);
|
||||||
struct wlr_box outp_box;
|
|
||||||
wlr_output_layout_get_box(output->server->output_layout, output->wlr_output,
|
|
||||||
&outp_box);
|
|
||||||
wlr_scene_buffer_set_dest_size(message->message, width, height);
|
wlr_scene_buffer_set_dest_size(message->message, width, height);
|
||||||
wlr_scene_node_set_position(&message->message->node,
|
wlr_scene_node_set_position(
|
||||||
message->position->x + outp_box.x,
|
&message->message->node,
|
||||||
message->position->y + outp_box.y);
|
message->position->x + output_get_layout_box(output).x,
|
||||||
|
message->position->y + output_get_layout_box(output).y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
message_printf(struct cg_output *output, const char *fmt, ...) {
|
message_printf(struct cg_output *output, const char *fmt, ...) {
|
||||||
|
if(output->destroyed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
char *buffer = malloc_vsprintf_va_list(fmt, ap);
|
char *buffer = malloc_vsprintf_va_list(fmt, ap);
|
||||||
|
|
@ -262,11 +263,7 @@ message_printf(struct cg_output *output, const char *fmt, ...) {
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
struct wlr_box output_box;
|
box->x = output_get_layout_box(output).width;
|
||||||
wlr_output_layout_get_box(output->server->output_layout, output->wlr_output,
|
|
||||||
&output_box);
|
|
||||||
|
|
||||||
box->x = output_box.width;
|
|
||||||
box->y = 0;
|
box->y = 0;
|
||||||
box->width = 0;
|
box->width = 0;
|
||||||
box->height = 0;
|
box->height = 0;
|
||||||
|
|
@ -282,6 +279,10 @@ message_printf(struct cg_output *output, const char *fmt, ...) {
|
||||||
void
|
void
|
||||||
message_printf_pos(struct cg_output *output, struct wlr_box *position,
|
message_printf_pos(struct cg_output *output, struct wlr_box *position,
|
||||||
const enum cg_message_align align, const char *fmt, ...) {
|
const enum cg_message_align align, const char *fmt, ...) {
|
||||||
|
if(output->destroyed) {
|
||||||
|
free(position);
|
||||||
|
return;
|
||||||
|
}
|
||||||
uint16_t buf_len = 256;
|
uint16_t buf_len = 256;
|
||||||
char *buffer = (char *)malloc(buf_len * sizeof(char));
|
char *buffer = (char *)malloc(buf_len * sizeof(char));
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
|
||||||
206
output.c
206
output.c
|
|
@ -14,6 +14,7 @@
|
||||||
#if WLR_HAS_X11_BACKEND
|
#if WLR_HAS_X11_BACKEND
|
||||||
#include <wlr/backend/x11.h>
|
#include <wlr/backend/x11.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include <wlr/backend/headless.h>
|
||||||
#include <wlr/types/wlr_compositor.h>
|
#include <wlr/types/wlr_compositor.h>
|
||||||
#include <wlr/types/wlr_data_device.h>
|
#include <wlr/types/wlr_data_device.h>
|
||||||
#include <wlr/types/wlr_output.h>
|
#include <wlr/types/wlr_output.h>
|
||||||
|
|
@ -103,7 +104,7 @@ output_get_num(const struct cg_output *output) {
|
||||||
struct cg_output *it;
|
struct cg_output *it;
|
||||||
int count = 1;
|
int count = 1;
|
||||||
wl_list_for_each(it, &output->server->outputs, link) {
|
wl_list_for_each(it, &output->server->outputs, link) {
|
||||||
if(strcmp(output->wlr_output->name, it->wlr_output->name) == 0) {
|
if(strcmp(output->name, it->name) == 0) {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
++count;
|
++count;
|
||||||
|
|
@ -111,34 +112,54 @@ output_get_num(const struct cg_output *output) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct wlr_box
|
||||||
|
output_get_layout_box(struct cg_output *output) {
|
||||||
|
if(!output->destroyed) {
|
||||||
|
wlr_output_layout_get_box(output->server->output_layout,
|
||||||
|
output->wlr_output, &output->layout_box);
|
||||||
|
}
|
||||||
|
return output->layout_box;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
output_destroy(struct cg_output *output) {
|
output_destroy(struct cg_output *output) {
|
||||||
struct cg_server *server = output->server;
|
struct cg_server *server = output->server;
|
||||||
char *outp_name = strdup(output->wlr_output->name);
|
char *outp_name = strdup(output->name);
|
||||||
int outp_num = output_get_num(output);
|
int outp_num = output_get_num(output);
|
||||||
|
|
||||||
wl_list_remove(&output->destroy.link);
|
if(output->destroyed == false) {
|
||||||
wl_list_remove(&output->mode.link);
|
wl_list_remove(&output->destroy.link);
|
||||||
wl_list_remove(&output->commit.link);
|
wl_list_remove(&output->mode.link);
|
||||||
wl_list_remove(&output->frame.link);
|
wl_list_remove(&output->commit.link);
|
||||||
|
wl_list_remove(&output->frame.link);
|
||||||
output_clear(output);
|
|
||||||
|
|
||||||
/*Important: due to unfortunate events, "workspace" and "output->workspace"
|
|
||||||
* have nothing in common. The former is the workspace of a single output,
|
|
||||||
* whereas the latter is the workspace of the outputs.*/
|
|
||||||
for(unsigned int i = 0; i < server->nws; ++i) {
|
|
||||||
workspace_free(output->workspaces[i]);
|
|
||||||
}
|
}
|
||||||
free(output->workspaces);
|
output->destroyed = true;
|
||||||
|
enum output_role role = output->role;
|
||||||
|
if(role == OUTPUT_ROLE_PERMANENT) {
|
||||||
|
wlr_output_layout_get_box(server->output_layout, output->wlr_output,
|
||||||
|
&output->layout_box);
|
||||||
|
wlr_output_layout_remove(server->output_layout, output->wlr_output);
|
||||||
|
output->wlr_output=wlr_headless_add_output(server->headless_backend,output->layout_box.width,output->layout_box.height);
|
||||||
|
wlr_output_layout_add(server->output_layout, output->wlr_output, output->layout_box.x,
|
||||||
|
output->layout_box.y);
|
||||||
|
|
||||||
free(output);
|
} else {
|
||||||
|
|
||||||
|
output_clear(output);
|
||||||
|
|
||||||
|
for(unsigned int i = 0; i < server->nws; ++i) {
|
||||||
|
workspace_free(output->workspaces[i]);
|
||||||
|
}
|
||||||
|
free(output->workspaces);
|
||||||
|
free(output->name);
|
||||||
|
|
||||||
|
free(output);
|
||||||
|
}
|
||||||
if(outp_name != NULL) {
|
if(outp_name != NULL) {
|
||||||
ipc_send_event(server,
|
ipc_send_event(server,
|
||||||
"{\"event_name\":\"destroy_output\",\"output\":\"%s\","
|
"{\"event_name\":\"destroy_output\",\"output\":\"%s\","
|
||||||
"\"output_id\":%d}",
|
"\"output_id\":%d,\"permanent\":%d}",
|
||||||
outp_name, outp_num);
|
outp_name, outp_num, role == OUTPUT_ROLE_PERMANENT);
|
||||||
free(outp_name);
|
free(outp_name);
|
||||||
} else {
|
} else {
|
||||||
wlr_log(WLR_ERROR,
|
wlr_log(WLR_ERROR,
|
||||||
|
|
@ -258,6 +279,15 @@ output_apply_config(struct cg_server *server, struct cg_output *output,
|
||||||
struct cg_output_config *config) {
|
struct cg_output_config *config) {
|
||||||
struct wlr_output *wlr_output = output->wlr_output;
|
struct wlr_output *wlr_output = output->wlr_output;
|
||||||
|
|
||||||
|
if(config->role != OUTPUT_ROLE_DEFAULT) {
|
||||||
|
output->role = config->role;
|
||||||
|
if((output->role == OUTPUT_ROLE_PERIPHERAL)&&(output->destroyed == true)) {
|
||||||
|
output_destroy(output);
|
||||||
|
wlr_output_destroy(wlr_output);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(output->wlr_output->enabled) {
|
if(output->wlr_output->enabled) {
|
||||||
wlr_output_layout_remove(server->output_layout, wlr_output);
|
wlr_output_layout_remove(server->output_layout, wlr_output);
|
||||||
}
|
}
|
||||||
|
|
@ -292,6 +322,13 @@ output_apply_config(struct cg_server *server, struct cg_output *output,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
wlr_output_layout_add_auto(server->output_layout, wlr_output);
|
wlr_output_layout_add_auto(server->output_layout, wlr_output);
|
||||||
|
// The following two lines make sure that the output is "manually" managed,
|
||||||
|
// so that its position doesn't change anymore in the future.
|
||||||
|
wlr_output_layout_get_box(server->output_layout, output->wlr_output,
|
||||||
|
&output->layout_box);
|
||||||
|
wlr_output_layout_move(server->output_layout, output->wlr_output, output->layout_box.x,
|
||||||
|
output->layout_box.y);
|
||||||
|
|
||||||
|
|
||||||
struct wlr_output_mode *preferred_mode =
|
struct wlr_output_mode *preferred_mode =
|
||||||
wlr_output_preferred_mode(wlr_output);
|
wlr_output_preferred_mode(wlr_output);
|
||||||
|
|
@ -325,9 +362,11 @@ output_apply_config(struct cg_server *server, struct cg_output *output,
|
||||||
output->bg = wlr_scene_rect_create(
|
output->bg = wlr_scene_rect_create(
|
||||||
&scene_output->scene->tree, output->wlr_output->width,
|
&scene_output->scene->tree, output->wlr_output->width,
|
||||||
output->wlr_output->height, server->bg_color);
|
output->wlr_output->height, server->bg_color);
|
||||||
struct wlr_box box;
|
wlr_output_layout_get_box(server->output_layout, output->wlr_output,
|
||||||
wlr_output_layout_get_box(server->output_layout, output->wlr_output, &box);
|
&output->layout_box);
|
||||||
wlr_scene_node_set_position(&output->bg->node, box.x, box.y);
|
wlr_scene_node_set_position(&output->bg->node,
|
||||||
|
output_get_layout_box(output).x,
|
||||||
|
output_get_layout_box(output).y);
|
||||||
wlr_scene_node_lower_to_bottom(&output->bg->node);
|
wlr_scene_node_lower_to_bottom(&output->bg->node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -340,6 +379,7 @@ empty_output_config(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg->status = OUTPUT_DEFAULT;
|
cfg->status = OUTPUT_DEFAULT;
|
||||||
|
cfg->role = OUTPUT_ROLE_DEFAULT;
|
||||||
cfg->pos.x = -1;
|
cfg->pos.x = -1;
|
||||||
cfg->pos.y = -1;
|
cfg->pos.y = -1;
|
||||||
cfg->pos.width = -1;
|
cfg->pos.width = -1;
|
||||||
|
|
@ -363,6 +403,11 @@ merge_output_configs(struct cg_output_config *cfg1,
|
||||||
} else {
|
} else {
|
||||||
out_cfg->status = cfg1->status;
|
out_cfg->status = cfg1->status;
|
||||||
}
|
}
|
||||||
|
if(cfg1->role == out_cfg->role) {
|
||||||
|
out_cfg->role = cfg2->role;
|
||||||
|
} else {
|
||||||
|
out_cfg->role = cfg1->role;
|
||||||
|
}
|
||||||
if(cfg1->pos.x == out_cfg->pos.x) {
|
if(cfg1->pos.x == out_cfg->pos.x) {
|
||||||
out_cfg->pos.x = cfg2->pos.x;
|
out_cfg->pos.x = cfg2->pos.x;
|
||||||
out_cfg->pos.y = cfg2->pos.y;
|
out_cfg->pos.y = cfg2->pos.y;
|
||||||
|
|
@ -411,7 +456,7 @@ output_configure(struct cg_server *server, struct cg_output *output) {
|
||||||
struct cg_output_config *tot_config = empty_output_config();
|
struct cg_output_config *tot_config = empty_output_config();
|
||||||
struct cg_output_config *config;
|
struct cg_output_config *config;
|
||||||
wl_list_for_each(config, &server->output_config, link) {
|
wl_list_for_each(config, &server->output_config, link) {
|
||||||
if(strcmp(config->output_name, output->wlr_output->name) == 0) {
|
if(strcmp(config->output_name, output->name) == 0) {
|
||||||
if(tot_config == NULL) {
|
if(tot_config == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -484,7 +529,7 @@ output_make_workspace_fullscreen(struct cg_output *output, int ws) {
|
||||||
}
|
}
|
||||||
|
|
||||||
workspace_free_tiles(output->workspaces[ws]);
|
workspace_free_tiles(output->workspaces[ws]);
|
||||||
if(full_screen_workspace_tiles(server->output_layout, output->wlr_output,
|
if(full_screen_workspace_tiles(server->output_layout,
|
||||||
output->workspaces[ws],
|
output->workspaces[ws],
|
||||||
&server->tiles_curr_id) != 0) {
|
&server->tiles_curr_id) != 0) {
|
||||||
wlr_log(WLR_ERROR, "Failed to allocate space for fullscreen workspace");
|
wlr_log(WLR_ERROR, "Failed to allocate space for fullscreen workspace");
|
||||||
|
|
@ -516,58 +561,88 @@ handle_new_output(struct wl_listener *listener, void *data) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cg_output *output = calloc(1, sizeof(struct cg_output));
|
struct cg_output *ito;
|
||||||
|
bool reinit = false;
|
||||||
|
struct cg_output *output = NULL;
|
||||||
|
wl_list_for_each(ito, &server->outputs, link) {
|
||||||
|
if((strcmp(ito->name, wlr_output->name) == 0) && (ito->destroyed)) {
|
||||||
|
reinit = true;
|
||||||
|
output = ito;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(reinit) {
|
||||||
|
wlr_output_layout_remove(server->output_layout, output->wlr_output);
|
||||||
|
wlr_output_destroy(output->wlr_output);
|
||||||
|
} else {
|
||||||
|
output = calloc(1, sizeof(struct cg_output));
|
||||||
|
}
|
||||||
if(!output) {
|
if(!output) {
|
||||||
wlr_log(WLR_ERROR, "Failed to allocate output");
|
wlr_log(WLR_ERROR, "Failed to allocate output");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
output->wlr_output = wlr_output;
|
output->wlr_output = wlr_output;
|
||||||
output->server = server;
|
output->destroyed = false;
|
||||||
output->last_scanned_out_view = NULL;
|
|
||||||
|
|
||||||
struct cg_output_priorities *it;
|
if(!reinit) {
|
||||||
int prio = -1;
|
output->server = server;
|
||||||
wl_list_for_each(it, &server->output_priorities, link) {
|
output->last_scanned_out_view = NULL;
|
||||||
if(strcmp(output->wlr_output->name, it->ident) == 0) {
|
output->name = strdup(wlr_output->name);
|
||||||
prio = it->priority;
|
|
||||||
|
struct cg_output_priorities *it;
|
||||||
|
int prio = -1;
|
||||||
|
wl_list_for_each(it, &server->output_priorities, link) {
|
||||||
|
if(strcmp(output->name, it->ident) == 0) {
|
||||||
|
prio = it->priority;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
output->priority = prio;
|
||||||
output->priority = prio;
|
wlr_output_set_transform(wlr_output, WL_OUTPUT_TRANSFORM_NORMAL);
|
||||||
wlr_output_set_transform(wlr_output, WL_OUTPUT_TRANSFORM_NORMAL);
|
output->workspaces = NULL;
|
||||||
output->workspaces = NULL;
|
|
||||||
|
|
||||||
wl_list_init(&output->messages);
|
wl_list_init(&output->messages);
|
||||||
|
|
||||||
if(!wlr_xcursor_manager_load(server->seat->xcursor_manager,
|
if(!wlr_xcursor_manager_load(server->seat->xcursor_manager,
|
||||||
wlr_output->scale)) {
|
wlr_output->scale)) {
|
||||||
wlr_log(WLR_ERROR,
|
wlr_log(WLR_ERROR,
|
||||||
"Cannot load XCursor theme for output '%s' with scale %f",
|
"Cannot load XCursor theme for output '%s' with scale %f",
|
||||||
wlr_output->name, wlr_output->scale);
|
output->name, wlr_output->scale);
|
||||||
}
|
|
||||||
|
|
||||||
output_insert(server, output);
|
|
||||||
output_configure(server, output);
|
|
||||||
|
|
||||||
output->workspaces = malloc(server->nws * sizeof(struct cg_workspace *));
|
|
||||||
for(unsigned int i = 0; i < server->nws; ++i) {
|
|
||||||
output->workspaces[i] = full_screen_workspace(output);
|
|
||||||
if(!output->workspaces[i]) {
|
|
||||||
wlr_log(WLR_ERROR, "Failed to allocate workspaces for output");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
output->workspaces[i]->num = i;
|
|
||||||
wl_list_init(&output->workspaces[i]->views);
|
output_insert(server, output);
|
||||||
wl_list_init(&output->workspaces[i]->unmanaged_views);
|
output_configure(server, output);
|
||||||
|
wlr_output_layout_get_box(server->output_layout, output->wlr_output,
|
||||||
|
&output->layout_box);
|
||||||
|
|
||||||
|
output->workspaces =
|
||||||
|
malloc(server->nws * sizeof(struct cg_workspace *));
|
||||||
|
for(unsigned int i = 0; i < server->nws; ++i) {
|
||||||
|
output->workspaces[i] = full_screen_workspace(output);
|
||||||
|
if(!output->workspaces[i]) {
|
||||||
|
wlr_log(WLR_ERROR, "Failed to allocate workspaces for output");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
output->workspaces[i]->num = i;
|
||||||
|
wl_list_init(&output->workspaces[i]->views);
|
||||||
|
wl_list_init(&output->workspaces[i]->unmanaged_views);
|
||||||
|
}
|
||||||
|
|
||||||
|
wlr_scene_node_raise_to_top(&output->workspaces[0]->scene->node);
|
||||||
|
workspace_focus(output, 0);
|
||||||
|
|
||||||
|
/* We are the first output. Set the current output to this one. */
|
||||||
|
if(server->curr_output == NULL) {
|
||||||
|
server->curr_output = output;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
wlr_output_layout_add(server->output_layout, wlr_output,
|
||||||
|
output_get_layout_box(output).x,
|
||||||
|
output_get_layout_box(output).y);
|
||||||
|
output_configure(server, output);
|
||||||
|
wlr_output_layout_get_box(server->output_layout, output->wlr_output,
|
||||||
|
&output->layout_box);
|
||||||
}
|
}
|
||||||
|
|
||||||
wlr_scene_node_raise_to_top(&output->workspaces[0]->scene->node);
|
|
||||||
workspace_focus(output, 0);
|
|
||||||
|
|
||||||
/* We are the first output. Set the current output to this one. */
|
|
||||||
if(server->curr_output == NULL) {
|
|
||||||
server->curr_output = output;
|
|
||||||
}
|
|
||||||
wlr_xcursor_manager_set_cursor_image(server->seat->xcursor_manager,
|
wlr_xcursor_manager_set_cursor_image(server->seat->xcursor_manager,
|
||||||
DEFAULT_XCURSOR, server->seat->cursor);
|
DEFAULT_XCURSOR, server->seat->cursor);
|
||||||
wlr_cursor_warp(server->seat->cursor, NULL, 0, 0);
|
wlr_cursor_warp(server->seat->cursor, NULL, 0, 0);
|
||||||
|
|
@ -580,11 +655,12 @@ handle_new_output(struct wl_listener *listener, void *data) {
|
||||||
wl_signal_add(&wlr_output->events.commit, &output->commit);
|
wl_signal_add(&wlr_output->events.commit, &output->commit);
|
||||||
output->mode.notify = handle_output_mode;
|
output->mode.notify = handle_output_mode;
|
||||||
wl_signal_add(&wlr_output->events.mode, &output->mode);
|
wl_signal_add(&wlr_output->events.mode, &output->mode);
|
||||||
|
|
||||||
ipc_send_event(server,
|
ipc_send_event(server,
|
||||||
"{\"event_name\":\"new_output\",\"output\":\"%s\",\"output_"
|
"{\"event_name\":\"new_output\",\"output\":\"%s\",\"output_"
|
||||||
"id\":%d,\"priority\":%d}",
|
"id\":%d,\"priority\":%d,\"restart\":%d}",
|
||||||
output->wlr_output->name, output_get_num(output),
|
output->name, output_get_num(output), output->priority,
|
||||||
output->priority);
|
reinit);
|
||||||
}
|
}
|
||||||
#if CG_HAS_FANALYZE
|
#if CG_HAS_FANALYZE
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
|
||||||
14
output.h
14
output.h
|
|
@ -12,6 +12,12 @@ struct cg_view;
|
||||||
struct wlr_output;
|
struct wlr_output;
|
||||||
struct wlr_surface;
|
struct wlr_surface;
|
||||||
|
|
||||||
|
enum output_role {
|
||||||
|
OUTPUT_ROLE_PERIPHERAL,
|
||||||
|
OUTPUT_ROLE_PERMANENT,
|
||||||
|
OUTPUT_ROLE_DEFAULT
|
||||||
|
};
|
||||||
|
|
||||||
struct cg_output {
|
struct cg_output {
|
||||||
struct cg_server *server;
|
struct cg_server *server;
|
||||||
struct wlr_output *wlr_output;
|
struct wlr_output *wlr_output;
|
||||||
|
|
@ -23,9 +29,13 @@ struct cg_output {
|
||||||
struct wl_listener frame;
|
struct wl_listener frame;
|
||||||
struct cg_workspace **workspaces;
|
struct cg_workspace **workspaces;
|
||||||
struct wl_list messages;
|
struct wl_list messages;
|
||||||
|
struct wlr_box layout_box;
|
||||||
int curr_workspace;
|
int curr_workspace;
|
||||||
int priority;
|
int priority;
|
||||||
struct cg_view *last_scanned_out_view;
|
struct cg_view *last_scanned_out_view;
|
||||||
|
enum output_role role;
|
||||||
|
bool destroyed;
|
||||||
|
char *name;
|
||||||
|
|
||||||
struct wl_list link; // cg_server::outputs
|
struct wl_list link; // cg_server::outputs
|
||||||
};
|
};
|
||||||
|
|
@ -40,6 +50,7 @@ enum output_status { OUTPUT_ENABLE, OUTPUT_DISABLE, OUTPUT_DEFAULT };
|
||||||
|
|
||||||
struct cg_output_config {
|
struct cg_output_config {
|
||||||
enum output_status status;
|
enum output_status status;
|
||||||
|
enum output_role role;
|
||||||
struct wlr_box pos;
|
struct wlr_box pos;
|
||||||
char *output_name;
|
char *output_name;
|
||||||
float refresh_rate;
|
float refresh_rate;
|
||||||
|
|
@ -53,7 +64,8 @@ typedef void (*cg_surface_iterator_func_t)(struct cg_output *output,
|
||||||
struct wlr_surface *surface,
|
struct wlr_surface *surface,
|
||||||
struct wlr_box *box,
|
struct wlr_box *box,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
struct wlr_box
|
||||||
|
output_get_layout_box(struct cg_output *output);
|
||||||
void
|
void
|
||||||
handle_new_output(struct wl_listener *listener, void *data);
|
handle_new_output(struct wl_listener *listener, void *data);
|
||||||
void
|
void
|
||||||
|
|
|
||||||
22
parse.c
22
parse.c
|
|
@ -543,6 +543,10 @@ parse_output_config_keyword(char *key_str, enum output_status *status) {
|
||||||
*status = OUTPUT_DEFAULT;
|
*status = OUTPUT_DEFAULT;
|
||||||
} else if(strcmp(key_str, "enable") == 0) {
|
} else if(strcmp(key_str, "enable") == 0) {
|
||||||
*status = OUTPUT_ENABLE;
|
*status = OUTPUT_ENABLE;
|
||||||
|
} else if(strcmp(key_str, "permanent") == 0) {
|
||||||
|
*status = OUTPUT_DEFAULT;
|
||||||
|
} else if(strcmp(key_str, "peripheral") == 0) {
|
||||||
|
*status = OUTPUT_DEFAULT;
|
||||||
} else if(strcmp(key_str, "disable") == 0) {
|
} else if(strcmp(key_str, "disable") == 0) {
|
||||||
*status = OUTPUT_DISABLE;
|
*status = OUTPUT_DISABLE;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -566,6 +570,7 @@ parse_output_config(char **saveptr, char **errstr) {
|
||||||
cfg->priority = -1;
|
cfg->priority = -1;
|
||||||
cfg->scale = -1;
|
cfg->scale = -1;
|
||||||
cfg->angle = -1;
|
cfg->angle = -1;
|
||||||
|
cfg->role = OUTPUT_ROLE_DEFAULT;
|
||||||
char *name = strtok_r(NULL, " ", saveptr);
|
char *name = strtok_r(NULL, " ", saveptr);
|
||||||
if(name == NULL) {
|
if(name == NULL) {
|
||||||
*errstr =
|
*errstr =
|
||||||
|
|
@ -574,8 +579,9 @@ parse_output_config(char **saveptr, char **errstr) {
|
||||||
}
|
}
|
||||||
char *key_str = strtok_r(NULL, " ", saveptr);
|
char *key_str = strtok_r(NULL, " ", saveptr);
|
||||||
if(parse_output_config_keyword(key_str, &(cfg->status)) != 0) {
|
if(parse_output_config_keyword(key_str, &(cfg->status)) != 0) {
|
||||||
*errstr = log_error("Expected keyword \"pos\", \"prio\", \"enable\" or "
|
*errstr = log_error("Expected keyword \"pos\", \"prio\", \"enable\", "
|
||||||
"\"disable\" in output configuration for output %s",
|
"\"disable\", \"permanent\" or \"peripheral\" in "
|
||||||
|
"output configuration for output %s",
|
||||||
name);
|
name);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
@ -622,6 +628,18 @@ parse_output_config(char **saveptr, char **errstr) {
|
||||||
return cfg;
|
return cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(strcmp(key_str, "peripheral") == 0) {
|
||||||
|
cfg->output_name = strdup(name);
|
||||||
|
cfg->role = OUTPUT_ROLE_PERIPHERAL;
|
||||||
|
return cfg;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcmp(key_str, "permanent") == 0) {
|
||||||
|
cfg->output_name = strdup(name);
|
||||||
|
cfg->role = OUTPUT_ROLE_PERMANENT;
|
||||||
|
return cfg;
|
||||||
|
}
|
||||||
|
|
||||||
cfg->pos.x = parse_uint(saveptr, " ");
|
cfg->pos.x = parse_uint(saveptr, " ");
|
||||||
if(cfg->pos.x < 0) {
|
if(cfg->pos.x < 0) {
|
||||||
*errstr = log_error(
|
*errstr = log_error(
|
||||||
|
|
|
||||||
16
seat.c
16
seat.c
|
|
@ -95,7 +95,7 @@ new_touch(struct cg_seat *seat, struct cg_input_device *input_device) {
|
||||||
if(wlr_touch->output_name != NULL) {
|
if(wlr_touch->output_name != NULL) {
|
||||||
struct cg_output *output;
|
struct cg_output *output;
|
||||||
wl_list_for_each(output, &seat->server->outputs, link) {
|
wl_list_for_each(output, &seat->server->outputs, link) {
|
||||||
if(strcmp(wlr_touch->output_name, output->wlr_output->name) == 0) {
|
if(strcmp(wlr_touch->output_name, output->name) == 0) {
|
||||||
wlr_cursor_map_input_to_output(seat->cursor, device,
|
wlr_cursor_map_input_to_output(seat->cursor, device,
|
||||||
output->wlr_output);
|
output->wlr_output);
|
||||||
break;
|
break;
|
||||||
|
|
@ -133,8 +133,7 @@ new_pointer(struct cg_seat *seat, struct cg_input_device *input_device) {
|
||||||
if(wlr_pointer->output_name != NULL) {
|
if(wlr_pointer->output_name != NULL) {
|
||||||
struct cg_output *output;
|
struct cg_output *output;
|
||||||
wl_list_for_each(output, &seat->server->outputs, link) {
|
wl_list_for_each(output, &seat->server->outputs, link) {
|
||||||
if(strcmp(wlr_pointer->output_name, output->wlr_output->name) ==
|
if(strcmp(wlr_pointer->output_name, output->name) == 0) {
|
||||||
0) {
|
|
||||||
wlr_cursor_map_input_to_output(seat->cursor, device,
|
wlr_cursor_map_input_to_output(seat->cursor, device,
|
||||||
output->wlr_output);
|
output->wlr_output);
|
||||||
break;
|
break;
|
||||||
|
|
@ -755,7 +754,7 @@ process_cursor_motion(struct cg_seat *seat, uint32_t time) {
|
||||||
"\"%s\",\"old_output_id\":%d,"
|
"\"%s\",\"old_output_id\":%d,"
|
||||||
"\"old_tile\":%d,\"new_output\":\"%s\",\"new_output_"
|
"\"old_tile\":%d,\"new_output\":\"%s\",\"new_output_"
|
||||||
"id\":%d,\"new_tile\":%d}",
|
"id\":%d,\"new_tile\":%d}",
|
||||||
seat->cursor_tile->workspace->output->wlr_output->name,
|
seat->cursor_tile->workspace->output->name,
|
||||||
output_get_num(seat->cursor_tile->workspace->output),
|
output_get_num(seat->cursor_tile->workspace->output),
|
||||||
seat->cursor_tile->id, c_outp->name,
|
seat->cursor_tile->id, c_outp->name,
|
||||||
output_get_num(cg_outp), c_tile->id);
|
output_get_num(cg_outp), c_tile->id);
|
||||||
|
|
@ -1095,9 +1094,8 @@ seat_set_focus(struct cg_seat *seat, struct cg_view *view) {
|
||||||
|
|
||||||
wlr_scene_node_raise_to_top(&view->scene_tree->node);
|
wlr_scene_node_raise_to_top(&view->scene_tree->node);
|
||||||
process_cursor_motion(seat, -1);
|
process_cursor_motion(seat, -1);
|
||||||
struct wlr_box box;
|
wlr_scene_node_set_position(
|
||||||
wlr_output_layout_get_box(server->output_layout,
|
&view->workspace->output->bg->node,
|
||||||
view->workspace->output->wlr_output, &box);
|
output_get_layout_box(view->workspace->output).x,
|
||||||
wlr_scene_node_set_position(&view->workspace->output->bg->node, box.x,
|
output_get_layout_box(view->workspace->output).y);
|
||||||
box.y);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
3
server.c
3
server.c
|
|
@ -43,8 +43,7 @@ server_show_info(struct cg_server *server) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
output_str_tmp = output_str;
|
output_str_tmp = output_str;
|
||||||
output_str = malloc_vsprintf("%s\t * %s\n", output_str,
|
output_str = malloc_vsprintf("%s\t * %s\n", output_str, output->name);
|
||||||
output->wlr_output->name);
|
|
||||||
free(output_str_tmp);
|
free(output_str_tmp);
|
||||||
}
|
}
|
||||||
char *input_str = strdup(""), *input_str_tmp;
|
char *input_str = strdup(""), *input_str_tmp;
|
||||||
|
|
|
||||||
1
server.h
1
server.h
|
|
@ -37,6 +37,7 @@ struct cg_server {
|
||||||
struct cg_output *curr_output;
|
struct cg_output *curr_output;
|
||||||
struct wl_listener new_output;
|
struct wl_listener new_output;
|
||||||
struct wl_list output_priorities;
|
struct wl_list output_priorities;
|
||||||
|
struct wlr_backend *headless_backend;
|
||||||
|
|
||||||
struct wlr_renderer *renderer;
|
struct wlr_renderer *renderer;
|
||||||
struct wlr_allocator *allocator;
|
struct wlr_allocator *allocator;
|
||||||
|
|
|
||||||
24
view.c
24
view.c
|
|
@ -81,11 +81,10 @@ void
|
||||||
view_maximize(struct cg_view *view, struct cg_tile *tile) {
|
view_maximize(struct cg_view *view, struct cg_tile *tile) {
|
||||||
view->ox = tile->tile.x;
|
view->ox = tile->tile.x;
|
||||||
view->oy = tile->tile.y;
|
view->oy = tile->tile.y;
|
||||||
struct wlr_box box;
|
wlr_scene_node_set_position(
|
||||||
wlr_output_layout_get_box(view->server->output_layout,
|
&view->scene_tree->node,
|
||||||
view->workspace->output->wlr_output, &box);
|
view->ox + output_get_layout_box(view->workspace->output).x,
|
||||||
wlr_scene_node_set_position(&view->scene_tree->node, view->ox + box.x,
|
output_get_layout_box(view->oy + view->workspace->output).y);
|
||||||
view->oy + box.y);
|
|
||||||
view->impl->maximize(view, tile->tile.width, tile->tile.height);
|
view->impl->maximize(view, tile->tile.width, tile->tile.height);
|
||||||
view->tile = tile;
|
view->tile = tile;
|
||||||
wlr_scene_node_raise_to_top(&view->scene_tree->node);
|
wlr_scene_node_raise_to_top(&view->scene_tree->node);
|
||||||
|
|
@ -97,7 +96,7 @@ view_unmap(struct cg_view *view) {
|
||||||
uint32_t id = view->id;
|
uint32_t id = view->id;
|
||||||
uint32_t tile_id = 0;
|
uint32_t tile_id = 0;
|
||||||
uint32_t ws = view->workspace->num;
|
uint32_t ws = view->workspace->num;
|
||||||
char *output_name = view->workspace->output->wlr_output->name;
|
char *output_name = view->workspace->output->name;
|
||||||
int output_id = output_get_num(view->workspace->output);
|
int output_id = output_get_num(view->workspace->output);
|
||||||
pid_t pid = view->impl->get_pid(view);
|
pid_t pid = view->impl->get_pid(view);
|
||||||
/* If the view is not mapped, do nothing */
|
/* If the view is not mapped, do nothing */
|
||||||
|
|
@ -171,11 +170,10 @@ view_map(struct cg_view *view, struct wlr_surface *surface,
|
||||||
their own (x,y) coordinates in handle_wayland_surface_map. */
|
their own (x,y) coordinates in handle_wayland_surface_map. */
|
||||||
if(view->type == CG_XWAYLAND_VIEW && !xwayland_view_should_manage(view)) {
|
if(view->type == CG_XWAYLAND_VIEW && !xwayland_view_should_manage(view)) {
|
||||||
wl_list_insert(&ws->unmanaged_views, &view->link);
|
wl_list_insert(&ws->unmanaged_views, &view->link);
|
||||||
struct wlr_box box;
|
wlr_scene_node_set_position(
|
||||||
wlr_output_layout_get_box(view->server->output_layout,
|
&view->scene_tree->node,
|
||||||
view->workspace->output->wlr_output, &box);
|
view->ox + output_get_layout_box(view->workspace->output).x,
|
||||||
wlr_scene_node_set_position(&view->scene_tree->node, view->ox + box.x,
|
view->oy + output_get_layout_box(view->workspace->output).y);
|
||||||
view->oy + box.y);
|
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|
@ -193,8 +191,8 @@ view_map(struct cg_view *view, struct wlr_surface *surface,
|
||||||
"{\"event_name\":\"view_map\",\"view_id\":%d,\"tile_id\":%d,"
|
"{\"event_name\":\"view_map\",\"view_id\":%d,\"tile_id\":%d,"
|
||||||
"\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d,\"view_pid\":%d}",
|
"\"workspace\":%d,\"output\":\"%s\",\"output_id\":%d,\"view_pid\":%d}",
|
||||||
view->id, tile_id, view->workspace->num + 1,
|
view->id, tile_id, view->workspace->num + 1,
|
||||||
view->workspace->output->wlr_output->name,
|
view->workspace->output->name, output_get_num(view->workspace->output),
|
||||||
output_get_num(view->workspace->output), view->impl->get_pid(view));
|
view->impl->get_pid(view));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
17
workspace.c
17
workspace.c
|
|
@ -35,7 +35,6 @@ workspace_tile_update_view(struct cg_tile *tile, struct cg_view *view) {
|
||||||
#endif
|
#endif
|
||||||
int
|
int
|
||||||
full_screen_workspace_tiles(struct wlr_output_layout *layout,
|
full_screen_workspace_tiles(struct wlr_output_layout *layout,
|
||||||
struct wlr_output *output,
|
|
||||||
struct cg_workspace *workspace,
|
struct cg_workspace *workspace,
|
||||||
uint32_t *tiles_curr_id) {
|
uint32_t *tiles_curr_id) {
|
||||||
workspace->focused_tile = calloc(1, sizeof(struct cg_tile));
|
workspace->focused_tile = calloc(1, sizeof(struct cg_tile));
|
||||||
|
|
@ -47,10 +46,10 @@ full_screen_workspace_tiles(struct wlr_output_layout *layout,
|
||||||
workspace->focused_tile->prev = workspace->focused_tile;
|
workspace->focused_tile->prev = workspace->focused_tile;
|
||||||
workspace->focused_tile->tile.x = 0;
|
workspace->focused_tile->tile.x = 0;
|
||||||
workspace->focused_tile->tile.y = 0;
|
workspace->focused_tile->tile.y = 0;
|
||||||
struct wlr_box output_box;
|
workspace->focused_tile->tile.width =
|
||||||
wlr_output_layout_get_box(layout, output, &output_box);
|
output_get_layout_box(workspace->output).width;
|
||||||
workspace->focused_tile->tile.width = output_box.width;
|
workspace->focused_tile->tile.height =
|
||||||
workspace->focused_tile->tile.height = output_box.height;
|
output_get_layout_box(workspace->output).height;
|
||||||
workspace_tile_update_view(workspace->focused_tile, NULL);
|
workspace_tile_update_view(workspace->focused_tile, NULL);
|
||||||
workspace->focused_tile->id = *tiles_curr_id;
|
workspace->focused_tile->id = *tiles_curr_id;
|
||||||
++(*tiles_curr_id);
|
++(*tiles_curr_id);
|
||||||
|
|
@ -72,16 +71,15 @@ full_screen_workspace(struct cg_output *output) {
|
||||||
free(workspace);
|
free(workspace);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
workspace->output = output;
|
||||||
workspace->server = output->server;
|
workspace->server = output->server;
|
||||||
workspace->num = -1;
|
workspace->num = -1;
|
||||||
workspace->scene = wlr_scene_tree_create(&scene_output->scene->tree);
|
workspace->scene = wlr_scene_tree_create(&scene_output->scene->tree);
|
||||||
if(full_screen_workspace_tiles(output->server->output_layout,
|
if(full_screen_workspace_tiles(output->server->output_layout, workspace,
|
||||||
output->wlr_output, workspace,
|
|
||||||
&output->server->tiles_curr_id) != 0) {
|
&output->server->tiles_curr_id) != 0) {
|
||||||
free(workspace);
|
free(workspace);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
workspace->output = output;
|
|
||||||
return workspace;
|
return workspace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -107,7 +105,8 @@ workspace_free_tiles(struct cg_workspace *workspace) {
|
||||||
workspace->focused_tile) {
|
workspace->focused_tile) {
|
||||||
workspace->output->server->seat->cursor_tile = NULL;
|
workspace->output->server->seat->cursor_tile = NULL;
|
||||||
}
|
}
|
||||||
if(workspace->focused_tile == workspace->server->seat->cursor_tile) {
|
if(workspace->output->server->running &&
|
||||||
|
workspace->focused_tile == workspace->server->seat->cursor_tile) {
|
||||||
workspace->server->seat->cursor_tile = NULL;
|
workspace->server->seat->cursor_tile = NULL;
|
||||||
}
|
}
|
||||||
struct cg_tile *next = workspace->focused_tile->next;
|
struct cg_tile *next = workspace->focused_tile->next;
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ struct cg_workspace *
|
||||||
full_screen_workspace(struct cg_output *output);
|
full_screen_workspace(struct cg_output *output);
|
||||||
int
|
int
|
||||||
full_screen_workspace_tiles(struct wlr_output_layout *layout,
|
full_screen_workspace_tiles(struct wlr_output_layout *layout,
|
||||||
struct wlr_output *output,
|
|
||||||
struct cg_workspace *workspace,
|
struct cg_workspace *workspace,
|
||||||
uint32_t *tiles_curr_id);
|
uint32_t *tiles_curr_id);
|
||||||
void
|
void
|
||||||
|
|
|
||||||
10
xdg_shell.c
10
xdg_shell.c
|
|
@ -74,12 +74,12 @@ popup_unconstrain(struct cg_view *view, struct wlr_xdg_popup *popup) {
|
||||||
struct wlr_box *popup_box = &popup->current.geometry;
|
struct wlr_box *popup_box = &popup->current.geometry;
|
||||||
|
|
||||||
struct wlr_output_layout *output_layout = view->server->output_layout;
|
struct wlr_output_layout *output_layout = view->server->output_layout;
|
||||||
struct wlr_box view_output_box;
|
|
||||||
wlr_output_layout_get_box(
|
|
||||||
output_layout, view->workspace->output->wlr_output, &view_output_box);
|
|
||||||
struct wlr_output *wlr_output = wlr_output_layout_output_at(
|
struct wlr_output *wlr_output = wlr_output_layout_output_at(
|
||||||
output_layout, view_output_box.x + view->ox + popup_box->x,
|
output_layout,
|
||||||
view_output_box.y + view->oy + popup_box->y);
|
output_get_layout_box(view->workspace->output).x + view->ox +
|
||||||
|
popup_box->x,
|
||||||
|
output_get_layout_box(view->workspace->output).y + view->oy +
|
||||||
|
popup_box->y);
|
||||||
struct wlr_box output_box;
|
struct wlr_box output_box;
|
||||||
wlr_output_layout_get_box(output_layout, wlr_output, &output_box);
|
wlr_output_layout_get_box(output_layout, wlr_output, &output_box);
|
||||||
|
|
||||||
|
|
|
||||||
22
xwayland.c
22
xwayland.c
|
|
@ -93,13 +93,11 @@ maximize(struct cg_view *view, int width, int height) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wlr_box output_box;
|
wlr_xwayland_surface_configure(
|
||||||
wlr_output_layout_get_box(view->server->output_layout,
|
xwayland_view->xwayland_surface,
|
||||||
view->server->curr_output->wlr_output,
|
view->ox + output_get_layout_box(view->server->curr_output).x,
|
||||||
&output_box);
|
view->oy + output_get_layout_box(view->server->curr_output).y, width,
|
||||||
wlr_xwayland_surface_configure(xwayland_view->xwayland_surface,
|
height);
|
||||||
view->ox + output_box.x,
|
|
||||||
view->oy + output_box.y, width, height);
|
|
||||||
wlr_xwayland_surface_set_maximized(xwayland_view->xwayland_surface, true);
|
wlr_xwayland_surface_set_maximized(xwayland_view->xwayland_surface, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -135,12 +133,10 @@ handle_xwayland_surface_map(struct wl_listener *listener, void *_data) {
|
||||||
wl_container_of(listener, xwayland_view, map);
|
wl_container_of(listener, xwayland_view, map);
|
||||||
struct cg_view *view = &xwayland_view->view;
|
struct cg_view *view = &xwayland_view->view;
|
||||||
if(!xwayland_view_should_manage(view)) {
|
if(!xwayland_view_should_manage(view)) {
|
||||||
struct wlr_output_layout *output_layout = view->server->output_layout;
|
view->ox = xwayland_view->xwayland_surface->x -
|
||||||
struct wlr_box output_box;
|
view->server->curr_output->layout_box.x;
|
||||||
wlr_output_layout_get_box(
|
view->oy = xwayland_view->xwayland_surface->y -
|
||||||
output_layout, view->server->curr_output->wlr_output, &output_box);
|
view->server->curr_output->layout_box.y;
|
||||||
view->ox = xwayland_view->xwayland_surface->x - output_box.x;
|
|
||||||
view->oy = xwayland_view->xwayland_surface->y - output_box.y;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
view_map(view, xwayland_view->xwayland_surface->surface,
|
view_map(view, xwayland_view->xwayland_surface->surface,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue