mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
Compare commits
514 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a90f386ddc | ||
![]() |
13c4162b5e | ||
![]() |
32140ccf26 | ||
![]() |
697e678587 | ||
![]() |
b2da5add21 | ||
![]() |
a15d92c7eb | ||
![]() |
00d0f13c1a | ||
![]() |
32bd005492 | ||
![]() |
3eb95284a0 | ||
![]() |
1653473ecc | ||
![]() |
0f940b6579 | ||
![]() |
72f4286f49 | ||
![]() |
e8e0f3c96f | ||
![]() |
48cced00a9 | ||
![]() |
edea9b860d | ||
![]() |
710a9f562b | ||
![]() |
478f564631 | ||
![]() |
241e668ea2 | ||
![]() |
e6e8995e51 | ||
![]() |
2b81011b7e | ||
![]() |
2bb5e49cac | ||
![]() |
b4ec458dd5 | ||
![]() |
572c0c8aad | ||
![]() |
c0c909f9e8 | ||
![]() |
8b04a51b51 | ||
![]() |
d1f61330f3 | ||
![]() |
7097ae7f3c | ||
![]() |
3939ca9c12 | ||
![]() |
0300e28332 | ||
![]() |
13b1e661ea | ||
![]() |
b5399bd0ec | ||
![]() |
945bb03a27 | ||
![]() |
0f93647736 | ||
![]() |
ca4408c660 | ||
![]() |
ee030a6505 | ||
![]() |
326f510e4e | ||
![]() |
27e1493982 | ||
![]() |
3a5438b399 | ||
![]() |
e47a6dfb80 | ||
![]() |
b74544aa23 | ||
![]() |
3b567d096e | ||
![]() |
6b0fec0426 | ||
![]() |
f4a40f36b8 | ||
![]() |
556ea5acf8 | ||
![]() |
31e149d3d2 | ||
![]() |
a222173da6 | ||
![]() |
01e2377d86 | ||
![]() |
263e5a4358 | ||
![]() |
12d346a2c9 | ||
![]() |
bce2a49971 | ||
![]() |
2a5a1e0efb | ||
![]() |
4eecd92395 | ||
![]() |
cf909cd4d7 | ||
![]() |
107e7427d6 | ||
![]() |
79efd518a9 | ||
![]() |
6c492486a5 | ||
![]() |
a3499fcf34 | ||
![]() |
e0ac1f9562 | ||
![]() |
e02ff1ac53 | ||
![]() |
d765d60b22 | ||
![]() |
dab0083dcd | ||
![]() |
4e69cb7b68 | ||
![]() |
442a98cb70 | ||
![]() |
971cd92007 | ||
![]() |
c76dcb4361 | ||
![]() |
2459613b69 | ||
![]() |
d2e724b83e | ||
![]() |
3365365b56 | ||
![]() |
58547b091d | ||
![]() |
85deffe309 | ||
![]() |
919a2b5a49 | ||
![]() |
c2aedfe052 | ||
![]() |
70d73662ec | ||
![]() |
3573bb258b | ||
![]() |
afa0494067 | ||
![]() |
f771da5bdb | ||
![]() |
f6019f900d | ||
![]() |
7f148d257a | ||
![]() |
67df42b8a4 | ||
![]() |
7cd0cddf44 | ||
![]() |
f408bd89f4 | ||
![]() |
25194dbf13 | ||
![]() |
00369b053b | ||
![]() |
0f59177248 | ||
![]() |
f6b2044bea | ||
![]() |
111fb6c518 | ||
![]() |
38871e8b0d | ||
![]() |
d24429904c | ||
![]() |
914ddce850 | ||
![]() |
7ed222aadb | ||
![]() |
3cbb828863 | ||
![]() |
4b9b283e5c | ||
![]() |
e3c3dfe94d | ||
![]() |
75ebd8a0f2 | ||
![]() |
e14b877696 | ||
![]() |
406c5d8539 | ||
![]() |
5aa27ee40f | ||
![]() |
e78be366bc | ||
![]() |
2ccf74dd35 | ||
![]() |
41d27c5ad7 | ||
![]() |
bdb0dc3b86 | ||
![]() |
d1b37b045a | ||
![]() |
811fc172d7 | ||
![]() |
e4b9d8e695 | ||
![]() |
0e5aab95f5 | ||
![]() |
5d87a44ac4 | ||
![]() |
9f71814849 | ||
![]() |
e169dcf4de | ||
![]() |
265cbbec13 | ||
![]() |
dfe4514981 | ||
![]() |
7f554a1da5 | ||
![]() |
3da8943417 | ||
![]() |
e4dde7b5a1 | ||
![]() |
3a5f29ca28 | ||
![]() |
9011e4a125 | ||
![]() |
9f14b5f0a8 | ||
![]() |
1f2d150792 | ||
![]() |
cce27c4d0c | ||
![]() |
d2164e99ec | ||
![]() |
167a334142 | ||
![]() |
068f35e405 | ||
![]() |
e1a734e030 | ||
![]() |
8ca5259c1e | ||
![]() |
7c897e6c96 | ||
![]() |
668cea52fb | ||
![]() |
67b6fe41b8 | ||
![]() |
9de057e2cc | ||
![]() |
9e364902bf | ||
![]() |
5f6cacdf2a | ||
![]() |
eb33819302 | ||
![]() |
fae8e4436f | ||
![]() |
101dec15ca | ||
![]() |
fb3f888157 | ||
![]() |
42961e5092 | ||
![]() |
9f092c2d01 | ||
![]() |
78d5bdfb27 | ||
![]() |
e245821f93 | ||
![]() |
e5ce99533c | ||
![]() |
7a7b7d9235 | ||
![]() |
70683c4800 | ||
![]() |
32f8fe02bf | ||
![]() |
ec4637a430 | ||
![]() |
f48785876e | ||
![]() |
223a9df0d7 | ||
![]() |
c1aa1cf13c | ||
![]() |
7928cd6a2e | ||
![]() |
5894cc8a7d | ||
![]() |
ab58721930 | ||
![]() |
e5f7833b6a | ||
![]() |
6697f4e8c6 | ||
![]() |
fffda4d9ea | ||
![]() |
07b4efd267 | ||
![]() |
ccd2d3f586 | ||
![]() |
a36ee58753 | ||
![]() |
f0108d1c41 | ||
![]() |
83f264720c | ||
![]() |
79cab3fac8 | ||
![]() |
15e5a0fadb | ||
![]() |
0a103e62bd | ||
![]() |
48a580117a | ||
![]() |
579cf0afe9 | ||
![]() |
31958dfe1b | ||
![]() |
1be4bebe0a | ||
![]() |
24ff57eb70 | ||
![]() |
69cec726c3 | ||
![]() |
af35000028 | ||
![]() |
119d72b0ea | ||
![]() |
5908ee1605 | ||
![]() |
dc77b8904d | ||
![]() |
50bbc3cf01 | ||
![]() |
9bfcf4580e | ||
![]() |
cda8e2c746 | ||
![]() |
a1af30c814 | ||
![]() |
1b5f9554d1 | ||
![]() |
a074108305 | ||
![]() |
e6dbaa69bb | ||
![]() |
8bf079219a | ||
![]() |
532350f48d | ||
![]() |
82caae4c83 | ||
![]() |
384fdc46ba | ||
![]() |
f90bd54c1f | ||
![]() |
8bbccb27b9 | ||
![]() |
67d098ed1e | ||
![]() |
430e92adbc | ||
![]() |
b2efe239b6 | ||
![]() |
96dcb71fdd | ||
![]() |
7abeebc7eb | ||
![]() |
c2ba4e4971 | ||
![]() |
1bb0c628f3 | ||
![]() |
b853cfa40e | ||
![]() |
ec5c447264 | ||
![]() |
6242e642bc | ||
![]() |
59f462ff09 | ||
![]() |
c89b3cce44 | ||
![]() |
5743806ad8 | ||
![]() |
89cd24ad72 | ||
![]() |
fe75a3af39 | ||
![]() |
b69a220b05 | ||
![]() |
0781957e4e | ||
![]() |
614588f630 | ||
![]() |
e4276da661 | ||
![]() |
4a67d10770 | ||
![]() |
32bdd7be5e | ||
![]() |
83865c93de | ||
![]() |
9661d3568f | ||
![]() |
2dcd8ce83e | ||
![]() |
102cd25748 | ||
![]() |
79d7fb9e0f | ||
![]() |
e7b1bf420e | ||
![]() |
64fe544d0c | ||
![]() |
c65ddcdbc9 | ||
![]() |
09b5434d3c | ||
![]() |
c92497ce03 | ||
![]() |
8f88b6bec5 | ||
![]() |
7a8f2c835a | ||
![]() |
e8fc0b7735 | ||
![]() |
6102475daf | ||
![]() |
e9674ff8f5 | ||
![]() |
2ff4a236a6 | ||
![]() |
cfa53d0b1e | ||
![]() |
649dc72742 | ||
![]() |
cf14d9879f | ||
![]() |
53e68b9435 | ||
![]() |
36adcd8fc0 | ||
![]() |
8f661d8d8b | ||
![]() |
724edd7514 | ||
![]() |
c7a02a8719 | ||
![]() |
2cb2a682c6 | ||
![]() |
7320406161 | ||
![]() |
ff7d85a556 | ||
![]() |
3a6c41c1ea | ||
![]() |
4ebedb53d2 | ||
![]() |
16ca6eaee9 | ||
![]() |
67c66658ee | ||
![]() |
3f8593835d | ||
![]() |
d57ec415cd | ||
![]() |
2f185bf3ce | ||
![]() |
1191af61dd | ||
![]() |
1049bfb1d9 | ||
![]() |
b6002b55dc | ||
![]() |
7824dbc484 | ||
![]() |
97f513089a | ||
![]() |
0a32983443 | ||
![]() |
63c03f58a7 | ||
![]() |
7b5f164b26 | ||
![]() |
5652e2a49a | ||
![]() |
da1b436796 | ||
![]() |
50dad25442 | ||
![]() |
a572f8a37d | ||
![]() |
4800acce2c | ||
![]() |
1be68d06b2 | ||
![]() |
c42340387e | ||
![]() |
3e1d5c5551 | ||
![]() |
f295b434f8 | ||
![]() |
b337d88dd4 | ||
![]() |
c6b2257f15 | ||
![]() |
9b6d09ffab | ||
![]() |
bdd4c4b722 | ||
![]() |
46f01047a2 | ||
![]() |
81edbf0000 | ||
![]() |
ebd1522aea | ||
![]() |
4ed9b915f9 | ||
![]() |
60e5e1b749 | ||
![]() |
f7812cfb66 | ||
![]() |
a1748e3ca1 | ||
![]() |
0c414397e1 | ||
![]() |
e7dbbb0140 | ||
![]() |
bc840d233d | ||
![]() |
4a2847f03f | ||
![]() |
978d7fe738 | ||
![]() |
1175b75aa5 | ||
![]() |
c3851717b5 | ||
![]() |
2bfa6acb53 | ||
![]() |
d736fd0b49 | ||
![]() |
17c2ba71f0 | ||
![]() |
9612bf2e11 | ||
![]() |
fe40557d5c | ||
![]() |
4cf80b7f32 | ||
![]() |
05a98ac8b7 | ||
![]() |
92bb6933eb | ||
![]() |
4faedb08b8 | ||
![]() |
0bfd5f5543 | ||
![]() |
1c24751b8c | ||
![]() |
9fd9fdac25 | ||
![]() |
105df289cc | ||
![]() |
253d0af770 | ||
![]() |
9619df590c | ||
![]() |
cb620469e3 | ||
![]() |
76a77c7479 | ||
![]() |
be89d981d9 | ||
![]() |
b488d59047 | ||
![]() |
72a7265487 | ||
![]() |
fdd5f4cfe5 | ||
![]() |
35b4788180 | ||
![]() |
8c03c2c768 | ||
![]() |
80dfd4a2b8 | ||
![]() |
a88f5e6fa1 | ||
![]() |
7a8016abe5 | ||
![]() |
ef7d532008 | ||
![]() |
d600d61ec6 | ||
![]() |
bbc0ec5ea5 | ||
![]() |
5e4c288cea | ||
![]() |
477bc09965 | ||
![]() |
541cdf60e7 | ||
![]() |
75a9312fcb | ||
![]() |
3efc00ac29 | ||
![]() |
949c9eb9af | ||
![]() |
460705c401 | ||
![]() |
455402d640 | ||
![]() |
9fbca27acc | ||
![]() |
309d2508ca | ||
![]() |
7b7f5c1f19 | ||
![]() |
16d8ee9253 | ||
![]() |
dc03c4331c | ||
![]() |
2d958dd670 | ||
![]() |
bc7f62efe4 | ||
![]() |
3d89a3d474 | ||
![]() |
e08e86dbff | ||
![]() |
5530675d05 | ||
![]() |
13988c0b2a | ||
![]() |
c35bee0c65 | ||
![]() |
b698b07dde | ||
![]() |
077d6f056f | ||
![]() |
4c4d06310b | ||
![]() |
7b11668d04 | ||
![]() |
40d13df340 | ||
![]() |
d4522035cf | ||
![]() |
3e26d6ca35 | ||
![]() |
bd9beca6ef | ||
![]() |
7a254eb8ea | ||
![]() |
8cb6cb89d7 | ||
![]() |
224066836a | ||
![]() |
f11366a27d | ||
![]() |
6d14fd1be7 | ||
![]() |
3edc83802b | ||
![]() |
5ad52ae407 | ||
![]() |
4dc7185e7c | ||
![]() |
9ebbd85dde | ||
![]() |
fe06c5c91a | ||
![]() |
7ad0475c6d | ||
![]() |
4aed03f62b | ||
![]() |
4f3f7a0aed | ||
![]() |
b4cd7f51f1 | ||
![]() |
c7df15ce0e | ||
![]() |
6bcaead473 | ||
![]() |
4386f13cd9 | ||
![]() |
ec092bb980 | ||
![]() |
5f4c199ccc | ||
![]() |
7ed4de91b8 | ||
![]() |
9033044f0a | ||
![]() |
f14c19ba9e | ||
![]() |
4c324fe872 | ||
![]() |
e011143bfa | ||
![]() |
04756c8f38 | ||
![]() |
a41df224f6 | ||
![]() |
c27b9788dc | ||
![]() |
a4be3f441d | ||
![]() |
fa7a80b215 | ||
![]() |
65d9cfa6ef | ||
![]() |
2fcdf7a131 | ||
![]() |
224b0a9cb9 | ||
![]() |
58ed354c39 | ||
![]() |
06bab9d640 | ||
![]() |
9b33a95fab | ||
![]() |
f28dd1ac2c | ||
![]() |
a8d44db60f | ||
![]() |
b3a989b070 | ||
![]() |
16a8cf7d3e | ||
![]() |
e6a73fe3c3 | ||
![]() |
7a8e870d36 | ||
![]() |
e98f1df2f5 | ||
![]() |
9abab8ed1b | ||
![]() |
8e241834e0 | ||
![]() |
1236ae5b87 | ||
![]() |
47f8581788 | ||
![]() |
ac9de7ef51 | ||
![]() |
a406ebb68a | ||
![]() |
b3172ccc96 | ||
![]() |
a764b9f3e9 | ||
![]() |
ea75c2e00d | ||
![]() |
9aa23d8960 | ||
![]() |
1bf372f2d0 | ||
![]() |
305f1ba8fb | ||
![]() |
8a01a93424 | ||
![]() |
62c0802ae6 | ||
![]() |
ad56764f49 | ||
![]() |
7c2f2b38ea | ||
![]() |
719fea0c64 | ||
![]() |
4abc8ae385 | ||
![]() |
e011333e5a | ||
![]() |
d24d69d41e | ||
![]() |
091ed36a88 | ||
![]() |
35e32e3c05 | ||
![]() |
b882272d32 | ||
![]() |
28cc1b440c | ||
![]() |
1e87fd5122 | ||
![]() |
e663e4ac16 | ||
![]() |
6ab996ded9 | ||
![]() |
7658f813f6 | ||
![]() |
ec894f286a | ||
![]() |
e67b016b27 | ||
![]() |
e6dd4cff31 | ||
![]() |
3e84154462 | ||
![]() |
3a5e8c1ec6 | ||
![]() |
9e60447a4d | ||
![]() |
cf376ebb3f | ||
![]() |
9985c9b239 | ||
![]() |
dd1ed1c0d4 | ||
![]() |
ae74a6133f | ||
![]() |
db3e5f79da | ||
![]() |
91d5bfbf07 | ||
![]() |
b670c15d1d | ||
![]() |
b2633a5f50 | ||
![]() |
ee248287d3 | ||
![]() |
9e2e8fb18d | ||
![]() |
a8b8e6bd00 | ||
![]() |
c73ef98002 | ||
![]() |
fabfe1846f | ||
![]() |
e02ce4f03b | ||
![]() |
c474ae7b23 | ||
![]() |
a213f09616 | ||
![]() |
4d27965224 | ||
![]() |
7ffb1e0188 | ||
![]() |
480f621fbf | ||
![]() |
cb96a7bab8 | ||
![]() |
ebccd73378 | ||
![]() |
3f4ff0d292 | ||
![]() |
386e18634e | ||
![]() |
c9aca4f728 | ||
![]() |
279ff63e41 | ||
![]() |
9b9bdc2286 | ||
![]() |
54596580fb | ||
![]() |
fba15f118a | ||
![]() |
18fdbcd838 | ||
![]() |
7ac4592ebb | ||
![]() |
c7826edd46 | ||
![]() |
29647bf7a1 | ||
![]() |
282e933225 | ||
![]() |
1691e7188c | ||
![]() |
fc8294c46c | ||
![]() |
d6f0860fcf | ||
![]() |
56c3019a5c | ||
![]() |
90a076a043 | ||
![]() |
766d6dfcfd | ||
![]() |
028762a5b6 | ||
![]() |
c78f101e84 | ||
![]() |
830e0a7b2f | ||
![]() |
9c1eb32e24 | ||
![]() |
f938f66bb5 | ||
![]() |
2194af2f6b | ||
![]() |
a13a4f3b84 | ||
![]() |
9aa5dd4639 | ||
![]() |
d97ce8c67a | ||
![]() |
51915b44a1 | ||
![]() |
7502b87e06 | ||
![]() |
16cb904058 | ||
![]() |
a2b4a11617 | ||
![]() |
301e515319 | ||
![]() |
a4172e6763 | ||
![]() |
0dfb004ac0 | ||
![]() |
71a12bb770 | ||
![]() |
399a8d7620 | ||
![]() |
d6df41f3be | ||
![]() |
5f4429b3f8 | ||
![]() |
c3b956d0dc | ||
![]() |
82da556471 | ||
![]() |
1b179edc55 | ||
![]() |
c717a96455 | ||
![]() |
bbfe4ff26c | ||
![]() |
0aba7ba0db | ||
![]() |
7fc1ec3ae5 | ||
![]() |
03d7942b2f | ||
![]() |
7091b32239 | ||
![]() |
241dd68d30 | ||
![]() |
7b31b5e107 | ||
![]() |
a9987a6c2a | ||
![]() |
2ee2fe9eca | ||
![]() |
0a35f5b5e0 | ||
![]() |
3824e9d9bb | ||
![]() |
fc181973ce | ||
![]() |
0340166430 | ||
![]() |
2055820d30 | ||
![]() |
44b92d90f5 | ||
![]() |
322623427d | ||
![]() |
396f8153be | ||
![]() |
8bd51673bc | ||
![]() |
f25258ca20 | ||
![]() |
a81c3faf4b | ||
![]() |
e714c7e44e | ||
![]() |
461ece4bd7 | ||
![]() |
2461310ba2 | ||
![]() |
0bdc1eb1a2 | ||
![]() |
752bf51379 | ||
![]() |
6f2d8b6da6 | ||
![]() |
4f7704ad6f | ||
![]() |
9a81886b6a | ||
![]() |
7c3db6c9be | ||
![]() |
e9db102f26 | ||
![]() |
5fac561991 | ||
![]() |
751fef14be | ||
![]() |
43efa10cd9 | ||
![]() |
b1143e91ce | ||
![]() |
73ad24a682 | ||
![]() |
1172b54b9f | ||
![]() |
75cb4e8160 | ||
![]() |
fdfe0ba05c | ||
![]() |
6d209d8ddb | ||
![]() |
4e7b27a395 | ||
![]() |
728b700dba | ||
![]() |
f3ad519535 | ||
![]() |
d00f484408 | ||
![]() |
40c2d7ead0 | ||
![]() |
3f09aabf21 | ||
![]() |
9d811ac826 |
6
.github/workflows/backup-to-gitlab.yml
vendored
6
.github/workflows/backup-to-gitlab.yml
vendored
@ -8,10 +8,8 @@ concurrency:
|
||||
jobs:
|
||||
backup-to-gitlabwh:
|
||||
uses: linuxdeepin/.github/.github/workflows/backup-to-gitlabwh.yml@master
|
||||
secrets:
|
||||
BRIDGETOKEN: ${{ secrets.BRIDGETOKEN }}
|
||||
secrets: inherit
|
||||
|
||||
backup-to-gitee:
|
||||
uses: linuxdeepin/.github/.github/workflows/backup-to-gitee.yml@master
|
||||
secrets:
|
||||
GITEE_SYNC_TOKEN: ${{ secrets.GITEE_SYNC_TOKEN }}
|
||||
secrets: inherit
|
||||
|
12
.github/workflows/call-api-check.yml
vendored
Normal file
12
.github/workflows/call-api-check.yml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
name: apiCheck
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
api-check:
|
||||
uses: linuxdeepin/.github/.github/workflows/api-check.yml@master
|
17
.github/workflows/call-build-deb.yml
vendored
17
.github/workflows/call-build-deb.yml
vendored
@ -1,17 +0,0 @@
|
||||
name: Call build-deb
|
||||
on:
|
||||
pull_request_target:
|
||||
paths-ignore:
|
||||
- ".github/workflows/**"
|
||||
types: [ opened, closed, synchronize ]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-pull/${{ github.event.number }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
check_job:
|
||||
if: github.event.action != 'closed' || github.event.pull_request.merged
|
||||
uses: linuxdeepin/.github/.github/workflows/build-deb.yml@master
|
||||
secrets:
|
||||
BridgeToken: ${{ secrets.BridgeToken }}
|
@ -10,8 +10,4 @@ on:
|
||||
jobs:
|
||||
check_job:
|
||||
uses: linuxdeepin/.github/.github/workflows/build-distribution.yml@master
|
||||
secrets:
|
||||
BUILD_GPG_PRIVATE_KEY: ${{ secrets.BUILD_GPG_PRIVATE_KEY }}
|
||||
BUILD_SSH_PRIVATE_KEY: ${{ secrets.BUILD_SSH_PRIVATE_KEY }}
|
||||
WEBDAV_PASSWD: ${{ secrets.WEBDAV_PASSWD }}
|
||||
WEBDAV_USER: ${{ secrets.WEBDAV_USER }}
|
||||
secrets: inherit
|
||||
|
3
.github/workflows/call-chatOps.yml
vendored
3
.github/workflows/call-chatOps.yml
vendored
@ -6,5 +6,4 @@ on:
|
||||
jobs:
|
||||
chatopt:
|
||||
uses: linuxdeepin/.github/.github/workflows/chatOps.yml@master
|
||||
secrets:
|
||||
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
secrets: inherit
|
||||
|
3
.github/workflows/call-clacheck.yml
vendored
3
.github/workflows/call-clacheck.yml
vendored
@ -12,5 +12,4 @@ concurrency:
|
||||
jobs:
|
||||
clacheck:
|
||||
uses: linuxdeepin/.github/.github/workflows/cla-check.yml@master
|
||||
secrets:
|
||||
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
secrets: inherit
|
||||
|
20
.github/workflows/call-debian-check.yml
vendored
Normal file
20
.github/workflows/call-debian-check.yml
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
name: debianCheck
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
permissions:
|
||||
pull-requests: write
|
||||
contents: read
|
||||
checks: read
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
debian-check:
|
||||
uses: linuxdeepin/.github/.github/workflows/debian-check.yml@master
|
||||
with:
|
||||
job_name: "debian-check"
|
||||
|
17
.github/workflows/call-static-check.yml
vendored
Normal file
17
.github/workflows/call-static-check.yml
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
name: staticCheck
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
checks: write
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
static-check:
|
||||
uses: linuxdeepin/.github/.github/workflows/static-check.yml@master
|
13
.github/workflows/call-tag-build.yml
vendored
13
.github/workflows/call-tag-build.yml
vendored
@ -1,13 +0,0 @@
|
||||
name: tag build
|
||||
on:
|
||||
push:
|
||||
tags: "*"
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
uses: linuxdeepin/.github/.github/workflows/build-tag.yml@master
|
||||
secrets: inherit
|
2
.github/workflows/cppcheck.yml
vendored
2
.github/workflows/cppcheck.yml
vendored
@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: export
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
persist-credentials: false
|
||||
|
17
.gitignore
vendored
17
.gitignore
vendored
@ -13,6 +13,7 @@
|
||||
*.a
|
||||
|
||||
build*/
|
||||
obj-*-linux-gnu/
|
||||
*.pro.user*
|
||||
CMakeLists.txt.user*
|
||||
*.DS_Store
|
||||
@ -22,3 +23,19 @@ CMakeLists.txt.user*
|
||||
# binary file
|
||||
dde-dock
|
||||
.vscode
|
||||
|
||||
*/dbusinterface/generation_dbus_interface/
|
||||
*/*/dbusinterface/generation_dbus_interface/
|
||||
.transifexrc
|
||||
.cache
|
||||
|
||||
# debain
|
||||
debian/.debhelper/
|
||||
debian/dde-dock/
|
||||
debian/dde-dock-dev/
|
||||
debian/dde-dock-onboard-plugin/
|
||||
debian/tmp/
|
||||
debian/*.log
|
||||
debian/*.substvars
|
||||
debian/debhelper-build-stamp
|
||||
debian/files
|
||||
|
50
.obs/workflows.yml
Normal file
50
.obs/workflows.yml
Normal file
@ -0,0 +1,50 @@
|
||||
test_build:
|
||||
steps:
|
||||
- link_package:
|
||||
source_project: deepin:Develop:dde
|
||||
source_package: %{SCM_REPOSITORY_NAME}
|
||||
target_project: deepin:CI
|
||||
|
||||
- configure_repositories:
|
||||
project: deepin:CI
|
||||
repositories:
|
||||
- name: deepin_develop
|
||||
paths:
|
||||
- target_project: deepin:CI
|
||||
target_repository: deepin_develop
|
||||
architectures:
|
||||
- x86_64
|
||||
- aarch64
|
||||
|
||||
- name: debian
|
||||
paths:
|
||||
- target_project: deepin:CI
|
||||
target_repository: debian_sid
|
||||
architectures:
|
||||
- x86_64
|
||||
|
||||
- name: archlinux
|
||||
paths:
|
||||
- target_project: deepin:CI
|
||||
target_repository: archlinux
|
||||
architectures:
|
||||
- x86_64
|
||||
|
||||
filters:
|
||||
event: pull_request
|
||||
|
||||
tag_build:
|
||||
steps:
|
||||
- trigger_services:
|
||||
project: deepin:Unstable:dde
|
||||
package: %{SCM_REPOSITORY_NAME}
|
||||
filters:
|
||||
event: tag_push
|
||||
|
||||
commit_build:
|
||||
steps:
|
||||
- trigger_services:
|
||||
project: deepin:Develop:dde
|
||||
package: %{SCM_REPOSITORY_NAME}
|
||||
filters:
|
||||
event: push
|
3
.project
3
.project
@ -2,6 +2,5 @@
|
||||
"type": "homebrew" | "opensource",
|
||||
"3rdparty: ["*.xml"],
|
||||
"ignore": ["CHANGELOG.md", "./debian", "README.md", "./cmake", "technology-overview.md", "CMakeLists.txt", "CMakeLists.txt.user", "./plugins/plugin-guide", "./.tx", "*.qrc", "*.svg", "*.png", "*.qm", "*.ts"],
|
||||
"license": ["LICENSE"],
|
||||
"importantFile": ["gschema/com.deepin.dde.dock.module.gschema.xml", "interfaces/constants.h", "interfaces/pluginproxyinterface.h", "interfaces/pluginsiteminterface.h"]
|
||||
"license": ["LICENSE"]
|
||||
}
|
||||
|
19
.reuse/dep5
19
.reuse/dep5
@ -4,7 +4,7 @@ Upstream-Contact: UnionTech Software Technology Co., Ltd. <>
|
||||
Source: https://github.com/linuxdeepin/dde-dock
|
||||
|
||||
# ci
|
||||
Files: .github/* .gitlab-ci.yml
|
||||
Files: .github/* .gitlab-ci.yml .obs/*
|
||||
Copyright: None
|
||||
License: CC0-1.0
|
||||
|
||||
@ -24,7 +24,7 @@ Copyright: UnionTech Software Technology Co., Ltd.
|
||||
License: LGPL-3.0-or-later
|
||||
|
||||
# png svg
|
||||
Files: plugins/*.png plugins/*.svg frame/*.svg tests/*.png tests/*.svg
|
||||
Files: plugins/*.png plugins/*.svg frame/*.svg tests/*.png tests/*.svg plugins/*.dci
|
||||
Copyright: UnionTech Software Technology Co., Ltd.
|
||||
License: LGPL-3.0-or-later
|
||||
|
||||
@ -39,7 +39,8 @@ Copyright: None
|
||||
License: CC0-1.0
|
||||
|
||||
# xml toml json policy yaml
|
||||
Files: gschema/*.xml plugins/*.xml frame/*.xml .clog.toml plugins/*.json configs/*.json .packit.yaml .tx/config plugins/overlay-warning/com.deepin.dde.dock.overlay.policy plugins/dcc-dock-plugin/.tx/config
|
||||
Files: gschema/*.xml plugins/*.xml frame/*.xml .clog.toml plugins/*.json configs/*.json .packit.yaml .tx/config .tx/deepin.conf plugins/overlay-warning/com.deepin.dde.dock.overlay.policy plugins/dcc-dock-plugin/.tx/config
|
||||
frame/taskmanager/window_patterns.json
|
||||
Copyright: None
|
||||
License: CC0-1.0
|
||||
|
||||
@ -56,4 +57,14 @@ License: CC0-1.0
|
||||
# xml2cpp
|
||||
Files: frame/dbus/* plugins/disk-mount/dbus/dbusdiskmount.* plugins/power/dbus/dbuspower.* plugins/shutdown/dbus/dbuspowermanager.* plugins/tray/dbus/dbustraymanager.*
|
||||
Copyright: The Qt Company Ltd.
|
||||
License: CC0-1.0
|
||||
License: CC0-1.0
|
||||
|
||||
# policy kit
|
||||
Files: plugins/overlay-warning/org.deepin.dde.dock.overlay.policy
|
||||
Copyright: UnionTech Software Technology Co., Ltd.
|
||||
License: LGPL-3.0-or-later
|
||||
|
||||
Files: toolGenerate/**/*
|
||||
Copyright: None
|
||||
License: CC0-1.0
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
minimum_perc = 80
|
||||
mode = developer
|
||||
|
||||
[deepin-desktop-environment.dde-dock]
|
||||
[o:linuxdeepin:p:deepin-desktop-environment:r:dde-dock]
|
||||
file_filter = translations/dde-dock_<lang>.ts
|
||||
minimum_perc = 0
|
||||
source_file = translations/dde-dock.ts
|
||||
source_lang = en
|
||||
type = QT
|
||||
|
||||
|
2
.tx/deepin.conf
Normal file
2
.tx/deepin.conf
Normal file
@ -0,0 +1,2 @@
|
||||
[transifex]
|
||||
branch = m23
|
@ -1,13 +1,20 @@
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
if (NOT DEFINED VERSION)
|
||||
set(VERSION 4.0)
|
||||
set(VERSION 6.0.37)
|
||||
endif()
|
||||
|
||||
project(dde-dock)
|
||||
|
||||
find_package(DtkTools REQUIRED)
|
||||
|
||||
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
|
||||
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||
set(CMAKE_PREFER_PTHREAD_FLAG ON)
|
||||
|
||||
#set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
@ -26,6 +33,10 @@ endif()
|
||||
# generate a compile commands file as complete database for vim-YouCompleteMe or some other similar tools
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Install settings
|
||||
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(CMAKE_INSTALL_PREFIX /usr)
|
||||
endif ()
|
||||
include(GNUInstallDirs)
|
||||
|
||||
if (NOT (${CMAKE_BUILD_TYPE} MATCHES "Debug"))
|
||||
@ -45,8 +56,27 @@ if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "sw_64")
|
||||
add_definitions(-DDISABLE_SHOW_ANIMATION)
|
||||
endif()
|
||||
|
||||
file(GLOB INTERFACES "interfaces/*.h")
|
||||
function(generation_dbus_interface xmldir outdir)
|
||||
IF(EXISTS ${outdir})
|
||||
file(REMOVE_RECURSE ${outdir})
|
||||
ENDIF()
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${outdir})
|
||||
file(GLOB_RECURSE allXmls ${xmldir}/*.xml)
|
||||
foreach(XMLFILE ${allXmls})
|
||||
string(FIND ${XMLFILE} "/" INDEX REVERSE)
|
||||
string(SUBSTRING ${XMLFILE} ${INDEX} -1 classname)
|
||||
string(REPLACE "/" "" classname ${classname})
|
||||
string(REPLACE ".xml" "" classname ${classname})
|
||||
string(REPLACE "." "_" classname ${classname})
|
||||
string(TOLOWER ${classname} filename)
|
||||
|
||||
execute_process(COMMAND ${DTK_XML2CPP} -c ${classname} -p ${outdir}/${filename} ${XMLFILE}
|
||||
WORKING_DIRECTORY ${outdir})
|
||||
endforeach()
|
||||
endfunction(generation_dbus_interface)
|
||||
|
||||
file(GLOB INTERFACES "interfaces/*.h")
|
||||
add_definitions(-DCVERSION="${VERSION}")
|
||||
#因为单元测试需要直接测试源代码,而主程序代码中include的单元使用了相对路径
|
||||
#单元测试的CMakeLists和主程序的CMakeLists路径不同,编译单元测试时会提示找不到文件
|
||||
#因此设置搜索路径
|
||||
@ -59,9 +89,12 @@ include_directories(
|
||||
frame/item
|
||||
frame/item/components
|
||||
frame/item/resources
|
||||
frame/model
|
||||
frame/util
|
||||
frame/window
|
||||
frame/window/components
|
||||
frame/window/tray
|
||||
frame/window/tray/widgets
|
||||
frame/xcb
|
||||
../widgets
|
||||
../interfaces
|
||||
@ -72,11 +105,14 @@ aux_source_directory(frame/dbus DBUS)
|
||||
aux_source_directory(frame/dbus/sni SNI)
|
||||
aux_source_directory(frame/display DISPLAY)
|
||||
aux_source_directory(frame/item ITEM)
|
||||
aux_source_directory(frame/model MODEL)
|
||||
aux_source_directory(frame/item/components ITEMCOMPONENTS)
|
||||
aux_source_directory(frame/item/resources RESOURCES)
|
||||
aux_source_directory(frame/util UTIL)
|
||||
aux_source_directory(frame/window WINDOW)
|
||||
aux_source_directory(frame/window/components WINDOWCOMPONENTS)
|
||||
aux_source_directory(frame/window/tray WINDOWTRAY)
|
||||
aux_source_directory(frame/window/tray/widgets WINDOWTRAYWIDGET)
|
||||
aux_source_directory(frame/xcb XCB)
|
||||
|
||||
file(GLOB SRC_PATH
|
||||
@ -86,21 +122,19 @@ file(GLOB SRC_PATH
|
||||
${SNI}
|
||||
${DISPLAY}
|
||||
${ITEM}
|
||||
${MODEL}
|
||||
${ITEMCOMPONENTS}
|
||||
${UTIL}
|
||||
${WINDOW}
|
||||
${WINDOWCOMPONENTS}
|
||||
${WINDOWTRAY}
|
||||
${WINDOWTRAYWIDGET}
|
||||
${XCB}
|
||||
)
|
||||
|
||||
add_subdirectory("frame")
|
||||
add_subdirectory("plugins")
|
||||
add_subdirectory("tests")
|
||||
|
||||
# Install settings
|
||||
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(CMAKE_INSTALL_PREFIX /usr)
|
||||
endif ()
|
||||
#add_subdirectory("tests")
|
||||
|
||||
## qm files
|
||||
file(GLOB QM_FILES "translations/*.qm")
|
||||
@ -116,15 +150,19 @@ install(FILES ${CMAKE_BINARY_DIR}/dde-dock.pc
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
|
||||
configure_file(
|
||||
${CMAKE_SOURCE_DIR}/cmake/DdeDock/DdeDockConfig.cmake.in
|
||||
${CMAKE_SOURCE_DIR}/cmake/DdeDock/DdeDockConfig.cmake
|
||||
${CMAKE_SOURCE_DIR}/cmake/DdeDock/DdeDockConfig.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/DdeDockConfig.cmake
|
||||
@ONLY)
|
||||
install(FILES "cmake/DdeDock/DdeDockConfig.cmake"
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/DdeDockConfig.cmake
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DdeDock)
|
||||
|
||||
install(FILES gschema/com.deepin.dde.dock.module.gschema.xml
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/glib-2.0/schemas)
|
||||
|
||||
#dconfig
|
||||
file(GLOB DCONFIG_FILES "configs/*.json")
|
||||
install(FILES ${DCONFIG_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/dsg/configs/dde-dock/)
|
||||
|
||||
# Address Sanitizer 内存错误检测工具,打开下面的编译选项可以看到调试信息,正常运行时不需要这些信息
|
||||
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fsanitize=address -O2")
|
||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address -O2")
|
||||
|
232
LICENSES/GPL-3.0-or-later.txt
Normal file
232
LICENSES/GPL-3.0-or-later.txt
Normal file
@ -0,0 +1,232 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
“This License” refers to version 3 of the GNU General Public License.
|
||||
|
||||
“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
|
||||
|
||||
“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
|
||||
|
||||
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
|
||||
|
||||
A “covered work” means either the unmodified Program or a work based on the Program.
|
||||
|
||||
To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
|
||||
|
||||
To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
|
||||
|
||||
A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
|
||||
|
||||
The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
|
||||
|
||||
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
|
||||
|
||||
A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
|
||||
|
||||
“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
|
||||
|
||||
An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
|
||||
|
||||
A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
|
||||
|
||||
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program 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 3 of the License, or (at your option) any later version.
|
||||
|
||||
This program 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/philosophy/why-not-lgpl.html>.
|
@ -2,34 +2,36 @@
|
||||
pkgname=deepin-dock-git
|
||||
pkgver=5.5.9.r54.g49d37a6c0
|
||||
pkgrel=1
|
||||
sourcename=dde-dock
|
||||
sourcetars=("$sourcename"_"$pkgver".tar.xz)
|
||||
sourcedir="$sourcename"
|
||||
pkgdesc='Deepin desktop-environment - dock module'
|
||||
arch=('x86_64' 'aarch64')
|
||||
url="https://github.com/linuxdeepin/dde-dock"
|
||||
license=('LGPL-3.0-or-later')
|
||||
depends=('qt5-svg' 'deepin-daemon-git' 'deepin-qt5integration-git'
|
||||
'deepin-qt-dbus-factory-git' 'libdbusmenu-qt5')
|
||||
makedepends=('git' 'cmake' 'ninja' 'qt5-tools' 'gtest' 'gmock'
|
||||
'dtkcommon-git' 'dtkcore-git' 'deepin-qt5integration-git'
|
||||
'deepin-qt-dbus-factory' 'libdbusmenu-qt5'
|
||||
'deepin-control-center-git')
|
||||
'deepin-qt-dbus-factory-git' 'libdbusmenu-qt5' 'dtkcommon-git'
|
||||
'dtkcore-git' 'deepin-qt5integration-git'
|
||||
'libdbusmenu-qt5' 'deepin-control-center-git' 'dwayland-git')
|
||||
makedepends=('git' 'cmake' 'ninja' 'qt5-tools' 'gtest' 'gmock' 'extra-cmake-modules')
|
||||
conflicts=('deepin-dock')
|
||||
provides=('deepin-dock')
|
||||
optdepends=('deepin-network-core-git')
|
||||
groups=('deepin-git')
|
||||
source=('source.tar.gz')
|
||||
source=("${sourcetars[@]}")
|
||||
sha512sums=('SKIP')
|
||||
|
||||
prepare() {
|
||||
cd $deepin_source_name
|
||||
cd $sourcedir
|
||||
}
|
||||
|
||||
build() {
|
||||
cd $deepin_source_name
|
||||
cd $sourcedir
|
||||
cmake . -GNinja -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib -DDOCK_TRAY_USE_NATIVE_POPUP=YES
|
||||
ninja
|
||||
}
|
||||
|
||||
package() {
|
||||
cd $deepin_source_name
|
||||
cd $sourcedir
|
||||
DESTDIR="$pkgdir" ninja install
|
||||
}
|
||||
|
@ -1,2 +0,0 @@
|
||||
set(DDE_DOCK_INCLUDE_DIR /usr/local/include/dde-dock)
|
||||
include_directories("${DDE_DOCK_INCLUDE_DIR}")
|
197
configs/com.deepin.dde.dock.json
Normal file
197
configs/com.deepin.dde.dock.json
Normal file
@ -0,0 +1,197 @@
|
||||
{
|
||||
"magic": "dsg.config.meta",
|
||||
"version": "1.0",
|
||||
"contents": {
|
||||
"Window_Size_Fashion": {
|
||||
"value": 48,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Window_Size_Fashion",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Icon_Size": {
|
||||
"value": 36,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Icon_Size",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Position": {
|
||||
"value": "bottom",
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Position",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Hide_Timeout": {
|
||||
"value": 0,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Hide_Timeout",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Hide_Mode": {
|
||||
"value": "keep-showing",
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Hide_Mode",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "The value will influence when the dock is shown or hidden.",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Show_Timeout": {
|
||||
"value": 100,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Show_Timeout",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Window_Size_Efficient": {
|
||||
"value": 40,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Window_Size_Efficient",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Plugin_Settings": {
|
||||
"value": "{}",
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Plugin_Settings",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Docked_Apps": {
|
||||
"value": ["/usr/share/applications/dde-file-manager", "/usr/share/applications/uos-browser", "/usr/share/applications/org.deepin.browser", "/usr/share/applications/deepin-appstore", "/usr/share/applications/deepin-app-store", "/usr/share/applications/com.deepin.store.intranet", "/usr/share/applications/deepin-album", "/usr/share/applications/deepin-music", "/usr/share/applications/deepin-contacts", "/usr/share/applications/dde-calendar", "/usr/share/applications/dde-control-center"],
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Docked_Apps",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "The default apps which is docked when dock is started.",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Win_Icon_Preferred_Apps": {
|
||||
"value": ["apps.com.qq.im", "deepin.com.qq.im", "apps.com.qq.im.light", "apps.com.qq.b.eim", "apps.com.qq.rtxclient"],
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Win_Icon_Preferred_Apps",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Delay_Plugins_Time": {
|
||||
"value": 0,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Delay_Plugins_Time",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Force_Quit_App": {
|
||||
"value": "enabled",
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Force_Quit_App",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Display_Mode": {
|
||||
"value": "fashion",
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Display_Mode",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "The dock gets different display mode, for instance, dock looks like win7 taskbar on classic mode.",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Recent_App": {
|
||||
"value": [],
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Recent_App",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "The apps which has been opened recently when dock is started",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Show_Recent": {
|
||||
"value": false,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Show_Recent",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "show or hide recent app in dock",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Show_MultiWindow": {
|
||||
"value": false,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Show_MultiWindow",
|
||||
"name[zh_CN]": "*****",
|
||||
"description": "show or hide Multi Window in dock when the Entry has subWindow",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Dock_Show_Window_name":{
|
||||
"value":0,
|
||||
"serial":0,
|
||||
"flags":"",
|
||||
"name":"小窗口显示窗口名称",
|
||||
"name[zh_CN]":"小窗口显示窗口名称",
|
||||
"description[zh_CN]": "提供鼠标悬停小窗口标题显示配置,默认为悬停显示: \n 当配置为全部显示时,鼠标悬停在任务栏图标位置时所有预览窗口显示标题信息; \n 当配置为悬停显示时,鼠标仅在悬停在预览小窗口时在当前窗口显示标题信息; \n当配置为不显示时,鼠标悬停应用位置和预览小窗口位置时都不显示标题信息;",
|
||||
"description":"0 Mouse over show;1 Always show; 2 Always hide",
|
||||
"permissions":"readwrite",
|
||||
"visibility":"public"
|
||||
},
|
||||
"Dock_Quick_Plugins": {
|
||||
"value": ["power", "network", "shutdown", "show-desktop", "multitasking", "notification", "uosai"],
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Quick Plugins show on dock",
|
||||
"name[zh_CN]": "显示在任务栏上的快捷插件",
|
||||
"description": "记录哪些插件的图标在任务栏启动的时候显示在任务栏上",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"Dock_Quick_Tray_Name": {
|
||||
"value": ["fcitx", "indicator:keybord_layout"],
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "Tray icons show on dock",
|
||||
"name[zh_CN]": "任务栏上固定的托盘图标",
|
||||
"description": "记录哪些托盘的图标在任务栏启动的时候显示在任务栏上",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
{
|
||||
"magic":"dsg.config.meta",
|
||||
"version":"1.0",
|
||||
"contents":{
|
||||
"showWindowName":{
|
||||
"value":0,
|
||||
"serial":0,
|
||||
"flags":[],
|
||||
"name":"小窗口显示窗口名称",
|
||||
"name[zh_CN]":"小窗口显示窗口名称",
|
||||
"description[zh_CN]":"提供鼠标悬停小窗口标题显示配置,默认为悬停显示: \
|
||||
当配置为全部显示时,鼠标悬停在任务栏图标位置时所有预览窗口显示标题信息; \
|
||||
当配置为悬停显示时,鼠标仅在悬停在预览小窗口时在当前窗口显示标题信息; \
|
||||
当配置为不显示时,鼠标悬停应用位置和预览小窗口位置时都不显示标题信息;",
|
||||
"description":"0 Mouse over show;1 Always show; 2 Always hide",
|
||||
"permissions":"readwrite",
|
||||
"visibility":"private"
|
||||
},
|
||||
"alwaysHideDock":{
|
||||
"value": false,
|
||||
"serial": 0,
|
||||
"flags":[],
|
||||
"name":"alwaysHideDock",
|
||||
"name[zh_CN]":"一直隐藏",
|
||||
"description[zh_CN]":"当设置为true时,即使鼠标放在任务栏区域也不会显示任务栏;配置即时生效",
|
||||
"description":"ture: Dock is hidden all the time, false: Depend on other settings of dock",
|
||||
"permissions":"readwrite",
|
||||
"visibility":"private"
|
||||
},
|
||||
"toggleDesktopInterval":{
|
||||
"value": 0,
|
||||
"serial": 0,
|
||||
"flags":[],
|
||||
"name":"toggleDesktopInterval",
|
||||
"name[zh_CN]":"显示(或恢复)桌面的悬浮时间间隔",
|
||||
"description[zh_CN]":"显示(或恢复)桌面将在悬停间隔后切换(以毫秒为单位)",
|
||||
"description":"show(or restore) desktop will toggle after the hover interval (in milliseconds)",
|
||||
"permissions":"readwrite",
|
||||
"visibility":"private"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"magic":"dsg.config.meta",
|
||||
"version":"1.0",
|
||||
"contents":{
|
||||
"contextMenu":{
|
||||
"value": ["Shutdown", "Reboot", "Suspend", "Hibernate", "Lock", "Logout", "SwitchUser", "PowerSettings"],
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "ContextMenu",
|
||||
"name[zh_CN]": "电源按钮右键菜单",
|
||||
"description[zh_CN]": "电源界面的右键菜单内容,如需不显示某个选项,移除即可;默认值:\"Shutdown\", \"Reboot\", \"Suspend\", \"Hibernate\", \"Lock\", \"Logout\", \"SwitchUser\", \"PowerSettings\";",
|
||||
"description":"",
|
||||
"permissions":"readwrite",
|
||||
"visibility":"private"
|
||||
}
|
||||
}
|
||||
}
|
46
configs/org.deepin.dde.dock.power.json
Normal file
46
configs/org.deepin.dde.dock.power.json
Normal file
@ -0,0 +1,46 @@
|
||||
{
|
||||
"magic": "dsg.config.meta",
|
||||
"version": "1.0",
|
||||
"contents": {
|
||||
"control": {
|
||||
"value": false,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "contorl",
|
||||
"name[zh_CN]": "控制",
|
||||
"description": "阻止鼠标事件",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"enable": {
|
||||
"value": true,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "enable",
|
||||
"name[zh_CN]": "使能",
|
||||
"description": "使能电源管理模块。",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
},
|
||||
"showtimetofull":{
|
||||
"value": true,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "showtimetofull",
|
||||
"name[zh_CN]": "显示完整时间",
|
||||
"description": "是否显示电池使用时间/剩余充电时间。",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "public"
|
||||
},
|
||||
"menu-enable":{
|
||||
"value": true,
|
||||
"serial": 0,
|
||||
"flags": [],
|
||||
"name": "menu-enable",
|
||||
"name[zh_CN]": "使能菜单",
|
||||
"description": "使能菜单。",
|
||||
"permissions": "readwrite",
|
||||
"visibility": "private"
|
||||
}
|
||||
}
|
||||
}
|
536
debian/changelog
vendored
536
debian/changelog
vendored
@ -1,4 +1,536 @@
|
||||
dde-dock (3.0.12) unstable; urgency=low
|
||||
dde-dock (6.0.37) unstable; urgency=medium
|
||||
|
||||
* release 6.0.37
|
||||
* fix linuxdeepin/developer-center#7612
|
||||
|
||||
-- Mike Chen <chenke@deepin.org> Wed, 03 Apr 2024 10:22:29 +0800
|
||||
|
||||
dde-dock (6.0.36) unstable; urgency=medium
|
||||
|
||||
* release 6.0.36
|
||||
* fix linuxdeepin/developer-center#7222
|
||||
* fix linuxdeepin/developer-center#7207
|
||||
* fix linuxdeepin/developer-center#6454
|
||||
|
||||
-- Mike Chen <chenke@deepin.org> Wed, 06 Mar 2024 16:50:36 +0800
|
||||
|
||||
dde-dock (6.0.35) unstable; urgency=medium
|
||||
|
||||
* feat: adjust dock ui
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Thu, 01 Feb 2024 10:58:27 +0800
|
||||
|
||||
dde-dock (6.0.34) unstable; urgency=medium
|
||||
|
||||
* fix: dock animation broken (https://github.com/linuxdeepin/developer-center/issues/7143)
|
||||
* fix: dock plugin calculated to an incorrect size (https://github.com/linuxdeepin/developer-center/issues/7127)
|
||||
* fix: dock will not auto hide after set size (https://github.com/linuxdeepin/developer-center/issues/7129)
|
||||
* fix: dock plugin unable to click when in keep hide (https://github.com/linuxdeepin/developer-center/issues/7132)
|
||||
* fix: dock item indicator not update (https://github.com/linuxdeepin/developer-center/issues/7097)
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Tue, 30 Jan 2024 16:17:59 +0800
|
||||
|
||||
dde-dock (6.0.33) unstable; urgency=medium
|
||||
|
||||
* fix: tmp block uosai in quickpanel
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Fri, 26 Jan 2024 14:38:06 +0800
|
||||
|
||||
dde-dock (6.0.32) unstable; urgency=medium
|
||||
|
||||
* fix: dock get max size when positionChanged and KeepHide mode (https://github.com/linuxdeepin/developer-center/issues/7040)
|
||||
* fix: dock not remove plugin when fcitx exit (https://github.com/linuxdeepin/developer-center/issues/7080)
|
||||
* fix: dock theme not follow system (https://github.com/linuxdeepin/developer-center/issues/7090)
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Thu, 25 Jan 2024 14:30:26 +0800
|
||||
|
||||
dde-dock (6.0.31) unstable; urgency=medium
|
||||
|
||||
* fix: error datetime tooltip (https://github.com/linuxdeepin/developer-center/issues/7056)
|
||||
* fix: unable get docked entriy by soft link path (https://github.com/linuxdeepin/developer-center/issues/7033)
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Tue, 23 Jan 2024 17:43:44 +0800
|
||||
|
||||
dde-dock (6.0.30) unstable; urgency=medium
|
||||
|
||||
* chore: remove Cooperation in display plugin (https://github.com/linuxdeepin/developer-center/issues/7023)
|
||||
|
||||
-- chenhongtao <chenhongtao@deepin.org> Mon, 22 Jan 2024 17:27:34 +0800
|
||||
|
||||
dde-dock (6.0.29) unstable; urgency=medium
|
||||
|
||||
* fix: when no timeformat, tooltip is empty
|
||||
|
||||
-- chenhongtao <chenhongtao@deepin.org> Mon, 22 Jan 2024 09:47:21 +0800
|
||||
|
||||
dde-dock (6.0.28) unstable; urgency=medium
|
||||
|
||||
* fix: the item that removed is exist yet (https://github.com/linuxdeepin/developer-center/issues/4631)
|
||||
* fix: dock wakeup area not changed (https://github.com/linuxdeepin/developer-center/issues/5831)
|
||||
* fix: onboard not to show on first click (https://github.com/linuxdeepin/developer-center/issues/6675)
|
||||
* fix: timedate tips show error (https://github.com/linuxdeepin/developer-center/issues/6674)
|
||||
* fix: quickpanel icon not follow theme (https://github.com/linuxdeepin/developer-center/issues/6263)
|
||||
* fix: disable resize of dock popup window (https://github.com/linuxdeepin/developer-center/issues/6264)
|
||||
* feat: add dbus property window margin
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Thu, 18 Jan 2024 09:57:27 +0800
|
||||
|
||||
dde-dock (6.0.27) unstable; urgency=medium
|
||||
|
||||
* fix: dock get stucked when launching (https://github.com/linuxdeepin/developer-center/issues/6657)
|
||||
* chore: make uosai default on dock (https://github.com/linuxdeepin/developer-center/issues/6486)
|
||||
* chore: open deepin-calendar instead of dde-widgets when click timedate (https://github.com/linuxdeepin/developer-center/issues/6696)
|
||||
* fix: item context menu not updated
|
||||
* feat: add plugin notification (https://github.com/linuxdeepin/developer-center/issues/6695)
|
||||
* fix: mainwindow hide when popup opens (https://github.com/linuxdeepin/developer-center/issues/4970)
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Tue, 09 Jan 2024 13:33:18 +0800
|
||||
|
||||
dde-dock (6.0.26) unstable; urgency=medium
|
||||
|
||||
* release 6.0.26
|
||||
* fix #6033 #5719 #5786 #4331
|
||||
|
||||
-- mike <chenke@deepin.org> Fri, 29 Dec 2023 11:27:59 +0800
|
||||
|
||||
dde-dock (6.0.25) unstable; urgency=medium
|
||||
|
||||
* chore: turn on bluetooth loading animation when not start
|
||||
* fix: fix again set dcc dock plugin icon pixelated
|
||||
|
||||
-- chenhongtao <chenhongtao@deepin.org> Wed, 13 Dec 2023 15:31:57 +0800
|
||||
|
||||
dde-dock (6.0.24) unstable; urgency=medium
|
||||
|
||||
* chore: use system icon first
|
||||
* fix: dcc dock plugin icon pixelated
|
||||
* fix some coredump issue
|
||||
* fix: brightness silder cannot sroll when is 28
|
||||
* tidy up some log
|
||||
|
||||
-- chenhongtao <chenhongtao@deepin.org> Tue, 28 Nov 2023 10:51:52 +0800
|
||||
|
||||
dde-dock (6.0.23) unstable; urgency=medium
|
||||
|
||||
* fix: displayplugin disappear when monitor count changed
|
||||
* fix: tray disappear when drag finished
|
||||
* fix: double tray show afeter drag into expandTray and drag back
|
||||
* chore: remove unused dbus
|
||||
* chore: Adapt time format feature(Issue: https://github.com/linuxdeepin/developer-center/issues/5902)
|
||||
|
||||
-- Deepin Packages Builder <packages@deepin.org> Thu, 26 Oct 2023 17:25:38 +0800
|
||||
|
||||
dde-dock (6.0.22) unstable; urgency=medium
|
||||
|
||||
* fix: a space on tray without trash show
|
||||
* fix: coredump empty tray when switch postion
|
||||
* fix: Can't hide when DockPopupWindow deactivate(Issue: https://github.com/linuxdeepin/developer-center/issues/5405)
|
||||
* fix: datetime size error
|
||||
* fix: tool appAreaWidget visible
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Mon, 11 Sep 2023 13:14:25 +0800
|
||||
|
||||
dde-dock (6.0.21) unstable; urgency=medium
|
||||
|
||||
* fix: add lost windowSizeChanged Signal
|
||||
* fix: brightness update, update main view slider
|
||||
* chore: make trash not display in default
|
||||
* fix: click preview container not active window
|
||||
* feat: Remove dock-hotspot-plugin by Conflicts
|
||||
* feat: use new am dbus interface
|
||||
* feat: when new am avaliable do not load custom desktopfile
|
||||
* fix: dock coredump when update recentApp invisible
|
||||
* feat: make unrecongnized application not dock on dde-dock
|
||||
* fix: datetime font size error
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Wed, 06 Sep 2023 14:20:11 +0800
|
||||
|
||||
dde-dock (6.0.20) unstable; urgency=medium
|
||||
|
||||
* fix: xebmbedtary click get no response in Efficient mode
|
||||
* fix: add hideModeChanged signal
|
||||
* fix: adjust the slider to set the sound multiple times
|
||||
* fix: dock autohide even trayGridWidget show
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Thu, 24 Aug 2023 15:30:37 +0800
|
||||
|
||||
dde-dock (6.0.19) unstable; urgency=medium
|
||||
|
||||
* fix: no positionModeChanged signal
|
||||
* fix: some app do not display
|
||||
* fix: plugin set show on dock more times, also need same times call unshow
|
||||
* fix: applicationpreview scale not keep aspectratio
|
||||
* fix: click always activate application in TrayGridWidget
|
||||
* fix: not show with launcher when hide
|
||||
* fix: coredump when open jetbrains-toolbox
|
||||
|
||||
-- Tsic404 <liuheng@deepin.org> Mon, 07 Aug 2023 17:08:30 +0800
|
||||
|
||||
dde-dock (6.0.18) unstable; urgency=medium
|
||||
|
||||
* fix: dock entries not update after displaymode changed
|
||||
* fix: official chrome unable to be identified
|
||||
|
||||
-- Deepin Packages Builder <liuheng@deepin.org> Mon, 24 Jul 2023 16:20:32 +0800
|
||||
|
||||
dde-dock (6.0.17) unstable; urgency=medium
|
||||
|
||||
* fix: dock position changed from left to bottom no date display
|
||||
* fix: DockPopupWindow losing active status(Issue: #172773)
|
||||
* fix: make keyboard layout plugin size fixed
|
||||
* fix: adjust tray icon size to 20
|
||||
* fix: incorrect trash status when deleting file in other partition
|
||||
* fix: imcomplete display when dock plugin's tips text is multi-line
|
||||
* fix: Fix the incomplete display of text when font 20 is scaled to 1.25(Influence: 电脑协同显示区域)
|
||||
* fix: text missing translation(Influence: 文本显示)
|
||||
* fix: 修复'Brightness' 文本裁切问题(Influence: 文本显示)
|
||||
* chore: chore: update translate
|
||||
* chore: update dependencies
|
||||
* fix: tips font size not follow system
|
||||
* fix: 任务栏声音面板中出现异常的悬浮提示 (#876)
|
||||
* fix: the name of sound device shouldn't be edited (#880)
|
||||
* refactor: rewrite encapsulation of the dconfig
|
||||
* refactor: Rewrite the calling method of dock settings
|
||||
* chore: update .gitignore add debian and build ignore
|
||||
* feat: add taskmanager from dde-application-manager
|
||||
* fix: dock size error when dock positon changed
|
||||
|
||||
-- Deepin Packages Builder <packages@deepin.org> Tue, 11 Jul 2023 09:50:13 +0800
|
||||
|
||||
dde-dock (6.0.16) unstable; urgency=medium
|
||||
|
||||
* fix: blank in the plugin area after recorder screen
|
||||
|
||||
-- tsic404 <liuheng@deepin.org> Thu, 11 May 2023 17:30:39 +0800
|
||||
|
||||
dde-dock (6.0.15) unstable; urgency=medium
|
||||
|
||||
* update translate
|
||||
* fix: timedate size is too full
|
||||
* fix: popupwindow is out of bounds at the edge of the screen
|
||||
|
||||
-- Tsic404 <liuheng@deepin.org> Thu, 11 May 2023 15:02:33 +0800
|
||||
|
||||
dde-dock (6.0.14) unstable; urgency=medium
|
||||
|
||||
* fix: trash do not display when dock hide and trash readded into dock
|
||||
* fix: popupwindow need click destkop twice to hide
|
||||
* fix: sound plugin style adjust
|
||||
* fix: window radius
|
||||
* fix: coredump after screen recorder finished, when drag something
|
||||
* fix: fcitx5 keyboard tray icon blur
|
||||
|
||||
-- Tsic404 <liuheng@deepin.org> Sat, 06 May 2023 16:59:15 +0800
|
||||
|
||||
dde-dock (6.0.13) unstable; urgency=medium
|
||||
|
||||
* fix appitem indicator wrong position
|
||||
* fix fixed_plugin unable to show after click undock
|
||||
* fix desktopfile unable drag into dock and make it docked
|
||||
|
||||
-- Tsic404 <liuheng@deepin.org> Fri, 21 Apr 2023 09:39:23 +0800
|
||||
|
||||
dde-dock (6.0.12) unstable; urgency=medium
|
||||
|
||||
* fix sni tray unable to click after first left click
|
||||
* adjust contol panel style
|
||||
* do not handle dci scale
|
||||
|
||||
-- Tsic404 <liuheng@deepin.org> Mon, 17 Apr 2023 10:01:13 +0800
|
||||
|
||||
dde-dock (6.0.11) unstable; urgency=medium
|
||||
|
||||
* fix: timedate display widget size error
|
||||
* fix: when there is focus on dockpopupwindow, it hide
|
||||
* fix: modify the color of the area not covered by the slider
|
||||
* fix: dont hide all close button(Task: 3608)
|
||||
* fix: abnormally display battery plug-in in the quick-trays
|
||||
* fix: when multiscreen connected non-primary display unable to click popupwindow
|
||||
* fix: xembed tray flew out
|
||||
* fix: dont hide all close button
|
||||
* fix: timedate alway request timedate format
|
||||
* fix: multitasking no response sometime
|
||||
* fix: FixedLlugin disapprear after drag
|
||||
* fix: disk popup does not hide(Issue: 3813)
|
||||
|
||||
feat: DockPopupWindow reimplemeted by DBlurEffectWidget
|
||||
|
||||
-- Tsic404 <liuheng@deepin.org> Fri, 14 Apr 2023 11:30:52 +0800
|
||||
|
||||
dde-dock (6.0.10) unstable; urgency=medium
|
||||
|
||||
[ bugfix ]
|
||||
* fix: dock active color not follow dde-control-center
|
||||
* fix: tray overhanging text
|
||||
* fix: tray always reset while dragging quickItem to tray
|
||||
* fix: splash preview container
|
||||
* fix: unmute when changed volume
|
||||
* fix: expandwidget tray item can be selected
|
||||
* fix: plugin back button not support hiDPI
|
||||
* fix: bluetooth not refresh button
|
||||
* fix: Icon of trashs is too large in small dock
|
||||
* fix: radius for tray background
|
||||
* fix: abnormal display of sound output device list
|
||||
* fix: launcher shown in a wrong location while multi screens connected
|
||||
* fix: multitasking unable to remove
|
||||
* fix: unable call selected app preview window
|
||||
|
||||
-- Tsic404 <liuheng@deepin.org> Wed, 29 Mar 2023 13:19:37 +0800
|
||||
|
||||
dde-dock (6.0.9.2) unstable; urgency=medium
|
||||
|
||||
[ TagBuilder ]
|
||||
* fix: 修复拖动插件到任务栏后所有插件都显示的问题(Bug: 181945)(Influence: 默认所有的快捷面板中的插件都在任务栏显示,从控制中心取消所有插件的勾选,然后从快捷面板拖动一个插件到任务栏,观察任务栏插件显示情况)
|
||||
* fix: 修复切换主题快捷面板插件主题颜色没有变化(Bug: 184085)(Influence: 打开快捷面板,切换主题,观察图标颜色显示是否正常)
|
||||
|
||||
-- lvpeilong <lvpeilong@uniontech.com> Thu, 02 Feb 2023 13:30:36 +0800
|
||||
|
||||
dde-dock (6.0.9.1) unstable; urgency=medium
|
||||
|
||||
[ TagBuilder ]
|
||||
* chore: 更新changelog(Task: 227573)(Influence: 版本号)
|
||||
* fix: 修复移除蓝牙设备后任务栏插件不消失的问题(Bug: 181945)(Influence: 插上蓝牙,从控制中心勾选该插件,在任务栏显示,然后移除蓝牙设备,观察任务栏的蓝牙图标是否消失)
|
||||
* fix: 修复从任务栏向上拖动插件引起任务栏崩溃的问题(Bug: 181945)(Influence: 从任务栏向上拖动插件,观察任务栏是否正常)
|
||||
* fix: 修复从托盘拖动图标到任务栏引起崩溃的问题(Bug: 181945)(Influence: 将托盘图标拖动到任务栏)
|
||||
* fix: 修改插件区域出现重复的电池图标问题(Bug: 184085)(Influence: 任务栏-电池图标状态刷新)
|
||||
* fix: 修复高缩放率下图标显示异常的问题(Bug: 183543, 184089)(Influence: 高分屏,高缩放率,观察任务栏插件区域的图标)
|
||||
* fix: 修复系统主题变化后快捷面板电池颜色显示错误的问题(Bug: 184085)(Influence: 打开快捷面板,在控制中心更改系统颜色,观察快捷面板中系统电池图标是否跟随系统颜色变化)
|
||||
* fix: 更新翻译文案(Task: 226203)(Influence: 从笔记本上观察控制中心个性化中电池的文案)
|
||||
|
||||
-- lvpeilong <lvpeilong@uniontech.com> Wed, 01 Feb 2023 15:26:25 +0800
|
||||
|
||||
dde-dock (6.0.8.1) unstable; urgency=medium
|
||||
|
||||
[ TagBuilder ]
|
||||
* style: 解决编译不通过的问题(Task: 96831)(Influence: gerrit打包)
|
||||
* fix: 修复键盘布局插件不响应键盘布局变化的问题(Task: 225011)(Influence: 社区版,从控制中心不断新增和删除键盘布局,观察布局插件是否显示隐藏)
|
||||
* feat: 加载插件流程移动到插件里单独加载(Task: 222353)(Influence: 加载插件)
|
||||
* feat: 加载基本插件(Task: 222353)(Influence: 插件加载)
|
||||
* fix: 点击插件弹出自己的列表(Task: 222353)(Influence: 点击插件,观察是否弹出插件自己对应的列表,如果没有弹出列表,则触发这个插件的功能)
|
||||
* chore: 删除多余的文件(Task: 222353)(Influence: 无)
|
||||
* fix: 调整插件的尺寸(Task: 222353)(Influence: 观察任务栏插件是否对齐)
|
||||
* fix: 修复移除蓝牙后弹框依然显示的问题(Bug: 181945)(Influence: 点击任务栏的蓝牙图标,弹出蓝牙弹窗,然后移除蓝牙,观察蓝牙的弹窗是否存在)
|
||||
* fix: 优化插件图标样式(Task: 181945)(Influence: 图标样式)
|
||||
* feat: 高效模式下最右侧增加显示桌面区域(Bug: 180859)(Influence: 进入高效模式,鼠标进入最右侧,点击,观察是否可以正常显示桌面)
|
||||
* fix: 修复高缩放率下固定区域图标和回收站图标显示异常的问题(Bug: 182673)(Influence: 1.25倍缩放率下,选择非默认主题,观察任务栏显示桌面、多任务试图和回收站的图标大小是否正常)
|
||||
* fix: 修复高缩放率下插件图标显示异常的问题(Bug: 183543)(Influence: 高分屏,设置缩放率为最高,观察任务栏插件区域的图标显示是否正常)
|
||||
* fix: 修复展开托盘无法通过菜单移除U盘的问题(Bug: 182299)(Influence: 插入U盘,打开托盘区,右键菜单,点击,观察功能是否生效)
|
||||
* fix: 解决任务栏时间日期文字显示异常的问题(Bug: 181387)(Influence: 时间和日期显示)
|
||||
* fix: 修复图标异常问题(Bug: 181723)(Influence: 高缩放率下,观察组合图标显示是否正常)
|
||||
* fix: 根据设计图调整插件位置(Bug: 181251)(Influence: 声音、亮度调整和媒体播放的显示位置)
|
||||
* fix: 修复任务栏适应不同的主题(Bug: 179377)(Influence: 从控制中心修改主题颜色,观察任务栏快捷面板的主题颜色是否发生变化)
|
||||
* fix: 修复快捷面板插件子面板无法关闭主面板的问题(Bug: 222353)(Influence: 进入快捷面板的蓝牙子界面点击设置,进入声音子界面点击设置,进入亮度调整子界面点击设置,在弹出对应的功能后,观察快捷面板是否隐藏)
|
||||
* fix: 修复高效模式下无法打开企业微信的问题(Bug: 182065)(Influence: 进入高效模式,打开企业微信和微信等应用,观察是否正常打开窗口)
|
||||
|
||||
-- zhaoyingzhen <zhaoyingzhen@uniontech.com> Fri, 13 Jan 2023 11:37:21 +0800
|
||||
|
||||
dde-dock (6.0.7) unstable; urgency=medium
|
||||
|
||||
[ TagBuilder ]
|
||||
* fix: 修复插件显示尺寸问题(Bug: 179083)(Influence: 截图-查看截图计时插件是否正常显示)
|
||||
* fix: 任务栏协同不显示安卓设备。(Task: 233323)(Influence: 设备列表不显示安卓设备。)
|
||||
* fix: 修复文案显示错误(Bug: 180959)(Influence: 任务栏最右侧的电源按钮)
|
||||
* fix: 更新翻译文件(Bug: 180959)(Influence: 任务栏-电源,观察电源的文本)
|
||||
|
||||
-- lvpeilong <lvpeilong@uniontech.com> Fri, 06 Jan 2023 16:32:53 +0800
|
||||
|
||||
dde-dock (6.0.6.1) unstable; urgency=medium
|
||||
|
||||
[ TagBuilder ]
|
||||
* fix: 修复向上拖动图标引起任务栏崩溃的问题(Bug: 179427)(Influence: 从任务栏向上拖动快捷图标,观察任务栏是否正常)
|
||||
* fix: 声音插件滚轮调节音量(Bug: 172417)(Influence: 将鼠标放在任务栏声音图标上,滚动滚轮,观察音量大小是否调节)
|
||||
* fix: 增加强制在任务栏显示插件的接口(Task: 226407)(Bug: 179083)(Influence: 截图,观察任务栏是否有计时的图标)
|
||||
* fix: 修复高缩放率下显示问题(Bug: 176421)(Influence: 设置高缩放率,观察开始菜单的位置,任务栏图标占满区域,左右位置,观察任务栏图标是否拥挤)
|
||||
|
||||
-- zhaoyingzhen <zhaoyingzhen@uniontech.com> Thu, 29 Dec 2022 15:13:58 +0800
|
||||
|
||||
dde-dock (6.0.5.1) unstable; urgency=medium
|
||||
|
||||
[ TagBuilder ]
|
||||
* feat: 蓝牙插件适应快捷插件接口(Task: 121387)(Influence: 任务栏-快捷设置-蓝牙)
|
||||
* fix: 修复高缩放率下启动器位置显示错误和无法设置智能隐藏的问题(Bug: 154513, 157413)(Influence: 前提:屏幕分辨率设置为1.25;1、任务栏设置为智能隐藏,将窗口拖动到任务栏下方,观察任务栏是否隐藏;2、观察启动器的位置是否正确)
|
||||
* fix: 修复从任务栏拖动图标分屏后鼠标回到任务栏遮罩不消失的问题(Task: 181523)(Influence: 从任务栏拖动图标到桌面,不松手,然后再回到任务栏,观察遮罩是否消失)
|
||||
* fix: 修复部分托盘无图标的问题(Bug: 160761)(Influence: 安全中心、授权管理等应用的托盘图标)
|
||||
* fix: 修复跨端协同设备数量变化时列表页面显示不全的问题。(Influence: 跨端协同设备变化时,页面显示。)
|
||||
* feat: 高效模式增加加载插件的功能(Task: 112073)(Influence: 高效模式下加载插件)
|
||||
* feat: 适配v20插件加载(Task: 112073)(Influence: 加载v20插件)
|
||||
* fix: 加载系统托盘插件(Task: 112073)(Influence: 插入U盘,查看托盘区域是否有U盘图标)
|
||||
* fix: 托盘跟随高效模式调整任务栏位置(Task: 112073)(Influence: 高效模式下,调整任务栏位置,观察托盘区域是否正常)
|
||||
* fix: 修复任务栏没有加载显示桌面和多任务视图的问题(Task: 112073)(Influence: 任务栏查看是否存在显示桌面和多任务栏视图的插件)
|
||||
* feat: 图标增加toolTip和菜单(Task: 112073)(Influence: 鼠标放入到托盘区域、快捷插件区域,关机区域,观察是否存在toolTip,右键,观察是否弹出菜单)
|
||||
* fix: 实现高效模式下托盘和快捷插件拖动功能(Task: 112073)(Influence: 高效模式,从托盘或快捷面板拖动图标到任务栏)
|
||||
* feat: 快捷面板支持插件控制区域的显示(Task: 208579)(Influence: 快捷面板,观察声音、亮度调整和音乐播放等功能是否显示正常)
|
||||
* feat: 声音插件适配v23(Task: 210309)(Influence: 观察任务栏是否存在声音插件)
|
||||
* style: 消除编译警告信息(Task: 96831)(Influence: 无)
|
||||
* fix: 删除编译警告(Task: 96831)(Influence: 无)
|
||||
* style: 修改快捷区域key值(Task: 96831)(Influence: 无)
|
||||
* fix: 修复快捷面板应用打开详细页面位置错误的问题(Task: 211641)(Influence: 从快捷面板展开蓝牙或者网络右侧的展开按钮,观察是否显示正常)
|
||||
* fix: 解决任务栏跨端协同在paired状态变化后主动请求协同连接的问题。(Influence: 任务栏设备协同连接功能。)
|
||||
* style: 枚举变量的信号传递去掉引用(Task: 96831)(Influence: 无)
|
||||
* fix: 修复快捷面板没有刷新最新状态图的问题(Task: 208069)(Influence: 笔记本上打开快捷面板,拔掉电源或插上电源,观察电池状态是否发生变化)
|
||||
* fix: 修改任务栏加载老版本插件的方式(Task: 112073)(Influence: 任务栏启动的时候,观察老版本的插件(例如U盘插件等其他v20插件)是否正常加载)
|
||||
* fix: 优化快捷面板显示插件区域的方式(Task: 189527)(Influence: 打开快捷面板,观察插件是否正常显示)
|
||||
* feat: 完善onboard插件的接口(Task: 212611)(Influence: 快捷面板观察onboard插件是否正常显示)
|
||||
* fix: 修复时尚模型下图标铺满任务栏的显示问题(Task: 150049)(Influence: 时尚模式下,不断向任务栏添加图标,知道铺满,观察任务栏是否在屏幕可见区域内)
|
||||
* fix: 适配最新版本的dtk(Task: 213083)(Influence: 无)
|
||||
* fix: 修复声音设置错误(Task: 210309)(Influence: 打开快捷设置面板,通过滑动条来调整声音,观察声音是否在设置的范围内,同时观察主面板和子面板两边的声音滑动条是否同步)
|
||||
* fix: 修复鼠标放到任务栏上拖动区域尺寸错误的问题(Task: 213103)(Influence: 任务栏在下方的时候,鼠标放入任务栏上方的位置,观察鼠标形状是否正常)
|
||||
* fix: 修复关机图标与插件区域间距过大的问题(Task: 112073)(Influence: 高效模式下,观察关机图标与左右侧插件和时间的距离)
|
||||
* fix: 修复高效模式下关机按钮显示文本的问题(Task: 112073)(Influence: 高效模式下,调整任务栏到最高,观察关机按钮的显示)
|
||||
* fix: 修复托盘图标显示异常的问题(Task: 213361)(Influence: 观察输入法是否正常显示,将托盘图标从托盘拖动到任务栏,观察该图标是否在展开托盘图标和输入法中间)
|
||||
* fix: 修复部分命令无法执行的问题(Task: 213403)(Influence: 任务栏关机命令观察是否正常执行)
|
||||
* fix: 修复wayland下部分托盘的tooltips显示异常(Bug: 157821)(Influence: 进入wayland,打开音乐,鼠标放入到音乐图标上,观察是否正常显示提示消息)
|
||||
* fix: 修复已打开应用缩略图显示位置偏差(Bug: 165775)(Influence: 鼠标放入到已经打开的应用的上方,观察预览图的位置显示是否正常)
|
||||
* fix: 修复右键插件区域再单击弹出菜单的问题(Bug: 171559)(Influence: 右键插件区域,再左键,观察插件区域菜单是否正常显示)
|
||||
* fix: 修复插件右键菜单不响应的问题(Bug: 164381)(Influence: 右键菜单区域,点击某个菜单项,观察是否正常响应)
|
||||
* fix: 修复任务栏点击时间设置崩溃的问题(Bug: 171511)(Influence: 任务栏右键时间区域,打开时间设置,观察是否正常打开控制中心的时间设置)
|
||||
* fix: 修复拖动无打开窗口触发分屏后自动打开应用的问题(Bug: 154349)(Influence: 从任务栏拖动一个没有打开窗口的应用,观察是否打开应用(正常情况下不会打开应用),释放鼠标,观察应用图标是否回到任务栏上)
|
||||
* fix: 修复wayland下打开快捷面板tooltip没有隐藏的问题(Bug: 171551)(Influence: 进入wayland,鼠标放在任务栏的插件上,点击应用弹出快捷面板,观察toolTip是否消失)
|
||||
* fix: 修复点击快捷面板之外的区域快捷面板不关闭的问题(Bug: 171545, 171583)(Influence: 进入wayland,打开快捷面板,点击快捷面板之外的其他区域,观察快捷面板是否关闭)
|
||||
* fix: 去掉部分插件的右键菜单(Bug: 171753)(Influence: 右键蓝牙、声音等插件,观察是否有右键菜单)
|
||||
* fix: 修复任务栏中拖拽图标到桌面区域图标消失的问题(Bug: 171539)(Influence: 将托盘图标从任务栏快速向上拖动,观察任务栏托盘的图标是否还存在)
|
||||
* style: 修改函数接口调用(Task: 96831)(Influence: 无)
|
||||
* fix: 同步启动器的修改(Bug: 147753)(Influence: 从启动器应用列表-拖拽到任务栏-回收站-卸载应用功能正常)
|
||||
* fix: 修复从托盘拖动应用到任务栏上面图标显示异常的问题(Bug: 171493)(Influence: 将安全中心等图标从托盘拖动到任务栏,观察图标是否重复)
|
||||
* feat: 增加返回给控制中心设置插件和托盘应用的接口(Task: 216841)(Influence: 无)
|
||||
* fix: 修复移除插件后快捷面板显示异常的问题(Bug: 171579)(Influence: 不断插入或者移除蓝牙设备,观察快捷面板是否显示正常)
|
||||
* fix: 修复关闭窗口特效下启动器按钮被遮挡的问题(Task: 216977)(Influence: 关闭窗口特效的时候,观察启动器按钮是否正常显示)
|
||||
* fix: 修复快捷面板弹出位置不准确的问题(Bug: 172213)(Influence: 从任务栏不同的插件图标点击,观察弹出快捷面板的位置)
|
||||
* fix: 电池插件不显示在快捷面板(Bug: 171713)(Influence: 从笔记本上,打开快捷面板,观察是否存在电池图标)
|
||||
* fix: 修复高缩放率下无法点击快捷面板的问题(Task: 218215)(Influence: 在1.25倍缩放率下,展开快捷面板,点击网络插件展开按钮,观察是否可以展开)
|
||||
* fix: 修复蓝牙列表中设备顺序与控制中心不一致的问题(Bug: 171513)(Influence: 打开快捷面板中的蓝牙列表,在多个设备同时存在的情况下,观察设备顺序是否和控制中心一致)
|
||||
* chore: 设置日志格式(Task: 124695)(Influence: 无)
|
||||
* fix: 修复音量插件调节最小刻度不是%2的问题(Bug: 172417)(Influence: 音量插件调节)
|
||||
* fix: 修复亮度插件无法调整到100的问题(Bug: 171869)(Influence: 任务栏-亮度插件调节)
|
||||
* fix: 修复插件展开列表名称显示错误的问题(Task: 218733)(Influence: 从快捷面板打开网络列表,观察标题是否为网络)
|
||||
* fix: 修复快捷面板中音量调节不响应音量增强设置的问题(Bug: 171869)(Influence: 任务栏-音量插件-音量增强时的交互)
|
||||
* fix: 解決协同连接设备时关闭协同服务总开关导致任务栏崩溃的问题。(Bug: 171741)(Influence: 协同连接设备.)
|
||||
* fix: 从任务栏移除托盘图标后放入托盘区(Bug: 171497, 171539)(Influence: 将图标从任务栏移出,松手后图标自动移到托盘区)
|
||||
* fix: 增加对控制中心设置不同主题下图标的接口(Bug: 172365)(Influence: 在控制中心切换主题,观察图标是否发生变化)
|
||||
* fix: 去掉电池的右键菜单(Bug: 171753)(Influence: 右键电池插件,观察是否存在菜单)
|
||||
* fix: 修复移除蓝牙设备后快捷面板依然显示的问题(Bug: 171533)(Influence: 从电脑上移除蓝牙设备,观察快捷区域和快捷面板是否还有蓝牙图标)
|
||||
* fix: 修复从控制中心第一次连接需要密码的网络没有弹出网络面板的问题(Bug: 150395)(Influence: 从控制中心第一次连接需要密码的网络,观察任务栏是否显示网络列表)
|
||||
* fix: 适配v20插件在任务栏的显示(Task: 112073)(Influence: 任务栏显示v20插件)
|
||||
* fix: 修复插入新的蓝牙设备后其他蓝牙设备自动关闭的问题(Bug: 171477)(Influence: 系统中已经存在一个蓝牙设备,且是打开状态,打开快捷面板,进入蓝牙详情页面,插入新的蓝牙设备,观察之前的蓝牙设备是否自动关闭)
|
||||
* fix: 修复快捷面板展开后点击任务栏应用无法打开的问题(Bug: 166029)(Influence: 打开快捷面板,再打开任务栏应用,观察是否在关闭快捷面板的同时打开了任务栏的应用)
|
||||
* fix: 修复任务栏插件音量设备显示错误的问题(Bug: 165853)(Influence: 从任务栏打开音量,进入音量的详情页面,观察是否和控制中心一致)
|
||||
* fix: 修复快捷面板蓝牙状态显示错误的问题(Bug: 171419)(Influence: 点击蓝牙图标,观察快捷面板蓝牙的打开或者关闭的状态)
|
||||
* fix: 完善音量功能(Bug: 172429)(Influence: 从控制中心关闭设备,观察任务栏设备状态是否发生变化)
|
||||
* feat: 插件增加标记(Task: 220099)(Influence: 任务栏插件)
|
||||
* fix: 插件根据标记来决定插件的类型(Task: 220099)(Influence: 任务栏插件类型)
|
||||
* feat: 增加display插件(Task: 220489)(Influence: 展开任务栏快捷面板,观察是否有亮度设置相关的功能)
|
||||
* fix: 移除代码中对显示相关的插件的引用(Task: 220489)(Influence: 无)
|
||||
* fix: 修复wayland下无法拖动任务栏的问题(Task: 220523)(Influence: 进入wayland,鼠标移动到任务栏边缘,观察鼠标形状是否改变,能否正常调整任务栏尺寸)
|
||||
* fix: 修复快捷面板没有自动刷新图标的问题(Task: 220599)(Influence: 执行快捷面板中的截图图标,观察图标是否发生变化)
|
||||
* fix: 新增或移除显示屏插件自动添加或删除(Task: 220489)(Influence: 拔出显示屏后再插入显示屏,观察任务栏快捷面板中的亮度设置插件是否发生变化)
|
||||
* fix: 修复音量增强未响应的问题(Bug: 171869)(Influence: 任务栏-音量-音量增强)
|
||||
* feat: 将音乐播放功能提取为单独的插件(Task: 220489)(Influence: 无)
|
||||
* fix: dock代码中移除音乐插件(Task: 220489)(Influence: 打开音乐播放器,任务栏快捷面板中显示音乐播放面板)
|
||||
* fix: 修复控制中心显示多条重复控件的问题(Bug: 171581)(Influence: 控制中心-个性化,观察蓝牙或者任务栏等插件是否只显示一次)
|
||||
* feat: 增加回收站和电源插件在控制中心的显示和隐藏(Task: 216841)(Influence: 从控制中心勾选或者取消勾选回收站和电源插件,观察任务栏的变化)
|
||||
* fix: 修复wayland下智能隐藏偶尔失效的问题(Bug: 154513)(Influence: 进入wayland,任务栏设置为智能隐藏,从任务栏打开一个窗口,观察智能隐藏是否有效果)
|
||||
* fix: 修复wayland下高效模式设置任务栏struct失效的问题(Bug: 150637)(Influence: 进入wayland-任务栏设置为一直隐藏或智能隐藏,窗体最大化,让任务栏显示隐藏,观察任务栏窗体是否发生变化)
|
||||
* docs: 更新插件开发文档(Task: 221667)(Influence: 无)
|
||||
* feat: 任务栏适配不同主题的插件图标(Task: 222025)(Influence: 切换不同的主题,观察图标是否发生变化)
|
||||
* fix: 插件适配不同主题图标(Task: 222025)(Influence: 切换主题,观察任务栏的图标和控制中心个性化中的图标是否发生了变化)
|
||||
* fix: 去掉插件中读取禁用当前插件的配置(Bug: 175085)(Influence: 插入蓝牙观察是否有蓝牙图标)
|
||||
* fix: 修复从任务栏拖出托盘应用后托盘不弹出的问题(Bug: 171497)(Influence: 从任务栏拖动微信或企业微信,观察托盘是否弹出)
|
||||
* fix: 修改插件接口(Task: 222025)(Influence: 无)
|
||||
* fix: 修复音量调节控件幅度不正确的问题(Bug: 172417)(Influence: 音量控件调节幅度)
|
||||
* feat: 声音插件滚轮调节音量(Bug: 172417)(Influence: 将鼠标放在任务栏声音图标上,滚动滚轮,观察音量大小是否调节)
|
||||
* fix: 修复U盘插件不显示的问题(Task: 223159)(Influence: 系统中使用v20的U盘插件,插入U盘,查看U盘图标是否显示)
|
||||
* fix: 修复调整任务栏位置后显示错误的问题(Task: 218981)(Influence: 时尚模式下,将任务栏从下方调整在左侧,观察托盘面板显示是否正常)
|
||||
* fix: 修复控制中心调整任务栏尺寸缓慢显示的问题(Bug: 171799)(Influence: 从控制中心个性化调整任务栏尺寸,观察任务栏的尺寸是否正常调整)
|
||||
* chore: V23接口改造适配(Task: 207483)(Influence: 无)
|
||||
* fix: 点击任务栏时间显示窗口呼出小组件面板(Task: 165407)(Influence: 点击任务栏时间窗口小组件是否显示。)
|
||||
* fix: 声音调整改成新接口(Bug: 172417)(Influence: 鼠标移动到任务栏的声音图标,滚动鼠标,声音跟着调整)
|
||||
* fix: 修复无法通过蓝牙主面板开启关闭蓝牙的问题(Bug: 171419)(Influence: 打开快捷面板,点击蓝牙图标,观察蓝牙是否正常开启和关闭)
|
||||
* fix: 修复黑色背景下蓝牙列表名称颜色显示错误(Bug: 167961)(Influence: 改变主题,观察蓝牙列表设备名称的颜色是否改变)
|
||||
* fix: 修复反复开关蓝牙导致的崩溃问题(Task: 226123)(Influence: 蓝牙开关功能)
|
||||
* fix: 修复控制中心调节透明度对任务栏无作用的问题(Task: 226127)(Influence: 任务栏透明度调节)
|
||||
* fix: 适配协同后端接口变化修改。(Bug: 176323)(Influence: 协同设备列表显示)
|
||||
|
||||
-- zhaoyingzhen <zhaoyingzhen@uniontech.com> Tue, 13 Dec 2022 21:15:48 +0800
|
||||
|
||||
dde-dock (6.0.4) unstable; urgency=medium
|
||||
|
||||
[ Deepin Packages Builder ]
|
||||
* fix: 修复托盘图标提示信息显示异常的问题(Bug: 150521)(Influence: 托盘提示信息显示)
|
||||
* fix: 时尚模式时间日期tips有wayland默认tittle(Bug: 149173)(Influence: 任务栏时尚模式下时间日期tips是否显示正常)
|
||||
* fix: 修复多任务视图界面点击任意处均导致任务栏显示右键菜单的问题(Bug: 150507)(Influence: 任务栏右键菜单显示的时机)
|
||||
* feat: 拖动任务栏图标实现分屏效果(Task: 163465)(Influence: 从任务栏拖动图标到屏幕上方,查看是否有分屏功能)
|
||||
* feat: 开启AM宏(Task: 162227)(Influence: 无)
|
||||
* fix: 修复从任务栏无法打开控制中心问题(Bug: 149189)(Influence: 任务栏-任务栏设置-打开控制中心 任务栏-蓝牙-蓝牙设置 任务栏-日期-日期时间设置 任务栏-电源-电源设置 任务栏-关机-关机设置 任务栏-声音-声音设置 观察是否正常打开控制中心)
|
||||
* fix: 时尚模式下日期时间增加右键菜单(Task: 162235)(Influence: 任务栏-时尚模式,右键查看日期时间是否存在时间日期菜单)
|
||||
* fix: 修复从最近使用区域移除驻留后应用图标没有驻留到应用区域最末尾(Bug: 147643)(Influence: 任务栏时尚模式下,在最近使用区域移除驻留,观察移除的驻留是否在区域的末尾)
|
||||
* feat: 增加适配控制中心设置是否使用最近区域的功能(Bug: 147717)(Influence: 开关是否显示最近使用应用,时尚模式下观察最近使用应用是否显示或隐藏)
|
||||
* feat: 增加窗口多开的功能(Task: 170977)(Influence: 控制中心开启多开窗口显示,观察应用打开的窗口是否在对应的位置显示)
|
||||
* feat: 任务栏应用拖动到移除驻留(Bug: 147699)(Influence: 拖动任务栏应用到回收站,观察是否可以移除驻留)
|
||||
* fix: 修复wayland环境下应用打开窗口无法显示预览的问题(Bug: 140919)(Influence: wayland-任务栏打开一个应用窗口,鼠标放入到窗口上,查看预览图)
|
||||
* fix: 任务栏代码结构优化解耦(Bug: 137267, 140029, 134527, 146743, 150293)(Influence: 打开任务栏,观察时尚模式下圆角,左右侧区域中间是否连接在一起等)
|
||||
* feat: 删除插件基类的isPrimary接口(Task: 121387)(Influence: 安装网络插件,查看网络插件是否在快捷设置面板中显示两列图标)
|
||||
* fix: 修改v20的接口为v23的接口(Task: 182009)(Influence: 打开控制中心,鼠标移动唤醒任务栏等操作)
|
||||
* fix: 删除任务栏对libdframeworkdbus-dev库的依赖(Task: 182009)(Influence: 打开控制中心,鼠标移动唤醒任务栏、加载插件等,观察相关功能是否正常)
|
||||
* fix: 修复部分托盘服务对应进程状态异常时导致任务栏卡死问题(Bug: 121947)(Influence: 托盘服务)
|
||||
* feat: 添加任务栏跨端协同操作功能。(Task: 119639)(Influence: 任务栏跨端协同功能。)
|
||||
* fix: 修复任务栏在副屏上方鼠标跟随未移动到左侧的问题(Bug: 147641)(Influence: 开启鼠标跟随,任务栏默认在主屏,鼠标移动到副屏幕,任务栏跟随到副屏幕,改变任务栏位置为上,此时任务栏在副屏幕的上方,将鼠标移动到主屏幕的上方,观察任务栏是否移动到主屏幕的上方)
|
||||
* feat: 删除任务栏中控制中心设置插件(Task: 130353)(Influence: 无)
|
||||
* fix: 时尚模式增加阴影(Bug: 137267)(Influence: 时尚模式观察阴影)
|
||||
* feat: 支持通过环境变量的形式指定插件的路径(Issue: 3402)(Influence: 影响插件加载,对旧插件保持兼容)
|
||||
* fix: 修复wayland环境时尚模式下打开企业微信崩溃的问题(Task: 196629)(Influence: 进入wayland桌面,进入时尚模式,打开企业微信,双击,观察企业微信是否正常打开)
|
||||
* fix: 修复高效模式下托盘入口图标没有跟随位置变化而变化(Bug: 147743)(Influence: 时尚模式下改变任务栏位置,观察托盘入口是否发生变化)
|
||||
* style: 优化CMakeList.txt文件(Task: 96831)(Influence: 无)
|
||||
* fix: 修复开启启动器后鼠标再次点击无法关闭启动器的问题(Task: 198183)(Influence: 从任务栏点击鼠标开启启动器,再次点击鼠标,观察启动器是否收缩)
|
||||
* fix: 修复wayland下窗口预览为空的问题(Bug: 140919, 150475)(Influence: 进入wayland,鼠标放入任务栏已经打开的窗口图标上,观察预览图是否显示)
|
||||
* fix: 修复任务栏在右侧智能隐藏失败(Bug: 154513)(Influence: 任务栏右侧智能隐藏,将窗口拖动到任务栏的右侧,观察任务栏是否隐藏)
|
||||
* fix: 修复跨端协同设备列表数量显示不对的问题。(Bug: 203831)(Influence: 跨端协同设备数量,及设备协同连接。)
|
||||
* fix: 修复时尚模式下快捷设置面板显示设置子页面显示不全,导致跨端协同设备列表显示异常问题。(Bug: 160587, 160599)(Influence: 时尚模式下显示设置子页面显示问题。)
|
||||
|
||||
-- baodi <baodi@uniontech.com> Wed, 19 Oct 2022 12:57:31 +0800
|
||||
|
||||
dde-dock (6.0.3) unstable; urgency=medium
|
||||
|
||||
[ TagBuilder ]
|
||||
* fix: 修复debian打包使用AM宏不生效的问题(Task: 133075)(Influence: 任务栏是否使用AM服务)
|
||||
* fix: 修复wayland环境下任务栏右键菜单带有标题栏的问题(Bug: 140873)(Influence: wayland下查看任务栏图表的右键菜单)
|
||||
* fix: 修复任务栏在高缩放率下防呆位置错误(Influence: 高缩放率下,查看防呆区域)
|
||||
* fix: 删除任务栏启动时候用ldd检测libdtk库(Task: 157235)(Influence: 任务栏启动的时候检测是否有ldd报错信息)
|
||||
* feat: 暂时取消使用AM宏(Task: 162227)(Influence: 无)
|
||||
* feat: 增加最近使用应用的功能(Task: 158441)(Influence: 控制中心最近使用区域开启情况下,时尚模式,打开一个没有驻留在任务栏的应用,查看新打开的应用是否在最近打开应用区域)
|
||||
* feat: 增加工具区域的使用(Task: 152867)(Influence: 时尚模式下,查看最近打开区域右侧是否显示回收站,来回切换时尚模式与高效模式,查看回收站位置是否发生变化)
|
||||
* feat: recompile(Influence: recompile)
|
||||
* feat: 点击任务栏时间显示窗口呼出小组件面板。(Task: 165407)(Influence: 点击任务栏时间窗口小组件是否显示。)
|
||||
* fix: 修复拖拽托盘窗口图标至任务栏托盘区域经常失败的问题。(Bug: 147789)(Influence: 拖拽托盘窗口图标至任务栏托盘区域。)
|
||||
* chore: 优化有关slider等相关的操作代码(Influence: 快捷设置面板slider操作。)
|
||||
* fix: 修复从任务栏或其他应用打开控制中心卡死的问题(Bug: 149189)(Influence: 任务栏-任务栏设置-打开控制中心,观察打开的时间)
|
||||
|
||||
-- caixiangrong <caixiangrong@uniontech.com> Mon, 25 Jul 2022 13:10:23 +0800
|
||||
|
||||
dde-dock (6.0.2) unstable; urgency=low
|
||||
|
||||
* release 6.0.2
|
||||
|
||||
-- fanpengcheng <fanpengcheng@uniontech.com> Tue, 21 Jun 2022 16:55:39 +0800
|
||||
|
||||
dde-dock (6.0.1) unstable; urgency=low
|
||||
|
||||
* release Tag 6.0.1
|
||||
|
||||
-- fanpengcheng <fanpengcheng@uniontech.com> Tue, 21 Jun 2022 16:24:49 +0800
|
||||
|
||||
dde-dock (6.0.0.1) unstable; urgency=low
|
||||
|
||||
* release Tag 6.0.0.1
|
||||
|
||||
-- donghualin <donghualin@uniontech.com> Wed, 1 Jun 2022 21:34:29 +0800
|
||||
|
||||
dde-dock (6.0.0.0) unstable; urgency=low
|
||||
|
||||
* release Tag 6.0.0.0
|
||||
|
||||
-- donghualin <donghualin@uniontech.com> Wed, 1 Jun 2022 10:11:29 +0800
|
||||
|
||||
dde-dock (3.0.12-1) unstable; urgency=low
|
||||
|
||||
* Autobuild Tag 3.0.12
|
||||
|
||||
@ -134,4 +666,4 @@ dde-dock (0.0~git20150824-1) unstable; urgency=low
|
||||
|
||||
* Initial release
|
||||
|
||||
-- Deepin Packages Builder <packages@linuxdeepin.com> Mon, 24 Aug 2015 19:03:01 +0800
|
||||
-- Deepin Packages Builder <packages@linuxdeepin.com> Mon, 24 Aug 2015 19:03:01 +0000
|
||||
|
1
debian/compat
vendored
1
debian/compat
vendored
@ -1 +0,0 @@
|
||||
9
|
86
debian/control
vendored
86
debian/control
vendored
@ -2,78 +2,80 @@ Source: dde-dock
|
||||
Section: x11
|
||||
Priority: optional
|
||||
Maintainer: Deepin Packages Builder <packages@deepin.com>
|
||||
Build-Depends: debhelper (>= 8.0.0),
|
||||
pkg-config,
|
||||
Build-Depends:
|
||||
cmake,
|
||||
qt5-qmake,
|
||||
libxcb-image0-dev,
|
||||
libxcb-composite0-dev,
|
||||
libxcb-ewmh-dev,
|
||||
libxtst-dev,
|
||||
qttools5-dev-tools,
|
||||
qtbase5-private-dev,
|
||||
libxcb-icccm4-dev,
|
||||
libqt5x11extras5-dev,
|
||||
libxcb-damage0-dev,
|
||||
libqt5svg5-dev,
|
||||
libdtkwidget-dev (>=5.4.19),
|
||||
debhelper-compat (= 10),
|
||||
extra-cmake-modules,
|
||||
libdbusmenu-qt5-dev,
|
||||
libdtkcore-dev (>=5.4.14),
|
||||
libdtkcore5-bin (>=5.4.14),
|
||||
libdtkgui-dev (>=5.4.13),
|
||||
libdframeworkdbus-dev (>=5.4.6),
|
||||
libgsettings-qt-dev,
|
||||
libdbusmenu-qt5-dev,
|
||||
libgtest-dev,
|
||||
libdtkwidget-dev (>=5.4.19),
|
||||
libdwayland-dev,
|
||||
libgmock-dev,
|
||||
libgsettings-qt-dev,
|
||||
libgtest-dev,
|
||||
libqt5svg5-dev,
|
||||
libqt5waylandclient5-dev,
|
||||
libqt5x11extras5-dev,
|
||||
libxcb-composite0-dev,
|
||||
libxcb-damage0-dev,
|
||||
libxcb-ewmh-dev,
|
||||
libxcb-icccm4-dev,
|
||||
libxcb-image0-dev,
|
||||
libxcursor-dev,
|
||||
libxdamage-dev,
|
||||
libxres-dev,
|
||||
libxtst-dev,
|
||||
pkg-config,
|
||||
qt5-qmake,
|
||||
qtbase5-private-dev,
|
||||
qttools5-dev,
|
||||
dde-control-center-dev,
|
||||
libxcursor-dev
|
||||
qttools5-dev-tools,
|
||||
qtwayland5-private-dev,
|
||||
Standards-Version: 3.9.8
|
||||
Homepage: http://www.deepin.org/
|
||||
|
||||
Package: dde-dock
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends},
|
||||
deepin-desktop-schemas (>=5.9.14),
|
||||
libdtkwidget5 (>=5.4.19),
|
||||
libdtkcore5 (>=5.4.14),
|
||||
libdtkgui5 (>=5.4.13),
|
||||
libdframeworkdbus2 (>=5.4.6),
|
||||
dde-qt5xcb-plugin (>=5.0.25),
|
||||
Depends:
|
||||
dbus-bin,
|
||||
dde-daemon (>=5.13.12),
|
||||
startdde (>=5.8.9),
|
||||
dde-qt5xcb-plugin (>=5.0.25),
|
||||
deepin-desktop-schemas (>=5.9.14),
|
||||
lastore-daemon (>=5.2.9),
|
||||
qtxdg-dev-tools
|
||||
qtxdg-dev-tools,
|
||||
startdde (>=5.8.9),
|
||||
${misc:Depends},
|
||||
${shlibs:Depends},
|
||||
Recommends:
|
||||
dde-disk-mount-plugin,
|
||||
dde-dock-onboard-plugin,
|
||||
dde-network-dialog,
|
||||
dock-network-plugin,
|
||||
dcc-dock-plugin,
|
||||
dde-network-dialog
|
||||
Conflicts:
|
||||
dde-workspace (<< 2.90.5),
|
||||
dde-dock-applets,
|
||||
dde-trash-plugin
|
||||
dde-trash-plugin,
|
||||
dde-workspace (<< 2.90.5),
|
||||
dock-hotspot-plugin,
|
||||
Replaces:
|
||||
dde-dock-applets,
|
||||
dde-trash-plugin
|
||||
dde-trash-plugin,
|
||||
Description: deepin desktop-environment - dock module
|
||||
Dock module of deepin desktop-environment
|
||||
|
||||
Package: dde-dock-dev
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Depends:
|
||||
${misc:Depends},
|
||||
Description: deepin desktop-environment - dock module development files
|
||||
Dock module development files of deepin desktop-environment
|
||||
|
||||
Package: dde-dock-onboard-plugin
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, onboard
|
||||
Depends:
|
||||
onboard,
|
||||
${misc:Depends},
|
||||
${shlibs:Depends},
|
||||
Description: deepin desktop-environment - dock plugin for onboard
|
||||
Dock plugin for onboard of deepin desktop-environment
|
||||
|
||||
Package: dcc-dock-plugin
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, onboard
|
||||
Description: deepin desktop-environment - dcc plugin for dock settings
|
||||
Dcc plugin for dock settings of deepin desktop-environment
|
||||
|
2
debian/copyright
vendored
2
debian/copyright
vendored
@ -3,7 +3,7 @@ Upstream-Name: dde-dock
|
||||
|
||||
Files: *
|
||||
Copyright: 2015 Deepin Technology Co., Ltd.
|
||||
License: LGPL-3.0-or-later
|
||||
License: GPL-3+
|
||||
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 3 of the License, or
|
||||
|
1
debian/dcc-dock-plugin.install
vendored
1
debian/dcc-dock-plugin.install
vendored
@ -1 +0,0 @@
|
||||
usr/lib/dde-control-center/modules/libdcc-dock-plugin.so
|
9
debian/dde-dock.install
vendored
9
debian/dde-dock.install
vendored
@ -1,12 +1,13 @@
|
||||
usr/share
|
||||
usr/bin
|
||||
etc/dde-dock
|
||||
usr/lib/dde-dock/plugins/libdatetime.so
|
||||
usr/lib/dde-dock/plugins/loader/libpluginmanager.so
|
||||
usr/lib/dde-dock/plugins/libshutdown.so
|
||||
usr/lib/dde-dock/plugins/libtrash.so
|
||||
usr/lib/dde-dock/plugins/libtray.so
|
||||
usr/lib/dde-dock/plugins/liboverlay-warning.so
|
||||
usr/lib/dde-dock/plugins/system-trays
|
||||
usr/lib/dde-dock/plugins/quick-trays
|
||||
usr/lib/dde-dock/plugins/libmultitasking.so
|
||||
usr/lib/dde-dock/plugins/libshow-desktop.so
|
||||
usr/lib/dde-dock/plugins/system-trays/libkeyboard-layout.so
|
||||
usr/lib/dde-dock/plugins/libkeyboard-layout.so
|
||||
usr/lib/dde-dock/plugins/libnotification.so
|
||||
usr/share/dsg/configs/dde-dock/
|
||||
|
@ -1,16 +1,18 @@
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
set(BIN_NAME dde-dock)
|
||||
|
||||
configure_file(environments.h.in environments.h @ONLY)
|
||||
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fsanitize=address -O2")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address -O2")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fsanitize=address -O0")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address -O0")
|
||||
endif()
|
||||
|
||||
generation_dbus_interface(${CMAKE_CURRENT_SOURCE_DIR}/dbusinterface/xml ${CMAKE_CURRENT_SOURCE_DIR}/dbusinterface/generation_dbus_interface)
|
||||
|
||||
# Sources files
|
||||
file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../widgets/*.h" "../widgets/*.cpp")
|
||||
file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../widgets/*.h" "../widgets/*.cpp" "../interfaces/*.h")
|
||||
|
||||
# Find the library
|
||||
find_package(PkgConfig REQUIRED)
|
||||
@ -19,13 +21,22 @@ find_package(Qt5Concurrent REQUIRED)
|
||||
find_package(Qt5X11Extras REQUIRED)
|
||||
find_package(Qt5DBus REQUIRED)
|
||||
find_package(Qt5Svg REQUIRED)
|
||||
find_package(Qt5WaylandClient REQUIRED)
|
||||
find_package(Qt5XkbCommonSupport REQUIRED)
|
||||
find_package(DtkGui REQUIRED)
|
||||
find_package(DtkWidget REQUIRED)
|
||||
find_package(DtkCMake REQUIRED)
|
||||
find_package(dbusmenu-qt5 REQUIRED)
|
||||
find_package(ECM REQUIRED NO_MODULE)
|
||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
||||
find_package(DWayland REQUIRED)
|
||||
|
||||
pkg_check_modules(XCB_EWMH REQUIRED xcb-ewmh x11 xcursor)
|
||||
pkg_check_modules(DFrameworkDBus REQUIRED dframeworkdbus)
|
||||
pkg_check_modules(QGSettings REQUIRED gsettings-qt)
|
||||
pkg_check_modules(DtkGUI REQUIRED dtkgui)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package(Threads REQUIRED)
|
||||
|
||||
pkg_check_modules(XCB_EWMH REQUIRED IMPORTED_TARGET x11 xcb xcb-icccm xcb-image xcb-ewmh xcb-composite xtst dbusmenu-qt5 xext xcursor xkbcommon xres)
|
||||
pkg_check_modules(QGSettings REQUIRED IMPORTED_TARGET gsettings-qt)
|
||||
pkg_check_modules(WAYLAND REQUIRED IMPORTED_TARGET wayland-client wayland-cursor wayland-egl)
|
||||
|
||||
# driver-manager
|
||||
add_executable(${BIN_NAME}
|
||||
@ -36,24 +47,28 @@ add_executable(${BIN_NAME}
|
||||
|
||||
target_include_directories(${BIN_NAME} PUBLIC
|
||||
${DtkWidget_INCLUDE_DIRS}
|
||||
${XCB_EWMH_INCLUDE_DIRS}
|
||||
${DFrameworkDBus_INCLUDE_DIRS}
|
||||
${Qt5Gui_PRIVATE_INCLUDE_DIRS}
|
||||
${PROJECT_BINARY_DIR}
|
||||
${QGSettings_INCLUDE_DIRS}
|
||||
${DtkGUI_INCLUDE_DIRS}
|
||||
${Qt5Svg_INCLUDE_DIRS}
|
||||
${Qt5WaylandClient_PRIVATE_INCLUDE_DIRS}
|
||||
../interfaces
|
||||
../widgets
|
||||
./dbusinterface/generation_dbus_interface
|
||||
./qtdbusextended/
|
||||
./dbusinterface
|
||||
accessible
|
||||
controller
|
||||
dbus
|
||||
display
|
||||
item
|
||||
item/components
|
||||
model
|
||||
pluginadapter
|
||||
screenspliter
|
||||
util
|
||||
window
|
||||
window/components
|
||||
window/tray
|
||||
window/tray/widgets
|
||||
drag
|
||||
xcb
|
||||
../plugins/tray
|
||||
../plugins/show-desktop
|
||||
@ -66,17 +81,22 @@ target_include_directories(${BIN_NAME} PUBLIC
|
||||
)
|
||||
|
||||
target_link_libraries(${BIN_NAME} PRIVATE
|
||||
${XCB_EWMH_LIBRARIES}
|
||||
${DFrameworkDBus_LIBRARIES}
|
||||
${DtkWidget_LIBRARIES}
|
||||
${Qt5Widgets_LIBRARIES}
|
||||
${Qt5Gui_LIBRARIES}
|
||||
${Qt5Concurrent_LIBRARIES}
|
||||
${Qt5X11Extras_LIBRARIES}
|
||||
${Qt5DBus_LIBRARIES}
|
||||
${QGSettings_LIBRARIES}
|
||||
${DtkGUI_LIBRARIES}
|
||||
${Qt5Svg_LIBRARIES}
|
||||
PkgConfig::QGSettings
|
||||
PkgConfig::XCB_EWMH
|
||||
PkgConfig::WAYLAND
|
||||
Dtk::Gui
|
||||
Qt5::Widgets
|
||||
Qt5::Gui
|
||||
Qt5::Concurrent
|
||||
Qt5::X11Extras
|
||||
Qt5::DBus
|
||||
Qt5::Svg
|
||||
Qt5::WaylandClient
|
||||
Qt5::XkbCommonSupport
|
||||
DWaylandClient
|
||||
Threads::Threads
|
||||
-lm
|
||||
)
|
||||
|
||||
if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "sw_64")
|
||||
@ -93,5 +113,5 @@ endif()
|
||||
|
||||
# bin
|
||||
install(TARGETS ${BIN_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
dconfig_meta_files(APPID org.deepin.dde.dock FILES ../configs/org.deepin.dde.dock.json)
|
||||
# window_patterns
|
||||
install(FILES taskmanager/window_patterns.json DESTINATION ${CMAKE_INSTALL_DATADIR}/dde-dock/)
|
||||
|
@ -1,194 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "accessibledefine.h"
|
||||
|
||||
#include "mainwindow.h"
|
||||
#include "mainpanelcontrol.h"
|
||||
#include "desktop_widget.h"
|
||||
#include "tipswidget.h"
|
||||
#include "dockpopupwindow.h"
|
||||
|
||||
#include "launcheritem.h"
|
||||
#include "appitem.h"
|
||||
#include "components/previewcontainer.h"
|
||||
#include "pluginsitem.h"
|
||||
#include "traypluginitem.h"
|
||||
#include "placeholderitem.h"
|
||||
#include "components/appdragwidget.h"
|
||||
#include "components/appsnapshot.h"
|
||||
#include "components/floatingpreview.h"
|
||||
|
||||
#include "snitraywidget.h"
|
||||
#include "abstracttraywidget.h"
|
||||
#include "indicatortraywidget.h"
|
||||
#include "xembedtraywidget.h"
|
||||
#include "system-trays/systemtrayitem.h"
|
||||
#include "fashiontray/fashiontrayitem.h"
|
||||
#include "fashiontray/fashiontraywidgetwrapper.h"
|
||||
#include "fashiontray/fashiontraycontrolwidget.h"
|
||||
#include "fashiontray/containers/attentioncontainer.h"
|
||||
#include "fashiontray/containers/holdcontainer.h"
|
||||
#include "fashiontray/containers/normalcontainer.h"
|
||||
#include "fashiontray/containers/spliteranimated.h"
|
||||
|
||||
// 这部分由sound插件单独维护,这样做是因为在标记volumeslider这个类时,需要用到其setValue的实现,
|
||||
// 但插件的源文件dock这边并没有包含,不想引入复杂的包含关系,其实最好的做法就是像sound插件这样,谁维护谁的
|
||||
//#include "../plugins/sound/sounditem.h"
|
||||
//#include "../plugins/sound/soundapplet.h"
|
||||
//#include "../plugins/sound/sinkinputwidget.h"
|
||||
//#include "../plugins/sound/componments/volumeslider.h"
|
||||
//#include "../plugins/sound/componments/horizontalseparator.h"
|
||||
|
||||
#include "showdesktopwidget.h"
|
||||
#include "datetimewidget.h"
|
||||
#include "onboarditem.h"
|
||||
#include "trashwidget.h"
|
||||
#include "popupcontrolwidget.h"
|
||||
#include "shutdownwidget.h"
|
||||
#include "multitaskingwidget.h"
|
||||
#include "overlaywarningwidget.h"
|
||||
#include "horizontalseperator.h"
|
||||
|
||||
#include <DIconButton>
|
||||
#include <DSwitchButton>
|
||||
#include <DPushButton>
|
||||
#include <DListView>
|
||||
#include <DSwitchButton>
|
||||
#include <DSpinner>
|
||||
#include <dloadingindicator.h>
|
||||
|
||||
#include <QScrollBar>
|
||||
|
||||
DWIDGET_USE_NAMESPACE
|
||||
using namespace Dock;
|
||||
|
||||
// 添加accessible
|
||||
SET_FORM_ACCESSIBLE(MainWindow, "mainwindow")
|
||||
SET_BUTTON_ACCESSIBLE(MainPanelControl, "mainpanelcontrol")
|
||||
SET_LABEL_ACCESSIBLE(TipsWidget, "tips")
|
||||
SET_FORM_ACCESSIBLE(DockPopupWindow, "popupwindow")
|
||||
SET_BUTTON_ACCESSIBLE(LauncherItem, "launcheritem")
|
||||
SET_BUTTON_ACCESSIBLE(AppItem, "appitem")
|
||||
SET_BUTTON_ACCESSIBLE(PreviewContainer, "previewcontainer")
|
||||
SET_BUTTON_ACCESSIBLE(PluginsItem, m_w->pluginName())
|
||||
SET_BUTTON_ACCESSIBLE(TrayPluginItem, m_w->pluginName())
|
||||
SET_BUTTON_ACCESSIBLE(PlaceholderItem, "placeholderitem")
|
||||
SET_BUTTON_ACCESSIBLE(AppDragWidget, "appdragwidget")
|
||||
SET_BUTTON_ACCESSIBLE(AppSnapshot, "appsnapshot")
|
||||
SET_BUTTON_ACCESSIBLE(FloatingPreview, "floatingpreview")
|
||||
SET_BUTTON_ACCESSIBLE(XEmbedTrayWidget, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_BUTTON_ACCESSIBLE(IndicatorTrayWidget, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_BUTTON_ACCESSIBLE(SNITrayWidget, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_BUTTON_ACCESSIBLE(AbstractTrayWidget, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_BUTTON_ACCESSIBLE(SystemTrayItem, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_FORM_ACCESSIBLE(FashionTrayItem, "fashiontrayitem")
|
||||
SET_FORM_ACCESSIBLE(FashionTrayWidgetWrapper, "fashiontraywrapper")
|
||||
SET_BUTTON_ACCESSIBLE(FashionTrayControlWidget, "fashiontraycontrolwidget")
|
||||
SET_FORM_ACCESSIBLE(AttentionContainer, "attentioncontainer")
|
||||
SET_FORM_ACCESSIBLE(HoldContainer, "holdcontainer")
|
||||
SET_FORM_ACCESSIBLE(NormalContainer, "normalcontainer")
|
||||
SET_FORM_ACCESSIBLE(SpliterAnimated, "spliteranimated")
|
||||
SET_FORM_ACCESSIBLE(DatetimeWidget, "plugin-datetime")
|
||||
SET_FORM_ACCESSIBLE(OnboardItem, "plugin-onboard")
|
||||
SET_FORM_ACCESSIBLE(TrashWidget, "plugin-trash")
|
||||
SET_BUTTON_ACCESSIBLE(PopupControlWidget, "popupcontrolwidget")
|
||||
SET_FORM_ACCESSIBLE(ShutdownWidget, "plugin-shutdown")
|
||||
SET_FORM_ACCESSIBLE(MultitaskingWidget, "plugin-multitasking")
|
||||
SET_FORM_ACCESSIBLE(ShowDesktopWidget, "plugin-showdesktop")
|
||||
SET_FORM_ACCESSIBLE(OverlayWarningWidget, "plugin-overlaywarningwidget")
|
||||
SET_FORM_ACCESSIBLE(QWidget, m_w->objectName().isEmpty() ? "widget" : m_w->objectName())
|
||||
SET_LABEL_ACCESSIBLE(QLabel, m_w->objectName() == "notifications" ? m_w->objectName() : m_w->text().isEmpty() ? m_w->objectName().isEmpty() ? "text" : m_w->objectName() : m_w->text())
|
||||
SET_BUTTON_ACCESSIBLE(DIconButton, m_w->objectName().isEmpty() ? "imagebutton" : m_w->objectName())
|
||||
SET_BUTTON_ACCESSIBLE(DSwitchButton, m_w->text().isEmpty() ? "switchbutton" : m_w->text())
|
||||
SET_BUTTON_ACCESSIBLE(DesktopWidget, "desktopWidget");
|
||||
SET_FORM_ACCESSIBLE(HorizontalSeperator, "HorizontalSeperator");
|
||||
// 几个没什么用的标记,但为了提醒大家不要遗漏标记控件,还是不要去掉
|
||||
SET_FORM_ACCESSIBLE(DBlurEffectWidget, "DBlurEffectWidget")
|
||||
SET_FORM_ACCESSIBLE(DListView, "DListView")
|
||||
SET_FORM_ACCESSIBLE(DLoadingIndicator, "DLoadingIndicator")
|
||||
SET_FORM_ACCESSIBLE(DSpinner, "DSpinner")
|
||||
SET_FORM_ACCESSIBLE(QMenu, "QMenu")
|
||||
SET_FORM_ACCESSIBLE(QPushButton, "QPushButton")
|
||||
SET_FORM_ACCESSIBLE(QSlider, "QSlider")
|
||||
SET_FORM_ACCESSIBLE(QScrollBar, "QScrollBar")
|
||||
SET_FORM_ACCESSIBLE(QScrollArea, "QScrollArea")
|
||||
SET_FORM_ACCESSIBLE(QFrame, "QFrame")
|
||||
SET_FORM_ACCESSIBLE(QGraphicsView, "QGraphicsView")
|
||||
SET_FORM_ACCESSIBLE(DragWidget, "DragWidget")
|
||||
|
||||
QAccessibleInterface *accessibleFactory(const QString &classname, QObject *object)
|
||||
{
|
||||
// 自动化标记确定不需要的控件,方可加入忽略列表
|
||||
const static QStringList ignoreLst = {"WirelessItem", "WiredItem", "SsidButton", "WirelessList", "AccessPointWidget"};
|
||||
|
||||
QAccessibleInterface *interface = nullptr;
|
||||
|
||||
USE_ACCESSIBLE(classname, MainWindow)
|
||||
ELSE_USE_ACCESSIBLE(classname, MainPanelControl)
|
||||
ELSE_USE_ACCESSIBLE(QString(classname).replace("Dock::", ""), TipsWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, DockPopupWindow)
|
||||
ELSE_USE_ACCESSIBLE(classname, LauncherItem)
|
||||
ELSE_USE_ACCESSIBLE(classname, AppItem)
|
||||
ELSE_USE_ACCESSIBLE(classname, PreviewContainer)
|
||||
ELSE_USE_ACCESSIBLE(classname, PluginsItem)
|
||||
ELSE_USE_ACCESSIBLE(classname, TrayPluginItem)
|
||||
ELSE_USE_ACCESSIBLE(classname, PlaceholderItem)
|
||||
ELSE_USE_ACCESSIBLE(classname, AppDragWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, AppSnapshot)
|
||||
ELSE_USE_ACCESSIBLE(classname, FloatingPreview)
|
||||
ELSE_USE_ACCESSIBLE(classname, SNITrayWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, AbstractTrayWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, SystemTrayItem)
|
||||
ELSE_USE_ACCESSIBLE(classname, FashionTrayItem)
|
||||
ELSE_USE_ACCESSIBLE(classname, FashionTrayWidgetWrapper)
|
||||
ELSE_USE_ACCESSIBLE(classname, FashionTrayControlWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, AttentionContainer)
|
||||
ELSE_USE_ACCESSIBLE(classname, HoldContainer)
|
||||
ELSE_USE_ACCESSIBLE(classname, NormalContainer)
|
||||
ELSE_USE_ACCESSIBLE(classname, SpliterAnimated)
|
||||
ELSE_USE_ACCESSIBLE(classname, IndicatorTrayWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, XEmbedTrayWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, DesktopWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, DatetimeWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, OnboardItem)
|
||||
ELSE_USE_ACCESSIBLE(classname, TrashWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, PopupControlWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, ShutdownWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, MultitaskingWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, ShowDesktopWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, OverlayWarningWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, QWidget)
|
||||
ELSE_USE_ACCESSIBLE_BY_OBJECTNAME(classname, QLabel, "spliter_fix")
|
||||
ELSE_USE_ACCESSIBLE_BY_OBJECTNAME(classname, QLabel, "spliter_app")
|
||||
ELSE_USE_ACCESSIBLE_BY_OBJECTNAME(classname, QLabel, "spliter_tray")
|
||||
ELSE_USE_ACCESSIBLE(classname, QLabel)
|
||||
ELSE_USE_ACCESSIBLE_BY_OBJECTNAME(QString(classname).replace("Dtk::Widget::", ""), DIconButton, "closebutton-2d")
|
||||
ELSE_USE_ACCESSIBLE_BY_OBJECTNAME(QString(classname).replace("Dtk::Widget::", ""), DIconButton, "closebutton-3d")
|
||||
ELSE_USE_ACCESSIBLE_BY_OBJECTNAME(QString(classname).replace("Dtk::Widget::", ""), DSwitchButton, "")
|
||||
ELSE_USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DBlurEffectWidget)
|
||||
ELSE_USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DListView)
|
||||
ELSE_USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DLoadingIndicator)
|
||||
ELSE_USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DSpinner)
|
||||
ELSE_USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DSwitchButton)
|
||||
ELSE_USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DIconButton)
|
||||
ELSE_USE_ACCESSIBLE(classname, QMenu)
|
||||
ELSE_USE_ACCESSIBLE(classname, QPushButton)
|
||||
ELSE_USE_ACCESSIBLE(classname, QSlider)
|
||||
ELSE_USE_ACCESSIBLE(classname, QScrollBar)
|
||||
ELSE_USE_ACCESSIBLE(classname, QScrollArea)
|
||||
ELSE_USE_ACCESSIBLE(classname, QFrame)
|
||||
ELSE_USE_ACCESSIBLE(classname, QGraphicsView)
|
||||
ELSE_USE_ACCESSIBLE(classname, DragWidget)
|
||||
ELSE_USE_ACCESSIBLE(classname, HorizontalSeperator);
|
||||
|
||||
if (!interface && object->inherits("QWidget") && !ignoreLst.contains(classname)) {
|
||||
QWidget *w = static_cast<QWidget *>(object);
|
||||
// 如果你看到这里的输出,说明代码中仍有控件未兼顾到accessible功能,请帮忙添加
|
||||
if (w->accessibleName().isEmpty())
|
||||
qWarning() << "accessibleFactory()" + QString("Class: " + classname + " cannot access");
|
||||
}
|
||||
|
||||
return interface;
|
||||
}
|
@ -1,400 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2018 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef ACCESSIBLEINTERFACE_H
|
||||
#define ACCESSIBLEINTERFACE_H
|
||||
|
||||
#include <QAccessible>
|
||||
#include <QAccessibleWidget>
|
||||
#include <QEvent>
|
||||
#include <QMap>
|
||||
#include <QString>
|
||||
#include <QWidget>
|
||||
#include <QObject>
|
||||
#include <QMetaEnum>
|
||||
#include <QMouseEvent>
|
||||
#include <QApplication>
|
||||
|
||||
#define SEPARATOR "_"
|
||||
|
||||
inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString &fallback)
|
||||
{
|
||||
const QString lowerFallback = fallback.toLower();
|
||||
// 避免重复生成
|
||||
static QMap< QObject *, QString > objnameMap;
|
||||
if (!objnameMap[w].isEmpty())
|
||||
return objnameMap[w];
|
||||
|
||||
static QMap< QAccessible::Role, QList< QString > > accessibleMap;
|
||||
QString oldAccessName = w->accessibleName().toLower();
|
||||
oldAccessName.replace(SEPARATOR, "");
|
||||
|
||||
// 按照类型添加固定前缀
|
||||
QMetaEnum metaEnum = QMetaEnum::fromType<QAccessible::Role>();
|
||||
QByteArray prefix = metaEnum.valueToKeys(r);
|
||||
switch (r) {
|
||||
case QAccessible::Button: prefix = "Btn"; break;
|
||||
case QAccessible::StaticText: prefix = "Label"; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
// 再加上标识
|
||||
QString accessibleName = QString::fromLatin1(prefix) + SEPARATOR;
|
||||
QString objectName = w->objectName().toLower();
|
||||
accessibleName += oldAccessName.isEmpty() ? (objectName.isEmpty() ?lowerFallback : objectName) : oldAccessName;
|
||||
// 检查名称是否唯一
|
||||
if (accessibleMap[r].contains(accessibleName)) {
|
||||
if (!objnameMap.key(accessibleName)) {
|
||||
objnameMap.remove(objnameMap.key(accessibleName));
|
||||
objnameMap.insert(w, accessibleName);
|
||||
return accessibleName;
|
||||
}
|
||||
// 获取编号,然后+1
|
||||
int pos = accessibleName.indexOf(SEPARATOR);
|
||||
int id = accessibleName.mid(pos + 1).toInt();
|
||||
|
||||
QString newAccessibleName;
|
||||
do {
|
||||
// 一直找到一个不重复的名字
|
||||
newAccessibleName = accessibleName + SEPARATOR + QString::number(++id);
|
||||
} while (accessibleMap[r].contains(newAccessibleName));
|
||||
|
||||
accessibleMap[r].append(newAccessibleName);
|
||||
objnameMap.insert(w, newAccessibleName);
|
||||
|
||||
// 对象销毁后移除占用名称
|
||||
QObject::connect(w, &QWidget::destroyed, [ = ] (QObject *obj) {
|
||||
objnameMap.remove(obj);
|
||||
accessibleMap[r].removeOne(newAccessibleName);
|
||||
});
|
||||
return newAccessibleName;
|
||||
} else {
|
||||
accessibleMap[r].append(accessibleName);
|
||||
objnameMap.insert(w, accessibleName);
|
||||
|
||||
// 对象销毁后移除占用名称
|
||||
QObject::connect(w, &QWidget::destroyed, [ = ] (QObject *obj) {
|
||||
objnameMap.remove(obj);
|
||||
accessibleMap[r].removeOne(accessibleName);
|
||||
});
|
||||
return accessibleName;
|
||||
}
|
||||
}
|
||||
|
||||
// 公共的功能
|
||||
#define FUNC_CREATE(classname,accessibletype,accessdescription) explicit Accessible##classname(classname *w) \
|
||||
: QAccessibleWidget(w,accessibletype,#classname)\
|
||||
, m_w(w)\
|
||||
, m_description(accessdescription)\
|
||||
{}\
|
||||
|
||||
#define FUNC_TEXT(classname,accessiblename) QString Accessible##classname::text(QAccessible::Text t) const{\
|
||||
switch (t) {\
|
||||
case QAccessible::Name:\
|
||||
return getAccessibleName(m_w, this->role(), accessiblename);\
|
||||
case QAccessible::Description:\
|
||||
return m_description;\
|
||||
default:\
|
||||
return QString();\
|
||||
}\
|
||||
}\
|
||||
|
||||
// button控件特有功能
|
||||
#define FUNC_ACTIONNAMES(classname) QStringList Accessible##classname::actionNames() const{\
|
||||
if(!m_w->isEnabled())\
|
||||
return QStringList();\
|
||||
return QStringList() << pressAction()<< showMenuAction();\
|
||||
}\
|
||||
|
||||
#define FUNC_DOACTION(classname) void Accessible##classname::doAction(const QString &actionName){\
|
||||
if(actionName == pressAction())\
|
||||
{\
|
||||
QPointF localPos = m_w->geometry().center();\
|
||||
QMouseEvent event(QEvent::MouseButtonPress,localPos,Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);\
|
||||
qApp->sendEvent(m_w,&event);\
|
||||
}\
|
||||
else if(actionName == showMenuAction())\
|
||||
{\
|
||||
QPointF localPos = m_w->geometry().center();\
|
||||
QMouseEvent event(QEvent::MouseButtonPress,localPos,Qt::RightButton,Qt::RightButton,Qt::NoModifier);\
|
||||
qApp->sendEvent(m_w,&event);\
|
||||
}\
|
||||
}\
|
||||
|
||||
// Label控件特有功能
|
||||
#define FUNC_TEXT_(classname) QString Accessible##classname::text(int startOffset, int endOffset) const{\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
return m_w->text();\
|
||||
}\
|
||||
|
||||
// Slider控件特有功能
|
||||
#define FUNC_CURRENTVALUE(classname) QVariant Accessible##classname::currentValue() const{\
|
||||
return m_w->value();\
|
||||
}\
|
||||
|
||||
#define FUNC_SETCURRENTVALUE(classname) void Accessible##classname::setCurrentValue(const QVariant &value){\
|
||||
return m_w->setValue(value.toInt());\
|
||||
}\
|
||||
|
||||
#define FUNC_MAXMUMVALUE(classname) QVariant Accessible##classname::maximumValue() const{\
|
||||
return QVariant(m_w->maximum());\
|
||||
}\
|
||||
|
||||
#define FUNC_FUNC_MINIMUMVALUE(classname) QVariant Accessible##classname::minimumValue() const{\
|
||||
return QVariant(m_w->minimum());\
|
||||
}\
|
||||
|
||||
// DSlider控件特有功能函数
|
||||
#define FUNC_FUNC_MINIMUMSTEPSIZE(classname) QVariant Accessible##classname::minimumStepSize() const{\
|
||||
return QVariant(m_w->pageStep());\
|
||||
}\
|
||||
|
||||
#define SET_FORM_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,accessdescription) class Accessible##classname : public QAccessibleWidget\
|
||||
{\
|
||||
public:\
|
||||
FUNC_CREATE(classname,QAccessible::Form,accessdescription)\
|
||||
QString text(QAccessible::Text t) const override;\
|
||||
void *interface_cast(QAccessible::InterfaceType t) override{\
|
||||
switch (t) {\
|
||||
case QAccessible::ActionInterface:\
|
||||
return static_cast<QAccessibleActionInterface*>(this);\
|
||||
default:\
|
||||
return nullptr;\
|
||||
}\
|
||||
}\
|
||||
private:\
|
||||
classname *m_w;\
|
||||
QString m_description;\
|
||||
};\
|
||||
FUNC_TEXT(classname,accessiblename)\
|
||||
|
||||
#define SET_BUTTON_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,accessdescription) class Accessible##classname : public QAccessibleWidget\
|
||||
{\
|
||||
public:\
|
||||
FUNC_CREATE(classname,QAccessible::Button,accessdescription)\
|
||||
QString text(QAccessible::Text t) const override;\
|
||||
void *interface_cast(QAccessible::InterfaceType t) override{\
|
||||
switch (t) {\
|
||||
case QAccessible::ActionInterface:\
|
||||
return static_cast<QAccessibleActionInterface*>(this);\
|
||||
default:\
|
||||
return nullptr;\
|
||||
}\
|
||||
}\
|
||||
QStringList actionNames() const override;\
|
||||
void doAction(const QString &actionName) override;\
|
||||
private:\
|
||||
classname *m_w;\
|
||||
QString m_description;\
|
||||
};\
|
||||
FUNC_TEXT(classname,accessiblename)\
|
||||
FUNC_ACTIONNAMES(classname)\
|
||||
FUNC_DOACTION(classname)\
|
||||
|
||||
#define SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,accessdescription) class Accessible##classname : public QAccessibleWidget, public QAccessibleTextInterface\
|
||||
{\
|
||||
public:\
|
||||
FUNC_CREATE(classname,QAccessible::StaticText,accessdescription)\
|
||||
QString text(QAccessible::Text t) const override;\
|
||||
void *interface_cast(QAccessible::InterfaceType t) override{\
|
||||
switch (t) {\
|
||||
case QAccessible::ActionInterface:\
|
||||
return static_cast<QAccessibleActionInterface*>(this);\
|
||||
case QAccessible::TextInterface:\
|
||||
return static_cast<QAccessibleTextInterface*>(this);\
|
||||
default:\
|
||||
return nullptr;\
|
||||
}\
|
||||
}\
|
||||
QString text(int startOffset, int endOffset) const override;\
|
||||
void selection(int selectionIndex, int *startOffset, int *endOffset) const override {\
|
||||
Q_UNUSED(selectionIndex)\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
}\
|
||||
int selectionCount() const override { return 0; }\
|
||||
void addSelection(int startOffset, int endOffset) override {\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
}\
|
||||
void removeSelection(int selectionIndex) override {\
|
||||
Q_UNUSED(selectionIndex)\
|
||||
}\
|
||||
void setSelection(int selectionIndex, int startOffset, int endOffset) override {\
|
||||
Q_UNUSED(selectionIndex)\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
}\
|
||||
int cursorPosition() const override { return 0; }\
|
||||
void setCursorPosition(int position) override {\
|
||||
Q_UNUSED(position)\
|
||||
}\
|
||||
int characterCount() const override { return 0; }\
|
||||
QRect characterRect(int offset) const override {\
|
||||
Q_UNUSED(offset)\
|
||||
return QRect();\
|
||||
}\
|
||||
int offsetAtPoint(const QPoint &point) const override {\
|
||||
Q_UNUSED(point)\
|
||||
return 0;\
|
||||
}\
|
||||
void scrollToSubstring(int startIndex, int endIndex) override {\
|
||||
Q_UNUSED(startIndex)\
|
||||
Q_UNUSED(endIndex)\
|
||||
}\
|
||||
QString attributes(int offset, int *startOffset, int *endOffset) const override {\
|
||||
Q_UNUSED(offset)\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
return QString();\
|
||||
}\
|
||||
private:\
|
||||
classname *m_w;\
|
||||
QString m_description;\
|
||||
};\
|
||||
FUNC_TEXT(classname,accessiblename)\
|
||||
FUNC_TEXT_(classname)\
|
||||
|
||||
#define SET_SLIDER_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,accessdescription) class Accessible##classname : public QAccessibleWidget, public QAccessibleValueInterface\
|
||||
{\
|
||||
public:\
|
||||
FUNC_CREATE(classname,QAccessible::Slider,accessdescription)\
|
||||
QString text(QAccessible::Text t) const override;\
|
||||
void *interface_cast(QAccessible::InterfaceType t) override{\
|
||||
switch (t) {\
|
||||
case QAccessible::ActionInterface:\
|
||||
return static_cast<QAccessibleActionInterface*>(this);\
|
||||
case QAccessible::ValueInterface:\
|
||||
return static_cast<QAccessibleValueInterface*>(this);\
|
||||
default:\
|
||||
return nullptr;\
|
||||
}\
|
||||
}\
|
||||
QVariant currentValue() const override;\
|
||||
void setCurrentValue(const QVariant &value) override;\
|
||||
QVariant maximumValue() const override;\
|
||||
QVariant minimumValue() const override;\
|
||||
QVariant minimumStepSize() const override;\
|
||||
private:\
|
||||
classname *m_w;\
|
||||
QString m_description;\
|
||||
};\
|
||||
FUNC_TEXT(classname,accessiblename)\
|
||||
FUNC_CURRENTVALUE(classname)\
|
||||
FUNC_SETCURRENTVALUE(classname)\
|
||||
FUNC_MAXMUMVALUE(classname)\
|
||||
FUNC_FUNC_MINIMUMVALUE(classname)\
|
||||
FUNC_FUNC_MINIMUMSTEPSIZE(classname)\
|
||||
|
||||
#define SET_EDITABLE_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,accessdescription) class Accessible##classname : public QAccessibleWidget, public QAccessibleEditableTextInterface, public QAccessibleTextInterface\
|
||||
{\
|
||||
public:\
|
||||
FUNC_CREATE(classname,QAccessible::EditableText,accessdescription)\
|
||||
QString text(QAccessible::Text t) const override;\
|
||||
QAccessibleInterface *child(int index) const override { Q_UNUSED(index); return nullptr; }\
|
||||
void *interface_cast(QAccessible::InterfaceType t) override{\
|
||||
switch (t) {\
|
||||
case QAccessible::ActionInterface:\
|
||||
return static_cast<QAccessibleActionInterface*>(this);\
|
||||
case QAccessible::TextInterface:\
|
||||
return static_cast<QAccessibleTextInterface*>(this);\
|
||||
case QAccessible::EditableTextInterface:\
|
||||
return static_cast<QAccessibleEditableTextInterface*>(this);\
|
||||
default:\
|
||||
return nullptr;\
|
||||
}\
|
||||
}\
|
||||
QString text(int startOffset, int endOffset) const override;\
|
||||
void selection(int selectionIndex, int *startOffset, int *endOffset) const override {\
|
||||
Q_UNUSED(selectionIndex)\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
}\
|
||||
int selectionCount() const override { return 0; }\
|
||||
void addSelection(int startOffset, int endOffset) override {\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
}\
|
||||
void removeSelection(int selectionIndex) override { Q_UNUSED(selectionIndex);}\
|
||||
void setSelection(int selectionIndex, int startOffset, int endOffset) override {\
|
||||
Q_UNUSED(selectionIndex)\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
}\
|
||||
int cursorPosition() const override { return 0; }\
|
||||
void setCursorPosition(int position) override {\
|
||||
Q_UNUSED(position)\
|
||||
}\
|
||||
int characterCount() const override { return 0; }\
|
||||
QRect characterRect(int offset) const override { \
|
||||
Q_UNUSED(offset)\
|
||||
return QRect(); }\
|
||||
int offsetAtPoint(const QPoint &point) const override {\
|
||||
Q_UNUSED(point)\
|
||||
return 0; }\
|
||||
void scrollToSubstring(int startIndex, int endIndex) override {\
|
||||
Q_UNUSED(startIndex)\
|
||||
Q_UNUSED(endIndex)\
|
||||
}\
|
||||
QString attributes(int offset, int *startOffset, int *endOffset) const override {\
|
||||
Q_UNUSED(offset)\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
return QString(); }\
|
||||
void insertText(int offset, const QString &text) override {\
|
||||
Q_UNUSED(offset)\
|
||||
Q_UNUSED(text)\
|
||||
}\
|
||||
void deleteText(int startOffset, int endOffset) override {\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
}\
|
||||
void replaceText(int startOffset, int endOffset, const QString &text) override {\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
Q_UNUSED(text)\
|
||||
}\
|
||||
private:\
|
||||
classname *m_w;\
|
||||
QString m_description;\
|
||||
};\
|
||||
FUNC_TEXT(classname,accessiblename)\
|
||||
FUNC_TEXT_(classname)\
|
||||
|
||||
#define USE_ACCESSIBLE(classnamestring,classname) if (classnamestring == QLatin1String(#classname) && object && object->isWidgetType())\
|
||||
{\
|
||||
interface = new Accessible##classname(static_cast<classname *>(object));\
|
||||
}\
|
||||
|
||||
#define ELSE_USE_ACCESSIBLE(classnamestring,classname) else if (classnamestring == QLatin1String(#classname) && object && object->isWidgetType())\
|
||||
{\
|
||||
interface = new Accessible##classname(static_cast<classname *>(object));\
|
||||
}\
|
||||
|
||||
|
||||
// [指定objectname]---适用同一个类,但objectname不同的情况
|
||||
#define USE_ACCESSIBLE_BY_OBJECTNAME(classnamestring,classname,objectname) if (classnamestring == QLatin1String(#classname) && object && (object->objectName() == objectname) && object->isWidgetType())\
|
||||
{\
|
||||
interface = new Accessible##classname(static_cast<classname *>(object));\
|
||||
}\
|
||||
|
||||
#define ELSE_USE_ACCESSIBLE_BY_OBJECTNAME(classnamestring,classname,objectname) else if (classnamestring == QLatin1String(#classname) && object && (object->objectName() == objectname) && object->isWidgetType())\
|
||||
{\
|
||||
interface = new Accessible##classname(static_cast<classname *>(object));\
|
||||
}\
|
||||
|
||||
/*******************************************简化使用*******************************************/
|
||||
#define SET_FORM_ACCESSIBLE(classname,accessiblename) SET_FORM_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,"")
|
||||
|
||||
#define SET_BUTTON_ACCESSIBLE(classname,accessiblename) SET_BUTTON_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,"")
|
||||
|
||||
#define SET_LABEL_ACCESSIBLE(classname,accessiblename) SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,"")
|
||||
|
||||
#define SET_SLIDER_ACCESSIBLE(classname,accessiblename) SET_SLIDER_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,"")
|
||||
|
||||
#define SET_EDITABLE_ACCESSIBLE(classname,accessiblename) SET_EDITABLE_ACCESSIBLE_WITH_DESCRIPTION(classname,accessiblename,"")
|
||||
/************************************************************************************************/
|
||||
|
||||
#endif // ACCESSIBLEINTERFACE_H
|
@ -1,4 +1,5 @@
|
||||
// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
// Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
@ -6,8 +7,14 @@
|
||||
#include "appitem.h"
|
||||
#include "launcheritem.h"
|
||||
#include "pluginsitem.h"
|
||||
#include "taskmanager/entry.h"
|
||||
#include "taskmanager/taskmanager.h"
|
||||
#include "taskmanager/windowinfobase.h"
|
||||
#include "traypluginitem.h"
|
||||
#include "utils.h"
|
||||
#include "docksettings.h"
|
||||
#include "appmultiitem.h"
|
||||
#include "quicksettingcontroller.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QGSettings>
|
||||
@ -21,39 +28,46 @@ const QGSettings *DockItemManager::m_dockedSettings = Utils::ModuleSettingsPtr("
|
||||
|
||||
DockItemManager::DockItemManager(QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_appInter(new DBusDock("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this))
|
||||
, m_pluginsInter(new DockPluginsController(this))
|
||||
, m_taskmanager(TaskManager::instance())
|
||||
, m_loadFinished(false)
|
||||
{
|
||||
//固定区域:启动器
|
||||
m_itemList.append(new LauncherItem);
|
||||
|
||||
// 应用区域
|
||||
for (auto entry : m_appInter->entries()) {
|
||||
for (auto entry : m_taskmanager->getEntries()) {
|
||||
AppItem *it = new AppItem(m_appSettings, m_activeSettings, m_dockedSettings, entry);
|
||||
manageItem(it);
|
||||
|
||||
connect(it, &AppItem::requestActivateWindow, m_appInter, &DBusDock::ActivateWindow, Qt::QueuedConnection);
|
||||
connect(it, &AppItem::requestPreviewWindow, m_appInter, &DBusDock::PreviewWindow);
|
||||
connect(it, &AppItem::requestCancelPreview, m_appInter, &DBusDock::CancelPreviewWindow);
|
||||
|
||||
connect(it, &AppItem::requestPreviewWindow, m_taskmanager, &TaskManager::previewWindow);
|
||||
connect(it, &AppItem::requestCancelPreview, m_taskmanager, &TaskManager::cancelPreviewWindow);
|
||||
connect(it, &AppItem::windowCountChanged, this, &DockItemManager::onAppWindowCountChanged);
|
||||
connect(this, &DockItemManager::requestUpdateDockItem, it, &AppItem::requestUpdateEntryGeometries);
|
||||
|
||||
m_itemList.append(it);
|
||||
m_appIDist.append(it->appId());
|
||||
updateMultiItems(it);
|
||||
}
|
||||
|
||||
// 托盘区域和插件区域 由DockPluginsController获取
|
||||
QuickSettingController *quickController = QuickSettingController::instance();
|
||||
connect(quickController, &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute pluginAttr) {
|
||||
if (pluginAttr != QuickSettingController::PluginAttribute::Fixed)
|
||||
return;
|
||||
|
||||
m_pluginItems << itemInter;
|
||||
pluginItemInserted(quickController->pluginItemWidget(itemInter));
|
||||
});
|
||||
|
||||
connect(quickController, &QuickSettingController::pluginRemoved, this, &DockItemManager::onPluginItemRemoved);
|
||||
connect(quickController, &QuickSettingController::pluginUpdated, this, &DockItemManager::onPluginUpdate);
|
||||
connect(quickController, &QuickSettingController::pluginLoaderFinished, this, &DockItemManager::onPluginLoadFinished, Qt::QueuedConnection);
|
||||
|
||||
// 应用信号
|
||||
connect(m_appInter, &DBusDock::EntryAdded, this, &DockItemManager::appItemAdded);
|
||||
connect(m_appInter, &DBusDock::EntryRemoved, this, static_cast<void (DockItemManager::*)(const QString &)>(&DockItemManager::appItemRemoved), Qt::QueuedConnection);
|
||||
connect(m_appInter, &DBusDock::ServiceRestarted, this, &DockItemManager::reloadAppItems);
|
||||
|
||||
// 插件信号
|
||||
connect(m_pluginsInter, &DockPluginsController::pluginItemInserted, this, &DockItemManager::pluginItemInserted, Qt::QueuedConnection);
|
||||
connect(m_pluginsInter, &DockPluginsController::pluginItemRemoved, this, &DockItemManager::pluginItemRemoved, Qt::QueuedConnection);
|
||||
connect(m_pluginsInter, &DockPluginsController::pluginItemUpdated, this, &DockItemManager::itemUpdated, Qt::QueuedConnection);
|
||||
connect(m_pluginsInter, &DockPluginsController::trayVisableCountChanged, this, &DockItemManager::trayVisableCountChanged, Qt::QueuedConnection);
|
||||
connect(m_pluginsInter, &DockPluginsController::pluginLoaderFinished, this, &DockItemManager::onPluginLoadFinished, Qt::QueuedConnection);
|
||||
connect(m_taskmanager, &TaskManager::entryAdded, this, &DockItemManager::appItemAdded, Qt::DirectConnection);
|
||||
connect(m_taskmanager, &TaskManager::entryRemoved, this, static_cast<void (DockItemManager::*)(const QString &)>(&DockItemManager::appItemRemoved), Qt::DirectConnection);
|
||||
connect(m_taskmanager, &TaskManager::serviceRestarted, this, &DockItemManager::reloadAppItems);
|
||||
connect(DockSettings::instance(), &DockSettings::showMultiWindowChanged, this, &DockItemManager::onShowMultiWindowChanged);
|
||||
|
||||
DApplication *app = qobject_cast<DApplication *>(qApp);
|
||||
if (app) {
|
||||
@ -62,8 +76,15 @@ DockItemManager::DockItemManager(QObject *parent)
|
||||
|
||||
connect(qApp, &QApplication::aboutToQuit, this, &QObject::deleteLater);
|
||||
|
||||
// 读取已经加载的固定区域插件
|
||||
QList<PluginsItemInterface *> plugins = quickController->pluginItems(QuickSettingController::PluginAttribute::Fixed);
|
||||
for (PluginsItemInterface *plugin : plugins) {
|
||||
m_pluginItems << plugin;
|
||||
pluginItemInserted(quickController->pluginItemWidget(plugin));
|
||||
}
|
||||
|
||||
// 刷新图标
|
||||
QMetaObject::invokeMethod(this, "refreshItemsIcon", Qt::QueuedConnection);
|
||||
QMetaObject::invokeMethod(this, &DockItemManager::refreshItemsIcon, Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
DockItemManager *DockItemManager::instance(QObject *parent)
|
||||
@ -79,20 +100,9 @@ const QList<QPointer<DockItem>> DockItemManager::itemList() const
|
||||
return m_itemList;
|
||||
}
|
||||
|
||||
const QList<PluginsItemInterface *> DockItemManager::pluginList() const
|
||||
{
|
||||
return m_pluginsInter->pluginsMap().keys();
|
||||
}
|
||||
|
||||
bool DockItemManager::appIsOnDock(const QString &appDesktop) const
|
||||
{
|
||||
return m_appInter->IsOnDock(appDesktop);
|
||||
}
|
||||
|
||||
void DockItemManager::startLoadPlugins() const
|
||||
{
|
||||
int delay = Utils::SettingValue("com.deepin.dde.dock", "/com/deepin/dde/dock/", "delay-plugins-time", 0).toInt();
|
||||
QTimer::singleShot(delay, m_pluginsInter, &DockPluginsController::startLoader);
|
||||
return m_taskmanager->isOnDock(appDesktop);
|
||||
}
|
||||
|
||||
void DockItemManager::refreshItemsIcon()
|
||||
@ -160,15 +170,15 @@ void DockItemManager::itemMoved(DockItem *const sourceItem, DockItem *const targ
|
||||
|
||||
// for app move, index 0 is launcher item, need to pass it.
|
||||
if (moveType == DockItem::App && replaceType == DockItem::App)
|
||||
m_appInter->MoveEntry(moveIndex - 1, replaceIndex - 1);
|
||||
m_taskmanager->moveEntry(moveIndex - 1, replaceIndex - 1);
|
||||
}
|
||||
|
||||
void DockItemManager::itemAdded(const QString &appDesktop, int idx)
|
||||
{
|
||||
m_appInter->RequestDock(appDesktop, idx);
|
||||
m_taskmanager->requestDock(appDesktop, idx);
|
||||
}
|
||||
|
||||
void DockItemManager::appItemAdded(const QDBusObjectPath &path, const int index)
|
||||
void DockItemManager::appItemAdded(const Entry *entry, const int index)
|
||||
{
|
||||
// 第一个是启动器
|
||||
int insertIndex = 1;
|
||||
@ -182,29 +192,31 @@ void DockItemManager::appItemAdded(const QDBusObjectPath &path, const int index)
|
||||
++insertIndex;
|
||||
}
|
||||
|
||||
AppItem *item = new AppItem(m_appSettings, m_activeSettings, m_dockedSettings, path);
|
||||
AppItem *item = new AppItem(m_appSettings, m_activeSettings, m_dockedSettings, entry);
|
||||
|
||||
if (m_appIDist.contains(item->appId())) {
|
||||
delete item;
|
||||
item->deleteLater();
|
||||
return;
|
||||
}
|
||||
|
||||
manageItem(item);
|
||||
|
||||
connect(item, &AppItem::requestActivateWindow, m_appInter, &DBusDock::ActivateWindow, Qt::QueuedConnection);
|
||||
connect(item, &AppItem::requestPreviewWindow, m_appInter, &DBusDock::PreviewWindow);
|
||||
connect(item, &AppItem::requestCancelPreview, m_appInter, &DBusDock::CancelPreviewWindow);
|
||||
connect(item, &AppItem::requestPreviewWindow, m_taskmanager, &TaskManager::previewWindow);
|
||||
connect(item, &AppItem::requestCancelPreview, m_taskmanager, &TaskManager::cancelPreviewWindow);
|
||||
connect(item, &AppItem::windowCountChanged, this, &DockItemManager::onAppWindowCountChanged);
|
||||
connect(this, &DockItemManager::requestUpdateDockItem, item, &AppItem::requestUpdateEntryGeometries);
|
||||
|
||||
m_itemList.insert(insertIndex, item);
|
||||
m_appIDist.append(item->appId());
|
||||
|
||||
if (index != -1) {
|
||||
emit itemInserted(insertIndex - 1, item);
|
||||
return;
|
||||
}
|
||||
int itemIndex = insertIndex;
|
||||
if (index != -1)
|
||||
itemIndex = insertIndex - 1;
|
||||
|
||||
emit itemInserted(insertIndex, item);
|
||||
// 插入dockItem
|
||||
emit itemInserted(itemIndex, item);
|
||||
// 向后插入多开窗口
|
||||
updateMultiItems(item, true);
|
||||
}
|
||||
|
||||
void DockItemManager::appItemRemoved(const QString &appId)
|
||||
@ -238,6 +250,24 @@ void DockItemManager::appItemRemoved(AppItem *appItem)
|
||||
appItem->deleteLater();
|
||||
}
|
||||
|
||||
void DockItemManager::reloadAppItems()
|
||||
{
|
||||
// remove old item
|
||||
for (auto item : m_itemList)
|
||||
if (item->itemType() == DockItem::App)
|
||||
appItemRemoved(static_cast<AppItem *>(item.data()));
|
||||
|
||||
// append new item
|
||||
for (Entry* entry : m_taskmanager->getEntries())
|
||||
appItemAdded(entry, -1);
|
||||
}
|
||||
|
||||
void DockItemManager::manageItem(DockItem *item)
|
||||
{
|
||||
connect(item, &DockItem::requestRefreshWindowVisible, this, &DockItemManager::requestRefershWindowVisible, Qt::UniqueConnection);
|
||||
connect(item, &DockItem::requestWindowAutoHide, this, &DockItemManager::requestWindowAutoHide, Qt::UniqueConnection);
|
||||
}
|
||||
|
||||
void DockItemManager::pluginItemInserted(PluginsItem *item)
|
||||
{
|
||||
manageItem(item);
|
||||
@ -287,44 +317,155 @@ void DockItemManager::pluginItemInserted(PluginsItem *item)
|
||||
|
||||
m_itemList.insert(insertIndex, item);
|
||||
if(pluginType == DockItem::FixedPlugin)
|
||||
{
|
||||
insertIndex ++;
|
||||
}
|
||||
|
||||
if (!Utils::SettingValue(QString("com.deepin.dde.dock.module.") + item->pluginName(), QByteArray(), "enable", true).toBool())
|
||||
item->setVisible(false);
|
||||
else
|
||||
item->setVisible(true);
|
||||
|
||||
emit itemInserted(insertIndex - firstPluginPosition, item);
|
||||
}
|
||||
|
||||
void DockItemManager::pluginItemRemoved(PluginsItem *item)
|
||||
void DockItemManager::onPluginItemRemoved(PluginsItemInterface *itemInter)
|
||||
{
|
||||
if (!m_pluginItems.contains(itemInter))
|
||||
return;
|
||||
|
||||
PluginsItem *item = QuickSettingController::instance()->pluginItemWidget(itemInter);
|
||||
item->hidePopup();
|
||||
item->hide();
|
||||
|
||||
emit itemRemoved(item);
|
||||
|
||||
m_itemList.removeOne(item);
|
||||
|
||||
if (m_loadFinished) {
|
||||
updatePluginsItemOrderKey();
|
||||
}
|
||||
}
|
||||
|
||||
void DockItemManager::reloadAppItems()
|
||||
void DockItemManager::onPluginUpdate(PluginsItemInterface *itemInter)
|
||||
{
|
||||
// remove old item
|
||||
for (auto item : m_itemList)
|
||||
if (item->itemType() == DockItem::App)
|
||||
appItemRemoved(static_cast<AppItem *>(item.data()));
|
||||
if (!m_pluginItems.contains(itemInter))
|
||||
return;
|
||||
|
||||
// append new item
|
||||
for (auto path : m_appInter->entries())
|
||||
appItemAdded(path, -1);
|
||||
}
|
||||
|
||||
void DockItemManager::manageItem(DockItem *item)
|
||||
{
|
||||
connect(item, &DockItem::requestRefreshWindowVisible, this, &DockItemManager::requestRefershWindowVisible, Qt::UniqueConnection);
|
||||
connect(item, &DockItem::requestWindowAutoHide, this, &DockItemManager::requestWindowAutoHide, Qt::UniqueConnection);
|
||||
Q_EMIT itemUpdated(QuickSettingController::instance()->pluginItemWidget(itemInter));
|
||||
}
|
||||
|
||||
void DockItemManager::onPluginLoadFinished()
|
||||
{
|
||||
updatePluginsItemOrderKey();
|
||||
m_loadFinished = true;
|
||||
}
|
||||
|
||||
void DockItemManager::onAppWindowCountChanged()
|
||||
{
|
||||
AppItem *appItem = static_cast<AppItem *>(sender());
|
||||
updateMultiItems(appItem, true);
|
||||
}
|
||||
|
||||
void DockItemManager::updateMultiItems(AppItem *appItem, bool emitSignal)
|
||||
{
|
||||
// 如果系统设置不开启应用多窗口拆分,则无需之后的操作
|
||||
if (!m_taskmanager->showMultiWindow())
|
||||
return;
|
||||
|
||||
// 如果开启了多窗口拆分,则同步窗口和多窗口应用的信息
|
||||
const WindowInfoMap &windowInfoMap = appItem->windowsInfos();
|
||||
QList<AppMultiItem *> removeItems;
|
||||
// 同步当前已经存在的多开窗口的列表,删除不存在的多开窗口
|
||||
for (int i = 0; i < m_itemList.size(); i++) {
|
||||
QPointer<DockItem> dockItem = m_itemList[i];
|
||||
AppMultiItem *multiItem = qobject_cast<AppMultiItem *>(dockItem.data());
|
||||
if (!multiItem || multiItem->appItem() != appItem)
|
||||
continue;
|
||||
|
||||
// 如果查找到的当前的应用的窗口不需要移除,则继续下一个循环
|
||||
if (!needRemoveMultiWindow(multiItem))
|
||||
continue;
|
||||
|
||||
removeItems << multiItem;
|
||||
}
|
||||
// 从itemList中移除多开窗口
|
||||
for (AppMultiItem *dockItem : removeItems)
|
||||
m_itemList.removeOne(dockItem);
|
||||
if (emitSignal) {
|
||||
// 移除发送每个多开窗口的移除信号
|
||||
for (AppMultiItem *dockItem : removeItems)
|
||||
Q_EMIT itemRemoved(dockItem);
|
||||
}
|
||||
qDeleteAll(removeItems);
|
||||
|
||||
// 遍历当前APP打开的所有窗口的列表,如果不存在多开窗口的应用,则新增,同时发送信号
|
||||
for (auto it = windowInfoMap.begin(); it != windowInfoMap.end(); it++) {
|
||||
if (multiWindowExist(it.key()))
|
||||
continue;
|
||||
|
||||
const WindowInfo &windowInfo = it.value();
|
||||
// 如果不存在这个窗口对应的多开窗口,则新建一个窗口,同时发送窗口新增的信号
|
||||
AppMultiItem *multiItem = new AppMultiItem(appItem, it.key(), windowInfo);
|
||||
m_itemList << multiItem;
|
||||
if (emitSignal)
|
||||
Q_EMIT itemInserted(-1, multiItem);
|
||||
}
|
||||
}
|
||||
|
||||
// 检查对应的窗口是否存在多开窗口
|
||||
bool DockItemManager::multiWindowExist(quint32 winId) const
|
||||
{
|
||||
for (QPointer<DockItem> dockItem : m_itemList) {
|
||||
AppMultiItem *multiItem = qobject_cast<AppMultiItem *>(dockItem.data());
|
||||
if (!multiItem)
|
||||
continue;
|
||||
|
||||
if (multiItem->winId() == winId)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查当前多开窗口是否需要移除
|
||||
// 如果当前多开窗口图标对应的窗口在这个窗口所属的APP中所有打开窗口中不存在,那么则认为该多窗口已经被关闭
|
||||
bool DockItemManager::needRemoveMultiWindow(AppMultiItem *multiItem) const
|
||||
{
|
||||
// 查找多分窗口对应的窗口在应用所有的打开的窗口中是否存在,只要它对应的窗口存在,就无需删除
|
||||
// 只要不存在,就需要删除
|
||||
AppItem *appItem = multiItem->appItem();
|
||||
const WindowInfoMap &windowInfoMap = appItem->windowsInfos();
|
||||
for (auto it = windowInfoMap.begin(); it != windowInfoMap.end(); it++) {
|
||||
if (it.key() == multiItem->winId())
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DockItemManager::onShowMultiWindowChanged()
|
||||
{
|
||||
if (m_taskmanager->showMultiWindow()) {
|
||||
// 如果当前设置支持窗口多开,那么就依次对每个APPItem加载多开窗口
|
||||
for (int i = 0; i < m_itemList.size(); i++) {
|
||||
const QPointer<DockItem> &dockItem = m_itemList[i];
|
||||
if (dockItem->itemType() != DockItem::ItemType::App)
|
||||
continue;
|
||||
|
||||
updateMultiItems(static_cast<AppItem *>(dockItem.data()), true);
|
||||
}
|
||||
} else {
|
||||
// 如果当前设置不支持窗口多开,则删除所有的多开窗口
|
||||
QList<DockItem *> multiWindows;
|
||||
for (const QPointer<DockItem> &dockItem : m_itemList) {
|
||||
if (dockItem->itemType() != DockItem::AppMultiWindow)
|
||||
continue;
|
||||
|
||||
multiWindows << dockItem.data();
|
||||
}
|
||||
for (DockItem *multiItem : multiWindows) {
|
||||
m_itemList.removeOne(multiItem);
|
||||
Q_EMIT itemRemoved(multiItem);
|
||||
multiItem->deleteLater();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,21 +1,24 @@
|
||||
// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
// Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef DOCKITEMMANAGER_H
|
||||
#define DOCKITEMMANAGER_H
|
||||
|
||||
#include "dockpluginscontroller.h"
|
||||
#include "pluginsiteminterface.h"
|
||||
#include "dockitem.h"
|
||||
#include "appitem.h"
|
||||
#include "placeholderitem.h"
|
||||
|
||||
#include <com_deepin_dde_daemon_dock.h>
|
||||
#include "dbusutil.h"
|
||||
#include "taskmanager/taskmanager.h"
|
||||
#include "taskmanager/windowinfobase.h"
|
||||
|
||||
#include <QObject>
|
||||
|
||||
using DBusDock = com::deepin::dde::daemon::Dock;
|
||||
class AppMultiItem;
|
||||
class PluginsItem;
|
||||
|
||||
/**
|
||||
* @brief The DockItemManager class
|
||||
* 管理类,管理所有的应用数据,插件数据
|
||||
@ -28,9 +31,7 @@ public:
|
||||
static DockItemManager *instance(QObject *parent = nullptr);
|
||||
|
||||
const QList<QPointer<DockItem> > itemList() const;
|
||||
const QList<PluginsItemInterface *> pluginList() const;
|
||||
bool appIsOnDock(const QString &appDesktop) const;
|
||||
void startLoadPlugins() const;
|
||||
|
||||
signals:
|
||||
void itemInserted(const int index, DockItem *item) const;
|
||||
@ -49,26 +50,36 @@ public slots:
|
||||
|
||||
private Q_SLOTS:
|
||||
void onPluginLoadFinished();
|
||||
void onPluginItemRemoved(PluginsItemInterface *itemInter);
|
||||
void onPluginUpdate(PluginsItemInterface *itemInter);
|
||||
|
||||
void onAppWindowCountChanged();
|
||||
void onShowMultiWindowChanged();
|
||||
|
||||
private:
|
||||
explicit DockItemManager(QObject *parent = nullptr);
|
||||
void appItemAdded(const QDBusObjectPath &path, const int index);
|
||||
void appItemAdded(const Entry *entry, const int index);
|
||||
void appItemRemoved(const QString &appId);
|
||||
void appItemRemoved(AppItem *appItem);
|
||||
void pluginItemInserted(PluginsItem *item);
|
||||
void pluginItemRemoved(PluginsItem *item);
|
||||
void updatePluginsItemOrderKey();
|
||||
void reloadAppItems();
|
||||
void manageItem(DockItem *item);
|
||||
void pluginItemInserted(PluginsItem *item);
|
||||
|
||||
void updateMultiItems(AppItem *appItem, bool emitSignal = false);
|
||||
bool multiWindowExist(quint32 winId) const;
|
||||
bool needRemoveMultiWindow(AppMultiItem *multiItem) const;
|
||||
|
||||
private:
|
||||
DBusDock *m_appInter;
|
||||
DockPluginsController *m_pluginsInter;
|
||||
TaskManager *m_taskmanager;
|
||||
|
||||
static DockItemManager *INSTANCE;
|
||||
|
||||
QList<QPointer<DockItem>> m_itemList;
|
||||
QList<QString> m_appIDist;
|
||||
QList<PluginsItemInterface *> m_pluginItems;
|
||||
|
||||
bool m_loadFinished; // 记录所有插件是否加载完成
|
||||
|
||||
static const QGSettings *m_appSettings;
|
||||
static const QGSettings *m_activeSettings;
|
||||
|
@ -1,147 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2011 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "dockpluginscontroller.h"
|
||||
#include "pluginsiteminterface.h"
|
||||
#include "traypluginitem.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QDrag>
|
||||
|
||||
DockPluginsController::DockPluginsController(QObject *parent)
|
||||
: AbstractPluginsController(parent)
|
||||
{
|
||||
setObjectName("DockPlugin");
|
||||
}
|
||||
|
||||
void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, const QString &itemKey)
|
||||
{
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &mPluginsMap = pluginsMap();
|
||||
|
||||
// check if same item added
|
||||
if (mPluginsMap.contains(itemInter))
|
||||
if (mPluginsMap[itemInter].contains(itemKey))
|
||||
return;
|
||||
|
||||
// 取 plugin api
|
||||
QPluginLoader *pluginLoader = qobject_cast<QPluginLoader*>(mPluginsMap[itemInter].value("pluginloader"));
|
||||
if (!pluginLoader) {
|
||||
return;
|
||||
}
|
||||
const QJsonObject &meta = pluginLoader->metaData().value("MetaData").toObject();
|
||||
const QString &pluginApi = meta.value("api").toString();
|
||||
|
||||
PluginsItem *item = nullptr;
|
||||
if (itemInter->pluginName() == "tray") {
|
||||
item = new TrayPluginItem(itemInter, itemKey, pluginApi);
|
||||
if (item->graphicsEffect()) {
|
||||
item->graphicsEffect()->setEnabled(false);
|
||||
}
|
||||
connect(static_cast<TrayPluginItem *>(item), &TrayPluginItem::trayVisableCountChanged,
|
||||
this, &DockPluginsController::trayVisableCountChanged, Qt::UniqueConnection);
|
||||
} else {
|
||||
item = new PluginsItem(itemInter, itemKey, pluginApi);
|
||||
}
|
||||
|
||||
mPluginsMap[itemInter][itemKey] = item;
|
||||
|
||||
emit pluginItemInserted(item);
|
||||
}
|
||||
|
||||
void DockPluginsController::itemUpdate(PluginsItemInterface *const itemInter, const QString &itemKey)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
item->update();
|
||||
|
||||
emit pluginItemUpdated(item);
|
||||
}
|
||||
|
||||
void DockPluginsController::itemRemoved(PluginsItemInterface *const itemInter, const QString &itemKey)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
item->detachPluginWidget();
|
||||
|
||||
emit pluginItemRemoved(item);
|
||||
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &mPluginsMap = pluginsMap();
|
||||
mPluginsMap[itemInter].remove(itemKey);
|
||||
|
||||
// do not delete the itemWidget object(specified in the plugin interface)
|
||||
item->centralWidget()->setParent(nullptr);
|
||||
|
||||
if (item->isDragging()) {
|
||||
QDrag::cancel();
|
||||
}
|
||||
|
||||
// just delete our wrapper object(PluginsItem)
|
||||
item->deleteLater();
|
||||
}
|
||||
|
||||
void DockPluginsController::requestWindowAutoHide(PluginsItemInterface *const itemInter, const QString &itemKey, const bool autoHide)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
Q_EMIT item->requestWindowAutoHide(autoHide);
|
||||
}
|
||||
|
||||
void DockPluginsController::requestRefreshWindowVisible(PluginsItemInterface *const itemInter, const QString &itemKey)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
Q_EMIT item->requestRefreshWindowVisible();
|
||||
}
|
||||
|
||||
void DockPluginsController::requestSetAppletVisible(PluginsItemInterface *const itemInter, const QString &itemKey, const bool visible)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
if (visible) {
|
||||
item->showPopupApplet(itemInter->itemPopupApplet(itemKey));
|
||||
} else {
|
||||
item->hidePopup();
|
||||
}
|
||||
}
|
||||
|
||||
void DockPluginsController::startLoader()
|
||||
{
|
||||
loadLocalPlugins();
|
||||
loadSystemPlugins();
|
||||
}
|
||||
|
||||
void DockPluginsController::loadLocalPlugins()
|
||||
{
|
||||
QString pluginsDir(QString("%1/.local/lib/dde-dock/plugins/").arg(QDir::homePath()));
|
||||
|
||||
if (!QDir(pluginsDir).exists()) {
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << "using dock local plugins dir:" << pluginsDir;
|
||||
|
||||
AbstractPluginsController::startLoader(new PluginLoader(pluginsDir, this));
|
||||
}
|
||||
|
||||
void DockPluginsController::loadSystemPlugins()
|
||||
{
|
||||
QString pluginsDir(qApp->applicationDirPath() + "/../plugins");
|
||||
#ifndef QT_DEBUG
|
||||
pluginsDir = "/usr/lib/dde-dock/plugins";
|
||||
#endif
|
||||
qDebug() << "using dock plugins dir:" << pluginsDir;
|
||||
|
||||
AbstractPluginsController::startLoader(new PluginLoader(pluginsDir, this));
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2011 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef DOCKPLUGINSCONTROLLER_H
|
||||
#define DOCKPLUGINSCONTROLLER_H
|
||||
|
||||
#include "pluginsitem.h"
|
||||
#include "pluginproxyinterface.h"
|
||||
#include "abstractpluginscontroller.h"
|
||||
|
||||
#include <com_deepin_dde_daemon_dock.h>
|
||||
|
||||
#include <QPluginLoader>
|
||||
#include <QList>
|
||||
#include <QMap>
|
||||
#include <QDBusConnectionInterface>
|
||||
|
||||
class PluginsItemInterface;
|
||||
class DockPluginsController : public AbstractPluginsController
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
friend class DockItemController;
|
||||
friend class DockItemManager;
|
||||
|
||||
public:
|
||||
explicit DockPluginsController(QObject *parent = nullptr);
|
||||
|
||||
// implements PluginProxyInterface
|
||||
void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) override;
|
||||
void itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) override;
|
||||
void itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) override;
|
||||
void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) override;
|
||||
void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) override;
|
||||
void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) override;
|
||||
|
||||
void startLoader();
|
||||
|
||||
signals:
|
||||
void pluginItemInserted(PluginsItem *pluginItem) const;
|
||||
void pluginItemRemoved(PluginsItem *pluginItem) const;
|
||||
void pluginItemUpdated(PluginsItem *pluginItem) const;
|
||||
void trayVisableCountChanged(const int &count) const;
|
||||
|
||||
private:
|
||||
void loadLocalPlugins();
|
||||
void loadSystemPlugins();
|
||||
};
|
||||
|
||||
#endif // DOCKPLUGINSCONTROLLER_H
|
139
frame/controller/multiwindowhelper.cpp
Normal file
139
frame/controller/multiwindowhelper.cpp
Normal file
@ -0,0 +1,139 @@
|
||||
// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "multiwindowhelper.h"
|
||||
#include "appmultiitem.h"
|
||||
#include "appitem.h"
|
||||
|
||||
MultiWindowHelper::MultiWindowHelper(QWidget *appWidget, QWidget *multiWindowWidget, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_appWidget(appWidget)
|
||||
, m_multiWindowWidget(multiWindowWidget)
|
||||
, m_displayMode(Dock::DisplayMode::Efficient)
|
||||
{
|
||||
m_appWidget->installEventFilter(this);
|
||||
m_multiWindowWidget->installEventFilter(this);
|
||||
}
|
||||
|
||||
void MultiWindowHelper::setDisplayMode(Dock::DisplayMode displayMode)
|
||||
{
|
||||
if (m_displayMode == displayMode)
|
||||
return;
|
||||
|
||||
m_displayMode = displayMode;
|
||||
resetMultiItemPosition();
|
||||
}
|
||||
|
||||
void MultiWindowHelper::addMultiWindow(int, AppMultiItem *item)
|
||||
{
|
||||
int index = itemIndex(item);
|
||||
if (m_displayMode == Dock::DisplayMode::Efficient) {
|
||||
// 将多开窗口项目插入到对应的APP的后面
|
||||
insertChildWidget(m_appWidget, index, item);
|
||||
} else {
|
||||
// 将多开窗口插入到工具区域的前面
|
||||
insertChildWidget(m_multiWindowWidget, index, item);
|
||||
}
|
||||
}
|
||||
|
||||
void MultiWindowHelper::removeMultiWindow(AppMultiItem *item)
|
||||
{
|
||||
if (m_appWidget->children().contains(item))
|
||||
m_appWidget->layout()->removeWidget(item);
|
||||
else
|
||||
m_multiWindowWidget->layout()->removeWidget(item);
|
||||
}
|
||||
|
||||
bool MultiWindowHelper::eventFilter(QObject *watched, QEvent *event)
|
||||
{
|
||||
if (watched == m_appWidget || watched == m_multiWindowWidget) {
|
||||
switch(event->type()) {
|
||||
case QEvent::ChildAdded:
|
||||
case QEvent::ChildRemoved: {
|
||||
/* 这里用异步的方式,因为收到QEvent::ChildAdded信号的时候,
|
||||
此时应用还没有插入到Widget中,收到QEvent::ChildRemoved信号的时候,
|
||||
此时应用还未从任务栏上移除,通过异步的方式保证同步新增或移除成功后才执行,这样更新的界面才是最准确的
|
||||
*/
|
||||
QMetaObject::invokeMethod(this, &MultiWindowHelper::requestUpdate, Qt::QueuedConnection);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return QObject::eventFilter(watched, event);
|
||||
}
|
||||
|
||||
int MultiWindowHelper::itemIndex(AppMultiItem *item)
|
||||
{
|
||||
if (m_displayMode != Dock::DisplayMode::Efficient)
|
||||
return -1;
|
||||
|
||||
// 高效模式,查找对应的应用或者这个应用所有的子窗口所在的位置,然后插入到最大的值的后面
|
||||
int lastIndex = -1;
|
||||
for (int i = 0; i < m_appWidget->layout()->count(); i++) {
|
||||
DockItem *dockItem = qobject_cast<DockItem *>(m_appWidget->layout()->itemAt(i)->widget());
|
||||
if (!dockItem)
|
||||
continue;
|
||||
|
||||
if (dockItem != item->appItem()) {
|
||||
AppMultiItem *multiItem = qobject_cast<AppMultiItem *>(dockItem);
|
||||
if (!multiItem || multiItem->appItem() != item->appItem())
|
||||
continue;
|
||||
}
|
||||
|
||||
lastIndex = i;
|
||||
}
|
||||
|
||||
if (lastIndex >= 0)
|
||||
return ++lastIndex;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void MultiWindowHelper::insertChildWidget(QWidget *parentWidget, int index, AppMultiItem *item)
|
||||
{
|
||||
QBoxLayout *layout = static_cast<QBoxLayout *>(parentWidget->layout());
|
||||
if (index >= 0)
|
||||
layout->insertWidget(index, item);
|
||||
else
|
||||
layout->addWidget(item);
|
||||
}
|
||||
|
||||
void MultiWindowHelper::resetMultiItemPosition()
|
||||
{
|
||||
QWidget *fromWidget = nullptr;
|
||||
QWidget *toWidget = nullptr;
|
||||
|
||||
if (m_displayMode == Dock::DisplayMode::Efficient) {
|
||||
// 从时尚模式变换为高效模式
|
||||
fromWidget = m_multiWindowWidget;
|
||||
toWidget = m_appWidget;
|
||||
} else {
|
||||
// 从高效模式变换到时尚模式
|
||||
fromWidget = m_appWidget;
|
||||
toWidget = m_multiWindowWidget;
|
||||
}
|
||||
|
||||
QList<AppMultiItem *> moveWidgetItem;
|
||||
for (int i = 0; i < fromWidget->layout()->count(); i++) {
|
||||
AppMultiItem *multiItem = qobject_cast<AppMultiItem *>(fromWidget->layout()->itemAt(i)->widget());
|
||||
if (!multiItem)
|
||||
continue;
|
||||
|
||||
moveWidgetItem << multiItem;
|
||||
}
|
||||
|
||||
QBoxLayout *toLayout = static_cast<QBoxLayout *>(toWidget->layout());
|
||||
for (AppMultiItem *item : moveWidgetItem) {
|
||||
fromWidget->layout()->removeWidget(item);
|
||||
int index = itemIndex(item);
|
||||
if (index >= 0)
|
||||
toLayout->insertWidget(index, item);
|
||||
else
|
||||
toLayout->addWidget(item);
|
||||
}
|
||||
}
|
43
frame/controller/multiwindowhelper.h
Normal file
43
frame/controller/multiwindowhelper.h
Normal file
@ -0,0 +1,43 @@
|
||||
// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef MULTIWINDOWHELPER_H
|
||||
#define MULTIWINDOWHELPER_H
|
||||
|
||||
#include "constants.h"
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class AppMultiItem;
|
||||
|
||||
class MultiWindowHelper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MultiWindowHelper(QWidget *appWidget, QWidget *multiWindowWidget, QObject *parent = nullptr);
|
||||
|
||||
void setDisplayMode(Dock::DisplayMode displayMode);
|
||||
void addMultiWindow(int, AppMultiItem *item);
|
||||
void removeMultiWindow(AppMultiItem *item);
|
||||
|
||||
Q_SIGNALS:
|
||||
void requestUpdate();
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject *watched, QEvent *event) override;
|
||||
|
||||
private:
|
||||
int itemIndex(AppMultiItem *item);
|
||||
void insertChildWidget(QWidget *parentWidget, int index, AppMultiItem *item);
|
||||
void resetMultiItemPosition();
|
||||
|
||||
private:
|
||||
QWidget *m_appWidget;
|
||||
QWidget *m_multiWindowWidget;
|
||||
Dock::DisplayMode m_displayMode;
|
||||
};
|
||||
|
||||
#endif // MULTIWINDOWHELPER_H
|
164
frame/controller/quicksettingcontroller.cpp
Normal file
164
frame/controller/quicksettingcontroller.cpp
Normal file
@ -0,0 +1,164 @@
|
||||
// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "quicksettingcontroller.h"
|
||||
#include "pluginsitem.h"
|
||||
#include "pluginmanagerinterface.h"
|
||||
|
||||
#include <QMetaObject>
|
||||
#include <customevent.h>
|
||||
|
||||
QuickSettingController::QuickSettingController(QObject *parent)
|
||||
: AbstractPluginsController(parent)
|
||||
{
|
||||
qApp->installEventFilter(this);
|
||||
// 只有在非安全模式下才加载插件,安全模式会在等退出安全模式后通过接受事件的方式来加载插件
|
||||
if (!qApp->property("safeMode").toBool())
|
||||
QMetaObject::invokeMethod(this, &QuickSettingController::startLoader, Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
QuickSettingController::~QuickSettingController()
|
||||
{
|
||||
}
|
||||
|
||||
bool QuickSettingController::eventFilter(QObject *watched, QEvent *event)
|
||||
{
|
||||
if (watched == qApp && event->type() == PluginLoadEvent::eventType()) {
|
||||
// 如果收到的是重新加载插件的消息(一般是在退出安全模式后),则直接加载插件即可
|
||||
startLoader();
|
||||
}
|
||||
|
||||
return AbstractPluginsController::eventFilter(watched, event);
|
||||
}
|
||||
|
||||
void QuickSettingController::startLoader()
|
||||
{
|
||||
#ifdef QT_DEBUG
|
||||
AbstractPluginsController::startLoader(new PluginLoader(QString("%1/..%2").arg(qApp->applicationDirPath()).arg("/plugins/loader"), this));
|
||||
#else
|
||||
AbstractPluginsController::startLoader(new PluginLoader("/usr/lib/dde-dock/plugins/loader", this));
|
||||
#endif
|
||||
}
|
||||
|
||||
void QuickSettingController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey)
|
||||
{
|
||||
// 根据读取到的metaData数据获取当前插件的类型,提供给外部
|
||||
PluginAttribute pluginAttr = pluginAttribute(itemInter);
|
||||
m_quickPlugins[pluginAttr] << itemInter;
|
||||
|
||||
emit pluginInserted(itemInter, pluginAttr);
|
||||
}
|
||||
|
||||
void QuickSettingController::itemUpdate(PluginsItemInterface * const itemInter, const QString &)
|
||||
{
|
||||
updateDockInfo(itemInter, DockPart::QuickPanel);
|
||||
updateDockInfo(itemInter, DockPart::QuickShow);
|
||||
updateDockInfo(itemInter, DockPart::SystemPanel);
|
||||
}
|
||||
|
||||
void QuickSettingController::itemRemoved(PluginsItemInterface * const itemInter, const QString &)
|
||||
{
|
||||
for (auto it = m_quickPlugins.begin(); it != m_quickPlugins.end(); it++) {
|
||||
QList<PluginsItemInterface *> &plugins = m_quickPlugins[it.key()];
|
||||
if (!plugins.contains(itemInter))
|
||||
continue;
|
||||
|
||||
plugins.removeOne(itemInter);
|
||||
if (plugins.isEmpty()) {
|
||||
QuickSettingController::PluginAttribute pluginclass = it.key();
|
||||
m_quickPlugins.remove(pluginclass);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
Q_EMIT pluginRemoved(itemInter);
|
||||
}
|
||||
|
||||
void QuickSettingController::requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible)
|
||||
{
|
||||
// 设置插件列表可见事件
|
||||
Q_EMIT requestAppletVisible(itemInter, itemKey, visible);
|
||||
}
|
||||
|
||||
void QuickSettingController::updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part)
|
||||
{
|
||||
Q_EMIT pluginUpdated(itemInter, part);
|
||||
}
|
||||
|
||||
QuickSettingController::PluginAttribute QuickSettingController::pluginAttribute(PluginsItemInterface * const itemInter) const
|
||||
{
|
||||
// 工具插件,例如回收站
|
||||
if (itemInter->flags() & PluginFlag::Type_Tool)
|
||||
return PluginAttribute::Tool;
|
||||
|
||||
// 系统插件,例如关机按钮
|
||||
if (itemInter->flags() & PluginFlag::Type_System)
|
||||
return PluginAttribute::System;
|
||||
|
||||
// 托盘插件,例如磁盘图标
|
||||
if (itemInter->flags() & PluginFlag::Type_Tray)
|
||||
return PluginAttribute::Tray;
|
||||
|
||||
// 固定插件,例如显示桌面和多任务试图
|
||||
if (itemInter->flags() & PluginFlag::Type_Fixed)
|
||||
return PluginAttribute::Fixed;
|
||||
|
||||
// 通用插件,一般的插件都是通用插件,就是放在快捷插件区域的那些插件
|
||||
if (itemInter->flags() & PluginFlag::Type_Common)
|
||||
return PluginAttribute::Quick;
|
||||
|
||||
// 基本插件,不在任务栏上显示的插件
|
||||
return PluginAttribute::None;
|
||||
}
|
||||
|
||||
QString QuickSettingController::itemKey(PluginsItemInterface *pluginItem) const
|
||||
{
|
||||
PluginManagerInterface *pManager = pluginManager();
|
||||
if (pManager)
|
||||
return pManager->itemKey(pluginItem);
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
QuickSettingController *QuickSettingController::instance()
|
||||
{
|
||||
static QuickSettingController instance;
|
||||
return &instance;
|
||||
}
|
||||
|
||||
QList<PluginsItemInterface *> QuickSettingController::pluginItems(const PluginAttribute &pluginClass) const
|
||||
{
|
||||
return m_quickPlugins.value(pluginClass);
|
||||
}
|
||||
|
||||
QJsonObject QuickSettingController::metaData(PluginsItemInterface *pluginItem)
|
||||
{
|
||||
PluginManagerInterface *pManager = pluginManager();
|
||||
if (pManager)
|
||||
return pManager->metaData(pluginItem);
|
||||
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
PluginsItem *QuickSettingController::pluginItemWidget(PluginsItemInterface *pluginItem)
|
||||
{
|
||||
if (m_pluginItemWidgetMap.contains(pluginItem))
|
||||
return m_pluginItemWidgetMap[pluginItem];
|
||||
|
||||
PluginsItem *widget = new PluginsItem(pluginItem, itemKey(pluginItem), metaData(pluginItem));
|
||||
m_pluginItemWidgetMap[pluginItem] = widget;
|
||||
return widget;
|
||||
}
|
||||
|
||||
QList<PluginsItemInterface *> QuickSettingController::pluginInSettings()
|
||||
{
|
||||
PluginManagerInterface *pManager = pluginManager();
|
||||
if (!pManager)
|
||||
return QList<PluginsItemInterface *>();
|
||||
|
||||
// 返回可用于在控制中心显示的插件
|
||||
return pManager->pluginsInSetting();
|
||||
}
|
64
frame/controller/quicksettingcontroller.h
Normal file
64
frame/controller/quicksettingcontroller.h
Normal file
@ -0,0 +1,64 @@
|
||||
// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef QUICKSETTINGCONTROLLER_H
|
||||
#define QUICKSETTINGCONTROLLER_H
|
||||
|
||||
#include "abstractpluginscontroller.h"
|
||||
#include "pluginsiteminterface.h"
|
||||
|
||||
class QuickSettingItem;
|
||||
class PluginsItem;
|
||||
|
||||
class QuickSettingController : public AbstractPluginsController
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum class PluginAttribute {
|
||||
None = 0, // 不在任何区域显示的插件
|
||||
Quick, // 快捷区域插件
|
||||
Tool, // 工具插件(回收站和窗管开发的另一套插件)
|
||||
System, // 系统插件(关机插件)
|
||||
Tray, // 托盘插件(U盘图标等)
|
||||
Fixed // 固定区域插件(显示桌面和多任务视图)
|
||||
};
|
||||
|
||||
public:
|
||||
static QuickSettingController *instance();
|
||||
QList<PluginsItemInterface *> pluginItems(const PluginAttribute &pluginClass) const;
|
||||
QJsonObject metaData(PluginsItemInterface *pluginItem);
|
||||
PluginsItem *pluginItemWidget(PluginsItemInterface *pluginItem);
|
||||
QList<PluginsItemInterface *> pluginInSettings();
|
||||
PluginAttribute pluginAttribute(PluginsItemInterface * const itemInter) const;
|
||||
QString itemKey(PluginsItemInterface *pluginItem) const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void pluginInserted(PluginsItemInterface *itemInter, const PluginAttribute);
|
||||
void pluginRemoved(PluginsItemInterface *itemInter);
|
||||
void pluginUpdated(PluginsItemInterface *, const DockPart);
|
||||
void requestAppletVisible(PluginsItemInterface * itemInter, const QString &itemKey, bool visible);
|
||||
|
||||
protected:
|
||||
explicit QuickSettingController(QObject *parent = Q_NULLPTR);
|
||||
~QuickSettingController() override;
|
||||
bool eventFilter(QObject *watched, QEvent *event) override;
|
||||
|
||||
void startLoader();
|
||||
|
||||
protected:
|
||||
void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) override;
|
||||
void itemUpdate(PluginsItemInterface * const itemInter, const QString &) override;
|
||||
void itemRemoved(PluginsItemInterface * const itemInter, const QString &) override;
|
||||
void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) override;
|
||||
|
||||
void updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) override;
|
||||
|
||||
private:
|
||||
QMap<PluginAttribute, QList<PluginsItemInterface *>> m_quickPlugins;
|
||||
QMap<PluginsItemInterface *, PluginsItem *> m_pluginItemWidgetMap;
|
||||
};
|
||||
|
||||
#endif // CONTAINERPLUGINSCONTROLLER_H
|
230
frame/controller/recentapphelper.cpp
Normal file
230
frame/controller/recentapphelper.cpp
Normal file
@ -0,0 +1,230 @@
|
||||
// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "recentapphelper.h"
|
||||
#include "dockitemmanager.h"
|
||||
#include "appitem.h"
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
#define ENTRY_NONE 0
|
||||
#define ENTRY_NORMAL 1
|
||||
#define ENTRY_RECENT 2
|
||||
|
||||
RecentAppHelper::RecentAppHelper(QWidget *appWidget, QWidget *recentWidget, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_appWidget(appWidget)
|
||||
, m_recentWidget(recentWidget)
|
||||
{
|
||||
m_appWidget->installEventFilter(this);
|
||||
m_recentWidget->installEventFilter(this);
|
||||
connect(this, &RecentAppHelper::requestUpdateRecentVisible, this, &RecentAppHelper::updateRecentVisible, Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
void RecentAppHelper::setDisplayMode(Dock::DisplayMode displayMode)
|
||||
{
|
||||
bool lastVisible = dockAppIsVisible();
|
||||
m_displayMode = displayMode;
|
||||
updateRecentVisible();
|
||||
updateDockAppVisible(lastVisible);
|
||||
}
|
||||
|
||||
// 当在应用区域调整位置的时候,需要重新设置索引
|
||||
void RecentAppHelper::resetAppInfo()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void RecentAppHelper::addAppItem(int index, DockItem *dockItem)
|
||||
{
|
||||
if (appInRecent(dockItem)) {
|
||||
addRecentAreaItem(index, dockItem);
|
||||
updateRecentVisible();
|
||||
} else {
|
||||
bool lastVisible = dockAppIsVisible();
|
||||
addAppAreaItem(index, dockItem);
|
||||
updateDockAppVisible(lastVisible);
|
||||
}
|
||||
|
||||
AppItem *appItem = qobject_cast<AppItem *>(dockItem);
|
||||
|
||||
connect(appItem, &AppItem::modeChanged, this, &RecentAppHelper::onModeChanged);
|
||||
}
|
||||
|
||||
void RecentAppHelper::removeAppItem(DockItem *dockItem)
|
||||
{
|
||||
if (m_recentWidget->children().contains(dockItem))
|
||||
removeRecentAreaItem(dockItem);
|
||||
else
|
||||
removeAppAreaItem(dockItem);
|
||||
}
|
||||
|
||||
bool RecentAppHelper::recentIsVisible() const
|
||||
{
|
||||
return m_recentWidget->isVisible();
|
||||
}
|
||||
|
||||
bool RecentAppHelper::dockAppIsVisible() const
|
||||
{
|
||||
return (m_displayMode == Dock::DisplayMode::Efficient
|
||||
|| m_appWidget->layout()->count() > 0);
|
||||
}
|
||||
|
||||
bool RecentAppHelper::eventFilter(QObject *watched, QEvent *event)
|
||||
{
|
||||
if (watched == m_appWidget || watched == m_recentWidget) {
|
||||
switch(event->type()) {
|
||||
case QEvent::ChildAdded:
|
||||
case QEvent::ChildRemoved: {
|
||||
QMetaObject::invokeMethod(this, [ this ] {
|
||||
/* 这里用异步的方式,因为收到QEvent::ChildAdded信号的时候,
|
||||
此时应用还没有插入到Widget中,收到QEvent::ChildRemoved信号的时候,
|
||||
此时应用还未从任务栏上移除,通过异步的方式保证同步新增或移除成功后才执行,这样更新的界面才是最准确的
|
||||
*/
|
||||
Q_EMIT requestUpdate();
|
||||
}, Qt::QueuedConnection);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return QObject::eventFilter(watched, event);
|
||||
}
|
||||
|
||||
void RecentAppHelper::onModeChanged(int mode)
|
||||
{
|
||||
AppItem *appItem = qobject_cast<AppItem *>(sender());
|
||||
if (!appItem)
|
||||
return;
|
||||
|
||||
auto moveItemToWidget = [ = ](QWidget *widget) {
|
||||
int index = getEntryIndex(appItem, widget);
|
||||
removeAppItem(appItem);
|
||||
QBoxLayout *layout = static_cast<QBoxLayout *>(widget->layout());
|
||||
layout->insertWidget(index, appItem);
|
||||
};
|
||||
|
||||
if (mode == ENTRY_NORMAL) {
|
||||
// 添加到应用区域
|
||||
moveItemToWidget(m_appWidget);
|
||||
} else if (mode == ENTRY_RECENT) {
|
||||
// 添加到最近打开应用区域
|
||||
moveItemToWidget(m_recentWidget);
|
||||
}
|
||||
updateRecentVisible();
|
||||
}
|
||||
|
||||
bool RecentAppHelper::appInRecent(DockItem *item) const
|
||||
{
|
||||
AppItem *appItem = qobject_cast<AppItem *>(item);
|
||||
if (!appItem)
|
||||
return false;
|
||||
|
||||
return (appItem->mode() == ENTRY_RECENT);
|
||||
}
|
||||
|
||||
void RecentAppHelper::addAppAreaItem(int index, DockItem *wdg)
|
||||
{
|
||||
QBoxLayout *boxLayout = static_cast<QBoxLayout *>(m_appWidget->layout());
|
||||
boxLayout->insertWidget(index, wdg);
|
||||
}
|
||||
|
||||
void RecentAppHelper::addRecentAreaItem(int index, DockItem *wdg)
|
||||
{
|
||||
QBoxLayout *recentLayout = static_cast<QBoxLayout *>(m_recentWidget->layout());
|
||||
recentLayout->insertWidget(index, wdg);
|
||||
}
|
||||
|
||||
void RecentAppHelper::updateRecentVisible()
|
||||
{
|
||||
bool lastRecentVisible = m_recentWidget->isVisible();
|
||||
bool recentVisible = lastRecentVisible;
|
||||
|
||||
if (m_displayMode == Dock::DisplayMode::Efficient) {
|
||||
// 如果是高效模式,不显示最近打开应用区域
|
||||
m_recentWidget->setVisible(false);
|
||||
recentVisible = false;
|
||||
} else {
|
||||
QBoxLayout *recentLayout = static_cast<QBoxLayout *>(m_recentWidget->layout());
|
||||
qInfo() << "recent Widget count:" << recentLayout->count() << ", app Widget count" << m_appWidget->layout()->count();
|
||||
// 如果是时尚模式,则判断当前打开应用数量是否为0,为0则不显示,否则显示
|
||||
recentVisible = (recentLayout->count() > 0);
|
||||
m_recentWidget->setVisible(recentVisible);
|
||||
}
|
||||
|
||||
if (lastRecentVisible != recentVisible)
|
||||
Q_EMIT recentVisibleChanged(recentVisible);
|
||||
}
|
||||
|
||||
void RecentAppHelper::updateDockAppVisible(bool lastVisible)
|
||||
{
|
||||
bool visible = dockAppIsVisible();
|
||||
if (lastVisible != visible)
|
||||
Q_EMIT dockAppVisibleChanged(visible);
|
||||
}
|
||||
|
||||
void RecentAppHelper::removeRecentAreaItem(DockItem *wdg)
|
||||
{
|
||||
QBoxLayout *recentLayout = static_cast<QBoxLayout *>(m_recentWidget->layout());
|
||||
recentLayout->removeWidget(wdg);
|
||||
Q_EMIT requestUpdateRecentVisible();
|
||||
}
|
||||
|
||||
void RecentAppHelper::removeAppAreaItem(DockItem *wdg)
|
||||
{
|
||||
QBoxLayout *boxLayout = static_cast<QBoxLayout *>(m_appWidget->layout());
|
||||
bool lastVisible = dockAppIsVisible();
|
||||
boxLayout->removeWidget(wdg);
|
||||
updateDockAppVisible(lastVisible);
|
||||
}
|
||||
|
||||
int RecentAppHelper::getEntryIndex(DockItem *dockItem, QWidget *widget) const
|
||||
{
|
||||
AppItem *appItem = qobject_cast<AppItem *>(dockItem);
|
||||
if (!appItem)
|
||||
return -1;
|
||||
|
||||
// 查找当前的应用在所有的应用中的排序
|
||||
QStringList entryIds = TaskManager::instance()->getEntryIDs();
|
||||
int index = entryIds.indexOf(appItem->appId());
|
||||
if (index < 0)
|
||||
return -1;
|
||||
|
||||
QList<AppItem *> filterAppItems = appItems(widget);
|
||||
// 获取当前在最近应用中的所有的APP,并计算它的位置
|
||||
int lastIndex = -1;
|
||||
// 从后面向前面遍历,找到对应的位置,插入
|
||||
for (int i = filterAppItems.size() - 1; i >= 0; i--) {
|
||||
AppItem *item = filterAppItems[i];
|
||||
// 如果所在的索引在要查找的APP索引的后面,说明当前的索引在要查找的索引之后,跳过即可
|
||||
// 如果所在索引不在列表中(一般情况下不存在,这里是容错处理),也跳过
|
||||
int curIndex = entryIds.indexOf(item->appId());
|
||||
if (item == appItem || curIndex < 0 || curIndex >= index)
|
||||
continue;
|
||||
|
||||
if (lastIndex < curIndex)
|
||||
lastIndex = curIndex;
|
||||
}
|
||||
|
||||
return ++lastIndex;
|
||||
}
|
||||
|
||||
QList<AppItem *> RecentAppHelper::appItems(QWidget *widget) const
|
||||
{
|
||||
QLayout *layout = widget->layout();
|
||||
|
||||
QList<AppItem *> dockItems;
|
||||
for (int i = 0; i < layout->count(); i++) {
|
||||
AppItem *dockItem = qobject_cast<AppItem *>(layout->itemAt(i)->widget());
|
||||
if (!dockItem)
|
||||
continue;
|
||||
|
||||
dockItems << dockItem;
|
||||
}
|
||||
|
||||
return dockItems;
|
||||
}
|
67
frame/controller/recentapphelper.h
Normal file
67
frame/controller/recentapphelper.h
Normal file
@ -0,0 +1,67 @@
|
||||
// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef RECENTAPPHELPER_H
|
||||
#define RECENTAPPHELPER_H
|
||||
|
||||
#include "constants.h"
|
||||
#include "dbusutil.h"
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class DockItem;
|
||||
class AppItem;
|
||||
class QWidget;
|
||||
|
||||
/** 用来管理最近打开区域和APP应用区域交互的类
|
||||
* @brief The RecentAppManager class
|
||||
*/
|
||||
|
||||
class RecentAppHelper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit RecentAppHelper(QWidget *appWidget, QWidget *recentWidget, QObject *parent = nullptr);
|
||||
void setDisplayMode(Dock::DisplayMode displayMode);
|
||||
void resetAppInfo();
|
||||
void addAppItem(int index, DockItem *appItem);
|
||||
void removeAppItem(DockItem *dockItem);
|
||||
bool recentIsVisible() const;
|
||||
bool dockAppIsVisible() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void requestUpdate();
|
||||
void recentVisibleChanged(bool); // 最近区域是否可见发生变化的信号
|
||||
void dockAppVisibleChanged(bool); // 驻留应用区域是否可见发生变化的信号
|
||||
void requestUpdateRecentVisible();
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject *watched, QEvent *event) override;
|
||||
|
||||
private:
|
||||
bool appInRecent(DockItem *item) const;
|
||||
void addAppAreaItem(int index, DockItem *wdg);
|
||||
void addRecentAreaItem(int index, DockItem *wdg);
|
||||
void updateDockAppVisible(bool lastVisible);
|
||||
|
||||
void removeRecentAreaItem(DockItem *wdg);
|
||||
void removeAppAreaItem(DockItem *wdg);
|
||||
|
||||
int getEntryIndex(DockItem *dockItem, QWidget *widget) const;
|
||||
|
||||
QList<AppItem *> appItems(QWidget *widget) const;
|
||||
|
||||
private Q_SLOTS:
|
||||
void onModeChanged(int mode);
|
||||
void updateRecentVisible();
|
||||
|
||||
private:
|
||||
QWidget *m_appWidget;
|
||||
QWidget *m_recentWidget;
|
||||
Dock::DisplayMode m_displayMode;
|
||||
};
|
||||
|
||||
#endif // RECENTAPPHELPER_H
|
202
frame/controller/toolapphelper.cpp
Normal file
202
frame/controller/toolapphelper.cpp
Normal file
@ -0,0 +1,202 @@
|
||||
// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "toolapphelper.h"
|
||||
#include "dockitem.h"
|
||||
#include "pluginsitem.h"
|
||||
#include "quicksettingcontroller.h"
|
||||
|
||||
#include <QWidget>
|
||||
#include <QBoxLayout>
|
||||
|
||||
ToolAppHelper::ToolAppHelper(QWidget *toolAreaWidget, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_toolAreaWidget(toolAreaWidget)
|
||||
, m_displayMode(DisplayMode::Efficient)
|
||||
, m_position(Dock::Position::Bottom)
|
||||
{
|
||||
connect(QuickSettingController::instance(), &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute pluginAttr) {
|
||||
if (pluginAttr != QuickSettingController::PluginAttribute::Tool)
|
||||
return;
|
||||
|
||||
pluginItemAdded(itemInter);
|
||||
});
|
||||
connect(QuickSettingController::instance(), &QuickSettingController::pluginRemoved, this, [ = ](PluginsItemInterface *itemInter) {
|
||||
pluginItemRemoved(itemInter);
|
||||
});
|
||||
|
||||
QList<PluginsItemInterface *> pluginItems = QuickSettingController::instance()->pluginItems(QuickSettingController::PluginAttribute::Tool);
|
||||
for (PluginsItemInterface *pluginItem : pluginItems)
|
||||
pluginItemAdded(pluginItem);
|
||||
|
||||
updateToolArea();
|
||||
}
|
||||
|
||||
void ToolAppHelper::setDisplayMode(DisplayMode displayMode)
|
||||
{
|
||||
m_displayMode = displayMode;
|
||||
moveToolWidget();
|
||||
updateWidgetStatus();
|
||||
}
|
||||
|
||||
void ToolAppHelper::setPosition(Position position)
|
||||
{
|
||||
m_toolAreaWidget->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
|
||||
m_position = position;
|
||||
updateWidgetStatus();
|
||||
}
|
||||
|
||||
bool ToolAppHelper::toolIsVisible() const
|
||||
{
|
||||
return m_toolAreaWidget->isVisible();
|
||||
}
|
||||
|
||||
void ToolAppHelper::appendToToolArea(int index, DockItem *dockItem)
|
||||
{
|
||||
dockItem->setParent(m_toolAreaWidget);
|
||||
QBoxLayout *boxLayout = static_cast<QBoxLayout *>(m_toolAreaWidget->layout());
|
||||
if (index >= 0)
|
||||
boxLayout->insertWidget(index, dockItem);
|
||||
else
|
||||
boxLayout->addWidget(dockItem);
|
||||
}
|
||||
|
||||
bool ToolAppHelper::removeToolArea(PluginsItemInterface *itemInter)
|
||||
{
|
||||
QBoxLayout *boxLayout = static_cast<QBoxLayout *>(m_toolAreaWidget->layout());
|
||||
for (int i = 0; i < boxLayout->count(); i++) {
|
||||
PluginsItem *dockItem = qobject_cast<PluginsItem *>(boxLayout->itemAt(i)->widget());
|
||||
if (dockItem && dockItem->pluginItem() == itemInter) {
|
||||
boxLayout->removeWidget(dockItem);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void ToolAppHelper::moveToolWidget()
|
||||
{
|
||||
for (int i = m_toolAreaWidget->layout()->count() - 1; i >= 0; i--) {
|
||||
QLayoutItem *layoutItem = m_toolAreaWidget->layout()->itemAt(i);
|
||||
if (!layoutItem)
|
||||
continue;
|
||||
|
||||
PluginsItem *pluginWidget = qobject_cast<PluginsItem *>(layoutItem->widget());
|
||||
if (!pluginWidget)
|
||||
continue;
|
||||
|
||||
m_toolAreaWidget->layout()->removeWidget(pluginWidget);
|
||||
}
|
||||
|
||||
if (m_displayMode == Dock::DisplayMode::Fashion) {
|
||||
QuickSettingController *quickController = QuickSettingController::instance();
|
||||
QList<PluginsItemInterface *> plugins = quickController->pluginItems(QuickSettingController::PluginAttribute::Tool);
|
||||
for (PluginsItemInterface *plugin : plugins) {
|
||||
PluginsItem *pluginWidget = quickController->pluginItemWidget(plugin);
|
||||
m_toolAreaWidget->layout()->addWidget(pluginWidget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ToolAppHelper::updateToolArea()
|
||||
{
|
||||
bool oldVisible = m_toolAreaWidget->isVisible();
|
||||
QLayout *layout = m_toolAreaWidget->layout();
|
||||
if (m_position == Dock::Position::Bottom || m_position == Dock::Position::Top) {
|
||||
int size = 0;
|
||||
for (int i = 0; i < layout->count(); i++) {
|
||||
PluginsItem *dockItem = qobject_cast<PluginsItem *>(layout->itemAt(i)->widget());
|
||||
if (!dockItem)
|
||||
continue;
|
||||
|
||||
size += dockItem->width();
|
||||
}
|
||||
m_toolAreaWidget->setFixedWidth(size);
|
||||
m_toolAreaWidget->setVisible(size > 0);
|
||||
} else {
|
||||
int size = 0;
|
||||
for (int i = 0; i < layout->count(); i++) {
|
||||
PluginsItem *dockItem = qobject_cast<PluginsItem *>(layout->itemAt(i)->widget());
|
||||
if (!dockItem)
|
||||
continue;
|
||||
|
||||
size += dockItem->height();
|
||||
}
|
||||
m_toolAreaWidget->setFixedHeight(size);
|
||||
m_toolAreaWidget->setVisible(size > 0);
|
||||
}
|
||||
bool isVisible = m_toolAreaWidget->isVisible();
|
||||
if (oldVisible != isVisible)
|
||||
Q_EMIT toolVisibleChanged(isVisible);
|
||||
}
|
||||
|
||||
void ToolAppHelper::updateWidgetStatus()
|
||||
{
|
||||
bool oldVisible = toolIsVisible();
|
||||
if (m_displayMode == DisplayMode::Efficient) {
|
||||
// 高效模式
|
||||
m_toolAreaWidget->setVisible(false);
|
||||
} else {
|
||||
// 时尚模式
|
||||
updateToolArea();
|
||||
}
|
||||
bool visible = toolIsVisible();
|
||||
if (oldVisible != visible)
|
||||
Q_EMIT toolVisibleChanged(visible);
|
||||
}
|
||||
|
||||
bool ToolAppHelper::pluginInTool(PluginsItemInterface *itemInter) const
|
||||
{
|
||||
return (QuickSettingController::instance()->pluginAttribute(itemInter) == QuickSettingController::PluginAttribute::Tool);
|
||||
}
|
||||
|
||||
void ToolAppHelper::pluginItemAdded(PluginsItemInterface *itemInter)
|
||||
{
|
||||
if (m_displayMode != Dock::DisplayMode::Fashion || pluginExists(itemInter))
|
||||
return;
|
||||
|
||||
QuickSettingController *quickController = QuickSettingController::instance();
|
||||
if (pluginInTool(itemInter)) {
|
||||
PluginsItem *pluginItem = quickController->pluginItemWidget(itemInter);
|
||||
appendToToolArea(0, pluginItem);
|
||||
updateToolArea();
|
||||
Q_EMIT requestUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
void ToolAppHelper::pluginItemRemoved(PluginsItemInterface *itemInter)
|
||||
{
|
||||
QuickSettingController *quickController = QuickSettingController::instance();
|
||||
if (pluginInTool(itemInter)) {
|
||||
PluginsItem *pluginItem = quickController->pluginItemWidget(itemInter);
|
||||
removeToolArea(pluginItem->pluginItem());
|
||||
updateToolArea();
|
||||
Q_EMIT requestUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
bool ToolAppHelper::pluginExists(PluginsItemInterface *itemInter) const
|
||||
{
|
||||
QBoxLayout *boxLayout = static_cast<QBoxLayout *>(m_toolAreaWidget->layout());
|
||||
if (!boxLayout)
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < boxLayout->count() ; i++) {
|
||||
QLayoutItem *layoutItem = boxLayout->itemAt(i);
|
||||
if (!layoutItem)
|
||||
continue;
|
||||
|
||||
PluginsItem *pluginItem = qobject_cast<PluginsItem *>(layoutItem->widget());
|
||||
if (!pluginItem)
|
||||
continue;
|
||||
|
||||
// 如果当前的插件的接口已经存在,则无需再次插入
|
||||
if (pluginItem->pluginItem() == itemInter)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
54
frame/controller/toolapphelper.h
Normal file
54
frame/controller/toolapphelper.h
Normal file
@ -0,0 +1,54 @@
|
||||
// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef TOOLAPPHELPER_H
|
||||
#define TOOLAPPHELPER_H
|
||||
|
||||
#include "constants.h"
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class QWidget;
|
||||
class DockItem;
|
||||
class PluginsItem;
|
||||
class PluginsItemInterface;
|
||||
|
||||
using namespace Dock;
|
||||
|
||||
class ToolAppHelper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ToolAppHelper(QWidget *toolAreaWidget, QObject *parent = nullptr);
|
||||
|
||||
void setDisplayMode(DisplayMode displayMode);
|
||||
void setPosition(Dock::Position position);
|
||||
bool toolIsVisible() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void requestUpdate();
|
||||
void toolVisibleChanged(bool);
|
||||
|
||||
private:
|
||||
void appendToToolArea(int index, DockItem *dockItem);
|
||||
bool removeToolArea(PluginsItemInterface *itemInter);
|
||||
void moveToolWidget();
|
||||
void updateToolArea();
|
||||
|
||||
void updateWidgetStatus();
|
||||
bool pluginInTool(PluginsItemInterface *itemInter) const;
|
||||
void pluginItemAdded(PluginsItemInterface *itemInter);
|
||||
void pluginItemRemoved(PluginsItemInterface *itemInter);
|
||||
bool pluginExists(PluginsItemInterface *itemInter) const;
|
||||
|
||||
private:
|
||||
QWidget *m_toolAreaWidget;
|
||||
DisplayMode m_displayMode;
|
||||
Dock::Position m_position;
|
||||
QList<DockItem *> m_sequentPluginItems;
|
||||
};
|
||||
|
||||
#endif // TOOLAPPHELPER_H
|
@ -1,31 +0,0 @@
|
||||
<interface name="com.deepin.dde.daemon.Dock">
|
||||
<method name="ActivateWindow">
|
||||
<arg type="u" direction="in"></arg>
|
||||
</method>
|
||||
<method name="CloseWindow">
|
||||
<arg type="u" direction="in"></arg>
|
||||
</method>
|
||||
<method name="GetEntryIDs">
|
||||
<arg type="as" direction="out"></arg>
|
||||
</method>
|
||||
<method name="ReorderEntries">
|
||||
<arg type="as" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetFrontendWindow">
|
||||
<arg type="u" direction="in"></arg>
|
||||
</method>
|
||||
<signal name="ServiceRestarted"></signal>
|
||||
<signal name="EntryAdded">
|
||||
<arg type="o"></arg>
|
||||
</signal>
|
||||
<signal name="EntryRemoved">
|
||||
<arg type="s"></arg>
|
||||
</signal>
|
||||
<property name="Entries" type="ao" access="read"></property>
|
||||
<property name="HideMode" type="i" access="readwrite"></property>
|
||||
<property name="DisplayMode" type="i" access="readwrite"></property>
|
||||
<property name="Position" type="i" access="readwrite"></property>
|
||||
<property name="ActiveWindow" type="u" access="read"></property>
|
||||
<property name="HideState" type="i" access="read"></property>
|
||||
</interface>
|
||||
|
@ -1,28 +0,0 @@
|
||||
/*
|
||||
* This file was generated by qdbusxml2cpp version 0.8
|
||||
* Command line was: qdbusxml2cpp -c DBusClientManager -p dbusclientmanager dde-dock-ClientManager.xml
|
||||
*
|
||||
* qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
|
||||
*
|
||||
* This is an auto-generated file.
|
||||
* This file may have been hand-edited. Look for HAND-EDIT comments
|
||||
* before re-generating it.
|
||||
*/
|
||||
|
||||
#include "dbusclientmanager.h"
|
||||
|
||||
/*
|
||||
* Implementation of interface class DBusClientManager
|
||||
*/
|
||||
|
||||
DBusClientManager::DBusClientManager(QObject *parent)
|
||||
: QDBusAbstractInterface("com.deepin.daemon.Dock", "/dde/dock/ClientManager", staticInterfaceName(), QDBusConnection::sessionBus(), parent)
|
||||
{
|
||||
QDBusConnection::sessionBus().connect(this->service(), this->path(), "org.freedesktop.DBus.Properties", "PropertiesChanged","sa{sv}as", this, SLOT(__propertyChanged__(QDBusMessage)));
|
||||
}
|
||||
|
||||
DBusClientManager::~DBusClientManager()
|
||||
{
|
||||
QDBusConnection::sessionBus().disconnect(service(), path(), "org.freedesktop.DBus.Properties", "PropertiesChanged", "sa{sv}as", this, SLOT(propertyChanged(QDBusMessage)));
|
||||
}
|
||||
|
@ -1,89 +0,0 @@
|
||||
/*
|
||||
* This file was generated by qdbusxml2cpp version 0.8
|
||||
* Command line was: qdbusxml2cpp -c DBusClientManager -p dbusclientmanager dde-dock-ClientManager.xml
|
||||
*
|
||||
* qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
|
||||
*
|
||||
* This is an auto-generated file.
|
||||
* Do not edit! All changes made to it will be lost.
|
||||
*/
|
||||
|
||||
#ifndef DBUSCLIENTMANAGER_H_1465195317
|
||||
#define DBUSCLIENTMANAGER_H_1465195317
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QMap>
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtDBus/QtDBus>
|
||||
|
||||
/*
|
||||
* Proxy class for interface dde.dock.ClientManager
|
||||
*/
|
||||
class DBusClientManager: public QDBusAbstractInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_SLOT void __propertyChanged__(const QDBusMessage& msg)
|
||||
{
|
||||
QList<QVariant> arguments = msg.arguments();
|
||||
if (3 != arguments.count())
|
||||
return;
|
||||
QString interfaceName = msg.arguments().at(0).toString();
|
||||
if (interfaceName !="dde.dock.ClientManager")
|
||||
return;
|
||||
QVariantMap changedProps = qdbus_cast<QVariantMap>(arguments.at(1).value<QDBusArgument>());
|
||||
foreach(const QString &prop, changedProps.keys()) {
|
||||
const QMetaObject* self = metaObject();
|
||||
for (int i=self->propertyOffset(); i < self->propertyCount(); ++i) {
|
||||
QMetaProperty p = self->property(i);
|
||||
if (p.name() == prop) {
|
||||
Q_EMIT p.notifySignal().invoke(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public:
|
||||
static inline const char *staticInterfaceName()
|
||||
{ return "dde.dock.ClientManager"; }
|
||||
|
||||
public:
|
||||
explicit DBusClientManager(QObject *parent = 0);
|
||||
|
||||
~DBusClientManager();
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
inline QDBusPendingReply<bool> ActivateWindow(uint in0)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(in0);
|
||||
return asyncCallWithArgumentList(QStringLiteral("ActivateWindow"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<bool> CloseWindow(uint in0)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(in0);
|
||||
return asyncCallWithArgumentList(QStringLiteral("CloseWindow"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<uint> CurrentActiveWindow()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QStringLiteral("CurrentActiveWindow"), argumentList);
|
||||
}
|
||||
|
||||
Q_SIGNALS: // SIGNALS
|
||||
void ActiveWindowChanged(uint activeWinId);
|
||||
// begin property changed signals
|
||||
};
|
||||
|
||||
namespace dde {
|
||||
namespace dock {
|
||||
typedef ::DBusClientManager ClientManager;
|
||||
}
|
||||
}
|
||||
#endif
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* This file was generated by qdbusxml2cpp version 0.8
|
||||
* Command line was: qdbusxml2cpp -p DBusDisplay -c DBusDisplay com.deepin.daemon.Display.xml
|
||||
* Command line was: qdbusxml2cpp -p DBusDisplay -c DBusDisplay org.deepin.dde.Display1.xml
|
||||
*
|
||||
* qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
|
||||
*
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* This file was generated by qdbusxml2cpp version 0.8
|
||||
* Command line was: qdbusxml2cpp -p DBusDisplay -c DBusDisplay com.deepin.daemon.Display.xml
|
||||
* Command line was: qdbusxml2cpp -p DBusDisplay -c DBusDisplay org.deepin.dde.Display1.xml
|
||||
*
|
||||
* qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
|
||||
*
|
||||
@ -44,7 +44,7 @@ const QDBusArgument &operator>>(const QDBusArgument &argument, DisplayRect &rect
|
||||
QDebug operator<<(QDebug deg, const DisplayRect &rect);
|
||||
|
||||
/*
|
||||
* Proxy class for interface com.deepin.daemon.Display
|
||||
* Proxy class for interface org.deepin.dde.Display1
|
||||
*/
|
||||
class DBusDisplay: public QDBusAbstractInterface
|
||||
{
|
||||
@ -56,7 +56,7 @@ class DBusDisplay: public QDBusAbstractInterface
|
||||
if (3 != arguments.count())
|
||||
return;
|
||||
QString interfaceName = msg.arguments().at(0).toString();
|
||||
if (interfaceName !="com.deepin.daemon.Display")
|
||||
if (interfaceName !="org.deepin.dde.Display1")
|
||||
return;
|
||||
QVariantMap changedProps = qdbus_cast<QVariantMap>(arguments.at(1).value<QDBusArgument>());
|
||||
QStringList keys = changedProps.keys();
|
||||
@ -72,11 +72,11 @@ class DBusDisplay: public QDBusAbstractInterface
|
||||
}
|
||||
public:
|
||||
static inline const char *staticInterfaceName()
|
||||
{ return "com.deepin.daemon.Display"; }
|
||||
{ return "org.deepin.dde.Display1"; }
|
||||
static inline const char *staticServiceName()
|
||||
{ return "com.deepin.daemon.Display"; }
|
||||
{ return "org.deepin.dde.Display1"; }
|
||||
static inline const char *staticObjectPath()
|
||||
{ return "/com/deepin/daemon/Display"; }
|
||||
{ return "/org/deepin/dde/Display1"; }
|
||||
|
||||
public:
|
||||
explicit DBusDisplay(QObject *parent = 0);
|
||||
|
@ -1,20 +1,81 @@
|
||||
// SPDX-FileCopyrightText: 2016 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: sbw <sbw@sbw.so>
|
||||
*
|
||||
* Maintainer: sbw <sbw@sbw.so>
|
||||
*
|
||||
* This program 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 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "dbusdockadaptors.h"
|
||||
#include "utils.h"
|
||||
#include "dockitemmanager.h"
|
||||
#include "windowmanager.h"
|
||||
#include "quicksettingcontroller.h"
|
||||
#include "pluginsitem.h"
|
||||
#include "docksettings.h"
|
||||
#include "common.h"
|
||||
#include "customevent.h"
|
||||
|
||||
#include <DGuiApplicationHelper>
|
||||
|
||||
#include <QScreen>
|
||||
#include <QDebug>
|
||||
#include <QGSettings>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
DBusDockAdaptors::DBusDockAdaptors(MainWindow* parent)
|
||||
const QSize defaultIconSize = QSize(20, 20);
|
||||
|
||||
QDebug operator<<(QDebug argument, const DockItemInfo &info)
|
||||
{
|
||||
argument << "name:" << info.name << ", displayName:" << info.displayName
|
||||
<< "itemKey:" << info.itemKey << "SettingKey:" << info.settingKey
|
||||
<< "icon_light:" << info.iconLight << "icon_dark:" << info.iconDark << "visible:" << info.visible;
|
||||
return argument;
|
||||
}
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const DockItemInfo &info)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg << info.name << info.displayName << info.itemKey << info.settingKey << info.iconLight << info.iconDark << info.visible;
|
||||
arg.endStructure();
|
||||
return arg;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, DockItemInfo &info)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg >> info.name >> info.displayName >> info.itemKey >> info.settingKey >> info.iconLight >> info.iconDark >> info.visible;
|
||||
arg.endStructure();
|
||||
return arg;
|
||||
}
|
||||
|
||||
void registerPluginInfoMetaType()
|
||||
{
|
||||
qRegisterMetaType<DockItemInfo>("DockItemInfo");
|
||||
qDBusRegisterMetaType<DockItemInfo>();
|
||||
qRegisterMetaType<DockItemInfos>("DockItemInfos");
|
||||
qDBusRegisterMetaType<DockItemInfos>();
|
||||
}
|
||||
|
||||
DBusDockAdaptors::DBusDockAdaptors(WindowManager* parent)
|
||||
: QDBusAbstractAdaptor(parent)
|
||||
, m_gsettings(Utils::SettingsPtr("com.deepin.dde.dock.mainwindow", QByteArray(), this))
|
||||
, m_windowManager(parent)
|
||||
{
|
||||
connect(parent, &MainWindow::panelGeometryChanged, this, [=] {
|
||||
connect(parent, &WindowManager::panelGeometryChanged, this, [ = ] {
|
||||
emit DBusDockAdaptors::geometryChanged(geometry());
|
||||
});
|
||||
|
||||
@ -26,12 +87,13 @@ DBusDockAdaptors::DBusDockAdaptors(MainWindow* parent)
|
||||
});
|
||||
}
|
||||
|
||||
QList<PluginsItemInterface *> allPlugin = localPlugins();
|
||||
connect(DockItemManager::instance(), &DockItemManager::itemInserted, this, [ = ] (const int index, DockItem *item) {
|
||||
Q_UNUSED(index);
|
||||
if (item->itemType() == DockItem::Plugins
|
||||
|| item->itemType() == DockItem::FixedPlugin) {
|
||||
PluginsItem *pluginItem = static_cast<PluginsItem *>(item);
|
||||
for (auto *p : DockItemManager::instance()->pluginList()) {
|
||||
for (auto *p : allPlugin) {
|
||||
if (p->pluginName() == pluginItem->pluginName()) {
|
||||
Q_EMIT pluginVisibleChanged(p->pluginDisplayName(), getPluginVisible(p->pluginDisplayName()));
|
||||
}
|
||||
@ -43,13 +105,15 @@ DBusDockAdaptors::DBusDockAdaptors(MainWindow* parent)
|
||||
if (item->itemType() == DockItem::Plugins
|
||||
|| item->itemType() == DockItem::FixedPlugin) {
|
||||
PluginsItem *pluginItem = static_cast<PluginsItem *>(item);
|
||||
for (auto *p : DockItemManager::instance()->pluginList()) {
|
||||
for (auto *p : allPlugin) {
|
||||
if (p->pluginName() == pluginItem->pluginName()) {
|
||||
Q_EMIT pluginVisibleChanged(p->pluginDisplayName(), getPluginVisible(p->pluginDisplayName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
registerPluginInfoMetaType();
|
||||
}
|
||||
|
||||
DBusDockAdaptors::~DBusDockAdaptors()
|
||||
@ -57,27 +121,31 @@ DBusDockAdaptors::~DBusDockAdaptors()
|
||||
|
||||
}
|
||||
|
||||
MainWindow *DBusDockAdaptors::parent() const
|
||||
{
|
||||
return static_cast<MainWindow *>(QObject::parent());
|
||||
}
|
||||
|
||||
void DBusDockAdaptors::callShow()
|
||||
{
|
||||
return parent()->callShow();
|
||||
m_windowManager->callShow();
|
||||
}
|
||||
|
||||
void DBusDockAdaptors::ReloadPlugins()
|
||||
{
|
||||
return parent()->relaodPlugins();
|
||||
if (qApp->property("PLUGINSLOADED").toBool())
|
||||
return;
|
||||
|
||||
// 发送事件,通知代理来加载插件
|
||||
PluginLoadEvent event;
|
||||
QCoreApplication::sendEvent(qApp, &event);
|
||||
|
||||
qApp->setProperty("PLUGINSLOADED", true);
|
||||
// 退出安全模式
|
||||
qApp->setProperty("safeMode", false);
|
||||
}
|
||||
|
||||
QStringList DBusDockAdaptors::GetLoadedPlugins()
|
||||
{
|
||||
auto pluginList = DockItemManager::instance()->pluginList();
|
||||
QList<PluginsItemInterface *> allPlugin = localPlugins();
|
||||
QStringList nameList;
|
||||
QMap<QString, QString> map;
|
||||
for (auto plugin : pluginList) {
|
||||
for (auto plugin : allPlugin) {
|
||||
// 托盘本身也是一个插件,这里去除掉这个特殊的插件,还有一些没有实际名字的插件
|
||||
if (plugin->pluginName() == "tray"
|
||||
|| plugin->pluginDisplayName().isEmpty()
|
||||
@ -89,7 +157,7 @@ QStringList DBusDockAdaptors::GetLoadedPlugins()
|
||||
}
|
||||
|
||||
// 排序,保持和原先任务栏右键菜单中的插件列表顺序一致
|
||||
qSort(nameList.begin(), nameList.end(), [ = ] (const QString &name1, const QString &name2) {
|
||||
std::sort(nameList.begin(), nameList.end(), [ = ] (const QString &name1, const QString &name2) {
|
||||
return name1 > name2;
|
||||
});
|
||||
|
||||
@ -101,15 +169,53 @@ QStringList DBusDockAdaptors::GetLoadedPlugins()
|
||||
return newList;
|
||||
}
|
||||
|
||||
DockItemInfos DBusDockAdaptors::plugins()
|
||||
{
|
||||
#define DOCK_QUICK_PLUGINS "Dock_Quick_Plugins"
|
||||
// 获取本地加载的插件
|
||||
QList<PluginsItemInterface *> allPlugin = localPlugins();
|
||||
DockItemInfos pluginInfos;
|
||||
QStringList quickSettingKeys = DockSettings::instance()->getQuickPlugins();
|
||||
for (PluginsItemInterface *plugin : allPlugin) {
|
||||
DockItemInfo info;
|
||||
info.name = plugin->pluginName();
|
||||
info.displayName = plugin->pluginDisplayName();
|
||||
info.itemKey = plugin->pluginName();
|
||||
info.settingKey = DOCK_QUICK_PLUGINS;
|
||||
info.visible = quickSettingKeys.contains(info.itemKey);
|
||||
QSize pixmapSize;
|
||||
QIcon lightIcon = getSettingIcon(plugin, pixmapSize, DGuiApplicationHelper::ColorType::LightType);
|
||||
if (!lightIcon.isNull()) {
|
||||
QBuffer buffer(&info.iconLight);
|
||||
if (buffer.open(QIODevice::WriteOnly)) {
|
||||
QPixmap pixmap = lightIcon.pixmap(pixmapSize);
|
||||
pixmap.save(&buffer, "png");
|
||||
}
|
||||
}
|
||||
QIcon darkIcon = getSettingIcon(plugin, pixmapSize, DGuiApplicationHelper::ColorType::DarkType);
|
||||
if (!darkIcon.isNull()) {
|
||||
QBuffer buffer(&info.iconDark);
|
||||
if (buffer.open(QIODevice::WriteOnly)) {
|
||||
QPixmap pixmap = darkIcon.pixmap(pixmapSize);
|
||||
pixmap.save(&buffer, "png");
|
||||
}
|
||||
}
|
||||
pluginInfos << info;
|
||||
}
|
||||
|
||||
return pluginInfos;
|
||||
}
|
||||
|
||||
void DBusDockAdaptors::resizeDock(int offset, bool dragging)
|
||||
{
|
||||
parent()->resizeDock(offset, dragging);
|
||||
m_windowManager->resizeDock(offset, dragging);
|
||||
}
|
||||
|
||||
// 返回每个插件的识别Key(所以此值应始终不变),供个性化插件根据key去匹配每个插件对应的图标
|
||||
QString DBusDockAdaptors::getPluginKey(const QString &pluginName)
|
||||
{
|
||||
for (auto plugin : DockItemManager::instance()->pluginList()) {
|
||||
QList<PluginsItemInterface *> allPlugin = localPlugins();
|
||||
for (auto plugin : allPlugin) {
|
||||
if (plugin->pluginDisplayName() == pluginName)
|
||||
return plugin->pluginName();
|
||||
}
|
||||
@ -119,7 +225,8 @@ QString DBusDockAdaptors::getPluginKey(const QString &pluginName)
|
||||
|
||||
bool DBusDockAdaptors::getPluginVisible(const QString &pluginName)
|
||||
{
|
||||
for (auto *p : DockItemManager::instance()->pluginList()) {
|
||||
QList<PluginsItemInterface *> allPlugin = localPlugins();
|
||||
for (auto *p : allPlugin) {
|
||||
if (!p->pluginIsAllowDisable())
|
||||
continue;
|
||||
|
||||
@ -140,7 +247,8 @@ bool DBusDockAdaptors::getPluginVisible(const QString &pluginName)
|
||||
|
||||
void DBusDockAdaptors::setPluginVisible(const QString &pluginName, bool visible)
|
||||
{
|
||||
for (auto *p : DockItemManager::instance()->pluginList()) {
|
||||
QList<PluginsItemInterface *> allPlugin = localPlugins();
|
||||
for (auto *p : allPlugin) {
|
||||
if (!p->pluginIsAllowDisable())
|
||||
continue;
|
||||
|
||||
@ -162,9 +270,19 @@ void DBusDockAdaptors::setPluginVisible(const QString &pluginName, bool visible)
|
||||
qInfo() << "Unable to set information for this plugin";
|
||||
}
|
||||
|
||||
void DBusDockAdaptors::setItemOnDock(const QString settingKey, const QString &itemKey, bool visible)
|
||||
{
|
||||
DockSettings *settings = DockSettings::instance();
|
||||
if ( keyQuickTrayName == settingKey) {
|
||||
visible? settings->setTrayItemOnDock(itemKey) : settings->removeTrayItemOnDock(itemKey);
|
||||
} else if (keyQuickPlugins == settingKey) {
|
||||
visible? settings->setQuickPlugin(itemKey) : settings->removeQuickPlugin(itemKey);
|
||||
}
|
||||
}
|
||||
|
||||
QRect DBusDockAdaptors::geometry() const
|
||||
{
|
||||
return parent()->geometry();
|
||||
return m_windowManager->geometry();
|
||||
}
|
||||
|
||||
bool DBusDockAdaptors::showInPrimary() const
|
||||
@ -188,17 +306,74 @@ bool DBusDockAdaptors::isPluginValid(const QString &name)
|
||||
if (!Utils::SettingValue("com.deepin.dde.dock.module." + name, QByteArray(), "enable", true).toBool())
|
||||
return false;
|
||||
|
||||
// 在非wayland环境下,未开启窗口特效时,不显示多任务视图插件
|
||||
if (name == "multitasking" && !DWindowManagerHelper::instance()->hasComposite() && !Utils::IS_WAYLAND_DISPLAY)
|
||||
// 未开启窗口特效时,不显示多任务视图插件
|
||||
if (name == "multitasking" && !DWindowManagerHelper::instance()->hasComposite())
|
||||
return false;
|
||||
|
||||
// 录屏插件不显示,插件名如果有变化,建议发需求,避免任务栏反复适配
|
||||
if (name == "deepin-screen-recorder-plugin")
|
||||
return false;
|
||||
|
||||
// 远程助手只有在启动时才会加载在任务栏,不需要在控制中心加载
|
||||
if (name == "uos-remote-assistance")
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QList<PluginsItemInterface *> DBusDockAdaptors::localPlugins() const
|
||||
{
|
||||
return QuickSettingController::instance()->pluginInSettings();
|
||||
}
|
||||
|
||||
QIcon DBusDockAdaptors::getSettingIcon(PluginsItemInterface *plugin, QSize &pixmapSize, DGuiApplicationHelper::ColorType colorType) const
|
||||
{
|
||||
auto iconSize = [](const QIcon &icon) {
|
||||
QList<QSize> iconSizes = icon.availableSizes();
|
||||
if (iconSizes.size() > 0 && !iconSizes[0].isNull() )
|
||||
return iconSizes[0];
|
||||
|
||||
return defaultIconSize;
|
||||
};
|
||||
// 先获取控制中心的设置图标
|
||||
QIcon icon = plugin->icon(DockPart::DCCSetting, colorType);
|
||||
if (!icon.isNull()) {
|
||||
pixmapSize = iconSize(icon);
|
||||
|
||||
QColor c = colorType == DGuiApplicationHelper::LightType ? Qt::black :Qt::white;
|
||||
QPixmap pixmap = icon.pixmap(pixmapSize);
|
||||
QPainter pa(&pixmap);
|
||||
pa.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
||||
pa.fillRect(pixmap.rect(), c);
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
// 如果插件中没有设置图标,则根据插件的类型,获取其他的图标
|
||||
QuickSettingController::PluginAttribute pluginAttr = QuickSettingController::instance()->pluginAttribute(plugin);
|
||||
switch(pluginAttr) {
|
||||
case QuickSettingController::PluginAttribute::System: {
|
||||
icon = plugin->icon(DockPart::SystemPanel, colorType);
|
||||
pixmapSize = defaultIconSize;
|
||||
QList<QSize> iconSizes = icon.availableSizes();
|
||||
if (iconSizes.size() > 0)
|
||||
pixmapSize = iconSizes[0];
|
||||
break;
|
||||
}
|
||||
case QuickSettingController::PluginAttribute::Quick: {
|
||||
icon = plugin->icon(DockPart::QuickShow, colorType);
|
||||
if (icon.isNull())
|
||||
icon = plugin->icon(DockPart::QuickPanel, colorType);
|
||||
pixmapSize = defaultIconSize;
|
||||
QList<QSize> iconSizes = icon.availableSizes();
|
||||
if (iconSizes.size() > 0)
|
||||
pixmapSize = iconSizes[0];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (icon.isNull()) {
|
||||
icon = QIcon(":/icons/resources/dcc_dock_plug_in.svg");
|
||||
pixmapSize = QSize(20, 20);
|
||||
}
|
||||
|
||||
return icon;
|
||||
}
|
||||
|
@ -1,24 +1,68 @@
|
||||
// SPDX-FileCopyrightText: 2016 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
/*
|
||||
* Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: sbw <sbw@sbw.so>
|
||||
*
|
||||
* Maintainer: sbw <sbw@sbw.so>
|
||||
*
|
||||
* This program 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 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef DBUSDOCKADAPTORS_H
|
||||
#define DBUSDOCKADAPTORS_H
|
||||
|
||||
#include <QtDBus/QtDBus>
|
||||
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include <QtDBus/QtDBus>
|
||||
#include <QDBusArgument>
|
||||
|
||||
/*
|
||||
* Adaptor class for interface com.deepin.dde.Dock
|
||||
* Adaptor class for interface org.deepin.dde.Dock1
|
||||
*/
|
||||
class QGSettings;
|
||||
class WindowManager;
|
||||
class PluginsItemInterface;
|
||||
|
||||
struct DockItemInfo
|
||||
{
|
||||
QString name;
|
||||
QString displayName;
|
||||
QString itemKey;
|
||||
QString settingKey;
|
||||
QByteArray iconLight;
|
||||
QByteArray iconDark;
|
||||
bool visible;
|
||||
};
|
||||
|
||||
QDebug operator<<(QDebug argument, const DockItemInfo &info);
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const DockItemInfo &info);
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, DockItemInfo &info);
|
||||
|
||||
Q_DECLARE_METATYPE(DockItemInfo)
|
||||
|
||||
typedef QList<DockItemInfo> DockItemInfos;
|
||||
|
||||
Q_DECLARE_METATYPE(DockItemInfos)
|
||||
|
||||
void registerPluginInfoMetaType();
|
||||
|
||||
class DBusDockAdaptors: public QDBusAbstractAdaptor
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", "com.deepin.dde.Dock")
|
||||
Q_CLASSINFO("D-Bus Interface", "org.deepin.dde.Dock1")
|
||||
Q_CLASSINFO("D-Bus Introspection", ""
|
||||
" <interface name=\"com.deepin.dde.Dock\">\n"
|
||||
" <interface name=\"org.deepin.dde.Dock1\">\n"
|
||||
" <property access=\"read\" type=\"(iiii)\" name=\"geometry\"/>\n"
|
||||
" <property access=\"readwrite\" type=\"b\" name=\"showInPrimary\"/>\n"
|
||||
" <method name=\"callShow\"/>"
|
||||
@ -26,6 +70,10 @@ class DBusDockAdaptors: public QDBusAbstractAdaptor
|
||||
" <method name=\"GetLoadedPlugins\">"
|
||||
" <arg name=\"list\" type=\"as\" direction=\"out\"/>"
|
||||
" </method>"
|
||||
" <method name=\"plugins\">>"
|
||||
" <arg type=\"a(sssssb)\" direction=\"out\"/>"
|
||||
" <annotation value=\"PluginInfos\" name=\"org.qtproject.QtDBus.QtTypeName.Out0\"/>\n"
|
||||
" </method>"
|
||||
" <method name=\"resizeDock\">"
|
||||
" <arg name=\"offset\" type=\"i\" direction=\"in\"/>"
|
||||
" <arg name=\"dragging\" type=\"b\" direction=\"in\"/>"
|
||||
@ -42,6 +90,11 @@ class DBusDockAdaptors: public QDBusAbstractAdaptor
|
||||
" <arg name=\"pluginName\" type=\"s\" direction=\"in\"/>"
|
||||
" <arg name=\"visible\" type=\"b\" direction=\"in\"/>"
|
||||
" </method>"
|
||||
" <method name=\"setItemOnDock\">"
|
||||
" <arg name=\"settingKey\" type=\"s\" direction=\"in\"/>"
|
||||
" <arg name=\"itemKey\" type=\"s\" direction=\"in\"/>"
|
||||
" <arg name=\"visible\" type=\"b\" direction=\"in\"/>"
|
||||
" </method>"
|
||||
" <signal name=\"pluginVisibleChanged\">"
|
||||
" <arg type=\"s\"/>"
|
||||
" <arg type=\"b\"/>"
|
||||
@ -52,16 +105,15 @@ class DBusDockAdaptors: public QDBusAbstractAdaptor
|
||||
Q_PROPERTY(bool showInPrimary READ showInPrimary WRITE setShowInPrimary NOTIFY showInPrimaryChanged)
|
||||
|
||||
public:
|
||||
explicit DBusDockAdaptors(MainWindow *parent);
|
||||
explicit DBusDockAdaptors(WindowManager *parent);
|
||||
virtual ~DBusDockAdaptors();
|
||||
|
||||
MainWindow *parent() const;
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
void callShow();
|
||||
void ReloadPlugins();
|
||||
|
||||
QStringList GetLoadedPlugins();
|
||||
DockItemInfos plugins();
|
||||
|
||||
void resizeDock(int offset, bool dragging);
|
||||
|
||||
@ -69,6 +121,7 @@ public Q_SLOTS: // METHODS
|
||||
|
||||
bool getPluginVisible(const QString &pluginName);
|
||||
void setPluginVisible(const QString &pluginName, bool visible);
|
||||
void setItemOnDock(const QString settingKey, const QString &itemKey, bool visible);
|
||||
|
||||
public: // PROPERTIES
|
||||
QRect geometry() const;
|
||||
@ -83,9 +136,12 @@ signals:
|
||||
|
||||
private:
|
||||
bool isPluginValid(const QString &name);
|
||||
QList<PluginsItemInterface *> localPlugins() const;
|
||||
QIcon getSettingIcon(PluginsItemInterface *plugin, QSize &pixmapSize, DGuiApplicationHelper::ColorType colorType) const;
|
||||
|
||||
private:
|
||||
QGSettings *m_gsettings;
|
||||
WindowManager *m_windowManager;
|
||||
};
|
||||
|
||||
#endif //DBUSDOCKADAPTORS
|
||||
|
@ -1,19 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "dbusmenu.h"
|
||||
|
||||
/*
|
||||
* Implementation of interface class DBusMenu
|
||||
*/
|
||||
|
||||
DBusMenu::DBusMenu(const QString &path, QObject *parent)
|
||||
: QDBusAbstractInterface(staticServerPath(), path, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
|
||||
{
|
||||
}
|
||||
|
||||
DBusMenu::~DBusMenu()
|
||||
{
|
||||
}
|
||||
|
@ -1,75 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef DBUSMENU_H_1436158836
|
||||
#define DBUSMENU_H_1436158836
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QMap>
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtDBus/QtDBus>
|
||||
|
||||
/*
|
||||
* Proxy class for interface com.deepin.menu.Menu
|
||||
*/
|
||||
class DBusMenu: public QDBusAbstractInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static inline const char *staticServerPath()
|
||||
{ return "com.deepin.menu"; }
|
||||
static inline const char *staticInterfaceName()
|
||||
{ return "com.deepin.menu.Menu"; }
|
||||
|
||||
public:
|
||||
DBusMenu(const QString &path,QObject *parent = 0);
|
||||
|
||||
~DBusMenu();
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
inline QDBusPendingReply<> SetItemActivity(const QString &itemId, bool isActive)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(itemId) << QVariant::fromValue(isActive);
|
||||
return asyncCallWithArgumentList(QStringLiteral("SetItemActivity"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> SetItemChecked(const QString &itemId, bool checked)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(itemId) << QVariant::fromValue(checked);
|
||||
return asyncCallWithArgumentList(QStringLiteral("SetItemChecked"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> SetItemText(const QString &itemId, const QString &text)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(itemId) << QVariant::fromValue(text);
|
||||
return asyncCallWithArgumentList(QStringLiteral("SetItemText"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> ShowMenu(const QString &menuJsonContent)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(menuJsonContent);
|
||||
return asyncCallWithArgumentList(QStringLiteral("ShowMenu"), argumentList);
|
||||
}
|
||||
|
||||
Q_SIGNALS: // SIGNALS
|
||||
void ItemInvoked(const QString &itemId, bool checked);
|
||||
void MenuUnregistered();
|
||||
};
|
||||
|
||||
namespace com {
|
||||
namespace deepin {
|
||||
namespace menu {
|
||||
typedef ::DBusMenu Menu;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -1,19 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "dbusmenumanager.h"
|
||||
|
||||
/*
|
||||
* Implementation of interface class DBusMenuManager
|
||||
*/
|
||||
|
||||
DBusMenuManager::DBusMenuManager(QObject *parent)
|
||||
: QDBusAbstractInterface(staticServerPath(), staticInterfacePath(), staticInterfaceName(), QDBusConnection::sessionBus(), parent)
|
||||
{
|
||||
}
|
||||
|
||||
DBusMenuManager::~DBusMenuManager()
|
||||
{
|
||||
}
|
||||
|
@ -1,60 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef DBUSMENUMANAGER_H_1436158928
|
||||
#define DBUSMENUMANAGER_H_1436158928
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QMap>
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtDBus/QtDBus>
|
||||
|
||||
/*
|
||||
* Proxy class for interface com.deepin.menu.Manager
|
||||
*/
|
||||
class DBusMenuManager: public QDBusAbstractInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static inline const char *staticServerPath()
|
||||
{ return "com.deepin.menu"; }
|
||||
static inline const char *staticInterfacePath()
|
||||
{ return "/com/deepin/menu"; }
|
||||
static inline const char *staticInterfaceName()
|
||||
{ return "com.deepin.menu.Manager"; }
|
||||
|
||||
public:
|
||||
explicit DBusMenuManager(QObject *parent = 0);
|
||||
|
||||
~DBusMenuManager();
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
inline QDBusPendingReply<QDBusObjectPath> RegisterMenu()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QStringLiteral("RegisterMenu"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> UnregisterMenu(const QString &menuObjectPath)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(menuObjectPath);
|
||||
return asyncCallWithArgumentList(QStringLiteral("UnregisterMenu"), argumentList);
|
||||
}
|
||||
|
||||
Q_SIGNALS: // SIGNALS
|
||||
};
|
||||
|
||||
namespace com {
|
||||
namespace deepin {
|
||||
namespace menu {
|
||||
typedef ::DBusMenuManager Manager;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -1,16 +0,0 @@
|
||||
<interface name="dde.dock.ClientManager">
|
||||
<method name="ActivateWindow">
|
||||
<arg type="u" direction="in"></arg>
|
||||
<arg type="b" direction="out"></arg>
|
||||
</method>
|
||||
<method name="CloseWindow">
|
||||
<arg type="u" direction="in"></arg>
|
||||
<arg type="b" direction="out"></arg>
|
||||
</method>
|
||||
<method name="CurrentActiveWindow">
|
||||
<arg type="u" direction="out"></arg>
|
||||
</method>
|
||||
<signal name="ActiveWindowChanged">
|
||||
<arg type="u"></arg>
|
||||
</signal>
|
||||
</interface>
|
@ -1,13 +0,0 @@
|
||||
<interface name="dde.dock.Entry">
|
||||
<method name="Activate">
|
||||
</method>
|
||||
<signal name="DataChanged">
|
||||
<arg type="s"></arg>
|
||||
<arg type="s"></arg>
|
||||
</signal>
|
||||
<property name="Id" type="s" access="read"></property>
|
||||
<property name="Type" type="s" access="read"></property>
|
||||
<property name="Data" type="a{ss}" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="Dict"/>
|
||||
</property>
|
||||
</interface>
|
246
frame/dbus/dockdaemonadaptors.cpp
Normal file
246
frame/dbus/dockdaemonadaptors.cpp
Normal file
@ -0,0 +1,246 @@
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include "dockdaemonadaptors.h"
|
||||
#include "docksettings.h"
|
||||
#include "taskmanager/taskmanager.h"
|
||||
|
||||
DockDaemonDBusAdaptor::DockDaemonDBusAdaptor(QObject *parent)
|
||||
: QDBusAbstractAdaptor(parent)
|
||||
{
|
||||
// constructor
|
||||
setAutoRelaySignals(true);
|
||||
connect(TaskManager::instance(), &TaskManager::entryAdded, this, &DockDaemonDBusAdaptor::EntryAdded);
|
||||
connect(TaskManager::instance(), &TaskManager::entryRemoved, this, &DockDaemonDBusAdaptor::EntryRemoved);
|
||||
connect(TaskManager::instance(), &TaskManager::hideStateChanged, this, &DockDaemonDBusAdaptor::HideStateChanged);
|
||||
connect(TaskManager::instance(), &TaskManager::frontendWindowRectChanged, this, &DockDaemonDBusAdaptor::FrontendWindowRectChanged);
|
||||
connect(TaskManager::instance(), &TaskManager::showRecentChanged, this, &DockDaemonDBusAdaptor::showRecentChanged);
|
||||
connect(TaskManager::instance(), &TaskManager::showMultiWindowChanged, this, &DockDaemonDBusAdaptor::ShowMultiWindowChanged);
|
||||
connect(TaskManager::instance(), &TaskManager::windowMarginChanged, this, &DockDaemonDBusAdaptor::WindowMarginChanged);
|
||||
connect(DockSettings::instance(), &DockSettings::positionModeChanged, this, &DockDaemonDBusAdaptor::PositionChanged);
|
||||
connect(DockSettings::instance(), &DockSettings::hideModeChanged, this, &DockDaemonDBusAdaptor::HideModeChanged);
|
||||
connect(DockSettings::instance(), &DockSettings::displayModeChanged, this, &DockDaemonDBusAdaptor::DisplayModeChanged);
|
||||
connect(DockSettings::instance(), &DockSettings::windowSizeEfficientChanged, this, &DockDaemonDBusAdaptor::WindowSizeEfficientChanged);
|
||||
connect(DockSettings::instance(), &DockSettings::windowSizeFashionChanged, this, &DockDaemonDBusAdaptor::WindowSizeFashionChanged);
|
||||
}
|
||||
|
||||
DockDaemonDBusAdaptor::~DockDaemonDBusAdaptor()
|
||||
{
|
||||
// destructor
|
||||
}
|
||||
|
||||
int DockDaemonDBusAdaptor::displayMode() const
|
||||
{
|
||||
return TaskManager::instance()->getDisplayMode();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::setDisplayMode(int value)
|
||||
{
|
||||
if (displayMode() != value) {
|
||||
TaskManager::instance()->setDisplayMode(value);
|
||||
Q_EMIT DisplayModeChanged(value);
|
||||
}
|
||||
}
|
||||
|
||||
QStringList DockDaemonDBusAdaptor::dockedApps() const
|
||||
{
|
||||
return TaskManager::instance()->getDockedApps();
|
||||
}
|
||||
|
||||
int DockDaemonDBusAdaptor::hideMode() const
|
||||
{
|
||||
return TaskManager::instance()->getHideMode();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::setHideMode(int value)
|
||||
{
|
||||
if (hideMode() != value) {
|
||||
TaskManager::instance()->setHideMode(static_cast<HideMode>(value));
|
||||
Q_EMIT HideModeChanged(value);
|
||||
}
|
||||
}
|
||||
|
||||
int DockDaemonDBusAdaptor::hideState() const
|
||||
{
|
||||
return TaskManager::instance()->getHideState();
|
||||
}
|
||||
|
||||
uint DockDaemonDBusAdaptor::hideTimeout() const
|
||||
{
|
||||
return TaskManager::instance()->getHideTimeout();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::setHideTimeout(uint value)
|
||||
{
|
||||
if (hideTimeout() != value) {
|
||||
TaskManager::instance()->setHideTimeout(value);
|
||||
Q_EMIT HideTimeoutChanged(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint DockDaemonDBusAdaptor::windowSizeEfficient() const
|
||||
{
|
||||
return TaskManager::instance()->getWindowSizeEfficient();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::setWindowSizeEfficient(uint value)
|
||||
{
|
||||
if (windowSizeEfficient() != value) {
|
||||
TaskManager::instance()->setWindowSizeEfficient(value);
|
||||
Q_EMIT WindowSizeEfficientChanged(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint DockDaemonDBusAdaptor::windowSizeFashion() const
|
||||
{
|
||||
return TaskManager::instance()->getWindowSizeFashion();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::setWindowSizeFashion(uint value)
|
||||
{
|
||||
if (windowSizeFashion() != value) {
|
||||
TaskManager::instance()->setWindowSizeFashion(value);
|
||||
Q_EMIT WindowSizeFashionChanged(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint DockDaemonDBusAdaptor::windowMargin() const
|
||||
{
|
||||
return TaskManager::instance()->windowMargin();
|
||||
}
|
||||
|
||||
QRect DockDaemonDBusAdaptor::frontendWindowRect() const
|
||||
{
|
||||
return TaskManager::instance()->getFrontendWindowRect();
|
||||
}
|
||||
|
||||
uint DockDaemonDBusAdaptor::iconSize() const
|
||||
{
|
||||
return TaskManager::instance()->getIconSize();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::setIconSize(uint value)
|
||||
{
|
||||
if (iconSize() != value) {
|
||||
TaskManager::instance()->setIconSize(value);
|
||||
Q_EMIT IconSizeChanged(value);
|
||||
}
|
||||
}
|
||||
|
||||
int DockDaemonDBusAdaptor::position() const
|
||||
{
|
||||
return TaskManager::instance()->getPosition();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::setPosition(int value)
|
||||
{
|
||||
if (position() != value) {
|
||||
TaskManager::instance()->setPosition(value);
|
||||
Q_EMIT PositionChanged(value);
|
||||
}
|
||||
}
|
||||
|
||||
uint DockDaemonDBusAdaptor::showTimeout() const
|
||||
{
|
||||
return TaskManager::instance()->getShowTimeout();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::setShowTimeout(uint value)
|
||||
{
|
||||
if (showTimeout() != value) {
|
||||
TaskManager::instance()->setShowTimeout(value);
|
||||
Q_EMIT ShowTimeoutChanged(value);
|
||||
}
|
||||
}
|
||||
|
||||
bool DockDaemonDBusAdaptor::showRecent() const
|
||||
{
|
||||
return DockSettings::instance()->showRecent();
|
||||
}
|
||||
|
||||
bool DockDaemonDBusAdaptor::showMultiWindow() const
|
||||
{
|
||||
return TaskManager::instance()->showMultiWindow();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::CloseWindow(uint win)
|
||||
{
|
||||
TaskManager::instance()->closeWindow(win);
|
||||
}
|
||||
|
||||
// for debug
|
||||
QStringList DockDaemonDBusAdaptor::GetEntryIDs()
|
||||
{
|
||||
return TaskManager::instance()->getEntryIDs();
|
||||
}
|
||||
|
||||
bool DockDaemonDBusAdaptor::IsDocked(const QString &desktopFile)
|
||||
{
|
||||
return TaskManager::instance()->isDocked(desktopFile);
|
||||
}
|
||||
|
||||
bool DockDaemonDBusAdaptor::IsOnDock(const QString &desktopFile)
|
||||
{
|
||||
return TaskManager::instance()->isOnDock(desktopFile);
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::MoveEntry(int index, int newIndex)
|
||||
{
|
||||
TaskManager::instance()->moveEntry(index, newIndex);
|
||||
}
|
||||
|
||||
QString DockDaemonDBusAdaptor::QueryWindowIdentifyMethod(uint win)
|
||||
{
|
||||
return TaskManager::instance()->queryWindowIdentifyMethod(win);
|
||||
}
|
||||
|
||||
QStringList DockDaemonDBusAdaptor::GetDockedAppsDesktopFiles()
|
||||
{
|
||||
return TaskManager::instance()->getDockedAppsDesktopFiles();
|
||||
}
|
||||
|
||||
QString DockDaemonDBusAdaptor::GetPluginSettings()
|
||||
{
|
||||
return TaskManager::instance()->getPluginSettings();
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::SetPluginSettings(QString jsonStr)
|
||||
{
|
||||
TaskManager::instance()->setPluginSettings(jsonStr);
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::MergePluginSettings(QString jsonStr)
|
||||
{
|
||||
TaskManager::instance()->mergePluginSettings(jsonStr);
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::RemovePluginSettings(QString key1, QStringList key2List)
|
||||
{
|
||||
TaskManager::instance()->removePluginSettings(key1, key2List);
|
||||
}
|
||||
|
||||
bool DockDaemonDBusAdaptor::RequestDock(const QString &desktopFile, int index)
|
||||
{
|
||||
return TaskManager::instance()->requestDock(desktopFile, index);
|
||||
}
|
||||
|
||||
bool DockDaemonDBusAdaptor::RequestUndock(const QString &desktopFile)
|
||||
{
|
||||
return TaskManager::instance()->requestUndock(desktopFile);
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::SetShowRecent(bool visible)
|
||||
{
|
||||
DockSettings::instance()->setShowRecent(visible);
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::SetShowMultiWindow(bool showMultiWindow)
|
||||
{
|
||||
TaskManager::instance()->setShowMultiWindow(showMultiWindow);
|
||||
}
|
||||
|
||||
void DockDaemonDBusAdaptor::SetFrontendWindowRect(int x, int y, uint width, uint height)
|
||||
{
|
||||
TaskManager::instance()->setFrontendWindowRect(x, y, width, height);
|
||||
}
|
208
frame/dbus/dockdaemonadaptors.h
Normal file
208
frame/dbus/dockdaemonadaptors.h
Normal file
@ -0,0 +1,208 @@
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "taskmanager/entry.h"
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QMetaObject>
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtDBus/QtDBus>
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QMap>
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QVariant>
|
||||
#include <QDBusObjectPath>
|
||||
#include <QRect>
|
||||
|
||||
/*
|
||||
* Adaptor class for interface org.deepin.dde.daemon.Dock1
|
||||
*/
|
||||
|
||||
class Entry;
|
||||
class DockDaemonDBusAdaptor: public QDBusAbstractAdaptor
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", "org.deepin.dde.daemon.Dock1")
|
||||
Q_CLASSINFO("D-Bus Introspection", ""
|
||||
" <interface name=\"org.deepin.dde.daemon.Dock1\">\n"
|
||||
" <method name=\"CloseWindow\">\n"
|
||||
" <arg direction=\"in\" type=\"u\" name=\"win\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"GetEntryIDs\">\n"
|
||||
" <arg direction=\"out\" type=\"as\" name=\"list\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"IsDocked\">\n"
|
||||
" <arg direction=\"in\" type=\"s\" name=\"desktopFile\"/>\n"
|
||||
" <arg direction=\"out\" type=\"b\" name=\"value\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"IsOnDock\">\n"
|
||||
" <arg direction=\"in\" type=\"s\" name=\"desktopFile\"/>\n"
|
||||
" <arg direction=\"out\" type=\"b\" name=\"value\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"MoveEntry\">\n"
|
||||
" <arg direction=\"in\" type=\"i\" name=\"index\"/>\n"
|
||||
" <arg direction=\"in\" type=\"i\" name=\"newIndex\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"QueryWindowIdentifyMethod\">\n"
|
||||
" <arg direction=\"in\" type=\"u\" name=\"win\"/>\n"
|
||||
" <arg direction=\"out\" type=\"s\" name=\"identifyMethod\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"GetDockedAppsDesktopFiles\">\n"
|
||||
" <arg direction=\"out\" type=\"as\" name=\"desktopFiles\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"GetPluginSettings\">\n"
|
||||
" <arg direction=\"out\" type=\"s\" name=\"jsonStr\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"SetPluginSettings\">\n"
|
||||
" <arg direction=\"in\" type=\"s\" name=\"jsonStr\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"MergePluginSettings\">\n"
|
||||
" <arg direction=\"in\" type=\"s\" name=\"jsonStr\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"RemovePluginSettings\">\n"
|
||||
" <arg direction=\"in\" type=\"s\" name=\"key1\"/>\n"
|
||||
" <arg direction=\"in\" type=\"as\" name=\"key2List\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"RequestDock\">\n"
|
||||
" <arg direction=\"in\" type=\"s\" name=\"desktopFile\"/>\n"
|
||||
" <arg direction=\"in\" type=\"i\" name=\"index\"/>\n"
|
||||
" <arg direction=\"out\" type=\"b\" name=\"ok\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"RequestUndock\">\n"
|
||||
" <arg direction=\"in\" type=\"s\" name=\"desktopFile\"/>\n"
|
||||
" <arg direction=\"out\" type=\"b\" name=\"ok\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"SetShowRecent\">\n"
|
||||
" <arg direction=\"in\" type=\"b\" name=\"visible\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"SetShowMultiWindow\">\n"
|
||||
" <arg direction=\"in\" type=\"b\" name=\"visible\"/>\n"
|
||||
" </method>\n"
|
||||
" <method name=\"SetFrontendWindowRect\">\n"
|
||||
" <arg direction=\"in\" type=\"i\" name=\"x\"/>\n"
|
||||
" <arg direction=\"in\" type=\"i\" name=\"y\"/>\n"
|
||||
" <arg direction=\"in\" type=\"u\" name=\"width\"/>\n"
|
||||
" <arg direction=\"in\" type=\"u\" name=\"height\"/>\n"
|
||||
" </method>\n"
|
||||
" <signal name=\"ServiceRestarted\"/>\n"
|
||||
" <signal name=\"EntryAdded\">\n"
|
||||
" <arg type=\"o\" name=\"path\"/>\n"
|
||||
" <arg type=\"i\" name=\"index\"/>\n"
|
||||
" </signal>\n"
|
||||
" <signal name=\"EntryRemoved\">\n"
|
||||
" <arg type=\"s\" name=\"entryId\"/>\n"
|
||||
" </signal>\n"
|
||||
" <property access=\"readwrite\" type=\"u\" name=\"ShowTimeout\"/>\n"
|
||||
" <property access=\"readwrite\" type=\"u\" name=\"HideTimeout\"/>\n"
|
||||
" <property access=\"readwrite\" type=\"u\" name=\"WindowSizeEfficient\"/>\n"
|
||||
" <property access=\"readwrite\" type=\"u\" name=\"WindowSizeFashion\"/>\n"
|
||||
" <property access=\"read\" type=\"u\" name=\"WindowMargin\"/>\n"
|
||||
" <property access=\"read\" type=\"(iiii)\" name=\"FrontendWindowRect\"/>\n"
|
||||
" <property access=\"readwrite\" type=\"i\" name=\"HideMode\"/>\n"
|
||||
" <property access=\"readwrite\" type=\"i\" name=\"DisplayMode\"/>\n"
|
||||
" <property access=\"read\" type=\"i\" name=\"HideState\"/>\n"
|
||||
" <property access=\"readwrite\" type=\"i\" name=\"Position\"/>\n"
|
||||
" <property access=\"readwrite\" type=\"u\" name=\"IconSize\"/>\n"
|
||||
" <property access=\"read\" type=\"as\" name=\"DockedApps\"/>\n"
|
||||
" <property access=\"read\" type=\"b\" name=\"ShowRecent\"/>\n"
|
||||
" <property access=\"read\" type=\"b\" name=\"ShowMultiWindow\"/>\n"
|
||||
" </interface>\n"
|
||||
"")
|
||||
public:
|
||||
DockDaemonDBusAdaptor(QObject *parent);
|
||||
virtual ~DockDaemonDBusAdaptor();
|
||||
|
||||
public: // PROPERTIES
|
||||
Q_PROPERTY(int DisplayMode READ displayMode WRITE setDisplayMode NOTIFY DisplayModeChanged)
|
||||
int displayMode() const;
|
||||
void setDisplayMode(int value);
|
||||
|
||||
Q_PROPERTY(QStringList DockedApps READ dockedApps NOTIFY DockedAppsChanged)
|
||||
QStringList dockedApps() const;
|
||||
|
||||
Q_PROPERTY(int HideMode READ hideMode WRITE setHideMode NOTIFY HideModeChanged)
|
||||
int hideMode() const;
|
||||
void setHideMode(int value);
|
||||
|
||||
Q_PROPERTY(int HideState READ hideState NOTIFY HideStateChanged)
|
||||
int hideState() const;
|
||||
|
||||
Q_PROPERTY(uint HideTimeout READ hideTimeout WRITE setHideTimeout NOTIFY HideTimeoutChanged)
|
||||
uint hideTimeout() const;
|
||||
void setHideTimeout(uint value);
|
||||
|
||||
Q_PROPERTY(uint WindowSizeEfficient READ windowSizeEfficient WRITE setWindowSizeEfficient NOTIFY WindowSizeEfficientChanged)
|
||||
uint windowSizeEfficient() const;
|
||||
void setWindowSizeEfficient(uint value);
|
||||
|
||||
Q_PROPERTY(uint WindowSizeFashion READ windowSizeFashion WRITE setWindowSizeFashion NOTIFY WindowSizeFashionChanged)
|
||||
uint windowSizeFashion() const;
|
||||
void setWindowSizeFashion(uint value);
|
||||
|
||||
Q_PROPERTY(uint WindowMargin READ windowMargin NOTIFY WindowMarginChanged)
|
||||
uint windowMargin() const;
|
||||
|
||||
Q_PROPERTY(QRect FrontendWindowRect READ frontendWindowRect NOTIFY FrontendWindowRectChanged)
|
||||
QRect frontendWindowRect() const;
|
||||
|
||||
Q_PROPERTY(uint IconSize READ iconSize WRITE setIconSize NOTIFY IconSizeChanged)
|
||||
uint iconSize() const;
|
||||
void setIconSize(uint value);
|
||||
|
||||
Q_PROPERTY(int Position READ position WRITE setPosition NOTIFY PositionChanged)
|
||||
int position() const;
|
||||
void setPosition(int value);
|
||||
|
||||
Q_PROPERTY(uint ShowTimeout READ showTimeout WRITE setShowTimeout NOTIFY ShowTimeoutChanged)
|
||||
uint showTimeout() const;
|
||||
void setShowTimeout(uint value);
|
||||
|
||||
Q_PROPERTY(bool ShowRecent READ showRecent NOTIFY showRecentChanged)
|
||||
bool showRecent() const;
|
||||
|
||||
Q_PROPERTY(bool ShowMultiWindow READ showMultiWindow NOTIFY ShowMultiWindowChanged)
|
||||
bool showMultiWindow() const;
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
void CloseWindow(uint win);
|
||||
QStringList GetEntryIDs();
|
||||
bool IsDocked(const QString &desktopFile);
|
||||
bool IsOnDock(const QString &desktopFile);
|
||||
void MoveEntry(int index, int newIndex);
|
||||
QString QueryWindowIdentifyMethod(uint win);
|
||||
QStringList GetDockedAppsDesktopFiles();
|
||||
QString GetPluginSettings();
|
||||
void SetPluginSettings(QString jsonStr);
|
||||
void MergePluginSettings(QString jsonStr);
|
||||
void RemovePluginSettings(QString key1, QStringList key2List);
|
||||
bool RequestDock(const QString &desktopFile, int index);
|
||||
bool RequestUndock(const QString &desktopFile);
|
||||
void SetShowRecent(bool visible);
|
||||
void SetShowMultiWindow(bool showMultiWindow);
|
||||
void SetFrontendWindowRect(int x, int y, uint width, uint height);
|
||||
|
||||
Q_SIGNALS: // SIGNALS
|
||||
void ServiceRestarted();
|
||||
void EntryAdded(const Entry *entry, int index);
|
||||
void EntryRemoved(const QString &entryId);
|
||||
|
||||
void DisplayModeChanged(int value) const;
|
||||
void DockedAppsChanged(const QStringList &value) const;
|
||||
void EntriesChanged(const QList<QDBusObjectPath> &value) const;
|
||||
void FrontendWindowRectChanged(const QRect &dockRect) const;
|
||||
void HideModeChanged(int value) const;
|
||||
void HideStateChanged(int value) const;
|
||||
void HideTimeoutChanged(uint value) const;
|
||||
void IconSizeChanged(uint value) const;
|
||||
void PositionChanged(int value) const;
|
||||
void ShowTimeoutChanged(uint value) const;
|
||||
void WindowSizeEfficientChanged(uint value) const;
|
||||
void WindowSizeFashionChanged(uint value) const;
|
||||
void WindowMarginChanged(uint value) const;
|
||||
void showRecentChanged(bool) const;
|
||||
void ShowMultiWindowChanged(bool) const;
|
||||
};
|
38
frame/dbusinterface/types/arealist.cpp
Normal file
38
frame/dbusinterface/types/arealist.cpp
Normal file
@ -0,0 +1,38 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "arealist.h"
|
||||
|
||||
bool MonitRect::operator ==(const MonitRect &rect)
|
||||
{
|
||||
return x1 == rect.x1 && y1 == rect.y1 && x2 == rect.x2 && y2 == rect.y2;
|
||||
}
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const MonitRect &rect)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg << rect.x1 << rect.y1 << rect.x2 << rect.y2;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, MonitRect &rect)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg >> rect.x1 >> rect.y1 >> rect.x2 >> rect.y2;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
void registerAreaListMetaType()
|
||||
{
|
||||
qRegisterMetaType<MonitRect>("MonitRect");
|
||||
qDBusRegisterMetaType<MonitRect>();
|
||||
|
||||
qRegisterMetaType<AreaList>("AreaList");
|
||||
qDBusRegisterMetaType<AreaList>();
|
||||
}
|
32
frame/dbusinterface/types/arealist.h
Normal file
32
frame/dbusinterface/types/arealist.h
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef AREALIST_H
|
||||
#define AREALIST_H
|
||||
|
||||
#include <QDBusMetaType>
|
||||
#include <QRect>
|
||||
#include <QList>
|
||||
|
||||
struct MonitRect {
|
||||
int x1;
|
||||
int y1;
|
||||
int x2;
|
||||
int y2;
|
||||
|
||||
bool operator ==(const MonitRect& rect);
|
||||
};
|
||||
|
||||
typedef QList<MonitRect> AreaList;
|
||||
|
||||
Q_DECLARE_METATYPE(MonitRect)
|
||||
Q_DECLARE_METATYPE(AreaList)
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const MonitRect &rect);
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, MonitRect &rect);
|
||||
|
||||
void registerAreaListMetaType();
|
||||
|
||||
#endif // AREALIST_H
|
14
frame/dbusinterface/types/audioport.cpp
Normal file
14
frame/dbusinterface/types/audioport.cpp
Normal file
@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include <QDBusMetaType>
|
||||
|
||||
#include "audioport.h"
|
||||
|
||||
void registerAudioPortMetaType()
|
||||
{
|
||||
qRegisterMetaType<AudioPort>("AudioPort");
|
||||
qDBusRegisterMetaType<AudioPort>();
|
||||
}
|
56
frame/dbusinterface/types/audioport.h
Normal file
56
frame/dbusinterface/types/audioport.h
Normal file
@ -0,0 +1,56 @@
|
||||
// Copyright (C) 2016 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef AUDIOPORT_H
|
||||
#define AUDIOPORT_H
|
||||
|
||||
#include <QDBusMetaType>
|
||||
#include <QString>
|
||||
#include <QDBusArgument>
|
||||
#include <QDebug>
|
||||
|
||||
class AudioPort
|
||||
{
|
||||
public:
|
||||
QString name;
|
||||
QString description;
|
||||
uchar availability; // 0 for Unknown, 1 for Not Available, 2 for Available.
|
||||
|
||||
friend QDebug operator<<(QDebug argument, const AudioPort &port) {
|
||||
argument << port.description;
|
||||
|
||||
return argument;
|
||||
}
|
||||
|
||||
friend QDBusArgument &operator<<(QDBusArgument &argument, const AudioPort &port) {
|
||||
argument.beginStructure();
|
||||
argument << port.name << port.description << port.availability;
|
||||
argument.endStructure();
|
||||
|
||||
return argument;
|
||||
}
|
||||
|
||||
friend const QDBusArgument &operator>>(const QDBusArgument &argument, AudioPort &port) {
|
||||
argument.beginStructure();
|
||||
argument >> port.name >> port.description >> port.availability;
|
||||
argument.endStructure();
|
||||
|
||||
return argument;
|
||||
}
|
||||
|
||||
bool operator==(const AudioPort what) const {
|
||||
return what.name == name && what.description == description && what.availability == availability;
|
||||
}
|
||||
|
||||
bool operator!=(const AudioPort what) const {
|
||||
return what.name != name || what.description != description || what.availability != availability;
|
||||
}
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(AudioPort)
|
||||
|
||||
void registerAudioPortMetaType();
|
||||
|
||||
#endif // AUDIOPORT_H
|
12
frame/dbusinterface/types/audioportlist.cpp
Normal file
12
frame/dbusinterface/types/audioportlist.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "audioportlist.h"
|
||||
|
||||
void registerAudioPortListMetaType()
|
||||
{
|
||||
qRegisterMetaType<AudioPortList>("AudioPortList");
|
||||
qDBusRegisterMetaType<AudioPortList>();
|
||||
}
|
20
frame/dbusinterface/types/audioportlist.h
Normal file
20
frame/dbusinterface/types/audioportlist.h
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright (C) 2016 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef AUDIOPORTLIST_H
|
||||
#define AUDIOPORTLIST_H
|
||||
|
||||
#include <QDBusMetaType>
|
||||
#include <QList>
|
||||
|
||||
#include "audioport.h"
|
||||
|
||||
typedef QList<AudioPort> AudioPortList;
|
||||
|
||||
Q_DECLARE_METATYPE(AudioPortList)
|
||||
|
||||
void registerAudioPortListMetaType();
|
||||
|
||||
#endif // AUDIOPORTLIST_H
|
12
frame/dbusinterface/types/brightnessmap.cpp
Normal file
12
frame/dbusinterface/types/brightnessmap.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "brightnessmap.h"
|
||||
|
||||
void registerBrightnessMapMetaType()
|
||||
{
|
||||
qRegisterMetaType<BrightnessMap>("BrightnessMap");
|
||||
qDBusRegisterMetaType<BrightnessMap>();
|
||||
}
|
16
frame/dbusinterface/types/brightnessmap.h
Normal file
16
frame/dbusinterface/types/brightnessmap.h
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef BRIGHTNESSMAP_H
|
||||
#define BRIGHTNESSMAP_H
|
||||
|
||||
#include <QMap>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
typedef QMap<QString, double> BrightnessMap;
|
||||
|
||||
void registerBrightnessMapMetaType();
|
||||
|
||||
#endif // BRIGHTNESSMAP_H
|
43
frame/dbusinterface/types/dbusimagelist.cpp
Normal file
43
frame/dbusinterface/types/dbusimagelist.cpp
Normal file
@ -0,0 +1,43 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "dbusimagelist.h"
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &argument, const DBusImage &image)
|
||||
{
|
||||
argument.beginStructure();
|
||||
argument << image.width << image.height << image.pixels;
|
||||
argument.endStructure();
|
||||
return argument;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument &argument, DBusImage &image)
|
||||
{
|
||||
argument.beginStructure();
|
||||
argument >> image.width >> image.height >> image.pixels;
|
||||
argument.endStructure();
|
||||
return argument;
|
||||
}
|
||||
|
||||
void registerDBusImageListMetaType()
|
||||
{
|
||||
qRegisterMetaType<DBusImage>("DBusImage");
|
||||
qDBusRegisterMetaType<DBusImage>();
|
||||
|
||||
qRegisterMetaType<DBusImageList>("DBusImageList");
|
||||
qDBusRegisterMetaType<DBusImageList>();
|
||||
}
|
||||
|
||||
bool operator ==(const DBusImage &a, const DBusImage &b)
|
||||
{
|
||||
return a.width == b.width
|
||||
&& a.height == b.height
|
||||
&& a.pixels == b.pixels;
|
||||
}
|
||||
|
||||
bool operator !=(const DBusImage &a, const DBusImage &b)
|
||||
{
|
||||
return !(a == b);
|
||||
}
|
32
frame/dbusinterface/types/dbusimagelist.h
Normal file
32
frame/dbusinterface/types/dbusimagelist.h
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef DBUSIMAGELIST_H
|
||||
#define DBUSIMAGELIST_H
|
||||
|
||||
#include <QDBusMetaType>
|
||||
#include <QRect>
|
||||
#include <QList>
|
||||
|
||||
struct DBusImage
|
||||
{
|
||||
int width;
|
||||
int height;
|
||||
QByteArray pixels;
|
||||
};
|
||||
Q_DECLARE_METATYPE(DBusImage)
|
||||
|
||||
typedef QList<DBusImage> DBusImageList;
|
||||
Q_DECLARE_METATYPE(DBusImageList)
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument&, const DBusImage&);
|
||||
const QDBusArgument &operator>>(const QDBusArgument&, DBusImage&);
|
||||
|
||||
bool operator ==(const DBusImage&, const DBusImage&);
|
||||
bool operator !=(const DBusImage&, const DBusImage&);
|
||||
|
||||
void registerDBusImageListMetaType();
|
||||
|
||||
#endif // DBUSIMAGELIST_H
|
41
frame/dbusinterface/types/dbustooltip.cpp
Normal file
41
frame/dbusinterface/types/dbustooltip.cpp
Normal file
@ -0,0 +1,41 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "dbustooltip.h"
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &argument, const DBusToolTip &tip)
|
||||
{
|
||||
argument.beginStructure();
|
||||
argument << tip.iconName << tip.iconPixmap << tip.title << tip.description;
|
||||
argument.endStructure();
|
||||
return argument;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument &argument, DBusToolTip &tip)
|
||||
{
|
||||
argument.beginStructure();
|
||||
argument >> tip.iconName >> tip.iconPixmap >> tip.title >> tip.description;
|
||||
argument.endStructure();
|
||||
return argument;
|
||||
}
|
||||
|
||||
bool operator ==(const DBusToolTip &a, const DBusToolTip &b)
|
||||
{
|
||||
return a.iconName == b.iconName
|
||||
&& a.iconPixmap == b.iconPixmap
|
||||
&& a.title == b.title
|
||||
&& a.description == b.description;
|
||||
}
|
||||
|
||||
bool operator !=(const DBusToolTip &a, const DBusToolTip &b)
|
||||
{
|
||||
return !(a == b);
|
||||
}
|
||||
|
||||
void registerDBusToolTipMetaType()
|
||||
{
|
||||
qRegisterMetaType<DBusToolTip>("DBusToolTip");
|
||||
qDBusRegisterMetaType<DBusToolTip>();
|
||||
}
|
32
frame/dbusinterface/types/dbustooltip.h
Normal file
32
frame/dbusinterface/types/dbustooltip.h
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef DBUSTOOLTIP_H
|
||||
#define DBUSTOOLTIP_H
|
||||
|
||||
#include "dbusimagelist.h"
|
||||
|
||||
#include <QDBusMetaType>
|
||||
#include <QRect>
|
||||
#include <QList>
|
||||
|
||||
struct DBusToolTip
|
||||
{
|
||||
QString iconName;
|
||||
DBusImageList iconPixmap;
|
||||
QString title;
|
||||
QString description;
|
||||
};
|
||||
Q_DECLARE_METATYPE(DBusToolTip)
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument&, const DBusToolTip&);
|
||||
const QDBusArgument &operator>>(const QDBusArgument&, DBusToolTip&);
|
||||
|
||||
bool operator ==(const DBusToolTip&, const DBusToolTip&);
|
||||
bool operator !=(const DBusToolTip&, const DBusToolTip&);
|
||||
|
||||
void registerDBusToolTipMetaType();
|
||||
|
||||
#endif // DBUSTOOLTIP_H
|
54
frame/dbusinterface/types/dockrect.cpp
Normal file
54
frame/dbusinterface/types/dockrect.cpp
Normal file
@ -0,0 +1,54 @@
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "dockrect.h"
|
||||
#include <QDebug>
|
||||
|
||||
DockRect::DockRect()
|
||||
: x(0)
|
||||
, y(0)
|
||||
, w(0)
|
||||
, h(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QDebug operator<<(QDebug debug, const DockRect &rect)
|
||||
{
|
||||
debug << QString("DockRect(%1, %2, %3, %4)").arg(rect.x)
|
||||
.arg(rect.y)
|
||||
.arg(rect.w)
|
||||
.arg(rect.h);
|
||||
|
||||
return debug;
|
||||
}
|
||||
|
||||
DockRect::operator QRect() const
|
||||
{
|
||||
return QRect(x, y, w, h);
|
||||
}
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const DockRect &rect)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg << rect.x << rect.y << rect.w << rect.h;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, DockRect &rect)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg >> rect.x >> rect.y >> rect.w >> rect.h;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
void registerDockRectMetaType()
|
||||
{
|
||||
qRegisterMetaType<DockRect>("DockRect");
|
||||
qDBusRegisterMetaType<DockRect>();
|
||||
}
|
31
frame/dbusinterface/types/dockrect.h
Normal file
31
frame/dbusinterface/types/dockrect.h
Normal file
@ -0,0 +1,31 @@
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef DOCKRECT_H
|
||||
#define DOCKRECT_H
|
||||
|
||||
#include <QRect>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
struct DockRect
|
||||
{
|
||||
public:
|
||||
DockRect();
|
||||
operator QRect() const;
|
||||
|
||||
friend QDebug operator<<(QDebug debug, const DockRect &rect);
|
||||
friend const QDBusArgument &operator>>(const QDBusArgument &arg, DockRect &rect);
|
||||
friend QDBusArgument &operator<<(QDBusArgument &arg, const DockRect &rect);
|
||||
|
||||
int x;
|
||||
int y;
|
||||
uint w;
|
||||
uint h;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(DockRect)
|
||||
|
||||
void registerDockRectMetaType();
|
||||
|
||||
#endif // DOCKRECT_H
|
12
frame/dbusinterface/types/keyboardlayoutlist.cpp
Normal file
12
frame/dbusinterface/types/keyboardlayoutlist.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "keyboardlayoutlist.h"
|
||||
|
||||
void registerKeyboardLayoutListMetaType()
|
||||
{
|
||||
qRegisterMetaType<KeyboardLayoutList>("KeyboardLayoutList");
|
||||
qDBusRegisterMetaType<KeyboardLayoutList>();
|
||||
}
|
18
frame/dbusinterface/types/keyboardlayoutlist.h
Normal file
18
frame/dbusinterface/types/keyboardlayoutlist.h
Normal file
@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef KEYBOARDLAYOUTLIST_H
|
||||
#define KEYBOARDLAYOUTLIST_H
|
||||
|
||||
#include <QMap>
|
||||
#include <QString>
|
||||
#include <QObject>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
typedef QMap<QString, QString> KeyboardLayoutList;
|
||||
|
||||
void registerKeyboardLayoutListMetaType();
|
||||
|
||||
#endif // KEYBOARDLAYOUTLIST_H
|
56
frame/dbusinterface/types/resolution.cpp
Normal file
56
frame/dbusinterface/types/resolution.cpp
Normal file
@ -0,0 +1,56 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "resolution.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
void registerResolutionMetaType()
|
||||
{
|
||||
qRegisterMetaType<Resolution>("Resolution");
|
||||
qDBusRegisterMetaType<Resolution>();
|
||||
}
|
||||
|
||||
Resolution::Resolution()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool Resolution::operator!=(const Resolution &other) const
|
||||
{
|
||||
return m_width != other.m_width || m_height != other.m_height || m_rate != other.m_rate;
|
||||
}
|
||||
|
||||
bool Resolution::operator==(const Resolution &other) const
|
||||
{
|
||||
return !(other != *this);
|
||||
}
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const Resolution &value)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg << quint32(value.id()) << quint16(value.width()) << quint16(value.height()) << value.rate();
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, Resolution &value)
|
||||
{
|
||||
quint32 id;
|
||||
quint16 w, h;
|
||||
double rate;
|
||||
|
||||
arg.beginStructure();
|
||||
arg >> id >> w >> h >> rate;
|
||||
arg.endStructure();
|
||||
|
||||
value.setId(id);
|
||||
value.setWidth(w);
|
||||
value.setHeight(h);
|
||||
value.setRate(rate);
|
||||
|
||||
return arg;
|
||||
}
|
45
frame/dbusinterface/types/resolution.h
Normal file
45
frame/dbusinterface/types/resolution.h
Normal file
@ -0,0 +1,45 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef RESOLUTION_H
|
||||
#define RESOLUTION_H
|
||||
|
||||
#include <QDBusMetaType>
|
||||
|
||||
class Resolution
|
||||
{
|
||||
public:
|
||||
friend QDBusArgument &operator<<(QDBusArgument &arg, const Resolution &value);
|
||||
friend const QDBusArgument &operator>>(const QDBusArgument &arg, Resolution &value);
|
||||
|
||||
explicit Resolution();
|
||||
|
||||
bool operator!=(const Resolution &other) const;
|
||||
bool operator==(const Resolution &other) const;
|
||||
|
||||
int id() const { return m_id; }
|
||||
int width() const { return m_width; }
|
||||
int height() const { return m_height; }
|
||||
double rate() const { return m_rate; }
|
||||
|
||||
private:
|
||||
void setId(const int id) { m_id = id; }
|
||||
void setWidth(const int w) { m_width = w; }
|
||||
void setHeight(const int h) { m_height = h; }
|
||||
void setRate(const double rate) { m_rate = rate; }
|
||||
|
||||
private:
|
||||
int m_id;
|
||||
int m_width;
|
||||
int m_height;
|
||||
double m_rate;
|
||||
};
|
||||
|
||||
|
||||
Q_DECLARE_METATYPE(Resolution)
|
||||
|
||||
void registerResolutionMetaType();
|
||||
|
||||
#endif // RESOLUTION_H
|
14
frame/dbusinterface/types/resolutionlist.cpp
Normal file
14
frame/dbusinterface/types/resolutionlist.cpp
Normal file
@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "resolutionlist.h"
|
||||
|
||||
void registerResolutionListMetaType()
|
||||
{
|
||||
registerResolutionMetaType();
|
||||
|
||||
qRegisterMetaType<ResolutionList>("ResolutionList");
|
||||
qDBusRegisterMetaType<ResolutionList>();
|
||||
}
|
17
frame/dbusinterface/types/resolutionlist.h
Normal file
17
frame/dbusinterface/types/resolutionlist.h
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef RESOLUTIONLIST_H
|
||||
#define RESOLUTIONLIST_H
|
||||
|
||||
#include "resolution.h"
|
||||
|
||||
#include <QList>
|
||||
|
||||
typedef QList<Resolution> ResolutionList;
|
||||
|
||||
void registerResolutionListMetaType();
|
||||
|
||||
#endif // RESOLUTIONLIST_H
|
54
frame/dbusinterface/types/screenrect.cpp
Normal file
54
frame/dbusinterface/types/screenrect.cpp
Normal file
@ -0,0 +1,54 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "screenrect.h"
|
||||
|
||||
ScreenRect::ScreenRect()
|
||||
: x(0),
|
||||
y(0),
|
||||
w(0),
|
||||
h(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QDebug operator<<(QDebug debug, const ScreenRect &rect)
|
||||
{
|
||||
debug << QString("ScreenRect(%1, %2, %3, %4)").arg(rect.x)
|
||||
.arg(rect.y)
|
||||
.arg(rect.w)
|
||||
.arg(rect.h);
|
||||
|
||||
return debug;
|
||||
}
|
||||
|
||||
ScreenRect::operator QRect() const
|
||||
{
|
||||
return QRect(x, y, w, h);
|
||||
}
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const ScreenRect &rect)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg << rect.x << rect.y << rect.w << rect.h;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, ScreenRect &rect)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg >> rect.x >> rect.y >> rect.w >> rect.h;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
void registerScreenRectMetaType()
|
||||
{
|
||||
qRegisterMetaType<ScreenRect>("ScreenRect");
|
||||
qDBusRegisterMetaType<ScreenRect>();
|
||||
}
|
35
frame/dbusinterface/types/screenrect.h
Normal file
35
frame/dbusinterface/types/screenrect.h
Normal file
@ -0,0 +1,35 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef SCREENRECT_H
|
||||
#define SCREENRECT_H
|
||||
|
||||
#include <QRect>
|
||||
#include <QDBusArgument>
|
||||
#include <QDebug>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
struct ScreenRect
|
||||
{
|
||||
public:
|
||||
ScreenRect();
|
||||
operator QRect() const;
|
||||
|
||||
friend QDebug operator<<(QDebug debug, const ScreenRect &rect);
|
||||
friend const QDBusArgument &operator>>(const QDBusArgument &arg, ScreenRect &rect);
|
||||
friend QDBusArgument &operator<<(QDBusArgument &arg, const ScreenRect &rect);
|
||||
|
||||
private:
|
||||
qint16 x;
|
||||
qint16 y;
|
||||
quint16 w;
|
||||
quint16 h;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(ScreenRect)
|
||||
|
||||
void registerScreenRectMetaType();
|
||||
|
||||
#endif // SCREENRECT_H
|
43
frame/dbusinterface/types/touchscreeninfolist.cpp
Normal file
43
frame/dbusinterface/types/touchscreeninfolist.cpp
Normal file
@ -0,0 +1,43 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "touchscreeninfolist.h"
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo &info)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg << info.id << info.name << info.deviceNode << info.serialNumber;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo &info)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg >> info.id >> info.name >> info.deviceNode >> info.serialNumber;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
bool TouchscreenInfo::operator==(const TouchscreenInfo &info)
|
||||
{
|
||||
return id == info.id && name == info.name && deviceNode == info.deviceNode && serialNumber == info.serialNumber;
|
||||
}
|
||||
|
||||
void registerTouchscreenInfoMetaType()
|
||||
{
|
||||
qRegisterMetaType<TouchscreenInfo>("TouchscreenInfo");
|
||||
qDBusRegisterMetaType<TouchscreenInfo>();
|
||||
}
|
||||
|
||||
void registerTouchscreenInfoListMetaType()
|
||||
{
|
||||
registerTouchscreenInfoMetaType();
|
||||
|
||||
qRegisterMetaType<TouchscreenInfoList>("TouchscreenInfoList");
|
||||
qDBusRegisterMetaType<TouchscreenInfoList>();
|
||||
}
|
32
frame/dbusinterface/types/touchscreeninfolist.h
Normal file
32
frame/dbusinterface/types/touchscreeninfolist.h
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef TOUCHSCREENINFOLIST_H
|
||||
#define TOUCHSCREENINFOLIST_H
|
||||
|
||||
#include <QString>
|
||||
#include <QList>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
struct TouchscreenInfo {
|
||||
qint32 id;
|
||||
QString name;
|
||||
QString deviceNode;
|
||||
QString serialNumber;
|
||||
|
||||
bool operator ==(const TouchscreenInfo& info);
|
||||
};
|
||||
|
||||
typedef QList<TouchscreenInfo> TouchscreenInfoList;
|
||||
|
||||
Q_DECLARE_METATYPE(TouchscreenInfo)
|
||||
Q_DECLARE_METATYPE(TouchscreenInfoList)
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo &info);
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo &info);
|
||||
|
||||
void registerTouchscreenInfoListMetaType();
|
||||
|
||||
#endif // !TOUCHSCREENINFOLIST_H
|
43
frame/dbusinterface/types/touchscreeninfolist_v2.cpp
Normal file
43
frame/dbusinterface/types/touchscreeninfolist_v2.cpp
Normal file
@ -0,0 +1,43 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "touchscreeninfolist_v2.h"
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo_V2 &info)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg << info.id << info.name << info.deviceNode << info.serialNumber << info.UUID;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo_V2 &info)
|
||||
{
|
||||
arg.beginStructure();
|
||||
arg >> info.id >> info.name >> info.deviceNode >> info.serialNumber >> info.UUID;
|
||||
arg.endStructure();
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
bool TouchscreenInfo_V2::operator==(const TouchscreenInfo_V2 &info)
|
||||
{
|
||||
return id == info.id && name == info.name && deviceNode == info.deviceNode && serialNumber == info.serialNumber && UUID == info.UUID;
|
||||
}
|
||||
|
||||
void registerTouchscreenInfoV2MetaType()
|
||||
{
|
||||
qRegisterMetaType<TouchscreenInfo_V2>("TouchscreenInfo_V2");
|
||||
qDBusRegisterMetaType<TouchscreenInfo_V2>();
|
||||
}
|
||||
|
||||
void registerTouchscreenInfoList_V2MetaType()
|
||||
{
|
||||
registerTouchscreenInfoV2MetaType();
|
||||
|
||||
qRegisterMetaType<TouchscreenInfoList_V2>("TouchscreenInfoList_V2");
|
||||
qDBusRegisterMetaType<TouchscreenInfoList_V2>();
|
||||
}
|
33
frame/dbusinterface/types/touchscreeninfolist_v2.h
Normal file
33
frame/dbusinterface/types/touchscreeninfolist_v2.h
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef TOUCHSCREENINFOLISTV2_H
|
||||
#define TOUCHSCREENINFOLISTV2_H
|
||||
|
||||
#include <QString>
|
||||
#include <QList>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
struct TouchscreenInfo_V2 {
|
||||
qint32 id;
|
||||
QString name;
|
||||
QString deviceNode;
|
||||
QString serialNumber;
|
||||
QString UUID;
|
||||
|
||||
bool operator ==(const TouchscreenInfo_V2& info);
|
||||
};
|
||||
|
||||
typedef QList<TouchscreenInfo_V2> TouchscreenInfoList_V2;
|
||||
|
||||
Q_DECLARE_METATYPE(TouchscreenInfo_V2)
|
||||
Q_DECLARE_METATYPE(TouchscreenInfoList_V2)
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo_V2 &info);
|
||||
const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo_V2 &info);
|
||||
|
||||
void registerTouchscreenInfoList_V2MetaType();
|
||||
|
||||
#endif // !TOUCHSCREENINFOLISTV2_H
|
12
frame/dbusinterface/types/touchscreenmap.cpp
Normal file
12
frame/dbusinterface/types/touchscreenmap.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "touchscreenmap.h"
|
||||
|
||||
void registerTouchscreenMapMetaType()
|
||||
{
|
||||
qRegisterMetaType<TouchscreenMap>("TouchscreenMap");
|
||||
qDBusRegisterMetaType<TouchscreenMap>();
|
||||
}
|
16
frame/dbusinterface/types/touchscreenmap.h
Normal file
16
frame/dbusinterface/types/touchscreenmap.h
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef TOUCHSCREENMAP_H
|
||||
#define TOUCHSCREENMAP_H
|
||||
|
||||
#include <QMap>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
typedef QMap<QString, QString> TouchscreenMap;
|
||||
|
||||
void registerTouchscreenMapMetaType();
|
||||
|
||||
#endif // TOUCHSCREENMAP_H
|
72
frame/dbusinterface/types/zoneinfo.cpp
Normal file
72
frame/dbusinterface/types/zoneinfo.cpp
Normal file
@ -0,0 +1,72 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#include "zoneinfo.h"
|
||||
|
||||
ZoneInfo::ZoneInfo()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool ZoneInfo::operator ==(const ZoneInfo &what) const
|
||||
{
|
||||
// TODO: 这里只判断这两个成员应该就可以了
|
||||
return m_zoneName == what.m_zoneName &&
|
||||
m_utcOffset == what.m_utcOffset;
|
||||
}
|
||||
|
||||
QDebug operator<<(QDebug argument, const ZoneInfo & info)
|
||||
{
|
||||
argument << info.m_zoneName << ',' << info.m_zoneCity << ',' << info.m_utcOffset << ',';
|
||||
argument << info.i2 << ',' << info.i3 << ',' << info.i4 << Qt::endl;
|
||||
|
||||
return argument;
|
||||
}
|
||||
|
||||
QDBusArgument &operator<<(QDBusArgument & argument, const ZoneInfo & info)
|
||||
{
|
||||
argument.beginStructure();
|
||||
argument << info.m_zoneName << info.m_zoneCity << info.m_utcOffset;
|
||||
argument.beginStructure();
|
||||
argument << info.i2 << info.i3 << info.i4;
|
||||
argument.endStructure();
|
||||
argument.endStructure();
|
||||
|
||||
return argument;
|
||||
}
|
||||
|
||||
QDataStream &operator<<(QDataStream & argument, const ZoneInfo & info)
|
||||
{
|
||||
argument << info.m_zoneName << info.m_zoneCity << info.m_utcOffset;
|
||||
argument << info.i2 << info.i3 << info.i4;
|
||||
|
||||
return argument;
|
||||
}
|
||||
|
||||
const QDBusArgument &operator>>(const QDBusArgument & argument, ZoneInfo & info)
|
||||
{
|
||||
argument.beginStructure();
|
||||
argument >> info.m_zoneName >> info.m_zoneCity >> info.m_utcOffset;
|
||||
argument.beginStructure();
|
||||
argument >> info.i2 >> info.i3 >> info.i4;
|
||||
argument.endStructure();
|
||||
argument.endStructure();
|
||||
|
||||
return argument;
|
||||
}
|
||||
|
||||
const QDataStream &operator>>(QDataStream & argument, ZoneInfo & info)
|
||||
{
|
||||
argument >> info.m_zoneName >> info.m_zoneCity >> info.m_utcOffset;
|
||||
argument >> info.i2 >> info.i3 >> info.i4;
|
||||
|
||||
return argument;
|
||||
}
|
||||
|
||||
void registerZoneInfoMetaType()
|
||||
{
|
||||
qRegisterMetaType<ZoneInfo>("ZoneInfo");
|
||||
qDBusRegisterMetaType<ZoneInfo>();
|
||||
}
|
46
frame/dbusinterface/types/zoneinfo.h
Normal file
46
frame/dbusinterface/types/zoneinfo.h
Normal file
@ -0,0 +1,46 @@
|
||||
// Copyright (C) 2011 ~ 2017 Deepin Technology Co., Ltd.
|
||||
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
|
||||
#ifndef ZONEINFO_H
|
||||
#define ZONEINFO_H
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDataStream>
|
||||
#include <QString>
|
||||
#include <QDBusArgument>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
class ZoneInfo
|
||||
{
|
||||
public:
|
||||
ZoneInfo();
|
||||
|
||||
friend QDebug operator<<(QDebug argument, const ZoneInfo &info);
|
||||
friend QDBusArgument &operator<<(QDBusArgument &argument, const ZoneInfo &info);
|
||||
friend QDataStream &operator<<(QDataStream &argument, const ZoneInfo &info);
|
||||
friend const QDBusArgument &operator>>(const QDBusArgument &argument, ZoneInfo &info);
|
||||
friend const QDataStream &operator>>(QDataStream &argument, ZoneInfo &info);
|
||||
|
||||
bool operator==(const ZoneInfo &what) const;
|
||||
|
||||
public:
|
||||
inline QString getZoneName() const {return m_zoneName;}
|
||||
inline QString getZoneCity() const {return m_zoneCity;}
|
||||
inline int getUTCOffset() const {return m_utcOffset;}
|
||||
|
||||
private:
|
||||
QString m_zoneName;
|
||||
QString m_zoneCity;
|
||||
int m_utcOffset;
|
||||
qint64 i2;
|
||||
qint64 i3;
|
||||
int i4;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(ZoneInfo)
|
||||
|
||||
void registerZoneInfoMetaType();
|
||||
|
||||
#endif // ZONEINFO_H
|
166
frame/dbusinterface/xml/com.deepin.wm.xml
Normal file
166
frame/dbusinterface/xml/com.deepin.wm.xml
Normal file
@ -0,0 +1,166 @@
|
||||
<interface name="com.deepin.wm">
|
||||
<property access="readwrite" type="b" name="compositingEnabled"/>
|
||||
<property access="read" type="b" name="compositingPossible"/>
|
||||
<property access="read" type="b" name="compositingAllowSwitch"/>
|
||||
<property access="readwrite" type="b" name="zoneEnabled"/>
|
||||
<property access="readwrite" type="s" name="cursorTheme"/>
|
||||
<property access="readwrite" type="i" name="cursorSize"/>
|
||||
<method name="SwitchApplication">
|
||||
<arg direction="in" type="b" name="backward"/>
|
||||
</method>
|
||||
<method name="TileActiveWindow">
|
||||
<arg direction="in" type="u" name="side"/>
|
||||
</method>
|
||||
<method name="BeginToMoveActiveWindow"/>
|
||||
<method name="ToggleActiveWindowMaximize"/>
|
||||
<method name="MinimizeActiveWindow"/>
|
||||
<method name="ShowWorkspace"/>
|
||||
<method name="ShowWindow"/>
|
||||
<method name="ShowAllWindow"/>
|
||||
<method name="PerformAction">
|
||||
<arg direction="in" type="i" name="type"/>
|
||||
</method>
|
||||
<method name="PreviewWindow">
|
||||
<arg direction="in" type="u" name="xid"/>
|
||||
</method>
|
||||
<method name="CancelPreviewWindow"/>
|
||||
<method name="GetCurrentWorkspaceBackground">
|
||||
<arg direction="out" type="s" name="result"/>
|
||||
</method>
|
||||
<method name="SetCurrentWorkspaceBackground">
|
||||
<arg direction="in" type="s" name="uri"/>
|
||||
</method>
|
||||
<method name="GetWorkspaceBackground">
|
||||
<arg direction="in" type="i" name="index"/>
|
||||
<arg direction="out" type="s" name="result"/>
|
||||
</method>
|
||||
<method name="SetWorkspaceBackground">
|
||||
<arg direction="in" type="i" name="index"/>
|
||||
<arg direction="in" type="s" name="uri"/>
|
||||
</method>
|
||||
<method name="SetTransientBackground">
|
||||
<arg direction="in" type="s"/>
|
||||
</method>
|
||||
<method name="GetCurrentWorkspaceBackgroundForMonitor">
|
||||
<arg direction="in" type="s" name="strMonitorName"/>
|
||||
<arg direction="out" type="s" name="result"/>
|
||||
</method>
|
||||
<method name="SetCurrentWorkspaceBackgroundForMonitor">
|
||||
<arg direction="in" type="s" name="uri"/>
|
||||
<arg direction="in" type="s" name="strMonitorName"/>
|
||||
</method>
|
||||
<method name="GetWorkspaceBackgroundForMonitor">
|
||||
<arg direction="in" type="i" name="index"/>
|
||||
<arg direction="in" type="s" name="strMonitorName"/>
|
||||
<arg direction="out" type="s" name="result"/>
|
||||
</method>
|
||||
<method name="SetWorkspaceBackgroundForMonitor">
|
||||
<arg direction="in" type="i" name="index"/>
|
||||
<arg direction="in" type="s" name="strMonitorName"/>
|
||||
<arg direction="in" type="s" name="uri"/>
|
||||
</method>
|
||||
<method name="SetTransientBackgroundForMonitor">
|
||||
<arg direction="in" type="s" name="uri"/>
|
||||
<arg direction="in" type="s" name="strMonitorName"/>
|
||||
</method>
|
||||
<method name="GetCurrentWorkspace">
|
||||
<arg direction="out" type="i" name="index"/>
|
||||
</method>
|
||||
<method name="WorkspaceCount">
|
||||
<arg direction="out" type="i" name="count"/>
|
||||
</method>
|
||||
<method name="SetCurrentWorkspace">
|
||||
<arg direction="in" type="i" name="index"/>
|
||||
</method>
|
||||
<method name="PreviousWorkspace"/>
|
||||
<method name="NextWorkspace"/>
|
||||
<method name="GetAllAccels">
|
||||
<arg direction="out" type="s" name="data"/>
|
||||
</method>
|
||||
<method name="GetAccel">
|
||||
<arg direction="in" type="s" name="id"/>
|
||||
<arg direction="out" type="as" name="data"/>
|
||||
</method>
|
||||
<method name="GetDefaultAccel">
|
||||
<arg direction="in" type="s" name="id"/>
|
||||
<arg direction="out" type="as" name="data"/>
|
||||
</method>
|
||||
<method name="SetAccel">
|
||||
<arg direction="in" type="s" name="data"/>
|
||||
<arg direction="out" type="b" name="result"/>
|
||||
</method>
|
||||
<method name="RemoveAccel">
|
||||
<arg direction="in" type="s" name="id"/>\
|
||||
</method>
|
||||
<method name="SetDecorationTheme">
|
||||
<arg direction="in" type="s" name="themeType"/>
|
||||
<arg direction="in" type="s" name="themeName"/>
|
||||
</method>
|
||||
<method name="SetDecorationDeepinTheme">
|
||||
<arg direction="in" type="s" name="deepinThemeName"/>
|
||||
</method>
|
||||
<signal name="WorkspaceBackgroundChanged">
|
||||
<arg type="i" name="index"/>
|
||||
<arg type="s" name="newUri"/>
|
||||
</signal>
|
||||
<signal name="WorkspaceBackgroundChangedForMonitor">
|
||||
<arg type="i" name="index"/>
|
||||
<arg type="s" name="strMonitorName"/>
|
||||
<arg type="s" name="uri"/>
|
||||
</signal>
|
||||
<signal name="compositingEnabledChanged">
|
||||
<arg type="b" name="enabled"/>
|
||||
</signal>
|
||||
<signal name="wmCompositingEnabledChanged">
|
||||
<arg type="b" name="enabled"/>
|
||||
</signal>
|
||||
<signal name="workspaceCountChanged">
|
||||
<arg type="i" name="count"/>
|
||||
</signal>
|
||||
<signal name="BeginToMoveActiveWindowChanged"/>
|
||||
<signal name="SwitchApplicationChanged">
|
||||
<arg type="b" name="backward"/>
|
||||
</signal>
|
||||
<signal name="TileActiveWindowChanged">
|
||||
<arg type="i" name="side"/>
|
||||
</signal>
|
||||
<signal name="ToggleActiveWindowMaximizeChanged"/>
|
||||
<signal name="ShowAllWindowChanged"/>
|
||||
<signal name="ShowWindowChanged"/>
|
||||
<signal name="ShowWorkspaceChanged"/>
|
||||
<signal name="ResumeCompositorChanged">
|
||||
<arg type="i" name="reason"/>
|
||||
</signal>
|
||||
<signal name="SuspendCompositorChanged">
|
||||
<arg type="i" name="reason"/>
|
||||
</signal>
|
||||
<method name="ChangeCurrentWorkspaceBackground">
|
||||
<arg direction="in" type="s" name="uri"/>
|
||||
</method>
|
||||
<method name="SwitchToWorkspace">
|
||||
<arg direction="in" type="b" name="backward"/>
|
||||
</method>
|
||||
<method name="PresentWindows">
|
||||
<arg direction="in" type="au" name="xids"/>
|
||||
<annotation value="QList<uint>" name="org.qtproject.QtDBus.QtTypeName.In0"/>
|
||||
</method>
|
||||
<method name="EnableZoneDetected">
|
||||
<arg direction="in" type="b" name="enabled"/>
|
||||
</method>
|
||||
<signal name="WorkspaceSwitched">
|
||||
<arg type="i" name="from"/>
|
||||
<arg type="i" name="to"/>
|
||||
</signal>
|
||||
<method name="GetMultiTaskingStatus">
|
||||
<arg direction="out" type="b" name="isActive"/>
|
||||
</method>
|
||||
<method name="SetMultiTaskingStatus">
|
||||
<arg direction="in" type="b" name="isActive"/>
|
||||
</method>
|
||||
<method name="GetIsShowDesktop">
|
||||
<arg direction="out" type="b" name="isShowDesktop"/>
|
||||
</method>
|
||||
<method name="SetShowDesktop">
|
||||
<arg direction="in" type="b" name="isShowDesktop"/>
|
||||
</method>
|
||||
</interface>
|
101
frame/dbusinterface/xml/org.deepin.dde.Appearance1.xml
Normal file
101
frame/dbusinterface/xml/org.deepin.dde.Appearance1.xml
Normal file
@ -0,0 +1,101 @@
|
||||
<interface name="org.deepin.dde.Appearance1">
|
||||
<!--
|
||||
<method name="Delete">
|
||||
<arg direction="in" type="s" name="ty"/>
|
||||
<arg direction="in" type="s" name="name"/>
|
||||
</method>
|
||||
<method name="GetScaleFactor">
|
||||
<arg direction="out" type="d" name="scaleFactor"/>
|
||||
</method>
|
||||
|
||||
<method name="GetScreenScaleFactors">
|
||||
<arg direction="out" type="a{sd}" name="scaleFactor"/>
|
||||
<annotation value="ScaleFactors"
|
||||
name="org.qtproject.QtDBus.QtTypeName.Out0"/>
|
||||
</method>
|
||||
<method name="GetWallpaperSlideShow">
|
||||
<arg direction="in" type="s" name="monitorName"/>
|
||||
<arg direction="out" type="s" name="slideShow"/>
|
||||
</method>
|
||||
<method name="List">
|
||||
<arg direction="in" type="s" name="ty"/>
|
||||
<arg direction="out" type="s" name="list"/>
|
||||
</method>
|
||||
<method name="Reset"/>
|
||||
<method name="Set">
|
||||
<arg direction="in" type="s" name="ty"/>
|
||||
<arg direction="in" type="s" name="value"/>
|
||||
</method>
|
||||
<method name="SetMonitorBackground">
|
||||
<arg direction="in" type="s" name="monitorName"/>
|
||||
<arg direction="in" type="s" name="imageGile"/>
|
||||
</method>
|
||||
<method name="SetScaleFactor">
|
||||
<arg direction="in" type="d" name="scale"/>
|
||||
</method>
|
||||
<method name="SetScreenScaleFactors">
|
||||
<arg direction="in" type="a{sd}" name="scaleFactor"/>
|
||||
<annotation value="ScaleFactors"
|
||||
name="org.qtproject.QtDBus.QtTypeName.In0"/>
|
||||
</method>
|
||||
<method name="SetWallpaperSlideShow">
|
||||
<arg direction="in" type="s" name="monitorName"/>
|
||||
<arg direction="in" type="s" name="slideShow"/>
|
||||
</method>
|
||||
<method name="Show">
|
||||
<arg direction="in" type="s" name="ty"/>
|
||||
<arg direction="in" type="as" name="names"/>
|
||||
<arg direction="out" type="s" name="detail"/>
|
||||
</method>
|
||||
<method name="Thumbnail">
|
||||
<arg direction="in" type="s" name="ty"/>
|
||||
<arg direction="in" type="s" name="name"/>
|
||||
<arg direction="out" type="s" name="file"/>
|
||||
</method>
|
||||
<method name="SetCurrentWorkspaceBackground">
|
||||
<arg direction="in" type="s" name="uri"/>
|
||||
</method>
|
||||
<method name="GetCurrentWorkspaceBackground">
|
||||
<arg direction="out" type="s" name="uri"/>
|
||||
</method>
|
||||
<method name="SetCurrentWorkspaceBackgroundForMonitor">
|
||||
<arg direction="in" type="s" name="uri"/>
|
||||
<arg direction="in" type="s" name="strMonitorName"/>
|
||||
</method>
|
||||
<method name="GetCurrentWorkspaceBackgroundForMonitor">
|
||||
<arg direction="in" type="s" name="strMonitorName"/>
|
||||
<arg direction="out" type="s" name="uri"/>
|
||||
</method>
|
||||
<method name="SetWorkspaceBackgroundForMonitor">
|
||||
<arg direction="in" type="i" name="index"/>
|
||||
<arg direction="in" type="s" name="strMonitorName"/>
|
||||
<arg direction="in" type="s" name="uri"/>
|
||||
</method>
|
||||
<method name="GetWorkspaceBackgroundForMonitor">
|
||||
<arg direction="in" type="i" name="index"/>
|
||||
<arg direction="in" type="s" name="strMonitorName"/>
|
||||
<arg direction="out" type="s" name="uri"/>
|
||||
</method>
|
||||
-->
|
||||
<property access="readwrite" type="d" name="FontSize"/>
|
||||
<property access="readwrite" type="d" name="Opacity"/>
|
||||
<property access="readwrite" type="i" name="WindowRadius"/>
|
||||
<property access="read" type="s" name="Background"/>
|
||||
<property access="read" type="s" name="GlobalTheme"/>
|
||||
<property access="read" type="s" name="GtkTheme"/>
|
||||
<property access="read" type="s" name="IconTheme"/>
|
||||
<property access="read" type="s" name="CursorTheme"/>
|
||||
<property access="read" type="s" name="MonospaceFont"/>
|
||||
<property access="readwrite" type="s" name="QtActiveColor"/>
|
||||
<property access="read" type="s" name="StandardFont"/>
|
||||
<property access="readwrite" type="s" name="WallpaperSlideShow"/>
|
||||
<property access="read" type="s" name="WallpaperURls"/>
|
||||
<signal name="Changed">
|
||||
<arg type="s" name="ty"/>
|
||||
<arg type="s" name="value"/>
|
||||
</signal>
|
||||
<signal name="Refreshed">
|
||||
<arg type="s" name="type"/>
|
||||
</signal>
|
||||
</interface>
|
||||
|
38
frame/dbusinterface/xml/org.deepin.dde.Audio1.Sink.xml
Normal file
38
frame/dbusinterface/xml/org.deepin.dde.Audio1.Sink.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<interface name="org.deepin.dde.Audio1.Sink">
|
||||
<method name="GetMeter">
|
||||
<arg type="o" direction="out"/>
|
||||
</method>
|
||||
<method name="SetBalance">
|
||||
<arg type="d" direction="in"/>
|
||||
<arg type="b" direction="in"/>
|
||||
</method>
|
||||
<method name="SetFade">
|
||||
<arg type="d" direction="in"/>
|
||||
</method>
|
||||
<method name="SetMute">
|
||||
<arg type="b" direction="in"/>
|
||||
</method>
|
||||
<method name="SetPort">
|
||||
<arg type="s" direction="in"/>
|
||||
</method>
|
||||
<method name="SetVolume">
|
||||
<arg type="d" direction="in"/>
|
||||
<arg type="b" direction="in"/>
|
||||
</method>
|
||||
<property name="Name" type="s" access="read"/>\n
|
||||
<property name="Description" type="s" access="read"/>
|
||||
<property name="BaseVolume" type="d" access="read"/>
|
||||
<property name="Mute" type="b" access="read"/>
|
||||
<property name="Volume" type="d" access="read"/>
|
||||
<property name="Balance" type="d" access="read"/>
|
||||
<property name="SupportBalance" type="b" access="read"/>
|
||||
<property name="Fade" type="d" access="read"/>
|
||||
<property name="SupportFade" type="b" access="read"/>
|
||||
<property name="Ports" type="a(ssy)" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="AudioPortList"/>
|
||||
</property>
|
||||
<property name="ActivePort" type="(ssy)" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="AudioPort"/>
|
||||
</property>
|
||||
<property name="Card" type="u" access="read"/>
|
||||
</interface>
|
46
frame/dbusinterface/xml/org.deepin.dde.Audio1.xml
Normal file
46
frame/dbusinterface/xml/org.deepin.dde.Audio1.xml
Normal file
@ -0,0 +1,46 @@
|
||||
<interface name="org.deepin.dde.Audio1">
|
||||
<method name="Reset"/>
|
||||
<method name="SetDefaultSink">
|
||||
<arg type="s" direction="in"/>
|
||||
</method>
|
||||
<method name="SetDefaultSource">
|
||||
<arg type="s" direction="in"/>
|
||||
</method>
|
||||
<method name="SetBluetoothAudioMode">
|
||||
<arg type="s" direction="in"/>
|
||||
</method>
|
||||
<method name="SetPort">
|
||||
<arg type="u" direction="in"/>
|
||||
<arg type="s" direction="in"/>
|
||||
<arg type="i" direction="in"/>
|
||||
</method>
|
||||
<method name="SetPortEnabled">
|
||||
<arg type="u" direction="in"/>
|
||||
<arg type="s" direction="in"/>
|
||||
<arg type="b" direction="in"/>
|
||||
</method>
|
||||
<method name="IsPortEnabled">
|
||||
<arg type="u" direction="in"/>
|
||||
<arg type="s" direction="in"/>
|
||||
<arg type="b" direction="out"/>
|
||||
</method>
|
||||
<signal name="PortEnabledChanged">
|
||||
<arg type="u"></arg>
|
||||
<arg type="s"></arg>
|
||||
<arg type="b"></arg>
|
||||
</signal>
|
||||
<property name="SinkInputs" type="ao" access="read"/>
|
||||
<property name="Sinks" type="ao" access="read"/>
|
||||
<property name="Sources" type="ao" access="read"/>
|
||||
<property name="BluetoothAudioModeOpts" type="as" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="QStringList"/>
|
||||
</property>
|
||||
<property name="BluetoothAudioMode" type="s" access="read"/>
|
||||
<property name="Cards" type="s" access="read"/>
|
||||
<property name="CardsWithoutUnavailable" type="s" access="read"/>
|
||||
<property name="DefaultSink" type="o" access="read"/>
|
||||
<property name="DefaultSource" type="o" access="read"/>
|
||||
<property name="MaxUIVolume" type="d" access="read"/>
|
||||
<property name="IncreaseVolume" type="b" access="readwrite"/>
|
||||
<property name="ReduceNoise" type="b" access="readwrite"/>
|
||||
</interface>
|
83
frame/dbusinterface/xml/org.deepin.dde.Display1.xml
Normal file
83
frame/dbusinterface/xml/org.deepin.dde.Display1.xml
Normal file
@ -0,0 +1,83 @@
|
||||
<interface name="org.deepin.dde.Display1">
|
||||
<method name="ApplyChanges"></method>
|
||||
<method name="AssociateTouch">
|
||||
<arg type="s" direction="in"></arg>
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<method name="AssociateTouchByUUID">
|
||||
<arg type="s" direction="in"></arg>
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<method name="ChangeBrightness">
|
||||
<arg type="b" direction="in"></arg>
|
||||
</method>
|
||||
<method name="DeleteCustomMode">
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<method name="GetRealDisplayMode">
|
||||
<arg type="y" direction="out"></arg>
|
||||
</method>
|
||||
<method name="ListOutputNames">
|
||||
<arg type="as" direction="out"></arg>
|
||||
</method>
|
||||
<method name="ListOutputsCommonModes">
|
||||
<arg type="a(uqqd)" direction="out"></arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ResolutionList"/>
|
||||
</method>
|
||||
<method name="ModifyConfigName">
|
||||
<arg type="s" direction="in"></arg>
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<method name="RefreshBrightness"></method>
|
||||
<method name="Reset"></method>
|
||||
<method name="ResetChanges"></method>
|
||||
<method name="Save"></method>
|
||||
<method name="SetAndSaveBrightness">
|
||||
<arg type="s" direction="in"></arg>
|
||||
<arg type="d" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetBrightness">
|
||||
<arg type="s" direction="in"></arg>
|
||||
<arg type="d" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetPrimary">
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SwitchMode">
|
||||
<arg type="y" direction="in"></arg>
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetMethodAdjustCCT">
|
||||
<arg type="i" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetColorTemperature">
|
||||
<arg type="i" direction="in"></arg>
|
||||
</method>
|
||||
<property name="HasChanged" type="b" access="read"></property>
|
||||
<property name="DisplayMode" type="y" access="read"></property>
|
||||
<property name="ScreenWidth" type="q" access="read"></property>
|
||||
<property name="ScreenHeight" type="q" access="read"></property>
|
||||
<property name="Primary" type="s" access="read"></property>
|
||||
<property name="CurrentCustomId" type="s" access="read"></property>
|
||||
<property name="CustomIdList" type="as" access="read"></property>
|
||||
<property name="MaxBacklightBrightness" type="u" access="read"></property>
|
||||
<property name="PrimaryRect" type="(nnqq)" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="ScreenRect"/>
|
||||
</property>
|
||||
<property name="Monitors" type="ao" access="read"></property>
|
||||
<property name="Brightness" type="a{sd}" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="BrightnessMap"/>
|
||||
</property>
|
||||
<property name="Touchscreens" type="a(isss)" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="TouchscreenInfoList"/>
|
||||
</property>
|
||||
<property name="TouchscreensV2" type="a(issss)" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="TouchscreenInfoList_V2"/>
|
||||
</property>
|
||||
<property name="TouchMap" type="a{ss}" access="read">
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName" value="TouchscreenMap"/>
|
||||
</property>
|
||||
<property name="ColorTemperatureMode" type="i" access="read"></property>
|
||||
<property name="ColorTemperatureManual" type="i" access="read"></property>
|
||||
</interface>
|
||||
|
27
frame/dbusinterface/xml/org.deepin.dde.Gesture1.xml
Normal file
27
frame/dbusinterface/xml/org.deepin.dde.Gesture1.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<interface name="org.deepin.dde.Gesture1">
|
||||
<signal name="TouchSinglePressTimeout">
|
||||
<arg name="time" type="i"></arg>
|
||||
<arg name="scalex" type="d"></arg>
|
||||
<arg name="scaley" type="d"></arg>
|
||||
</signal>
|
||||
<signal name="TouchUpOrCancel">
|
||||
<arg name="scalex" type="d"></arg>
|
||||
<arg name="scaley" type="d"></arg>
|
||||
</signal>
|
||||
<signal name="TouchMoving">
|
||||
<arg name="scalex" type="d"></arg>
|
||||
<arg name="scaley" type="d"></arg>
|
||||
</signal>
|
||||
<signal name="TouchPressTimeout">
|
||||
<arg name="fingers" type="i"></arg>
|
||||
<arg name="time" type="i"></arg>
|
||||
<arg name="scalex" type="d"></arg>
|
||||
<arg name="scaley" type="d"></arg>
|
||||
</signal>
|
||||
<signal name="TouchEdgeEvent">
|
||||
<arg name="direction" type="s"></arg>
|
||||
<arg name="scalex" type="d"></arg>
|
||||
<arg name="scaley" type="d"></arg>
|
||||
</signal>
|
||||
</interface>
|
||||
|
21
frame/dbusinterface/xml/org.deepin.dde.Launcher1.xml
Normal file
21
frame/dbusinterface/xml/org.deepin.dde.Launcher1.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<interface name="org.deepin.dde.Launcher1">
|
||||
<property name="Visible" type="b" access="read"/>
|
||||
<signal name="Closed"></signal>
|
||||
<signal name="Shown"></signal>
|
||||
<signal name="VisibleChanged">
|
||||
<arg name="visible" type="b" direction="out"/>
|
||||
</signal>
|
||||
<method name="Exit"></method>
|
||||
<method name="Hide"></method>
|
||||
<method name="Show"></method>
|
||||
<method name="ShowByMode">
|
||||
<arg name="in0" type="x" direction="in"/>
|
||||
</method>
|
||||
<method name="UninstallApp">
|
||||
<arg name="appKey" type="s" direction="in"/>
|
||||
</method>
|
||||
<method name="Toggle"></method>
|
||||
<method name="IsVisible">
|
||||
<arg type="b" direction="out"/>
|
||||
</method>
|
||||
</interface>
|
62
frame/dbusinterface/xml/org.deepin.dde.Timedate1.xml
Normal file
62
frame/dbusinterface/xml/org.deepin.dde.Timedate1.xml
Normal file
@ -0,0 +1,62 @@
|
||||
<interface name="org.deepin.dde.Timedate1">
|
||||
<signal name="TimeUpdate">
|
||||
</signal>
|
||||
<method name="AddUserTimezone">
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<method name="DeleteUserTimezone">
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<method name="GetZoneInfo">
|
||||
<arg type="s" direction="in"></arg>
|
||||
<arg type="(ssi(xxi))" direction="out"></arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value ="ZoneInfo"/>
|
||||
</method>
|
||||
<method name="GetZoneList">
|
||||
<arg type="as" direction="out"></arg>
|
||||
</method>
|
||||
<method name="GetSampleNTPServers">
|
||||
<arg type="as" direction="out"></arg>
|
||||
</method>
|
||||
<method name="SetDate">
|
||||
<arg type="i" direction="in"></arg>
|
||||
<arg type="i" direction="in"></arg>
|
||||
<arg type="i" direction="in"></arg>
|
||||
<arg type="i" direction="in"></arg>
|
||||
<arg type="i" direction="in"></arg>
|
||||
<arg type="i" direction="in"></arg>
|
||||
<arg type="i" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetLocalRTC">
|
||||
<arg type="b" direction="in"></arg>
|
||||
<arg type="b" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetNTP">
|
||||
<arg type="b" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetNTPServer">
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetTime">
|
||||
<arg type="x" direction="in"></arg>
|
||||
<arg type="b" direction="in"></arg>
|
||||
</method>
|
||||
<method name="SetTimezone">
|
||||
<arg type="s" direction="in"></arg>
|
||||
</method>
|
||||
<property name="CanNTP" type="b" access="read"></property>
|
||||
<property name="NTP" type="b" access="read"></property>
|
||||
<property name="LocalRTC" type="b" access="read"></property>
|
||||
<property name="Timezone" type="s" access="read"></property>
|
||||
<property name="Use24HourFormat" type="b" access="readwrite"></property>
|
||||
<property name="DSTOffset" type="i" access="readwrite"></property>
|
||||
<property name="UserTimezones" type="as" access="read"></property>
|
||||
<property name="NTPServer" type="s" access="read"></property>
|
||||
<property name="WeekdayFormat" type="i" access="readwrite"></property>
|
||||
<property name="ShortDateFormat" type="i" access="readwrite"></property>
|
||||
<property name="LongDateFormat" type="i" access="readwrite"></property>
|
||||
<property name="ShortTimeFormat" type="i" access="readwrite"></property>
|
||||
<property name="LongTimeFormat" type="i" access="readwrite"></property>
|
||||
<property name="WeekBegins" type="i" access="readwrite"></property>
|
||||
</interface>
|
||||
|
12
frame/dbusinterface/xml/org.deepin.dde.WMSwitcher1.xml
Normal file
12
frame/dbusinterface/xml/org.deepin.dde.WMSwitcher1.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<interface name="org.deepin.dde.WMSwitcher1">
|
||||
<method name="AllowSwitch">
|
||||
<arg direction="out" type="b" name="outArg0"/>
|
||||
</method>
|
||||
<method name="CurrentWM">
|
||||
<arg direction="out" type="s" name="outArg0"/>
|
||||
</method>
|
||||
<method name="RequestSwitchWM"/>
|
||||
<signal name="WMChanged">
|
||||
<arg type="s" name="wmName"/>
|
||||
</signal>
|
||||
</interface>
|
63
frame/dbusinterface/xml/org.deepin.dde.XEventMonitor1.xml
Normal file
63
frame/dbusinterface/xml/org.deepin.dde.XEventMonitor1.xml
Normal file
@ -0,0 +1,63 @@
|
||||
<interface name="org.deepin.dde.XEventMonitor1">
|
||||
<method name="RegisterArea">
|
||||
<arg type="i" direction="in"/>
|
||||
<arg type="i" direction="in"/>
|
||||
<arg type="i" direction="in"/>
|
||||
<arg type="i" direction="in"/>
|
||||
<arg type="i" direction="in"/>
|
||||
<arg type="s" direction="out"/>
|
||||
</method>
|
||||
<method name="RegisterAreas">
|
||||
<arg type="a(iiii)" direction="in"/>
|
||||
<arg type="i" direction="in"/>
|
||||
<arg type="s" direction="out"/>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="AreaList"/>
|
||||
</method>
|
||||
<method name="RegisterFullScreen">
|
||||
<arg type="s" direction="out"/>
|
||||
</method>
|
||||
<method name="UnregisterArea">
|
||||
<arg type="s" direction="in"/>
|
||||
<arg type="b" direction="out"/>
|
||||
</method>
|
||||
<signal name="CursorInto">
|
||||
<arg type="i"/>
|
||||
<arg type="i"/>
|
||||
<arg type="s"/>
|
||||
</signal>
|
||||
<signal name="CursorOut">
|
||||
<arg type="i"/>
|
||||
<arg type="i"/>
|
||||
<arg type="s"/>
|
||||
</signal>
|
||||
<signal name="CursorMove">
|
||||
<arg type="i"/>
|
||||
<arg type="i"/>
|
||||
<arg type="s"/>
|
||||
</signal>
|
||||
<signal name="ButtonPress">
|
||||
<arg type="i"/>
|
||||
<arg type="i"/>
|
||||
<arg type="i"/>
|
||||
<arg type="s"/>
|
||||
</signal>
|
||||
<signal name="ButtonRelease">
|
||||
<arg type="i"/>
|
||||
<arg type="i"/>
|
||||
<arg type="i"/>
|
||||
<arg type="s"/>
|
||||
</signal>
|
||||
<signal name="KeyPress">
|
||||
<arg type="s"/>
|
||||
<arg type="i"/>
|
||||
<arg type="i"/>
|
||||
<arg type="s"/>
|
||||
</signal>
|
||||
<signal name="KeyRelease">
|
||||
<arg type="s"/>
|
||||
<arg type="i"/>
|
||||
<arg type="i"/>
|
||||
<arg type="s"/>
|
||||
</signal>
|
||||
<signal name="CancelAllArea"/>
|
||||
</interface>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user