Compare commits
638 Commits
wip/matthi
...
shader-cac
Author | SHA1 | Date | |
---|---|---|---|
|
e8d497b83a | ||
|
37767e056f | ||
|
c7e1ab67c6 | ||
|
4a2e73a07c | ||
|
f8e1924355 | ||
|
d50708b024 | ||
|
934354fb8c | ||
|
ea0290c50e | ||
|
4fc072925c | ||
|
69101a11b5 | ||
|
50b8ee3a5f | ||
|
ccde20ea08 | ||
|
7ee4bfd9d6 | ||
|
e6d104bfa0 | ||
|
2f9790b02e | ||
|
c2c1262766 | ||
|
0c9c6498c3 | ||
|
d0adffe6eb | ||
|
d64635a760 | ||
|
dfb06e1c7a | ||
|
139a627a85 | ||
|
7ccf6a7df7 | ||
|
5c9ae36c50 | ||
|
102f802b04 | ||
|
35305bfc85 | ||
|
48613eca27 | ||
|
69e1128cd3 | ||
|
6100a9d692 | ||
|
56782123d2 | ||
|
5cdb33d1c4 | ||
|
b7d7602750 | ||
|
b1b05bee53 | ||
|
85a7d0a201 | ||
|
6ff76a483c | ||
|
9665c4d651 | ||
|
8646f9da19 | ||
|
490abbb292 | ||
|
cc0a69e101 | ||
|
5c66f2ec19 | ||
|
331af6815b | ||
|
33b2bfa81f | ||
|
1b62d28cbb | ||
|
69441cbace | ||
|
b9445f4d7e | ||
|
06661da8b0 | ||
|
b26e584e29 | ||
|
81d19154a3 | ||
|
f494d6ae1f | ||
|
353ad30b12 | ||
|
e2ee2a6dab | ||
|
5e99646e1c | ||
|
cc9908353c | ||
|
9afbf02bc2 | ||
|
3f28a6851b | ||
|
8e3e321da4 | ||
|
aa1d1e4189 | ||
|
a269e9a266 | ||
|
5415d05359 | ||
|
60719bb67c | ||
|
7fdcc58532 | ||
|
9b83116fcb | ||
|
e6d24f4c15 | ||
|
ce743f28a1 | ||
|
b8b6324c4c | ||
|
8c43f22e3e | ||
|
438b4b6b5c | ||
|
b16ac01a03 | ||
|
448d2502d9 | ||
|
6bad307180 | ||
|
98a9f2b3c1 | ||
|
433517fdc9 | ||
|
7240178988 | ||
|
eb382c1321 | ||
|
cfeab26de0 | ||
|
f8ecd488cd | ||
|
b83cd9e818 | ||
|
ba65c1ae58 | ||
|
fe45cf9c09 | ||
|
1cfa88ed91 | ||
|
e84c6acc4f | ||
|
df600669a2 | ||
|
f680d5d130 | ||
|
9c0c1702d5 | ||
|
5ff9e34fbb | ||
|
0c3d757ba2 | ||
|
b8e6d06372 | ||
|
6b50788901 | ||
|
6bdb004dfd | ||
|
e239de064b | ||
|
0b8215e0b1 | ||
|
563cb69c6d | ||
|
b01ee88f11 | ||
|
ade14779b1 | ||
|
cb4ec6f384 | ||
|
4fff16860f | ||
|
1e3d9e1293 | ||
|
877b48579e | ||
|
39851fbdbf | ||
|
945379d623 | ||
|
3f2894fec1 | ||
|
8d05fcd35c | ||
|
7e102f8879 | ||
|
1d5d46ff29 | ||
|
2a4ffd4a59 | ||
|
8202f333ea | ||
|
0ce19eed08 | ||
|
ef693f317c | ||
|
f5ff44595a | ||
|
101cf7dcbd | ||
|
f260e76ede | ||
|
68379cab9b | ||
|
09e6b4dc01 | ||
|
9165dd33ed | ||
|
47d79a4257 | ||
|
5a32469303 | ||
|
5290d9d8c7 | ||
|
7862894f11 | ||
|
a1898d678b | ||
|
d6ba10bacf | ||
|
c4ecc3f4f7 | ||
|
63edf43e86 | ||
|
5c7ee3a483 | ||
|
4f87861c9a | ||
|
cb41d1586f | ||
|
f353bbd0bc | ||
|
1873304e7b | ||
|
77a5d00047 | ||
|
706a6cf0a3 | ||
|
b304655e2d | ||
|
28c27f37ee | ||
|
dcc6124209 | ||
|
feb7bf2fbe | ||
|
695d141f32 | ||
|
b83ba41f2d | ||
|
e798eedfb6 | ||
|
e6cd6f8db6 | ||
|
4ac450b324 | ||
|
f440c48dea | ||
|
19ca2789c0 | ||
|
63e060a21d | ||
|
3dce0dcca7 | ||
|
9a7e721181 | ||
|
890080ebf7 | ||
|
391727bd0d | ||
|
1d26879fa5 | ||
|
0124740fa0 | ||
|
3f367277fe | ||
|
4240119d64 | ||
|
a9fec38680 | ||
|
22780044ec | ||
|
4353ad224f | ||
|
85eef63b32 | ||
|
9e9db8607b | ||
|
8ef2b10f70 | ||
|
50ffa86d18 | ||
|
2210078a64 | ||
|
25ab5b9f0b | ||
|
f261bf2fc6 | ||
|
922b2cf99a | ||
|
c8b0c55284 | ||
|
93aa5ce167 | ||
|
781400f6d3 | ||
|
f7326ff828 | ||
|
9561b97dc4 | ||
|
bd986f9534 | ||
|
a15080c640 | ||
|
f431e28ce3 | ||
|
0ad27cc598 | ||
|
1a1373779f | ||
|
2aee39d12c | ||
|
158df3c1bb | ||
|
f1e1e9a71e | ||
|
04a3b8b6df | ||
|
09a21f1cd2 | ||
|
0f4ab5862a | ||
|
2362e4d41e | ||
|
182f39aba7 | ||
|
3d9cb477aa | ||
|
357175f0b1 | ||
|
b410b48eed | ||
|
5bd85058d9 | ||
|
7cf6da60da | ||
|
9700a98f48 | ||
|
800bcb5cb4 | ||
|
e4338c4d42 | ||
|
29cccf5e84 | ||
|
4db1a5f5c4 | ||
|
4642e86284 | ||
|
ea84e974e6 | ||
|
abc9b944f9 | ||
|
87fa7ff314 | ||
|
6dc29f2852 | ||
|
0f13a232c6 | ||
|
82a99a3643 | ||
|
d54ca3c74f | ||
|
ee8e42f19b | ||
|
41a5e744d8 | ||
|
a25dcd0f74 | ||
|
7351848c75 | ||
|
bb04808eea | ||
|
004d0f2fc1 | ||
|
fb763cd4ca | ||
|
a5e20c5ffc | ||
|
3ca298ec94 | ||
|
ad85a75c2e | ||
|
1a8e7d97ae | ||
|
1eb22e7927 | ||
|
fd28bddde1 | ||
|
ca4f08136a | ||
|
16689a1e81 | ||
|
24e708a770 | ||
|
64e128629f | ||
|
6cfb720ab7 | ||
|
3e6fea0550 | ||
|
146082d464 | ||
|
b64a403100 | ||
|
12409ee075 | ||
|
cbe40f5f46 | ||
|
2935ef8128 | ||
|
c6541853ab | ||
|
0a08c03885 | ||
|
af18796312 | ||
|
9e54c22c49 | ||
|
01f996447e | ||
|
a8608618a9 | ||
|
1f4839d4c8 | ||
|
3c7ee010f5 | ||
|
7844320f10 | ||
|
c9557c207f | ||
|
2016f56176 | ||
|
3427639b08 | ||
|
3e50092869 | ||
|
536714a147 | ||
|
bcf1aa7cb2 | ||
|
d1be2b29cf | ||
|
89ee42db54 | ||
|
ccb6b8585c | ||
|
2b35332fd6 | ||
|
7e39b12858 | ||
|
3faa7e04db | ||
|
4beeb6173b | ||
|
5970dac167 | ||
|
9fa1e68151 | ||
|
c59948169d | ||
|
a4e16ce3cc | ||
|
d4764cc89b | ||
|
8f43d7e188 | ||
|
a721d8b78f | ||
|
d774406573 | ||
|
3322599e99 | ||
|
7f0ef81e11 | ||
|
927f48d289 | ||
|
45072c3a64 | ||
|
a891a3ae26 | ||
|
4bb8352ab5 | ||
|
62aa487500 | ||
|
454814c6b4 | ||
|
0b4e0ce509 | ||
|
35f92b5695 | ||
|
55d35dd13e | ||
|
ba52be36c2 | ||
|
eaf899061a | ||
|
0a7880110e | ||
|
a475e6671c | ||
|
e35132054e | ||
|
ebfadae568 | ||
|
65e3dda065 | ||
|
f82b3fdb90 | ||
|
d66bfb1a9a | ||
|
a4c2819f91 | ||
|
3a5630358f | ||
|
afffc696f4 | ||
|
a0729f9683 | ||
|
04fadc508b | ||
|
16bf07fe33 | ||
|
2f16c092a5 | ||
|
55664f95ab | ||
|
8b800fa775 | ||
|
d978d4af59 | ||
|
d417595a05 | ||
|
90c8619f42 | ||
|
955dca950c | ||
|
5f2283c0ab | ||
|
f06f0a0dee | ||
|
a48eaa1954 | ||
|
417e8d6ca4 | ||
|
d4c9a35193 | ||
|
81a7f8e00c | ||
|
f91ea2ce37 | ||
|
5838ac3d1d | ||
|
27abc9fefe | ||
|
b939af0090 | ||
|
4e2790ea74 | ||
|
9a5947758c | ||
|
44469197d5 | ||
|
9d045db142 | ||
|
73ffb7f5e9 | ||
|
a0d2d1f44b | ||
|
fe1586ca3d | ||
|
b52da5682e | ||
|
3b45019ba2 | ||
|
9aedafa39e | ||
|
fc9dc97430 | ||
|
86cd5c04bd | ||
|
d11c78c46f | ||
|
3a377bb0a3 | ||
|
bde1328a07 | ||
|
7ec3b52d97 | ||
|
86f3e67775 | ||
|
13d943f763 | ||
|
e5813b3ae7 | ||
|
5fe14e06da | ||
|
2072953375 | ||
|
d0757f6436 | ||
|
6bb1f0dbf3 | ||
|
fe8225e573 | ||
|
e4578ca7bf | ||
|
362ef4449c | ||
|
be9001f0da | ||
|
3ee4d6fc0f | ||
|
a78e9f2261 | ||
|
da8e83f9cb | ||
|
9ded44b3de | ||
|
f5c3b2c691 | ||
|
0f533ed61d | ||
|
527d265bea | ||
|
d55da3fd44 | ||
|
7c18911c00 | ||
|
890cd45ce4 | ||
|
eed279ad91 | ||
|
694f1d8ecd | ||
|
e23f641e49 | ||
|
7eb3736760 | ||
|
00d37c80f8 | ||
|
e0771a54a2 | ||
|
01fda3b85e | ||
|
28cda7f516 | ||
|
faabb808be | ||
|
38fa5ab57b | ||
|
034017425c | ||
|
4dfe4a6476 | ||
|
6cc824af43 | ||
|
db6fed1496 | ||
|
325f6121ba | ||
|
074e7001dc | ||
|
8920639a2b | ||
|
160e6ad6f6 | ||
|
b49c6cdcb1 | ||
|
cc6d60afa4 | ||
|
5ec41fb47b | ||
|
122e7b16e6 | ||
|
a207ab6105 | ||
|
de537a0755 | ||
|
2f5d5ca9f8 | ||
|
49a7bf267b | ||
|
f5e290517a | ||
|
7dc4669d01 | ||
|
22457822eb | ||
|
564397f391 | ||
|
4519c6696c | ||
|
84b4f85f1a | ||
|
0bb1e1b1fd | ||
|
53410bab0f | ||
|
31a0739bf3 | ||
|
aa175ec2f5 | ||
|
8a062f4f9a | ||
|
2d50d9ebe6 | ||
|
ee8132a439 | ||
|
0234e8e2c9 | ||
|
f44642c7cb | ||
|
9beb5490f5 | ||
|
da431b2a43 | ||
|
cfbac153a3 | ||
|
ddcc9b9f2f | ||
|
8ebec46db5 | ||
|
71ae2fae2e | ||
|
1596c61003 | ||
|
891c37a4cb | ||
|
8c2c748c11 | ||
|
235ff253ff | ||
|
331c4b5954 | ||
|
7ba53de1e8 | ||
|
c2b4da128a | ||
|
ec2cdac298 | ||
|
ce2b6d9eb7 | ||
|
d8956aeff2 | ||
|
634717d0b9 | ||
|
88de098711 | ||
|
4ac3f916d0 | ||
|
67b959f1a7 | ||
|
48f68bb881 | ||
|
26e2af26ed | ||
|
78c130543c | ||
|
4b33cc5f89 | ||
|
6fa2c7e3b7 | ||
|
32873cc94b | ||
|
881046b46e | ||
|
94d6d56913 | ||
|
971f46e1f2 | ||
|
d2b5436462 | ||
|
cac3e7705d | ||
|
c02090b1f6 | ||
|
1355c9ae88 | ||
|
813ccb6378 | ||
|
3c33e541cd | ||
|
83c74ff7d0 | ||
|
7c59ac2e4a | ||
|
67258c69f0 | ||
|
9db76cebb4 | ||
|
354eab70da | ||
|
a9cd2d8181 | ||
|
c7294ab90e | ||
|
94493414b5 | ||
|
fef4f0704a | ||
|
dc1612b865 | ||
|
7d7045bc35 | ||
|
04cc589a61 | ||
|
ef556689f8 | ||
|
ca794f909a | ||
|
15cc20e7b5 | ||
|
29bcc38ae6 | ||
|
e6bf832514 | ||
|
79bd123911 | ||
|
ab322e33aa | ||
|
4e23daa998 | ||
|
eb66d6bcc6 | ||
|
f5afc17d26 | ||
|
8720b2d8c5 | ||
|
7835385264 | ||
|
21e3a8daeb | ||
|
a302fd34e8 | ||
|
45603f70a8 | ||
|
4cfaee99e7 | ||
|
0b9dca3d55 | ||
|
fd20e42932 | ||
|
94093fd18e | ||
|
01d7ec2c83 | ||
|
79426a0a50 | ||
|
4095cac75c | ||
|
af4474f752 | ||
|
1fea980930 | ||
|
4c952da6cb | ||
|
52f877d606 | ||
|
82d459f015 | ||
|
ece26b847b | ||
|
e9ecfeaca6 | ||
|
69fa3c4876 | ||
|
8a38f62915 | ||
|
c200758c26 | ||
|
1828c6b1cd | ||
|
96f8eec50b | ||
|
88d419456d | ||
|
a7e96675bd | ||
|
bfc81767ba | ||
|
65c3f532cf | ||
|
a7df2fe7f3 | ||
|
4a0854484f | ||
|
8ad81a35e1 | ||
|
9ea80a7506 | ||
|
b3be9868d8 | ||
|
8f273d5e02 | ||
|
96f6f218ef | ||
|
809603c16c | ||
|
19a13b316e | ||
|
de0039546b | ||
|
7272610a02 | ||
|
5b4082ac87 | ||
|
39d1537211 | ||
|
a732ebf521 | ||
|
fef3dfc43e | ||
|
909fdc99ad | ||
|
db4895fbe5 | ||
|
f42ebef9d1 | ||
|
4c2f904ac4 | ||
|
cfcd0f888d | ||
|
1253e7bfcb | ||
|
710c39027b | ||
|
95ddb57562 | ||
|
1b8a768279 | ||
|
f22403a317 | ||
|
f64c32113a | ||
|
ad776cc57b | ||
|
78c6f713dd | ||
|
689537d75b | ||
|
6757f42c66 | ||
|
ffa85a41d0 | ||
|
e61e6a864b | ||
|
c65819e289 | ||
|
dd4bb00a24 | ||
|
c481a773af | ||
|
cc951ac6c8 | ||
|
d8e476f4db | ||
|
1395f78679 | ||
|
46436158eb | ||
|
6cef9514ae | ||
|
21f599eea4 | ||
|
d564e397e2 | ||
|
656f67eeb7 | ||
|
c2531b7ff2 | ||
|
753138a7cc | ||
|
716f7cd3f7 | ||
|
dfc1f76be7 | ||
|
7f25cc9d4e | ||
|
327e7a4ccc | ||
|
7b32900c55 | ||
|
1440db1570 | ||
|
2e7fef7d18 | ||
|
d1a8ed0214 | ||
|
4b7017ef35 | ||
|
c5bece5cef | ||
|
490899e271 | ||
|
b9ea25c25c | ||
|
970d2e3f45 | ||
|
dd9249a87f | ||
|
aa32fc1708 | ||
|
160a4208ed | ||
|
395550c671 | ||
|
7d44735893 | ||
|
21e9fe4f55 | ||
|
3b568fbe77 | ||
|
7ee69fc7b2 | ||
|
365707e4eb | ||
|
91c6b56c99 | ||
|
da6b68d2b7 | ||
|
6aa66f59ce | ||
|
4040986545 | ||
|
bb7beb5ade | ||
|
032dabe137 | ||
|
c306e448b3 | ||
|
55c9576d83 | ||
|
99bcccd884 | ||
|
c300c530ea | ||
|
f771046a00 | ||
|
c289d7c176 | ||
|
5c3c95a96c | ||
|
d54321c1ca | ||
|
1362609120 | ||
|
89ac1d6197 | ||
|
1cfbe9c3d0 | ||
|
3a4c6c18b3 | ||
|
5e9f5c17b5 | ||
|
ff5928754f | ||
|
396056e011 | ||
|
619a19f6fd | ||
|
808921dd3e | ||
|
6a47dc26e4 | ||
|
df68ef8553 | ||
|
3bb95a09bb | ||
|
9c7874214e | ||
|
f08bc40fbb | ||
|
453a50dc95 | ||
|
ff41829b3f | ||
|
7437d34eb9 | ||
|
eb3049d6b5 | ||
|
601c5fd734 | ||
|
89f6b8751e | ||
|
65beb0fc22 | ||
|
d07b14f4d2 | ||
|
4f50c68296 | ||
|
fab9449414 | ||
|
0a51f38963 | ||
|
614c3e6721 | ||
|
c73e22dadb | ||
|
de6c0037b7 | ||
|
1a9a0c2577 | ||
|
5b63583c0b | ||
|
0fe3fafac1 | ||
|
d400c50ca3 | ||
|
4c150d8eb5 | ||
|
2616e6857c | ||
|
1772cfd4d8 | ||
|
d0ea070c23 | ||
|
db267433c0 | ||
|
452f2f0394 | ||
|
faeb572dd5 | ||
|
f964fe3ee5 | ||
|
00990ec307 | ||
|
a5363b9e5d | ||
|
3b0e6720af | ||
|
bfcb978079 | ||
|
66a3b07183 | ||
|
fd25a8cdf2 | ||
|
4abdc43688 | ||
|
4d16c5abc0 | ||
|
697b05c90c | ||
|
3c45a56934 | ||
|
ee6fc6492f | ||
|
8891967f2b | ||
|
4ad658f91e | ||
|
b726f60f90 | ||
|
fd148d1ef5 | ||
|
baa3df51ad | ||
|
cd6408b47a | ||
|
d70bfea8e9 | ||
|
5aaf752013 | ||
|
76258c8e3a | ||
|
c739db0e29 | ||
|
676e2e088e | ||
|
83a687f891 | ||
|
cf030e9ffc | ||
|
2cbe094b91 | ||
|
4fa4b8525e | ||
|
3d65019e98 | ||
|
98e30f82b9 | ||
|
8f7a8ada18 | ||
|
f52100c46e | ||
|
2432e53652 | ||
|
888dfe499d | ||
|
c655759cef | ||
|
334acbfc39 | ||
|
dfc131c7ec | ||
|
55874470ff | ||
|
bb8baa2b76 | ||
|
38b25599d8 | ||
|
df0b4d6684 | ||
|
fcaa9aa22d | ||
|
1ed17df7a0 | ||
|
0ec744a3a5 | ||
|
b8828023e6 | ||
|
3a2aa2bd80 | ||
|
a379ddefc3 | ||
|
fe142b10bf | ||
|
e090c1f1a9 | ||
|
a313417879 | ||
|
8916ff8ffe | ||
|
02892c59d1 | ||
|
bdd2f68ab5 | ||
|
3e0fab6b93 | ||
|
e8986d18c2 | ||
|
972c0fa998 | ||
|
c8a936cdcc | ||
|
6fd6ff2ea1 | ||
|
cb5c739f93 | ||
|
228b35c111 | ||
|
6e70079e63 | ||
|
c1882fe44e | ||
|
684624005a | ||
|
1fb5d389db |
43
.gitlab-ci.yml
Normal file
43
.gitlab-ci.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
stages:
|
||||
- build
|
||||
- flatpak
|
||||
|
||||
gtk:
|
||||
image: ebassi/gitlab-gtk:latest
|
||||
stage: build
|
||||
before_script:
|
||||
- export CCACHE_DISABLE=true_
|
||||
script:
|
||||
- bash -x ./.gitlab-ci/test-docker.sh
|
||||
cache:
|
||||
paths:
|
||||
- subprojects/gdk-pixbuf/
|
||||
- subprojects/glib/
|
||||
- subprojects/graphene/
|
||||
- subprojects/libepoxy/
|
||||
- subprojects/pango/
|
||||
artifacts:
|
||||
when: on_failure
|
||||
name: "gtk-${CI_COMMIT_REF_NAME}"
|
||||
paths:
|
||||
- "${CI_PROJECT_DIR}/_build/meson-logs"
|
||||
|
||||
flatpak:demo:
|
||||
image: registry.gitlab.com/alatiera/gnome-nightly-oci/gnome-master:latest
|
||||
stage: flatpak
|
||||
script:
|
||||
- bash -x ./.gitlab-ci/flatpak-build.sh org.gtk.Demo
|
||||
artifacts:
|
||||
paths:
|
||||
- org.gtk.Demo-dev.flatpak
|
||||
expire_in: 1 day
|
||||
|
||||
flatpak:widget-factory:
|
||||
image: registry.gitlab.com/alatiera/gnome-nightly-oci/gnome-master:latest
|
||||
stage: flatpak
|
||||
script:
|
||||
- bash -x ./.gitlab-ci/flatpak-build.sh org.gtk.WidgetFactory
|
||||
artifacts:
|
||||
paths:
|
||||
- org.gtk.WidgetFactory-dev.flatpak
|
||||
expire_in: 1 day
|
79
.gitlab-ci/Dockerfile
Normal file
79
.gitlab-ci/Dockerfile
Normal file
@@ -0,0 +1,79 @@
|
||||
FROM fedora:27
|
||||
|
||||
RUN dnf -y install \
|
||||
adwaita-icon-theme \
|
||||
atk-devel \
|
||||
at-spi2-atk-devel \
|
||||
avahi-gobject-devel \
|
||||
cairo-devel \
|
||||
cairo-gobject-devel \
|
||||
ccache \
|
||||
colord-devel \
|
||||
cups-devel \
|
||||
desktop-file-utils \
|
||||
elfutils-libelf-devel \
|
||||
fribidi-devel \
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
gdk-pixbuf2-devel \
|
||||
gdk-pixbuf2-modules \
|
||||
gettext \
|
||||
git \
|
||||
glib2-devel \
|
||||
glibc-devel \
|
||||
glibc-headers \
|
||||
gobject-introspection-devel \
|
||||
graphene-devel \
|
||||
gstreamer1-devel \
|
||||
gstreamer1-plugins-good \
|
||||
gstreamer1-plugins-bad-free-devel \
|
||||
gstreamer1-plugins-base-devel \
|
||||
iso-codes \
|
||||
itstool \
|
||||
json-glib-devel \
|
||||
libattr-devel \
|
||||
libepoxy-devel \
|
||||
libffi-devel \
|
||||
libmount-devel \
|
||||
librsvg2 \
|
||||
libselinux-devel \
|
||||
libXcomposite-devel \
|
||||
libXcursor-devel \
|
||||
libXcursor-devel \
|
||||
libXdamage-devel \
|
||||
libXfixes-devel \
|
||||
libXi-devel \
|
||||
libXinerama-devel \
|
||||
libxkbcommon-devel \
|
||||
libXrandr-devel \
|
||||
libXrender-devel \
|
||||
libxslt \
|
||||
mesa-dri-drivers \
|
||||
mesa-libEGL-devel \
|
||||
mesa-libwayland-egl-devel \
|
||||
ninja-build \
|
||||
pango-devel \
|
||||
pcre-devel \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-wheel \
|
||||
redhat-rpm-config \
|
||||
sassc \
|
||||
systemtap-sdt-devel \
|
||||
vulkan-devel \
|
||||
wayland-devel \
|
||||
wayland-protocols-devel \
|
||||
which \
|
||||
xorg-x11-server-Xvfb \
|
||||
&& dnf clean all
|
||||
|
||||
RUN pip3 install meson
|
||||
|
||||
ARG HOST_USER_ID=5555
|
||||
ENV HOST_USER_ID ${HOST_USER_ID}
|
||||
RUN useradd -u $HOST_USER_ID -ms /bin/bash user
|
||||
|
||||
USER user
|
||||
WORKDIR /home/user
|
||||
|
||||
ENV LANG C.UTF-8
|
44
.gitlab-ci/flatpak-build.sh
Normal file
44
.gitlab-ci/flatpak-build.sh
Normal file
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
appid=$1
|
||||
|
||||
builddir=app
|
||||
repodir=repo
|
||||
|
||||
flatpak-builder \
|
||||
--stop-at=gtk \
|
||||
${builddir} \
|
||||
build-aux/flatpak/${appid}.json
|
||||
|
||||
flatpak-builder \
|
||||
--run ${builddir} build-aux/flatpak/${appid}.json \
|
||||
meson \
|
||||
--prefix /app \
|
||||
--libdir /app/lib \
|
||||
--buildtype debug \
|
||||
-Dx11-backend=true \
|
||||
-Dwayland-backend=true \
|
||||
-Dprint-backends=file \
|
||||
-Dbuild-tests=false \
|
||||
-Dbuild-examples=false \
|
||||
-Dintrospection=false \
|
||||
-Ddemos=true \
|
||||
_build .
|
||||
|
||||
flatpak-builder \
|
||||
--run ${builddir} build-aux/flatpak/${appid}.json \
|
||||
ninja -C _build install
|
||||
|
||||
flatpak-builder \
|
||||
--finish-only \
|
||||
--repo=${repodir} \
|
||||
${builddir} \
|
||||
build-aux/flatpak/${appid}.json
|
||||
|
||||
flatpak build-bundle \
|
||||
${repodir} \
|
||||
${appid}-dev.flatpak \
|
||||
--runtime-repo=https://flathub.org/repo/flathub.flatpakrepo \
|
||||
${appid}
|
11
.gitlab-ci/run-docker.sh
Executable file
11
.gitlab-ci/run-docker.sh
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
TAG="ebassi/gitlab-gtk:latest"
|
||||
|
||||
sudo docker build --build-arg HOST_USER_ID="$UID" --tag "${TAG}" \
|
||||
--file "Dockerfile" .
|
||||
sudo docker run --rm --security-opt label=disable \
|
||||
--volume "$(pwd)/..:/home/user/app" --workdir "/home/user/app" \
|
||||
--tty --interactive "${TAG}" bash
|
23
.gitlab-ci/test-docker.sh
Executable file
23
.gitlab-ci/test-docker.sh
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
srcdir=$(pwd)
|
||||
|
||||
meson \
|
||||
-Dx11-backend=true \
|
||||
-Dwayland-backend=true \
|
||||
-Dbroadway-backend=true \
|
||||
-Dvulkan=yes \
|
||||
_build $srcdir
|
||||
|
||||
cd _build
|
||||
|
||||
ninja
|
||||
|
||||
xvfb-run -a -s "-screen 0 1024x768x24" \
|
||||
meson test \
|
||||
--print-errorlogs \
|
||||
--suite=gtk+ \
|
||||
--no-suite=gtk+:gsk \
|
||||
--no-suite=gtk+:a11y
|
39
.gitlab/issue_templates/Bug.md
Normal file
39
.gitlab/issue_templates/Bug.md
Normal file
@@ -0,0 +1,39 @@
|
||||
## Steps to reproduce
|
||||
|
||||
1. ...
|
||||
2. ...
|
||||
3. ...
|
||||
|
||||
<!--
|
||||
You should try and reproduce with the demos applications available
|
||||
under the `demos` directory, or the test programs in the `tests` directory.
|
||||
Alternatively, please attach a *small and self-contained* example that
|
||||
exhibits the issue.
|
||||
-->
|
||||
|
||||
## Current behavior
|
||||
<!--
|
||||
Please describe the current behaviour
|
||||
-->
|
||||
|
||||
## Expected outcome
|
||||
<!--
|
||||
Please describe the expected outcome
|
||||
-->
|
||||
|
||||
## Version information
|
||||
<!--
|
||||
- which version of GTK+ you are using
|
||||
- what operating system and version
|
||||
- for Linux, which distribution
|
||||
- if you built GTK+ yourself, the list of options used to configure the build
|
||||
-->
|
||||
|
||||
## Additional information
|
||||
<!--
|
||||
- If the bug was a crash, the exact text that was printed out
|
||||
when the crash occurred.
|
||||
- If the bug was a crash, attaching a stack trace obtained using
|
||||
GDB is appreciated; follow the instructions on the wiki:
|
||||
https://wiki.gnome.org/Community/GettingInTouch/Bugzilla/GettingTraces
|
||||
-->
|
@@ -1,30 +1,41 @@
|
||||
If you want to hack on the GTK+ project, you'll need to have the development
|
||||
tools appropriate for your operating system, including:
|
||||
|
||||
- Python (2.7 or 3.x)
|
||||
- Meson
|
||||
- Ninja
|
||||
- Gettext (19.7 or newer)
|
||||
- a C99 compatible compiler
|
||||
- Python 3.x
|
||||
- Meson
|
||||
- Ninja
|
||||
- Gettext (19.7 or newer)
|
||||
- a C99 compatible compiler
|
||||
|
||||
Up-to-date instructions about developing GNOME applications and libraries
|
||||
can be found here:
|
||||
|
||||
https://developer.gnome.org
|
||||
* https://developer.gnome.org
|
||||
|
||||
Information about using git with GNOME can be found here:
|
||||
Information about using GitLab with GNOME can be found here:
|
||||
|
||||
https://wiki.gnome.org/Git
|
||||
* https://wiki.gnome.org/GitLab
|
||||
|
||||
In order to get Git GTK+ installed on your system, you need to have the
|
||||
required versions of all the GTK+ dependencies; typically, this means a
|
||||
recent version of GLib, Cairo, Pango, and ATK.
|
||||
recent version of GLib, Cairo, Pango, and ATK, as well as the platform
|
||||
specific dependencies for the windowing system you are using (Wayland, X11,
|
||||
Windows, or macOS).
|
||||
|
||||
**Note**: if you plan to push changes to back to the master repository and
|
||||
have a GNOME account, you want to use the following instead:
|
||||
You should start by forking the GTK repository from the GitLab web UI, and
|
||||
cloning from your fork:
|
||||
|
||||
```ssh
|
||||
$ git clone https://gitlab.gnome.org/yourusername/gtk.git
|
||||
$ cd gtk
|
||||
```
|
||||
|
||||
**Note**: if you plan to push changes to back to the main repository and
|
||||
have a GNOME account, you can skip the fork, and use the following instead:
|
||||
|
||||
```sh
|
||||
$ git clone ssh://<username>@git.gnome.org/git/gtk+
|
||||
$ git clone git@gitlab.gnome.org:GNOME/gtk.git
|
||||
$ cd gtk
|
||||
```
|
||||
|
||||
To compile the Git version of GTK+ on your system, you will need to
|
||||
@@ -32,9 +43,21 @@ configure your build using Meson:
|
||||
|
||||
```sh
|
||||
$ meson _builddir .
|
||||
$ cd _builddir
|
||||
$ ninja
|
||||
```
|
||||
|
||||
For information about submitting patches and pushing changes to Git, see the
|
||||
`README.md` and `README.commits` files. In particular, don't, under any
|
||||
circumstances, push anything to Git before reading and understanding
|
||||
`README.commmits`.
|
||||
**Note**: For information about submitting patches and pushing changes
|
||||
to Git, see the `README.md` and `README.commits` files. In particular,
|
||||
don't, under any circumstances, push anything to Git before reading and
|
||||
understanding `README.commmits`.
|
||||
|
||||
Typically, you should work on your own branch:
|
||||
|
||||
```sh
|
||||
$ git checkout -b your-branch
|
||||
```
|
||||
|
||||
Once you've finished working on the bug fix or feature, push the branch
|
||||
to the Git repository and open a new merge request, to let the GTK
|
||||
maintainers review your contribution.
|
||||
|
46
README.md
46
README.md
@@ -1,6 +1,8 @@
|
||||
GTK+ — The GTK toolkit
|
||||
======================
|
||||
|
||||
[](https://gitlab.gnome.org/GNOME/gtk/pipelines)
|
||||
|
||||
General information
|
||||
-------------------
|
||||
|
||||
@@ -34,8 +36,8 @@ Building and installing
|
||||
|
||||
In order to build GTK+ you will need:
|
||||
|
||||
- a C99 compatible compiler
|
||||
- Python 3
|
||||
- [a C99 compatible compiler](https://wiki.gnome.org/Projects/GLib/CompilerRequirements)
|
||||
- [Python 3](https://www.python.org/)
|
||||
- [Meson](http://mesonbuild.com)
|
||||
- [Ninja](https://ninja-build.org)
|
||||
|
||||
@@ -59,10 +61,10 @@ If you are building the X11 backend, you will also need:
|
||||
- xrender
|
||||
- xi
|
||||
- xext
|
||||
- xfixes (optional)
|
||||
- xcursor (optional)
|
||||
- xdamage (optional)
|
||||
- xcomposite (optional)
|
||||
- xfixes
|
||||
- xcursor
|
||||
- xdamage
|
||||
- xcomposite
|
||||
- [atk-bridge-2.0](https://download.gnome.org/sources/at-spi2-atk)
|
||||
|
||||
If you are building the Wayland backend, you will also need:
|
||||
@@ -105,8 +107,7 @@ Or [online](https://developer.gnome.org/gtk4/stable/gtk-building.html)
|
||||
How to report bugs
|
||||
------------------
|
||||
|
||||
Bugs should be reported to the GNOME [bug tracking system](https://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2b).
|
||||
You will need an account for yourself.
|
||||
Bugs should be reported on the [issues page](https://gitlab.gnome.org/GNOME/gtk/issues/new).
|
||||
|
||||
In the bug report please include:
|
||||
|
||||
@@ -121,11 +122,12 @@ In the bug report please include:
|
||||
|
||||
* How to reproduce the bug.
|
||||
|
||||
If you can reproduce it with one of the test programs that are built
|
||||
in the tests/ subdirectory, that will be most convenient. Otherwise,
|
||||
please include a short test program that exhibits the behavior.
|
||||
As a last resort, you can also provide a pointer to a larger piece
|
||||
of software that can be downloaded.
|
||||
If you can reproduce it with one of the demo applications that are
|
||||
built in the demos/ subdirectory, on one of the test programs that
|
||||
are built in the tests/ subdirectory, that will be most convenient.
|
||||
Otherwise, please include a short test program that exhibits the
|
||||
behavior. As a last resort, you can also provide a pointer to a
|
||||
larger piece of software that can be downloaded.
|
||||
|
||||
* If the bug was a crash, the exact text that was printed out
|
||||
when the crash occurred.
|
||||
@@ -133,24 +135,6 @@ In the bug report please include:
|
||||
* Further information such as stack traces may be useful, but
|
||||
is not necessary.
|
||||
|
||||
|
||||
Contributing
|
||||
------------
|
||||
|
||||
Patches should also be submitted to the bug tracking system. If the patch
|
||||
fixes an existing bug, add the patch as an attachment to that bug report;
|
||||
otherwise, enter a new bug report that describes the patch, and attach the
|
||||
patch to that bug report.
|
||||
|
||||
Patches should be in Git-formatted form. You should use `git format-patch`
|
||||
to generate them. We recommend using [git-bz](http://git.fishsoup.net/man/git-bz.html).
|
||||
|
||||
For more information on the recommended workflow, please read
|
||||
[this wiki page](https://wiki.gnome.org/Git/WorkingWithPatches).
|
||||
|
||||
Please, follow the `CODING_STYLE` document in order to conform to GTK+'s
|
||||
coding style when submitting a code contribution.
|
||||
|
||||
Release notes
|
||||
-------------
|
||||
|
||||
|
59
build-aux/flatpak/org.gtk.Demo.json
Normal file
59
build-aux/flatpak/org.gtk.Demo.json
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"app-id": "org.gtk.Demo",
|
||||
"runtime": "org.gnome.Platform",
|
||||
"runtime-version": "master",
|
||||
"sdk": "org.gnome.Sdk",
|
||||
"command": "gtk4-demo",
|
||||
"tags": ["devel", "development", "nightly"],
|
||||
"rename-desktop-file": "gtk4-demo.desktop",
|
||||
"rename-icon": "gtk4-demo",
|
||||
"desktop-file-name-prefix": "(Development) ",
|
||||
"finish-args": [
|
||||
"--device=dri",
|
||||
"--share=ipc",
|
||||
"--socket=x11",
|
||||
"--socket=wayland",
|
||||
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*",
|
||||
"--talk-name=ca.desrt.conf", "--env=DCONF_USER_CONFIG_DIR=.config/dconf"
|
||||
],
|
||||
"cleanup": [
|
||||
"/include",
|
||||
"/lib/pkgconfig", "/share/pkgconfig",
|
||||
"/share/aclocal",
|
||||
"/man", "/share/man", "/share/gtk-doc",
|
||||
"*.la", ".a",
|
||||
"/lib/girepository-1.0",
|
||||
"/share/gir-1.0",
|
||||
"/share/doc"
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"name": "graphene",
|
||||
"buildsystem": "meson",
|
||||
"builddir": true,
|
||||
"config-opts": [
|
||||
"--libdir=/app/lib"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/ebassi/graphene.git"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gtk",
|
||||
"buildsystem": "meson",
|
||||
"builddir": true,
|
||||
"config-opts": [
|
||||
"--libdir=/app/lib"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://gitlab.gnome.org/GNOME/gtk.git"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
59
build-aux/flatpak/org.gtk.WidgetFactory.json
Normal file
59
build-aux/flatpak/org.gtk.WidgetFactory.json
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"app-id": "org.gtk.WidgetFactory",
|
||||
"runtime": "org.gnome.Platform",
|
||||
"runtime-version": "master",
|
||||
"sdk": "org.gnome.Sdk",
|
||||
"command": "gtk4-widget-factory",
|
||||
"tags": ["devel", "development", "nightly"],
|
||||
"rename-desktop-file": "gtk4-widget-factory.desktop",
|
||||
"rename-icon": "gtk4-widget-factory",
|
||||
"desktop-file-name-prefix": "(Development) ",
|
||||
"finish-args": [
|
||||
"--device=dri",
|
||||
"--share=ipc",
|
||||
"--socket=x11",
|
||||
"--socket=wayland",
|
||||
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*",
|
||||
"--talk-name=ca.desrt.conf", "--env=DCONF_USER_CONFIG_DIR=.config/dconf"
|
||||
],
|
||||
"cleanup": [
|
||||
"/include",
|
||||
"/lib/pkgconfig", "/share/pkgconfig",
|
||||
"/share/aclocal",
|
||||
"/man", "/share/man", "/share/gtk-doc",
|
||||
"*.la", ".a",
|
||||
"/lib/girepository-1.0",
|
||||
"/share/gir-1.0",
|
||||
"/share/doc"
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"name": "graphene",
|
||||
"buildsystem": "meson",
|
||||
"builddir": true,
|
||||
"config-opts": [
|
||||
"--libdir=/app/lib"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/ebassi/graphene.git"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gtk",
|
||||
"buildsystem": "meson",
|
||||
"builddir": true,
|
||||
"config-opts": [
|
||||
"--libdir=/app/lib"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://gitlab.gnome.org/GNOME/gtk.git"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@@ -16,6 +16,11 @@ if [ -z "$DESTDIR" ]; then
|
||||
echo Updating icon cache...
|
||||
gtk-update-icon-cache -q -t -f ${gtk_datadir}/icons/hicolor
|
||||
|
||||
echo Updating input method modules cache...
|
||||
gtk4-query-immodules > ${gtk_libdir}/gtk-${gtk_api_version}/${gtk_abi_version}/immodules.cache
|
||||
echo Updating module cache for print backends...
|
||||
mkdir -p ${gtk_libdir}/gtk-4.0/4.0.0/printbackends
|
||||
gio-querymodules ${gtk_libdir}/gtk-4.0/4.0.0/printbackends
|
||||
|
||||
echo Updating module cache for input methods...
|
||||
mkdir -p ${gtk_libdir}/gtk-4.0/4.0.0/immodules
|
||||
gio-querymodules ${gtk_libdir}/gtk-4.0/4.0.0/immodules
|
||||
fi
|
||||
|
@@ -41,6 +41,9 @@
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#mesondefine HAVE_DLFCN_H
|
||||
|
||||
/* Have the ffmpeg library */
|
||||
#mesondefine HAVE_FFMPEG
|
||||
|
||||
/* Define to 1 if you have the <ftw.h> header file. */
|
||||
#mesondefine HAVE_FTW_H
|
||||
|
||||
@@ -53,6 +56,9 @@
|
||||
/* Define if gio-unix is available */
|
||||
#mesondefine HAVE_GIO_UNIX
|
||||
|
||||
/* Define if GStreamer support is available */
|
||||
#mesondefine HAVE_GSTREAMER
|
||||
|
||||
/* Define to 1 if you have the `httpGetAuthString' function. */
|
||||
#mesondefine HAVE_HTTPGETAUTHSTRING
|
||||
|
||||
|
@@ -470,14 +470,14 @@ demo_application_window_size_allocate (GtkWidget *widget,
|
||||
}
|
||||
|
||||
static void
|
||||
window_state_changed (GtkWidget *widget)
|
||||
surface_state_changed (GtkWidget *widget)
|
||||
{
|
||||
DemoApplicationWindow *window = (DemoApplicationWindow *)widget;
|
||||
GdkWindowState new_state;
|
||||
GdkSurfaceState new_state;
|
||||
|
||||
new_state = gdk_window_get_state (gtk_widget_get_window (widget));
|
||||
window->maximized = (new_state & GDK_WINDOW_STATE_MAXIMIZED) != 0;
|
||||
window->fullscreen = (new_state & GDK_WINDOW_STATE_FULLSCREEN) != 0;
|
||||
new_state = gdk_surface_get_state (gtk_widget_get_surface (widget));
|
||||
window->maximized = (new_state & GDK_SURFACE_STATE_MAXIMIZED) != 0;
|
||||
window->fullscreen = (new_state & GDK_SURFACE_STATE_FULLSCREEN) != 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -485,15 +485,15 @@ demo_application_window_realize (GtkWidget *widget)
|
||||
{
|
||||
GTK_WIDGET_CLASS (demo_application_window_parent_class)->realize (widget);
|
||||
|
||||
g_signal_connect_swapped (gtk_widget_get_window (widget), "notify::state",
|
||||
G_CALLBACK (window_state_changed), widget);
|
||||
g_signal_connect_swapped (gtk_widget_get_surface (widget), "notify::state",
|
||||
G_CALLBACK (surface_state_changed), widget);
|
||||
}
|
||||
|
||||
static void
|
||||
demo_application_window_unrealize (GtkWidget *widget)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (gtk_widget_get_window (widget),
|
||||
window_state_changed, widget);
|
||||
g_signal_handlers_disconnect_by_func (gtk_widget_get_surface (widget),
|
||||
surface_state_changed, widget);
|
||||
|
||||
GTK_WIDGET_CLASS (demo_application_window_parent_class)->unrealize (widget);
|
||||
}
|
||||
|
@@ -68,19 +68,19 @@ enum
|
||||
static GtkWidget *
|
||||
find_toplevel_at_pointer (GdkDisplay *display)
|
||||
{
|
||||
GdkWindow *pointer_window;
|
||||
GdkSurface *pointer_window;
|
||||
GtkWidget *widget = NULL;
|
||||
|
||||
pointer_window = gdk_device_get_window_at_position (gtk_get_current_event_device (),
|
||||
pointer_window = gdk_device_get_surface_at_position (gtk_get_current_event_device (),
|
||||
NULL, NULL);
|
||||
|
||||
/* The user data field of a GdkWindow is used to store a pointer
|
||||
/* The user data field of a GdkSurface is used to store a pointer
|
||||
* to the widget that created it.
|
||||
*/
|
||||
if (pointer_window)
|
||||
{
|
||||
gpointer widget_ptr;
|
||||
gdk_window_get_user_data (pointer_window, &widget_ptr);
|
||||
gdk_surface_get_user_data (pointer_window, &widget_ptr);
|
||||
widget = widget_ptr;
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ query_for_toplevel (GdkDisplay *display,
|
||||
device = gtk_get_current_event_device ();
|
||||
|
||||
if (gdk_seat_grab (gdk_device_get_seat (device),
|
||||
gtk_widget_get_window (popup),
|
||||
gtk_widget_get_surface (popup),
|
||||
GDK_SEAT_CAPABILITY_ALL_POINTING,
|
||||
FALSE, cursor, NULL, NULL, NULL) == GDK_GRAB_SUCCESS)
|
||||
{
|
||||
|
@@ -93,8 +93,8 @@ paste_button_clicked (GtkWidget *button,
|
||||
gdk_clipboard_read_text_async (clipboard, NULL, paste_received, entry);
|
||||
}
|
||||
|
||||
static GdkTexture *
|
||||
get_image_texture (GtkImage *image)
|
||||
static GdkPaintable *
|
||||
get_image_paintable (GtkImage *image)
|
||||
{
|
||||
const gchar *icon_name;
|
||||
GtkIconTheme *icon_theme;
|
||||
@@ -102,15 +102,15 @@ get_image_texture (GtkImage *image)
|
||||
|
||||
switch (gtk_image_get_storage_type (image))
|
||||
{
|
||||
case GTK_IMAGE_TEXTURE:
|
||||
return g_object_ref (gtk_image_get_texture (image));
|
||||
case GTK_IMAGE_PAINTABLE:
|
||||
return g_object_ref (gtk_image_get_paintable (image));
|
||||
case GTK_IMAGE_ICON_NAME:
|
||||
icon_name = gtk_image_get_icon_name (image);
|
||||
icon_theme = gtk_icon_theme_get_for_display (gtk_widget_get_display (GTK_WIDGET (image)));
|
||||
icon_info = gtk_icon_theme_lookup_icon (icon_theme, icon_name, 48, GTK_ICON_LOOKUP_GENERIC_FALLBACK);
|
||||
if (icon_info == NULL)
|
||||
return NULL;
|
||||
return gtk_icon_info_load_texture (icon_info);
|
||||
return GDK_PAINTABLE (gtk_icon_info_load_texture (icon_info));
|
||||
default:
|
||||
g_warning ("Image storage type %d not handled",
|
||||
gtk_image_get_storage_type (image));
|
||||
@@ -123,11 +123,14 @@ drag_begin (GtkWidget *widget,
|
||||
GdkDragContext *context,
|
||||
gpointer data)
|
||||
{
|
||||
GdkTexture *texture;
|
||||
GdkPaintable *paintable;
|
||||
|
||||
texture = get_image_texture (GTK_IMAGE (widget));
|
||||
if (texture)
|
||||
gtk_drag_set_icon_texture (context, texture, -2, -2);
|
||||
paintable = get_image_paintable (GTK_IMAGE (widget));
|
||||
if (paintable)
|
||||
{
|
||||
gtk_drag_set_icon_paintable (context, paintable, -2, -2);
|
||||
g_object_unref (paintable);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -138,11 +141,11 @@ drag_data_get (GtkWidget *widget,
|
||||
guint time,
|
||||
gpointer data)
|
||||
{
|
||||
GdkTexture *texture;
|
||||
GdkPaintable *paintable;
|
||||
|
||||
texture = get_image_texture (GTK_IMAGE (widget));
|
||||
if (texture)
|
||||
gtk_selection_data_set_texture (selection_data, texture);
|
||||
paintable = get_image_paintable (GTK_IMAGE (widget));
|
||||
if (GDK_IS_TEXTURE (paintable))
|
||||
gtk_selection_data_set_texture (selection_data, GDK_TEXTURE (paintable));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -157,7 +160,7 @@ drag_data_received (GtkWidget *widget,
|
||||
GdkTexture *texture;
|
||||
|
||||
texture = gtk_selection_data_get_texture (selection_data);
|
||||
gtk_image_set_from_texture (GTK_IMAGE (data), texture);
|
||||
gtk_image_set_from_paintable (GTK_IMAGE (data), GDK_PAINTABLE (texture));
|
||||
g_object_unref (texture);
|
||||
}
|
||||
}
|
||||
@@ -167,16 +170,16 @@ copy_image (GtkMenuItem *item,
|
||||
gpointer data)
|
||||
{
|
||||
GdkClipboard *clipboard;
|
||||
GdkTexture *texture;
|
||||
GdkPaintable *paintable;
|
||||
|
||||
clipboard = gtk_widget_get_clipboard (GTK_WIDGET (data));
|
||||
texture = get_image_texture (GTK_IMAGE (data));
|
||||
paintable = get_image_paintable (GTK_IMAGE (data));
|
||||
|
||||
if (texture)
|
||||
{
|
||||
gdk_clipboard_set_texture (clipboard, texture);
|
||||
g_object_unref (texture);
|
||||
}
|
||||
if (GDK_IS_TEXTURE (paintable))
|
||||
gdk_clipboard_set_texture (clipboard, GDK_TEXTURE (paintable));
|
||||
|
||||
if (paintable)
|
||||
g_object_unref (paintable);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -190,7 +193,7 @@ paste_image_received (GObject *source,
|
||||
if (texture == NULL)
|
||||
return;
|
||||
|
||||
gtk_image_set_from_texture (GTK_IMAGE (data), texture);
|
||||
gtk_image_set_from_paintable (GTK_IMAGE (data), GDK_PAINTABLE (texture));
|
||||
g_object_unref (texture);
|
||||
}
|
||||
|
||||
|
@@ -677,7 +677,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/default_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/default_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -734,7 +734,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/none_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/none_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -791,7 +791,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/gtk_logo_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/gtk_logo_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -861,7 +861,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/context_menu_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/context_menu_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -918,7 +918,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/help_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/help_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -975,7 +975,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/pointer_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/pointer_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1032,7 +1032,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/progress_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/progress_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1089,7 +1089,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/wait_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/wait_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1159,7 +1159,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/cell_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/cell_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1216,7 +1216,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/crosshair_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/crosshair_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1273,7 +1273,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/text_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/text_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1330,7 +1330,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/vertical_text_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/vertical_text_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1400,7 +1400,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/alias_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/alias_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1457,7 +1457,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/copy_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/copy_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1514,7 +1514,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/move_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/move_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1571,7 +1571,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/no_drop_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/no_drop_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1628,7 +1628,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/not_allowed_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/not_allowed_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1685,7 +1685,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/grab_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/grab_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1742,7 +1742,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/grabbing_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/grabbing_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1812,7 +1812,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/all_scroll_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/all_scroll_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1869,7 +1869,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/col_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/col_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1926,7 +1926,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/row_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/row_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -1983,7 +1983,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/n_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/n_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2040,7 +2040,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/e_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/e_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2097,7 +2097,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/s_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/s_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2154,7 +2154,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/w_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/w_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2211,7 +2211,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/ne_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/ne_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2268,7 +2268,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/nw_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/nw_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2325,7 +2325,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/sw_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/sw_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2382,7 +2382,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/se_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/se_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2439,7 +2439,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/ew_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/ew_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2496,7 +2496,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/ns_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/ns_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2553,7 +2553,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/nesw_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/nesw_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2610,7 +2610,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/nwse_resize_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/nwse_resize_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2680,7 +2680,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/zoom_in_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/zoom_in_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -2737,7 +2737,7 @@
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="texture">resource:///cursors/zoom_out_cursor.png</property>
|
||||
<property name="paintable">resource:///cursors/zoom_out_cursor.png</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
|
@@ -121,6 +121,7 @@
|
||||
<gresource prefix="/images">
|
||||
<file>alphatest.png</file>
|
||||
<file>floppybuddy.gif</file>
|
||||
<file>gtk-logo.webm</file>
|
||||
</gresource>
|
||||
<gresource prefix="/pixbufs">
|
||||
<file>apple-red.png</file>
|
||||
@@ -181,6 +182,9 @@
|
||||
<file>overlay.c</file>
|
||||
<file>overlay2.c</file>
|
||||
<file>pagesetup.c</file>
|
||||
<file>paintable.c</file>
|
||||
<file>paintable_animated.c</file>
|
||||
<file>paintable_mediastream.c</file>
|
||||
<file>panes.c</file>
|
||||
<file>pickers.c</file>
|
||||
<file>pixbufs.c</file>
|
||||
@@ -201,10 +205,10 @@
|
||||
<file>textview.c</file>
|
||||
<file>textscroll.c</file>
|
||||
<file>theming_style_classes.c</file>
|
||||
<file>toolpalette.c</file>
|
||||
<file>transparent.c</file>
|
||||
<file>tree_store.c</file>
|
||||
<file>textmask.c</file>
|
||||
<file>video_player.c</file>
|
||||
</gresource>
|
||||
<gresource prefix="/textview">
|
||||
<file>floppybuddy.gif</file>
|
||||
|
@@ -299,7 +299,7 @@ pressed_cb (GtkGesture *gesture,
|
||||
rect.height = 0;
|
||||
|
||||
gtk_menu_popup_at_rect (GTK_MENU (menu),
|
||||
gtk_widget_get_window (widget),
|
||||
gtk_widget_get_surface (widget),
|
||||
&rect,
|
||||
GDK_GRAVITY_NORTH_WEST,
|
||||
GDK_GRAVITY_NORTH_WEST,
|
||||
|
@@ -4,8 +4,8 @@
|
||||
* of various kinds.
|
||||
*
|
||||
* This demo has two drawing areas. The checkerboard area shows
|
||||
* how you can just draw something; all you have to do is write
|
||||
* a signal handler for expose_event, as shown here.
|
||||
* how you can just draw something; all you have to do is set a function
|
||||
* via gtk_drawing_area_set_draw_func(), as shown here.
|
||||
*
|
||||
* The "scribble" area is a bit more advanced, and shows how to handle
|
||||
* events such as button presses and mouse motion. Click the mouse
|
||||
@@ -137,7 +137,7 @@ checkerboard_draw (GtkDrawingArea *da,
|
||||
/* At the start of a draw handler, a clip region has been set on
|
||||
* the Cairo context, and the contents have been cleared to the
|
||||
* widget's background color. The docs for
|
||||
* gdk_window_begin_paint_region() give more details on how this
|
||||
* gdk_surface_begin_paint_region() give more details on how this
|
||||
* works.
|
||||
*/
|
||||
|
||||
|
@@ -45,6 +45,9 @@
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="treeview1"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -81,6 +84,9 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label1"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -129,6 +135,9 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label2"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
@@ -142,6 +151,9 @@
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="treeview2"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
@@ -155,6 +167,9 @@
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="treeview3"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -185,6 +200,9 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label3"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
|
@@ -33,8 +33,8 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="changes_prevent">
|
||||
<property name="active" bind-source="changes_allow" bind-property="active" bind-flags="bidirectional|invert-boolean"/>
|
||||
<property name="visible" bind-source="changes_prevent" bind-property="active" bind-flags="invert-boolean"/>
|
||||
<property name="active" bind-source="changes_allow" bind-property="active" bind-flags="bidirectional|invert-boolean">True</property>
|
||||
<property name="visible" bind-source="changes_prevent" bind-property="active" bind-flags="invert-boolean">False</property>
|
||||
<property name="icon-name">changes-prevent</property>
|
||||
<property name="relief">none</property>
|
||||
</object>
|
||||
|
@@ -208,7 +208,7 @@ plane_drag_gesture_end (GtkGestureDrag *gesture,
|
||||
static void
|
||||
gtk_font_plane_init (GtkFontPlane *plane)
|
||||
{
|
||||
gtk_widget_set_has_window (GTK_WIDGET (plane), FALSE);
|
||||
gtk_widget_set_has_surface (GTK_WIDGET (plane), FALSE);
|
||||
gtk_widget_set_can_focus (GTK_WIDGET (plane), TRUE);
|
||||
|
||||
plane->drag_gesture = gtk_gesture_drag_new (GTK_WIDGET (plane));
|
||||
|
BIN
demos/gtk-demo/gtk-logo.webm
Normal file
BIN
demos/gtk-demo/gtk-logo.webm
Normal file
Binary file not shown.
@@ -56,7 +56,7 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtkFishbowl, gtk_fishbowl, GTK_TYPE_CONTAINER)
|
||||
static void
|
||||
gtk_fishbowl_init (GtkFishbowl *fishbowl)
|
||||
{
|
||||
gtk_widget_set_has_window (GTK_WIDGET (fishbowl), FALSE);
|
||||
gtk_widget_set_has_surface (GTK_WIDGET (fishbowl), FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -261,9 +261,7 @@ start_progressive_loading (GtkWidget *image)
|
||||
* The timeout simply simulates a slow data source by inserting
|
||||
* pauses in the reading process.
|
||||
*/
|
||||
load_timeout = gdk_threads_add_timeout (150,
|
||||
progressive_timeout,
|
||||
image);
|
||||
load_timeout = g_timeout_add (150, progressive_timeout, image);
|
||||
g_source_set_name_by_id (load_timeout, "[gtk+] progressive_timeout");
|
||||
}
|
||||
|
||||
@@ -319,12 +317,15 @@ toggle_sensitivity_callback (GtkWidget *togglebutton,
|
||||
GtkWidget *
|
||||
do_images (GtkWidget *do_widget)
|
||||
{
|
||||
GtkWidget *video;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *base_vbox;
|
||||
GtkWidget *image;
|
||||
GtkWidget *label;
|
||||
GtkWidget *button;
|
||||
GIcon *gicon;
|
||||
GIcon *gicon;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
@@ -338,9 +339,15 @@ do_images (GtkWidget *do_widget)
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (cleanup_callback), NULL);
|
||||
|
||||
base_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||
g_object_set (base_vbox, "margin", 16, NULL);
|
||||
gtk_container_add (GTK_CONTAINER (window), base_vbox);
|
||||
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 16);
|
||||
gtk_container_add (GTK_CONTAINER (base_vbox), hbox);
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||
g_object_set (vbox, "margin", 16, NULL);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
gtk_container_add (GTK_CONTAINER (hbox), vbox);
|
||||
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label),
|
||||
@@ -397,6 +404,8 @@ do_images (GtkWidget *do_widget)
|
||||
|
||||
|
||||
/* Progressive */
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||
gtk_container_add (GTK_CONTAINER (hbox), vbox);
|
||||
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label),
|
||||
@@ -417,13 +426,32 @@ do_images (GtkWidget *do_widget)
|
||||
|
||||
start_progressive_loading (image);
|
||||
|
||||
/* Video */
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||
gtk_container_add (GTK_CONTAINER (hbox), vbox);
|
||||
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label),
|
||||
"<u>Displaying video</u>");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label);
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
|
||||
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame);
|
||||
|
||||
video = gtk_video_new_for_resource ("/images/gtk-logo.webm");
|
||||
gtk_media_stream_set_loop (gtk_video_get_media_stream (GTK_VIDEO (video)), TRUE);
|
||||
gtk_container_add (GTK_CONTAINER (frame), video);
|
||||
|
||||
/* Sensitivity control */
|
||||
button = gtk_toggle_button_new_with_mnemonic ("_Insensitive");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), button);
|
||||
gtk_box_pack_start (GTK_BOX (base_vbox), button);
|
||||
|
||||
g_signal_connect (button, "toggled",
|
||||
G_CALLBACK (toggle_sensitivity_callback),
|
||||
vbox);
|
||||
base_vbox);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
|
@@ -37,7 +37,7 @@ enum
|
||||
static Bug data[] =
|
||||
{
|
||||
{ FALSE, 60482, "Normal", "scrollable notebooks and hidden tabs" },
|
||||
{ FALSE, 60620, "Critical", "gdk_window_clear_area (gdkwindow-win32.c) is not thread-safe" },
|
||||
{ FALSE, 60620, "Critical", "gdk_surface_clear_area (gdksurface-win32.c) is not thread-safe" },
|
||||
{ FALSE, 50214, "Major", "Xft support does not clean up correctly" },
|
||||
{ TRUE, 52877, "Major", "GtkFileSelection needs a refresh method. " },
|
||||
{ FALSE, 56070, "Normal", "Can't click button after setting in sensitive" },
|
||||
|
@@ -98,6 +98,9 @@
|
||||
<property name="yalign">0</property>
|
||||
<property name="label" translatable="0">Message</property>
|
||||
<property name="wrap">1</property>
|
||||
<accessibility>
|
||||
<role type="static"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
|
@@ -250,7 +250,7 @@ static gchar *types[] =
|
||||
"GtkTreeSelection ",
|
||||
"GdkDisplay ",
|
||||
"GdkScreen ",
|
||||
"GdkWindow ",
|
||||
"GdkSurface ",
|
||||
"GdkEventButton ",
|
||||
"GdkCursor ",
|
||||
"GtkTreeIter ",
|
||||
@@ -555,7 +555,7 @@ add_data_tab (const gchar *demoname)
|
||||
resource_name = g_strconcat (resource_dir, "/", resources[i], NULL);
|
||||
|
||||
widget = gtk_image_new_from_resource (resource_name);
|
||||
if (gtk_image_get_surface (GTK_IMAGE (widget)) == NULL)
|
||||
if (gtk_image_get_paintable (GTK_IMAGE (widget)) == NULL)
|
||||
{
|
||||
GBytes *bytes;
|
||||
|
||||
|
@@ -45,6 +45,9 @@ demos = files([
|
||||
'modelbutton.c',
|
||||
'overlay.c',
|
||||
'overlay2.c',
|
||||
'paintable.c',
|
||||
'paintable_animated.c',
|
||||
'paintable_mediastream.c',
|
||||
'panes.c',
|
||||
'pickers.c',
|
||||
'pixbufs.c',
|
||||
@@ -66,9 +69,9 @@ demos = files([
|
||||
'textview.c',
|
||||
'textscroll.c',
|
||||
'theming_style_classes.c',
|
||||
'toolpalette.c',
|
||||
'transparent.c',
|
||||
'tree_store.c',
|
||||
'video_player.c',
|
||||
])
|
||||
|
||||
gtkdemo_deps = [ libgtk_dep, ]
|
||||
@@ -128,3 +131,6 @@ install_data('gtk4-demo.desktop', install_dir: gtk_applicationsdir)
|
||||
# GSettings
|
||||
install_data('org.gtk.Demo.gschema.xml', install_dir: gtk_schemasdir)
|
||||
gnome.compile_schemas()
|
||||
|
||||
# appdata
|
||||
install_data('org.gtk.Demo.appdata.xml', install_dir: gtk_appdatadir)
|
33
demos/gtk-demo/org.gtk.Demo.appdata.xml
Normal file
33
demos/gtk-demo/org.gtk.Demo.appdata.xml
Normal file
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop">
|
||||
<id>org.gtk.Demo.desktop</id>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>LGPL-2.0+</project_license>
|
||||
<name>GTK+ Demo</name>
|
||||
<summary>Program to demonstrate GTK+ functions</summary>
|
||||
<description>
|
||||
<p>
|
||||
GTK+ Demo is a collection of examples that demonstrate the major
|
||||
features of the GTK+ toolkit.
|
||||
</p>
|
||||
</description>
|
||||
<screenshots>
|
||||
<screenshot>
|
||||
<image>https://static.gnome.org/appdata/gtk4-demo/gtk-demo1.png</image>
|
||||
<caption>The main window</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://static.gnome.org/appdata/gtk4-demo/gtk-demo2.png</image>
|
||||
<caption>An example</caption>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<kudos>
|
||||
<kudo>AppMenu</kudo>
|
||||
<kudo>HiDpiIcon</kudo>
|
||||
<kudo>ModernToolkit</kudo>
|
||||
</kudos>
|
||||
<url type="homepage">https://www.gtk.org</url>
|
||||
<translation type="gettext">gtk-4.0</translation>
|
||||
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
||||
<developer_name>Matthias Clasen and others</developer_name>
|
||||
</component>
|
179
demos/gtk-demo/paintable.c
Normal file
179
demos/gtk-demo/paintable.c
Normal file
@@ -0,0 +1,179 @@
|
||||
/* Paintable/A simple paintable
|
||||
*
|
||||
* GdkPaintable is an interface used by GTK for drawings of any sort
|
||||
* that do not require layouting or positioning.
|
||||
*
|
||||
* This demo code gives a simple example on how a paintable can
|
||||
* be created.
|
||||
*
|
||||
* Paintables can be used in many places inside GTK widgets, but the
|
||||
* most common usage is inside GtkImage and that's what we're going
|
||||
* to do here.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "paintable.h"
|
||||
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
/* First, add the boilerplate for the object itself.
|
||||
* This part would normally go in the header.
|
||||
*/
|
||||
#define GTK_TYPE_NUCLEAR_ICON (gtk_nuclear_icon_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (GtkNuclearIcon, gtk_nuclear_icon, GTK, NUCLEAR_ICON, GObject)
|
||||
|
||||
/* Declare the struct. */
|
||||
struct _GtkNuclearIcon
|
||||
{
|
||||
GObject parent_instance;
|
||||
|
||||
/* We store this rotation value here.
|
||||
* We are not doing with it here, but it will come in
|
||||
* very useful in the followup demos.
|
||||
*/
|
||||
double rotation;
|
||||
};
|
||||
|
||||
struct _GtkNuclearIconClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
/* This is the function that draws the actual icon.
|
||||
* We make it a custom function and define it in the paintable.h header
|
||||
* so that it can be called from all the other demos, too.
|
||||
*/
|
||||
void
|
||||
gtk_nuclear_snapshot (GtkSnapshot *snapshot,
|
||||
double width,
|
||||
double height,
|
||||
double rotation)
|
||||
{
|
||||
#define RADIUS 0.3
|
||||
cairo_t *cr;
|
||||
double size;
|
||||
|
||||
gtk_snapshot_append_color (snapshot,
|
||||
&(GdkRGBA) { 0.9, 0.75, 0.15, 1.0 },
|
||||
&GRAPHENE_RECT_INIT (0, 0, width, height),
|
||||
"Yellow background");
|
||||
|
||||
size = MIN (width, height);
|
||||
cr = gtk_snapshot_append_cairo (snapshot,
|
||||
&GRAPHENE_RECT_INIT ((width - size) / 2.0,
|
||||
(height - size) / 2.0,
|
||||
size, size),
|
||||
"Radioactive Icon");
|
||||
cairo_translate (cr, width / 2.0, height / 2.0);
|
||||
cairo_scale (cr, size, size);
|
||||
cairo_rotate (cr, rotation);
|
||||
|
||||
cairo_arc (cr, 0, 0, 0.1, - G_PI, G_PI);
|
||||
cairo_fill (cr);
|
||||
|
||||
cairo_set_line_width (cr, RADIUS);
|
||||
cairo_set_dash (cr, (double[1]) { RADIUS * G_PI / 3 }, 1, 0.0);
|
||||
cairo_arc (cr, 0, 0, RADIUS, - G_PI, G_PI);
|
||||
cairo_stroke (cr);
|
||||
|
||||
cairo_destroy (cr);
|
||||
}
|
||||
|
||||
/* Here, we implement the functionality required by the GdkPaintable interface */
|
||||
static void
|
||||
gtk_nuclear_icon_snapshot (GdkPaintable *paintable,
|
||||
GdkSnapshot *snapshot,
|
||||
double width,
|
||||
double height)
|
||||
{
|
||||
GtkNuclearIcon *nuclear = GTK_NUCLEAR_ICON (paintable);
|
||||
|
||||
/* The snapshot function is the only function we need to implement.
|
||||
* It does the actual drawing of the paintable.
|
||||
*/
|
||||
|
||||
gtk_nuclear_snapshot (snapshot,
|
||||
width, height,
|
||||
nuclear->rotation);
|
||||
}
|
||||
|
||||
static GdkPaintableFlags
|
||||
gtk_nuclear_icon_get_flags (GdkPaintable *paintable)
|
||||
{
|
||||
/* The flags are very useful to let GTK know that this image
|
||||
* is never going to change.
|
||||
* This allows many optimizations and should therefore always
|
||||
* be set.
|
||||
*/
|
||||
return GDK_PAINTABLE_STATIC_CONTENTS | GDK_PAINTABLE_STATIC_SIZE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_nuclear_icon_paintable_init (GdkPaintableInterface *iface)
|
||||
{
|
||||
iface->snapshot = gtk_nuclear_icon_snapshot;
|
||||
iface->get_flags = gtk_nuclear_icon_get_flags;
|
||||
}
|
||||
|
||||
/* When defining the GType, we need to implement the GdkPaintable interface */
|
||||
G_DEFINE_TYPE_WITH_CODE (GtkNuclearIcon, gtk_nuclear_icon, G_TYPE_OBJECT,
|
||||
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
|
||||
gtk_nuclear_icon_paintable_init))
|
||||
|
||||
/* Here's the boilerplate for the GObject declaration.
|
||||
* We don't need to do anything special here, because we keep no
|
||||
* data of our own.
|
||||
*/
|
||||
static void
|
||||
gtk_nuclear_icon_class_init (GtkNuclearIconClass *klass)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_nuclear_icon_init (GtkNuclearIcon *nuclear)
|
||||
{
|
||||
}
|
||||
|
||||
/* And finally, we add a simple constructor.
|
||||
* It is declared in the header so that the other examples
|
||||
* can use it.
|
||||
*/
|
||||
GdkPaintable *
|
||||
gtk_nuclear_icon_new (double rotation)
|
||||
{
|
||||
GtkNuclearIcon *nuclear;
|
||||
|
||||
nuclear = g_object_new (GTK_TYPE_NUCLEAR_ICON, NULL);
|
||||
nuclear->rotation = rotation;
|
||||
|
||||
return GDK_PAINTABLE (nuclear);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_paintable (GtkWidget *do_widget)
|
||||
{
|
||||
GdkPaintable *nuclear;
|
||||
GtkWidget *image;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_display (GTK_WINDOW (window),
|
||||
gtk_widget_get_display (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Nuclear Icon");
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
|
||||
|
||||
nuclear = gtk_nuclear_icon_new (0.0);
|
||||
image = gtk_image_new_from_paintable (nuclear);
|
||||
gtk_container_add (GTK_CONTAINER (window), image);
|
||||
g_object_unref (nuclear);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show (window);
|
||||
else
|
||||
gtk_widget_destroy (window);
|
||||
|
||||
return window;
|
||||
}
|
15
demos/gtk-demo/paintable.h
Normal file
15
demos/gtk-demo/paintable.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef __PAINTABLE_H__
|
||||
#define __PAINTABLE_H__
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
void gtk_nuclear_snapshot (GtkSnapshot *snapshot,
|
||||
double width,
|
||||
double height,
|
||||
double rotation);
|
||||
|
||||
GdkPaintable * gtk_nuclear_icon_new (double rotation);
|
||||
GdkPaintable * gtk_nuclear_animation_new (void);
|
||||
GtkMediaStream *gtk_nuclear_media_stream_new (void);
|
||||
|
||||
#endif /* __PAINTABLE_H__ */
|
209
demos/gtk-demo/paintable_animated.c
Normal file
209
demos/gtk-demo/paintable_animated.c
Normal file
@@ -0,0 +1,209 @@
|
||||
/* Paintable/An animated paintable
|
||||
*
|
||||
* GdkPaintable also allows paintables to change.
|
||||
*
|
||||
* This demo code gives an example of how this could work. It builds
|
||||
* on the previous simple example.
|
||||
*
|
||||
* Paintables can also change their size, this works similarly, but
|
||||
* we will not demonstrate this here as our icon does not have any size.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "paintable.h"
|
||||
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
/* First, add the boilerplate for the object itself.
|
||||
* This part would normally go in the header.
|
||||
*/
|
||||
#define GTK_TYPE_NUCLEAR_ANIMATION (gtk_nuclear_animation_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (GtkNuclearAnimation, gtk_nuclear_animation, GTK, NUCLEAR_ANIMATION, GObject)
|
||||
|
||||
/* Do a full rotation in 5 seconds.
|
||||
* We will register the timeout for doing a single step to
|
||||
* be executed every 10ms, which means after 1000 steps
|
||||
* 10s will have elapsed.
|
||||
*/
|
||||
#define MAX_PROGRESS 500
|
||||
|
||||
/* Declare the struct. */
|
||||
struct _GtkNuclearAnimation
|
||||
{
|
||||
GObject parent_instance;
|
||||
|
||||
/* This variable stores the progress of our animation.
|
||||
* We just count upwards until we hit MAX_PROGRESS and
|
||||
* then start from scratch.
|
||||
*/
|
||||
int progress;
|
||||
|
||||
/* This variable holds the ID of the timer that updates
|
||||
* our progress variable.
|
||||
* We need to keep track of it so that we can remove it
|
||||
* again.
|
||||
*/
|
||||
guint source_id;
|
||||
};
|
||||
|
||||
struct _GtkNuclearAnimationClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
/* Again, we implement the functionality required by the GdkPaintable interface */
|
||||
static void
|
||||
gtk_nuclear_animation_snapshot (GdkPaintable *paintable,
|
||||
GdkSnapshot *snapshot,
|
||||
double width,
|
||||
double height)
|
||||
{
|
||||
GtkNuclearAnimation *nuclear = GTK_NUCLEAR_ANIMATION (paintable);
|
||||
|
||||
/* We call the function from the previous example here. */
|
||||
gtk_nuclear_snapshot (snapshot,
|
||||
width, height,
|
||||
2 * G_PI * nuclear->progress / MAX_PROGRESS);
|
||||
}
|
||||
|
||||
static GdkPaintable *
|
||||
gtk_nuclear_animation_get_current_image (GdkPaintable *paintable)
|
||||
{
|
||||
GtkNuclearAnimation *nuclear = GTK_NUCLEAR_ANIMATION (paintable);
|
||||
|
||||
/* For non-static paintables, this function needs to be implemented.
|
||||
* It must return a static paintable with the same contents
|
||||
* as this one currently has.
|
||||
*
|
||||
* Luckily we added the rotation property to the nuclear icon
|
||||
* object previously, so we can just return an instance of that one.
|
||||
*/
|
||||
return gtk_nuclear_icon_new (2 * G_PI * nuclear->progress / MAX_PROGRESS);
|
||||
}
|
||||
|
||||
static GdkPaintableFlags
|
||||
gtk_nuclear_animation_get_flags (GdkPaintable *paintable)
|
||||
{
|
||||
/* This time, we cannot set the static contents flag because our animation
|
||||
* changes the contents.
|
||||
* However, our size still doesn't change, so report that flag.
|
||||
*/
|
||||
return GDK_PAINTABLE_STATIC_SIZE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_nuclear_animation_paintable_init (GdkPaintableInterface *iface)
|
||||
{
|
||||
iface->snapshot = gtk_nuclear_animation_snapshot;
|
||||
iface->get_current_image = gtk_nuclear_animation_get_current_image;
|
||||
iface->get_flags = gtk_nuclear_animation_get_flags;
|
||||
}
|
||||
|
||||
/* When defining the GType, we need to implement the GdkPaintable interface */
|
||||
G_DEFINE_TYPE_WITH_CODE (GtkNuclearAnimation, gtk_nuclear_animation, G_TYPE_OBJECT,
|
||||
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
|
||||
gtk_nuclear_animation_paintable_init))
|
||||
|
||||
/* This time, we need to implement the finalize function,
|
||||
*/
|
||||
static void
|
||||
gtk_nuclear_animation_finalize (GObject *object)
|
||||
{
|
||||
GtkNuclearAnimation *nuclear = GTK_NUCLEAR_ANIMATION (object);
|
||||
|
||||
/* Remove the timeout we registered when constructing
|
||||
* the object.
|
||||
*/
|
||||
g_source_remove (nuclear->source_id);
|
||||
|
||||
/* Don't forget to chain up to the parent class' implementation
|
||||
* of the finalize function.
|
||||
*/
|
||||
G_OBJECT_CLASS (gtk_nuclear_animation_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
/* In the class declaration, we need to add our finalize function.
|
||||
*/
|
||||
static void
|
||||
gtk_nuclear_animation_class_init (GtkNuclearAnimationClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
gobject_class->finalize = gtk_nuclear_animation_finalize;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_nuclear_animation_step (gpointer data)
|
||||
{
|
||||
GtkNuclearAnimation *nuclear = data;
|
||||
|
||||
/* Add 1 to the progress and reset it when we've reached
|
||||
* the maximum value.
|
||||
* The animation will rotate by 360 degrees at MAX_PROGRESS
|
||||
* so it will be identical to the original unrotated one.
|
||||
*/
|
||||
nuclear->progress = (nuclear->progress + 1) % MAX_PROGRESS;
|
||||
|
||||
/* Now we need to tell all listeners that we've changed out contents
|
||||
* so that they can redraw this paintable.
|
||||
*/
|
||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (nuclear));
|
||||
|
||||
/* We want this timeout function to be called repeatedly,
|
||||
* so we return this value here.
|
||||
* If this was a single-shot timeout, we could also
|
||||
* return G_SOURCE_REMOVE here to get rid of it.
|
||||
*/
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_nuclear_animation_init (GtkNuclearAnimation *nuclear)
|
||||
{
|
||||
/* Add a timer here that constantly updates our animations.
|
||||
* We want to update it often enough to guarantee a smooth animation.
|
||||
*
|
||||
* Ideally, we'd attach to the frame clock, but because we do
|
||||
* not have it available here, we just use a regular timeout
|
||||
* that hopefully triggers often enough to be smooth.
|
||||
*/
|
||||
nuclear->source_id = g_timeout_add (10,
|
||||
gtk_nuclear_animation_step,
|
||||
nuclear);
|
||||
}
|
||||
|
||||
/* And finally, we add the simple constructor we declared in the header. */
|
||||
GdkPaintable *
|
||||
gtk_nuclear_animation_new (void)
|
||||
{
|
||||
return g_object_new (GTK_TYPE_NUCLEAR_ANIMATION, NULL);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_paintable_animated (GtkWidget *do_widget)
|
||||
{
|
||||
GdkPaintable *nuclear;
|
||||
GtkWidget *image;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_display (GTK_WINDOW (window),
|
||||
gtk_widget_get_display (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Nuclear Animation");
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
|
||||
|
||||
nuclear = gtk_nuclear_animation_new ();
|
||||
image = gtk_image_new_from_paintable (nuclear);
|
||||
gtk_container_add (GTK_CONTAINER (window), image);
|
||||
g_object_unref (nuclear);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show (window);
|
||||
else
|
||||
gtk_widget_destroy (window);
|
||||
|
||||
return window;
|
||||
}
|
312
demos/gtk-demo/paintable_mediastream.c
Normal file
312
demos/gtk-demo/paintable_mediastream.c
Normal file
@@ -0,0 +1,312 @@
|
||||
/* Paintable/A media stream
|
||||
*
|
||||
* GdkPaintable is also used by the GtkMediaStream class.
|
||||
*
|
||||
* This demo code turns the nuclear media_stream into the object
|
||||
* GTK uses for videos. This allows treating the icon like a
|
||||
* regular video, so we can for example attach controls to it.
|
||||
*
|
||||
* After all, what good is an media_stream if one cannot pause
|
||||
* it.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "paintable.h"
|
||||
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
/* First, add the boilerplate for the object itself.
|
||||
* This part would normally go in the header.
|
||||
*/
|
||||
#define GTK_TYPE_NUCLEAR_MEDIA_STREAM (gtk_nuclear_media_stream_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (GtkNuclearMediaStream, gtk_nuclear_media_stream, GTK, NUCLEAR_MEDIA_STREAM, GtkMediaStream)
|
||||
|
||||
/* Do a full rotation in 5 seconds.
|
||||
*
|
||||
* We do not save steps here but real timestamps.
|
||||
* GtkMediaStream uses microseconds, so we will do so, too.
|
||||
*/
|
||||
#define DURATION (5 * G_USEC_PER_SEC)
|
||||
|
||||
/* Declare the struct. */
|
||||
struct _GtkNuclearMediaStream
|
||||
{
|
||||
/* We now inherit from the media stream object. */
|
||||
GtkMediaStream parent_instance;
|
||||
|
||||
/* This variable stores the progress of our video.
|
||||
*/
|
||||
gint64 progress;
|
||||
|
||||
/* This variable stores the timestamp of the last
|
||||
* time we updated the progress variable when the
|
||||
* video is currently playing.
|
||||
* This is so that we can always accurately compute the
|
||||
* progress we've had, even if the timeout does not
|
||||
* exactly work.
|
||||
*/
|
||||
gint64 last_time;
|
||||
|
||||
/* This variable again holds the ID of the timer that
|
||||
* updates our progress variable. Nothing changes about
|
||||
* how this works compared to the previous example.
|
||||
*/
|
||||
guint source_id;
|
||||
};
|
||||
|
||||
struct _GtkNuclearMediaStreamClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
/* GtkMediaStream is a GdkPaintable. So when we want to display video,
|
||||
* we have to implement the interface, just like in the animation example.
|
||||
*/
|
||||
static void
|
||||
gtk_nuclear_media_stream_snapshot (GdkPaintable *paintable,
|
||||
GdkSnapshot *snapshot,
|
||||
double width,
|
||||
double height)
|
||||
{
|
||||
GtkNuclearMediaStream *nuclear = GTK_NUCLEAR_MEDIA_STREAM (paintable);
|
||||
|
||||
/* We call the function from the previous example here. */
|
||||
gtk_nuclear_snapshot (snapshot,
|
||||
width, height,
|
||||
2 * G_PI * nuclear->progress / DURATION);
|
||||
}
|
||||
|
||||
static GdkPaintable *
|
||||
gtk_nuclear_media_stream_get_current_image (GdkPaintable *paintable)
|
||||
{
|
||||
GtkNuclearMediaStream *nuclear = GTK_NUCLEAR_MEDIA_STREAM (paintable);
|
||||
|
||||
/* Same thing as with the animation */
|
||||
return gtk_nuclear_icon_new (2 * G_PI * nuclear->progress / DURATION);
|
||||
}
|
||||
|
||||
static GdkPaintableFlags
|
||||
gtk_nuclear_media_stream_get_flags (GdkPaintable *paintable)
|
||||
{
|
||||
/* And same thing as with the animation over here, too. */
|
||||
return GDK_PAINTABLE_STATIC_SIZE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_nuclear_media_stream_paintable_init (GdkPaintableInterface *iface)
|
||||
{
|
||||
iface->snapshot = gtk_nuclear_media_stream_snapshot;
|
||||
iface->get_current_image = gtk_nuclear_media_stream_get_current_image;
|
||||
iface->get_flags = gtk_nuclear_media_stream_get_flags;
|
||||
}
|
||||
|
||||
/* This time, we inherit from GTK_TYPE_MEDIA_STREAM */
|
||||
G_DEFINE_TYPE_WITH_CODE (GtkNuclearMediaStream, gtk_nuclear_media_stream, GTK_TYPE_MEDIA_STREAM,
|
||||
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
|
||||
gtk_nuclear_media_stream_paintable_init))
|
||||
|
||||
static gboolean
|
||||
gtk_nuclear_media_stream_step (gpointer data)
|
||||
{
|
||||
GtkNuclearMediaStream *nuclear = data;
|
||||
gint64 current_time;
|
||||
|
||||
/* Compute the time that has elapsed since the last time we were called
|
||||
* and add it to our current progress.
|
||||
*/
|
||||
current_time = g_source_get_time (g_main_current_source ());
|
||||
nuclear->progress += current_time - nuclear->last_time;
|
||||
|
||||
/* Check if we've ended */
|
||||
if (nuclear->progress > DURATION)
|
||||
{
|
||||
if (gtk_media_stream_get_loop (GTK_MEDIA_STREAM (nuclear)))
|
||||
{
|
||||
/* We're looping. So make the progress loop using modulo */
|
||||
nuclear->progress %= DURATION;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Just make sure we don't overflow */
|
||||
nuclear->progress = DURATION;
|
||||
}
|
||||
}
|
||||
|
||||
/* Update the last time to the current timestamp. */
|
||||
nuclear->last_time = current_time;
|
||||
|
||||
/* Update the timestamp of the media stream */
|
||||
gtk_media_stream_update (GTK_MEDIA_STREAM (nuclear), nuclear->progress);
|
||||
|
||||
/* We also need to invalidate our contents again.
|
||||
* After all, we are a video and not just an audio stream.
|
||||
*/
|
||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (nuclear));
|
||||
|
||||
/* Now check if we have finished playing and if so,
|
||||
* tell the media stream. The media stream will then
|
||||
* call our pause function to pause the stream.
|
||||
*/
|
||||
if (nuclear->progress >= DURATION)
|
||||
gtk_media_stream_ended (GTK_MEDIA_STREAM (nuclear));
|
||||
|
||||
/* The timeout function is removed by the pause function,
|
||||
* so we can just always return this value.
|
||||
*/
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_nuclear_media_stream_play (GtkMediaStream *stream)
|
||||
{
|
||||
GtkNuclearMediaStream *nuclear = GTK_NUCLEAR_MEDIA_STREAM (stream);
|
||||
|
||||
/* If we're already at the end of the stream, we don't want
|
||||
* to start playing and exit early.
|
||||
*/
|
||||
if (nuclear->progress >= DURATION)
|
||||
return FALSE;
|
||||
|
||||
/* This time, we add the source only when we start playing.
|
||||
*/
|
||||
nuclear->source_id = g_timeout_add (10,
|
||||
gtk_nuclear_media_stream_step,
|
||||
nuclear);
|
||||
|
||||
/* We also want to initialize our time, so that we can
|
||||
* do accurate updates.
|
||||
*/
|
||||
nuclear->last_time = g_get_monotonic_time ();
|
||||
|
||||
/* We successfully started playing, so we return TRUE here. */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_nuclear_media_stream_pause (GtkMediaStream *stream)
|
||||
{
|
||||
GtkNuclearMediaStream *nuclear = GTK_NUCLEAR_MEDIA_STREAM (stream);
|
||||
|
||||
/* This function will be called when a playing stream
|
||||
* gets paused.
|
||||
* So we remove the updating source here and set it
|
||||
* back to 0 so that the finalize function doesn't try
|
||||
* to remove it again.
|
||||
*/
|
||||
g_source_remove (nuclear->source_id);
|
||||
nuclear->source_id = 0;
|
||||
nuclear->last_time = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_nuclear_media_stream_seek (GtkMediaStream *stream,
|
||||
gint64 timestamp)
|
||||
{
|
||||
GtkNuclearMediaStream *nuclear = GTK_NUCLEAR_MEDIA_STREAM (stream);
|
||||
|
||||
/* This is optional functionality for media streams,
|
||||
* but not being able to seek is kinda boring.
|
||||
* And it's trivial to implement, so let's go for it.
|
||||
*/
|
||||
nuclear->progress = timestamp;
|
||||
|
||||
/* Media streams are asynchronous, so seeking can take a while.
|
||||
* We however don't need that functionality, so we can just
|
||||
* report success.
|
||||
*/
|
||||
gtk_media_stream_seek_success (stream);
|
||||
|
||||
/* We also have to update our timestamp and tell the
|
||||
* paintable interface abbout the seek
|
||||
*/
|
||||
gtk_media_stream_update (stream, nuclear->progress);
|
||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (nuclear));
|
||||
}
|
||||
|
||||
/* Again, we need to implement the finalize function.
|
||||
*/
|
||||
static void
|
||||
gtk_nuclear_media_stream_finalize (GObject *object)
|
||||
{
|
||||
GtkNuclearMediaStream *nuclear = GTK_NUCLEAR_MEDIA_STREAM (object);
|
||||
|
||||
/* This time, we need to check if the source exists before
|
||||
* removing it as it only exists while we are playing.
|
||||
*/
|
||||
if (nuclear->source_id > 0)
|
||||
g_source_remove (nuclear->source_id);
|
||||
|
||||
/* Don't forget to chain up to the parent class' implementation
|
||||
* of the finalize function.
|
||||
*/
|
||||
G_OBJECT_CLASS (gtk_nuclear_media_stream_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
/* In the class declaration, we need to implement the media stream */
|
||||
static void
|
||||
gtk_nuclear_media_stream_class_init (GtkNuclearMediaStreamClass *klass)
|
||||
{
|
||||
GtkMediaStreamClass *stream_class = GTK_MEDIA_STREAM_CLASS (klass);
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
stream_class->play = gtk_nuclear_media_stream_play;
|
||||
stream_class->pause = gtk_nuclear_media_stream_pause;
|
||||
stream_class->seek = gtk_nuclear_media_stream_seek;
|
||||
|
||||
gobject_class->finalize = gtk_nuclear_media_stream_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_nuclear_media_stream_init (GtkNuclearMediaStream *nuclear)
|
||||
{
|
||||
/* This time, we don't have to add a timer here, because media
|
||||
* streams start paused.
|
||||
*
|
||||
* However, media streams need to tell GTK once they are intialized,
|
||||
* so we do that here.
|
||||
*/
|
||||
gtk_media_stream_prepared (GTK_MEDIA_STREAM (nuclear),
|
||||
FALSE,
|
||||
TRUE,
|
||||
TRUE,
|
||||
DURATION);
|
||||
}
|
||||
|
||||
/* And finally, we add the simple constructor we declared in the header. */
|
||||
GtkMediaStream *
|
||||
gtk_nuclear_media_stream_new (void)
|
||||
{
|
||||
return g_object_new (GTK_TYPE_NUCLEAR_MEDIA_STREAM, NULL);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_paintable_mediastream (GtkWidget *do_widget)
|
||||
{
|
||||
GtkMediaStream *nuclear;
|
||||
GtkWidget *video;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_display (GTK_WINDOW (window),
|
||||
gtk_widget_get_display (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Nuclear MediaStream");
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
|
||||
|
||||
nuclear = gtk_nuclear_media_stream_new ();
|
||||
gtk_media_stream_set_loop (GTK_MEDIA_STREAM (nuclear), TRUE);
|
||||
|
||||
video = gtk_video_new_for_media_stream (nuclear);
|
||||
gtk_container_add (GTK_CONTAINER (window), video);
|
||||
|
||||
g_object_unref (nuclear);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show (window);
|
||||
else
|
||||
gtk_widget_destroy (window);
|
||||
|
||||
return window;
|
||||
}
|
@@ -27,9 +27,12 @@
|
||||
<property name="column-spacing">10</property>
|
||||
<property name="margin">20</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<object class="GtkLabel" id="label_plain">
|
||||
<property name="label">Plain</property>
|
||||
<property name="xalign">0</property>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="scale_plain"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -37,12 +40,15 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<object class="GtkScale" id="scale_plain">
|
||||
<property name="can-focus">1</property>
|
||||
<property name="width-request">200</property>
|
||||
<property name="draw-value">0</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<property name="hexpand">1</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label_plain"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
@@ -50,9 +56,12 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<object class="GtkLabel" id="label_marks">
|
||||
<property name="label">Marks</property>
|
||||
<property name="xalign">0</property>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="scale_marks"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -60,7 +69,7 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<object class="GtkScale" id="scale_marks">
|
||||
<property name="can-focus">1</property>
|
||||
<property name="width-request">200</property>
|
||||
<property name="draw-value">0</property>
|
||||
@@ -73,6 +82,9 @@
|
||||
<mark value="3" position="bottom"></mark>
|
||||
<mark value="4" position="bottom"></mark>
|
||||
</marks>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label_marks"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
@@ -80,9 +92,12 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<object class="GtkLabel" id="label_discrete">
|
||||
<property name="label">Discrete</property>
|
||||
<property name="xalign">0</property>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="scale_discrete"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -90,13 +105,16 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<object class="GtkScale" id="scale_discrete">
|
||||
<property name="can-focus">1</property>
|
||||
<property name="width-request">200</property>
|
||||
<property name="round-digits">0</property>
|
||||
<property name="draw-value">0</property>
|
||||
<property name="adjustment">adjustment3</property>
|
||||
<property name="hexpand">1</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label_discrete"/>
|
||||
</accessibility>
|
||||
<marks>
|
||||
<mark value="0" position="bottom"></mark>
|
||||
<mark value="1" position="bottom"></mark>
|
||||
|
@@ -104,6 +104,7 @@
|
||||
<child>
|
||||
<object class="GtkSwitch" id="switch1">
|
||||
<property name="can-focus">1</property>
|
||||
<property name="tooltip_text">Switch it</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
@@ -1,795 +0,0 @@
|
||||
/* Tool Palette
|
||||
*
|
||||
* A tool palette widget shows groups of toolbar items as a grid of icons
|
||||
* or a list of names.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
static void load_icon_items (GtkToolPalette *palette);
|
||||
static void load_toggle_items (GtkToolPalette *palette);
|
||||
static void load_special_items (GtkToolPalette *palette);
|
||||
|
||||
typedef struct _CanvasItem CanvasItem;
|
||||
|
||||
struct _CanvasItem
|
||||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
gdouble x, y;
|
||||
};
|
||||
|
||||
static gboolean drag_data_requested_for_drop = FALSE;
|
||||
static CanvasItem *drop_item = NULL;
|
||||
static GList *canvas_items = NULL;
|
||||
|
||||
/********************************/
|
||||
/* ====== Canvas drawing ====== */
|
||||
/********************************/
|
||||
|
||||
static CanvasItem*
|
||||
canvas_item_new (GtkWidget *widget,
|
||||
GtkToolButton *button,
|
||||
gdouble x,
|
||||
gdouble y)
|
||||
{
|
||||
CanvasItem *item = NULL;
|
||||
const gchar *icon_name;
|
||||
GdkPixbuf *pixbuf;
|
||||
GtkIconTheme *icon_theme;
|
||||
|
||||
icon_name = gtk_tool_button_get_icon_name (button);
|
||||
icon_theme = gtk_icon_theme_get_for_display (gtk_widget_get_display (widget));
|
||||
pixbuf = gtk_icon_theme_load_icon (icon_theme,
|
||||
icon_name,
|
||||
48,
|
||||
GTK_ICON_LOOKUP_GENERIC_FALLBACK,
|
||||
NULL);
|
||||
|
||||
if (pixbuf)
|
||||
{
|
||||
item = g_slice_new0 (CanvasItem);
|
||||
item->pixbuf = pixbuf;
|
||||
item->x = x;
|
||||
item->y = y;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
static void
|
||||
canvas_item_free (CanvasItem *item)
|
||||
{
|
||||
g_object_unref (item->pixbuf);
|
||||
g_slice_free (CanvasItem, item);
|
||||
}
|
||||
|
||||
static void
|
||||
canvas_item_draw (const CanvasItem *item,
|
||||
cairo_t *cr,
|
||||
gboolean preview)
|
||||
{
|
||||
gdouble cx = gdk_pixbuf_get_width (item->pixbuf);
|
||||
gdouble cy = gdk_pixbuf_get_height (item->pixbuf);
|
||||
|
||||
gdk_cairo_set_source_pixbuf (cr,
|
||||
item->pixbuf,
|
||||
item->x - cx * 0.5,
|
||||
item->y - cy * 0.5);
|
||||
|
||||
if (preview)
|
||||
cairo_paint_with_alpha (cr, 0.6);
|
||||
else
|
||||
cairo_paint (cr);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
canvas_draw (GtkWidget *widget,
|
||||
cairo_t *cr)
|
||||
{
|
||||
GList *iter;
|
||||
|
||||
cairo_set_source_rgb (cr, 1, 1, 1);
|
||||
cairo_paint (cr);
|
||||
|
||||
for (iter = canvas_items; iter; iter = iter->next)
|
||||
canvas_item_draw (iter->data, cr, FALSE);
|
||||
|
||||
if (drop_item)
|
||||
canvas_item_draw (drop_item, cr, TRUE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*****************************/
|
||||
/* ====== Palette DnD ====== */
|
||||
/*****************************/
|
||||
|
||||
static void
|
||||
palette_drop_item (GtkToolItem *drag_item,
|
||||
GtkToolItemGroup *drop_group,
|
||||
gint x,
|
||||
gint y)
|
||||
{
|
||||
GtkWidget *drag_group = gtk_widget_get_parent (GTK_WIDGET (drag_item));
|
||||
GtkToolItem *drop_item = gtk_tool_item_group_get_drop_item (drop_group, x, y);
|
||||
gint drop_position = -1;
|
||||
|
||||
if (drop_item)
|
||||
drop_position = gtk_tool_item_group_get_item_position (GTK_TOOL_ITEM_GROUP (drop_group), drop_item);
|
||||
|
||||
if (GTK_TOOL_ITEM_GROUP (drag_group) != drop_group)
|
||||
{
|
||||
gboolean homogeneous, expand, fill, new_row;
|
||||
|
||||
g_object_ref (drag_item);
|
||||
gtk_container_child_get (GTK_CONTAINER (drag_group), GTK_WIDGET (drag_item),
|
||||
"homogeneous", &homogeneous,
|
||||
"expand", &expand,
|
||||
"fill", &fill,
|
||||
"new-row", &new_row,
|
||||
NULL);
|
||||
gtk_container_remove (GTK_CONTAINER (drag_group), GTK_WIDGET (drag_item));
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (drop_group),
|
||||
drag_item, drop_position);
|
||||
gtk_container_child_set (GTK_CONTAINER (drop_group), GTK_WIDGET (drag_item),
|
||||
"homogeneous", homogeneous,
|
||||
"expand", expand,
|
||||
"fill", fill,
|
||||
"new-row", new_row,
|
||||
NULL);
|
||||
g_object_unref (drag_item);
|
||||
}
|
||||
else
|
||||
gtk_tool_item_group_set_item_position (GTK_TOOL_ITEM_GROUP (drop_group),
|
||||
drag_item, drop_position);
|
||||
}
|
||||
|
||||
static void
|
||||
palette_drop_group (GtkToolPalette *palette,
|
||||
GtkToolItemGroup *drag_group,
|
||||
GtkToolItemGroup *drop_group)
|
||||
{
|
||||
gint drop_position = -1;
|
||||
|
||||
if (drop_group)
|
||||
drop_position = gtk_tool_palette_get_group_position (palette, drop_group);
|
||||
|
||||
gtk_tool_palette_set_group_position (palette, drag_group, drop_position);
|
||||
}
|
||||
|
||||
static void
|
||||
palette_drag_data_received (GtkWidget *widget,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkSelectionData *selection,
|
||||
guint time,
|
||||
gpointer data)
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
GtkToolItemGroup *drop_group = NULL;
|
||||
GtkWidget *drag_palette = gtk_drag_get_source_widget (context);
|
||||
GtkWidget *drag_item = NULL;
|
||||
|
||||
while (drag_palette && !GTK_IS_TOOL_PALETTE (drag_palette))
|
||||
drag_palette = gtk_widget_get_parent (drag_palette);
|
||||
|
||||
if (drag_palette)
|
||||
{
|
||||
drag_item = gtk_tool_palette_get_drag_item (GTK_TOOL_PALETTE (drag_palette),
|
||||
selection);
|
||||
drop_group = gtk_tool_palette_get_drop_group (GTK_TOOL_PALETTE (widget),
|
||||
x, y);
|
||||
}
|
||||
|
||||
if (GTK_IS_TOOL_ITEM_GROUP (drag_item))
|
||||
palette_drop_group (GTK_TOOL_PALETTE (drag_palette),
|
||||
GTK_TOOL_ITEM_GROUP (drag_item),
|
||||
drop_group);
|
||||
else if (GTK_IS_TOOL_ITEM (drag_item) && drop_group)
|
||||
{
|
||||
gtk_widget_get_allocation (GTK_WIDGET (drop_group), &allocation);
|
||||
palette_drop_item (GTK_TOOL_ITEM (drag_item),
|
||||
drop_group,
|
||||
x - allocation.x,
|
||||
y - allocation.y);
|
||||
}
|
||||
}
|
||||
|
||||
/********************************/
|
||||
/* ====== Passive Canvas ====== */
|
||||
/********************************/
|
||||
|
||||
static void
|
||||
passive_canvas_drag_data_received (GtkWidget *widget,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkSelectionData *selection,
|
||||
guint time,
|
||||
gpointer data)
|
||||
{
|
||||
/* find the tool button, which is the source of this DnD operation */
|
||||
|
||||
GtkWidget *palette = gtk_drag_get_source_widget (context);
|
||||
CanvasItem *canvas_item = NULL;
|
||||
GtkWidget *tool_item = NULL;
|
||||
|
||||
while (palette && !GTK_IS_TOOL_PALETTE (palette))
|
||||
palette = gtk_widget_get_parent (palette);
|
||||
|
||||
if (palette)
|
||||
tool_item = gtk_tool_palette_get_drag_item (GTK_TOOL_PALETTE (palette),
|
||||
selection);
|
||||
|
||||
g_assert (NULL == drop_item);
|
||||
|
||||
/* append a new canvas item when a tool button was found */
|
||||
|
||||
if (GTK_IS_TOOL_ITEM (tool_item))
|
||||
canvas_item = canvas_item_new (widget, GTK_TOOL_BUTTON (tool_item), x, y);
|
||||
|
||||
if (canvas_item)
|
||||
{
|
||||
canvas_items = g_list_append (canvas_items, canvas_item);
|
||||
gtk_widget_queue_draw (widget);
|
||||
}
|
||||
}
|
||||
|
||||
/************************************/
|
||||
/* ====== Interactive Canvas ====== */
|
||||
/************************************/
|
||||
|
||||
static gboolean
|
||||
interactive_canvas_drag_motion (GtkWidget *widget,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time,
|
||||
gpointer data)
|
||||
{
|
||||
if (drop_item)
|
||||
{
|
||||
/* already have a drop indicator - just update position */
|
||||
|
||||
drop_item->x = x;
|
||||
drop_item->y = y;
|
||||
|
||||
gtk_widget_queue_draw (widget);
|
||||
gdk_drag_status (context, GDK_ACTION_COPY, time);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* request DnD data for creating a drop indicator */
|
||||
|
||||
GdkAtom target = gtk_drag_dest_find_target (widget, context, NULL);
|
||||
|
||||
if (!target)
|
||||
return FALSE;
|
||||
|
||||
drag_data_requested_for_drop = FALSE;
|
||||
gtk_drag_get_data (widget, context, target, time);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
interactive_canvas_drag_data_received (GtkWidget *widget,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkSelectionData *selection,
|
||||
guint time,
|
||||
gpointer data)
|
||||
|
||||
{
|
||||
/* find the tool button which is the source of this DnD operation */
|
||||
|
||||
GtkWidget *palette = gtk_drag_get_source_widget (context);
|
||||
GtkWidget *tool_item = NULL;
|
||||
CanvasItem *item;
|
||||
|
||||
while (palette && !GTK_IS_TOOL_PALETTE (palette))
|
||||
palette = gtk_widget_get_parent (palette);
|
||||
|
||||
if (palette)
|
||||
tool_item = gtk_tool_palette_get_drag_item (GTK_TOOL_PALETTE (palette),
|
||||
selection);
|
||||
|
||||
/* create a canvas item when a tool button was found */
|
||||
|
||||
g_assert (NULL == drop_item);
|
||||
|
||||
if (!GTK_IS_TOOL_ITEM (tool_item))
|
||||
return;
|
||||
|
||||
if (drop_item)
|
||||
{
|
||||
canvas_item_free (drop_item);
|
||||
drop_item = NULL;
|
||||
}
|
||||
|
||||
item = canvas_item_new (widget, GTK_TOOL_BUTTON (tool_item), x, y);
|
||||
|
||||
/* Either create a new item or just create a preview item,
|
||||
depending on why the drag data was requested. */
|
||||
if(drag_data_requested_for_drop)
|
||||
{
|
||||
canvas_items = g_list_append (canvas_items, item);
|
||||
drop_item = NULL;
|
||||
|
||||
gtk_drag_finish (context, TRUE, time);
|
||||
} else
|
||||
{
|
||||
drop_item = item;
|
||||
gdk_drag_status (context, GDK_ACTION_COPY, time);
|
||||
}
|
||||
|
||||
gtk_widget_queue_draw (widget);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
interactive_canvas_drag_drop (GtkWidget *widget,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time,
|
||||
gpointer data)
|
||||
{
|
||||
GdkAtom target = gtk_drag_dest_find_target (widget, context, NULL);
|
||||
|
||||
if (!target)
|
||||
return FALSE;
|
||||
|
||||
drag_data_requested_for_drop = TRUE;
|
||||
gtk_drag_get_data (widget, context, target, time);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
interactive_canvas_drag_leave (gpointer data)
|
||||
{
|
||||
if (drop_item)
|
||||
{
|
||||
GtkWidget *widget = GTK_WIDGET (data);
|
||||
|
||||
canvas_item_free (drop_item);
|
||||
drop_item = NULL;
|
||||
|
||||
if (widget)
|
||||
gtk_widget_queue_draw (widget);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_combo_orientation_changed (GtkComboBox *combo_box,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkToolPalette *palette = GTK_TOOL_PALETTE (user_data);
|
||||
GtkScrolledWindow *sw;
|
||||
GtkTreeModel *model = gtk_combo_box_get_model (combo_box);
|
||||
GtkTreeIter iter;
|
||||
gint val = 0;
|
||||
|
||||
sw = GTK_SCROLLED_WINDOW (gtk_widget_get_parent (GTK_WIDGET (palette)));
|
||||
|
||||
if (!gtk_combo_box_get_active_iter (combo_box, &iter))
|
||||
return;
|
||||
|
||||
gtk_tree_model_get (model, &iter, 1, &val, -1);
|
||||
|
||||
gtk_orientable_set_orientation (GTK_ORIENTABLE (palette), val);
|
||||
|
||||
if (val == GTK_ORIENTATION_HORIZONTAL)
|
||||
gtk_scrolled_window_set_policy (sw, GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
||||
else
|
||||
gtk_scrolled_window_set_policy (sw, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||
}
|
||||
|
||||
static void
|
||||
on_combo_style_changed (GtkComboBox *combo_box,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkToolPalette *palette = GTK_TOOL_PALETTE (user_data);
|
||||
GtkTreeModel *model = gtk_combo_box_get_model (combo_box);
|
||||
GtkTreeIter iter;
|
||||
gint val = 0;
|
||||
|
||||
if (!gtk_combo_box_get_active_iter (combo_box, &iter))
|
||||
return;
|
||||
|
||||
gtk_tree_model_get (model, &iter, 1, &val, -1);
|
||||
|
||||
if (val == -1)
|
||||
gtk_tool_palette_unset_style (palette);
|
||||
else
|
||||
gtk_tool_palette_set_style (palette, val);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_toolpalette (GtkWidget *do_widget)
|
||||
{
|
||||
GtkWidget *box = NULL;
|
||||
GtkWidget *hbox = NULL;
|
||||
GtkWidget *combo_orientation = NULL;
|
||||
GtkListStore *orientation_model = NULL;
|
||||
GtkWidget *combo_style = NULL;
|
||||
GtkListStore *style_model = NULL;
|
||||
GtkCellRenderer *cell_renderer = NULL;
|
||||
GtkTreeIter iter;
|
||||
GtkWidget *palette = NULL;
|
||||
GtkWidget *palette_scroller = NULL;
|
||||
GtkWidget *notebook = NULL;
|
||||
GtkWidget *contents = NULL;
|
||||
GtkWidget *contents_scroller = NULL;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_display (GTK_WINDOW (window),
|
||||
gtk_widget_get_display (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Tool Palette");
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 200, 600);
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
/* Add widgets to control the ToolPalette appearance: */
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
|
||||
g_object_set (box, "margin", 6, NULL);
|
||||
gtk_container_add (GTK_CONTAINER (window), box);
|
||||
|
||||
/* Orientation combo box: */
|
||||
orientation_model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
|
||||
gtk_list_store_append (orientation_model, &iter);
|
||||
gtk_list_store_set (orientation_model, &iter,
|
||||
0, "Horizontal",
|
||||
1, GTK_ORIENTATION_HORIZONTAL,
|
||||
-1);
|
||||
gtk_list_store_append (orientation_model, &iter);
|
||||
gtk_list_store_set (orientation_model, &iter,
|
||||
0, "Vertical",
|
||||
1, GTK_ORIENTATION_VERTICAL,
|
||||
-1);
|
||||
|
||||
combo_orientation =
|
||||
gtk_combo_box_new_with_model (GTK_TREE_MODEL (orientation_model));
|
||||
cell_renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_orientation),
|
||||
cell_renderer,
|
||||
TRUE);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_orientation),
|
||||
cell_renderer,
|
||||
"text", 0,
|
||||
NULL);
|
||||
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_orientation), &iter);
|
||||
gtk_box_pack_start (GTK_BOX (box), combo_orientation);
|
||||
|
||||
/* Style combo box: */
|
||||
style_model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
|
||||
gtk_list_store_append (style_model, &iter);
|
||||
gtk_list_store_set (style_model, &iter,
|
||||
0, "Text",
|
||||
1, GTK_TOOLBAR_TEXT,
|
||||
-1);
|
||||
gtk_list_store_append (style_model, &iter);
|
||||
gtk_list_store_set (style_model, &iter,
|
||||
0, "Both",
|
||||
1, GTK_TOOLBAR_BOTH,
|
||||
-1);
|
||||
gtk_list_store_append (style_model, &iter);
|
||||
gtk_list_store_set (style_model, &iter,
|
||||
0, "Both: Horizontal",
|
||||
1, GTK_TOOLBAR_BOTH_HORIZ,
|
||||
-1);
|
||||
gtk_list_store_append (style_model, &iter);
|
||||
gtk_list_store_set (style_model, &iter,
|
||||
0, "Icons",
|
||||
1, GTK_TOOLBAR_ICONS,
|
||||
-1);
|
||||
gtk_list_store_append (style_model, &iter);
|
||||
gtk_list_store_set (style_model, &iter,
|
||||
0, "Default",
|
||||
1, -1, /* A custom meaning for this demo. */
|
||||
-1);
|
||||
combo_style = gtk_combo_box_new_with_model (GTK_TREE_MODEL (style_model));
|
||||
cell_renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_style),
|
||||
cell_renderer,
|
||||
TRUE);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_style),
|
||||
cell_renderer,
|
||||
"text", 0,
|
||||
NULL);
|
||||
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_style), &iter);
|
||||
gtk_box_pack_start (GTK_BOX (box), combo_style);
|
||||
|
||||
/* Add hbox */
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
|
||||
gtk_box_pack_start (GTK_BOX (box), hbox);
|
||||
|
||||
/* Add and fill the ToolPalette: */
|
||||
palette = gtk_tool_palette_new ();
|
||||
|
||||
load_icon_items (GTK_TOOL_PALETTE (palette));
|
||||
load_toggle_items (GTK_TOOL_PALETTE (palette));
|
||||
load_special_items (GTK_TOOL_PALETTE (palette));
|
||||
|
||||
palette_scroller = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_widget_set_vexpand (palette_scroller, TRUE);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (palette_scroller),
|
||||
GTK_POLICY_NEVER,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
g_object_set (palette_scroller, "margin", 6, NULL);
|
||||
gtk_widget_set_hexpand (palette_scroller, TRUE);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (palette_scroller), palette);
|
||||
gtk_container_add (GTK_CONTAINER (hbox), palette_scroller);
|
||||
|
||||
/* Connect signals: */
|
||||
g_signal_connect (combo_orientation, "changed",
|
||||
G_CALLBACK (on_combo_orientation_changed), palette);
|
||||
g_signal_connect (combo_style, "changed",
|
||||
G_CALLBACK (on_combo_style_changed), palette);
|
||||
|
||||
/* Keep the widgets in sync: */
|
||||
on_combo_orientation_changed (GTK_COMBO_BOX (combo_orientation), palette);
|
||||
|
||||
/* ===== notebook ===== */
|
||||
|
||||
notebook = gtk_notebook_new ();
|
||||
g_object_set (notebook, "margin", 6, NULL);
|
||||
gtk_box_pack_end (GTK_BOX(hbox), notebook);
|
||||
|
||||
/* ===== DnD for tool items ===== */
|
||||
|
||||
g_signal_connect (palette, "drag-data-received",
|
||||
G_CALLBACK (palette_drag_data_received), NULL);
|
||||
|
||||
gtk_tool_palette_add_drag_dest (GTK_TOOL_PALETTE (palette),
|
||||
palette,
|
||||
GTK_DEST_DEFAULT_ALL,
|
||||
GTK_TOOL_PALETTE_DRAG_ITEMS |
|
||||
GTK_TOOL_PALETTE_DRAG_GROUPS,
|
||||
GDK_ACTION_MOVE);
|
||||
|
||||
/* ===== passive DnD dest ===== */
|
||||
|
||||
contents = gtk_drawing_area_new ();
|
||||
|
||||
g_object_connect (contents,
|
||||
"draw", canvas_draw, NULL,
|
||||
"drag-data-received", passive_canvas_drag_data_received, NULL,
|
||||
NULL);
|
||||
|
||||
gtk_tool_palette_add_drag_dest (GTK_TOOL_PALETTE (palette),
|
||||
contents,
|
||||
GTK_DEST_DEFAULT_ALL,
|
||||
GTK_TOOL_PALETTE_DRAG_ITEMS,
|
||||
GDK_ACTION_COPY);
|
||||
|
||||
contents_scroller = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (contents_scroller),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_ALWAYS);
|
||||
gtk_container_add (GTK_CONTAINER (contents_scroller), contents);
|
||||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
contents_scroller,
|
||||
gtk_label_new ("Passive DnD Mode"));
|
||||
g_object_set (contents_scroller, "margin", 6, NULL);
|
||||
|
||||
/* ===== interactive DnD dest ===== */
|
||||
|
||||
contents = gtk_drawing_area_new ();
|
||||
|
||||
g_object_connect (contents,
|
||||
"draw", canvas_draw, NULL,
|
||||
"drag-motion", interactive_canvas_drag_motion, NULL,
|
||||
"drag-data-received", interactive_canvas_drag_data_received, NULL,
|
||||
"drag-leave", interactive_canvas_drag_leave, contents,
|
||||
"drag-drop", interactive_canvas_drag_drop, NULL,
|
||||
NULL);
|
||||
|
||||
gtk_tool_palette_add_drag_dest (GTK_TOOL_PALETTE (palette),
|
||||
contents,
|
||||
GTK_DEST_DEFAULT_HIGHLIGHT,
|
||||
GTK_TOOL_PALETTE_DRAG_ITEMS,
|
||||
GDK_ACTION_COPY);
|
||||
|
||||
contents_scroller = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (contents_scroller),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_ALWAYS);
|
||||
gtk_container_add (GTK_CONTAINER (contents_scroller), contents);
|
||||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), contents_scroller,
|
||||
gtk_label_new ("Interactive DnD Mode"));
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
{
|
||||
gtk_widget_show (window);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_destroy (window);
|
||||
window = NULL;
|
||||
}
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
load_icon_items (GtkToolPalette *palette)
|
||||
{
|
||||
GList *contexts;
|
||||
GList *l;
|
||||
GtkIconTheme *icon_theme;
|
||||
|
||||
icon_theme = gtk_icon_theme_get_for_display (gtk_widget_get_display (GTK_WIDGET (palette)));
|
||||
|
||||
contexts = gtk_icon_theme_list_contexts (icon_theme);
|
||||
for (l = contexts; l; l = l->next)
|
||||
{
|
||||
gchar *context = l->data;
|
||||
GList *icon_names;
|
||||
GList *ll;
|
||||
const guint max_icons = 10;
|
||||
guint icons_count = 0;
|
||||
|
||||
GtkWidget *group = gtk_tool_item_group_new (context);
|
||||
gtk_container_add (GTK_CONTAINER (palette), group);
|
||||
|
||||
if (g_strcmp0 (context, "Animations") == 0)
|
||||
continue;
|
||||
|
||||
g_message ("Got context '%s'", context);
|
||||
icon_names = gtk_icon_theme_list_icons (icon_theme, context);
|
||||
icon_names = g_list_sort (icon_names, (GCompareFunc) strcmp);
|
||||
|
||||
for (ll = icon_names; ll; ll = ll->next)
|
||||
{
|
||||
GtkToolItem *item;
|
||||
gchar *id = ll->data;
|
||||
|
||||
if (g_str_equal (id, "emblem-desktop"))
|
||||
continue;
|
||||
|
||||
if (g_str_has_suffix (id, "-symbolic"))
|
||||
continue;
|
||||
|
||||
g_message ("Got id '%s'", id);
|
||||
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), id);
|
||||
gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM (item), id);
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
|
||||
/* Prevent us having an insane number of icons: */
|
||||
++icons_count;
|
||||
if(icons_count >= max_icons)
|
||||
break;
|
||||
}
|
||||
|
||||
g_list_free_full (icon_names, g_free);
|
||||
}
|
||||
|
||||
g_list_free_full (contexts, g_free);
|
||||
}
|
||||
|
||||
static void
|
||||
load_toggle_items (GtkToolPalette *palette)
|
||||
{
|
||||
GSList *toggle_group = NULL;
|
||||
GtkToolItem *item;
|
||||
GtkWidget *group;
|
||||
char *label;
|
||||
int i;
|
||||
|
||||
group = gtk_tool_item_group_new ("Radio Item");
|
||||
gtk_container_add (GTK_CONTAINER (palette), group);
|
||||
|
||||
for (i = 1; i <= 10; ++i)
|
||||
{
|
||||
label = g_strdup_printf ("#%d", i);
|
||||
item = gtk_radio_tool_button_new (toggle_group);
|
||||
gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), label);
|
||||
g_free (label);
|
||||
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
toggle_group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item));
|
||||
}
|
||||
}
|
||||
|
||||
static GtkToolItem *
|
||||
create_entry_item (const char *text)
|
||||
{
|
||||
GtkToolItem *item;
|
||||
GtkWidget *entry;
|
||||
|
||||
entry = gtk_entry_new ();
|
||||
gtk_entry_set_text (GTK_ENTRY (entry), text);
|
||||
gtk_entry_set_width_chars (GTK_ENTRY (entry), 5);
|
||||
|
||||
item = gtk_tool_item_new ();
|
||||
gtk_container_add (GTK_CONTAINER (item), entry);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
static void
|
||||
load_special_items (GtkToolPalette *palette)
|
||||
{
|
||||
GtkToolItem *item;
|
||||
GtkWidget *group;
|
||||
GtkWidget *label_button;
|
||||
|
||||
group = gtk_tool_item_group_new (NULL);
|
||||
label_button = gtk_button_new_with_label ("Advanced Features");
|
||||
gtk_widget_show (label_button);
|
||||
gtk_tool_item_group_set_label_widget (GTK_TOOL_ITEM_GROUP (group),
|
||||
label_button);
|
||||
gtk_container_add (GTK_CONTAINER (palette), group);
|
||||
|
||||
item = create_entry_item ("homogeneous=FALSE");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item),
|
||||
"homogeneous", FALSE, NULL);
|
||||
|
||||
item = create_entry_item ("homogeneous=FALSE, expand=TRUE");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item),
|
||||
"homogeneous", FALSE, "expand", TRUE,
|
||||
NULL);
|
||||
|
||||
item = create_entry_item ("homogeneous=FALSE, expand=TRUE, fill=FALSE");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item),
|
||||
"homogeneous", FALSE, "expand", TRUE,
|
||||
"fill", FALSE, NULL);
|
||||
|
||||
item = create_entry_item ("homogeneous=FALSE, expand=TRUE, new-row=TRUE");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item),
|
||||
"homogeneous", FALSE, "expand", TRUE,
|
||||
"new-row", TRUE, NULL);
|
||||
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-up");
|
||||
gtk_tool_item_set_tooltip_text (item, "Show on vertical palettes only");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
gtk_tool_item_set_visible_horizontal (item, FALSE);
|
||||
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "go-next");
|
||||
gtk_tool_item_set_tooltip_text (item, "Show on horizontal palettes only");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
gtk_tool_item_set_visible_vertical (item, FALSE);
|
||||
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "edit-delete");
|
||||
gtk_tool_item_set_tooltip_text (item, "Do not show at all");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
gtk_widget_hide (GTK_WIDGET (item));
|
||||
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "view-fullscreen");
|
||||
gtk_tool_item_set_tooltip_text (item, "Expanded this item");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
gtk_container_child_set (GTK_CONTAINER (group), GTK_WIDGET (item),
|
||||
"homogeneous", FALSE,
|
||||
"expand", TRUE,
|
||||
NULL);
|
||||
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "help-browser");
|
||||
gtk_tool_item_set_tooltip_text (item, "A regular item");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
}
|
96
demos/gtk-demo/video_player.c
Normal file
96
demos/gtk-demo/video_player.c
Normal file
@@ -0,0 +1,96 @@
|
||||
/* Video Player
|
||||
*
|
||||
* This is a simple video player using just GTK widgets.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
static void
|
||||
open_dialog_response_cb (GtkWidget *dialog,
|
||||
int response,
|
||||
GtkWidget *video)
|
||||
{
|
||||
gtk_widget_hide (dialog);
|
||||
|
||||
if (response == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
GFile *file;
|
||||
|
||||
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
|
||||
gtk_video_set_file (GTK_VIDEO (video), file);
|
||||
g_object_unref (file);
|
||||
}
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
}
|
||||
|
||||
static void
|
||||
open_clicked_cb (GtkWidget *button,
|
||||
GtkWidget *video)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_file_chooser_dialog_new ("Select a video",
|
||||
GTK_WINDOW (gtk_widget_get_toplevel (button)),
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
||||
"_Cancel", GTK_RESPONSE_CANCEL,
|
||||
"_Open", GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
|
||||
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
|
||||
g_signal_connect (dialog, "response", G_CALLBACK (open_dialog_response_cb), video);
|
||||
gtk_widget_show (dialog);
|
||||
}
|
||||
|
||||
static void
|
||||
fullscreen_clicked_cb (GtkWidget *button,
|
||||
gpointer unused)
|
||||
{
|
||||
GtkWidget *window = gtk_widget_get_toplevel (button);
|
||||
|
||||
gtk_window_fullscreen (GTK_WINDOW (window));
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_video_player (GtkWidget *do_widget)
|
||||
{
|
||||
GtkWidget *title;
|
||||
GtkWidget *video;
|
||||
GtkWidget *open_button;
|
||||
GtkWidget *fullscreen_button;
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_display (GTK_WINDOW (window),
|
||||
gtk_widget_get_display (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Video Player");
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
video = gtk_video_new ();
|
||||
gtk_container_add (GTK_CONTAINER (window), video);
|
||||
|
||||
title = gtk_header_bar_new ();
|
||||
gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (title), TRUE);
|
||||
gtk_header_bar_set_title (GTK_HEADER_BAR (title), "Video Player");
|
||||
gtk_window_set_titlebar (GTK_WINDOW (window), title);
|
||||
|
||||
open_button = gtk_button_new_with_mnemonic ("_Open");
|
||||
g_signal_connect (open_button, "clicked", G_CALLBACK (open_clicked_cb), video);
|
||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (title), open_button);
|
||||
|
||||
fullscreen_button = gtk_button_new_from_icon_name ("view-fullscreen-symbolic");
|
||||
g_signal_connect (fullscreen_button, "clicked", G_CALLBACK (fullscreen_clicked_cb), NULL);
|
||||
gtk_header_bar_pack_end (GTK_HEADER_BAR (title), fullscreen_button);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show (window);
|
||||
else
|
||||
gtk_widget_destroy (window);
|
||||
|
||||
return window;
|
||||
}
|
@@ -1,8 +1,8 @@
|
||||
/* Benchmark/Widgetbowl
|
||||
*
|
||||
* This demo models the fishbowl demos seen on the web in a GTK way.
|
||||
* It's also a neat little tool to see how fast your computer (or
|
||||
* your GTK version) is.
|
||||
* This is a version of the Fishbowl demo that instead shows different
|
||||
* kinds of widgets, which is useful for comparing the rendering performance
|
||||
* of theme specifics.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
@@ -81,6 +81,18 @@ create_label (void)
|
||||
return w;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_video (void)
|
||||
{
|
||||
GtkMediaStream *stream = gtk_media_file_new_for_resource ("/images/gtk-logo.webm");
|
||||
GtkWidget *w = gtk_image_new_from_paintable (GDK_PAINTABLE (stream));
|
||||
gtk_media_stream_set_loop (stream, TRUE);
|
||||
gtk_media_stream_play (stream);
|
||||
g_object_unref (stream);
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_gears (void)
|
||||
{
|
||||
@@ -102,6 +114,7 @@ static const struct {
|
||||
{ "Label" , create_label },
|
||||
{ "Spinner" , create_spinner },
|
||||
{ "Spinbutton", create_spinbutton },
|
||||
{ "Video", create_video },
|
||||
{ "Gears", create_gears },
|
||||
};
|
||||
|
||||
|
@@ -467,6 +467,7 @@ icon_browser_window_init (IconBrowserWindow *win)
|
||||
setup_image_dnd (win->image3);
|
||||
setup_image_dnd (win->image4);
|
||||
setup_image_dnd (win->image5);
|
||||
setup_image_dnd (win->image6);
|
||||
setup_scalable_image_dnd (win->image6);
|
||||
|
||||
win->contexts = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, context_free);
|
||||
|
@@ -91,7 +91,6 @@
|
||||
<object class="GtkCellRendererPixbuf" id="cell">
|
||||
<property name="xpad">10</property>
|
||||
<property name="ypad">10</property>
|
||||
<property name="stock-size">6</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -134,6 +133,9 @@
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">end</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label1"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -144,6 +146,9 @@
|
||||
<object class="GtkImage" id="image2">
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">end</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label2"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
@@ -154,6 +159,9 @@
|
||||
<object class="GtkImage" id="image3">
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">end</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label3"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
@@ -164,6 +172,9 @@
|
||||
<object class="GtkImage" id="image4">
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">end</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label4"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">3</property>
|
||||
@@ -174,6 +185,9 @@
|
||||
<object class="GtkImage" id="image5">
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">end</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label5"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">4</property>
|
||||
@@ -184,6 +198,9 @@
|
||||
<object class="GtkImage" id="image6">
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">end</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label6"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">5</property>
|
||||
@@ -198,6 +215,9 @@
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image1"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -212,6 +232,9 @@
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image2"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
@@ -226,6 +249,9 @@
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image3"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
@@ -240,6 +266,9 @@
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image4"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">3</property>
|
||||
@@ -254,6 +283,9 @@
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image5"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">4</property>
|
||||
@@ -268,6 +300,9 @@
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image6"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">5</property>
|
||||
|
@@ -24,3 +24,6 @@ foreach icon_size : ['16x16', '22x22', '24x24', '32x32', '48x48', '256x256', ]
|
||||
install_data('data/@0@/gtk4-widget-factory-symbolic.symbolic.png'.format(icon_size),
|
||||
install_dir: icons_dir)
|
||||
endforeach
|
||||
|
||||
# appdata
|
||||
install_data('org.gtk.WidgetFactory.appdata.xml', install_dir: gtk_appdatadir)
|
34
demos/widget-factory/org.gtk.WidgetFactory.appdata.xml
Normal file
34
demos/widget-factory/org.gtk.WidgetFactory.appdata.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop">
|
||||
<id>org.gtk.WidgetFactory.desktop</id>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>LGPL-2.0+</project_license>
|
||||
<name>GTK+ Widget Factory</name>
|
||||
<summary>Program to demonstrate GTK+ functions</summary>
|
||||
<description>
|
||||
<p>
|
||||
GTK+ Widget Factory is a showcase of GTK+ widgets. It was
|
||||
originally created to help theme authors test their creations
|
||||
for completeness.
|
||||
</p>
|
||||
</description>
|
||||
<screenshots>
|
||||
<screenshot>
|
||||
<image>https://static.gnome.org/appdata/gtk4-widget-factory/gtk-widget-factory1.png</image>
|
||||
<caption>Page 1</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://static.gnome.org/appdata/gtk4-widget-factory/gtk-widget-factory2.png</image>
|
||||
<caption>Page 3</caption>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<kudos>
|
||||
<kudo>AppMenu</kudo>
|
||||
<kudo>HiDpiIcon</kudo>
|
||||
<kudo>ModernToolkit</kudo>
|
||||
</kudos>
|
||||
<url type="homepage">https://www.gtk.org</url>
|
||||
<translation type="gettext">gtk-4.0</translation>
|
||||
<update_contact>matthias.clasen_at_gmail.com</update_contact>
|
||||
<developer_name>Matthias Clasen and others</developer_name>
|
||||
</component>
|
@@ -64,7 +64,7 @@ get_idle (gpointer data)
|
||||
GtkApplication *app = gtk_window_get_application (GTK_WINDOW (window));
|
||||
|
||||
gtk_widget_set_sensitive (window, TRUE);
|
||||
gdk_window_set_cursor (gtk_widget_get_window (window), NULL);
|
||||
gdk_surface_set_cursor (gtk_widget_get_surface (window), NULL);
|
||||
g_application_unmark_busy (G_APPLICATION (app));
|
||||
|
||||
return G_SOURCE_REMOVE;
|
||||
@@ -81,7 +81,7 @@ get_busy (GSimpleAction *action,
|
||||
|
||||
g_application_mark_busy (G_APPLICATION (app));
|
||||
cursor = gdk_cursor_new_from_name ("wait", NULL);
|
||||
gdk_window_set_cursor (gtk_widget_get_window (window), cursor);
|
||||
gdk_surface_set_cursor (gtk_widget_get_surface (window), cursor);
|
||||
g_object_unref (cursor);
|
||||
g_timeout_add (5000, get_idle, window);
|
||||
|
||||
|
@@ -3274,6 +3274,9 @@ bad things might happen.</property>
|
||||
<object class="GtkLabel">
|
||||
<property name="margin">20</property>
|
||||
<property name="label" translatable="yes">To free the princess, you have to slay the dragon.</property>
|
||||
<accessibility>
|
||||
<role type="static"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
@@ -3464,9 +3467,12 @@ bad things might happen.</property>
|
||||
<property name="row-spacing">10</property>
|
||||
<property name="column-spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<object class="GtkLabel" id="title_label">
|
||||
<property name="label">Title:</property>
|
||||
<property name="xalign">1</property>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="open_popover_entry"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -3474,10 +3480,13 @@ bad things might happen.</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<object class="GtkLabel" id="description_label">
|
||||
<property name="valign">start</property>
|
||||
<property name="label">Description:</property>
|
||||
<property name="xalign">1</property>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="open_popover_textview"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
@@ -3493,7 +3502,11 @@ bad things might happen.</property>
|
||||
<property name="min-content-width">100</property>
|
||||
<property name="max-content-width">100</property>
|
||||
<child>
|
||||
<object class="GtkTextView" id="open_popover_textview"/>
|
||||
<object class="GtkTextView" id="open_popover_textview">
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="description_label"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
@@ -3504,6 +3517,9 @@ bad things might happen.</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="open_popover_entry">
|
||||
<property name="activates-default">1</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="title_label"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
@@ -3551,6 +3567,9 @@ bad things might happen.</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="notebook_info_label">
|
||||
<property name="label">No updates at this time</property>
|
||||
<accessibility>
|
||||
<role type="static"/>
|
||||
</accessibility>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
@@ -439,41 +439,91 @@ Public headers should never be included directly:
|
||||
#error "Only <gtk/gtk.h> can be included directly."
|
||||
#endif
|
||||
|
||||
All headers should have inclusion guards (for internal usage)
|
||||
and C++ guards:
|
||||
Private headers should include the public header first, if one exists:
|
||||
|
||||
#ifndef __GTK_FOO_PRIVATE_H__
|
||||
#define __GTK_FOO_PRIVATE_H__
|
||||
|
||||
#include "gtkfoo.h"
|
||||
|
||||
...
|
||||
|
||||
#endif /* __GTK_FOO_PRIVATE_H__ */
|
||||
|
||||
All headers should have inclusion guards:
|
||||
|
||||
#ifndef __GTK_FOO_H__
|
||||
#define __GTK_FOO_H__
|
||||
|
||||
#include <gtk/gtk-bar.h>
|
||||
...
|
||||
|
||||
#endif /* __GTK_FOO_H__ */
|
||||
|
||||
You can also use the "once" pragma instead of the classic pre-processor guard:
|
||||
|
||||
#pragma once
|
||||
|
||||
Additionally, public headers should use C++ guards around their declarations:
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gtk_foo_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkWidget * gtk_foo_new (void);
|
||||
|
||||
...
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_FOO_H__ */
|
||||
|
||||
+ Includes
|
||||
|
||||
GTK+ source files should never include the global gtk.h header, but
|
||||
instead include the individual headers that are needed. Every file must
|
||||
include config.h first, then its own header, then other GTK+ headers
|
||||
that it needs, then system and third-party headers that it needs.
|
||||
GTK+ source files must never include the global gtk.h header; instead, it
|
||||
should include the individual headers that are needed.
|
||||
|
||||
Every source file must include config.h first, followed by the header matching
|
||||
the source file, either the public installed header, or the private header, if
|
||||
it exists.
|
||||
|
||||
/* valid */
|
||||
#include "config.h"
|
||||
|
||||
#include "gtkfoo.h"
|
||||
|
||||
#include "gtkwidget.h"
|
||||
Source files should then include project headers, in alphabetical order,
|
||||
starting from headers in the current directory; then headers in
|
||||
sub-directories; and, finally, in paths relative to the top-level
|
||||
directory:
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gtkfooprivate.h"
|
||||
|
||||
#include "gtkbutton.h"
|
||||
#include "gtkwidget.h"
|
||||
|
||||
...
|
||||
#include "a11y/gtkwidgetaccessible.h"
|
||||
|
||||
#include "gdk/gdkwindowprivate.h"
|
||||
|
||||
Finally, source files should include the system headers last:
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gtkbarprivate.h"
|
||||
|
||||
#include "gtkcontainerprivate.h"
|
||||
|
||||
#include "a11y/gtkcontaineraccessible.h"
|
||||
#include "a11y/gtkwidgetaccessible.h"
|
||||
|
||||
#include "gdk/gdkwindowprivate.h"
|
||||
|
||||
#include <graphene.h>
|
||||
#include <string.h>
|
||||
|
||||
Cyclic dependencies should be avoided if at all possible; for instance, you
|
||||
could use additional headers to break cycles.
|
||||
|
||||
+ GObject
|
||||
|
||||
@@ -484,7 +534,6 @@ Typedef declarations should be placed at the beginning of the file:
|
||||
|
||||
typedef struct _GtkFoo GtkFoo;
|
||||
typedef struct _GtkFooClass GtkFooClass;
|
||||
typedef struct _GtkFooPrivate GtkFooPrivate;
|
||||
|
||||
This includes enumeration types:
|
||||
|
||||
@@ -499,26 +548,21 @@ And callback types:
|
||||
typedef void (* GtkCallback) (GtkWidget *widget,
|
||||
gpointer user_data);
|
||||
|
||||
Instance structures should only contain the parent type, and optionally a
|
||||
pointer to a private data structure, and they should be annotated as
|
||||
"private" using the gtk-doc trigraph:
|
||||
Instance structures should only contain the parent type:
|
||||
|
||||
struct _GtkFoo
|
||||
{
|
||||
/*< private >*/
|
||||
GtkWidget parent_instance;
|
||||
|
||||
GtkFooPrivate *priv;
|
||||
};
|
||||
|
||||
The private data pointer is optional and should be omitted in newly
|
||||
written classes.
|
||||
You should use the G_DECLARE_DERIVABLE_TYPE() and G_DECLARE_FINAL_TYPE()
|
||||
macros in newly written headers.
|
||||
|
||||
Always use the G_DEFINE_TYPE(), G_DEFINE_TYPE_WITH_PRIVATE(), and
|
||||
G_DEFINE_TYPE_WITH_CODE() macros, or their abstract variants
|
||||
G_DEFINE_ABSTRACT_TYPE(), G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(), and
|
||||
G_DEFINE_ABSTRACT_TYPE_WITH_CODE(); also, use the similar macros for
|
||||
defining interfaces and boxed types.
|
||||
Inside your source file, always use the G_DEFINE_TYPE(),
|
||||
G_DEFINE_TYPE_WITH_PRIVATE(), and G_DEFINE_TYPE_WITH_CODE() macros, or their
|
||||
abstract variants G_DEFINE_ABSTRACT_TYPE(),
|
||||
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(), and G_DEFINE_ABSTRACT_TYPE_WITH_CODE();
|
||||
also, use the similar macros for defining interfaces, quarks, and boxed types.
|
||||
|
||||
All the properties should be stored inside the private data structure, which
|
||||
is defined inside the source file - or, if needed, inside a private header
|
||||
@@ -526,14 +570,14 @@ file; the private header filename must end with "private.h" and must not be
|
||||
installed.
|
||||
|
||||
The private data structure should only be accessed internally either using the
|
||||
pointer inside the instance structure, if one is available, or the generated
|
||||
pointer inside the instance structure, for legacy code, or the generated
|
||||
instance private data getter function for your type. You should never use the
|
||||
G_TYPE_INSTANCE_GET_PRIVATE() macro or the g_type_instance_get_private()
|
||||
function.
|
||||
|
||||
Interface types should always have the dummy typedef for cast purposes:
|
||||
|
||||
typedef struct _GtkFoo GtkFoo;
|
||||
typedef struct _GtkFoo GtkFoo;
|
||||
|
||||
The interface structure should have "Interface" postfixed to the dummy typedef:
|
||||
|
||||
@@ -564,19 +608,16 @@ Inline functions are usually preferable to private macros.
|
||||
|
||||
Public macros should not be used unless they evaluate to a constant.
|
||||
|
||||
+ Public API
|
||||
+ Symbol visibility
|
||||
|
||||
Avoid exporting variables as public API, since this is cumbersome on some
|
||||
Any symbol that is not explicitly annotated using a GDK_AVAILABLE_IN_*
|
||||
macro is considered internal, and not exported in the shared library.
|
||||
|
||||
Never export variables as public API, since this is cumbersome on some
|
||||
platforms. It is always preferable to add getters and setters instead.
|
||||
|
||||
All public functions must be listed in the gtk.symbols file.
|
||||
|
||||
+ Private API
|
||||
|
||||
Non-exported functions that are needed in more than one source file
|
||||
should be named "_gtk_...", and declared in a private header file.
|
||||
|
||||
Underscore-prefixed functions are never exported.
|
||||
should be declared in a private header file.
|
||||
|
||||
Non-exported functions that are only needed in one source file
|
||||
should be declared static.
|
||||
@@ -638,4 +679,4 @@ of tabs, etc.
|
||||
|
||||
It is ok to update the style of a code block or function when you
|
||||
are touching it anyway, but sweeping whitespace changes obscure the
|
||||
git history and should be avoided.
|
||||
source revision history, and should be avoided.
|
||||
|
@@ -26,13 +26,13 @@ Refer to the file widget_system.txt which covers widget flags and the
|
||||
resulting invariants in a detailed way.
|
||||
|
||||
|
||||
GdkWindow pointers may be NULL in GdkEvents
|
||||
GdkSurface pointers may be NULL in GdkEvents
|
||||
-------------------------------------------
|
||||
|
||||
The notification nature of the signal mechanism might cause events to
|
||||
be emitted that have their GdkWindow pointer set to NULL.
|
||||
be emitted that have their GdkSurface pointer set to NULL.
|
||||
This is due to the fact that certain events need to be emitted after the
|
||||
real GdkWindow of a widget is not any longer pertinent.
|
||||
real GdkSurface of a widget is not any longer pertinent.
|
||||
It's up to the signal handling function (application) to check for the
|
||||
window field of the event structure to be != NULL, if it is going to
|
||||
perform any operations through Gdk calls on it.
|
||||
@@ -43,7 +43,7 @@ GDK_SELECTION_CLEAR GtkWidget::selection_clear_event
|
||||
GDK_FOCUS_CHANGE GtkWidget::focus_in_event
|
||||
GtkWidget::focus_out_event
|
||||
|
||||
Events that are assured to have a valid GdkEvent.any.window field are
|
||||
Events that are assured to have a valid GdkEvent.any.surface field are
|
||||
|
||||
GDK_EXPOSE GtkWidget::expose_event
|
||||
|
||||
@@ -51,10 +51,10 @@ GDK_EXPOSE GtkWidget::expose_event
|
||||
Writing Gdk functions
|
||||
---------------------
|
||||
|
||||
When writing Gdk functions that operate on GdkWindow structures in any
|
||||
meaningful sense, that is casting to a GdkWindowPrivate structure for
|
||||
access to fields other then GdkWindow.user_data, the programmer is
|
||||
recommended to check for the GdkWindowPrivate.destroyed field to be ==
|
||||
FALSE, especially if the GdkWindowPrivate.xwindow field is used.
|
||||
When writing Gdk functions that operate on GdkSurface structures in any
|
||||
meaningful sense, that is casting to a GdkSurfacePrivate structure for
|
||||
access to fields other then GdkSurface.user_data, the programmer is
|
||||
recommended to check for the GdkSurfacePrivate.destroyed field to be ==
|
||||
FALSE, especially if the GdkSurfacePrivate.xwindow field is used.
|
||||
Silent abortion of the Gdk function is the correct behaviour if this
|
||||
condition isn't met.
|
||||
|
@@ -81,19 +81,19 @@ GdkAtom gdk_drag_get_selection (GdkDragContext *context);
|
||||
|
||||
/* Source side */
|
||||
|
||||
GdkDragContext * gdk_drag_begin (GdkWindow *window,
|
||||
GdkDragContext * gdk_drag_begin (GdkSurface *window,
|
||||
GList *targets,
|
||||
GdkDragAction actions);
|
||||
gboolean gdk_drag_get_protocol (guint32 xid,
|
||||
GdkDragProtocol *protocol);
|
||||
void gdk_drag_find_window (GdkDragContext *context,
|
||||
GdkWindow *drag_window,
|
||||
GdkSurface *drag_surface,
|
||||
gint x_root,
|
||||
gint y_root,
|
||||
GdkWindow **dest_window,
|
||||
GdkSurface **dest_surface,
|
||||
GdkDragProtocol *protocol);
|
||||
gboolean gdk_drag_motion (GdkDragContext *context,
|
||||
GdkWindow *dest_window,
|
||||
GdkSurface *dest_surface,
|
||||
GdkDragProtocol protocol,
|
||||
gint x_root,
|
||||
gint y_root,
|
||||
|
@@ -45,7 +45,6 @@
|
||||
<xi:include href="xml/gdkcontentserializer.xml" />
|
||||
<xi:include href="xml/gdkcontentdeserializer.xml" />
|
||||
<xi:include href="xml/properties.xml" />
|
||||
<xi:include href="xml/threads.xml" />
|
||||
<xi:include href="xml/gdkapplaunchcontext.xml" />
|
||||
<xi:include href="xml/pixbufs.xml" />
|
||||
<xi:include href="xml/pango_interaction.xml" />
|
||||
@@ -62,54 +61,6 @@
|
||||
<title>Index of deprecated symbols</title>
|
||||
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-0" role="3.0">
|
||||
<title>Index of new symbols in 3.0</title>
|
||||
<xi:include href="xml/api-index-3.0.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-2" role="3.2">
|
||||
<title>Index of new symbols in 3.2</title>
|
||||
<xi:include href="xml/api-index-3.2.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-4" role="3.4">
|
||||
<title>Index of new symbols in 3.4</title>
|
||||
<xi:include href="xml/api-index-3.4.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-6" role="3.6">
|
||||
<title>Index of new symbols in 3.6</title>
|
||||
<xi:include href="xml/api-index-3.6.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-8" role="3.8">
|
||||
<title>Index of new symbols in 3.8</title>
|
||||
<xi:include href="xml/api-index-3.8.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-10" role="3.10">
|
||||
<title>Index of new symbols in 3.10</title>
|
||||
<xi:include href="xml/api-index-3.10.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-12" role="3.12">
|
||||
<title>Index of new symbols in 3.12</title>
|
||||
<xi:include href="xml/api-index-3.12.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-14" role="3.14">
|
||||
<title>Index of new symbols in 3.14</title>
|
||||
<xi:include href="xml/api-index-3.14.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-16" role="3.16">
|
||||
<title>Index of new symbols in 3.16</title>
|
||||
<xi:include href="xml/api-index-3.16.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-18" role="3.18">
|
||||
<title>Index of new symbols in 3.18</title>
|
||||
<xi:include href="xml/api-index-3.18.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-20" role="3.20">
|
||||
<title>Index of new symbols in 3.20</title>
|
||||
<xi:include href="xml/api-index-3.20.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-22" role="3.22">
|
||||
<title>Index of new symbols in 3.22</title>
|
||||
<xi:include href="xml/api-index-3.22.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
|
||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
||||
|
||||
|
@@ -12,21 +12,7 @@ GDK_WINDOWING_QUARTZ
|
||||
GDK_WINDOWING_WAYLAND
|
||||
|
||||
<SUBSECTION>
|
||||
GDK_VERSION_3_0
|
||||
GDK_VERSION_3_2
|
||||
GDK_VERSION_3_4
|
||||
GDK_VERSION_3_6
|
||||
GDK_VERSION_3_8
|
||||
GDK_VERSION_3_10
|
||||
GDK_VERSION_3_12
|
||||
GDK_VERSION_3_14
|
||||
GDK_VERSION_3_16
|
||||
GDK_VERSION_3_18
|
||||
GDK_VERSION_3_20
|
||||
GDK_VERSION_3_22
|
||||
GDK_VERSION_3_90
|
||||
GDK_VERSION_3_92
|
||||
GDK_VERSION_3_94
|
||||
GDK_VERSION_4_0
|
||||
GDK_VERSION_MIN_REQUIRED
|
||||
GDK_VERSION_MAX_ALLOWED
|
||||
GDK_DISABLE_DEPRECATION_WARNINGS
|
||||
@@ -61,57 +47,21 @@ gdk_scroll_direction_get_type
|
||||
gdk_setting_action_get_type
|
||||
gdk_status_get_type
|
||||
gdk_visibility_state_get_type
|
||||
gdk_window_attributes_type_get_type
|
||||
gdk_window_edge_get_type
|
||||
gdk_window_hints_get_type
|
||||
gdk_window_state_get_type
|
||||
gdk_window_type_get_type
|
||||
gdk_window_type_hint_get_type
|
||||
gdk_surface_attributes_type_get_type
|
||||
gdk_surface_edge_get_type
|
||||
gdk_surface_hints_get_type
|
||||
gdk_surface_state_get_type
|
||||
gdk_surface_type_get_type
|
||||
gdk_surface_type_hint_get_type
|
||||
gdk_wm_decoration_get_type
|
||||
gdk_wm_function_get_type
|
||||
GDK_AVAILABLE_IN_3_0
|
||||
GDK_AVAILABLE_IN_3_10
|
||||
GDK_AVAILABLE_IN_3_12
|
||||
GDK_AVAILABLE_IN_3_14
|
||||
GDK_AVAILABLE_IN_3_16
|
||||
GDK_AVAILABLE_IN_3_18
|
||||
GDK_AVAILABLE_IN_3_2
|
||||
GDK_AVAILABLE_IN_3_20
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
GDK_AVAILABLE_IN_3_4
|
||||
GDK_AVAILABLE_IN_3_6
|
||||
GDK_AVAILABLE_IN_3_8
|
||||
GDK_AVAILABLE_IN_3_90
|
||||
GDK_AVAILABLE_IN_3_92
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_4_0
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_UNAVAILABLE
|
||||
GDK_DEPRECATED
|
||||
GDK_DEPRECATED_FOR
|
||||
GDK_DEPRECATED_IN_3_0
|
||||
GDK_DEPRECATED_IN_3_0_FOR
|
||||
GDK_DEPRECATED_IN_3_10
|
||||
GDK_DEPRECATED_IN_3_10_FOR
|
||||
GDK_DEPRECATED_IN_3_12
|
||||
GDK_DEPRECATED_IN_3_12_FOR
|
||||
GDK_DEPRECATED_IN_3_14
|
||||
GDK_DEPRECATED_IN_3_14_FOR
|
||||
GDK_DEPRECATED_IN_3_16
|
||||
GDK_DEPRECATED_IN_3_16_FOR
|
||||
GDK_DEPRECATED_IN_3_18
|
||||
GDK_DEPRECATED_IN_3_18_FOR
|
||||
GDK_DEPRECATED_IN_3_2
|
||||
GDK_DEPRECATED_IN_3_20
|
||||
GDK_DEPRECATED_IN_3_20_FOR
|
||||
GDK_DEPRECATED_IN_3_22
|
||||
GDK_DEPRECATED_IN_3_22_FOR
|
||||
GDK_DEPRECATED_IN_3_2_FOR
|
||||
GDK_DEPRECATED_IN_3_4
|
||||
GDK_DEPRECATED_IN_3_4_FOR
|
||||
GDK_DEPRECATED_IN_3_6
|
||||
GDK_DEPRECATED_IN_3_6_FOR
|
||||
GDK_DEPRECATED_IN_3_8
|
||||
GDK_DEPRECATED_IN_3_8_FOR
|
||||
GDK_DEPRECATED_IN_4_0
|
||||
GDK_DEPRECATED_IN_4_0_FOR
|
||||
GDK_VERSION_CUR_STABLE
|
||||
GDK_VERSION_PREV_STABLE
|
||||
</SECTION>
|
||||
@@ -146,7 +96,7 @@ gdk_display_get_n_monitors
|
||||
gdk_display_get_monitor
|
||||
gdk_display_get_primary_monitor
|
||||
gdk_display_get_monitor_at_point
|
||||
gdk_display_get_monitor_at_window
|
||||
gdk_display_get_monitor_at_surface
|
||||
gdk_display_get_clipboard
|
||||
gdk_display_get_primary_clipboard
|
||||
gdk_display_get_setting
|
||||
@@ -219,191 +169,175 @@ gdk_rgba_get_type
|
||||
<SECTION>
|
||||
<TITLE>Windows</TITLE>
|
||||
<FILE>windows</FILE>
|
||||
GdkWindow
|
||||
GdkWindowType
|
||||
GdkWindowClass
|
||||
GdkWindowHints
|
||||
GdkSurface
|
||||
GdkSurfaceType
|
||||
GdkSurfaceClass
|
||||
GdkSurfaceHints
|
||||
GdkGeometry
|
||||
GdkGravity
|
||||
GdkAnchorHints
|
||||
GdkWindowEdge
|
||||
GdkWindowTypeHint
|
||||
GdkWindowState
|
||||
gdk_window_new_toplevel
|
||||
gdk_window_new_popup
|
||||
gdk_window_new_temp
|
||||
gdk_window_new_child
|
||||
gdk_window_destroy
|
||||
gdk_window_get_window_type
|
||||
gdk_window_get_display
|
||||
gdk_window_show
|
||||
gdk_window_show_unraised
|
||||
gdk_window_hide
|
||||
gdk_window_is_destroyed
|
||||
gdk_window_is_visible
|
||||
gdk_window_is_viewable
|
||||
gdk_window_is_input_only
|
||||
gdk_window_is_shaped
|
||||
gdk_window_get_state
|
||||
gdk_window_withdraw
|
||||
gdk_window_iconify
|
||||
gdk_window_deiconify
|
||||
gdk_window_stick
|
||||
gdk_window_unstick
|
||||
gdk_window_maximize
|
||||
gdk_window_unmaximize
|
||||
gdk_window_fullscreen
|
||||
gdk_window_fullscreen_on_monitor
|
||||
gdk_window_unfullscreen
|
||||
GdkSurfaceEdge
|
||||
GdkSurfaceTypeHint
|
||||
GdkSurfaceState
|
||||
gdk_surface_new_toplevel
|
||||
gdk_surface_new_popup
|
||||
gdk_surface_new_temp
|
||||
gdk_surface_new_child
|
||||
gdk_surface_destroy
|
||||
gdk_surface_get_surface_type
|
||||
gdk_surface_get_display
|
||||
gdk_surface_show
|
||||
gdk_surface_show_unraised
|
||||
gdk_surface_hide
|
||||
gdk_surface_is_destroyed
|
||||
gdk_surface_is_visible
|
||||
gdk_surface_is_viewable
|
||||
gdk_surface_is_input_only
|
||||
gdk_surface_get_state
|
||||
gdk_surface_withdraw
|
||||
gdk_surface_iconify
|
||||
gdk_surface_deiconify
|
||||
gdk_surface_stick
|
||||
gdk_surface_unstick
|
||||
gdk_surface_maximize
|
||||
gdk_surface_unmaximize
|
||||
gdk_surface_fullscreen
|
||||
gdk_surface_fullscreen_on_monitor
|
||||
gdk_surface_unfullscreen
|
||||
GdkFullscreenMode
|
||||
gdk_window_get_fullscreen_mode
|
||||
gdk_window_set_fullscreen_mode
|
||||
gdk_window_set_keep_above
|
||||
gdk_window_set_keep_below
|
||||
gdk_window_set_opacity
|
||||
gdk_window_set_pass_through
|
||||
gdk_window_get_pass_through
|
||||
gdk_window_move
|
||||
gdk_window_resize
|
||||
gdk_window_move_resize
|
||||
gdk_window_scroll
|
||||
gdk_window_move_region
|
||||
gdk_window_has_native
|
||||
gdk_window_raise
|
||||
gdk_window_lower
|
||||
gdk_window_restack
|
||||
gdk_window_focus
|
||||
gdk_window_register_dnd
|
||||
gdk_window_begin_resize_drag
|
||||
gdk_window_begin_resize_drag_for_device
|
||||
gdk_window_begin_move_drag
|
||||
gdk_window_begin_move_drag_for_device
|
||||
gdk_window_show_window_menu
|
||||
gdk_window_constrain_size
|
||||
gdk_window_beep
|
||||
gdk_window_get_scale_factor
|
||||
gdk_window_set_opaque_region
|
||||
gdk_window_create_gl_context
|
||||
gdk_window_create_vulkan_context
|
||||
gdk_surface_get_fullscreen_mode
|
||||
gdk_surface_set_fullscreen_mode
|
||||
gdk_surface_set_keep_above
|
||||
gdk_surface_set_keep_below
|
||||
gdk_surface_set_opacity
|
||||
gdk_surface_set_pass_through
|
||||
gdk_surface_get_pass_through
|
||||
gdk_surface_move
|
||||
gdk_surface_resize
|
||||
gdk_surface_move_resize
|
||||
gdk_surface_has_native
|
||||
gdk_surface_raise
|
||||
gdk_surface_lower
|
||||
gdk_surface_restack
|
||||
gdk_surface_focus
|
||||
gdk_surface_register_dnd
|
||||
gdk_surface_begin_resize_drag
|
||||
gdk_surface_begin_resize_drag_for_device
|
||||
gdk_surface_begin_move_drag
|
||||
gdk_surface_begin_move_drag_for_device
|
||||
gdk_surface_show_window_menu
|
||||
gdk_surface_constrain_size
|
||||
gdk_surface_beep
|
||||
gdk_surface_get_scale_factor
|
||||
gdk_surface_set_opaque_region
|
||||
gdk_surface_create_gl_context
|
||||
gdk_surface_create_vulkan_context
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_window_get_clip_region
|
||||
gdk_window_begin_draw_frame
|
||||
gdk_window_end_draw_frame
|
||||
gdk_window_get_visible_region
|
||||
gdk_surface_begin_draw_frame
|
||||
gdk_surface_end_draw_frame
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_window_invalidate_rect
|
||||
gdk_window_invalidate_region
|
||||
GdkWindowChildFunc
|
||||
gdk_window_invalidate_maybe_recurse
|
||||
gdk_window_get_update_area
|
||||
gdk_window_freeze_updates
|
||||
gdk_window_thaw_updates
|
||||
gdk_window_get_frame_clock
|
||||
gdk_surface_invalidate_rect
|
||||
gdk_surface_invalidate_region
|
||||
gdk_surface_freeze_updates
|
||||
gdk_surface_thaw_updates
|
||||
gdk_surface_get_frame_clock
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_window_set_user_data
|
||||
gdk_window_set_accept_focus
|
||||
gdk_window_get_accept_focus
|
||||
gdk_window_set_focus_on_map
|
||||
gdk_window_get_focus_on_map
|
||||
gdk_window_add_filter
|
||||
gdk_window_remove_filter
|
||||
GdkFilterFunc
|
||||
GdkFilterReturn
|
||||
GdkXEvent
|
||||
gdk_window_shape_combine_region
|
||||
gdk_window_set_child_shapes
|
||||
gdk_window_merge_child_shapes
|
||||
gdk_window_input_shape_combine_region
|
||||
gdk_window_set_child_input_shapes
|
||||
gdk_window_merge_child_input_shapes
|
||||
gdk_window_set_title
|
||||
gdk_surface_set_user_data
|
||||
gdk_surface_set_accept_focus
|
||||
gdk_surface_get_accept_focus
|
||||
gdk_surface_set_focus_on_map
|
||||
gdk_surface_get_focus_on_map
|
||||
gdk_surface_input_shape_combine_region
|
||||
gdk_surface_set_child_input_shapes
|
||||
gdk_surface_merge_child_input_shapes
|
||||
gdk_surface_set_title
|
||||
GDK_PARENT_RELATIVE
|
||||
gdk_window_set_cursor
|
||||
gdk_window_get_cursor
|
||||
gdk_window_get_user_data
|
||||
gdk_window_get_geometry
|
||||
gdk_window_set_geometry_hints
|
||||
gdk_window_get_width
|
||||
gdk_window_get_height
|
||||
gdk_window_set_icon_list
|
||||
gdk_window_set_modal_hint
|
||||
gdk_window_get_modal_hint
|
||||
gdk_window_set_type_hint
|
||||
gdk_window_get_type_hint
|
||||
gdk_window_set_shadow_width
|
||||
gdk_window_set_skip_taskbar_hint
|
||||
gdk_window_set_skip_pager_hint
|
||||
gdk_window_set_urgency_hint
|
||||
gdk_window_get_position
|
||||
gdk_window_get_root_origin
|
||||
gdk_window_get_frame_extents
|
||||
gdk_window_get_origin
|
||||
gdk_window_get_root_coords
|
||||
gdk_window_get_device_position
|
||||
gdk_window_get_device_position_double
|
||||
gdk_surface_set_cursor
|
||||
gdk_surface_get_cursor
|
||||
gdk_surface_get_user_data
|
||||
gdk_surface_get_geometry
|
||||
gdk_surface_set_geometry_hints
|
||||
gdk_surface_get_width
|
||||
gdk_surface_get_height
|
||||
gdk_surface_set_icon_list
|
||||
gdk_surface_set_modal_hint
|
||||
gdk_surface_get_modal_hint
|
||||
gdk_surface_set_type_hint
|
||||
gdk_surface_get_type_hint
|
||||
gdk_surface_set_shadow_width
|
||||
gdk_surface_set_skip_taskbar_hint
|
||||
gdk_surface_set_skip_pager_hint
|
||||
gdk_surface_set_urgency_hint
|
||||
gdk_surface_get_position
|
||||
gdk_surface_get_root_origin
|
||||
gdk_surface_get_frame_extents
|
||||
gdk_surface_get_origin
|
||||
gdk_surface_get_root_coords
|
||||
gdk_surface_get_device_position
|
||||
gdk_surface_get_device_position_double
|
||||
GdkModifierType
|
||||
GdkModifierIntent
|
||||
gdk_window_get_parent
|
||||
gdk_window_get_toplevel
|
||||
gdk_window_get_children
|
||||
gdk_window_get_children_with_user_data
|
||||
gdk_window_peek_children
|
||||
gdk_window_get_events
|
||||
gdk_window_set_events
|
||||
gdk_window_set_icon_name
|
||||
gdk_window_set_transient_for
|
||||
gdk_window_set_role
|
||||
gdk_window_set_startup_id
|
||||
gdk_window_set_group
|
||||
gdk_window_get_group
|
||||
gdk_window_set_decorations
|
||||
gdk_window_get_decorations
|
||||
gdk_surface_get_parent
|
||||
gdk_surface_get_toplevel
|
||||
gdk_surface_get_children
|
||||
gdk_surface_get_children_with_user_data
|
||||
gdk_surface_peek_children
|
||||
gdk_surface_get_events
|
||||
gdk_surface_set_events
|
||||
gdk_surface_set_icon_name
|
||||
gdk_surface_set_transient_for
|
||||
gdk_surface_set_role
|
||||
gdk_surface_set_startup_id
|
||||
gdk_surface_set_group
|
||||
gdk_surface_get_group
|
||||
gdk_surface_set_decorations
|
||||
gdk_surface_get_decorations
|
||||
GdkWMDecoration
|
||||
gdk_window_set_functions
|
||||
gdk_surface_set_functions
|
||||
GdkWMFunction
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_window_get_support_multidevice
|
||||
gdk_window_set_support_multidevice
|
||||
gdk_window_get_device_cursor
|
||||
gdk_window_set_device_cursor
|
||||
gdk_window_get_device_events
|
||||
gdk_window_set_device_events
|
||||
gdk_surface_get_support_multidevice
|
||||
gdk_surface_set_support_multidevice
|
||||
gdk_surface_get_device_cursor
|
||||
gdk_surface_set_device_cursor
|
||||
gdk_surface_get_device_events
|
||||
gdk_surface_set_device_events
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_window_coords_from_parent
|
||||
gdk_window_coords_to_parent
|
||||
gdk_surface_coords_from_parent
|
||||
gdk_surface_coords_to_parent
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GDK_WINDOW
|
||||
GDK_WINDOW_GET_CLASS
|
||||
GDK_TYPE_WINDOW
|
||||
GDK_IS_WINDOW
|
||||
GDK_WINDOW_CLASS
|
||||
GDK_IS_WINDOW_CLASS
|
||||
GDK_SURFACE
|
||||
GDK_SURFACE_GET_CLASS
|
||||
GDK_TYPE_SURFACE
|
||||
GDK_IS_SURFACE
|
||||
GDK_SURFACE_CLASS
|
||||
GDK_IS_SURFACE_CLASS
|
||||
GDK_TYPE_FILTER_RETURN
|
||||
GDK_TYPE_GRAVITY
|
||||
GDK_TYPE_MODIFIER_TYPE
|
||||
GDK_TYPE_WINDOW_ATTRIBUTES_TYPE
|
||||
GDK_TYPE_WINDOW_EDGE
|
||||
GDK_TYPE_WINDOW_HINTS
|
||||
GDK_TYPE_WINDOW_TYPE
|
||||
GDK_TYPE_WINDOW_TYPE_HINT
|
||||
GDK_TYPE_SURFACE_ATTRIBUTES_TYPE
|
||||
GDK_TYPE_SURFACE_EDGE
|
||||
GDK_TYPE_SURFACE_HINTS
|
||||
GDK_TYPE_SURFACE_TYPE
|
||||
GDK_TYPE_SURFACE_TYPE_HINT
|
||||
GDK_TYPE_WM_DECORATION
|
||||
GDK_TYPE_WM_FUNCTION
|
||||
GDK_TYPE_WINDOW_STATE
|
||||
GDK_TYPE_SURFACE_STATE
|
||||
|
||||
<SUBSECTION Private>
|
||||
gdk_window_get_type
|
||||
gdk_window_window_class_get_type
|
||||
GdkWindowClass
|
||||
GdkWindowImpl
|
||||
GdkWindowImplClass
|
||||
GdkWindowRedirect
|
||||
gdk_window_impl_get_type
|
||||
gdk_surface_get_type
|
||||
gdk_surface_window_class_get_type
|
||||
GdkSurfaceClass
|
||||
GdkSurfaceImpl
|
||||
GdkSurfaceImplClass
|
||||
GdkSurfaceRedirect
|
||||
gdk_surface_impl_get_type
|
||||
gdk_fullscreen_mode_get_type
|
||||
</SECTION>
|
||||
|
||||
@@ -438,11 +372,16 @@ gdk_content_formats_union_deserialize_mime_types
|
||||
<SUBSECTION>
|
||||
GdkContentFormatsBuilder
|
||||
gdk_content_formats_builder_new
|
||||
gdk_content_formats_builder_free
|
||||
gdk_content_formats_builder_free_to_formats
|
||||
gdk_content_formats_builder_add_formats
|
||||
gdk_content_formats_builder_add_gtype
|
||||
gdk_content_formats_builder_add_mime_type
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_content_formats_builder_ref
|
||||
gdk_content_formats_builder_unref
|
||||
gdk_content_formats_builder_to_formats
|
||||
|
||||
<SUBSECTION Private>
|
||||
GDK_TYPE_FILE_LIST
|
||||
gdk_file_list_get_type
|
||||
@@ -467,8 +406,8 @@ gdk_pango_layout_line_get_clip_region
|
||||
<SECTION>
|
||||
<TITLE>Cairo Interaction</TITLE>
|
||||
<FILE>cairo_interaction</FILE>
|
||||
gdk_window_create_similar_surface
|
||||
gdk_window_create_similar_image_surface
|
||||
gdk_surface_create_similar_surface
|
||||
gdk_surface_create_similar_image_surface
|
||||
gdk_cairo_get_clip_rectangle
|
||||
gdk_cairo_get_drawing_context
|
||||
gdk_cairo_set_source_rgba
|
||||
@@ -497,22 +436,6 @@ gdk_rectangle_contains_point
|
||||
gdk_rectangle_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<TITLE>Threads</TITLE>
|
||||
<FILE>threads</FILE>
|
||||
GDK_THREADS_ENTER
|
||||
GDK_THREADS_LEAVE
|
||||
gdk_threads_init
|
||||
gdk_threads_enter
|
||||
gdk_threads_leave
|
||||
gdk_threads_add_idle
|
||||
gdk_threads_add_idle_full
|
||||
gdk_threads_add_timeout
|
||||
gdk_threads_add_timeout_full
|
||||
gdk_threads_add_timeout_seconds
|
||||
gdk_threads_add_timeout_seconds_full
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<TITLE>Keyboard Handling</TITLE>
|
||||
<FILE>keys</FILE>
|
||||
@@ -602,15 +525,15 @@ gdk_device_ungrab
|
||||
gdk_device_get_state
|
||||
gdk_device_get_position
|
||||
gdk_device_get_position_double
|
||||
gdk_device_get_window_at_position
|
||||
gdk_device_get_window_at_position_double
|
||||
gdk_device_get_surface_at_position
|
||||
gdk_device_get_surface_at_position_double
|
||||
gdk_device_get_history
|
||||
gdk_device_free_history
|
||||
GdkTimeCoord
|
||||
gdk_device_get_axis
|
||||
gdk_device_list_axes
|
||||
gdk_device_get_axis_value
|
||||
gdk_device_get_last_event_window
|
||||
gdk_device_get_last_event_surface
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_device_tool_get_serial
|
||||
@@ -723,7 +646,7 @@ gdk_event_get_scroll_deltas
|
||||
gdk_event_is_scroll_stop_event
|
||||
gdk_event_get_state
|
||||
gdk_event_get_time
|
||||
gdk_event_get_window
|
||||
gdk_event_get_surface
|
||||
gdk_event_get_event_type
|
||||
GdkEventSequence
|
||||
gdk_event_get_event_sequence
|
||||
@@ -739,7 +662,7 @@ gdk_event_get_crossing_mode
|
||||
gdk_event_get_drag_context
|
||||
gdk_event_get_focus_in
|
||||
gdk_event_get_grab_window
|
||||
gdk_event_get_history
|
||||
gdk_event_get_motion_history
|
||||
gdk_event_get_key_group
|
||||
gdk_event_get_key_is_modifier
|
||||
gdk_event_get_pad_axis_value
|
||||
@@ -780,19 +703,36 @@ GDK_IS_EVENT
|
||||
gdk_event_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<TITLE>Paintable</TITLE>
|
||||
<FILE>paintable</FILE>
|
||||
GdkPaintable
|
||||
gdk_paintable_snapshot
|
||||
gdk_paintable_get_current_image
|
||||
gdk_paintable_get_flags
|
||||
gdk_paintable_get_intrinsic_width
|
||||
gdk_paintable_get_intrinsic_height
|
||||
gdk_paintable_get_intrinsic_aspect_ratio
|
||||
gdk_paintable_compute_concrete_size
|
||||
gdk_paintable_invalidate_contents
|
||||
gdk_paintable_invalidate_size
|
||||
<SECTION>
|
||||
|
||||
<SECTION>
|
||||
<TITLE>Textures</TITLE>
|
||||
<FILE>textures</FILE>
|
||||
GdkTexture
|
||||
gdk_texture_new_for_data
|
||||
gdk_texture_new_for_pixbuf
|
||||
gdk_texture_new_for_gl
|
||||
gdk_texture_new_from_resource
|
||||
gdk_texture_new_from_file
|
||||
gdk_texture_get_width
|
||||
gdk_texture_get_height
|
||||
gdk_texture_download
|
||||
gdk_texture_release_gl
|
||||
GdkMemoryFormat
|
||||
GDK_MEMORY_FORMAT_DEFAULT
|
||||
gdk_memory_texture_new
|
||||
gdk_gl_texture_new
|
||||
gdk_gl_texture_release
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GdkTextureClass
|
||||
@@ -800,6 +740,16 @@ gdk_texture_get_type
|
||||
GDK_TYPE_TEXTURE
|
||||
GDK_IS_TEXTURE
|
||||
GDK_TEXTURE
|
||||
GdkGLTextureClass
|
||||
gdk_gl_texture_get_type
|
||||
GDK_TYPE_GL_TEXTURE
|
||||
GDK_IS_GL_TEXTURE
|
||||
GDK_GL_TEXTURE
|
||||
GdkMemoryTextureClass
|
||||
gdk_memory_texture_get_type
|
||||
GDK_TYPE_MEMORY_TEXTURE
|
||||
GDK_IS_MEMORY_TEXTURE
|
||||
GDK_MEMORY_TEXTURE
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -843,9 +793,9 @@ gdk_drag_context_get_suggested_action
|
||||
gdk_drag_context_get_selected_action
|
||||
gdk_drag_context_get_formats
|
||||
gdk_drag_context_get_device
|
||||
gdk_drag_context_get_source_window
|
||||
gdk_drag_context_get_dest_window
|
||||
gdk_drag_context_get_drag_window
|
||||
gdk_drag_context_get_source_surface
|
||||
gdk_drag_context_get_dest_surface
|
||||
gdk_drag_context_get_drag_surface
|
||||
gdk_drag_context_set_hotspot
|
||||
|
||||
<SUBSECTION Standard>
|
||||
@@ -867,7 +817,7 @@ gdk_drag_context_get_type
|
||||
<INCLUDE>gdk/gdkx.h</INCLUDE>
|
||||
<TITLE>X Window System Interaction</TITLE>
|
||||
<FILE>x_interaction</FILE>
|
||||
GDK_WINDOW_XID
|
||||
GDK_SURFACE_XID
|
||||
GDK_DISPLAY_XDISPLAY
|
||||
GDK_POINTER_TO_XID
|
||||
GDK_XID_TO_POINTER
|
||||
@@ -892,7 +842,7 @@ gdk_x11_display_error_trap_push
|
||||
gdk_x11_display_error_trap_pop
|
||||
gdk_x11_display_error_trap_pop_ignored
|
||||
gdk_x11_display_set_cursor_theme
|
||||
gdk_x11_display_set_window_scale
|
||||
gdk_x11_display_set_surface_scale
|
||||
gdk_x11_display_get_glx_version
|
||||
gdk_x11_register_standard_event_type
|
||||
gdk_x11_screen_get_screen_number
|
||||
@@ -903,17 +853,16 @@ gdk_x11_screen_lookup_visual
|
||||
gdk_x11_screen_supports_net_wm_hint
|
||||
gdk_x11_screen_get_number_of_desktops
|
||||
gdk_x11_screen_get_current_desktop
|
||||
gdk_x11_window_foreign_new_for_display
|
||||
gdk_x11_window_lookup_for_display
|
||||
gdk_x11_window_get_xid
|
||||
gdk_x11_window_set_theme_variant
|
||||
gdk_x11_window_set_user_time
|
||||
gdk_x11_window_move_to_current_desktop
|
||||
gdk_x11_window_move_to_desktop
|
||||
gdk_x11_window_get_desktop
|
||||
gdk_x11_window_set_utf8_property
|
||||
gdk_x11_window_set_frame_extents
|
||||
gdk_x11_window_set_frame_sync_enabled
|
||||
gdk_x11_surface_foreign_new_for_display
|
||||
gdk_x11_surface_lookup_for_display
|
||||
gdk_x11_surface_get_xid
|
||||
gdk_x11_surface_set_theme_variant
|
||||
gdk_x11_surface_set_user_time
|
||||
gdk_x11_surface_move_to_current_desktop
|
||||
gdk_x11_surface_move_to_desktop
|
||||
gdk_x11_surface_get_desktop
|
||||
gdk_x11_surface_set_utf8_property
|
||||
gdk_x11_surface_set_frame_sync_enabled
|
||||
gdk_x11_keymap_get_group_for_state
|
||||
gdk_x11_keymap_key_is_modifier
|
||||
gdk_x11_visual_get_xvisual
|
||||
@@ -1006,12 +955,12 @@ GDK_X11_VISUAL_CLASS
|
||||
GDK_IS_X11_VISUAL
|
||||
GDK_IS_X11_VISUAL_CLASS
|
||||
GDK_X11_VISUAL_GET_CLASS
|
||||
GDK_TYPE_X11_WINDOW
|
||||
GDK_X11_WINDOW
|
||||
GDK_X11_WINDOW_CLASS
|
||||
GDK_IS_X11_WINDOW
|
||||
GDK_IS_X11_WINDOW_CLASS
|
||||
GDK_X11_WINDOW_GET_CLASS
|
||||
GDK_TYPE_X11_SURFACE
|
||||
GDK_X11_SURFACE
|
||||
GDK_X11_SURFACE_CLASS
|
||||
GDK_IS_X11_SURFACE
|
||||
GDK_IS_X11_SURFACE_CLASS
|
||||
GDK_X11_SURFACE_GET_CLASS
|
||||
|
||||
<SUBSECTION Private>
|
||||
gdk_x11_app_launch_context_get_type
|
||||
@@ -1028,8 +977,8 @@ gdk_x11_drag_context_get_type
|
||||
gdk_x11_keymap_get_type
|
||||
gdk_x11_screen_get_type
|
||||
gdk_x11_visual_get_type
|
||||
gdk_x11_window_get_type
|
||||
gdk_window_impl_x11_get_type
|
||||
gdk_x11_surface_get_type
|
||||
gdk_surface_impl_x11_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -1042,13 +991,14 @@ gdk_wayland_device_get_wl_pointer
|
||||
gdk_wayland_device_get_wl_seat
|
||||
gdk_wayland_display_get_wl_compositor
|
||||
gdk_wayland_display_get_wl_display
|
||||
gdk_wayland_window_new_subsurface
|
||||
gdk_wayland_window_get_wl_surface
|
||||
gdk_wayland_window_set_use_custom_surface
|
||||
GdkWaylandWindowExported
|
||||
gdk_wayland_window_export_handle
|
||||
gdk_wayland_window_unexport_handle
|
||||
gdk_wayland_window_set_transient_for_exported
|
||||
gdk_wayland_display_query_registry
|
||||
gdk_wayland_surface_new_subsurface
|
||||
gdk_wayland_surface_get_wl_surface
|
||||
gdk_wayland_surface_set_use_custom_surface
|
||||
GdkWaylandSurfaceExported
|
||||
gdk_wayland_surface_export_handle
|
||||
gdk_wayland_surface_unexport_handle
|
||||
gdk_wayland_surface_set_transient_for_exported
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GDK_TYPE_WAYLAND_DEVICE
|
||||
@@ -1069,18 +1019,18 @@ GDK_WAYLAND_DISPLAY_MANAGER_CLASS
|
||||
GDK_WAYLAND_DISPLAY_MANAGER_GET_CLASS
|
||||
GDK_IS_WAYLAND_DISPLAY_MANAGER
|
||||
GDK_IS_WAYLAND_DISPLAY_MANAGER_CLASS
|
||||
GDK_TYPE_WAYLAND_WINDOW
|
||||
GDK_WAYLAND_WINDOW
|
||||
GDK_WAYLAND_WINDOW_CLASS
|
||||
GDK_WAYLAND_WINDOW_GET_CLASS
|
||||
GDK_IS_WAYLAND_WINDOW
|
||||
GDK_IS_WAYLAND_WINDOW_CLASS
|
||||
GDK_TYPE_WAYLAND_SURFACE
|
||||
GDK_WAYLAND_SURFACE
|
||||
GDK_WAYLAND_SURFACE_CLASS
|
||||
GDK_WAYLAND_SURFACE_GET_CLASS
|
||||
GDK_IS_WAYLAND_SURFACE
|
||||
GDK_IS_WAYLAND_SURFACE_CLASS
|
||||
|
||||
<SUBSECTION Private>
|
||||
gdk_wayland_device_get_type
|
||||
gdk_wayland_display_get_type
|
||||
gdk_wayland_display_manager_get_type
|
||||
gdk_wayland_window_get_type
|
||||
gdk_wayland_surface_get_type
|
||||
|
||||
</SECTION>
|
||||
|
||||
@@ -1155,7 +1105,7 @@ gdk_frame_timings_get_type
|
||||
<FILE>gdkdrawcontext</FILE>
|
||||
GdkDrawContext
|
||||
gdk_draw_context_get_display
|
||||
gdk_draw_context_get_window
|
||||
gdk_draw_context_get_surface
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GDK_DRAW_CONTEXT
|
||||
@@ -1171,7 +1121,7 @@ gdk_draw_context_get_type
|
||||
<FILE>gdkglcontext</FILE>
|
||||
GdkGLContext
|
||||
gdk_gl_context_get_display
|
||||
gdk_gl_context_get_window
|
||||
gdk_gl_context_get_surface
|
||||
gdk_gl_context_get_shared_context
|
||||
gdk_gl_context_get_version
|
||||
|
||||
@@ -1236,7 +1186,7 @@ GDK_IS_MONITOR
|
||||
<SECTION>
|
||||
<FILE>gdkdrawingcontext</FILE>
|
||||
GdkDrawingContext
|
||||
gdk_drawing_context_get_window
|
||||
gdk_drawing_context_get_surface
|
||||
gdk_drawing_context_get_clip
|
||||
gdk_drawing_context_get_cairo_context
|
||||
gdk_drawing_context_is_valid
|
||||
|
@@ -11,7 +11,7 @@ gdk_gl_context_get_type
|
||||
gdk_keymap_get_type
|
||||
gdk_monitor_get_type
|
||||
gdk_seat_get_type
|
||||
gdk_window_get_type
|
||||
gdk_surface_get_type
|
||||
gdk_content_serializer_get_type
|
||||
gdk_content_deserializer_get_type
|
||||
gdk_clipboard_get_type
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<SECTION>
|
||||
<FILE>GskRenderer</FILE>
|
||||
gsk_renderer_new_for_window
|
||||
gsk_renderer_get_window
|
||||
gsk_renderer_new_for_surface
|
||||
gsk_renderer_get_surface
|
||||
gsk_renderer_get_display
|
||||
gsk_renderer_realize
|
||||
gsk_renderer_unrealize
|
||||
|
@@ -293,17 +293,6 @@ How to compile GTK+ itself
|
||||
<cmdsynopsis>
|
||||
<command>meson</command>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Ddisable-modules=true</arg>
|
||||
<arg choice="plain">-Ddisable-modules=false</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Dwith-included-immodules=MODULE1,MODULE2,...</arg>
|
||||
<arg choice="plain">-Dwith-included-immodules=all</arg>
|
||||
<arg choice="plain">-Dwith-included-immodules=none</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Ddocumentation=true</arg>
|
||||
<arg choice="plain">-Ddocumentation=false</arg>
|
||||
@@ -315,75 +304,59 @@ How to compile GTK+ itself
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-cups-print-backend=yes</arg>
|
||||
<arg choice="plain">-Denable-cups-print-backend=no</arg>
|
||||
<arg choice="plain">-Denable-cups-print-backend=auto</arg>
|
||||
<arg choice="plain">-Dprint-backends=all</arg>
|
||||
<arg choice="plain">-Dprint-backends=none</arg>
|
||||
<arg choice="plain">-Dprint-backends=cups,lpr,...</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-papi-print-backend=yes</arg>
|
||||
<arg choice="plain">-Denable-papi-print-backend=no</arg>
|
||||
<arg choice="plain">-Denable-papi-print-backend=auto</arg>
|
||||
<arg choice="plain">-Dcolord=yes</arg>
|
||||
<arg choice="plain">-Dcolord=no</arg>
|
||||
<arg choice="plain">-Dcolord=auto</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-cloudprint-print-backend=yes</arg>
|
||||
<arg choice="plain">-Denable-cloudprint-print-backend=no</arg>
|
||||
<arg choice="plain">-Denable-cloudprint-print-backend=auto</arg>
|
||||
<arg choice="plain">-Dvulkan=yes</arg>
|
||||
<arg choice="plain">-Dvulkan=no</arg>
|
||||
<arg choice="plain">-Dvulkan=auto</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-test-print-backend=yes</arg>
|
||||
<arg choice="plain">-Denable-test-print-backend=no</arg>
|
||||
<arg choice="plain">-Denable-test-print-backend=auto</arg>
|
||||
<arg choice="plain">-Dx11-backend=true</arg>
|
||||
<arg choice="plain">-Dx11-backend=false</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-colord=yes</arg>
|
||||
<arg choice="plain">-Denable-colord=no</arg>
|
||||
<arg choice="plain">-Denable-colord=auto</arg>
|
||||
<arg choice="plain">-Dcloudproviders=true</arg>
|
||||
<arg choice="plain">-Dcloudproviders=false</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-vulkan=yes</arg>
|
||||
<arg choice="plain">-Denable-vulkan=no</arg>
|
||||
<arg choice="plain">-Denable-vulkan=auto</arg>
|
||||
<arg choice="plain">-Dxinerama=yes</arg>
|
||||
<arg choice="plain">-Dxinerama=no</arg>
|
||||
<arg choice="plain">-Dxinerama=auto</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-x11-backend=true</arg>
|
||||
<arg choice="plain">-Denable-x11-backend=false</arg>
|
||||
<arg choice="plain">-Dwin32-backend=true</arg>
|
||||
<arg choice="plain">-Dwin32-backend=false</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-xinerama=true</arg>
|
||||
<arg choice="plain">-Denable-xinerama=false</arg>
|
||||
<arg choice="plain">-Dquartz-backend=true</arg>
|
||||
<arg choice="plain">-Dquartz-backend=false</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-win32-backend=true</arg>
|
||||
<arg choice="plain">-Denable-win32-backend=false</arg>
|
||||
<arg choice="plain">-Dbroadway-backend=true</arg>
|
||||
<arg choice="plain">-Dbroadway-backend=false</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-quartz-backend=true</arg>
|
||||
<arg choice="plain">-Denable-quartz-backend=false</arg>
|
||||
<arg choice="plain">-Dwayland-backend=true</arg>
|
||||
<arg choice="plain">-Dwayland-backend=false</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-broadway-backend=true</arg>
|
||||
<arg choice="plain">-Denable-broadway-backend=false</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-wayland-backend=true</arg>
|
||||
<arg choice="plain">-Denable-wayland-backend=false</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">-Denable-mir-backend=true</arg>
|
||||
<arg choice="plain">-Denable-mir-backend=false</arg>
|
||||
</group>
|
||||
<group>
|
||||
<arg choice="plain">-Dintrospection=true</arg>
|
||||
<arg choice="plain">-Dintrospection=false</arg>
|
||||
@@ -392,33 +365,7 @@ How to compile GTK+ itself
|
||||
</para>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>disable-modules</systemitem></title>
|
||||
|
||||
<para>
|
||||
Normally GTK+ will try to build the input method modules
|
||||
as little shared libraries that are loaded on demand.
|
||||
The <systemitem>disable-modules</systemitem> option
|
||||
indicates that they should all be built statically
|
||||
into the GTK+ library instead. This is useful for
|
||||
people who need to produce statically-linked binaries.
|
||||
If <systemitem>disable-modules</systemitem> is not specified,
|
||||
then the <command>configure</command> script will try to
|
||||
auto-detect whether shared modules work on your system.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>with-included-immodules</systemitem></title>
|
||||
|
||||
<para>
|
||||
This option allows you to specify which input method modules you
|
||||
want to include directly into the GTK+ shared library, as opposed
|
||||
to building them as loadable modules.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>enable-xinerama</systemitem></title>
|
||||
<title><systemitem>xinerama</systemitem></title>
|
||||
|
||||
<para>
|
||||
By default GTK+ will try to link against the Xinerama libraries
|
||||
@@ -428,8 +375,8 @@ How to compile GTK+ itself
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>enable-documentation</systemitem> and
|
||||
<systemitem>enable-man-pages</systemitem></title>
|
||||
<title><systemitem>documentation</systemitem> and
|
||||
<systemitem>man-pages</systemitem></title>
|
||||
|
||||
<para>
|
||||
The <application>gtk-doc</application> package is
|
||||
@@ -440,38 +387,33 @@ How to compile GTK+ itself
|
||||
<application>gtk-doc</application> installed and
|
||||
are modifying GTK+, you may want to enable
|
||||
<application>gtk-doc</application> support by passing
|
||||
in <systemitem>enable-documentation</systemitem>.
|
||||
in <systemitem>documentation</systemitem>.
|
||||
</para>
|
||||
<para>
|
||||
Additionally, some tools provided by GTK+ have their own
|
||||
manual pages generated using a similar set of dependencies;
|
||||
if you have <application>xsltproc</application> then you
|
||||
can generate manual pages by passing <systemitem>enable-man-pages</systemitem>
|
||||
can generate manual pages by passing <systemitem>man-pages</systemitem>
|
||||
when configuring the build.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>enable-cups-print-backend</systemitem>,
|
||||
<systemitem>enable-papi-print-backend</systemitem>,
|
||||
<systemitem>enable-cloudprint-print-backend</systemitem>, and
|
||||
<systemitem>enable-test-print-backend</systemitem></title>
|
||||
<title><systemitem>print-backends</systemitem></title>
|
||||
|
||||
<para>
|
||||
By default, GTK+ will try to build various print backends if
|
||||
their dependencies are found. These options can be used to
|
||||
explicitly control whether each print backend should be built
|
||||
or not.
|
||||
their dependencies are found. This option can be used to
|
||||
explicitly control which print backends should be built.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>enable-x11-backend</systemitem>,
|
||||
<systemitem>enable-win32-backend</systemitem>,
|
||||
<systemitem>enable-quartz-backend</systemitem>,
|
||||
<systemitem>enable-broadway-backend</systemitem>,
|
||||
<systemitem>enable-wayland-backend</systemitem>, and
|
||||
<systemitem>enable-mir-backend</systemitem></title>
|
||||
<title><systemitem>x11-backend</systemitem>,
|
||||
<systemitem>win32-backend</systemitem>,
|
||||
<systemitem>quartz-backend</systemitem>,
|
||||
<systemitem>broadway-backend</systemitem> and
|
||||
<systemitem>wayland-backend</systemitem></title>
|
||||
|
||||
<para>
|
||||
Enable specific backends for GDK. If none of these options
|
||||
@@ -496,8 +438,9 @@ How to compile GTK+ itself
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>build-tests</systemitem>
|
||||
<systemitem>demos</systemitem></title>
|
||||
<title><systemitem>build-tests</systemitem>,
|
||||
<systemitem>install-tests</systemitem>,
|
||||
<systemitem>demos</systemitem></title>
|
||||
|
||||
<para>
|
||||
By default, GTK+ will build quite a few tests and demos.
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<link linkend="GdkEvent"><structname>GdkEvent</structname></link>
|
||||
structures and sends them on to the GTK layer. In turn, the GTK layer
|
||||
finds the widget that corresponds to a particular
|
||||
<classname>GdkWindow</classname> and emits the corresponding event
|
||||
<classname>GdkSurface</classname> and emits the corresponding event
|
||||
signals on that widget.
|
||||
</para>
|
||||
|
||||
@@ -207,17 +207,17 @@
|
||||
|
||||
<para>
|
||||
Normally, there is only a single cairo context which is used in
|
||||
the entire repaint, rather than one per GdkWindow. This means you
|
||||
the entire repaint, rather than one per GdkSurface. This means you
|
||||
have to respect (and not reset) existing clip and transformations
|
||||
set on it.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Most widgets, including those that create their own GdkWindows have
|
||||
Most widgets, including those that create their own GdkSurfaces have
|
||||
a transparent background, so they draw on top of whatever widgets
|
||||
are below them. This was not the case in GTK+ 2 where the theme set
|
||||
the background of most widgets to the default background color. (In
|
||||
fact, transparent GdkWindows used to be impossible.)
|
||||
fact, transparent GdkSurfaces used to be impossible.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@@ -263,10 +263,10 @@
|
||||
<para>
|
||||
Two basic functions in GDK form the core of the double-buffering
|
||||
mechanism: <link
|
||||
linkend="gdk_window_begin_paint_region"><function>gdk_window_begin_paint_region()</function></link>
|
||||
linkend="gdk_surface_begin_paint_region"><function>gdk_surface_begin_paint_region()</function></link>
|
||||
and <link
|
||||
linkend="gdk_window_end_paint"><function>gdk_window_end_paint()</function></link>.
|
||||
The first function tells a <classname>GdkWindow</classname> to
|
||||
linkend="gdk_surface_end_paint"><function>gdk_surface_end_paint()</function></link>.
|
||||
The first function tells a <classname>GdkSurface</classname> to
|
||||
create a temporary off-screen buffer for drawing. All
|
||||
subsequent drawing operations to this window get automatically
|
||||
redirected to that buffer. The second function actually paints
|
||||
@@ -278,16 +278,16 @@
|
||||
|
||||
<para>
|
||||
It would be inconvenient for all widgets to call
|
||||
<function>gdk_window_begin_paint_region()</function> and
|
||||
<function>gdk_window_end_paint()</function> at the beginning
|
||||
<function>gdk_surface_begin_paint_region()</function> and
|
||||
<function>gdk_surface_end_paint()</function> at the beginning
|
||||
and end of their draw handlers.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
To make this easier, GTK+ normally calls
|
||||
<function>gdk_window_begin_paint_region()</function>
|
||||
<function>gdk_surface_begin_paint_region()</function>
|
||||
before emitting the #GtkWidget::draw signal, and
|
||||
then it calls <function>gdk_window_end_paint()</function>
|
||||
then it calls <function>gdk_surface_end_paint()</function>
|
||||
after the signal has been emitted. This is convenient for
|
||||
most widgets, as they do not need to worry about creating
|
||||
their own temporary drawing buffers or about calling those
|
||||
@@ -335,8 +335,8 @@ my_widget_init (MyWidget *widget)
|
||||
<para>
|
||||
Even if you turn off double buffering on a widget, you
|
||||
can still call
|
||||
<function>gdk_window_begin_paint_region()</function> and
|
||||
<function>gdk_window_end_paint()</function> by hand to use
|
||||
<function>gdk_surface_begin_paint_region()</function> and
|
||||
<function>gdk_surface_end_paint()</function> by hand to use
|
||||
temporary drawing buffers.
|
||||
</para>
|
||||
</refsect2>
|
||||
|
@@ -137,7 +137,7 @@
|
||||
<para>
|
||||
This is the step in a <glossterm
|
||||
linkend="widget">widget's</glossterm> life cycle where it
|
||||
actually shows the GdkWindows it created when it was
|
||||
actually shows the GdkSurfaces it created when it was
|
||||
<glossterm linkend="realization">realized</glossterm>. When a
|
||||
widget is mapped, it must turn on its
|
||||
%GTK_MAPPED <link linkend="GtkWidgetFlags">flag</link>.
|
||||
@@ -146,7 +146,7 @@
|
||||
<para>
|
||||
Note that due to the asynchronous nature of the X window
|
||||
system, a widget's window may not appear on the screen
|
||||
immediatly after one calls gdk_window_show():
|
||||
immediatly after one calls gdk_surface_show():
|
||||
you must wait for the corresponding map <glossterm
|
||||
linkend="event">event</glossterm> to be received. You can do
|
||||
this with the <link
|
||||
@@ -193,10 +193,10 @@
|
||||
<glossterm>no-window widget</glossterm>
|
||||
<glossdef>
|
||||
<para>
|
||||
A widget that does not have a GdkWindow of its own on which to
|
||||
A widget that does not have a GdkSurface of its own on which to
|
||||
draw its contents, but rather shares its <glossterm
|
||||
linkend="parent">parent's</glossterm>. This can be tested with
|
||||
the gtk_widget_get_has_window() function.
|
||||
the gtk_widget_get_has_surface() function.
|
||||
</para>
|
||||
</glossdef>
|
||||
</glossentry>
|
||||
@@ -218,20 +218,20 @@
|
||||
<para>
|
||||
This is the step in a <glossterm
|
||||
linkend="widget">widget's</glossterm> life cycle where it
|
||||
creates its own GdkWindow, or otherwise associates itself with
|
||||
creates its own GdkSurface, or otherwise associates itself with
|
||||
its <glossterm linkend="parent">parent's</glossterm>
|
||||
GdkWindow. If the widget has its own window, then it must
|
||||
GdkSurface. If the widget has its own window, then it must
|
||||
also attach a <glossterm linkend="style">style</glossterm> to
|
||||
it. A widget becomes unrealized by destroying its associated
|
||||
GdkWindow. When a widget is realized, it must turn on its
|
||||
GdkSurface. When a widget is realized, it must turn on its
|
||||
%GTK_REALIZED <link linkend="GtkWidgetFlags">flag</link>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Widgets that don't own the GdkWindow on which they draw are
|
||||
Widgets that don't own the GdkSurface on which they draw are
|
||||
called <glossterm linkend="no-window">no-window widgets</glossterm>.
|
||||
This can be tested with the gtk_widget_get_has_window() function. Normally,
|
||||
these widgets draw on their parent's GdkWindow.
|
||||
This can be tested with the gtk_widget_get_has_surface() function. Normally,
|
||||
these widgets draw on their parent's GdkSurface.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@@ -183,8 +183,6 @@
|
||||
<xi:include href="xml/gtktoolshell.xml" />
|
||||
<xi:include href="xml/gtktoolbar.xml" />
|
||||
<xi:include href="xml/gtktoolitem.xml" />
|
||||
<xi:include href="xml/gtktoolpalette.xml" />
|
||||
<xi:include href="xml/gtktoolitemgroup.xml" />
|
||||
<xi:include href="xml/gtkseparatortoolitem.xml" />
|
||||
<xi:include href="xml/gtktoolbutton.xml" />
|
||||
<xi:include href="xml/gtkmenutoolbutton.xml" />
|
||||
@@ -210,7 +208,6 @@
|
||||
<xi:include href="xml/gtkfontbutton.xml" />
|
||||
<xi:include href="xml/gtkfontchooserwidget.xml" />
|
||||
<xi:include href="xml/gtkfontchooserdialog.xml" />
|
||||
<xi:include href="xml/gtkplacessidebar.xml" />
|
||||
</chapter>
|
||||
|
||||
<chapter id="Ornaments">
|
||||
@@ -276,11 +273,6 @@
|
||||
<chapter id="RecentDocuments">
|
||||
<title>Recently Used Documents</title>
|
||||
<xi:include href="xml/gtkrecentmanager.xml" />
|
||||
<xi:include href="xml/gtkrecentchooser.xml" />
|
||||
<xi:include href="xml/gtkrecentchooserdialog.xml" />
|
||||
<xi:include href="xml/gtkrecentchoosermenu.xml" />
|
||||
<xi:include href="xml/gtkrecentchooserwidget.xml" />
|
||||
<xi:include href="xml/gtkrecentfilter.xml" />
|
||||
</chapter>
|
||||
|
||||
<chapter id="ApplicationChoosing">
|
||||
@@ -359,7 +351,6 @@
|
||||
<xi:include href="gtk4-demo-application.xml" />
|
||||
<xi:include href="gtk4-widget-factory.xml" />
|
||||
<xi:include href="gtk4-icon-browser.xml" />
|
||||
<xi:include href="gtk4-query-immodules.xml" />
|
||||
<xi:include href="gtk4-update-icon-cache.xml" />
|
||||
<xi:include href="gtk4-encode-symbolic-svg.xml" />
|
||||
<xi:include href="gtk4-builder-tool.xml" />
|
||||
@@ -391,58 +382,6 @@
|
||||
<title>Index of deprecated symbols</title>
|
||||
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-0" role="3.0">
|
||||
<title>Index of new symbols in 3.0</title>
|
||||
<xi:include href="xml/api-index-3.0.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-2" role="3.2">
|
||||
<title>Index of new symbols in 3.2</title>
|
||||
<xi:include href="xml/api-index-3.2.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-4" role="3.4">
|
||||
<title>Index of new symbols in 3.4</title>
|
||||
<xi:include href="xml/api-index-3.4.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-6" role="3.6">
|
||||
<title>Index of new symbols in 3.6</title>
|
||||
<xi:include href="xml/api-index-3.6.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-8" role="3.8">
|
||||
<title>Index of new symbols in 3.8</title>
|
||||
<xi:include href="xml/api-index-3.8.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-10" role="3.10">
|
||||
<title>Index of new symbols in 3.10</title>
|
||||
<xi:include href="xml/api-index-3.10.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-12" role="3.12">
|
||||
<title>Index of new symbols in 3.12</title>
|
||||
<xi:include href="xml/api-index-3.12.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-14" role="3.14">
|
||||
<title>Index of new symbols in 3.14</title>
|
||||
<xi:include href="xml/api-index-3.14.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-16" role="3.16">
|
||||
<title>Index of new symbols in 3.16</title>
|
||||
<xi:include href="xml/api-index-3.16.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-18" role="3.18">
|
||||
<title>Index of new symbols in 3.18</title>
|
||||
<xi:include href="xml/api-index-3.18.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-20" role="3.20">
|
||||
<title>Index of new symbols in 3.20</title>
|
||||
<xi:include href="xml/api-index-3.20.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-22" role="3.22">
|
||||
<title>Index of new symbols in 3.22</title>
|
||||
<xi:include href="xml/api-index-3.22.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-90" role="3.90">
|
||||
<title>Index of new symbols in 3.90</title>
|
||||
<xi:include href="xml/api-index-3.90.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
|
||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
||||
|
||||
|
@@ -1,96 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||
]>
|
||||
<refentry id="gtk4-query-immodules">
|
||||
|
||||
<refentryinfo>
|
||||
<title>gtk4-query-immodules</title>
|
||||
<productname>GTK+</productname>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<contrib>Developer</contrib>
|
||||
<firstname>Matthias</firstname>
|
||||
<surname>Clasen</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
</refentryinfo>
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>gtk4-query-immodules</refentrytitle>
|
||||
<manvolnum>1</manvolnum>
|
||||
<refmiscinfo class="manual">User Commands</refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>gtk4-query-immodules</refname>
|
||||
<refpurpose>Input method module registration utility</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>gtk4-query-immodules</command>
|
||||
<arg choice="opt">--update-cache</arg>
|
||||
<arg choice="opt" rep="repeat">MODULE</arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1><title>Description</title>
|
||||
<para>
|
||||
<command>gtk4-query-immodules</command> collects information about loadable
|
||||
input method modules for GTK+ and writes it to the default cache file
|
||||
location, or to <filename>stdout</filename>.
|
||||
</para>
|
||||
<para>
|
||||
If called without arguments, it looks for modules in the GTK+ input method
|
||||
module path.
|
||||
</para>
|
||||
<para>
|
||||
If called with arguments, it looks for the specified modules. The arguments
|
||||
may be absolute or relative paths.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Normally, the output of <command>gtk4-query-immodules</command> is written
|
||||
to <filename><replaceable>libdir</replaceable>/gtk-4.0/4.0.0/immodules.cache</filename>,
|
||||
where GTK+ looks for it by default. If it is written to some other location,
|
||||
the <envar>GTK_IM_MODULE_FILE</envar> environment variable can be set to point
|
||||
GTK+ at the file.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1><title>Options</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>--update-cache</term>
|
||||
<listitem><para>Write the output to the default cache location instead of
|
||||
<filename>stdout</filename></para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1><title>Files</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><filename><replaceable>libdir</replaceable>/gtk-4.0/4.0.0/immodules.cache</filename></term>
|
||||
<listitem><para>The default im cache file used by GTK+ applications</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1><title>Environment</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><link linkend="gtk-path"><envar>GTK_PATH</envar></link></term>
|
||||
<listitem><para>Prepends directories to the input method module path</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><link linkend="gtk-im-module-file"><envar>GTK_IM_MODULE_FILE</envar></link></term>
|
||||
<listitem><para>Specifies an alternative im module cache for GTK+
|
||||
applications</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
@@ -902,8 +902,6 @@ gtk_entry_set_attributes
|
||||
gtk_entry_get_attributes
|
||||
gtk_entry_set_completion
|
||||
gtk_entry_get_completion
|
||||
gtk_entry_set_cursor_hadjustment
|
||||
gtk_entry_get_cursor_hadjustment
|
||||
gtk_entry_set_progress_fraction
|
||||
gtk_entry_get_progress_fraction
|
||||
gtk_entry_set_progress_pulse_step
|
||||
@@ -914,11 +912,11 @@ gtk_entry_reset_im_context
|
||||
gtk_entry_set_tabs
|
||||
gtk_entry_get_tabs
|
||||
GtkEntryIconPosition
|
||||
gtk_entry_set_icon_from_texture
|
||||
gtk_entry_set_icon_from_paintable
|
||||
gtk_entry_set_icon_from_icon_name
|
||||
gtk_entry_set_icon_from_gicon
|
||||
gtk_entry_get_icon_storage_type
|
||||
gtk_entry_get_icon_texture
|
||||
gtk_entry_get_icon_paintable
|
||||
gtk_entry_get_icon_name
|
||||
gtk_entry_get_icon_gicon
|
||||
gtk_entry_set_icon_activatable
|
||||
@@ -1046,8 +1044,6 @@ gtk_expander_set_use_markup
|
||||
gtk_expander_get_use_markup
|
||||
gtk_expander_set_label_widget
|
||||
gtk_expander_get_label_widget
|
||||
gtk_expander_set_label_fill
|
||||
gtk_expander_get_label_fill
|
||||
gtk_expander_set_resize_toplevel
|
||||
gtk_expander_get_resize_toplevel
|
||||
<SUBSECTION Standard>
|
||||
@@ -1487,7 +1483,6 @@ GtkIconViewPrivate
|
||||
<TITLE>GtkImage</TITLE>
|
||||
GtkImage
|
||||
GtkImageType
|
||||
gtk_image_get_surface
|
||||
gtk_image_get_texture
|
||||
gtk_image_get_icon_name
|
||||
gtk_image_get_gicon
|
||||
@@ -1497,14 +1492,12 @@ gtk_image_new_from_pixbuf
|
||||
gtk_image_new_from_icon_name
|
||||
gtk_image_new_from_gicon
|
||||
gtk_image_new_from_resource
|
||||
gtk_image_new_from_surface
|
||||
gtk_image_new_from_texture
|
||||
gtk_image_set_from_file
|
||||
gtk_image_set_from_pixbuf
|
||||
gtk_image_set_from_icon_name
|
||||
gtk_image_set_from_gicon
|
||||
gtk_image_set_from_resource
|
||||
gtk_image_set_from_surface
|
||||
gtk_image_set_from_texture
|
||||
gtk_image_clear
|
||||
gtk_image_new
|
||||
@@ -1512,6 +1505,10 @@ gtk_image_set_pixel_size
|
||||
gtk_image_get_pixel_size
|
||||
gtk_image_set_icon_size
|
||||
gtk_image_get_icon_size
|
||||
gtk_image_set_keep_aspect_ratio
|
||||
gtk_image_get_keep_aspect_ratio
|
||||
gtk_image_set_can_shrink
|
||||
gtk_image_get_can_shrink
|
||||
<SUBSECTION Standard>
|
||||
GTK_IMAGE
|
||||
GTK_IS_IMAGE
|
||||
@@ -1533,7 +1530,6 @@ GtkImageGIconData
|
||||
<TITLE>GtkIMContext</TITLE>
|
||||
GtkIMContext
|
||||
GtkIMContextClass
|
||||
GtkIMContextInfo
|
||||
gtk_im_context_get_preedit_string
|
||||
gtk_im_context_filter_keypress
|
||||
gtk_im_context_focus_in
|
||||
@@ -2179,143 +2175,6 @@ gtk_range_get_type
|
||||
GtkRangePrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkrecentchooser</FILE>
|
||||
<TITLE>GtkRecentChooser</TITLE>
|
||||
GtkRecentChooser
|
||||
GtkRecentChooserIface
|
||||
GTK_RECENT_CHOOSER_ERROR
|
||||
GtkRecentChooserError
|
||||
gtk_recent_chooser_set_show_private
|
||||
gtk_recent_chooser_get_show_private
|
||||
gtk_recent_chooser_set_show_not_found
|
||||
gtk_recent_chooser_get_show_not_found
|
||||
gtk_recent_chooser_set_show_icons
|
||||
gtk_recent_chooser_get_show_icons
|
||||
gtk_recent_chooser_set_select_multiple
|
||||
gtk_recent_chooser_get_select_multiple
|
||||
gtk_recent_chooser_set_local_only
|
||||
gtk_recent_chooser_get_local_only
|
||||
gtk_recent_chooser_set_limit
|
||||
gtk_recent_chooser_get_limit
|
||||
gtk_recent_chooser_set_show_tips
|
||||
gtk_recent_chooser_get_show_tips
|
||||
GtkRecentSortType
|
||||
gtk_recent_chooser_set_sort_type
|
||||
gtk_recent_chooser_get_sort_type
|
||||
GtkRecentSortFunc
|
||||
gtk_recent_chooser_set_sort_func
|
||||
gtk_recent_chooser_set_current_uri
|
||||
gtk_recent_chooser_get_current_uri
|
||||
gtk_recent_chooser_get_current_item
|
||||
gtk_recent_chooser_select_uri
|
||||
gtk_recent_chooser_unselect_uri
|
||||
gtk_recent_chooser_select_all
|
||||
gtk_recent_chooser_unselect_all
|
||||
gtk_recent_chooser_get_items
|
||||
gtk_recent_chooser_get_uris
|
||||
gtk_recent_chooser_add_filter
|
||||
gtk_recent_chooser_remove_filter
|
||||
gtk_recent_chooser_list_filters
|
||||
gtk_recent_chooser_set_filter
|
||||
gtk_recent_chooser_get_filter
|
||||
<SUBSECTION Standard>
|
||||
GTK_RECENT_CHOOSER
|
||||
GTK_IS_RECENT_CHOOSER
|
||||
GTK_TYPE_RECENT_CHOOSER
|
||||
GTK_RECENT_CHOOSER_GET_IFACE
|
||||
<SUBSECTION Private>
|
||||
gtk_recent_chooser_get_type
|
||||
gtk_recent_chooser_error_quark
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkrecentchooserdialog</FILE>
|
||||
<TITLE>GtkRecentChooserDialog</TITLE>
|
||||
GtkRecentChooserDialog
|
||||
gtk_recent_chooser_dialog_new
|
||||
gtk_recent_chooser_dialog_new_for_manager
|
||||
<SUBSECTION Standard>
|
||||
GTK_RECENT_CHOOSER_DIALOG
|
||||
GTK_IS_RECENT_CHOOSER_DIALOG
|
||||
GTK_TYPE_RECENT_CHOOSER_DIALOG
|
||||
GTK_RECENT_CHOOSER_DIALOG_CLASS
|
||||
GTK_IS_RECENT_CHOOSER_DIALOG_CLASS
|
||||
GTK_RECENT_CHOOSER_DIALOG_GET_CLASS
|
||||
|
||||
<SUBSECTION Private>
|
||||
gtk_recent_chooser_dialog_get_type
|
||||
GtkRecentChooserDialogPrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkrecentchoosermenu</FILE>
|
||||
<TITLE>GtkRecentChooserMenu</TITLE>
|
||||
GtkRecentChooserMenu
|
||||
gtk_recent_chooser_menu_new
|
||||
gtk_recent_chooser_menu_new_for_manager
|
||||
gtk_recent_chooser_menu_get_show_numbers
|
||||
gtk_recent_chooser_menu_set_show_numbers
|
||||
<SUBSECTION Standard>
|
||||
GTK_RECENT_CHOOSER_MENU
|
||||
GTK_IS_RECENT_CHOOSER_MENU
|
||||
GTK_TYPE_RECENT_CHOOSER_MENU
|
||||
GTK_RECENT_CHOOSER_MENU_CLASS
|
||||
GTK_IS_RECENT_CHOOSER_MENU_CLASS
|
||||
GTK_RECENT_CHOOSER_MENU_GET_CLASS
|
||||
|
||||
<SUBSECTION Private>
|
||||
gtk_recent_chooser_menu_get_type
|
||||
GtkRecentChooserMenuPrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkrecentchooserwidget</FILE>
|
||||
<TITLE>GtkRecentChooserWidget</TITLE>
|
||||
GtkRecentChooserWidget
|
||||
gtk_recent_chooser_widget_new
|
||||
gtk_recent_chooser_widget_new_for_manager
|
||||
<SUBSECTION Standard>
|
||||
GTK_RECENT_CHOOSER_WIDGET
|
||||
GTK_IS_RECENT_CHOOSER_WIDGET
|
||||
GTK_TYPE_RECENT_CHOOSER_WIDGET
|
||||
GTK_RECENT_CHOOSER_WIDGET_CLASS
|
||||
GTK_IS_RECENT_CHOOSER_WIDGET_CLASS
|
||||
GTK_RECENT_CHOOSER_WIDGET_GET_CLASS
|
||||
|
||||
<SUBSECTION Private>
|
||||
gtk_recent_chooser_widget_get_type
|
||||
GtkRecentChooserWidgetPrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkrecentfilter</FILE>
|
||||
<TITLE>GtkRecentFilter</TITLE>
|
||||
GtkRecentFilter
|
||||
GtkRecentFilterInfo
|
||||
GtkRecentFilterFlags
|
||||
GtkRecentFilterFunc
|
||||
gtk_recent_filter_new
|
||||
gtk_recent_filter_get_name
|
||||
gtk_recent_filter_set_name
|
||||
gtk_recent_filter_add_mime_type
|
||||
gtk_recent_filter_add_pattern
|
||||
gtk_recent_filter_add_pixbuf_formats
|
||||
gtk_recent_filter_add_application
|
||||
gtk_recent_filter_add_group
|
||||
gtk_recent_filter_add_age
|
||||
gtk_recent_filter_add_custom
|
||||
gtk_recent_filter_get_needed
|
||||
gtk_recent_filter_filter
|
||||
<SUBSECTION Standard>
|
||||
GTK_RECENT_FILTER
|
||||
GTK_IS_RECENT_FILTER
|
||||
GTK_TYPE_RECENT_FILTER
|
||||
|
||||
<SUBSECTION Private>
|
||||
gtk_recent_filter_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkrecentmanager</FILE>
|
||||
<TITLE>GtkRecentManager</TITLE>
|
||||
@@ -3048,7 +2907,7 @@ gtk_text_view_get_line_at_y
|
||||
gtk_text_view_get_line_yrange
|
||||
gtk_text_view_get_iter_at_location
|
||||
gtk_text_view_get_iter_at_position
|
||||
gtk_text_view_buffer_to_window_coords
|
||||
gtk_text_view_buffer_to_surface_coords
|
||||
gtk_text_view_window_to_buffer_coords
|
||||
gtk_text_view_set_border_window_size
|
||||
gtk_text_view_get_border_window_size
|
||||
@@ -3364,78 +3223,6 @@ gtk_toggle_tool_button_get_type
|
||||
GtkToggleToolButtonPrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtktoolitemgroup</FILE>
|
||||
<TITLE>GtkToolItemGroup</TITLE>
|
||||
GtkToolItemGroup
|
||||
GtkToolItemGroupClass
|
||||
gtk_tool_item_group_get_collapsed
|
||||
gtk_tool_item_group_get_drop_item
|
||||
gtk_tool_item_group_get_ellipsize
|
||||
gtk_tool_item_group_get_item_position
|
||||
gtk_tool_item_group_get_n_items
|
||||
gtk_tool_item_group_get_label
|
||||
gtk_tool_item_group_get_label_widget
|
||||
gtk_tool_item_group_get_nth_item
|
||||
gtk_tool_item_group_get_header_relief
|
||||
gtk_tool_item_group_insert
|
||||
gtk_tool_item_group_new
|
||||
gtk_tool_item_group_set_collapsed
|
||||
gtk_tool_item_group_set_ellipsize
|
||||
gtk_tool_item_group_set_item_position
|
||||
gtk_tool_item_group_set_label
|
||||
gtk_tool_item_group_set_label_widget
|
||||
gtk_tool_item_group_set_header_relief
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TOOL_ITEM_GROUP
|
||||
GTK_IS_TOOL_ITEM_GROUP
|
||||
GTK_TYPE_TOOL_ITEM_GROUP
|
||||
GTK_TOOL_ITEM_GROUP_CLASS
|
||||
GTK_IS_TOOL_ITEM_GROUP_CLASS
|
||||
GTK_TOOL_ITEM_GROUP_GET_CLASS
|
||||
|
||||
<SUBSECTION Private>
|
||||
GtkToolItemGroupPrivate
|
||||
gtk_tool_item_group_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtktoolpalette</FILE>
|
||||
<TITLE>GtkToolPalette</TITLE>
|
||||
GtkToolPalette
|
||||
GtkToolPaletteClass
|
||||
gtk_tool_palette_new
|
||||
gtk_tool_palette_get_exclusive
|
||||
gtk_tool_palette_set_exclusive
|
||||
gtk_tool_palette_get_expand
|
||||
gtk_tool_palette_set_expand
|
||||
gtk_tool_palette_get_group_position
|
||||
gtk_tool_palette_set_group_position
|
||||
gtk_tool_palette_get_style
|
||||
gtk_tool_palette_set_style
|
||||
gtk_tool_palette_unset_style
|
||||
gtk_tool_palette_add_drag_dest
|
||||
gtk_tool_palette_get_drag_item
|
||||
gtk_tool_palette_get_drag_target_group
|
||||
gtk_tool_palette_get_drag_target_item
|
||||
gtk_tool_palette_get_drop_group
|
||||
gtk_tool_palette_get_drop_item
|
||||
GtkToolPaletteDragTargets
|
||||
gtk_tool_palette_set_drag_source
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TOOL_PALETTE
|
||||
GTK_IS_TOOL_PALETTE
|
||||
GTK_TYPE_TOOL_PALETTE
|
||||
GTK_TOOL_PALETTE_CLASS
|
||||
GTK_IS_TOOL_PALETTE_CLASS
|
||||
GTK_TOOL_PALETTE_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
gtk_tool_palette_get_type
|
||||
GtkToolPalettePrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtktooltip</FILE>
|
||||
<TITLE>GtkTooltip</TITLE>
|
||||
@@ -4380,6 +4167,15 @@ gtk_volume_button_get_type
|
||||
<FILE>gtksnapshot</FILE>
|
||||
<TITLE>GtkSnapshot</TITLE>
|
||||
GtkSnapshot
|
||||
gtk_snapshot_new
|
||||
gtk_snapshot_ref
|
||||
gtk_snapshot_unref
|
||||
gtk_snapshot_to_node
|
||||
gtk_snapshot_to_paintable
|
||||
gtk_snapshot_free_to_node
|
||||
gtk_snapshot_free_to_paintable
|
||||
gtk_snapshot_get_renderer
|
||||
gtk_snapshot_get_record_names
|
||||
gtk_snapshot_push
|
||||
gtk_snapshot_push_transform
|
||||
gtk_snapshot_push_opacity
|
||||
@@ -4396,6 +4192,7 @@ gtk_snapshot_append_node
|
||||
gtk_snapshot_append_cairo
|
||||
gtk_snapshot_append_texture
|
||||
gtk_snapshot_append_color
|
||||
gtk_snapshot_append_layout
|
||||
gtk_snapshot_clips_rect
|
||||
gtk_snapshot_render_background
|
||||
gtk_snapshot_render_frame
|
||||
@@ -4418,7 +4215,6 @@ gtk_widget_in_destruction
|
||||
gtk_widget_destroyed
|
||||
gtk_widget_unparent
|
||||
gtk_widget_show
|
||||
gtk_widget_show_now
|
||||
gtk_widget_hide
|
||||
gtk_widget_map
|
||||
gtk_widget_unmap
|
||||
@@ -4450,8 +4246,8 @@ gtk_widget_set_name
|
||||
gtk_widget_get_name
|
||||
gtk_widget_set_sensitive
|
||||
gtk_widget_set_parent
|
||||
gtk_widget_set_parent_window
|
||||
gtk_widget_get_parent_window
|
||||
gtk_widget_set_parent_surface
|
||||
gtk_widget_get_parent_surface
|
||||
gtk_widget_get_toplevel
|
||||
gtk_widget_get_ancestor
|
||||
gtk_widget_is_ancestor
|
||||
@@ -4461,7 +4257,6 @@ GtkTextDirection
|
||||
gtk_widget_get_direction
|
||||
gtk_widget_set_default_direction
|
||||
gtk_widget_get_default_direction
|
||||
gtk_widget_shape_combine_region
|
||||
gtk_widget_input_shape_combine_region
|
||||
gtk_widget_create_pango_context
|
||||
gtk_widget_get_pango_context
|
||||
@@ -4507,9 +4302,9 @@ gtk_widget_set_tooltip_window
|
||||
gtk_widget_get_has_tooltip
|
||||
gtk_widget_set_has_tooltip
|
||||
gtk_widget_trigger_tooltip_query
|
||||
gtk_widget_get_window
|
||||
gtk_widget_register_window
|
||||
gtk_widget_unregister_window
|
||||
gtk_widget_get_surface
|
||||
gtk_widget_register_surface
|
||||
gtk_widget_unregister_surface
|
||||
gtk_widget_get_allocated_width
|
||||
gtk_widget_get_allocated_height
|
||||
gtk_widget_get_allocation
|
||||
@@ -4526,8 +4321,8 @@ gtk_widget_get_can_focus
|
||||
gtk_widget_set_can_focus
|
||||
gtk_widget_get_focus_on_click
|
||||
gtk_widget_set_focus_on_click
|
||||
gtk_widget_get_has_window
|
||||
gtk_widget_set_has_window
|
||||
gtk_widget_get_has_surface
|
||||
gtk_widget_set_has_surface
|
||||
gtk_widget_get_sensitive
|
||||
gtk_widget_is_sensitive
|
||||
gtk_widget_get_visible
|
||||
@@ -4542,7 +4337,7 @@ gtk_widget_has_visible_focus
|
||||
gtk_widget_has_grab
|
||||
gtk_widget_is_drawable
|
||||
gtk_widget_is_toplevel
|
||||
gtk_widget_set_window
|
||||
gtk_widget_set_surface
|
||||
gtk_widget_set_receives_default
|
||||
gtk_widget_get_receives_default
|
||||
gtk_widget_set_support_multidevice
|
||||
@@ -4810,9 +4605,6 @@ gtk_main_iteration
|
||||
gtk_main_iteration_do
|
||||
gtk_main_do_event
|
||||
|
||||
GtkModuleInitFunc
|
||||
GtkModuleDisplayInitFunc
|
||||
|
||||
<SUBSECTION>
|
||||
gtk_grab_add
|
||||
gtk_grab_get_current
|
||||
@@ -5150,8 +4942,6 @@ gtk_selection_data_set_text
|
||||
gtk_selection_data_get_text
|
||||
gtk_selection_data_set_pixbuf
|
||||
gtk_selection_data_get_pixbuf
|
||||
gtk_selection_data_set_surface
|
||||
gtk_selection_data_get_surface
|
||||
gtk_selection_data_set_texture
|
||||
gtk_selection_data_get_texture
|
||||
gtk_selection_data_set_uris
|
||||
@@ -5203,16 +4993,15 @@ gtk_drag_unhighlight
|
||||
gtk_drag_begin_with_coordinates
|
||||
gtk_drag_cancel
|
||||
gtk_drag_set_icon_widget
|
||||
gtk_drag_set_icon_surface
|
||||
gtk_drag_set_icon_texture
|
||||
gtk_drag_set_icon_paintable
|
||||
gtk_drag_set_icon_name
|
||||
gtk_drag_set_icon_gicon
|
||||
gtk_drag_set_icon_default
|
||||
gtk_drag_check_threshold
|
||||
gtk_drag_source_set
|
||||
gtk_drag_source_set_icon_surface
|
||||
gtk_drag_source_set_icon_name
|
||||
gtk_drag_source_set_icon_gicon
|
||||
gtk_drag_source_set_icon_paintable
|
||||
gtk_drag_source_unset
|
||||
gtk_drag_source_set_target_list
|
||||
gtk_drag_source_get_target_list
|
||||
@@ -5292,7 +5081,6 @@ gtk_icon_theme_lookup_by_gicon
|
||||
gtk_icon_theme_lookup_by_gicon_for_scale
|
||||
gtk_icon_theme_load_icon
|
||||
gtk_icon_theme_load_icon_for_scale
|
||||
gtk_icon_theme_load_surface
|
||||
gtk_icon_theme_list_contexts
|
||||
gtk_icon_theme_list_icons
|
||||
gtk_icon_theme_get_icon_sizes
|
||||
@@ -5303,7 +5091,6 @@ gtk_icon_info_get_base_size
|
||||
gtk_icon_info_get_base_scale
|
||||
gtk_icon_info_get_filename
|
||||
gtk_icon_info_load_icon
|
||||
gtk_icon_info_load_surface
|
||||
gtk_icon_info_load_texture
|
||||
gtk_icon_info_load_icon_async
|
||||
gtk_icon_info_load_icon_finish
|
||||
@@ -6185,6 +5972,8 @@ gtk_overlay_add_overlay
|
||||
gtk_overlay_reorder_overlay
|
||||
gtk_overlay_get_overlay_pass_through
|
||||
gtk_overlay_set_overlay_pass_through
|
||||
gtk_overlay_get_measure_overlay
|
||||
gtk_overlay_set_measure_overlay
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_OVERLAY
|
||||
|
@@ -127,10 +127,6 @@ gtk_radio_button_get_type
|
||||
gtk_radio_menu_item_get_type
|
||||
gtk_radio_tool_button_get_type
|
||||
gtk_range_get_type
|
||||
gtk_recent_chooser_get_type
|
||||
gtk_recent_chooser_dialog_get_type
|
||||
gtk_recent_chooser_menu_get_type
|
||||
gtk_recent_chooser_widget_get_type
|
||||
gtk_recent_manager_get_type
|
||||
gtk_revealer_get_type
|
||||
gtk_scale_button_get_type
|
||||
@@ -150,6 +146,7 @@ gtk_shortcuts_section_get_type
|
||||
gtk_shortcuts_group_get_type
|
||||
gtk_shortcuts_shortcut_get_type
|
||||
gtk_size_group_get_type
|
||||
gtk_snapshot_get_type
|
||||
gtk_spin_button_get_type
|
||||
gtk_spinner_get_type
|
||||
gtk_stack_get_type
|
||||
@@ -172,8 +169,6 @@ gtk_toggle_tool_button_get_type
|
||||
gtk_toolbar_get_type
|
||||
gtk_tool_button_get_type
|
||||
gtk_tool_item_get_type
|
||||
gtk_tool_item_group_get_type
|
||||
gtk_tool_palette_get_type
|
||||
gtk_tree_drag_dest_get_type
|
||||
gtk_tree_drag_source_get_type
|
||||
gtk_tree_model_filter_get_type
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 32 KiB |
@@ -91,7 +91,7 @@
|
||||
<title>Event propagation</title>
|
||||
|
||||
<para>
|
||||
For widgets which have a #GdkWindow set, events are received from the
|
||||
For widgets which have a #GdkSurface set, events are received from the
|
||||
windowing system and passed to gtk_main_do_event(). See its documentation
|
||||
for details of what it does: compression of enter/leave events,
|
||||
identification of the widget receiving the event, pushing the event onto a
|
||||
@@ -101,11 +101,11 @@
|
||||
|
||||
<para>
|
||||
When a GDK backend produces an input event, it is tied to a #GdkDevice and
|
||||
a #GdkWindow, which in turn represents a windowing system surface in the
|
||||
a #GdkSurface, which in turn represents a windowing system surface in the
|
||||
backend. If a widget has grabbed the current input device, or all input
|
||||
devices, the event is propagated to that #GtkWidget. Otherwise, it is
|
||||
propagated to the the #GtkWidget which called gtk_widget_register_window()
|
||||
on the #GdkWindow receiving the event.
|
||||
propagated to the the #GtkWidget which called gtk_widget_register_surface()
|
||||
on the #GdkSurface receiving the event.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@@ -113,7 +113,7 @@
|
||||
specific input device (gtk_device_grab_add()), is sent events in
|
||||
preference to a global grab (gtk_grab_add()). Input grabs only have effect
|
||||
within the #GtkWindowGroup containing the #GtkWidget which registered the
|
||||
event’s #GdkWindow. If this #GtkWidget is a child of the grab widget, the
|
||||
event’s #GdkSurface. If this #GtkWidget is a child of the grab widget, the
|
||||
event is propagated to the child — this is the basis for propagating
|
||||
events within modal dialogs.
|
||||
</para>
|
||||
@@ -186,15 +186,15 @@
|
||||
Each widget instance has a basic event mask and another per input device,
|
||||
which determine the types of input event it receives. Each event mask set
|
||||
on a widget is added to the corresponding (basic or per-device) event mask
|
||||
for the widget’s #GdkWindow, and all child #GdkWindows.
|
||||
for the widget’s #GdkSurface, and all child #GdkSurfaces.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Filtering events against event masks happens inside #GdkWindow, which
|
||||
Filtering events against event masks happens inside #GdkSurface, which
|
||||
exposes event masks to the windowing system to reduce the number of events
|
||||
GDK receives from it. On receiving an event, it is filtered against the
|
||||
#GdkWindow’s mask for the input device, if set. Otherwise, it is filtered
|
||||
against the #GdkWindow’s basic event mask.
|
||||
#GdkSurface’s mask for the input device, if set. Otherwise, it is filtered
|
||||
against the #GdkSurface’s basic event mask.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@@ -112,7 +112,6 @@ images = [
|
||||
'images/printdialog.png',
|
||||
'images/progressbar.png',
|
||||
'images/radio-group.png',
|
||||
'images/recentchooserdialog.png',
|
||||
'images/right-center.png',
|
||||
'images/right-end.png',
|
||||
'images/right-start.png',
|
||||
@@ -133,7 +132,6 @@ images = [
|
||||
'images/switch.png',
|
||||
'images/toggle-button.png',
|
||||
'images/toolbar.png',
|
||||
'images/toolpalette.png',
|
||||
'images/tree-view-coordinates.png',
|
||||
'images/up-center.png',
|
||||
'images/up-end.png',
|
||||
@@ -160,7 +158,6 @@ content_files = [
|
||||
'gtk4-encode-symbolic-svg.xml',
|
||||
'gtk4-icon-browser.xml',
|
||||
'gtk4-launch.xml',
|
||||
'gtk4-query-immodules.xml',
|
||||
'gtk4-query-settings.xml',
|
||||
'gtk4-update-icon-cache.xml',
|
||||
'gtk4-widget-factory.xml',
|
||||
@@ -263,7 +260,6 @@ if get_option('man-pages') and xsltproc.found()
|
||||
[ 'gtk4-encode-symbolic-svg', '1', ],
|
||||
[ 'gtk4-icon-browser', '1', ],
|
||||
[ 'gtk4-launch', '1', ],
|
||||
[ 'gtk4-query-immodules', '1', ],
|
||||
[ 'gtk4-query-settings', '1', ],
|
||||
[ 'gtk4-update-icon-cache', '1', ],
|
||||
[ 'gtk4-widget-factory', '1', ],
|
||||
|
@@ -52,6 +52,21 @@
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Enable diagnostic warnings</title>
|
||||
<para>
|
||||
Deprecations of properties and signals cannot be caught at compile
|
||||
time, as both properties and signals are installed and used after
|
||||
types have been instantiated. In order to catch deprecations and
|
||||
changes in the run time components, you should use the
|
||||
<envar>G_ENABLE_DIAGNOSTIC</envar> environment variable when
|
||||
running your application, e.g.:
|
||||
<programlisting>
|
||||
G_ENABLE_DIAGNOSTIC=1 ./your-app
|
||||
</programlisting>
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Do not use widget style properties</title>
|
||||
<para>
|
||||
@@ -64,13 +79,13 @@
|
||||
<title>Review your window creation flags</title>
|
||||
<para>
|
||||
GTK+ 4 removes the GDK_WA_CURSOR flag. Instead, just use
|
||||
gdk_window_set_cursor() to set a cursor on the window after
|
||||
gdk_surface_set_cursor() to set a cursor on the window after
|
||||
creating it.
|
||||
</para>
|
||||
<para>
|
||||
GTK+ 4 also removes the GDK_WA_VISUAL flag, and always uses
|
||||
an RGBA visual for windows. To prepare your code for this,
|
||||
use gdk_window_set_visual (gdk_screen_get_rgba_visual ()) after
|
||||
use gdk_surface_set_visual (gdk_screen_get_rgba_visual ()) after
|
||||
creating your window.
|
||||
</para>
|
||||
<para>
|
||||
@@ -135,13 +150,25 @@
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Stop using gdk_pixbuf_get_from_window() and gdk_cairo_set_source_window()</title>
|
||||
<title>Stop using gdk_pixbuf_get_from_window() and gdk_cairo_set_source_surface()</title>
|
||||
<para>
|
||||
These functions are not supported in GTK+ 4. Instead, either use backend-specific
|
||||
APIs, or render your widgets using gtk_widget_render().
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Stop using GtkButton's image-related API</title>
|
||||
<para>
|
||||
The functions and properties related to automatically add a GtkImage
|
||||
to a GtkButton, and using a GtkSetting to control its visibility, are
|
||||
not supported in GTK+ 4. Instead, you can just pack a GtkImage inside
|
||||
a GtkButton, and control its visibility like you would for any other
|
||||
widget. If you only want to add a named icon to a GtkButton, you can
|
||||
use gtk_button_set_icon_name().
|
||||
</para>
|
||||
</section>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
@@ -167,7 +194,7 @@
|
||||
<title>Stop using the root window</title>
|
||||
<para>
|
||||
The root window is an X11-centric concept that is no longer exposed in the
|
||||
backend-neutral GDK API. gdk_window_get_parent() will return %NULL for toplevel
|
||||
backend-neutral GDK API. gdk_surface_get_parent() will return %NULL for toplevel
|
||||
windows. If you need to interact with the X11 root window, you can use
|
||||
gdk_x11_display_get_xrootwindow() to get its XID.
|
||||
</para>
|
||||
@@ -190,12 +217,12 @@
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Adapt to GdkWindow API changes</title>
|
||||
<title>Adapt to GdkSurface API changes</title>
|
||||
<para>
|
||||
The gdk_window_new() function has been replaced by a number of more
|
||||
specialized constructors: gdk_window_new_toplevel(), gdk_window_new_popup(),
|
||||
gdk_window_new_temp(), gdk_window_new_child(), gdk_window_new_input(),
|
||||
gdk_wayland_window_new_subsurface(). Use the appropriate ones to create
|
||||
The gdk_surface_new() function has been replaced by a number of more
|
||||
specialized constructors: gdk_surface_new_toplevel(), gdk_surface_new_popup(),
|
||||
gdk_surface_new_temp(), gdk_surface_new_child(), gdk_surface_new_input(),
|
||||
gdk_wayland_surface_new_subsurface(). Use the appropriate ones to create
|
||||
your windows.
|
||||
</para>
|
||||
<para>
|
||||
@@ -203,7 +230,7 @@
|
||||
complicating the code and could not be supported across backends.
|
||||
</para>
|
||||
<para>
|
||||
gdk_window_reparent() is no longer available.
|
||||
gdk_surface_reparent() is no longer available.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
@@ -217,7 +244,7 @@
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Stop using gdk_window_set_event_compression</title>
|
||||
<title>Stop using gdk_surface_set_event_compression</title>
|
||||
<para>
|
||||
Event compression is now always enabled. If you need to see the uncoalesced
|
||||
motion history, use gdk_event_get_motion_history().
|
||||
@@ -340,7 +367,7 @@
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Stop using APIs to query GdkWindows</title>
|
||||
<title>Stop using APIs to query GdkSurfaces</title>
|
||||
<para>
|
||||
A number of APIs for querying special-purpose windows have been removed,
|
||||
since these windows are no longer publically available:
|
||||
|
@@ -391,14 +391,14 @@ This comes up when using bitfields; in C you can write the following
|
||||
code:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
gdk_window_set_events (gdk_window,
|
||||
gdk_surface_set_events (gdk_surface,
|
||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
while in C++ you must write:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
gdk_window_set_events (gdk_window,
|
||||
gdk_surface_set_events (gdk_surface,
|
||||
(GdkEventMask) GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
|
@@ -122,36 +122,13 @@ additional environment variables.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><envar>GTK3_MODULES</envar></title>
|
||||
|
||||
<para>
|
||||
A list of modules to load. Note that GTK+ also allows to specify modules to load via a commandline option (<option>--gtk-module</option>) and with the <literal>gtk-modules</literal> setting.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><envar>GTK_MODULES</envar></title>
|
||||
|
||||
<para>
|
||||
A list of modules to load in addition to the ones in the <envar>GTK3_MODULES</envar> variable.
|
||||
</para>
|
||||
<warning>
|
||||
Note that this environment variable is read by GTK+ 2.x too,
|
||||
which may not have the same set of modules available for loading.
|
||||
Use <envar>GTK3_MODULES</envar> for modules that are only compatible
|
||||
with GTK+ 3.
|
||||
</warning>
|
||||
</formalpara>
|
||||
|
||||
<formalpara id="gtk-path">
|
||||
<title><envar>GTK_PATH</envar></title>
|
||||
|
||||
<para>
|
||||
Specifies a list of directories to search when GTK+ is looking for
|
||||
dynamically loaded objects such as the modules specified by
|
||||
<envar>GTK_MODULES</envar>, theme engines, input method
|
||||
modules, file system backends and print backends. If the path to
|
||||
dynamically loaded objects such as input method
|
||||
modules and print backends. If the path to
|
||||
the dynamically loaded object is given as an absolute path name,
|
||||
then GTK+ loads it directly.
|
||||
Otherwise, GTK+ goes in turn through the directories in <envar>GTK_PATH</envar>,
|
||||
@@ -206,27 +183,6 @@ additional environment variables.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara id="gtk-im-module-file">
|
||||
<title><envar>GTK_IM_MODULE_FILE</envar></title>
|
||||
|
||||
<para>
|
||||
Specifies the file listing the IM modules to load. This environment
|
||||
variable the default value
|
||||
<filename><replaceable>libdir</replaceable>/gtk-4.0/4.0.0/immodules.cache</filename>
|
||||
(<replaceable>libdir</replaceable> has the same meaning here as explained for <envar>GTK_PATH</envar>).
|
||||
</para>
|
||||
<para>
|
||||
The <filename>immodules.cache</filename> file is generated by the
|
||||
<command>gtk-query-immodules-3.0</command> utility.
|
||||
</para>
|
||||
<warning>
|
||||
Note that this environment variable is read by GTK+ 2.x too, which
|
||||
makes it unsuitable for setting it system-wide (or session-wide),
|
||||
since doing so will cause either GTK+ 2.x applications or GTK+ 3
|
||||
applications to see the wrong list of IM modules.
|
||||
</warning>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><envar>GTK_EXE_PREFIX</envar></title>
|
||||
|
||||
|
@@ -168,9 +168,6 @@
|
||||
<link linkend="GtkToolbar">
|
||||
<inlinegraphic fileref="toolbar.png" format="PNG"></inlinegraphic>
|
||||
</link>
|
||||
<link linkend="GtkToolPalette">
|
||||
<inlinegraphic fileref="toolpalette.png" format="PNG"></inlinegraphic>
|
||||
</link>
|
||||
<link linkend="GtkPlacesSidebar">
|
||||
<inlinegraphic fileref="placessidebar.png" format="PNG"></inlinegraphic>
|
||||
</link>
|
||||
@@ -198,9 +195,6 @@
|
||||
<link linkend="GtkFileChooserDialog">
|
||||
<inlinegraphic fileref="filechooser.png" format="PNG"></inlinegraphic>
|
||||
</link>
|
||||
<link linkend="GtkRecentChooserDialog">
|
||||
<inlinegraphic fileref="recentchooserdialog.png" format="PNG"></inlinegraphic>
|
||||
</link>
|
||||
<link linkend="GtkFontChooserDialog">
|
||||
<inlinegraphic fileref="fontchooser.png" format="PNG"></inlinegraphic>
|
||||
</link>
|
||||
|
@@ -211,20 +211,20 @@ static GList *toplevels;
|
||||
static guint shot_id;
|
||||
|
||||
static gboolean
|
||||
window_is_csd (GdkWindow *window)
|
||||
window_is_csd (GdkSurface *window)
|
||||
{
|
||||
gboolean set;
|
||||
GdkWMDecoration decorations = 0;
|
||||
|
||||
/* FIXME: is this accurate? */
|
||||
set = gdk_window_get_decorations (window, &decorations);
|
||||
set = gdk_surface_get_decorations (window, &decorations);
|
||||
return (set && (decorations == 0));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
shoot_one (WidgetInfo *info)
|
||||
{
|
||||
GdkWindow *window;
|
||||
GdkSurface *window;
|
||||
XID id;
|
||||
GdkPixbuf *screenshot = NULL;
|
||||
DecorationType decor = DECOR_FRAME;
|
||||
@@ -235,8 +235,8 @@ shoot_one (WidgetInfo *info)
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
window = gtk_widget_get_window (info->window);
|
||||
id = gdk_x11_window_get_xid (window);
|
||||
window = gtk_widget_get_surface (info->window);
|
||||
id = gdk_x11_surface_get_xid (window);
|
||||
if (window_is_csd (window))
|
||||
decor = (info->include_decorations) ? DECOR_NONE : DECOR_WINDOW_FRAME;
|
||||
screenshot = take_window_shot (id, decor);
|
||||
|
@@ -448,25 +448,6 @@ create_action_bar (void)
|
||||
return info;
|
||||
}
|
||||
|
||||
static WidgetInfo *
|
||||
create_recent_chooser_dialog (void)
|
||||
{
|
||||
WidgetInfo *info;
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = gtk_recent_chooser_dialog_new ("Recent Chooser Dialog",
|
||||
NULL,
|
||||
"Cancel", GTK_RESPONSE_CANCEL,
|
||||
"Open", GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
gtk_window_set_default_size (GTK_WINDOW (widget), 505, 305);
|
||||
|
||||
info = new_widget_info ("recentchooserdialog", widget, ASIS);
|
||||
info->include_decorations = TRUE;
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
static WidgetInfo *
|
||||
create_text_view (void)
|
||||
{
|
||||
@@ -819,40 +800,6 @@ create_toolbar (void)
|
||||
return new_widget_info ("toolbar", widget, SMALL);
|
||||
}
|
||||
|
||||
static WidgetInfo *
|
||||
create_toolpalette (void)
|
||||
{
|
||||
GtkWidget *widget, *group;
|
||||
GtkToolItem *item;
|
||||
|
||||
widget = gtk_tool_palette_new ();
|
||||
group = gtk_tool_item_group_new ("Tools");
|
||||
gtk_container_add (GTK_CONTAINER (widget), group);
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "help-about");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "document-new");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "folder");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
|
||||
group = gtk_tool_item_group_new ("More tools");
|
||||
gtk_container_add (GTK_CONTAINER (widget), group);
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "edit-cut");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "edit-find");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
item = gtk_tool_button_new (NULL, NULL);
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "document-properties");
|
||||
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
|
||||
|
||||
return new_widget_info ("toolpalette", widget, MEDIUM);
|
||||
}
|
||||
|
||||
static WidgetInfo *
|
||||
create_menubar (void)
|
||||
{
|
||||
@@ -1474,7 +1421,6 @@ get_all_widgets (void)
|
||||
retval = g_list_prepend (retval, create_headerbar ());
|
||||
retval = g_list_prepend (retval, create_stack ());
|
||||
retval = g_list_prepend (retval, create_stack_switcher ());
|
||||
retval = g_list_prepend (retval, create_toolpalette ());
|
||||
retval = g_list_prepend (retval, create_spinner ());
|
||||
retval = g_list_prepend (retval, create_about_dialog ());
|
||||
retval = g_list_prepend (retval, create_accel_label ());
|
||||
@@ -1511,7 +1457,6 @@ get_all_widgets (void)
|
||||
retval = g_list_prepend (retval, create_window ());
|
||||
retval = g_list_prepend (retval, create_filesel ());
|
||||
retval = g_list_prepend (retval, create_assistant ());
|
||||
retval = g_list_prepend (retval, create_recent_chooser_dialog ());
|
||||
retval = g_list_prepend (retval, create_page_setup_dialog ());
|
||||
retval = g_list_prepend (retval, create_print_dialog ());
|
||||
retval = g_list_prepend (retval, create_volume_button ());
|
||||
|
@@ -62,23 +62,23 @@ GtkWidget, public flags:
|
||||
GTK_TOPLEVEL:
|
||||
Widgets without a real parent, as there are GtkWindows and
|
||||
GtkMenus have this flag set throughout their lifetime.
|
||||
Toplevel widgets always contain their own GdkWindow.
|
||||
Toplevel widgets always contain their own GdkSurface.
|
||||
|
||||
GTK_NO_WINDOW:
|
||||
This flag is indicative for a widget that does not provide
|
||||
its own GdkWindow. Visible action (e.g. drawing) is performed
|
||||
on the parent's GdkWindow.
|
||||
its own GdkSurface. Visible action (e.g. drawing) is performed
|
||||
on the parent's GdkSurface.
|
||||
|
||||
GTK_REALIZED:
|
||||
Set by gtk_widget_realize, unset by gtk_widget_unrealize.
|
||||
Relies on ((widget->parent && widget->parent->window)
|
||||
|| GTK_WIDGET_TOPLEVEL (widget));
|
||||
Means: widget has an associated GdkWindow (XWindow).
|
||||
Means: widget has an associated GdkSurface (XWindow).
|
||||
|
||||
GTK_MAPPED:
|
||||
Set by gtk_widget_map, unset by gtk_widget_unmap.
|
||||
May only be set if GTK_WIDGET_REALIZED (widget).
|
||||
Means: gdk_window_show() has been called on the widgets window(s).
|
||||
Means: gdk_surface_show() has been called on the widgets window(s).
|
||||
|
||||
GTK_VISIBLE:
|
||||
Set by gtk_widget_show.
|
||||
@@ -329,7 +329,7 @@ Adding to a container
|
||||
|
||||
When a widget is added to a container, the container:
|
||||
|
||||
1) calls gtk_widget_set_parent_window (widget, window) if
|
||||
1) calls gtk_widget_set_parent_surface (widget, window) if
|
||||
the widget is being added to something other than container->window
|
||||
2) calls gtk_widget_set_parent (widget, container)
|
||||
|
||||
@@ -364,7 +364,7 @@ When a widget receives the "realize" signal it should:
|
||||
|
||||
1) set the realized flag
|
||||
2) set widget->window
|
||||
widget->window = gtk_widget_get_parent_window (widget);
|
||||
widget->window = gtk_widget_get_parent_surface (widget);
|
||||
g_object_ref (widget->window);
|
||||
3) attach the widget's style
|
||||
|
||||
@@ -374,7 +374,7 @@ When a widget receives the "realize" signal it should:
|
||||
|
||||
1) set the REALIZED flag
|
||||
2) create windows with the parent obtained from
|
||||
gtk_widget_get_parent_window (widget);
|
||||
gtk_widget_get_parent_surface (widget);
|
||||
3) attach the widget's style
|
||||
4) set the background color for the new window based on the style
|
||||
|
||||
@@ -382,7 +382,7 @@ The Map signal
|
||||
--------------
|
||||
|
||||
1) Set the MAPPED flag
|
||||
2) If the widget has any windows, gdk_window_show those windows
|
||||
2) If the widget has any windows, gdk_surface_show those windows
|
||||
3) call gtk_widget_map for all child widgets that are
|
||||
VISIBLE, CHILD_VISIBLE and !MAPPED. (A widget will only
|
||||
be !CHILD_VISIBLE if the container set it that way, so
|
||||
@@ -395,7 +395,7 @@ The Unmap signal
|
||||
|
||||
When a widget receives the unmap signal, it must:
|
||||
|
||||
1) If the widget has a window, gdk_window_hide that window,
|
||||
1) If the widget has a window, gdk_surface_hide that window,
|
||||
2) If the widget does not have a window, unmap all child widgets
|
||||
3) Do any other functions related to taking the widget offscreen
|
||||
(for instance, removing popup windows...)
|
||||
@@ -409,8 +409,8 @@ When a widget receives the unrealize signal, it must
|
||||
|
||||
1) For any windows other than widget->window do:
|
||||
|
||||
gdk_window_set_user_data (window, NULL);
|
||||
gdk_window_destroy (window);
|
||||
gdk_surface_set_user_data (window, NULL);
|
||||
gdk_surface_destroy (window);
|
||||
|
||||
2) Call the parent's unrealize handler
|
||||
|
||||
|
@@ -30,9 +30,9 @@ size_allocate_cb (GtkWidget *widget,
|
||||
surface = NULL;
|
||||
}
|
||||
|
||||
if (gtk_widget_get_window (widget))
|
||||
if (gtk_widget_get_surface (widget))
|
||||
{
|
||||
surface = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
|
||||
surface = gdk_surface_create_similar_surface (gtk_widget_get_surface (widget),
|
||||
CAIRO_CONTENT_COLOR,
|
||||
gtk_widget_get_width (widget),
|
||||
gtk_widget_get_height (widget));
|
||||
|
@@ -30,7 +30,7 @@
|
||||
#define __GDKBROADWAY_H_INSIDE__
|
||||
|
||||
#include <gdk/broadway/gdkbroadwaydisplay.h>
|
||||
#include <gdk/broadway/gdkbroadwaywindow.h>
|
||||
#include <gdk/broadway/gdkbroadwaysurface.h>
|
||||
#include <gdk/broadway/gdkbroadwaycursor.h>
|
||||
#include <gdk/broadway/gdkbroadwaymonitor.h>
|
||||
|
||||
|
@@ -43,9 +43,9 @@ typedef struct _GdkBroadwayDisplayClass GdkBroadwayDisplayClass;
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_broadway_display_get_type (void);
|
||||
|
||||
GDK_AVAILABLE_IN_3_12
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_broadway_display_show_keyboard (GdkBroadwayDisplay *display);
|
||||
GDK_AVAILABLE_IN_3_12
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_broadway_display_hide_keyboard (GdkBroadwayDisplay *display);
|
||||
|
||||
G_END_DECLS
|
||||
|
@@ -37,7 +37,7 @@ G_BEGIN_DECLS
|
||||
typedef struct _GdkBroadwayMonitor GdkBroadwayMonitor;
|
||||
typedef struct _GdkBroadwayMonitorClass GdkBroadwayMonitorClass;
|
||||
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_broadway_monitor_get_type (void) G_GNUC_CONST;
|
||||
|
||||
G_END_DECLS
|
||||
|
@@ -22,33 +22,33 @@
|
||||
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
||||
*/
|
||||
|
||||
#ifndef __GDK_BROADWAY_WINDOW_H__
|
||||
#define __GDK_BROADWAY_WINDOW_H__
|
||||
#ifndef __GDK_BROADWAY_SURFACE_H__
|
||||
#define __GDK_BROADWAY_SURFACE_H__
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GDK_TYPE_BROADWAY_WINDOW (gdk_broadway_window_get_type ())
|
||||
#define GDK_BROADWAY_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_BROADWAY_WINDOW, GdkBroadwayWindow))
|
||||
#define GDK_BROADWAY_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_BROADWAY_WINDOW, GdkBroadwayWindowClass))
|
||||
#define GDK_IS_BROADWAY_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_BROADWAY_WINDOW))
|
||||
#define GDK_IS_BROADWAY_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_BROADWAY_WINDOW))
|
||||
#define GDK_BROADWAY_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_BROADWAY_WINDOW, GdkBroadwayWindowClass))
|
||||
#define GDK_TYPE_BROADWAY_SURFACE (gdk_broadway_surface_get_type ())
|
||||
#define GDK_BROADWAY_SURFACE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_BROADWAY_SURFACE, GdkBroadwaySurface))
|
||||
#define GDK_BROADWAY_SURFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_BROADWAY_SURFACE, GdkBroadwaySurfaceClass))
|
||||
#define GDK_IS_BROADWAY_SURFACE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_BROADWAY_SURFACE))
|
||||
#define GDK_IS_BROADWAY_SURFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_BROADWAY_SURFACE))
|
||||
#define GDK_BROADWAY_SURFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_BROADWAY_SURFACE, GdkBroadwaySurfaceClass))
|
||||
|
||||
#ifdef GDK_COMPILATION
|
||||
typedef struct _GdkBroadwayWindow GdkBroadwayWindow;
|
||||
typedef struct _GdkBroadwaySurface GdkBroadwaySurface;
|
||||
#else
|
||||
typedef GdkWindow GdkBroadwayWindow;
|
||||
typedef GdkSurface GdkBroadwaySurface;
|
||||
#endif
|
||||
typedef struct _GdkBroadwayWindowClass GdkBroadwayWindowClass;
|
||||
typedef struct _GdkBroadwaySurfaceClass GdkBroadwaySurfaceClass;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_broadway_window_get_type (void);
|
||||
GType gdk_broadway_surface_get_type (void);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
guint32 gdk_broadway_get_last_seen_time (GdkWindow *window);
|
||||
guint32 gdk_broadway_get_last_seen_time (GdkSurface *surface);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_BROADWAY_WINDOW_H__ */
|
||||
#endif /* __GDK_BROADWAY_SURFACE_H__ */
|
@@ -20,50 +20,50 @@
|
||||
|
||||
#include "gdkdevice-broadway.h"
|
||||
|
||||
#include "gdkwindow.h"
|
||||
#include "gdksurface.h"
|
||||
#include "gdkprivate-broadway.h"
|
||||
|
||||
static gboolean gdk_broadway_device_get_history (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
guint32 start,
|
||||
guint32 stop,
|
||||
GdkTimeCoord ***events,
|
||||
gint *n_events);
|
||||
GdkSurface *surface,
|
||||
guint32 start,
|
||||
guint32 stop,
|
||||
GdkTimeCoord ***events,
|
||||
gint *n_events);
|
||||
static void gdk_broadway_device_get_state (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
gdouble *axes,
|
||||
GdkModifierType *mask);
|
||||
static void gdk_broadway_device_set_window_cursor (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
GdkCursor *cursor);
|
||||
GdkSurface *surface,
|
||||
gdouble *axes,
|
||||
GdkModifierType *mask);
|
||||
static void gdk_broadway_device_set_surface_cursor (GdkDevice *device,
|
||||
GdkSurface *surface,
|
||||
GdkCursor *cursor);
|
||||
static void gdk_broadway_device_warp (GdkDevice *device,
|
||||
gdouble x,
|
||||
gdouble y);
|
||||
gdouble x,
|
||||
gdouble y);
|
||||
static void gdk_broadway_device_query_state (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
GdkWindow **child_window,
|
||||
GdkSurface *surface,
|
||||
GdkSurface **child_surface,
|
||||
gdouble *root_x,
|
||||
gdouble *root_y,
|
||||
gdouble *win_x,
|
||||
gdouble *win_y,
|
||||
GdkModifierType *mask);
|
||||
static GdkGrabStatus gdk_broadway_device_grab (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
gboolean owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkWindow *confine_to,
|
||||
GdkCursor *cursor,
|
||||
guint32 time_);
|
||||
GdkSurface *surface,
|
||||
gboolean owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkSurface *confine_to,
|
||||
GdkCursor *cursor,
|
||||
guint32 time_);
|
||||
static void gdk_broadway_device_ungrab (GdkDevice *device,
|
||||
guint32 time_);
|
||||
static GdkWindow * gdk_broadway_device_window_at_position (GdkDevice *device,
|
||||
gdouble *win_x,
|
||||
gdouble *win_y,
|
||||
GdkModifierType *mask,
|
||||
gboolean get_toplevel);
|
||||
static void gdk_broadway_device_select_window_events (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
GdkEventMask event_mask);
|
||||
guint32 time_);
|
||||
static GdkSurface * gdk_broadway_device_surface_at_position (GdkDevice *device,
|
||||
gdouble *win_x,
|
||||
gdouble *win_y,
|
||||
GdkModifierType *mask,
|
||||
gboolean get_toplevel);
|
||||
static void gdk_broadway_device_select_surface_events (GdkDevice *device,
|
||||
GdkSurface *surface,
|
||||
GdkEventMask event_mask);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GdkBroadwayDevice, gdk_broadway_device, GDK_TYPE_DEVICE)
|
||||
@@ -75,13 +75,13 @@ gdk_broadway_device_class_init (GdkBroadwayDeviceClass *klass)
|
||||
|
||||
device_class->get_history = gdk_broadway_device_get_history;
|
||||
device_class->get_state = gdk_broadway_device_get_state;
|
||||
device_class->set_window_cursor = gdk_broadway_device_set_window_cursor;
|
||||
device_class->set_surface_cursor = gdk_broadway_device_set_surface_cursor;
|
||||
device_class->warp = gdk_broadway_device_warp;
|
||||
device_class->query_state = gdk_broadway_device_query_state;
|
||||
device_class->grab = gdk_broadway_device_grab;
|
||||
device_class->ungrab = gdk_broadway_device_ungrab;
|
||||
device_class->window_at_position = gdk_broadway_device_window_at_position;
|
||||
device_class->select_window_events = gdk_broadway_device_select_window_events;
|
||||
device_class->surface_at_position = gdk_broadway_device_surface_at_position;
|
||||
device_class->select_surface_events = gdk_broadway_device_select_surface_events;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -97,24 +97,24 @@ gdk_broadway_device_init (GdkBroadwayDevice *device_core)
|
||||
|
||||
static gboolean
|
||||
gdk_broadway_device_get_history (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
guint32 start,
|
||||
guint32 stop,
|
||||
GdkTimeCoord ***events,
|
||||
gint *n_events)
|
||||
GdkSurface *surface,
|
||||
guint32 start,
|
||||
guint32 stop,
|
||||
GdkTimeCoord ***events,
|
||||
gint *n_events)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_device_get_state (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
gdouble *axes,
|
||||
GdkModifierType *mask)
|
||||
GdkSurface *surface,
|
||||
gdouble *axes,
|
||||
GdkModifierType *mask)
|
||||
{
|
||||
gdouble x, y;
|
||||
|
||||
gdk_window_get_device_position_double (window, device, &x, &y, mask);
|
||||
gdk_surface_get_device_position_double (surface, device, &x, &y, mask);
|
||||
|
||||
if (axes)
|
||||
{
|
||||
@@ -124,28 +124,28 @@ gdk_broadway_device_get_state (GdkDevice *device,
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_device_set_window_cursor (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
GdkCursor *cursor)
|
||||
gdk_broadway_device_set_surface_cursor (GdkDevice *device,
|
||||
GdkSurface *surface,
|
||||
GdkCursor *cursor)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_device_warp (GdkDevice *device,
|
||||
gdouble x,
|
||||
gdouble y)
|
||||
gdouble x,
|
||||
gdouble y)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_device_query_state (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
GdkWindow **child_window,
|
||||
gdouble *root_x,
|
||||
gdouble *root_y,
|
||||
gdouble *win_x,
|
||||
gdouble *win_y,
|
||||
GdkModifierType *mask)
|
||||
GdkSurface *surface,
|
||||
GdkSurface **child_surface,
|
||||
gdouble *root_x,
|
||||
gdouble *root_y,
|
||||
gdouble *win_x,
|
||||
gdouble *win_y,
|
||||
GdkModifierType *mask)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
GdkBroadwayDisplay *broadway_display;
|
||||
@@ -160,10 +160,10 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
||||
broadway_display = GDK_BROADWAY_DISPLAY (display);
|
||||
|
||||
_gdk_broadway_server_query_mouse (broadway_display->server,
|
||||
&mouse_toplevel_id,
|
||||
&device_root_x,
|
||||
&device_root_y,
|
||||
&mask32);
|
||||
&mouse_toplevel_id,
|
||||
&device_root_x,
|
||||
&device_root_y,
|
||||
&mask32);
|
||||
|
||||
if (root_x)
|
||||
*root_x = device_root_x;
|
||||
@@ -175,25 +175,25 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
||||
*win_y = device_root_y;
|
||||
if (mask)
|
||||
*mask = mask32;
|
||||
if (child_window)
|
||||
if (child_surface)
|
||||
{
|
||||
GdkWindow *mouse_toplevel;
|
||||
GdkSurface *mouse_toplevel;
|
||||
|
||||
mouse_toplevel = g_hash_table_lookup (broadway_display->id_ht, GUINT_TO_POINTER (mouse_toplevel_id));
|
||||
if (window == NULL)
|
||||
*child_window = mouse_toplevel;
|
||||
if (surface == NULL)
|
||||
*child_surface = mouse_toplevel;
|
||||
else
|
||||
*child_window = NULL;
|
||||
*child_surface = NULL;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_broadway_window_grab_check_unmap (GdkWindow *window,
|
||||
gulong serial)
|
||||
_gdk_broadway_surface_grab_check_unmap (GdkSurface *surface,
|
||||
gulong serial)
|
||||
{
|
||||
GdkDisplay *display = gdk_window_get_display (window);
|
||||
GdkDisplay *display = gdk_surface_get_display (surface);
|
||||
GdkSeat *seat;
|
||||
GList *devices, *d;
|
||||
|
||||
@@ -203,18 +203,18 @@ _gdk_broadway_window_grab_check_unmap (GdkWindow *window,
|
||||
devices = g_list_prepend (devices, gdk_seat_get_keyboard (seat));
|
||||
devices = g_list_prepend (devices, gdk_seat_get_pointer (seat));
|
||||
|
||||
/* End all grabs on the newly hidden window */
|
||||
/* End all grabs on the newly hidden surface */
|
||||
for (d = devices; d; d = d->next)
|
||||
_gdk_display_end_device_grab (display, d->data, serial, window, TRUE);
|
||||
_gdk_display_end_device_grab (display, d->data, serial, surface, TRUE);
|
||||
|
||||
g_list_free (devices);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_gdk_broadway_window_grab_check_destroy (GdkWindow *window)
|
||||
_gdk_broadway_surface_grab_check_destroy (GdkSurface *surface)
|
||||
{
|
||||
GdkDisplay *display = gdk_window_get_display (window);
|
||||
GdkDisplay *display = gdk_surface_get_display (surface);
|
||||
GdkSeat *seat;
|
||||
GdkDeviceGrabInfo *grab;
|
||||
GList *devices, *d;
|
||||
@@ -227,14 +227,14 @@ _gdk_broadway_window_grab_check_destroy (GdkWindow *window)
|
||||
|
||||
for (d = devices; d; d = d->next)
|
||||
{
|
||||
/* Make sure there is no lasting grab in this native window */
|
||||
/* Make sure there is no lasting grab in this native surface */
|
||||
grab = _gdk_display_get_last_device_grab (display, d->data);
|
||||
|
||||
if (grab && grab->native_window == window)
|
||||
{
|
||||
grab->serial_end = grab->serial_start;
|
||||
grab->implicit_ungrab = TRUE;
|
||||
}
|
||||
if (grab && grab->native_surface == surface)
|
||||
{
|
||||
grab->serial_end = grab->serial_start;
|
||||
grab->implicit_ungrab = TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -244,12 +244,12 @@ _gdk_broadway_window_grab_check_destroy (GdkWindow *window)
|
||||
|
||||
static GdkGrabStatus
|
||||
gdk_broadway_device_grab (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
gboolean owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkWindow *confine_to,
|
||||
GdkCursor *cursor,
|
||||
guint32 time_)
|
||||
GdkSurface *surface,
|
||||
gboolean owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkSurface *confine_to,
|
||||
GdkCursor *cursor,
|
||||
guint32 time_)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
GdkBroadwayDisplay *broadway_display;
|
||||
@@ -266,10 +266,10 @@ gdk_broadway_device_grab (GdkDevice *device,
|
||||
{
|
||||
/* Device is a pointer */
|
||||
return _gdk_broadway_server_grab_pointer (broadway_display->server,
|
||||
GDK_WINDOW_IMPL_BROADWAY (window->impl)->id,
|
||||
owner_events,
|
||||
event_mask,
|
||||
time_);
|
||||
GDK_SURFACE_IMPL_BROADWAY (surface->impl)->id,
|
||||
owner_events,
|
||||
event_mask,
|
||||
time_);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -280,7 +280,7 @@ gdk_broadway_device_grab (GdkDevice *device,
|
||||
|
||||
static void
|
||||
gdk_broadway_device_ungrab (GdkDevice *device,
|
||||
guint32 time_)
|
||||
guint32 time_)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
GdkBroadwayDisplay *broadway_display;
|
||||
@@ -300,34 +300,34 @@ gdk_broadway_device_ungrab (GdkDevice *device,
|
||||
serial = _gdk_broadway_server_ungrab_pointer (broadway_display->server, time_);
|
||||
|
||||
if (serial != 0)
|
||||
{
|
||||
grab = _gdk_display_get_last_device_grab (display, device);
|
||||
if (grab &&
|
||||
(time_ == GDK_CURRENT_TIME ||
|
||||
grab->time == GDK_CURRENT_TIME ||
|
||||
!TIME_IS_LATER (grab->time, time_)))
|
||||
grab->serial_end = serial;
|
||||
}
|
||||
{
|
||||
grab = _gdk_display_get_last_device_grab (display, device);
|
||||
if (grab &&
|
||||
(time_ == GDK_CURRENT_TIME ||
|
||||
grab->time == GDK_CURRENT_TIME ||
|
||||
!TIME_IS_LATER (grab->time, time_)))
|
||||
grab->serial_end = serial;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
gdk_broadway_device_window_at_position (GdkDevice *device,
|
||||
gdouble *win_x,
|
||||
gdouble *win_y,
|
||||
GdkModifierType *mask,
|
||||
gboolean get_toplevel)
|
||||
static GdkSurface *
|
||||
gdk_broadway_device_surface_at_position (GdkDevice *device,
|
||||
gdouble *win_x,
|
||||
gdouble *win_y,
|
||||
GdkModifierType *mask,
|
||||
gboolean get_toplevel)
|
||||
{
|
||||
GdkWindow *window;
|
||||
GdkSurface *surface;
|
||||
|
||||
gdk_broadway_device_query_state (device, NULL, &window, NULL, NULL, win_x, win_y, mask);
|
||||
gdk_broadway_device_query_state (device, NULL, &surface, NULL, NULL, win_x, win_y, mask);
|
||||
|
||||
return window;
|
||||
return surface;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_device_select_window_events (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
GdkEventMask event_mask)
|
||||
gdk_broadway_device_select_surface_events (GdkDevice *device,
|
||||
GdkSurface *surface,
|
||||
GdkEventMask event_mask)
|
||||
{
|
||||
}
|
||||
|
@@ -181,10 +181,10 @@ _gdk_broadway_display_size_changed (GdkDisplay *display,
|
||||
toplevels = broadway_display->toplevels;
|
||||
for (l = toplevels; l != NULL; l = l->next)
|
||||
{
|
||||
GdkWindowImplBroadway *toplevel_impl = l->data;
|
||||
GdkSurfaceImplBroadway *toplevel_impl = l->data;
|
||||
|
||||
if (toplevel_impl->maximized)
|
||||
gdk_window_move_resize (toplevel_impl->wrapper, 0, 0, msg->width, msg->height);
|
||||
gdk_surface_move_resize (toplevel_impl->wrapper, 0, 0, msg->width, msg->height);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +313,7 @@ gdk_broadway_display_has_pending (GdkDisplay *display)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
static GdkSurface *
|
||||
gdk_broadway_display_get_default_group (GdkDisplay *display)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
|
||||
@@ -520,7 +520,7 @@ gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
|
||||
object_class->dispose = gdk_broadway_display_dispose;
|
||||
object_class->finalize = gdk_broadway_display_finalize;
|
||||
|
||||
display_class->window_type = GDK_TYPE_BROADWAY_WINDOW;
|
||||
display_class->surface_type = GDK_TYPE_BROADWAY_SURFACE;
|
||||
|
||||
display_class->get_name = gdk_broadway_display_get_name;
|
||||
display_class->beep = gdk_broadway_display_beep;
|
||||
@@ -534,7 +534,7 @@ gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
|
||||
|
||||
display_class->get_next_serial = gdk_broadway_display_get_next_serial;
|
||||
display_class->notify_startup_complete = gdk_broadway_display_notify_startup_complete;
|
||||
display_class->create_window_impl = _gdk_broadway_display_create_window_impl;
|
||||
display_class->create_surface_impl = _gdk_broadway_display_create_surface_impl;
|
||||
display_class->get_keymap = _gdk_broadway_display_get_keymap;
|
||||
display_class->text_property_to_utf8_list = _gdk_broadway_display_text_property_to_utf8_list;
|
||||
display_class->utf8_to_string_target = _gdk_broadway_display_utf8_to_string_target;
|
||||
|
@@ -26,7 +26,7 @@
|
||||
|
||||
#include "gdkdisplayprivate.h"
|
||||
#include "gdkkeys.h"
|
||||
#include "gdkwindow.h"
|
||||
#include "gdksurface.h"
|
||||
#include "gdkinternals.h"
|
||||
#include "gdkbroadway-server.h"
|
||||
#include "gdkmonitorprivate.h"
|
||||
|
@@ -84,63 +84,36 @@ gdk_broadway_drag_context_finalize (GObject *object)
|
||||
/* Drag Contexts */
|
||||
|
||||
GdkDragContext *
|
||||
_gdk_broadway_window_drag_begin (GdkWindow *window,
|
||||
GdkDevice *device,
|
||||
GdkContentProvider *content,
|
||||
GdkDragAction actions,
|
||||
gint dx,
|
||||
gint dy)
|
||||
_gdk_broadway_surface_drag_begin (GdkSurface *surface,
|
||||
GdkDevice *device,
|
||||
GdkContentProvider *content,
|
||||
GdkDragAction actions,
|
||||
gint dx,
|
||||
gint dy)
|
||||
{
|
||||
GdkDragContext *new_context;
|
||||
|
||||
g_return_val_if_fail (window != NULL, NULL);
|
||||
g_return_val_if_fail (GDK_WINDOW_IS_BROADWAY (window), NULL);
|
||||
g_return_val_if_fail (surface != NULL, NULL);
|
||||
g_return_val_if_fail (GDK_SURFACE_IS_BROADWAY (surface), NULL);
|
||||
|
||||
new_context = g_object_new (GDK_TYPE_BROADWAY_DRAG_CONTEXT,
|
||||
"display", gdk_window_get_display (window),
|
||||
"display", gdk_surface_get_display (surface),
|
||||
"content", content,
|
||||
NULL);
|
||||
NULL);
|
||||
|
||||
return new_context;
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
gdk_broadway_drag_context_find_window (GdkDragContext *context,
|
||||
GdkWindow *drag_window,
|
||||
gint x_root,
|
||||
gint y_root,
|
||||
GdkDragProtocol *protocol)
|
||||
{
|
||||
g_return_val_if_fail (context != NULL, NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_broadway_drag_context_drag_motion (GdkDragContext *context,
|
||||
GdkWindow *dest_window,
|
||||
GdkDragProtocol protocol,
|
||||
gint x_root,
|
||||
gint y_root,
|
||||
GdkDragAction suggested_action,
|
||||
GdkDragAction possible_actions,
|
||||
guint32 time)
|
||||
{
|
||||
g_return_val_if_fail (context != NULL, FALSE);
|
||||
g_return_val_if_fail (dest_window == NULL || GDK_WINDOW_IS_BROADWAY (dest_window), FALSE);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_drag_context_drag_drop (GdkDragContext *context,
|
||||
guint32 time)
|
||||
guint32 time)
|
||||
{
|
||||
g_return_if_fail (context != NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_drag_context_drag_abort (GdkDragContext *context,
|
||||
guint32 time)
|
||||
guint32 time)
|
||||
{
|
||||
g_return_if_fail (context != NULL);
|
||||
}
|
||||
@@ -149,30 +122,30 @@ gdk_broadway_drag_context_drag_abort (GdkDragContext *context,
|
||||
|
||||
static void
|
||||
gdk_broadway_drag_context_drag_status (GdkDragContext *context,
|
||||
GdkDragAction action,
|
||||
guint32 time)
|
||||
GdkDragAction action,
|
||||
guint32 time)
|
||||
{
|
||||
g_return_if_fail (context != NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_drag_context_drop_reply (GdkDragContext *context,
|
||||
gboolean ok,
|
||||
guint32 time)
|
||||
gboolean ok,
|
||||
guint32 time)
|
||||
{
|
||||
g_return_if_fail (context != NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_drag_context_drop_finish (GdkDragContext *context,
|
||||
gboolean success,
|
||||
guint32 time)
|
||||
gboolean success,
|
||||
guint32 time)
|
||||
{
|
||||
g_return_if_fail (context != NULL);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_broadway_window_register_dnd (GdkWindow *window)
|
||||
_gdk_broadway_surface_register_dnd (GdkSurface *surface)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -197,9 +170,7 @@ gdk_broadway_drag_context_class_init (GdkBroadwayDragContextClass *klass)
|
||||
|
||||
object_class->finalize = gdk_broadway_drag_context_finalize;
|
||||
|
||||
context_class->find_window = gdk_broadway_drag_context_find_window;
|
||||
context_class->drag_status = gdk_broadway_drag_context_drag_status;
|
||||
context_class->drag_motion = gdk_broadway_drag_context_drag_motion;
|
||||
context_class->drag_abort = gdk_broadway_drag_context_drag_abort;
|
||||
context_class->drag_drop = gdk_broadway_drag_context_drag_drop;
|
||||
context_class->drop_reply = gdk_broadway_drag_context_drop_reply;
|
||||
|
@@ -60,14 +60,10 @@ gdk_event_source_prepare (GSource *source,
|
||||
GdkDisplay *display = ((GdkEventSource*) source)->display;
|
||||
gboolean retval;
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
*timeout = -1;
|
||||
|
||||
retval = (_gdk_event_queue_find_first (display) != NULL);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -77,16 +73,12 @@ gdk_event_source_check (GSource *source)
|
||||
GdkEventSource *event_source = (GdkEventSource*) source;
|
||||
gboolean retval;
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
if (event_source->display->event_pause_count > 0 ||
|
||||
event_source->event_poll_fd.revents & G_IO_IN)
|
||||
retval = (_gdk_event_queue_find_first (event_source->display) != NULL);
|
||||
else
|
||||
retval = FALSE;
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -96,7 +88,7 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
GdkDisplay *display;
|
||||
GdkBroadwayDisplay *display_broadway;
|
||||
GdkSeat *seat;
|
||||
GdkWindow *window;
|
||||
GdkSurface *surface;
|
||||
GdkEvent *event = NULL;
|
||||
GList *node;
|
||||
GSList *list, *d;
|
||||
@@ -121,11 +113,11 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
|
||||
switch (message->base.type) {
|
||||
case BROADWAY_EVENT_ENTER:
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (window)
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (GDK_ENTER_NOTIFY);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->crossing.time = message->base.time;
|
||||
event->crossing.x = message->pointer.win_x;
|
||||
event->crossing.y = message->pointer.win_y;
|
||||
@@ -141,11 +133,11 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
}
|
||||
break;
|
||||
case BROADWAY_EVENT_LEAVE:
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (window)
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (GDK_LEAVE_NOTIFY);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->crossing.time = message->base.time;
|
||||
event->crossing.x = message->pointer.win_x;
|
||||
event->crossing.y = message->pointer.win_y;
|
||||
@@ -164,11 +156,11 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
if (_gdk_broadway_moveresize_handle_event (display, message))
|
||||
break;
|
||||
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (window)
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (GDK_MOTION_NOTIFY);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->motion.time = message->base.time;
|
||||
event->motion.x = message->pointer.win_x;
|
||||
event->motion.y = message->pointer.win_y;
|
||||
@@ -188,11 +180,11 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
_gdk_broadway_moveresize_handle_event (display, message))
|
||||
break;
|
||||
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (window)
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (message->base.type == 'b' ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->button.time = message->base.time;
|
||||
event->button.x = message->pointer.win_x;
|
||||
event->button.y = message->pointer.win_y;
|
||||
@@ -208,11 +200,11 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
|
||||
break;
|
||||
case BROADWAY_EVENT_SCROLL:
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (window)
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (GDK_SCROLL);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->scroll.time = message->base.time;
|
||||
event->scroll.x = message->pointer.win_x;
|
||||
event->scroll.y = message->pointer.win_y;
|
||||
@@ -227,8 +219,8 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
|
||||
break;
|
||||
case BROADWAY_EVENT_TOUCH:
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->touch.event_surface_id));
|
||||
if (window)
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->touch.event_surface_id));
|
||||
if (surface)
|
||||
{
|
||||
GdkEventType event_type = 0;
|
||||
|
||||
@@ -251,7 +243,7 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
break;
|
||||
|
||||
event = gdk_event_new (event_type);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->touch.sequence = GUINT_TO_POINTER(message->touch.sequence_id);
|
||||
event->touch.emulating_pointer = message->touch.is_emulated;
|
||||
event->touch.time = message->base.time;
|
||||
@@ -282,12 +274,12 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
break;
|
||||
case BROADWAY_EVENT_KEY_PRESS:
|
||||
case BROADWAY_EVENT_KEY_RELEASE:
|
||||
window = g_hash_table_lookup (display_broadway->id_ht,
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht,
|
||||
GINT_TO_POINTER (message->key.surface_id));
|
||||
if (window)
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (message->base.type == 'k' ? GDK_KEY_PRESS : GDK_KEY_RELEASE);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->key.time = message->base.time;
|
||||
event->key.keyval = message->key.key;
|
||||
event->key.state = message->key.state;
|
||||
@@ -307,14 +299,14 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
break;
|
||||
|
||||
case BROADWAY_EVENT_CONFIGURE_NOTIFY:
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->configure_notify.id));
|
||||
if (window)
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->configure_notify.id));
|
||||
if (surface)
|
||||
{
|
||||
window->x = message->configure_notify.x;
|
||||
window->y = message->configure_notify.y;
|
||||
surface->x = message->configure_notify.x;
|
||||
surface->y = message->configure_notify.y;
|
||||
|
||||
event = gdk_event_new (GDK_CONFIGURE);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->configure.x = message->configure_notify.x;
|
||||
event->configure.y = message->configure_notify.y;
|
||||
event->configure.width = message->configure_notify.width;
|
||||
@@ -323,20 +315,20 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
node = _gdk_event_queue_append (display, event);
|
||||
_gdk_windowing_got_event (display, node, event, message->base.serial);
|
||||
|
||||
if (window->resize_count >= 1)
|
||||
if (surface->resize_count >= 1)
|
||||
{
|
||||
window->resize_count -= 1;
|
||||
surface->resize_count -= 1;
|
||||
|
||||
if (window->resize_count == 0)
|
||||
_gdk_broadway_moveresize_configure_done (display, window);
|
||||
if (surface->resize_count == 0)
|
||||
_gdk_broadway_moveresize_configure_done (display, surface);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case BROADWAY_EVENT_ROUNDTRIP_NOTIFY:
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->roundtrip_notify.id));
|
||||
if (window)
|
||||
_gdk_broadway_roundtrip_notify (window, message->roundtrip_notify.tag, message->roundtrip_notify.local);
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->roundtrip_notify.id));
|
||||
if (surface)
|
||||
_gdk_broadway_roundtrip_notify (surface, message->roundtrip_notify.tag, message->roundtrip_notify.local);
|
||||
break;
|
||||
|
||||
case BROADWAY_EVENT_SCREEN_SIZE_CHANGED:
|
||||
@@ -344,21 +336,21 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
break;
|
||||
|
||||
case BROADWAY_EVENT_FOCUS:
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->focus.old_id));
|
||||
if (window)
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->focus.old_id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (GDK_FOCUS_CHANGE);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->focus_change.in = FALSE;
|
||||
gdk_event_set_device (event, gdk_seat_get_pointer (seat));
|
||||
node = _gdk_event_queue_append (display, event);
|
||||
_gdk_windowing_got_event (display, node, event, message->base.serial);
|
||||
}
|
||||
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->focus.new_id));
|
||||
if (window)
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->focus.new_id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (GDK_FOCUS_CHANGE);
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->focus_change.in = TRUE;
|
||||
gdk_event_set_device (event, gdk_seat_get_pointer (seat));
|
||||
node = _gdk_event_queue_append (display, event);
|
||||
@@ -385,8 +377,6 @@ gdk_event_source_dispatch (GSource *source,
|
||||
GdkDisplay *display = ((GdkEventSource*) source)->display;
|
||||
GdkEvent *event;
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
event = gdk_display_get_event (display);
|
||||
|
||||
if (event)
|
||||
@@ -396,8 +386,6 @@ gdk_event_source_dispatch (GSource *source,
|
||||
gdk_event_free (event);
|
||||
}
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@@ -31,53 +31,51 @@
|
||||
|
||||
#include <gdk/gdkcursor.h>
|
||||
#include <gdk/gdkinternals.h>
|
||||
#include "gdkwindow-broadway.h"
|
||||
#include "gdksurface-broadway.h"
|
||||
#include "gdkdisplay-broadway.h"
|
||||
|
||||
#include "gdkbroadwaycursor.h"
|
||||
#include "gdkbroadwaywindow.h"
|
||||
|
||||
void _gdk_broadway_resync_windows (void);
|
||||
#include "gdkbroadwaysurface.h"
|
||||
|
||||
guint32 gdk_broadway_display_ensure_texture (GdkDisplay *display,
|
||||
GdkTexture *texture);
|
||||
GdkTexture *texture);
|
||||
|
||||
void gdk_broadway_window_set_nodes (GdkWindow *window,
|
||||
GArray *nodes,
|
||||
GPtrArray *node_textures);
|
||||
void gdk_broadway_surface_set_nodes (GdkSurface *surface,
|
||||
GArray *nodes,
|
||||
GPtrArray *node_textures);
|
||||
|
||||
void _gdk_broadway_window_register_dnd (GdkWindow *window);
|
||||
GdkDragContext * _gdk_broadway_window_drag_begin (GdkWindow *window,
|
||||
GdkDevice *device,
|
||||
GdkContentProvider *content,
|
||||
GdkDragAction actions,
|
||||
gint dx,
|
||||
gint dy);
|
||||
void _gdk_broadway_window_translate (GdkWindow *window,
|
||||
cairo_region_t *area,
|
||||
gint dx,
|
||||
gint dy);
|
||||
gboolean _gdk_broadway_moveresize_handle_event (GdkDisplay *display,
|
||||
BroadwayInputMsg *msg);
|
||||
gboolean _gdk_broadway_moveresize_configure_done (GdkDisplay *display,
|
||||
GdkWindow *window);
|
||||
void _gdk_broadway_roundtrip_notify (GdkWindow *window,
|
||||
guint32 tag,
|
||||
gboolean local_reply);
|
||||
void _gdk_broadway_window_grab_check_destroy (GdkWindow *window);
|
||||
void _gdk_broadway_window_grab_check_unmap (GdkWindow *window,
|
||||
gulong serial);
|
||||
void _gdk_broadway_surface_register_dnd (GdkSurface *surface);
|
||||
GdkDragContext * _gdk_broadway_surface_drag_begin (GdkSurface *surface,
|
||||
GdkDevice *device,
|
||||
GdkContentProvider *content,
|
||||
GdkDragAction actions,
|
||||
gint dx,
|
||||
gint dy);
|
||||
void _gdk_broadway_surface_translate (GdkSurface *surface,
|
||||
cairo_region_t *area,
|
||||
gint dx,
|
||||
gint dy);
|
||||
gboolean _gdk_broadway_moveresize_handle_event (GdkDisplay *display,
|
||||
BroadwayInputMsg *msg);
|
||||
gboolean _gdk_broadway_moveresize_configure_done (GdkDisplay *display,
|
||||
GdkSurface *surface);
|
||||
void _gdk_broadway_roundtrip_notify (GdkSurface *surface,
|
||||
guint32 tag,
|
||||
gboolean local_reply);
|
||||
void _gdk_broadway_surface_grab_check_destroy (GdkSurface *surface);
|
||||
void _gdk_broadway_surface_grab_check_unmap (GdkSurface *surface,
|
||||
gulong serial);
|
||||
|
||||
void _gdk_keymap_keys_changed (GdkDisplay *display);
|
||||
gint _gdk_broadway_get_group_for_state (GdkDisplay *display,
|
||||
GdkModifierType state);
|
||||
GdkModifierType state);
|
||||
void _gdk_keymap_add_virtual_modifiers_compat (GdkKeymap *keymap,
|
||||
GdkModifierType *modifiers);
|
||||
gboolean _gdk_keymap_key_is_modifier (GdkKeymap *keymap,
|
||||
guint keycode);
|
||||
guint keycode);
|
||||
|
||||
void _gdk_broadway_display_size_changed (GdkDisplay *display,
|
||||
BroadwayInputScreenResizeNotify *msg);
|
||||
BroadwayInputScreenResizeNotify *msg);
|
||||
|
||||
void _gdk_broadway_events_got_input (BroadwayInputMsg *message);
|
||||
|
||||
@@ -86,7 +84,7 @@ void _gdk_broadway_display_init_dnd (GdkDisplay *display);
|
||||
GdkDisplay * _gdk_broadway_display_open (const gchar *display_name);
|
||||
void _gdk_broadway_display_queue_events (GdkDisplay *display);
|
||||
GdkCursor*_gdk_broadway_display_get_cursor_for_name (GdkDisplay *display,
|
||||
const gchar *name);
|
||||
const gchar *name);
|
||||
GdkCursor *_gdk_broadway_display_get_cursor_for_texture (GdkDisplay *display,
|
||||
GdkTexture *texture,
|
||||
int x,
|
||||
@@ -94,37 +92,37 @@ GdkCursor *_gdk_broadway_display_get_cursor_for_texture (GdkDisplay *display,
|
||||
gboolean _gdk_broadway_display_supports_cursor_alpha (GdkDisplay *display);
|
||||
gboolean _gdk_broadway_display_supports_cursor_color (GdkDisplay *display);
|
||||
void _gdk_broadway_display_get_default_cursor_size (GdkDisplay *display,
|
||||
guint *width,
|
||||
guint *height);
|
||||
guint *width,
|
||||
guint *height);
|
||||
void _gdk_broadway_display_get_maximal_cursor_size (GdkDisplay *display,
|
||||
guint *width,
|
||||
guint *height);
|
||||
void _gdk_broadway_display_create_window_impl (GdkDisplay *display,
|
||||
GdkWindow *window,
|
||||
GdkWindow *real_parent,
|
||||
GdkEventMask event_mask,
|
||||
GdkWindowAttr *attributes);
|
||||
guint *width,
|
||||
guint *height);
|
||||
void _gdk_broadway_display_create_surface_impl (GdkDisplay *display,
|
||||
GdkSurface *surface,
|
||||
GdkSurface *real_parent,
|
||||
GdkEventMask event_mask,
|
||||
GdkSurfaceAttr *attributes);
|
||||
gint _gdk_broadway_display_text_property_to_utf8_list (GdkDisplay *display,
|
||||
GdkAtom encoding,
|
||||
gint format,
|
||||
const guchar *text,
|
||||
gint length,
|
||||
gchar ***list);
|
||||
GdkAtom encoding,
|
||||
gint format,
|
||||
const guchar *text,
|
||||
gint length,
|
||||
gchar ***list);
|
||||
gchar *_gdk_broadway_display_utf8_to_string_target (GdkDisplay *display,
|
||||
const gchar *str);
|
||||
const gchar *str);
|
||||
GdkKeymap* _gdk_broadway_display_get_keymap (GdkDisplay *display);
|
||||
void _gdk_broadway_display_consume_all_input (GdkDisplay *display);
|
||||
BroadwayInputMsg * _gdk_broadway_display_block_for_input (GdkDisplay *display,
|
||||
char op,
|
||||
guint32 serial,
|
||||
gboolean remove);
|
||||
char op,
|
||||
guint32 serial,
|
||||
gboolean remove);
|
||||
|
||||
/* Window methods - testing */
|
||||
void _gdk_broadway_window_resize_surface (GdkWindow *window);
|
||||
/* Surface methods - testing */
|
||||
void _gdk_broadway_surface_resize_surface (GdkSurface *surface);
|
||||
|
||||
void _gdk_broadway_cursor_update_theme (GdkCursor *cursor);
|
||||
void _gdk_broadway_cursor_display_finalize (GdkDisplay *display);
|
||||
|
||||
#define GDK_WINDOW_IS_BROADWAY(win) (GDK_IS_WINDOW_IMPL_BROADWAY (((GdkWindow *)win)->impl))
|
||||
#define GDK_SURFACE_IS_BROADWAY(win) (GDK_IS_SURFACE_IMPL_BROADWAY (((GdkSurface *)win)->impl))
|
||||
|
||||
#endif /* __GDK_PRIVATE_BROADWAY_H__ */
|
||||
|
1419
gdk/broadway/gdksurface-broadway.c
Normal file
1419
gdk/broadway/gdksurface-broadway.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -22,31 +22,31 @@
|
||||
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
||||
*/
|
||||
|
||||
#ifndef __GDK_WINDOW_BROADWAY_H__
|
||||
#define __GDK_WINDOW_BROADWAY_H__
|
||||
#ifndef __GDK_SURFACE_BROADWAY_H__
|
||||
#define __GDK_SURFACE_BROADWAY_H__
|
||||
|
||||
#include <gdk/gdkwindowimpl.h>
|
||||
#include <gdk/gdksurfaceimpl.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct _GdkWindowImplBroadway GdkWindowImplBroadway;
|
||||
typedef struct _GdkWindowImplBroadwayClass GdkWindowImplBroadwayClass;
|
||||
typedef struct _GdkSurfaceImplBroadway GdkSurfaceImplBroadway;
|
||||
typedef struct _GdkSurfaceImplBroadwayClass GdkSurfaceImplBroadwayClass;
|
||||
|
||||
/* Window implementation for Broadway
|
||||
/* Surface implementation for Broadway
|
||||
*/
|
||||
|
||||
#define GDK_TYPE_WINDOW_IMPL_BROADWAY (gdk_window_impl_broadway_get_type ())
|
||||
#define GDK_WINDOW_IMPL_BROADWAY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW_IMPL_BROADWAY, GdkWindowImplBroadway))
|
||||
#define GDK_WINDOW_IMPL_BROADWAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW_IMPL_BROADWAY, GdkWindowImplBroadwayClass))
|
||||
#define GDK_IS_WINDOW_IMPL_BROADWAY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW_IMPL_BROADWAY))
|
||||
#define GDK_IS_WINDOW_IMPL_BROADWAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW_IMPL_BROADWAY))
|
||||
#define GDK_WINDOW_IMPL_BROADWAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW_IMPL_BROADWAY, GdkWindowImplBroadwayClass))
|
||||
#define GDK_TYPE_SURFACE_IMPL_BROADWAY (gdk_surface_impl_broadway_get_type ())
|
||||
#define GDK_SURFACE_IMPL_BROADWAY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_SURFACE_IMPL_BROADWAY, GdkSurfaceImplBroadway))
|
||||
#define GDK_SURFACE_IMPL_BROADWAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_SURFACE_IMPL_BROADWAY, GdkSurfaceImplBroadwayClass))
|
||||
#define GDK_IS_SURFACE_IMPL_BROADWAY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_SURFACE_IMPL_BROADWAY))
|
||||
#define GDK_IS_SURFACE_IMPL_BROADWAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_SURFACE_IMPL_BROADWAY))
|
||||
#define GDK_SURFACE_IMPL_BROADWAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_SURFACE_IMPL_BROADWAY, GdkSurfaceImplBroadwayClass))
|
||||
|
||||
struct _GdkWindowImplBroadway
|
||||
struct _GdkSurfaceImplBroadway
|
||||
{
|
||||
GdkWindowImpl parent_instance;
|
||||
GdkSurfaceImpl parent_instance;
|
||||
|
||||
GdkWindow *wrapper;
|
||||
GdkSurface *wrapper;
|
||||
|
||||
GdkCursor *cursor;
|
||||
|
||||
@@ -61,24 +61,23 @@ struct _GdkWindowImplBroadway
|
||||
int pre_maximize_width;
|
||||
int pre_maximize_height;
|
||||
|
||||
gint8 toplevel_window_type;
|
||||
gboolean dirty;
|
||||
gboolean last_synced;
|
||||
|
||||
GdkGeometry geometry_hints;
|
||||
GdkWindowHints geometry_hints_mask;
|
||||
GdkSurfaceHints geometry_hints_mask;
|
||||
|
||||
GArray *node_data;
|
||||
GPtrArray *node_data_textures;
|
||||
};
|
||||
|
||||
struct _GdkWindowImplBroadwayClass
|
||||
struct _GdkSurfaceImplBroadwayClass
|
||||
{
|
||||
GdkWindowImplClass parent_class;
|
||||
GdkSurfaceImplClass parent_class;
|
||||
};
|
||||
|
||||
GType gdk_window_impl_broadway_get_type (void);
|
||||
GType gdk_surface_impl_broadway_get_type (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_WINDOW_BROADWAY_H__ */
|
||||
#endif /* __GDK_SURFACE_BROADWAY_H__ */
|
File diff suppressed because it is too large
Load Diff
21
gdk/broadway/gen-c-array.py
Normal file
21
gdk/broadway/gen-c-array.py
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--array-name', help='The name of the array variable')
|
||||
parser.add_argument('--output', metavar='FILE', help='Output file',
|
||||
type=argparse.FileType('w'),
|
||||
default=sys.stdout)
|
||||
parser.add_argument('input', metavar='FILE', help='The input file',
|
||||
type=argparse.FileType('r'))
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
args.output.write('static const char {}[] = {{\n'.format(args.array_name))
|
||||
for line in args.input:
|
||||
for ch in line:
|
||||
args.output.write(' 0x{:02x},\n'.format(ord(ch)))
|
||||
|
||||
args.output.write('};')
|
@@ -12,12 +12,12 @@ gdk_broadway_sources = files([
|
||||
'gdkkeys-broadway.c',
|
||||
'gdkmonitor-broadway.c',
|
||||
'gdkselection-broadway.c',
|
||||
'gdkwindow-broadway.c',
|
||||
'gdksurface-broadway.c',
|
||||
])
|
||||
|
||||
gdk_broadway_public_headers = [
|
||||
'gdkbroadwaydisplay.h',
|
||||
'gdkbroadwaywindow.h',
|
||||
'gdkbroadwaysurface.h',
|
||||
'gdkbroadwaycursor.h',
|
||||
'gdkbroadwaymonitor.h',
|
||||
]
|
||||
@@ -28,11 +28,18 @@ gdk_broadway_public_headers = [
|
||||
|
||||
gdk_broadway_deps = [shmlib]
|
||||
|
||||
gen_c_array = find_program('gen-c-array.py')
|
||||
|
||||
clienthtml_h = custom_target('clienthtml.h',
|
||||
input : 'client.html',
|
||||
output : 'clienthtml.h',
|
||||
command : [find_program('toarray.pl'), 'client_html', '@INPUT@'],
|
||||
capture : true)
|
||||
command : [
|
||||
gen_c_array,
|
||||
'--array-name=client_html',
|
||||
'--output=@OUTPUT@',
|
||||
'@INPUT@',
|
||||
],
|
||||
)
|
||||
|
||||
libgdk_broadway = static_library('gdk-broadway',
|
||||
clienthtml_h,
|
||||
@@ -52,13 +59,18 @@ broadwayd_syslib = os_win32 ? find_library('ws2_32') : shmlib
|
||||
broadwayjs_h = custom_target('broadwayjs.h',
|
||||
input : ['broadway.js'],
|
||||
output : 'broadwayjs.h',
|
||||
command : [find_program('toarray.pl'), 'broadway_js', '@INPUT0@'],
|
||||
capture : true)
|
||||
command : [
|
||||
gen_c_array,
|
||||
'--array-name=broadway_js',
|
||||
'--output=@OUTPUT@',
|
||||
'@INPUT0@',
|
||||
],
|
||||
)
|
||||
|
||||
executable('gtk4-broadwayd',
|
||||
clienthtml_h, broadwayjs_h,
|
||||
'broadwayd.c', 'broadway-server.c', 'broadway-output.c',
|
||||
include_directories: [confinc, gdkinc],
|
||||
include_directories: [confinc, gdkinc, include_directories('.')],
|
||||
c_args: ['-DGDK_COMPILATION', '-DG_LOG_DOMAIN="Gdk"', ],
|
||||
dependencies : [broadwayd_syslib, gdk_deps],
|
||||
install : true)
|
||||
|
@@ -1,24 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use warnings;
|
||||
|
||||
my $ARRAYNAME = $ARGV[0];
|
||||
my $first = 0;
|
||||
print "static const char $ARRAYNAME\[\] = {";
|
||||
|
||||
for ($i = 1; $i <= $#ARGV; $i = $i + 1) {
|
||||
my $FILENAME = $ARGV[$i];
|
||||
open FILE, $FILENAME or die "Cannot open $FILENAME";
|
||||
while (my $line = <FILE>) {
|
||||
foreach my $c (split //, $line) {
|
||||
if ($first == 1) {
|
||||
printf (",\n");
|
||||
}
|
||||
printf ("0x%02x", ord ($c));
|
||||
$first = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print "};\n";
|
||||
|
@@ -22,17 +22,21 @@
|
||||
#ifndef __GI_SCANNER__
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkAppLaunchContext, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkClipboard, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkCursor, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkDevice, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkDisplay, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkDisplayManager, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkDragContext, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkDrawingContext, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkDrawContext, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkFrameClock, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkGLContext, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkKeymap, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkMonitor, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkSeat, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkWindow, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkVulkanContext, g_object_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkSurface, g_object_unref)
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkContentFormats, gdk_content_formats_unref)
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkEvent, gdk_event_free)
|
||||
|
@@ -10,22 +10,20 @@ GdkDisplay * gdk_display_open_default (void);
|
||||
|
||||
gboolean gdk_device_grab_info (GdkDisplay *display,
|
||||
GdkDevice *device,
|
||||
GdkWindow **grab_window,
|
||||
GdkSurface **grab_surface,
|
||||
gboolean *owner_events);
|
||||
|
||||
void gdk_add_option_entries (GOptionGroup *group);
|
||||
|
||||
void gdk_pre_parse (void);
|
||||
|
||||
void gdk_window_freeze_toplevel_updates (GdkWindow *window);
|
||||
void gdk_window_thaw_toplevel_updates (GdkWindow *window);
|
||||
void gdk_surface_freeze_toplevel_updates (GdkSurface *surface);
|
||||
void gdk_surface_thaw_toplevel_updates (GdkSurface *surface);
|
||||
|
||||
gboolean gdk_window_supports_edge_constraints (GdkWindow *window);
|
||||
gboolean gdk_surface_supports_edge_constraints (GdkSurface *surface);
|
||||
|
||||
void gdk_window_move_to_rect (GdkWindow *window,
|
||||
void gdk_surface_move_to_rect (GdkSurface *surface,
|
||||
const GdkRectangle *rect,
|
||||
GdkGravity rect_anchor,
|
||||
GdkGravity window_anchor,
|
||||
GdkGravity surface_anchor,
|
||||
GdkAnchorHints anchor_hints,
|
||||
gint rect_anchor_dx,
|
||||
gint rect_anchor_dy);
|
||||
|
400
gdk/gdk.c
400
gdk/gdk.c
@@ -130,11 +130,6 @@ static int gdk_initialized = 0; /* 1 if the library is initi
|
||||
* 0 otherwise.
|
||||
*/
|
||||
|
||||
static GMutex gdk_threads_mutex;
|
||||
|
||||
static GCallback gdk_threads_lock = NULL;
|
||||
static GCallback gdk_threads_unlock = NULL;
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
static const GDebugKey gdk_debug_keys[] = {
|
||||
{ "misc", GDK_DEBUG_MISC },
|
||||
@@ -243,7 +238,7 @@ gdk_display_open_default (void)
|
||||
* emitted in the main thread.
|
||||
*
|
||||
* You can schedule work in the main thread safely from other threads
|
||||
* by using gdk_threads_add_idle() and gdk_threads_add_timeout():
|
||||
* by using g_main_context_invoke(), g_idle_add(), and g_timeout_add():
|
||||
*
|
||||
* |[<!-- language="C" -->
|
||||
* static void
|
||||
@@ -251,7 +246,7 @@ gdk_display_open_default (void)
|
||||
* {
|
||||
* ExpensiveData *expensive_data = do_expensive_computation ();
|
||||
*
|
||||
* gdk_threads_add_idle (got_value, expensive_data);
|
||||
* g_main_context_invoke (NULL, got_value, expensive_data);
|
||||
* }
|
||||
*
|
||||
* static gboolean
|
||||
@@ -267,399 +262,8 @@ gdk_display_open_default (void)
|
||||
* }
|
||||
* ]|
|
||||
*
|
||||
* You should use gdk_threads_add_idle() and gdk_threads_add_timeout()
|
||||
* instead of g_idle_add() and g_timeout_add() since libraries not under
|
||||
* your control might be using the deprecated GDK locking mechanism.
|
||||
* If you are sure that none of the code in your application and libraries
|
||||
* use the deprecated gdk_threads_enter() or gdk_threads_leave() methods,
|
||||
* then you can safely use g_idle_add() and g_timeout_add().
|
||||
*
|
||||
* For more information on this "worker thread" pattern, you should
|
||||
* also look at #GTask, which gives you high-level tools to perform
|
||||
* expensive tasks from worker threads, and will handle thread
|
||||
* management for you.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* gdk_threads_enter:
|
||||
*
|
||||
* This function marks the beginning of a critical section in which
|
||||
* GDK and GTK+ functions can be called safely and without causing race
|
||||
* conditions. Only one thread at a time can be in such a critial
|
||||
* section.
|
||||
*
|
||||
* Deprecated:3.6: All GDK and GTK+ calls should be made from the main
|
||||
* thread
|
||||
*/
|
||||
void
|
||||
gdk_threads_enter (void)
|
||||
{
|
||||
if (gdk_threads_lock)
|
||||
(*gdk_threads_lock) ();
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_threads_leave:
|
||||
*
|
||||
* Leaves a critical region begun with gdk_threads_enter().
|
||||
*
|
||||
* Deprecated:3.6: All GDK and GTK+ calls should be made from the main
|
||||
* thread
|
||||
*/
|
||||
void
|
||||
gdk_threads_leave (void)
|
||||
{
|
||||
if (gdk_threads_unlock)
|
||||
(*gdk_threads_unlock) ();
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_threads_impl_lock (void)
|
||||
{
|
||||
g_mutex_lock (&gdk_threads_mutex);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_threads_impl_unlock (void)
|
||||
{
|
||||
/* we need a trylock() here because trying to unlock a mutex
|
||||
* that hasn't been locked yet is:
|
||||
*
|
||||
* a) not portable
|
||||
* b) fail on GLib ≥ 2.41
|
||||
*
|
||||
* trylock() will either succeed because nothing is holding the
|
||||
* GDK mutex, and will be unlocked right afterwards; or it's
|
||||
* going to fail because the mutex is locked already, in which
|
||||
* case we unlock it as expected.
|
||||
*
|
||||
* this is needed in the case somebody called gdk_threads_init()
|
||||
* without calling gdk_threads_enter() before calling gtk_main().
|
||||
* in theory, we could just say that this is undefined behaviour,
|
||||
* but our documentation has always been *less* than explicit as
|
||||
* to what the behaviour should actually be.
|
||||
*
|
||||
* see bug: https://bugzilla.gnome.org/show_bug.cgi?id=735428
|
||||
*/
|
||||
g_mutex_trylock (&gdk_threads_mutex);
|
||||
g_mutex_unlock (&gdk_threads_mutex);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_threads_init:
|
||||
*
|
||||
* Initializes GDK so that it can be used from multiple threads
|
||||
* in conjunction with gdk_threads_enter() and gdk_threads_leave().
|
||||
*
|
||||
* This call must be made before any use of the main loop from
|
||||
* GTK+; to be safe, call it before gtk_init().
|
||||
*
|
||||
* Deprecated:3.6: All GDK and GTK+ calls should be made from the main
|
||||
* thread
|
||||
*/
|
||||
void
|
||||
gdk_threads_init (void)
|
||||
{
|
||||
if (!gdk_threads_lock)
|
||||
gdk_threads_lock = gdk_threads_impl_lock;
|
||||
if (!gdk_threads_unlock)
|
||||
gdk_threads_unlock = gdk_threads_impl_unlock;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_threads_dispatch (gpointer data)
|
||||
{
|
||||
GdkThreadsDispatch *dispatch = data;
|
||||
gboolean ret = FALSE;
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
if (!g_source_is_destroyed (g_main_current_source ()))
|
||||
ret = dispatch->func (dispatch->data);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_threads_dispatch_free (gpointer data)
|
||||
{
|
||||
GdkThreadsDispatch *dispatch = data;
|
||||
|
||||
if (dispatch->destroy && dispatch->data)
|
||||
dispatch->destroy (dispatch->data);
|
||||
|
||||
g_slice_free (GdkThreadsDispatch, data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gdk_threads_add_idle_full: (rename-to gdk_threads_add_idle)
|
||||
* @priority: the priority of the idle source. Typically this will be in the
|
||||
* range between #G_PRIORITY_DEFAULT_IDLE and #G_PRIORITY_HIGH_IDLE
|
||||
* @function: function to call
|
||||
* @data: data to pass to @function
|
||||
* @notify: (allow-none): function to call when the idle is removed, or %NULL
|
||||
*
|
||||
* Adds a function to be called whenever there are no higher priority
|
||||
* events pending. If the function returns %FALSE it is automatically
|
||||
* removed from the list of event sources and will not be called again.
|
||||
*
|
||||
* This variant of g_idle_add_full() calls @function with the GDK lock
|
||||
* held. It can be thought of a MT-safe version for GTK+ widgets for the
|
||||
* following use case, where you have to worry about idle_callback()
|
||||
* running in thread A and accessing @self after it has been finalized
|
||||
* in thread B:
|
||||
*
|
||||
* |[<!-- language="C" -->
|
||||
* static gboolean
|
||||
* idle_callback (gpointer data)
|
||||
* {
|
||||
* // gdk_threads_enter(); would be needed for g_idle_add()
|
||||
*
|
||||
* SomeWidget *self = data;
|
||||
* // do stuff with self
|
||||
*
|
||||
* self->idle_id = 0;
|
||||
*
|
||||
* // gdk_threads_leave(); would be needed for g_idle_add()
|
||||
* return FALSE;
|
||||
* }
|
||||
*
|
||||
* static void
|
||||
* some_widget_do_stuff_later (SomeWidget *self)
|
||||
* {
|
||||
* self->idle_id = gdk_threads_add_idle (idle_callback, self)
|
||||
* // using g_idle_add() here would require thread protection in the callback
|
||||
* }
|
||||
*
|
||||
* static void
|
||||
* some_widget_finalize (GObject *object)
|
||||
* {
|
||||
* SomeWidget *self = SOME_WIDGET (object);
|
||||
* if (self->idle_id)
|
||||
* g_source_remove (self->idle_id);
|
||||
* G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
* }
|
||||
* ]|
|
||||
*
|
||||
* Returns: the ID (greater than 0) of the event source.
|
||||
*
|
||||
* Since: 2.12
|
||||
*/
|
||||
guint
|
||||
gdk_threads_add_idle_full (gint priority,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify notify)
|
||||
{
|
||||
GdkThreadsDispatch *dispatch;
|
||||
|
||||
g_return_val_if_fail (function != NULL, 0);
|
||||
|
||||
dispatch = g_slice_new (GdkThreadsDispatch);
|
||||
dispatch->func = function;
|
||||
dispatch->data = data;
|
||||
dispatch->destroy = notify;
|
||||
|
||||
return g_idle_add_full (priority,
|
||||
gdk_threads_dispatch,
|
||||
dispatch,
|
||||
gdk_threads_dispatch_free);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_threads_add_idle: (skip)
|
||||
* @function: function to call
|
||||
* @data: data to pass to @function
|
||||
*
|
||||
* A wrapper for the common usage of gdk_threads_add_idle_full()
|
||||
* assigning the default priority, #G_PRIORITY_DEFAULT_IDLE.
|
||||
*
|
||||
* See gdk_threads_add_idle_full().
|
||||
*
|
||||
* Returns: the ID (greater than 0) of the event source.
|
||||
*
|
||||
* Since: 2.12
|
||||
*/
|
||||
guint
|
||||
gdk_threads_add_idle (GSourceFunc function,
|
||||
gpointer data)
|
||||
{
|
||||
return gdk_threads_add_idle_full (G_PRIORITY_DEFAULT_IDLE,
|
||||
function, data, NULL);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gdk_threads_add_timeout_full: (rename-to gdk_threads_add_timeout)
|
||||
* @priority: the priority of the timeout source. Typically this will be in the
|
||||
* range between #G_PRIORITY_DEFAULT_IDLE and #G_PRIORITY_HIGH_IDLE.
|
||||
* @interval: the time between calls to the function, in milliseconds
|
||||
* (1/1000ths of a second)
|
||||
* @function: function to call
|
||||
* @data: data to pass to @function
|
||||
* @notify: (allow-none): function to call when the timeout is removed, or %NULL
|
||||
*
|
||||
* Sets a function to be called at regular intervals holding the GDK lock,
|
||||
* with the given priority. The function is called repeatedly until it
|
||||
* returns %FALSE, at which point the timeout is automatically destroyed
|
||||
* and the function will not be called again. The @notify function is
|
||||
* called when the timeout is destroyed. The first call to the
|
||||
* function will be at the end of the first @interval.
|
||||
*
|
||||
* Note that timeout functions may be delayed, due to the processing of other
|
||||
* event sources. Thus they should not be relied on for precise timing.
|
||||
* After each call to the timeout function, the time of the next
|
||||
* timeout is recalculated based on the current time and the given interval
|
||||
* (it does not try to “catch up” time lost in delays).
|
||||
*
|
||||
* This variant of g_timeout_add_full() can be thought of a MT-safe version
|
||||
* for GTK+ widgets for the following use case:
|
||||
*
|
||||
* |[<!-- language="C" -->
|
||||
* static gboolean timeout_callback (gpointer data)
|
||||
* {
|
||||
* SomeWidget *self = data;
|
||||
*
|
||||
* // do stuff with self
|
||||
*
|
||||
* self->timeout_id = 0;
|
||||
*
|
||||
* return G_SOURCE_REMOVE;
|
||||
* }
|
||||
*
|
||||
* static void some_widget_do_stuff_later (SomeWidget *self)
|
||||
* {
|
||||
* self->timeout_id = g_timeout_add (timeout_callback, self)
|
||||
* }
|
||||
*
|
||||
* static void some_widget_finalize (GObject *object)
|
||||
* {
|
||||
* SomeWidget *self = SOME_WIDGET (object);
|
||||
*
|
||||
* if (self->timeout_id)
|
||||
* g_source_remove (self->timeout_id);
|
||||
*
|
||||
* G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
* }
|
||||
* ]|
|
||||
*
|
||||
* Returns: the ID (greater than 0) of the event source.
|
||||
*
|
||||
* Since: 2.12
|
||||
*/
|
||||
guint
|
||||
gdk_threads_add_timeout_full (gint priority,
|
||||
guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify notify)
|
||||
{
|
||||
GdkThreadsDispatch *dispatch;
|
||||
|
||||
g_return_val_if_fail (function != NULL, 0);
|
||||
|
||||
dispatch = g_slice_new (GdkThreadsDispatch);
|
||||
dispatch->func = function;
|
||||
dispatch->data = data;
|
||||
dispatch->destroy = notify;
|
||||
|
||||
return g_timeout_add_full (priority,
|
||||
interval,
|
||||
gdk_threads_dispatch,
|
||||
dispatch,
|
||||
gdk_threads_dispatch_free);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_threads_add_timeout: (skip)
|
||||
* @interval: the time between calls to the function, in milliseconds
|
||||
* (1/1000ths of a second)
|
||||
* @function: function to call
|
||||
* @data: data to pass to @function
|
||||
*
|
||||
* A wrapper for the common usage of gdk_threads_add_timeout_full()
|
||||
* assigning the default priority, #G_PRIORITY_DEFAULT.
|
||||
*
|
||||
* See gdk_threads_add_timeout_full().
|
||||
*
|
||||
* Returns: the ID (greater than 0) of the event source.
|
||||
*
|
||||
* Since: 2.12
|
||||
*/
|
||||
guint
|
||||
gdk_threads_add_timeout (guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data)
|
||||
{
|
||||
return gdk_threads_add_timeout_full (G_PRIORITY_DEFAULT,
|
||||
interval, function, data, NULL);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gdk_threads_add_timeout_seconds_full: (rename-to gdk_threads_add_timeout_seconds)
|
||||
* @priority: the priority of the timeout source. Typically this will be in the
|
||||
* range between #G_PRIORITY_DEFAULT_IDLE and #G_PRIORITY_HIGH_IDLE.
|
||||
* @interval: the time between calls to the function, in seconds
|
||||
* @function: function to call
|
||||
* @data: data to pass to @function
|
||||
* @notify: (allow-none): function to call when the timeout is removed, or %NULL
|
||||
*
|
||||
* A variant of gdk_threads_add_timeout_full() with second-granularity.
|
||||
* See g_timeout_add_seconds_full() for a discussion of why it is
|
||||
* a good idea to use this function if you don’t need finer granularity.
|
||||
*
|
||||
* Returns: the ID (greater than 0) of the event source.
|
||||
*
|
||||
* Since: 2.14
|
||||
*/
|
||||
guint
|
||||
gdk_threads_add_timeout_seconds_full (gint priority,
|
||||
guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data,
|
||||
GDestroyNotify notify)
|
||||
{
|
||||
GdkThreadsDispatch *dispatch;
|
||||
|
||||
g_return_val_if_fail (function != NULL, 0);
|
||||
|
||||
dispatch = g_slice_new (GdkThreadsDispatch);
|
||||
dispatch->func = function;
|
||||
dispatch->data = data;
|
||||
dispatch->destroy = notify;
|
||||
|
||||
return g_timeout_add_seconds_full (priority,
|
||||
interval,
|
||||
gdk_threads_dispatch,
|
||||
dispatch,
|
||||
gdk_threads_dispatch_free);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_threads_add_timeout_seconds: (skip)
|
||||
* @interval: the time between calls to the function, in seconds
|
||||
* @function: function to call
|
||||
* @data: data to pass to @function
|
||||
*
|
||||
* A wrapper for the common usage of gdk_threads_add_timeout_seconds_full()
|
||||
* assigning the default priority, #G_PRIORITY_DEFAULT.
|
||||
*
|
||||
* For details, see gdk_threads_add_timeout_full().
|
||||
*
|
||||
* Returns: the ID (greater than 0) of the event source.
|
||||
*
|
||||
* Since: 2.14
|
||||
*/
|
||||
guint
|
||||
gdk_threads_add_timeout_seconds (guint interval,
|
||||
GSourceFunc function,
|
||||
gpointer data)
|
||||
{
|
||||
return gdk_threads_add_timeout_seconds_full (G_PRIORITY_DEFAULT,
|
||||
interval, function, data, NULL);
|
||||
}
|
||||
|
@@ -51,20 +51,23 @@
|
||||
#include <gdk/gdkframeclock.h>
|
||||
#include <gdk/gdkframetimings.h>
|
||||
#include <gdk/gdkglcontext.h>
|
||||
#include <gdk/gdkgltexture.h>
|
||||
#include <gdk/gdkkeys.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include <gdk/gdkmemorytexture.h>
|
||||
#include <gdk/gdkmonitor.h>
|
||||
#include <gdk/gdkpaintable.h>
|
||||
#include <gdk/gdkpango.h>
|
||||
#include <gdk/gdkpixbuf.h>
|
||||
#include <gdk/gdkproperty.h>
|
||||
#include <gdk/gdkrectangle.h>
|
||||
#include <gdk/gdkrgba.h>
|
||||
#include <gdk/gdkseat.h>
|
||||
#include <gdk/gdksnapshot.h>
|
||||
#include <gdk/gdktexture.h>
|
||||
#include <gdk/gdkthreads.h>
|
||||
#include <gdk/gdktypes.h>
|
||||
#include <gdk/gdkvulkancontext.h>
|
||||
#include <gdk/gdkwindow.h>
|
||||
#include <gdk/gdksurface.h>
|
||||
|
||||
#include <gdk/gdk-autocleanup.h>
|
||||
|
||||
|
@@ -186,8 +186,6 @@ gdk_app_launch_context_get_display (GAppLaunchContext *context,
|
||||
* When the workspace is not specified or @desktop is set to -1,
|
||||
* it is up to the window manager to pick one, typically it will
|
||||
* be the current workspace.
|
||||
*
|
||||
* Since: 2.14
|
||||
*/
|
||||
void
|
||||
gdk_app_launch_context_set_desktop (GdkAppLaunchContext *context,
|
||||
@@ -210,8 +208,6 @@ gdk_app_launch_context_set_desktop (GdkAppLaunchContext *context,
|
||||
* focus to the newly launched application when the user is busy
|
||||
* typing in another window. This is also known as 'focus stealing
|
||||
* prevention'.
|
||||
*
|
||||
* Since: 2.14
|
||||
*/
|
||||
void
|
||||
gdk_app_launch_context_set_timestamp (GdkAppLaunchContext *context,
|
||||
@@ -234,8 +230,6 @@ gdk_app_launch_context_set_timestamp (GdkAppLaunchContext *context,
|
||||
* notification.
|
||||
*
|
||||
* See also gdk_app_launch_context_set_icon_name().
|
||||
*
|
||||
* Since: 2.14
|
||||
*/
|
||||
void
|
||||
gdk_app_launch_context_set_icon (GdkAppLaunchContext *context,
|
||||
@@ -267,8 +261,6 @@ gdk_app_launch_context_set_icon (GdkAppLaunchContext *context,
|
||||
* If neither @icon or @icon_name is set, the icon is taken from either
|
||||
* the file that is passed to launched application or from the #GAppInfo
|
||||
* for the launched application itself.
|
||||
*
|
||||
* Since: 2.14
|
||||
*/
|
||||
void
|
||||
gdk_app_launch_context_set_icon_name (GdkAppLaunchContext *context,
|
||||
|
@@ -33,9 +33,9 @@
|
||||
* can be used with GDK. GTK+ does all of its drawing using cairo.
|
||||
*
|
||||
* GDK does not wrap the cairo API, instead it allows to create cairo
|
||||
* contexts which can be used to draw on #GdkWindows. Additional
|
||||
* contexts which can be used to draw on #GdkSurfaces. Additional
|
||||
* functions allow use #GdkRectangles with cairo and to use #GdkRGBAs,
|
||||
* #GdkPixbufs and #GdkWindows as sources for drawing operations.
|
||||
* #GdkPixbufs and #GdkSurfaces as sources for drawing operations.
|
||||
*/
|
||||
|
||||
|
||||
@@ -84,8 +84,6 @@ gdk_cairo_get_clip_rectangle (cairo_t *cr,
|
||||
* @rgba: a #GdkRGBA
|
||||
*
|
||||
* Sets the specified #GdkRGBA as the source color of @cr.
|
||||
*
|
||||
* Since: 3.0
|
||||
*/
|
||||
void
|
||||
gdk_cairo_set_source_rgba (cairo_t *cr,
|
||||
@@ -107,8 +105,6 @@ gdk_cairo_set_source_rgba (cairo_t *cr,
|
||||
* @rectangle: a #GdkRectangle
|
||||
*
|
||||
* Adds the given rectangle to the current path of @cr.
|
||||
*
|
||||
* Since: 2.8
|
||||
*/
|
||||
void
|
||||
gdk_cairo_rectangle (cairo_t *cr,
|
||||
@@ -128,8 +124,6 @@ gdk_cairo_rectangle (cairo_t *cr,
|
||||
* @region: a #cairo_region_t
|
||||
*
|
||||
* Adds the given region to the current path of @cr.
|
||||
*
|
||||
* Since: 2.8
|
||||
*/
|
||||
void
|
||||
gdk_cairo_region (cairo_t *cr,
|
||||
@@ -246,27 +240,25 @@ gdk_cairo_surface_paint_pixbuf (cairo_surface_t *surface,
|
||||
/**
|
||||
* gdk_cairo_surface_create_from_pixbuf:
|
||||
* @pixbuf: a #GdkPixbuf
|
||||
* @scale: the scale of the new surface, or 0 to use same as @window
|
||||
* @for_window: (allow-none): The window this will be drawn to, or %NULL
|
||||
* @scale: the scale of the new surface, or 0 to use same as @surface
|
||||
* @for_surface: (allow-none): The surface this will be drawn to, or %NULL
|
||||
*
|
||||
* Creates an image surface with the same contents as
|
||||
* the pixbuf.
|
||||
*
|
||||
* Returns: a new cairo surface, must be freed with cairo_surface_destroy()
|
||||
*
|
||||
* Since: 3.10
|
||||
*/
|
||||
cairo_surface_t *
|
||||
gdk_cairo_surface_create_from_pixbuf (const GdkPixbuf *pixbuf,
|
||||
int scale,
|
||||
GdkWindow *for_window)
|
||||
GdkSurface *for_surface)
|
||||
{
|
||||
cairo_format_t format;
|
||||
cairo_surface_t *surface;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
|
||||
g_return_val_if_fail (scale >= 0, NULL);
|
||||
g_return_val_if_fail (for_window == NULL || GDK_IS_WINDOW (for_window), NULL);
|
||||
g_return_val_if_fail (for_surface == NULL || GDK_IS_SURFACE (for_surface), NULL);
|
||||
|
||||
if (gdk_pixbuf_get_n_channels (pixbuf) == 3)
|
||||
format = CAIRO_FORMAT_RGB24;
|
||||
@@ -274,7 +266,7 @@ gdk_cairo_surface_create_from_pixbuf (const GdkPixbuf *pixbuf,
|
||||
format = CAIRO_FORMAT_ARGB32;
|
||||
|
||||
surface =
|
||||
gdk_window_create_similar_image_surface (for_window,
|
||||
gdk_surface_create_similar_image_surface (for_surface,
|
||||
format,
|
||||
gdk_pixbuf_get_width (pixbuf),
|
||||
gdk_pixbuf_get_height (pixbuf),
|
||||
@@ -296,8 +288,6 @@ gdk_cairo_surface_create_from_pixbuf (const GdkPixbuf *pixbuf,
|
||||
*
|
||||
* The pattern has an extend mode of %CAIRO_EXTEND_NONE and is aligned
|
||||
* so that the origin of @pixbuf is @pixbuf_x, @pixbuf_y.
|
||||
*
|
||||
* Since: 2.8
|
||||
*/
|
||||
void
|
||||
gdk_cairo_set_source_pixbuf (cairo_t *cr,
|
||||
|
@@ -55,13 +55,13 @@ cairo_region_t *
|
||||
gdk_cairo_region_create_from_surface
|
||||
(cairo_surface_t *surface);
|
||||
|
||||
GDK_AVAILABLE_IN_3_10
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
cairo_surface_t * gdk_cairo_surface_create_from_pixbuf (const GdkPixbuf *pixbuf,
|
||||
int scale,
|
||||
GdkWindow *for_window);
|
||||
GDK_AVAILABLE_IN_3_16
|
||||
GdkSurface *for_surface);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
GdkWindow *window,
|
||||
GdkSurface *surface,
|
||||
int source,
|
||||
int source_type,
|
||||
int buffer_scale,
|
||||
@@ -70,10 +70,10 @@ void gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkDrawingContext * gdk_cairo_get_drawing_context (cairo_t *cr);
|
||||
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_cairo_surface_upload_to_gl (cairo_surface_t *surface,
|
||||
int target,
|
||||
int width,
|
||||
|
@@ -363,8 +363,6 @@ gdk_clipboard_class_init (GdkClipboardClass *class)
|
||||
* GdkClipboard:display:
|
||||
*
|
||||
* The #GdkDisplay that the clipboard belongs to.
|
||||
*
|
||||
* Since: 3.94
|
||||
*/
|
||||
properties[PROP_DISPLAY] =
|
||||
g_param_spec_object ("display",
|
||||
@@ -380,8 +378,6 @@ gdk_clipboard_class_init (GdkClipboardClass *class)
|
||||
* GdkClipboard:formats:
|
||||
*
|
||||
* The possible formats that the clipboard can provide its data in.
|
||||
*
|
||||
* Since: 3.94
|
||||
*/
|
||||
properties[PROP_FORMATS] =
|
||||
g_param_spec_boxed ("formats",
|
||||
@@ -396,8 +392,6 @@ gdk_clipboard_class_init (GdkClipboardClass *class)
|
||||
* GdkClipboard:local:
|
||||
*
|
||||
* %TRUE if the contents of the clipboard are owned by this process.
|
||||
*
|
||||
* Since: 3.94
|
||||
*/
|
||||
properties[PROP_LOCAL] =
|
||||
g_param_spec_boolean ("local",
|
||||
@@ -413,8 +407,6 @@ gdk_clipboard_class_init (GdkClipboardClass *class)
|
||||
*
|
||||
* The #GdkContentProvider or %NULL if the clipboard is empty or contents are
|
||||
* provided otherwise.
|
||||
*
|
||||
* Since: 3.94
|
||||
*/
|
||||
properties[PROP_CONTENT] =
|
||||
g_param_spec_object ("content",
|
||||
@@ -820,7 +812,7 @@ gdk_clipboard_read_value_internal (GdkClipboard *clipboard,
|
||||
|
||||
builder = gdk_content_formats_builder_new ();
|
||||
gdk_content_formats_builder_add_gtype (builder, type);
|
||||
formats = gdk_content_formats_builder_free (builder);
|
||||
formats = gdk_content_formats_builder_free_to_formats (builder);
|
||||
formats = gdk_content_formats_union_deserialize_mime_types (formats);
|
||||
|
||||
gdk_clipboard_read_internal (clipboard,
|
||||
|
@@ -34,89 +34,89 @@ G_BEGIN_DECLS
|
||||
#define GDK_CLIPBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_CLIPBOARD, GdkClipboard))
|
||||
#define GDK_IS_CLIPBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_CLIPBOARD))
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_clipboard_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkDisplay * gdk_clipboard_get_display (GdkClipboard *clipboard);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormats * gdk_clipboard_get_formats (GdkClipboard *clipboard);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_clipboard_is_local (GdkClipboard *clipboard);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentProvider * gdk_clipboard_get_content (GdkClipboard *clipboard);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_store_async (GdkClipboard *clipboard,
|
||||
int io_priority,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_clipboard_store_finish (GdkClipboard *clipboard,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_read_async (GdkClipboard *clipboard,
|
||||
const char **mime_types,
|
||||
int io_priority,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GInputStream * gdk_clipboard_read_finish (GdkClipboard *clipboard,
|
||||
const char **out_mime_type,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_read_value_async (GdkClipboard *clipboard,
|
||||
GType type,
|
||||
int io_priority,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
const GValue * gdk_clipboard_read_value_finish (GdkClipboard *clipboard,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_read_texture_async(GdkClipboard *clipboard,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkTexture * gdk_clipboard_read_texture_finish (GdkClipboard *clipboard,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_read_text_async (GdkClipboard *clipboard,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
char * gdk_clipboard_read_text_finish (GdkClipboard *clipboard,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_clipboard_set_content (GdkClipboard *clipboard,
|
||||
GdkContentProvider *provider);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_set (GdkClipboard *clipboard,
|
||||
GType type,
|
||||
...);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_set_valist (GdkClipboard *clipboard,
|
||||
GType type,
|
||||
va_list args);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_set_value (GdkClipboard *clipboard,
|
||||
const GValue *value);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_set_text (GdkClipboard *clipboard,
|
||||
const char *text);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_set_texture (GdkClipboard *clipboard,
|
||||
GdkTexture *texture);
|
||||
|
||||
|
@@ -458,7 +458,7 @@ gdk_content_formats_union_deserialize_gtypes (GdkContentFormats *formats)
|
||||
|
||||
gdk_content_formats_unref (formats);
|
||||
|
||||
return gdk_content_formats_builder_free (builder);
|
||||
return gdk_content_formats_builder_free_to_formats (builder);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -493,7 +493,7 @@ gdk_content_formats_union_deserialize_mime_types (GdkContentFormats *formats)
|
||||
|
||||
gdk_content_formats_unref (formats);
|
||||
|
||||
return gdk_content_formats_builder_free (builder);
|
||||
return gdk_content_formats_builder_free_to_formats (builder);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -50,48 +50,48 @@ typedef struct _GdkContentDeserializer GdkContentDeserializer;
|
||||
*/
|
||||
typedef void (* GdkContentDeserializeFunc) (GdkContentDeserializer *deserializer);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_content_deserializer_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
const char * gdk_content_deserializer_get_mime_type (GdkContentDeserializer *deserializer);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_content_deserializer_get_gtype (GdkContentDeserializer *deserializer);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GValue * gdk_content_deserializer_get_value (GdkContentDeserializer *deserializer);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GInputStream * gdk_content_deserializer_get_input_stream (GdkContentDeserializer *deserializer);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
int gdk_content_deserializer_get_priority (GdkContentDeserializer *deserializer);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GCancellable * gdk_content_deserializer_get_cancellable (GdkContentDeserializer *deserializer);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gpointer gdk_content_deserializer_get_user_data (GdkContentDeserializer *deserializer);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_deserializer_set_task_data (GdkContentDeserializer *deserializer,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gpointer gdk_content_deserializer_get_task_data (GdkContentDeserializer *deserializer);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_deserializer_return_success (GdkContentDeserializer *deserializer);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_deserializer_return_error (GdkContentDeserializer *deserializer,
|
||||
GError *error);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormats * gdk_content_formats_union_deserialize_gtypes (GdkContentFormats *formats);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormats * gdk_content_formats_union_deserialize_mime_types(GdkContentFormats *formats);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_register_deserializer (const char *mime_type,
|
||||
GType type,
|
||||
GdkContentDeserializeFunc deserialize,
|
||||
gpointer data,
|
||||
GDestroyNotify notify);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_deserialize_async (GInputStream *stream,
|
||||
const char *mime_type,
|
||||
GType type,
|
||||
@@ -99,7 +99,7 @@ void gdk_content_deserialize_async (GInputS
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_content_deserialize_finish (GAsyncResult *result,
|
||||
GValue *value,
|
||||
GError **error);
|
||||
|
@@ -147,18 +147,20 @@ GdkContentFormats *
|
||||
gdk_content_formats_new (const char **mime_types,
|
||||
guint n_mime_types)
|
||||
{
|
||||
GPtrArray *array;
|
||||
guint i;
|
||||
const char **mime_types_copy;
|
||||
|
||||
if (n_mime_types == 0)
|
||||
return gdk_content_formats_new_take (NULL, 0, NULL, 0);
|
||||
|
||||
array = g_ptr_array_new ();
|
||||
for (i = 0; i < n_mime_types; i++)
|
||||
g_ptr_array_add (array, (gpointer) g_intern_string (mime_types[i]));
|
||||
g_ptr_array_add (array, NULL);
|
||||
mime_types_copy = g_new (const char *, n_mime_types + 1);
|
||||
|
||||
return gdk_content_formats_new_take (NULL, 0, (const char **) g_ptr_array_free (array, FALSE), n_mime_types);
|
||||
for (i = 0; i < n_mime_types; i++)
|
||||
mime_types_copy[i] = g_intern_string (mime_types[i]);
|
||||
|
||||
mime_types_copy[n_mime_types] = NULL;
|
||||
|
||||
return gdk_content_formats_new_take (NULL, 0, mime_types_copy, n_mime_types);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -307,7 +309,7 @@ gdk_content_formats_union (GdkContentFormats *first,
|
||||
gdk_content_formats_unref (first);
|
||||
gdk_content_formats_builder_add_formats (builder, second);
|
||||
|
||||
return gdk_content_formats_builder_free (builder);
|
||||
return gdk_content_formats_builder_free_to_formats (builder);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -510,12 +512,22 @@ gdk_content_formats_get_mime_types (GdkContentFormats *formats,
|
||||
|
||||
struct _GdkContentFormatsBuilder
|
||||
{
|
||||
int ref_count;
|
||||
|
||||
/* (element-type GType) */
|
||||
GSList *gtypes;
|
||||
gsize n_gtypes;
|
||||
|
||||
/* (element-type utf8) (interned) */
|
||||
GSList *mime_types;
|
||||
gsize n_mime_types;
|
||||
};
|
||||
|
||||
G_DEFINE_BOXED_TYPE (GdkContentFormatsBuilder,
|
||||
gdk_content_formats_builder,
|
||||
gdk_content_formats_builder_ref,
|
||||
gdk_content_formats_builder_unref)
|
||||
|
||||
/**
|
||||
* gdk_content_formats_builder_new:
|
||||
*
|
||||
@@ -528,19 +540,106 @@ struct _GdkContentFormatsBuilder
|
||||
GdkContentFormatsBuilder *
|
||||
gdk_content_formats_builder_new (void)
|
||||
{
|
||||
return g_slice_new0 (GdkContentFormatsBuilder);
|
||||
GdkContentFormatsBuilder *builder;
|
||||
|
||||
builder = g_slice_new0 (GdkContentFormatsBuilder);
|
||||
builder->ref_count = 1;
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_content_formats_builder_free:
|
||||
* gdk_content_formats_builder_ref:
|
||||
* @builder: a #GdkContentFormatsBuilder
|
||||
*
|
||||
* Frees @builder and creates a new #GdkContentFormats from it.
|
||||
* Acquires a reference on the given @builder.
|
||||
*
|
||||
* Returns: a new #GdkContentFormats with all the formats added to @builder
|
||||
**/
|
||||
* This function is intended primarily for bindings. #GdkContentFormatsBuilder objects
|
||||
* should not be kept around.
|
||||
*
|
||||
* Returns: (transfer none): the given #GdkContentFormatsBuilder with
|
||||
* its reference count increased
|
||||
*/
|
||||
GdkContentFormatsBuilder *
|
||||
gdk_content_formats_builder_ref (GdkContentFormatsBuilder *builder)
|
||||
{
|
||||
g_return_val_if_fail (builder != NULL, NULL);
|
||||
g_return_val_if_fail (builder->ref_count > 0, NULL);
|
||||
|
||||
builder->ref_count += 1;
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_content_formats_builder_clear (GdkContentFormatsBuilder *builder)
|
||||
{
|
||||
g_clear_pointer (&builder->gtypes, g_slist_free);
|
||||
g_clear_pointer (&builder->mime_types, g_slist_free);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_content_formats_builder_unref:
|
||||
* @builder: a #GdkContentFormatsBuilder
|
||||
*
|
||||
* Releases a reference on the given @builder.
|
||||
*/
|
||||
void
|
||||
gdk_content_formats_builder_unref (GdkContentFormatsBuilder *builder)
|
||||
{
|
||||
g_return_if_fail (builder != NULL);
|
||||
g_return_if_fail (builder->ref_count > 0);
|
||||
|
||||
builder->ref_count -= 1;
|
||||
|
||||
if (builder->ref_count > 0)
|
||||
return;
|
||||
|
||||
gdk_content_formats_builder_clear (builder);
|
||||
g_slice_free (GdkContentFormatsBuilder, builder);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_content_formats_builder_free_to_formats: (skip)
|
||||
* @builder: a #GdkContentFormatsBuilder
|
||||
*
|
||||
* Creates a new #GdkContentFormats from the current state of the
|
||||
* given @builder, and frees the @builder instance.
|
||||
*
|
||||
* Returns: (transfer full): the newly created #GdkContentFormats
|
||||
* with all the formats added to @builder
|
||||
*/
|
||||
GdkContentFormats *
|
||||
gdk_content_formats_builder_free (GdkContentFormatsBuilder *builder)
|
||||
gdk_content_formats_builder_free_to_formats (GdkContentFormatsBuilder *builder)
|
||||
{
|
||||
GdkContentFormats *res;
|
||||
|
||||
g_return_val_if_fail (builder != NULL, NULL);
|
||||
|
||||
res = gdk_content_formats_builder_to_formats (builder);
|
||||
|
||||
gdk_content_formats_builder_unref (builder);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_content_formats_builder_to_formats:
|
||||
* @builder: a #GdkContentFormatsBuilder
|
||||
*
|
||||
* Creates a new #GdkContentFormats from the given @builder.
|
||||
*
|
||||
* The given #GdkContentFormatsBuilder is reset once this function returns;
|
||||
* you cannot call this function multiple times on the same @builder instance.
|
||||
*
|
||||
* This function is intended primarily for bindings. C code should use
|
||||
* gdk_content_formats_builder_free_to_formats().
|
||||
*
|
||||
* Returns: (transfer full): the newly created #GdkContentFormats
|
||||
* with all the formats added to @builder
|
||||
*/
|
||||
GdkContentFormats *
|
||||
gdk_content_formats_builder_to_formats (GdkContentFormatsBuilder *builder)
|
||||
{
|
||||
GdkContentFormats *result;
|
||||
GType *gtypes;
|
||||
@@ -567,9 +666,7 @@ gdk_content_formats_builder_free (GdkContentFormatsBuilder *builder)
|
||||
result = gdk_content_formats_new_take (gtypes, builder->n_gtypes,
|
||||
mime_types, builder->n_mime_types);
|
||||
|
||||
g_slist_free (builder->gtypes);
|
||||
g_slist_free (builder->mime_types);
|
||||
g_slice_free (GdkContentFormatsBuilder, builder);
|
||||
gdk_content_formats_builder_clear (builder);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@@ -30,72 +30,83 @@ G_BEGIN_DECLS
|
||||
|
||||
#define GDK_TYPE_CONTENT_FORMATS (gdk_content_formats_get_type ())
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
const char * gdk_intern_mime_type (const char *string);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_content_formats_get_type (void) G_GNUC_CONST;
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormats * gdk_content_formats_new (const char **mime_types,
|
||||
guint n_mime_types);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormats * gdk_content_formats_new_for_gtype (GType type);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormats * gdk_content_formats_ref (GdkContentFormats *formats);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_formats_unref (GdkContentFormats *formats);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_formats_print (GdkContentFormats *formats,
|
||||
GString *string);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
char * gdk_content_formats_to_string (GdkContentFormats *formats);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
const GType * gdk_content_formats_get_gtypes (GdkContentFormats *formats,
|
||||
gsize *n_gtypes);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
const char * const * gdk_content_formats_get_mime_types (GdkContentFormats *formats,
|
||||
gsize *n_mime_types);
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormats * gdk_content_formats_union (GdkContentFormats *first,
|
||||
const GdkContentFormats *second) G_GNUC_WARN_UNUSED_RESULT;
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_content_formats_match (const GdkContentFormats *first,
|
||||
const GdkContentFormats *second);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_content_formats_match_gtype (const GdkContentFormats *first,
|
||||
const GdkContentFormats *second);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
const char * gdk_content_formats_match_mime_type (const GdkContentFormats *first,
|
||||
const GdkContentFormats *second);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_content_formats_contain_gtype (const GdkContentFormats *formats,
|
||||
GType type);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
gboolean gdk_content_formats_contain_mime_type (const GdkContentFormats *formats,
|
||||
const char *mime_type);
|
||||
|
||||
#define GDK_TYPE_CONTENT_FORMATS_BUILDER (gdk_content_formats_builder_get_type ())
|
||||
|
||||
typedef struct _GdkContentFormatsBuilder GdkContentFormatsBuilder;
|
||||
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GdkContentFormatsBuilder*gdk_content_formats_builder_new (void);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GdkContentFormats * gdk_content_formats_builder_free (GdkContentFormatsBuilder *builder) G_GNUC_WARN_UNUSED_RESULT;
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_content_formats_builder_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormatsBuilder *gdk_content_formats_builder_new (void);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormatsBuilder *gdk_content_formats_builder_ref (GdkContentFormatsBuilder *builder);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_formats_builder_unref (GdkContentFormatsBuilder *builder);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormats * gdk_content_formats_builder_free_to_formats (GdkContentFormatsBuilder *builder) G_GNUC_WARN_UNUSED_RESULT;
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkContentFormats * gdk_content_formats_builder_to_formats (GdkContentFormatsBuilder *builder) G_GNUC_WARN_UNUSED_RESULT;
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_formats_builder_add_formats (GdkContentFormatsBuilder *builder,
|
||||
const GdkContentFormats *formats);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_formats_builder_add_mime_type(GdkContentFormatsBuilder *builder,
|
||||
const char *mime_type);
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_content_formats_builder_add_gtype (GdkContentFormatsBuilder *builder,
|
||||
GType type);
|
||||
|
||||
/* dunno where else to put this */
|
||||
#define GDK_TYPE_FILE_LIST (gdk_file_list_get_type ())
|
||||
GDK_AVAILABLE_IN_3_94
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_file_list_get_type (void) G_GNUC_CONST;
|
||||
|
||||
|
||||
|
@@ -174,8 +174,6 @@ gdk_content_provider_class_init (GdkContentProviderClass *class)
|
||||
* GdkContentProvider:formats:
|
||||
*
|
||||
* The possible formats that the provider can provide its data in.
|
||||
*
|
||||
* Since: 3.94
|
||||
*/
|
||||
properties[PROP_FORMATS] =
|
||||
g_param_spec_boxed ("formats",
|
||||
@@ -190,8 +188,6 @@ gdk_content_provider_class_init (GdkContentProviderClass *class)
|
||||
* GdkContentProvider:storable-formats:
|
||||
*
|
||||
* The subset of formats that clipboard managers should store this provider's data in.
|
||||
*
|
||||
* Since: 3.94
|
||||
*/
|
||||
properties[PROP_STORABLE_FORMATS] =
|
||||
g_param_spec_boxed ("storable-formats",
|
||||
@@ -206,8 +202,6 @@ gdk_content_provider_class_init (GdkContentProviderClass *class)
|
||||
* GdkContentProvider:content-changed:
|
||||
*
|
||||
* Emitted whenever the content provided by this provider has changed.
|
||||
*
|
||||
* Since: 3.94
|
||||
*/
|
||||
signals[CONTENT_CHANGED] =
|
||||
g_signal_new ("content-changed",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user