Compare commits
555 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
09ed01e8a7 | ||
|
|
9feda1c92c | ||
|
|
0f02cd2bcb | ||
|
|
a20e7634b6 | ||
|
|
e8b69526c2 | ||
|
|
c66f194d05 | ||
|
|
c55784626a | ||
|
|
29d6eec09a | ||
|
|
a2420a40da | ||
|
|
7e0434cfcd | ||
|
|
d95b84c0ea | ||
|
|
81b7c4e40b | ||
|
|
198ad4df90 | ||
|
|
cf962321e8 | ||
|
|
4b880d50f1 | ||
|
|
37675d8227 | ||
|
|
d4c049059f | ||
|
|
2ca82e6ddf | ||
|
|
2898b2bbd8 | ||
|
|
a411d6b199 | ||
|
|
4c691ac8f8 | ||
|
|
16be72eb13 | ||
|
|
4c796df901 | ||
|
|
fc4263535b | ||
|
|
13a56fb3a2 | ||
|
|
5135522de6 | ||
|
|
caadbdf630 | ||
|
|
f6f23149a2 | ||
|
|
0bddd31389 | ||
|
|
4de2154368 | ||
|
|
84a651caf1 | ||
|
|
80aca3be77 | ||
|
|
ce69a803a7 | ||
|
|
5e556d778a | ||
|
|
5b2e44fd44 | ||
|
|
124e43d078 | ||
|
|
2f66920b54 | ||
|
|
41ba15bbf2 | ||
|
|
1e80b89c9c | ||
|
|
28baa6de5a | ||
|
|
a50151e0df | ||
|
|
fe45e8c048 | ||
|
|
bb1d313dfe | ||
|
|
f68ad7b45a | ||
|
|
d16b9f99eb | ||
|
|
b4e4e211a6 | ||
|
|
0764f75dee | ||
|
|
ad29977bf7 | ||
|
|
0f661e1458 | ||
|
|
9000fa1f81 | ||
|
|
2553ab21ee | ||
|
|
ce9680fab3 | ||
|
|
86f17b3a17 | ||
|
|
f09b01dd19 | ||
|
|
a1b4c09901 | ||
|
|
1351ad0e62 | ||
|
|
125263713b | ||
|
|
03058dd76a | ||
|
|
be41057a74 | ||
|
|
876d5f0748 | ||
|
|
6279b6125a | ||
|
|
ad5889690a | ||
|
|
785cba1e7b | ||
|
|
b355a88456 | ||
|
|
463d12cfcd | ||
|
|
727182f0f9 | ||
|
|
3d5e50daa2 | ||
|
|
a27d2413aa | ||
|
|
b613e3a1e0 | ||
|
|
641a0ad8a8 | ||
|
|
72b0bcbad5 | ||
|
|
d7798950ed | ||
|
|
287464a64a | ||
|
|
1add0e3f2a | ||
|
|
aaf32faedc | ||
|
|
f2e7bce43a | ||
|
|
e6dc6382c7 | ||
|
|
7e4ce73751 | ||
|
|
4ded4549f1 | ||
|
|
daee40abef | ||
|
|
db71def54a | ||
|
|
1e93ed9630 | ||
|
|
205c4288a4 | ||
|
|
3c58485a7f | ||
|
|
8a98feef19 | ||
|
|
4249d6e931 | ||
|
|
e061305d61 | ||
|
|
81f06e1749 | ||
|
|
c65c217741 | ||
|
|
bd3f7f0619 | ||
|
|
22ca91ffae | ||
|
|
5aae1eadb7 | ||
|
|
f04fe99deb | ||
|
|
7b08ca94cc | ||
|
|
4932d44b9e | ||
|
|
b4244b734e | ||
|
|
b489d20ac4 | ||
|
|
044e34b34f | ||
|
|
8dee19fca8 | ||
|
|
30782e26a9 | ||
|
|
f9dd457b25 | ||
|
|
29f453b975 | ||
|
|
18190f6dba | ||
|
|
eadbb077a5 | ||
|
|
074585b3e3 | ||
|
|
a3864ac49f | ||
|
|
e77f16e54c | ||
|
|
948767960f | ||
|
|
5753f69b68 | ||
|
|
5680244e8f | ||
|
|
eb899ebbf8 | ||
|
|
2b91f5de30 | ||
|
|
828f9eb1e7 | ||
|
|
231d6c209f | ||
|
|
662e718631 | ||
|
|
0fee20071c | ||
|
|
2f1d718e13 | ||
|
|
650da1e6b0 | ||
|
|
8ae3bae9a9 | ||
|
|
8368b12b61 | ||
|
|
fecd632e57 | ||
|
|
945e5bd859 | ||
|
|
16f3b2f5c8 | ||
|
|
c3852404e6 | ||
|
|
6bf7af2a46 | ||
|
|
0c1fd574b0 | ||
|
|
6ff37b070b | ||
|
|
5f9c83da83 | ||
|
|
7e86d69854 | ||
|
|
52decc32fe | ||
|
|
bb8254877b | ||
|
|
1a3ec8e98d | ||
|
|
f35fb0c661 | ||
|
|
4380ce8495 | ||
|
|
5b74700608 | ||
|
|
c00b2ead83 | ||
|
|
ca01f7c042 | ||
|
|
cc9928065b | ||
|
|
f7ecc91327 | ||
|
|
0ce7854a3c | ||
|
|
fc9c5228d3 | ||
|
|
87869d1442 | ||
|
|
f833d84be1 | ||
|
|
0c9946631a | ||
|
|
8e56a80972 | ||
|
|
c6a4065c5a | ||
|
|
03b60f94c0 | ||
|
|
9de7b8af49 | ||
|
|
b81117479b | ||
|
|
fff0358261 | ||
|
|
e08c1f5849 | ||
|
|
7106f426bb | ||
|
|
86392ca3d6 | ||
|
|
0077c2ac5a | ||
|
|
6fad3b1b0d | ||
|
|
d9a6214725 | ||
|
|
b708fc4c14 | ||
|
|
e64e81bcf4 | ||
|
|
38b62e4660 | ||
|
|
d0699235bf | ||
|
|
a7dae64d59 | ||
|
|
8c42e760bf | ||
|
|
e3c46cd253 | ||
|
|
bf28168d42 | ||
|
|
78f02cc5b6 | ||
|
|
afadd23d0a | ||
|
|
51a0f35d83 | ||
|
|
e9848b7db4 | ||
|
|
ee4c1ded51 | ||
|
|
2e6697b588 | ||
|
|
49c9db74b4 | ||
|
|
0ba7d68d50 | ||
|
|
0104f5c1bd | ||
|
|
db98346844 | ||
|
|
2c552820dc | ||
|
|
4d24c714c0 | ||
|
|
ed548bac49 | ||
|
|
66b0b287f1 | ||
|
|
4a8203abff | ||
|
|
1b3f5d39a2 | ||
|
|
a101e85931 | ||
|
|
f08c27542b | ||
|
|
cdc93acb25 | ||
|
|
255511a44b | ||
|
|
d150a9f887 | ||
|
|
c0e374dbbd | ||
|
|
6238ed3c97 | ||
|
|
7caa7aa6aa | ||
|
|
05137833af | ||
|
|
5240cc79db | ||
|
|
e292243e9a | ||
|
|
72abb9ea1e | ||
|
|
9244c8e74a | ||
|
|
f93f666446 | ||
|
|
f7bbbd51bf | ||
|
|
03bb44ae2f | ||
|
|
468daefa21 | ||
|
|
4e997cda73 | ||
|
|
1045dca148 | ||
|
|
f713111232 | ||
|
|
f741a4b64f | ||
|
|
859d502095 | ||
|
|
4400c21523 | ||
|
|
83c9d0df8b | ||
|
|
365612cfda | ||
|
|
ff4c3bc5a8 | ||
|
|
818c590671 | ||
|
|
450f9c6d1d | ||
|
|
5ddc5e6b62 | ||
|
|
12ffae5b1b | ||
|
|
e495d318cb | ||
|
|
b54f277a9b | ||
|
|
8c02e290c4 | ||
|
|
6ca15267c9 | ||
|
|
496e2a486e | ||
|
|
2636a091c8 | ||
|
|
3342732846 | ||
|
|
2335d11356 | ||
|
|
9c94e48420 | ||
|
|
95f3fcadb9 | ||
|
|
97c7586fdb | ||
|
|
ec823e4c93 | ||
|
|
c8bac063a2 | ||
|
|
0fac7578ce | ||
|
|
1da101c202 | ||
|
|
6d08a67297 | ||
|
|
fff0ed307d | ||
|
|
73c6f82f5d | ||
|
|
2f555ca155 | ||
|
|
42650a2a3f | ||
|
|
5442023b80 | ||
|
|
ac31a0c29d | ||
|
|
7353b052b0 | ||
|
|
b7456e253d | ||
|
|
a74fc2fdf1 | ||
|
|
94ffe17f74 | ||
|
|
6297fc28f3 | ||
|
|
8301f4258f | ||
|
|
58889736f6 | ||
|
|
e3e8783c98 | ||
|
|
dc6cb1d2f1 | ||
|
|
71250a7b74 | ||
|
|
4a57841c74 | ||
|
|
e2648b8794 | ||
|
|
d2a32d3309 | ||
|
|
13f29d1666 | ||
|
|
4ff5920876 | ||
|
|
7e006543ba | ||
|
|
4a9fae23b3 | ||
|
|
9a7affbd69 | ||
|
|
a2179cd9af | ||
|
|
bbd6669ce5 | ||
|
|
93d503d5d9 | ||
|
|
5ca69b319a | ||
|
|
cfa20539f7 | ||
|
|
75c8fe77fe | ||
|
|
8bcd4c4ed5 | ||
|
|
d3752c4c2f | ||
|
|
15fc151bd7 | ||
|
|
9fa2406687 | ||
|
|
2743e96721 | ||
|
|
4d95403144 | ||
|
|
97cd5809ef | ||
|
|
cd1cab2a9f | ||
|
|
3aa42a83b1 | ||
|
|
5da225b425 | ||
|
|
adf6875d54 | ||
|
|
2764eb8518 | ||
|
|
22b4ac28a1 | ||
|
|
e7b83db34c | ||
|
|
3ca01303c0 | ||
|
|
ff8005a73b | ||
|
|
824a7c35f1 | ||
|
|
248854d1ac | ||
|
|
e314029326 | ||
|
|
addb269740 | ||
|
|
814da3da2b | ||
|
|
2126796de1 | ||
|
|
980968c65a | ||
|
|
c8b3d2318a | ||
|
|
cf09b40961 | ||
|
|
2f84f2d0b3 | ||
|
|
646efb936e | ||
|
|
50082cd220 | ||
|
|
94500e03e2 | ||
|
|
547df506f2 | ||
|
|
79f527b223 | ||
|
|
ac06a672b0 | ||
|
|
f48255f484 | ||
|
|
628a794ade | ||
|
|
44f05f6546 | ||
|
|
2b9ee49e73 | ||
|
|
488da31fe2 | ||
|
|
74e8ed196b | ||
|
|
549893c7d1 | ||
|
|
f15021b7d0 | ||
|
|
2dfeb3b7ac | ||
|
|
f83b794ce8 | ||
|
|
f545a2b2c6 | ||
|
|
e0deb74845 | ||
|
|
2e9567afb7 | ||
|
|
53d5eef846 | ||
|
|
e299469e18 | ||
|
|
db496ca88d | ||
|
|
3e510cbd1b | ||
|
|
fcc6f9adff | ||
|
|
e565ef5055 | ||
|
|
5b5608c1e3 | ||
|
|
d79db12faa | ||
|
|
67c08d7c1d | ||
|
|
f7676ba9ed | ||
|
|
ddd6471d14 | ||
|
|
857c01028a | ||
|
|
6b45f3e1c4 | ||
|
|
16c9f37b18 | ||
|
|
be65eb8850 | ||
|
|
75a19fdf18 | ||
|
|
46e7d8530c | ||
|
|
563eb60666 | ||
|
|
d84f5ae17e | ||
|
|
aaedf5a352 | ||
|
|
79695ee64d | ||
|
|
3b2182e711 | ||
|
|
1865b9a111 | ||
|
|
f5217289ca | ||
|
|
2cfc56ced8 | ||
|
|
fa4878979e | ||
|
|
a8c4d0935b | ||
|
|
1247a842a2 | ||
|
|
084bdcc8d0 | ||
|
|
5d011386a6 | ||
|
|
25fb64f983 | ||
|
|
fb170239c7 | ||
|
|
e09957a47d | ||
|
|
24fa277329 | ||
|
|
d1de6c322b | ||
|
|
1c796018d1 | ||
|
|
3a86af43fa | ||
|
|
f2d6def72e | ||
|
|
cade42d509 | ||
|
|
45ad8a06ad | ||
|
|
1135958e98 | ||
|
|
4042575d77 | ||
|
|
5d745834b1 | ||
|
|
1801219c33 | ||
|
|
0d1fe867d8 | ||
|
|
648a505954 | ||
|
|
b2e8820ed9 | ||
|
|
ac52f6ab23 | ||
|
|
b6b7732912 | ||
|
|
89dd77f722 | ||
|
|
fd51c8f5e9 | ||
|
|
15ddeac195 | ||
|
|
1f8286004f | ||
|
|
8822b07292 | ||
|
|
7afdd70e2f | ||
|
|
f076b6bb02 | ||
|
|
e4c2ef108c | ||
|
|
1ddfc3a985 | ||
|
|
5bbbc47a4c | ||
|
|
67f5e595a7 | ||
|
|
1074aa0c49 | ||
|
|
bbf915118b | ||
|
|
32aa7f0582 | ||
|
|
cc75ebec15 | ||
|
|
8a17cad2e5 | ||
|
|
203a1f2cd1 | ||
|
|
0435b14e12 | ||
|
|
1de4db9f4f | ||
|
|
e0c9e2f577 | ||
|
|
4edec553af | ||
|
|
2488113386 | ||
|
|
4054d531c3 | ||
|
|
ca2368dba9 | ||
|
|
ea043cab57 | ||
|
|
32825a66ac | ||
|
|
bb4cff8ecf | ||
|
|
e28b10d56f | ||
|
|
b0ccdae753 | ||
|
|
801a7ca17f | ||
|
|
4c93bea051 | ||
|
|
a89d420270 | ||
|
|
d484721b5c | ||
|
|
56bcb1933f | ||
|
|
cf216d780c | ||
|
|
9a1c54d580 | ||
|
|
07bf19d512 | ||
|
|
e54f8f4c62 | ||
|
|
3c8e1c92a8 | ||
|
|
6f1476edd3 | ||
|
|
e1edc998a2 | ||
|
|
3c04597306 | ||
|
|
7c2a752b37 | ||
|
|
190dcfe050 | ||
|
|
88623b98a7 | ||
|
|
f1f3a033e5 | ||
|
|
bb3c56abe2 | ||
|
|
a8ea64dbb1 | ||
|
|
ceeed09d07 | ||
|
|
0ba92bc26d | ||
|
|
9f41970832 | ||
|
|
51ecaa062d | ||
|
|
a960230a20 | ||
|
|
320613c439 | ||
|
|
6767541ead | ||
|
|
7260e0570c | ||
|
|
51be6b88db | ||
|
|
a97178af65 | ||
|
|
17d3775555 | ||
|
|
d97861bd8b | ||
|
|
bfbb96605f | ||
|
|
28f53fdc3d | ||
|
|
dc331ccb17 | ||
|
|
173317e9ce | ||
|
|
147043ee21 | ||
|
|
e413d0da8e | ||
|
|
7b62c79475 | ||
|
|
942c63d82b | ||
|
|
aa08f4d8f5 | ||
|
|
d98b4fd0b4 | ||
|
|
670e532a6b | ||
|
|
c6fbdb67f3 | ||
|
|
507bf6e5cf | ||
|
|
9d81b69e06 | ||
|
|
77b03a8dce | ||
|
|
944fa635ae | ||
|
|
0db32f0632 | ||
|
|
8075181033 | ||
|
|
4ba83ab573 | ||
|
|
eed9e72e83 | ||
|
|
bfb327deda | ||
|
|
cb27c4b08c | ||
|
|
7667d16626 | ||
|
|
7be1123a36 | ||
|
|
4bf12e4d4e | ||
|
|
b1fad0f478 | ||
|
|
9d36dbb44b | ||
|
|
50065b7ba0 | ||
|
|
d0895d6c0f | ||
|
|
32bd10bf74 | ||
|
|
54ffc982e9 | ||
|
|
c7cf937789 | ||
|
|
9d55b3c6fd | ||
|
|
dfb619eede | ||
|
|
c4539df2f2 | ||
|
|
8ee578468d | ||
|
|
b5ee44b419 | ||
|
|
86d3f793cd | ||
|
|
36f65ce291 | ||
|
|
afe8ce2ef7 | ||
|
|
e45f463723 | ||
|
|
02e9152738 | ||
|
|
4bb90a7443 | ||
|
|
d434a9103c | ||
|
|
bbfc8f9a9b | ||
|
|
98b37191eb | ||
|
|
ed5649a44b | ||
|
|
c6eddaafed | ||
|
|
560597da05 | ||
|
|
e97262489c | ||
|
|
ce0675f1fb | ||
|
|
46ef9a83bb | ||
|
|
399ffbb230 | ||
|
|
5e4e724a8e | ||
|
|
3edf7678bd | ||
|
|
1819cf02a9 | ||
|
|
16e902d20a | ||
|
|
4bd7102358 | ||
|
|
b1320b52c0 | ||
|
|
b234025410 | ||
|
|
4fa8029906 | ||
|
|
6fd897bb10 | ||
|
|
282e7c390e | ||
|
|
9294585cd6 | ||
|
|
82928c2a2a | ||
|
|
67635e9177 | ||
|
|
d7184d6500 | ||
|
|
5d19e13269 | ||
|
|
76ab40c195 | ||
|
|
e58bba74ce | ||
|
|
14374751de | ||
|
|
61344219d4 | ||
|
|
a07f767ed4 | ||
|
|
894f84c623 | ||
|
|
f4e5d98d1f | ||
|
|
72d3e7b9f3 | ||
|
|
67d557b53f | ||
|
|
d85d3a5a96 | ||
|
|
f50ce1f7aa | ||
|
|
89338dff4e | ||
|
|
1708ae3f1a | ||
|
|
a41b73fbc7 | ||
|
|
8e80fd1ab9 | ||
|
|
983e266fad | ||
|
|
df3e19b449 | ||
|
|
00a107cc4c | ||
|
|
919a5e3e24 | ||
|
|
d861779b69 | ||
|
|
f6f2bfdca2 | ||
|
|
332a7c9c6e | ||
|
|
77154f295f | ||
|
|
158d74d257 | ||
|
|
cefcafc508 | ||
|
|
ac5cc19836 | ||
|
|
2deb41fe63 | ||
|
|
039cc929ad | ||
|
|
0f67bd7cfe | ||
|
|
76670734f4 | ||
|
|
73cee58d23 | ||
|
|
7b4c49a95f | ||
|
|
3c690c52ba | ||
|
|
de08716526 | ||
|
|
0ed47e1bb7 | ||
|
|
3166588033 | ||
|
|
588513fc9a | ||
|
|
609723b3c1 | ||
|
|
3eef3290ad | ||
|
|
13eeb6ca33 | ||
|
|
b2043511ee | ||
|
|
200d6fe664 | ||
|
|
e1efe3269c | ||
|
|
84679ba78b | ||
|
|
78ce2563be | ||
|
|
f6d6e932de | ||
|
|
5507954e04 | ||
|
|
8028a5b24a | ||
|
|
c91843edea | ||
|
|
8596142336 | ||
|
|
01be4ce166 | ||
|
|
ed38dbe28f | ||
|
|
9ed7e883f2 | ||
|
|
edf19ab7b4 | ||
|
|
afa3d611d6 | ||
|
|
a4f11fa4f5 | ||
|
|
c3607fd551 | ||
|
|
30a4150c8e | ||
|
|
23b039c8cd | ||
|
|
b36b89151e | ||
|
|
e3206b9de4 | ||
|
|
c84e303fb5 | ||
|
|
2b83062fc6 | ||
|
|
0c58cb744c | ||
|
|
8857766b5a | ||
|
|
08a6f554c3 | ||
|
|
7800e68b73 | ||
|
|
eb4792128f | ||
|
|
bb4953f3e8 | ||
|
|
63f0797e70 | ||
|
|
1f95eddbda | ||
|
|
8fa1b2bb9d | ||
|
|
d7ea5b5266 | ||
|
|
c1a4a1da10 | ||
|
|
fe5146d8f2 | ||
|
|
2145907cfe | ||
|
|
2516574832 |
307
NEWS
307
NEWS
@@ -1,3 +1,310 @@
|
||||
Overview of Changes in GTK+ 3.8.8
|
||||
=================================
|
||||
|
||||
* Bugs fixed:
|
||||
705203 Natural scroll doesn't work immediately
|
||||
712799 Memory leak when listing Avahi printers
|
||||
715029 Ensure GdkScreen::monitors-changed gets emitted...
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.8.7
|
||||
=================================
|
||||
|
||||
* Bugs fixed:
|
||||
577642 Selected Printer Does Not Stick Between Sessions
|
||||
699574 gtk_selection_owner_set() breaks mouse wheel scrolling
|
||||
702663 GtkComboBox::appears-as-list does not respect scrolling
|
||||
703784 Epiphany crash during displaying printing dialog
|
||||
705176 Reordering columns in GtkTreeView freezes mutter
|
||||
710666 Frame clock related bug fixes
|
||||
710754 GtkModelMenu: don't leak submenus
|
||||
712213 Nautilus "connect to server" dialog has an incorrect "_"...
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.8.6
|
||||
=================================
|
||||
|
||||
* Bugs fixed:
|
||||
698730 tooltip: Fix possible wrong placement
|
||||
709697 Fix a warning in builg gtk+ with clang
|
||||
709967 Double free in gtkicontheme.c
|
||||
710073 Assertion failure because _gtk_icon_info_load...
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.8.5
|
||||
=================================
|
||||
|
||||
* Bugs fixed:
|
||||
339539 Ctrl-C, Ctrl-V changes tags
|
||||
341146 reorder lines in configure.in for a better display
|
||||
513812 Optimize gdk_cairo_set_source_pixbuf() alpha multipli...
|
||||
586107 gtkprintbackendpapi.c does not compile on Solaris 10
|
||||
696756 x11: gdk_device_get_source : assertion `GDK_IS_DEVICE...
|
||||
703062 GtkTreeViewColumn returns negative size request on em...
|
||||
706269 Clarify GtkBox, GtkHBox, and GtkVBox documentation
|
||||
706345 GtkExpander's click-and-drag behavior should match th...
|
||||
707872 GtkSwitch shouldn't have a default name
|
||||
707926 GtkSwitch shouldn't have a default accessible description
|
||||
708414 entrycompletion: set the GtkWindow as attached to the...
|
||||
709056 icontheme: use g_file_load_contents() for symbolic icons
|
||||
709264 Fix memory leaks in icons handling
|
||||
|
||||
* Translation updates:
|
||||
Scottish Gaelic
|
||||
Slovenian
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.8.3
|
||||
=================================
|
||||
|
||||
* Bugs fixed:
|
||||
667759 gtkdnd-quartz.c is missing annotations for introspection
|
||||
672271 File chooser seems over-enthusiastic about using subdir...
|
||||
674108 Hard crash due to wrong NSAutoreleasePool stacking
|
||||
680953 set_item_width / text wrapping doesn't work in iconview...
|
||||
688738 GtkMenuButton problem with mnemonics / accelerators
|
||||
691921 GTK+ (quartz) built on Mac OS X 10.5 references [NSMenu...
|
||||
692548 Quartz: Cursor doesn't reset when the mouse leaves a to...
|
||||
694273 Patch to support NSTextInputClient in text widgets
|
||||
694755 When clicking Activities, sometimes gnome-shell crashes.
|
||||
696498 can't set download folder
|
||||
696640 GtkButton: Don't suppress unhandled mouse events
|
||||
698183 Text input is too slow and some keys are broken after c...
|
||||
698758 Wrong limit for "Native Windows wider or taller than 65...
|
||||
700185 GtkWindow: problem with child widget visibility
|
||||
700779 gtk_menu_item_draw puts the arrow too close to the border
|
||||
701332 Patch for minor glitch in NSTextInput
|
||||
701341 Windows only paint once in Weston 1.1
|
||||
701365 Do not assert sm_proxy != NULL in GtkApplication inhibi...
|
||||
701613 XEmbed doesn't work with frame-synced GTK/Mutter
|
||||
702598 Invalid read of size 4 in gtk_icon_info_get_embedded_rect
|
||||
702763 ellipsize placeholder text
|
||||
702913 Reduce hash table lookups in gdk_x11_screen_supports_ne...
|
||||
703069 Opening a big menu activates some menu entry
|
||||
703220 Memory allocation integer overflow in gdk_cairo_set_sou...
|
||||
705181 Annoying beep on arrow keys when using IME on MacOS
|
||||
705182 Reset Cocoa IME state when immodule is reset
|
||||
705320 gtkicontheme: check for GdkPixbuf first
|
||||
705692 Segmentation fault on horizontal slider
|
||||
705750 Quartz input method doesn't work correctly for Chinese...
|
||||
706152 g_object_notify called with NULL priv->focus_widget
|
||||
|
||||
* Translation updates:
|
||||
Brazilian Portuguese
|
||||
Traditional Chinese
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.8.2
|
||||
=================================
|
||||
|
||||
* Bugs fixed:
|
||||
504901 GtkCellRendererCombo requires click-and-hold
|
||||
695120 GtkMenu and GdkWindow sizes can get out of sync
|
||||
698051 Typo in documentation comment
|
||||
698181 Document icon-shadow CSS property
|
||||
699104 when nothing is selected, Add to Bookmarks is enabled...
|
||||
699239 Choose DnD/tooltip widget better on GtkOverlay and ot...
|
||||
699750 Print dialog crashes when printer does not provide pr...
|
||||
699901 GTK CSS keybinding broken
|
||||
699929 GtkCheckMenuItem: remove an unused boolean field
|
||||
700007 Various small improvements
|
||||
700079 Fix accels added after the window was shown not working
|
||||
|
||||
Translation updates:
|
||||
Brazilian Portuguese
|
||||
German
|
||||
Italian
|
||||
Japanese
|
||||
Lithuanian
|
||||
Norwegian bokmål
|
||||
Russian
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.8.1
|
||||
=================================
|
||||
|
||||
* Broadway backend improvements:
|
||||
- Ensure window sizes are synched right
|
||||
- Sync surface updates with paint clock
|
||||
- Add support for password authentication
|
||||
- Reuse surfaces passed to server
|
||||
|
||||
* CSS improvements:
|
||||
- Add cycle detection to color resolving
|
||||
|
||||
* Bug fixes
|
||||
675649 gtk-demo: Fix typo
|
||||
681446 gtkdnd memory leak
|
||||
685419 gtkprintbackendfile: Infinite loop in _cairo_write()
|
||||
685420 Critical warnings when GtkPrintJob is released too early
|
||||
690275 scrolling on other windows is applied when coming back...
|
||||
696370 GtkOverlay doesn't work on top of GtkClutterEmbed
|
||||
696622 gtk option printer widget segfault in epiphany
|
||||
696623 GtkOverlay with a revealer produces warnings setting a...
|
||||
696882 GtkWindow changes size after hide/show cycle
|
||||
697144 Popup menu mnemonics fixes
|
||||
697263 Impossible to set window transparency on 3.8
|
||||
697427 Unreferencing GtkStatusIcon object causes abort
|
||||
|
||||
* Translation updates
|
||||
Basque
|
||||
British English
|
||||
Catalan (Valencian)
|
||||
Czech
|
||||
Finnish
|
||||
Hungarian
|
||||
Indonesian
|
||||
Interlingua
|
||||
Kannada
|
||||
Malayalam
|
||||
Norwegian bokmål
|
||||
Polish
|
||||
Simplified Chinese
|
||||
Slovak
|
||||
Slovenian
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.8.0
|
||||
=================================
|
||||
|
||||
* Bug fixes
|
||||
674759 GtkLabel: wrong value of "mnemonic-keyval" when...
|
||||
695493 testgtk: issues with the color selection example
|
||||
696051 vertical grid lines in rtl mode
|
||||
696171 GtkAssistant highlighted font unreadable
|
||||
696202 Add GtkSpinner animation back to Win32 theme
|
||||
696232 win32: do not crash on invalid utf8 conversion
|
||||
696405 appchooserbutton: filter out applications not...
|
||||
696546 Fix a crash in gtk_print_backend_cups_finalize()
|
||||
696553 Fix a crash in avahi_create_browsers()
|
||||
Use natural size to set treeview adjustments
|
||||
|
||||
* Translation updates
|
||||
Aragonese
|
||||
Czech
|
||||
French
|
||||
Galician
|
||||
German
|
||||
Gujarati
|
||||
Hindi
|
||||
Hungarian
|
||||
Italian
|
||||
Kazakh
|
||||
Marathi
|
||||
Odia
|
||||
Persian
|
||||
Punjabi
|
||||
Russian
|
||||
Slovenian
|
||||
Tamil
|
||||
Traditional Chinese
|
||||
Ukrainian
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.7.14
|
||||
==================================
|
||||
|
||||
* A lot of filechooser button fixes
|
||||
|
||||
* Bugs fixed:
|
||||
586367 In local_only mode, file chooser should return native...
|
||||
671939 crash on exit
|
||||
674759 GtkLabel: wrong value of "mnemonic-keyval" when "use-...
|
||||
691040 selection is reported incorrectly in file chooser button
|
||||
694339 Fix build of GTK+ on Windows
|
||||
695200 Switching apps while a combobox open makes the parent...
|
||||
695278 Avoid passing a NULL title to setTitle
|
||||
695304 GtkTextView: don't popdown a bubble if we don't have one
|
||||
695312 Initial 'text' set in the non-numeric-only GtkSpinBut...
|
||||
695375 GtkEntryAccessible: also handle entry icon tooltip NU...
|
||||
695391 wayland documentation section id is "gtk-osx"
|
||||
695473 treeview: fix a critical warning
|
||||
695482 Universal Access panel appears jumbled and horrible a...
|
||||
695682 Cannot build docs for wayland-only build
|
||||
695714 Getting of printer info can hang
|
||||
695715 Use DBus calls instead of Avahi API
|
||||
695772 Different appearance of menus within Audacious
|
||||
695783 GtkApplication: Allow passing windows on non-X11 targets
|
||||
695874 GtkFontChooser docs
|
||||
695948 GtkFontButton sets wrong show-preview-entry
|
||||
|
||||
* Translation updates:
|
||||
Arabic
|
||||
Assamese
|
||||
Belarusian
|
||||
Brazilian Portuguese
|
||||
Catalan
|
||||
Danish
|
||||
Finnish
|
||||
French
|
||||
Galician
|
||||
German
|
||||
Greek
|
||||
Indonesian
|
||||
Kazakh
|
||||
Lithuanian
|
||||
Korean
|
||||
Polish
|
||||
Portuguese
|
||||
Punjabi
|
||||
Serbian
|
||||
Slovenian
|
||||
Spanish
|
||||
Uyghur
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.7.12
|
||||
==================================
|
||||
|
||||
* We now support touch friendly popups on entries and text views
|
||||
in place of context menus, on touch devices
|
||||
|
||||
* The print dialog now shows printers that are discovered
|
||||
using avahi, if configured with --enable-avahi-browsing
|
||||
|
||||
* Bugs fixed:
|
||||
650424 treeview: expander is not easily themable
|
||||
674207 window: Compiler warning when not building on X11
|
||||
675333 Cannot forget association in Open With dialog: program...
|
||||
688956 Print dialog needs to support Bonjour broadcasting of ...
|
||||
691426 get_current_desktop does not interpret property data c...
|
||||
692955 GtkIconCache fails to load non-builtin icons
|
||||
693995 GkColorChooserWidget crashes in select_swatch if palet...
|
||||
694059 GtkTreeView accessible object:state-changed-expanded e...
|
||||
694162 Memory leaks due to extra ref in gtk_ui_manager_builda...
|
||||
694217 drag&drop half-broken – items get stuck while dragging
|
||||
694274 wayland: don't attempt to unqueue events when events a...
|
||||
694302 Convert pixbuf animation demo (both copies) to GdkFram...
|
||||
694395 Remove unused code
|
||||
694406 Excessive amount of accessible text events when changi...
|
||||
694451 Containers shouldn't special case RTL positions
|
||||
694732 gdk: prevent NULL pointer access when debugging is ena...
|
||||
694742 Fix possible memory leak when GlobalAlloc() fails
|
||||
694924 Dead code in GtkClipboard
|
||||
694925 non-expose based draw() doesn't render window background
|
||||
694968 GtkIconTheme: fix failed assertion when asynchrnously ...
|
||||
694990 use primary icon slot for search icon
|
||||
695131 gtkbin: initialize minimum and natural size to zero fo...
|
||||
|
||||
Translation updates:
|
||||
Brazilian Portuguese
|
||||
Czech
|
||||
Estonian
|
||||
German
|
||||
Greek
|
||||
Gujarati
|
||||
Lithuanian
|
||||
Polish
|
||||
Punjabi
|
||||
Russian
|
||||
Serbian
|
||||
Simplified Chinese
|
||||
Slovenian
|
||||
Spanish
|
||||
Traditional Chinese
|
||||
Vietnamese
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.7.10
|
||||
==================================
|
||||
|
||||
|
||||
@@ -4,4 +4,8 @@ SUBDIRS = \
|
||||
vs9 \
|
||||
vs10
|
||||
|
||||
EXTRA_DIST += \
|
||||
gen-file-list-gtk.py \
|
||||
gengir_gtk.bat
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
|
||||
140
build/win32/gen-file-list-gtk.py
Normal file
140
build/win32/gen-file-list-gtk.py
Normal file
@@ -0,0 +1,140 @@
|
||||
#!/usr/bin/python
|
||||
# vim: encoding=utf-8
|
||||
# Generate the file lists for processing with g-ir-scanner
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
import string
|
||||
import subprocess
|
||||
import optparse
|
||||
|
||||
def gen_gdk_filelist(srcroot, subdir, dest):
|
||||
vars = read_vars_from_AM(os.path.join(srcroot, subdir, 'Makefile.am'),
|
||||
vars = {},
|
||||
conds = {},
|
||||
filters = ['gdk_public_h_sources', 'gdk_c_sources'])
|
||||
|
||||
vars['gdk_enums'] = 'gdkenumtypes.c gdkenumtypes.h'
|
||||
|
||||
files = vars['gdk_public_h_sources'].split() + \
|
||||
vars['gdk_c_sources'].split() + \
|
||||
vars['gdk_enums'].split()
|
||||
|
||||
sources = [i for i in files if (i != 'gdkkeysyms-compat.h')]
|
||||
|
||||
with open(dest, 'w') as d:
|
||||
for i in sources:
|
||||
d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
|
||||
|
||||
def gen_filelist_gtk(srcroot, subdir, dest):
|
||||
vars = read_vars_from_AM(os.path.join(srcroot, 'gtk', 'Makefile.am'),
|
||||
vars = {},
|
||||
conds = {'USE_WIN32':True},
|
||||
filters = ['gtkinclude_HEADERS',
|
||||
'deprecatedinclude_HEADERS',
|
||||
'gtk_base_c_sources'])
|
||||
|
||||
vars['gtk_other_src'] = 'gtkprintoperation-win32.c gtktypebuiltins.h gtktypebuiltins.c'
|
||||
|
||||
files = vars['gtkinclude_HEADERS'].split() + \
|
||||
vars['deprecatedinclude_HEADERS'].split() + \
|
||||
vars['gtk_base_c_sources'].split() + \
|
||||
vars['gtk_other_src'].split()
|
||||
|
||||
sources = [i for i in files if not (i.endswith('private.h')) and i != 'gtktextdisplay.h' and i != 'gtktextlayout.h']
|
||||
|
||||
with open(dest, 'w') as d:
|
||||
for i in sources:
|
||||
d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
|
||||
|
||||
def read_vars_from_AM(path, vars = {}, conds = {}, filters = None):
|
||||
'''
|
||||
path: path to the Makefile.am
|
||||
vars: predefined variables
|
||||
conds: condition variables for Makefile
|
||||
filters: if None, all variables defined are returned,
|
||||
otherwise, it is a list contains that variables should be returned
|
||||
'''
|
||||
cur_vars = vars.copy()
|
||||
RE_AM_VAR_REF = re.compile(r'\$\((\w+?)\)')
|
||||
RE_AM_VAR = re.compile(r'^\s*(\w+)\s*=(.*)$')
|
||||
RE_AM_INCLUDE = re.compile(r'^\s*include\s+(\w+)')
|
||||
RE_AM_CONTINUING = re.compile(r'\\\s*$')
|
||||
RE_AM_IF = re.compile(r'^\s*if\s+(\w+)')
|
||||
RE_AM_ELSE = re.compile(r'^\s*else')
|
||||
RE_AM_ENDIF = re.compile(r'^\s*endif')
|
||||
def am_eval(cont):
|
||||
return RE_AM_VAR_REF.sub(lambda x: cur_vars.get(x.group(1), ''), cont)
|
||||
with open(path, 'r') as f:
|
||||
contents = f.readlines()
|
||||
#combine continuing lines
|
||||
i = 0
|
||||
ncont = []
|
||||
while i < len(contents):
|
||||
line = contents[i]
|
||||
if RE_AM_CONTINUING.search(line):
|
||||
line = RE_AM_CONTINUING.sub('', line)
|
||||
j = i + 1
|
||||
while j < len(contents) and RE_AM_CONTINUING.search(contents[j]):
|
||||
line += RE_AM_CONTINUING.sub('', contents[j])
|
||||
j += 1
|
||||
else:
|
||||
if j < len(contents):
|
||||
line += contents[j]
|
||||
i = j
|
||||
else:
|
||||
i += 1
|
||||
ncont.append(line)
|
||||
|
||||
#include, var define, var evaluation
|
||||
i = -1
|
||||
skip = False
|
||||
oldskip = []
|
||||
while i < len(ncont) - 1:
|
||||
i += 1
|
||||
line = ncont[i]
|
||||
mo = RE_AM_IF.search(line)
|
||||
if mo:
|
||||
oldskip.append(skip)
|
||||
skip = False if mo.group(1) in conds and conds[mo.group(1)] \
|
||||
else True
|
||||
continue
|
||||
mo = RE_AM_ELSE.search(line)
|
||||
if mo:
|
||||
skip = not skip
|
||||
continue
|
||||
mo = RE_AM_ENDIF.search(line)
|
||||
if mo:
|
||||
if oldskip:
|
||||
skip = oldskip.pop()
|
||||
continue
|
||||
if not skip:
|
||||
mo = RE_AM_INCLUDE.search(line)
|
||||
if mo:
|
||||
cur_vars.update(read_vars_from_AM(am_eval(mo.group(1)), cur_vars, conds, None))
|
||||
continue
|
||||
mo = RE_AM_VAR.search(line)
|
||||
if mo:
|
||||
cur_vars[mo.group(1)] = am_eval(mo.group(2).strip())
|
||||
continue
|
||||
|
||||
#filter:
|
||||
if filters != None:
|
||||
ret = {}
|
||||
for i in filters:
|
||||
ret[i] = cur_vars.get(i, '')
|
||||
return ret
|
||||
else:
|
||||
return cur_vars
|
||||
|
||||
def main(argv):
|
||||
srcroot = '..\\..'
|
||||
subdir_gdk = 'gdk'
|
||||
subdir_gtk = 'gtk'
|
||||
|
||||
gen_gdk_filelist(srcroot, subdir_gdk, 'gdk_list')
|
||||
gen_filelist_gtk(srcroot, subdir_gtk, 'gtk_list')
|
||||
return 0
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(sys.argv))
|
||||
177
build/win32/gengir_gtk.bat
Normal file
177
build/win32/gengir_gtk.bat
Normal file
@@ -0,0 +1,177 @@
|
||||
@echo off
|
||||
|
||||
setlocal EnableDelayedExpansion
|
||||
|
||||
rem Needed environmental variables:
|
||||
rem PLAT: Windows platform-Win32 (i.e. x86) or x64 (i.e. x86-64)
|
||||
rem CONF: Configuration Type, Release or Debug
|
||||
rem VSVER: Visual C++ version used [9, 10 or 11]
|
||||
rem BASEDIR: Where the dependent libraries/headers are located
|
||||
rem PKG_CONFIG_PATH: Where the GLib/ATK/Pango/GDK-Pixbuf and their dependent pkg-config .pc files can be found
|
||||
rem MINGWDIR: Installation path of MINGW GCC, so gcc.exe can be found in %MINGWDIR%\bin.
|
||||
|
||||
rem Note that the Python executable/installation and all the runtime dependencies of the
|
||||
rem library/libraries need to be in your PATH or %BASEBIN%\bin.
|
||||
|
||||
rem Check the environemental variables...
|
||||
if /i "%PLAT%" == "Win32" goto PLAT_OK
|
||||
if /i "%PLAT%" == "x64" goto PLAT_OK
|
||||
if /i "%PLAT%" == "x86" (
|
||||
set PLAT=Win32
|
||||
goto PLAT_OK
|
||||
)
|
||||
if /i "%PLAT%" == "x86-64" (
|
||||
set PLAT=x64
|
||||
goto PLAT_OK
|
||||
)
|
||||
goto ERR_PLAT
|
||||
|
||||
:PLAT_OK
|
||||
if "%VSVER%" == "9" goto VSVER_OK
|
||||
if "%VSVER%" == "10" goto VSVER_OK
|
||||
if "%VSVER%" == "11" goto VSVER_OK
|
||||
goto ERR_VSVER
|
||||
:VSVER_OK
|
||||
if /i "%CONF%" == "Release" goto CONF_OK
|
||||
if /i "%CONF%" == "Debug" goto CONF_OK
|
||||
goto ERR_CONF
|
||||
:CONF_OK
|
||||
if "%BASEDIR%" == "" goto ERR_BASEDIR
|
||||
if not exist %BASEDIR% goto ERR_BASEDIR
|
||||
|
||||
if "%PKG_CONFIG_PATH%" == "" goto ERR_PKGCONFIG
|
||||
if not exist %PKG_CONFIG_PATH%\gobject-2.0.pc goto ERR_PKGCONFIG
|
||||
|
||||
if "%MINGWDIR%" == "" goto ERR_MINGWDIR
|
||||
if not exist %MINGWDIR%\bin\gcc.exe goto ERR_MINGWDIR
|
||||
|
||||
set CC=cl
|
||||
set BINDIR=%CD%\vs%VSVER%\%CONF%\%PLAT%\bin
|
||||
set INCLUDE=%BASEDIR%\include\glib-2.0;%BASEDIR%\lib\glib-2.0\include;%INCLUDE%
|
||||
set LIB=%BINDIR%;%BASEDIR%\lib;%LIB%
|
||||
set PATH=%BINDIR%;%BASEDIR%\bin;%PATH%;%MINGWDIR%\bin
|
||||
set PYTHONPATH=%BASEDIR%\lib\gobject-introspection;%BINDIR%
|
||||
|
||||
echo Creating filelist files for generating GDK3/GTK3 .gir's...
|
||||
call python gen-file-list-gtk.py
|
||||
|
||||
echo Setup .bat for generating GDK3/GTK3 .gir's...
|
||||
|
||||
rem ===============================================================================
|
||||
rem Begin setup of gtk_gir.bat to create Gdk-3.0.gir
|
||||
rem (The ^^ is necessary to span the command to multiple lines on Windows cmd.exe!)
|
||||
rem ===============================================================================
|
||||
|
||||
echo echo Generating Gdk-3.0.gir...> gtk_gir.bat
|
||||
echo @echo off>> gtk_gir.bat
|
||||
echo.>> gtk_gir.bat
|
||||
rem ===============================================================
|
||||
rem Setup the command line flags to g-ir-scanner for Gdk-3.0.gir...
|
||||
rem ===============================================================
|
||||
echo python %BASEDIR%\bin\g-ir-scanner --verbose -I..\.. -I..\..\gdk ^^>> gtk_gir.bat
|
||||
echo -I%BASEDIR%\include\glib-2.0 -I%BASEDIR%\lib\glib-2.0\include ^^>> gtk_gir.bat
|
||||
echo -I%BASEDIR%\include\pango-1.0 -I%BASEDIR%\include\atk-1.0 ^^>> gtk_gir.bat
|
||||
echo -I%BASEDIR%\include\gdk-pixbuf-2.0 -I%BASEDIR%\include ^^>> gtk_gir.bat
|
||||
echo --namespace=Gdk --nsversion=3.0 ^^>> gtk_gir.bat
|
||||
echo --include=Gio-2.0 --include=GdkPixbuf-2.0 ^^>> gtk_gir.bat
|
||||
echo --include=Pango-1.0 --include=cairo-1.0 ^^>> gtk_gir.bat
|
||||
echo --no-libtool --library=gdk-3-vs%VSVER% ^^>> gtk_gir.bat
|
||||
echo --reparse-validate --add-include-path=%BASEDIR%\share\gir-1.0 --add-include-path=. ^^>> gtk_gir.bat
|
||||
echo --pkg-export gdk-3.0 --warn-all --c-include="gdk/gdk.h" ^^>> gtk_gir.bat
|
||||
echo -I..\.. -DG_LOG_DOMAIN=\"Gdk\" -DGDK_COMPILATION ^^>> gtk_gir.bat
|
||||
echo --filelist=gdk_list ^^>> gtk_gir.bat
|
||||
echo -o Gdk-3.0.gir>> gtk_gir.bat
|
||||
echo.>> gtk_gir.bat
|
||||
|
||||
echo Completed setup of .bat for generating Gdk-3.0.gir.
|
||||
echo.>> gtk_gir.bat
|
||||
|
||||
rem =================================================
|
||||
rem Finish setup of gtk_gir.bat to create Gtk-3.0.gir
|
||||
rem =================================================
|
||||
|
||||
rem ===============================================================================
|
||||
rem Begin setup of gtk_gir.bat to create Gtk-3.0.gir
|
||||
rem (The ^^ is necessary to span the command to multiple lines on Windows cmd.exe!)
|
||||
rem ===============================================================================
|
||||
|
||||
echo echo Generating Gtk-3.0.gir...>> gtk_gir.bat
|
||||
echo.>> gtk_gir.bat
|
||||
rem ===============================================================
|
||||
rem Setup the command line flags to g-ir-scanner for Gtk-3.0.gir...
|
||||
rem ===============================================================
|
||||
echo python %BASEDIR%\bin\g-ir-scanner --verbose -I..\.. -I..\..\gtk -I..\..\gdk ^^>> gtk_gir.bat
|
||||
echo -I%BASEDIR%\include\glib-2.0 -I%BASEDIR%\lib\glib-2.0\include ^^>> gtk_gir.bat
|
||||
echo -I%BASEDIR%\include\pango-1.0 -I%BASEDIR%\include\atk-1.0 ^^>> gtk_gir.bat
|
||||
echo -I%BASEDIR%\include\gdk-pixbuf-2.0 -I%BASEDIR%\include ^^>> gtk_gir.bat
|
||||
echo --namespace=Gtk --nsversion=3.0 ^^>> gtk_gir.bat
|
||||
echo --include=Atk-1.0 ^^>> gtk_gir.bat
|
||||
echo --include-uninstalled=./Gdk-3.0.gir ^^>> gtk_gir.bat
|
||||
echo --no-libtool --library=gtk-3-vs%VSVER% ^^>> gtk_gir.bat
|
||||
echo --reparse-validate --add-include-path=%BASEDIR%\share\gir-1.0 --add-include-path=. ^^>> gtk_gir.bat
|
||||
echo --pkg-export gtk+-3.0 --warn-all --c-include="gtk/gtkx.h" ^^>> gtk_gir.bat
|
||||
echo -I..\.. -DG_LOG_DOMAIN=\"Gtk\" -DGTK_LIBDIR=\"/dummy/lib\" ^^>> gtk_gir.bat
|
||||
echo -Dtime_t=long ^^>> gtk_gir.bat
|
||||
echo -DGTK_DATADIR=\"/dummy/share\" -DGTK_DATA_PREFIX=\"/dummy\" ^^>> gtk_gir.bat
|
||||
echo -DGTK_SYSCONFDIR=\"/dummy/etc\" -DGTK_VERSION=\"3.6.2\" ^^>> gtk_gir.bat
|
||||
echo -DGTK_BINARY_VERSION=\"3.0.0\" -DGTK_HOST=\"i686-pc-vs%VSVER%\" ^^>> gtk_gir.bat
|
||||
echo -DGTK_COMPILATION -DGTK_PRINT_BACKENDS=\"file\" ^^>> gtk_gir.bat
|
||||
echo -DGTK_PRINT_PREVIEW_COMMAND=\"undefined-gtk-print-preview-command\" ^^>> gtk_gir.bat
|
||||
echo -DGTK_FILE_SYSTEM_ENABLE_UNSUPPORTED -DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED ^^>> gtk_gir.bat
|
||||
echo -DINCLUDE_IM_am_et -DINCLUDE_IM_cedilla -DINCLUDE_IM_cyrillic_translit ^^>> gtk_gir.bat
|
||||
echo -DINCLUDE_IM_ime -DINCLUDE_IM_inuktitut -DINCLUDE_IM_ipa ^^>> gtk_gir.bat
|
||||
echo -DINCLUDE_IM_multipress -DINCLUDE_IM_thai -DINCLUDE_IM_ti_er ^^>> gtk_gir.bat
|
||||
echo -DINCLUDE_IM_ti_et -DINCLUDE_IM_viqr --filelist=gtk_list ^^>> gtk_gir.bat
|
||||
echo -o Gtk-3.0.gir>> gtk_gir.bat
|
||||
echo.>> gtk_gir.bat
|
||||
|
||||
echo Completed setup of .bat for generating Gtk-3.0.gir.
|
||||
echo.>> gtk_gir.bat
|
||||
|
||||
rem =================================================
|
||||
rem Finish setup of gtk_gir.bat to create Gtk-3.0.gir
|
||||
rem =================================================
|
||||
|
||||
rem =======================
|
||||
rem Now generate the .gir's
|
||||
rem =======================
|
||||
CALL gtk_gir.bat
|
||||
|
||||
rem Clean up the .bat/filelists for generating the .gir files...
|
||||
del gtk_gir.bat
|
||||
del gdk_list
|
||||
del gtk_list
|
||||
|
||||
rem Now compile the generated .gir files
|
||||
%BASEDIR%\bin\g-ir-compiler --includedir=. --debug --verbose Gdk-3.0.gir -o Gdk-3.0.typelib
|
||||
%BASEDIR%\bin\g-ir-compiler --includedir=. --debug --verbose Gtk-3.0.gir -o Gtk-3.0.typelib
|
||||
rem Copy the generated .girs and .typelibs to their appropriate places
|
||||
|
||||
mkdir ..\..\build\win32\vs%VSVER%\%CONF%\%PLAT%\share\gir-1.0
|
||||
move /y *.gir %BASEDIR%\share\gir-1.0\
|
||||
|
||||
mkdir ..\..\build\win32\vs%VSVER%\%CONF%\%PLAT%\lib\girepository-1.0
|
||||
move /y *.typelib %BASEDIR%\lib\girepository-1.0\
|
||||
|
||||
goto DONE
|
||||
|
||||
:ERR_PLAT
|
||||
echo You need to specify a valid Platform [set PLAT=Win32 or PLAT=x64]
|
||||
goto DONE
|
||||
:ERR_VSVER
|
||||
echo You need to specify your Visual Studio version [set VSVER=9 or VSVER=10 or VSVER=11]
|
||||
goto DONE
|
||||
:ERR_CONF
|
||||
echo You need to specify a valid Configuration [set CONF=Release or CONF=Debug]
|
||||
goto DONE
|
||||
:ERR_BASEDIR
|
||||
echo You need to specify a valid BASEDIR.
|
||||
goto DONE
|
||||
:ERR_PKGCONFIG
|
||||
echo You need to specify a valid PKG_CONFIG_PATH
|
||||
goto DONE
|
||||
:ERR_MINGWDIR
|
||||
echo You need to specify a valid MINGWDIR, where a valid gcc installation can be found.
|
||||
goto DONE
|
||||
:DONE
|
||||
|
||||
@@ -1,27 +1,30 @@
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
EXTRA_DIST += \
|
||||
README.txt \
|
||||
gtk+.sln \
|
||||
gtk+.props \
|
||||
gdk-win32.vcxproj \
|
||||
gdk-win32.vcxproj.filters \
|
||||
gdk.vcxproj \
|
||||
gdk.vcxprojin \
|
||||
gdk.vcxproj.filters \
|
||||
gdk.vcxproj.filtersin \
|
||||
gtk.vcxproj \
|
||||
gtk.vcxprojin \
|
||||
gtk.vcxproj.filters \
|
||||
gtk.vcxproj.filtersin \
|
||||
gtk3-demo.vcxproj \
|
||||
gtk3-demo.vcxproj.filters \
|
||||
libgail.vcxproj \
|
||||
libgail.vcxproj.filters \
|
||||
libgail.vcxprojin \
|
||||
libgail.vcxproj.filtersin \
|
||||
gailutil.vcxproj \
|
||||
gailutil.vcxproj.filters \
|
||||
EXTRA_DIST += \
|
||||
README.txt \
|
||||
gtk+.sln \
|
||||
gtk+.props \
|
||||
gdk-win32.vcxproj \
|
||||
gdk-win32.vcxproj.filters \
|
||||
gdk.vcxproj \
|
||||
gdk.vcxprojin \
|
||||
gdk.vcxproj.filters \
|
||||
gdk.vcxproj.filtersin \
|
||||
gtk.vcxproj \
|
||||
gtk.vcxprojin \
|
||||
gtk.vcxproj.filters \
|
||||
gtk.vcxproj.filtersin \
|
||||
gtk3-demo.vcxproj \
|
||||
gtk3-demo.vcxproj.filters \
|
||||
gtk3-demo-application.vcxproj \
|
||||
gtk3-demo-application.vcxproj.filters \
|
||||
gtka11y.vcxproj \
|
||||
gtka11y.vcxproj.filters \
|
||||
gtka11y.vcxprojin \
|
||||
gtka11y.vcxproj.filtersin \
|
||||
gailutil.vcxproj \
|
||||
gailutil.vcxproj.filters \
|
||||
gengir.vcxproj \
|
||||
install.vcxproj
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
<OutputFile>$(OutDir)$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll</OutputFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ModuleDefinitionFile>..\..\..\libgail-util\gailutil.def</ModuleDefinitionFile>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
@@ -114,7 +114,7 @@
|
||||
<ModuleDefinitionFile>..\..\..\libgail-util\gailutil.def</ModuleDefinitionFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@@ -136,7 +136,7 @@
|
||||
<OutputFile>$(OutDir)$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll</OutputFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ModuleDefinitionFile>..\..\..\libgail-util\gailutil.def</ModuleDefinitionFile>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
@@ -161,7 +161,7 @@
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
|
||||
@@ -86,12 +86,12 @@
|
||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>imm32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll</OutputFile>
|
||||
<ModuleDefinitionFile>$(IntDir)gdk.def</ModuleDefinitionFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@@ -106,14 +106,14 @@
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>imm32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll</OutputFile>
|
||||
<ModuleDefinitionFile>$(IntDir)gdk.def</ModuleDefinitionFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@@ -131,12 +131,12 @@
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>imm32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll</OutputFile>
|
||||
<ModuleDefinitionFile>$(IntDir)gdk.def</ModuleDefinitionFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@@ -151,14 +151,14 @@
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>imm32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll</OutputFile>
|
||||
<ModuleDefinitionFile>$(IntDir)gdk.def</ModuleDefinitionFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
|
||||
108
build/win32/vs10/gengir.vcxproj
Normal file
108
build/win32/vs10/gengir.vcxproj
Normal file
@@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{2093D218-190E-4194-9421-3BA7CBF33B15}</ProjectGuid>
|
||||
<RootNamespace>gengir</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="gtk+.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="gtk+.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="gtk+.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="gtk+.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(GlibEtcInstallRoot)\</OutDir>
|
||||
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(GlibEtcInstallRoot)\</OutDir>
|
||||
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(GlibEtcInstallRoot)\</OutDir>
|
||||
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(GlibEtcInstallRoot)\</OutDir>
|
||||
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<PreBuildEvent>
|
||||
<Command>$(DoGenGir)</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<PreBuildEvent>
|
||||
<Command>$(DoGenGir)</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<PreBuildEvent>
|
||||
<Command>$(DoGenGir)</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<PreBuildEvent>
|
||||
<Command>$(DoGenGir)</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="gdk.vcxproj">
|
||||
<Project>{fc5aadb5-95cd-4bf0-ba8b-0c16fe7073f7}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="gtk.vcxproj">
|
||||
<Project>{fc5aadb5-95cd-4bf0-ba8b-0c16fe7073f5}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,12 +8,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtk", "gtk.vcxproj", "{FC5A
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtk3-demo", "gtk3-demo.vcxproj", "{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073FC}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgail", "libgail.vcxproj", "{F756B0DB-40A1-4E9F-BE1F-8F02CB86EA46}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtk3-demo-application", "gtk3-demo-application.vcxproj", "{3281202A-CD26-4C67-B892-EB34BDBC612F}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtka11y", "gtka11y.vcxproj", "{F756B0DB-40A1-4E9F-BE1F-8F02CB86EA46}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gailutil", "gailutil.vcxproj", "{29E3E814-1BA3-4AD7-A3A7-3669CB80A942}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "install", "install.vcxproj", "{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073FB}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gengir", "gengir.vcxproj", "{2093D218-190E-4194-9421-3BA7CBF33B15}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
@@ -78,6 +82,18 @@ Global
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073FB}.Release|Win32.Build.0 = Release|Win32
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073FB}.Release|x64.ActiveCfg = Release|x64
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073FB}.Release|x64.Build.0 = Release|x64
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Debug|x64.Build.0 = Debug|x64
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Release|Win32.Build.0 = Release|Win32
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Release|x64.ActiveCfg = Release|x64
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Release|x64.Build.0 = Release|x64
|
||||
{2093D218-190E-4194-9421-3BA7CBF33B15}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{2093D218-190E-4194-9421-3BA7CBF33B15}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2093D218-190E-4194-9421-3BA7CBF33B15}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{2093D218-190E-4194-9421-3BA7CBF33B15}.Release|x64.ActiveCfg = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
<ModuleDefinitionFile>$(IntDir)gtk.def</ModuleDefinitionFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@@ -113,7 +113,7 @@
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@@ -136,7 +136,7 @@
|
||||
<ModuleDefinitionFile>$(IntDir)gtk.def</ModuleDefinitionFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@@ -158,7 +158,7 @@
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib</ImportLibrary>
|
||||
<ImportLibrary>$(TargetDir)$(ProjectName)-$(ApiVersion).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@@ -204,7 +204,7 @@
|
||||
<Project>{fc5aadb5-95cd-4bf0-ba8b-0c16fe7073f7}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="libgail.vcxproj">
|
||||
<ProjectReference Include="gtka11y.vcxproj">
|
||||
<Project>{f756b0db-40a1-4e9f-be1f-8f02cb86ea46}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
|
||||
170
build/win32/vs10/gtk3-demo-application.vcxproj
Normal file
170
build/win32/vs10/gtk3-demo-application.vcxproj
Normal file
@@ -0,0 +1,170 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{3281202A-CD26-4C67-B892-EB34BDBC612F}</ProjectGuid>
|
||||
<RootNamespace>gtk3demoapplication</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="gtk+.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="gtk+.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="gtk+.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="gtk+.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\application-standalone.c" />
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\demo_resources.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="gdk.vcxproj">
|
||||
<Project>{fc5aadb5-95cd-4bf0-ba8b-0c16fe7073f7}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="gtk.vcxproj">
|
||||
<Project>{fc5aadb5-95cd-4bf0-ba8b-0c16fe7073f5}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
25
build/win32/vs10/gtk3-demo-application.vcxproj.filters
Normal file
25
build/win32/vs10/gtk3-demo-application.vcxproj.filters
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Sources">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Headers">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\application-standalone.c">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\demo_resources.c">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -27,7 +27,7 @@
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<PlatformToolset>v100</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
@@ -38,7 +38,7 @@
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<PlatformToolset>v100</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
@@ -135,6 +135,7 @@
|
||||
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
@@ -158,6 +159,7 @@
|
||||
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
@@ -211,7 +213,6 @@
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\stock_browser.c" />
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\textscroll.c" />
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\textview.c" />
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\theming_custom_css.c" />
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\theming_style_classes.c" />
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\toolpalette.c" />
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\transparent.c" />
|
||||
|
||||
@@ -143,9 +143,6 @@
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\textview.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\theming_custom_css.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\demos\gtk-demo\theming_style_classes.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
|
||||
@@ -15,6 +15,6 @@
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
#include "libgail.vs10.sourcefiles.filters"
|
||||
#include "gtka11y.vs10.sourcefiles.filters"
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -20,7 +20,7 @@
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{F756B0DB-40A1-4E9F-BE1F-8F02CB86EA46}</ProjectGuid>
|
||||
<RootNamespace>libgail</RootNamespace>
|
||||
<RootNamespace>gtka11y</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
@@ -120,9 +120,9 @@
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
#include "libgail.vs10.sourcefiles"
|
||||
#include "gtka11y.vs10.sourcefiles"
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -113,6 +113,10 @@
|
||||
<Project>{29e3e814-1ba3-4ad7-a3a7-3669cb80a942}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="gtk-demo-application.vcxproj">
|
||||
<Project>{3281202a-cd26-4c67-b892-eb34bdbc612f}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
EXTRA_DIST += \
|
||||
README.txt \
|
||||
gtk+.sln \
|
||||
gtk+.vsprops \
|
||||
gdk-win32.vcproj \
|
||||
gdk.vcproj \
|
||||
gdk.vcprojin \
|
||||
gtk.vcproj \
|
||||
gtk.vcprojin \
|
||||
gtk3-demo.vcproj \
|
||||
libgail.vcproj \
|
||||
libgail.vcprojin \
|
||||
gailutil.vcproj \
|
||||
EXTRA_DIST += \
|
||||
README.txt \
|
||||
gtk+.sln \
|
||||
gtk+.vsprops \
|
||||
gdk-win32.vcproj \
|
||||
gdk.vcproj \
|
||||
gdk.vcprojin \
|
||||
gtk.vcproj \
|
||||
gtk.vcprojin \
|
||||
gtk3-demo.vcproj \
|
||||
gtk3-demo-application.vcproj \
|
||||
gtka11y.vcproj \
|
||||
gtka11y.vcprojin \
|
||||
gailutil.vcproj \
|
||||
gengir.vcproj \
|
||||
install.vcproj
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
OutputFile="$(OutDir)\$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll"
|
||||
GenerateDebugInformation="true"
|
||||
ModuleDefinitionFile="..\..\..\libgail-util\gailutil.def"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
@@ -81,7 +81,7 @@
|
||||
ModuleDefinitionFile="..\..\..\libgail-util\gailutil.def"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
</Configuration>
|
||||
@@ -114,7 +114,7 @@
|
||||
OutputFile="$(OutDir)\$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll"
|
||||
GenerateDebugInformation="true"
|
||||
ModuleDefinitionFile="..\..\..\libgail-util\gailutil.def"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
@@ -150,7 +150,7 @@
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
</Configuration>
|
||||
|
||||
@@ -42,13 +42,13 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="imm32.lib"
|
||||
AdditionalDependencies="imm32.lib winmm.lib"
|
||||
OutputFile="$(OutDir)\$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll"
|
||||
LinkIncremental="1"
|
||||
ModuleDefinitionFile="$(IntDir)\gdk.def"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
</Configuration>
|
||||
@@ -73,7 +73,7 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="imm32.lib"
|
||||
AdditionalDependencies="imm32.lib winmm.lib"
|
||||
OutputFile="$(OutDir)\$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll"
|
||||
LinkIncremental="1"
|
||||
ModuleDefinitionFile="$(IntDir)\gdk.def"
|
||||
@@ -81,7 +81,7 @@
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
</Configuration>
|
||||
@@ -108,13 +108,13 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="imm32.lib"
|
||||
AdditionalDependencies="imm32.lib winmm.lib"
|
||||
OutputFile="$(OutDir)\$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll"
|
||||
LinkIncremental="1"
|
||||
ModuleDefinitionFile="$(IntDir)\gdk.def"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
</Configuration>
|
||||
@@ -139,7 +139,7 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="imm32.lib"
|
||||
AdditionalDependencies="imm32.lib winmm.lib"
|
||||
OutputFile="$(OutDir)\$(GtkDllPrefix)$(ProjectName)$(GtkDllSuffix).dll"
|
||||
LinkIncremental="1"
|
||||
ModuleDefinitionFile="$(IntDir)\gdk.def"
|
||||
@@ -147,7 +147,7 @@
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
</Configuration>
|
||||
|
||||
77
build/win32/vs9/gengir.vcproj
Normal file
77
build/win32/vs9/gengir.vcproj
Normal file
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="gengir"
|
||||
ProjectGUID="{2093D218-190E-4194-9421-3BA7CBF33B15}"
|
||||
RootNamespace="gengir"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
OutputDirectory="$(GlibEtcInstallRoot)"
|
||||
ConfigurationType="10"
|
||||
CharacterSet="2"
|
||||
DeleteExtensionsOnClean=""
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine="$(DoGenGir)"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
OutputDirectory="$(GlibEtcInstallRoot)"
|
||||
ConfigurationType="10"
|
||||
CharacterSet="2"
|
||||
DeleteExtensionsOnClean=""
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine="$(DoGenGir)"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
OutputDirectory="$(GlibEtcInstallRoot)"
|
||||
ConfigurationType="10"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
DeleteExtensionsOnClean=""
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine="$(DoGenGir)"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
OutputDirectory="$(GlibEtcInstallRoot)"
|
||||
ConfigurationType="10"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
DeleteExtensionsOnClean=""
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
CommandLine="$(DoGenGir)"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioProject>
|
||||
@@ -19,7 +19,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtk3-demo", "gtk3-demo.vcpr
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F5} = {FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F5}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgail", "libgail.vcproj", "{F756B0DB-40A1-4E9F-BE1F-8F02CB86EA46}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtk3-demo-application", "gtk3-demo-application.vcproj", "{3281202A-CD26-4C67-B892-EB34BDBC612F}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F7} = {FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F7}
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F5} = {FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F5}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtka11y", "gtka11y.vcproj", "{F756B0DB-40A1-4E9F-BE1F-8F02CB86EA46}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gailutil", "gailutil.vcproj", "{29E3E814-1BA3-4AD7-A3A7-3669CB80A942}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
@@ -33,6 +39,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "install", "install.vcproj",
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F5} = {FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F5}
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073FC} = {FC5AADB5-95CD-4BF0-BA8B-0C16FE7073FC}
|
||||
{29E3E814-1BA3-4AD7-A3A7-3669CB80A942} = {29E3E814-1BA3-4AD7-A3A7-3669CB80A942}
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F} = {3281202A-CD26-4C67-B892-EB34BDBC612F}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gengir", "gengir.vcproj", "{2093D218-190E-4194-9421-3BA7CBF33B15}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F7} = {FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F7}
|
||||
{FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F5} = {FC5AADB5-95CD-4BF0-BA8B-0C16FE7073F5}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
@@ -99,6 +112,18 @@ Global
|
||||
{29E3E814-1BA3-4AD7-A3A7-3669CB80A942}.Release|Win32.Build.0 = Release|Win32
|
||||
{29E3E814-1BA3-4AD7-A3A7-3669CB80A942}.Release|x64.ActiveCfg = Release|x64
|
||||
{29E3E814-1BA3-4AD7-A3A7-3669CB80A942}.Release|x64.Build.0 = Release|x64
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Debug|x64.Build.0 = Debug|x64
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Release|Win32.Build.0 = Release|Win32
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Release|x64.ActiveCfg = Release|x64
|
||||
{3281202A-CD26-4C67-B892-EB34BDBC612F}.Release|x64.Build.0 = Release|x64
|
||||
{2093D218-190E-4194-9421-3BA7CBF33B15}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{2093D218-190E-4194-9421-3BA7CBF33B15}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2093D218-190E-4194-9421-3BA7CBF33B15}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{2093D218-190E-4194-9421-3BA7CBF33B15}.Release|x64.ActiveCfg = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -27,16 +27,24 @@ copy ..\..\..\config.h.win32 ..\..\..\config.h

|
||||
copy ..\..\..\gdk\gdkconfig.h.win32 ..\..\..\gdk\gdkconfig.h

|
||||
"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="VSVer"
|
||||
Value="9"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GlibEtcInstallRoot"
|
||||
Value="..\..\..\..\vs9\$(PlatformName)"
|
||||
Value="..\..\..\..\vs$(VSVer)\$(PlatformName)"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GlibEtcInstallRootFromBuildWin32"
|
||||
Value="..\..\..\vs$(VSVer)\$(PlatformName)"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="CopyDir"
|
||||
Value="$(GlibEtcInstallRoot)"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GtkApiVersion"
|
||||
Name="ApiVersion"
|
||||
Value="3.0"
|
||||
/>
|
||||
<UserMacro
|
||||
@@ -61,7 +69,7 @@ copy ..\..\..\gdk\gdkconfig.h.win32 ..\..\..\gdk\gdkconfig.h

|
||||
/>
|
||||
<UserMacro
|
||||
Name="GtkDefines"
|
||||
Value="GTK_COMPILATION;G_LOG_DOMAIN=\"Gtk\";GTK_HOST=\"i686-pc-vs9\";GTK_PRINT_BACKENDS=\"file\";GTK_PRINT_PREVIEW_COMMAND=\"undefined-gtk-print-preview-command\";$(GtkIncludedImmodulesDefines);GTK_LIBDIR=\"$(GtkDummyPrefix)/lib\";GTK_DATADIR=\"$(GtkDummyPrefix)/share\"GTK_DATA_PREFIX=\"$(GtkDummyPrefix)\";GTK_SYSCONFDIR=\"$(GtkDummyPrefix)/etc\";MULTIPRESS_CONFDIR=\"$(GtkDummyPrefix)/etc/gtk-$(GtkApiVersion)\";MULTIPRESS_LOCALEDIR=\"$(GtkDummyPrefix)/share/locale\";GTK_VERSION=\"$(GtkVersion)/etc\";GTK_BINARY_VERSION=\"$(GtkBinaryVersion)/etc\";GDK_DISABLE_DEPRECATED"
|
||||
Value="GTK_COMPILATION;G_LOG_DOMAIN=\"Gtk\";GTK_HOST=\"i686-pc-vs$(VSVer)\";GTK_PRINT_BACKENDS=\"file\";GTK_PRINT_PREVIEW_COMMAND=\"undefined-gtk-print-preview-command\";$(GtkIncludedImmodulesDefines);GTK_LIBDIR=\"$(GtkDummyPrefix)/lib\";GTK_DATADIR=\"$(GtkDummyPrefix)/share\"GTK_DATA_PREFIX=\"$(GtkDummyPrefix)\";GTK_SYSCONFDIR=\"$(GtkDummyPrefix)/etc\";MULTIPRESS_CONFDIR=\"$(GtkDummyPrefix)/etc/gtk-$(ApiVersion)\";MULTIPRESS_LOCALEDIR=\"$(GtkDummyPrefix)/share/locale\";GTK_VERSION=\"$(GtkVersion)/etc\";GTK_BINARY_VERSION=\"$(GtkBinaryVersion)/etc\";GDK_DISABLE_DEPRECATED"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GtkDoInstall"
|
||||
@@ -71,356 +79,364 @@ mkdir $(CopyDir)\bin

|
||||
copy $(ConfigurationName)\$(PlatformName)\bin\*.dll $(CopyDir)\bin

|
||||
copy $(ConfigurationName)\$(PlatformName)\bin\*.exe $(CopyDir)\bin

|
||||
|
||||
mkdir $(CopyDir)\share\gtk-$(GtkApiVersion)\demo

|
||||
|
||||
copy ..\..\..\demos\gtk-demo\*.c $(CopyDir)\share\gtk-$(GtkApiVersion)\demo

|
||||
copy ..\..\..\demos\gtk-demo\*.css $(CopyDir)\share\gtk-$(GtkApiVersion)\demo

|
||||
copy ..\..\..\demos\gtk-demo\*.h $(CopyDir)\share\gtk-$(GtkApiVersion)\demo

|
||||
copy ..\..\..\demos\gtk-demo\*.ui $(CopyDir)\share\gtk-$(GtkApiVersion)\demo

|
||||
copy ..\..\..\demos\gtk-demo\*.jpg $(CopyDir)\share\gtk-$(GtkApiVersion)\demo

|
||||
copy ..\..\..\demos\gtk-demo\*.png $(CopyDir)\share\gtk-$(GtkApiVersion)\demo

|
||||
copy ..\..\..\demos\gtk-demo\*.gif $(CopyDir)\share\gtk-$(GtkApiVersion)\demo

|
||||
|
||||
mkdir $(CopyDir)\lib

|
||||
copy $(ConfigurationName)\$(PlatformName)\bin\*-$(GtkApiVersion).lib $(CopyDir)\lib

|
||||
copy $(ConfigurationName)\$(PlatformName)\bin\*-$(ApiVersion).lib $(CopyDir)\lib

|
||||
|
||||
mkdir $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdk.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkapplaunchcontext.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkcairo.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkcolor.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkcursor.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdevice.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdevicemanager.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdisplay.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdisplaymanager.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdnd.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkenumtypes.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkevents.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkkeys.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkkeysyms.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkmain.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkpango.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkpixbuf.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkprivate.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkproperty.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkrectangle.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkrgba.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkscreen.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkselection.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdktestutils.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkthreads.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdktypes.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkversionmacros.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkvisual.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\win32\gdkwin32.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkwindow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdk.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkapplaunchcontext.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkcairo.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkcolor.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkcursor.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdevice.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdevicemanager.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdisplay.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdisplaymanager.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkdnd.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkenumtypes.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkevents.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkframeclock.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkframetimings.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkkeys.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkkeysyms.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkmain.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkpango.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkpixbuf.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkprivate.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkproperty.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkrectangle.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkrgba.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkscreen.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkselection.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdktestutils.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkthreads.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdktypes.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkversionmacros.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkvisual.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\win32\gdkwin32.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkwindow.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk

|
||||
|
||||
mkdir $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32cursor.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32display.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32displaymanager.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32dnd.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32keys.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32screen.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32window.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32

|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32cursor.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32display.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32displaymanager.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32dnd.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32keys.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32screen.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk\win32

|
||||
copy ..\..\..\gdk\win32\gdkwin32window.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk\win32

|
||||
|
||||
mkdir $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtk.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkx.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtk-a11y.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaboutdialog.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccelgroup.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccelgroupprivate.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccellabel.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccelmap.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaction.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkactiongroup.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkactionable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkactivatable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkadjustment.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkalignment.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkappchooser.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkappchooserbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkappchooserdialog.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkappchooserwidget.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkapplication.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkapplicationwindow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkarrow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaspectframe.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkassistant.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbbox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbin.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbindings.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkborder.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbuildable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbuilder.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcalendar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellarea.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellareabox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellareacontext.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcelleditable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcelllayout.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrenderer.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendereraccel.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrenderercombo.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendererpixbuf.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendererprogress.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendererspin.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendererspinner.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrenderertext.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrenderertoggle.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellview.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcheckbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcheckmenuitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkclipboard.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorchooser.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorchooserwidget.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorchooserdialog.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorutils.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcombobox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcomboboxtext.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcontainer.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcssprovider.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcsssection.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkdebug.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkdialog.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkdnd.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkdrawingarea.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkeditable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkentry.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkentrybuffer.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkentrycompletion.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkenums.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkeventbox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkexpander.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilechooser.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilechooserbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilechooserdialog.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilechooserwidget.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilefilter.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfixed.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfontbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfontchooser.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfontchooserdialog.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfontchooserwidget.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkframe.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkgrid.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkiconfactory.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkicontheme.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkiconview.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimage.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimagemenuitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimcontext.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimcontextinfo.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimcontextsimple.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimmodule.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimmulticontext.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkinfobar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkinvisible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklabel.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklayout.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklevelbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklinkbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkliststore.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklockbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmain.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenu.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenubar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenubutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenuitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenushell.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenutoolbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmessagedialog.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmisc.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmodules.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmountoperation.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtknotebook.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtknumerableicon.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkoffscreenwindow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkorientable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkoverlay.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkpagesetup.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkpaned.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkpapersize.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkplug.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprintcontext.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprintoperation.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprintoperationpreview.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprintsettings.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprivate.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprivatetypebuiltins.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprogressbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkradioaction.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkradiobutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkradiomenuitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkradiotoolbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrange.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentaction.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentchooser.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentchooserdialog.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentchoosermenu.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentchooserwidget.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentfilter.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentmanager.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscale.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscalebutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscrollable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscrollbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscrolledwindow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksearchentry.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkselection.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkseparator.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkseparatormenuitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkseparatortoolitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksettings.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkshow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksizegroup.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksizerequest.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksocket.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkspinbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkspinner.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstatusbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstatusicon.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstock.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstylecontext.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstyleproperties.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstyleprovider.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkswitch.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktestutils.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextattributes.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextbuffer.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextbufferrichtext.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextchild.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextdisplay.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextiter.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextlayout.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextmark.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktexttag.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktexttagtable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextview.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkthemingengine.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoggleaction.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktogglebutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoggletoolbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolitemgroup.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolpalette.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolshell.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktooltip.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreednd.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreemodel.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreemodelfilter.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreemodelsort.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreeselection.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreesortable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreestore.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreeview.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreeviewcolumn.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktypebuiltins.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktypes.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkuimanager.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkversion.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkviewport.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkvolumebutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
;
|
||||
copy ..\..\..\gtk\gtkwidget.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkwidgetpath.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkwindow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtk.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkx.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtk-a11y.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaboutdialog.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccelgroup.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccelgroupprivate.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccellabel.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccelmap.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaction.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkactiongroup.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkactionable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkactivatable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkadjustment.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkalignment.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkappchooser.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkappchooserbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkappchooserdialog.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkappchooserwidget.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkapplication.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkapplicationwindow.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkarrow.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkaspectframe.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkassistant.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbbox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbin.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbindings.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkborder.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbuildable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbuilder.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcalendar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellarea.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellareabox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellareacontext.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcelleditable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcelllayout.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrenderer.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendereraccel.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrenderercombo.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendererpixbuf.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendererprogress.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendererspin.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrendererspinner.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrenderertext.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellrenderertoggle.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcellview.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcheckbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcheckmenuitem.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkclipboard.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorchooser.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorchooserwidget.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorchooserdialog.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcolorutils.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcombobox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcomboboxtext.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcontainer.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcssprovider.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkcsssection.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkdebug.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkdialog.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkdnd.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkdrawingarea.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkeditable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkentry.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkentrybuffer.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkentrycompletion.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkenums.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkeventbox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkexpander.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilechooser.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilechooserbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilechooserdialog.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilechooserwidget.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfilefilter.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfixed.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfontbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfontchooser.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfontchooserdialog.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkfontchooserwidget.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkframe.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkgrid.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkiconfactory.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkicontheme.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkiconview.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimage.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimagemenuitem.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimcontext.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimcontextinfo.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimcontextsimple.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimmodule.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkimmulticontext.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkinfobar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkinvisible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklabel.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklayout.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklevelbar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklinkbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkliststore.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtklockbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmain.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenu.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenubar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenubutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenuitem.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenushell.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmenutoolbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmessagedialog.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmisc.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmodules.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkmountoperation.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtknotebook.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtknumerableicon.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkoffscreenwindow.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkorientable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkoverlay.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkpagesetup.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkpaned.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkpapersize.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkplug.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprintcontext.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprintoperation.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprintoperationpreview.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprintsettings.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprivate.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprivatetypebuiltins.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkprogressbar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkradioaction.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkradiobutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkradiomenuitem.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkradiotoolbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrange.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentaction.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentchooser.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentchooserdialog.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentchoosermenu.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentchooserwidget.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentfilter.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkrecentmanager.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscale.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscalebutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscrollable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscrollbar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkscrolledwindow.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksearchentry.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkselection.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkseparator.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkseparatormenuitem.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkseparatortoolitem.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksettings.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkshow.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksizegroup.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksizerequest.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtksocket.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkspinbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkspinner.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstatusbar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstatusicon.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstock.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstylecontext.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstyleproperties.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkstyleprovider.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkswitch.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktestutils.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextattributes.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextbuffer.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextbufferrichtext.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextchild.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextdisplay.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextiter.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextlayout.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextmark.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktexttag.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktexttagtable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktextview.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkthemingengine.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoggleaction.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktogglebutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoggletoolbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolbar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolbutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolitem.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolitemgroup.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolpalette.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktoolshell.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktooltip.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreednd.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreemodel.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreemodelfilter.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreemodelsort.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreeselection.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreesortable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreestore.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreeview.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktreeviewcolumn.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktypebuiltins.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtktypes.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkuimanager.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkversion.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkviewport.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkvolumebutton.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk
;
|
||||
copy ..\..\..\gtk\gtkwidget.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkwidgetpath.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
copy ..\..\..\gtk\gtkwindow.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk

|
||||
|
||||
mkdir $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
|
||||
copy ..\..\..\gtk\deprecated\gtkcolorsel.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkcolorseldialog.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkfontsel.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkgradient.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhandlebox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhbbox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhbox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhpaned.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhscale.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhsv.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhscrollbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhseparator.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkrc.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkstyle.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtksymboliccolor.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtktable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtktearoffmenuitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvbbox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvbox.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvscale.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvscrollbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvseparator.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvpaned.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkcolorsel.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkcolorseldialog.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkfontsel.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkgradient.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhandlebox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhbbox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhbox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhpaned.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhscale.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhsv.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhscrollbar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkhseparator.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkrc.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkstyle.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtksymboliccolor.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtktable.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtktearoffmenuitem.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvbbox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvbox.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvscale.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvscrollbar.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvseparator.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
copy ..\..\..\gtk\deprecated\gtkvpaned.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated

|
||||
|
||||
mkdir $(CopyDir)\include\gtk-$(GtkApiVersion)\a11y

|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
|
||||
copy ..\..\..\gtk\a11y\gtkarrowaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkbooleancellaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkbuttonaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcellaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcellaccessibleparent.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcheckmenuitemaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcomboboxaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcontaineraccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcontainercellaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkentryaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkexpanderaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkframeaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkiconviewaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkimageaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkimagecellaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtklabelaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtklinkbuttonaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtklockbuttonaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkmenuaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkmenuitemaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkmenushellaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtknotebookaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtknotebookpageaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkpanedaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkprogressbaraccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkradiobuttonaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkradiomenuitemaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkrangeaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkrenderercellaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkscaleaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkscalebuttonaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkscrolledwindowaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkspinbuttonaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkspinneraccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkstatusbaraccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkswitchaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktextcellaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktextviewaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktogglebuttonaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktoplevelaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktreeviewaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkwidgetaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkwindowaccessible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkarrowaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkbooleancellaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkbuttonaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcellaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcellaccessibleparent.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcheckmenuitemaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcomboboxaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcontaineraccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkcontainercellaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkentryaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkexpanderaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkframeaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkiconviewaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkimageaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkimagecellaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtklabelaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtklevelbaraccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtklinkbuttonaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtklockbuttonaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkmenuaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkmenuitemaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkmenushellaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtknotebookaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtknotebookpageaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkpanedaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkprogressbaraccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkradiobuttonaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkradiomenuitemaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkrangeaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkrenderercellaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkscaleaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkscalebuttonaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkscrolledwindowaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkspinbuttonaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkspinneraccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkstatusbaraccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkswitchaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktextcellaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktextviewaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktogglebuttonaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktoplevelaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtktreeviewaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkwidgetaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
copy ..\..\..\gtk\a11y\gtkwindowaccessible.h $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y

|
||||
|
||||
mkdir $(CopyDir)\include\gail-$(GtkApiVersion)\libgail-util

|
||||
copy ..\..\..\libgail-util\gail-util.h $(CopyDir)\include\gail-$(GtkApiVersion)\libgail-util

|
||||
copy ..\..\..\libgail-util\gailmisc.h $(CopyDir)\include\gail-$(GtkApiVersion)\libgail-util

|
||||
copy ..\..\..\libgail-util\gailtextutil.h $(CopyDir)\include\gail-$(GtkApiVersion)\libgail-util

|
||||
mkdir $(CopyDir)\include\gail-$(ApiVersion)\libgail-util

|
||||
copy ..\..\..\libgail-util\gail-util.h $(CopyDir)\include\gail-$(ApiVersion)\libgail-util

|
||||
copy ..\..\..\libgail-util\gailmisc.h $(CopyDir)\include\gail-$(ApiVersion)\libgail-util

|
||||
copy ..\..\..\libgail-util\gailtextutil.h $(CopyDir)\include\gail-$(ApiVersion)\libgail-util

|
||||
|
||||
copy ..\..\..\gdk\gdkconfig.h $(CopyDir)\include\gtk-3.0\gdk

|
||||
|
||||
copy $(ConfigurationName)\$(PlatformName)\bin\*-$(GtkApiVersion).lib $(CopyDir)\lib

|
||||
copy $(ConfigurationName)\$(PlatformName)\bin\*-$(ApiVersion).lib $(CopyDir)\lib

|
||||
|
||||
mkdir $(CopyDir)\share\glib-2.0\schemas

|
||||
copy ..\..\..\gtk\org.gtk.Settings.FileChooser.gschema.xml $(CopyDir)\share\glib-2.0\schemas

|
||||
copy ..\..\..\gtk\org.gtk.Settings.ColorChooser.gschema.xml $(CopyDir)\share\glib-2.0\schemas

|
||||
copy ..\..\..\demos\gtk-demo\org.gtk.Demo.gschema.xml $(CopyDir)\share\glib-2.0\schemas

|
||||
|
||||
echo "Compiling gsettings XML Files..."

|
||||
$(CopyDir)\bin\glib-compile-schemas.exe $(CopyDir)\share\glib-2.0\schemas

|
||||
"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="DoGenGir"
|
||||
Value="
|
||||
set VSVER=$(VSVer)

|
||||
set CONF=$(ConfigurationName)

|
||||
set PLAT=$(PlatformName)

|
||||
set BASEDIR=$(GlibEtcInstallRootFromBuildWin32)

|
||||
cd ..

|
||||
|
||||
call gengir_gtk.bat

|
||||
cd vs$(VSVer)

|
||||
"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GtkGenerateGdkDef"
|
||||
Value="echo EXPORTS >"$(IntDir)\gdk.def" && cl /EP -DGDK_WINDOWING_WIN32 -DALL_FILES -DG_GNUC_CONST= ..\..\..\gdk\gdk.symbols >>"$(IntDir)\gdk.def""
|
||||
@@ -435,24 +451,24 @@ $(CopyDir)\bin\glib-compile-schemas.exe $(CopyDir)\share\glib-2.0\schemas
&
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GtkLibtoolCompatibleDllSuffix"
|
||||
Value="-$(GtkApiVersion)-0"
|
||||
Value="-$(ApiVersion)-0"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GtkSeparateVS9DllPrefix"
|
||||
Name="GtkSeparateVSDllPrefix"
|
||||
Value=""
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GtkSeparateVS9DllSuffix"
|
||||
Value="-3-vs9"
|
||||
Name="GtkSeparateVSDllSuffix"
|
||||
Value="-3-vs$(VSVer)"
|
||||
/>
|
||||
<!-- Change these two to GtkLibtoolCompatibleDllPrefix and
|
||||
GtkLibtoolCompatibleDllSuffix if that is what you want -->
|
||||
<UserMacro
|
||||
Name="GtkDllPrefix"
|
||||
Value="$(GtkSeparateVS9DllPrefix)"
|
||||
Value="$(GtkSeparateVSDllPrefix)"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GtkDllSuffix"
|
||||
Value="$(GtkSeparateVS9DllSuffix)"
|
||||
Value="$(GtkSeparateVSDllSuffix)"
|
||||
/>
|
||||
</VisualStudioPropertySheet>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
ModuleDefinitionFile="$(IntDir)\gtk.def"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
</Configuration>
|
||||
@@ -81,7 +81,7 @@
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
</Configuration>
|
||||
@@ -114,7 +114,7 @@
|
||||
ModuleDefinitionFile="$(IntDir)\gtk.def"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
</Configuration>
|
||||
@@ -147,7 +147,7 @@
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(GtkApiVersion).lib"
|
||||
ImportLibrary="$(TargetDir)$(ProjectName)-$(ApiVersion).lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
</Configuration>
|
||||
|
||||
169
build/win32/vs9/gtk3-demo-application.vcproj
Normal file
169
build/win32/vs9/gtk3-demo-application.vcproj
Normal file
@@ -0,0 +1,169 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="gtk3-demo-application"
|
||||
ProjectGUID="{3281202A-CD26-4C67-B892-EB34BDBC612F}"
|
||||
RootNamespace="gtk3demoapplication"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions=""
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions=""
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Sources"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
</Filter>
|
||||
<File RelativePath="..\..\..\demos\gtk-demo\application-standalone.c" />
|
||||
<File RelativePath="..\..\..\demos\gtk-demo\demo_resources.c" />
|
||||
<Filter
|
||||
Name="Headers"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
@@ -90,7 +90,7 @@
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
WholeProgramOptimization="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
@@ -123,7 +123,7 @@
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets=".\gtk+.vsprops"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
WholeProgramOptimization="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
@@ -204,7 +204,6 @@
|
||||
<File RelativePath="..\..\..\demos\gtk-demo\stock_browser.c" />
|
||||
<File RelativePath="..\..\..\demos\gtk-demo\textscroll.c" />
|
||||
<File RelativePath="..\..\..\demos\gtk-demo\textview.c" />
|
||||
<File RelativePath="..\..\..\demos\gtk-demo\theming_custom_css.c" />
|
||||
<File RelativePath="..\..\..\demos\gtk-demo\theming_style_classes.c" />
|
||||
<File RelativePath="..\..\..\demos\gtk-demo\toolpalette.c" />
|
||||
<File RelativePath="..\..\..\demos\gtk-demo\transparent.c" />
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="libgail"
|
||||
Name="gtka11y"
|
||||
ProjectGUID="{F756B0DB-40A1-4E9F-BE1F-8F02CB86EA46}"
|
||||
RootNamespace="libgail"
|
||||
RootNamespace="gtka11y"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
@@ -115,7 +115,7 @@
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
#include "libgail.sourcefiles"
|
||||
#include "gtka11y.sourcefiles"
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Headers"
|
||||
19
configure.ac
19
configure.ac
@@ -9,9 +9,9 @@
|
||||
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.
|
||||
|
||||
m4_define([gtk_major_version], [3])
|
||||
m4_define([gtk_minor_version], [7])
|
||||
m4_define([gtk_micro_version], [10])
|
||||
m4_define([gtk_interface_age], [0])
|
||||
m4_define([gtk_minor_version], [8])
|
||||
m4_define([gtk_micro_version], [8])
|
||||
m4_define([gtk_interface_age], [8])
|
||||
m4_define([gtk_binary_age],
|
||||
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
|
||||
m4_define([gtk_version],
|
||||
@@ -350,7 +350,7 @@ if test "$enable_win32_backend" = "yes"; then
|
||||
backend_immodules="$backend_immodules,ime"
|
||||
GDK_WINDOWING="$GDK_WINDOWING
|
||||
#define GDK_WINDOWING_WIN32"
|
||||
GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid"
|
||||
GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm"
|
||||
AM_CONDITIONAL(USE_WIN32, true)
|
||||
PANGO_PACKAGES="pangowin32 pangocairo"
|
||||
else
|
||||
@@ -361,6 +361,7 @@ DISABLE_ON_QUARTZ=''
|
||||
if test "x$enable_quartz_backend" = xyes; then
|
||||
cairo_backends="$cairo_backends cairo-quartz"
|
||||
GDK_BACKENDS="$GDK_BACKENDS quartz"
|
||||
backend_immodules="$backend_immodules,quartz"
|
||||
GDK_WINDOWING="$GDK_WINDOWING
|
||||
#define GDK_WINDOWING_QUARTZ"
|
||||
GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -framework Cocoa"
|
||||
@@ -390,6 +391,7 @@ else
|
||||
AM_CONDITIONAL(USE_BROADWAY, false)
|
||||
fi
|
||||
|
||||
DISABLE_ON_WAYLAND=''
|
||||
if test "x$enable_wayland_backend" = "xyes"; then
|
||||
# For the cairo image backend
|
||||
cairo_backends="$cairo_backends cairo"
|
||||
@@ -397,11 +399,13 @@ if test "x$enable_wayland_backend" = "xyes"; then
|
||||
have_gio_unix=yes
|
||||
GDK_WINDOWING="$GDK_WINDOWING
|
||||
#define GDK_WINDOWING_WAYLAND"
|
||||
DISABLE_ON_WAYLAND='%'
|
||||
WAYLAND_PACKAGES="wayland-client >= 1.0.0 xkbcommon >= 0.2.0 wayland-cursor"
|
||||
AM_CONDITIONAL(USE_WAYLAND, true)
|
||||
else
|
||||
AM_CONDITIONAL(USE_WAYLAND, false)
|
||||
fi
|
||||
AC_SUBST(DISABLE_ON_WAYLAND)
|
||||
|
||||
# strip leading space
|
||||
GDK_BACKENDS=${GDK_BACKENDS#* }
|
||||
@@ -872,6 +876,7 @@ AM_CONDITIONAL(INCLUDE_IM_IME, [test x"$INCLUDE_ime" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_INUKTITUT, [test x"$INCLUDE_inuktitut" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_IPA, [test x"$INCLUDE_ipa" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_MULTIPRESS, [test x"$INCLUDE_multipress" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_QUARTZ, [test x"$INCLUDE_quartz" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_THAI, [test x"$INCLUDE_thai" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_TI_ER, [test x"$INCLUDE_ti_er" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_TI_ET, [test x"$INCLUDE_ti_et" = xyes])
|
||||
@@ -1082,7 +1087,6 @@ if test "x$enable_x11_backend" = xyes; then
|
||||
case "$host" in
|
||||
*-*-solaris*)
|
||||
# Check for solaris
|
||||
AC_MSG_CHECKING(for Xinerama support on Solaris)
|
||||
|
||||
have_solaris_xinerama=false
|
||||
AC_CHECK_FUNC(XineramaGetInfo,
|
||||
@@ -1090,6 +1094,8 @@ if test "x$enable_x11_backend" = xyes; then
|
||||
[have_solaris_xinerama=true], :,
|
||||
[#include <X11/Xlib.h>])])
|
||||
|
||||
AC_MSG_CHECKING(for Xinerama support on Solaris)
|
||||
|
||||
if $have_solaris_xinerama ; then
|
||||
X_EXTENSIONS="$X_EXTENSIONS Xinerama"
|
||||
AC_DEFINE(HAVE_SOLARIS_XINERAMA, 1,
|
||||
@@ -1239,7 +1245,6 @@ if test "$have_gio_unix" = "yes"; then
|
||||
else
|
||||
GDK_GIO_PACKAGE=gio-2.0
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_GIO_UNIX, test "$have_gio_unix" = "yes")
|
||||
|
||||
# Check for Pango flags
|
||||
|
||||
@@ -1421,7 +1426,7 @@ else
|
||||
$CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 6; then
|
||||
AC_DEFINE(HAVE_CUPS_API_1_6, 1,
|
||||
[Define to 1 if CUPS 1.6 API is available])
|
||||
|
||||
have_cups_api_1_6=yes
|
||||
fi
|
||||
|
||||
AC_SUBST(CUPS_API_MAJOR)
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
|
||||
#include "demos.h"
|
||||
|
||||
static GtkTextBuffer *info_buffer;
|
||||
static GtkTextBuffer *source_buffer;
|
||||
static GtkWidget *info_view;
|
||||
static GtkWidget *source_view;
|
||||
|
||||
static gchar *current_file = NULL;
|
||||
|
||||
@@ -353,7 +353,7 @@ parse_chars (gchar *text,
|
||||
|
||||
/* While not as cool as c-mode, this will do as a quick attempt at highlighting */
|
||||
static void
|
||||
fontify (void)
|
||||
fontify (GtkTextBuffer *source_buffer)
|
||||
{
|
||||
GtkTextIter start_iter, next_iter, tmp_iter;
|
||||
gint state;
|
||||
@@ -398,13 +398,12 @@ fontify (void)
|
||||
}
|
||||
}
|
||||
|
||||
static GtkWidget *create_text (GtkTextBuffer **buffer, gboolean is_source);
|
||||
static GtkWidget *create_text (GtkWidget **text_view, gboolean is_source);
|
||||
|
||||
static void
|
||||
add_data_tab (const gchar *demoname)
|
||||
{
|
||||
GtkTextBuffer *buffer = NULL;
|
||||
gchar *resource_dir, *resource_name, *content_type;
|
||||
gchar *resource_dir, *resource_name, *content_type, *content_mime;
|
||||
gchar **resources;
|
||||
GBytes *bytes;
|
||||
GtkWidget *widget, *label;
|
||||
@@ -428,24 +427,33 @@ add_data_tab (const gchar *demoname)
|
||||
g_bytes_get_data (bytes, NULL),
|
||||
g_bytes_get_size (bytes),
|
||||
NULL);
|
||||
content_mime = g_content_type_get_mime_type (content_type);
|
||||
|
||||
/* In theory we should look at all the mime types gdk-pixbuf supports
|
||||
* and go from there, but we know what file types we've added.
|
||||
*/
|
||||
if (g_content_type_is_a (content_type, "image/png") ||
|
||||
g_content_type_is_a (content_type, "image/gif") ||
|
||||
g_content_type_is_a (content_type, "image/jpeg"))
|
||||
if (g_content_type_is_a (content_mime, "image/png") ||
|
||||
g_content_type_is_a (content_mime, "image/gif") ||
|
||||
g_content_type_is_a (content_mime, "image/jpeg"))
|
||||
{
|
||||
widget = gtk_image_new_from_resource (resource_name);
|
||||
}
|
||||
else if (g_content_type_is_a (content_type, "text/plain"))
|
||||
else if (g_content_type_is_a (content_mime, "text/plain") ||
|
||||
g_content_type_is_a (content_mime, "application/x-ext-ui") ||
|
||||
g_content_type_is_a (content_mime, "text/css"))
|
||||
{
|
||||
widget = create_text (&buffer, FALSE);
|
||||
GtkTextBuffer *buffer;
|
||||
GtkWidget *textview;
|
||||
|
||||
widget = create_text (&textview, FALSE);
|
||||
buffer = gtk_text_buffer_new (NULL);
|
||||
gtk_text_buffer_set_text (buffer, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
|
||||
gtk_text_view_set_buffer (GTK_TEXT_VIEW (textview), buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("Don't know how to display resource '%s' of type '%s'\n", resource_name, content_type);
|
||||
|
||||
g_warning ("Don't know how to display resource '%s' of type '%s'\n", resource_name, content_mime);
|
||||
widget = NULL;
|
||||
}
|
||||
|
||||
@@ -454,6 +462,7 @@ add_data_tab (const gchar *demoname)
|
||||
gtk_widget_show (label);
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), widget, label);
|
||||
|
||||
g_free (content_mime);
|
||||
g_free (content_type);
|
||||
g_free (resource_name);
|
||||
g_bytes_unref (bytes);
|
||||
@@ -476,6 +485,7 @@ void
|
||||
load_file (const gchar *demoname,
|
||||
const gchar *filename)
|
||||
{
|
||||
GtkTextBuffer *info_buffer, *source_buffer;
|
||||
GtkTextIter start, end;
|
||||
char *resource_filename;
|
||||
GError *err = NULL;
|
||||
@@ -495,11 +505,34 @@ load_file (const gchar *demoname,
|
||||
g_free (current_file);
|
||||
current_file = g_strdup (filename);
|
||||
|
||||
gtk_text_buffer_get_bounds (info_buffer, &start, &end);
|
||||
gtk_text_buffer_delete (info_buffer, &start, &end);
|
||||
info_buffer = gtk_text_buffer_new (NULL);
|
||||
gtk_text_buffer_create_tag (info_buffer, "title",
|
||||
"font", "Sans 18",
|
||||
"pixels-below-lines", 10,
|
||||
NULL);
|
||||
|
||||
gtk_text_buffer_get_bounds (source_buffer, &start, &end);
|
||||
gtk_text_buffer_delete (source_buffer, &start, &end);
|
||||
source_buffer = gtk_text_buffer_new (NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "comment",
|
||||
"foreground", "DodgerBlue",
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "type",
|
||||
"foreground", "ForestGreen",
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "string",
|
||||
"foreground", "RosyBrown",
|
||||
"weight", PANGO_WEIGHT_BOLD,
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "control",
|
||||
"foreground", "purple",
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "preprocessor",
|
||||
"style", PANGO_STYLE_OBLIQUE,
|
||||
"foreground", "burlywood4",
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "function",
|
||||
"weight", PANGO_WEIGHT_BOLD,
|
||||
"foreground", "DarkGoldenrod4",
|
||||
NULL);
|
||||
|
||||
resource_filename = g_strconcat ("/sources/", filename, NULL);
|
||||
bytes = g_resources_lookup_data (resource_filename, 0, &err);
|
||||
@@ -629,9 +662,14 @@ load_file (const gchar *demoname,
|
||||
}
|
||||
}
|
||||
|
||||
fontify ();
|
||||
fontify (source_buffer);
|
||||
|
||||
g_strfreev (lines);
|
||||
|
||||
gtk_text_view_set_buffer (GTK_TEXT_VIEW (info_view), info_buffer);
|
||||
g_object_unref (info_buffer);
|
||||
gtk_text_view_set_buffer (GTK_TEXT_VIEW (source_view), source_buffer);
|
||||
g_object_unref (source_buffer);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -699,8 +737,8 @@ selection_cb (GtkTreeSelection *selection,
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_text (GtkTextBuffer **buffer,
|
||||
gboolean is_source)
|
||||
create_text (GtkWidget **view,
|
||||
gboolean is_source)
|
||||
{
|
||||
GtkWidget *scrolled_window;
|
||||
GtkWidget *text_view;
|
||||
@@ -713,11 +751,9 @@ create_text (GtkTextBuffer **buffer,
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
|
||||
GTK_SHADOW_IN);
|
||||
|
||||
text_view = gtk_text_view_new ();
|
||||
*view = text_view = gtk_text_view_new ();
|
||||
g_object_set (text_view, "margin", 20, NULL);
|
||||
|
||||
*buffer = gtk_text_buffer_new (NULL);
|
||||
gtk_text_view_set_buffer (GTK_TEXT_VIEW (text_view), *buffer);
|
||||
gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);
|
||||
gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);
|
||||
|
||||
@@ -899,43 +935,13 @@ main (int argc, char **argv)
|
||||
gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0);
|
||||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
create_text (&info_buffer, FALSE),
|
||||
create_text (&info_view, FALSE),
|
||||
gtk_label_new_with_mnemonic ("_Info"));
|
||||
|
||||
gtk_text_buffer_create_tag (info_buffer, "title",
|
||||
"font", "Sans 18",
|
||||
"pixels-below-lines", 10,
|
||||
NULL);
|
||||
g_object_unref (info_buffer);
|
||||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
create_text (&source_buffer, TRUE),
|
||||
create_text (&source_view, TRUE),
|
||||
gtk_label_new_with_mnemonic ("_Source"));
|
||||
|
||||
|
||||
gtk_text_buffer_create_tag (source_buffer, "comment",
|
||||
"foreground", "DodgerBlue",
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "type",
|
||||
"foreground", "ForestGreen",
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "string",
|
||||
"foreground", "RosyBrown",
|
||||
"weight", PANGO_WEIGHT_BOLD,
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "control",
|
||||
"foreground", "purple",
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "preprocessor",
|
||||
"style", PANGO_STYLE_OBLIQUE,
|
||||
"foreground", "burlywood4",
|
||||
NULL);
|
||||
gtk_text_buffer_create_tag (source_buffer, "function",
|
||||
"weight", PANGO_WEIGHT_BOLD,
|
||||
"foreground", "DarkGoldenrod4",
|
||||
NULL);
|
||||
g_object_unref (source_buffer);
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
|
||||
gtk_widget_show_all (window);
|
||||
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
#include <gtk/gtk.h>
|
||||
#include <math.h>
|
||||
|
||||
#define FRAME_DELAY 50
|
||||
|
||||
#define BACKGROUND_NAME "/pixbufs/background.jpg"
|
||||
|
||||
static const char *image_names[] = {
|
||||
@@ -88,14 +86,17 @@ draw_cb (GtkWidget *widget,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#define CYCLE_LEN 60
|
||||
#define CYCLE_TIME 3000000 /* 3 seconds */
|
||||
|
||||
static int frame_num;
|
||||
static gint64 start_time;
|
||||
|
||||
/* Timeout handler to regenerate the frame */
|
||||
static gint
|
||||
timeout (gpointer data)
|
||||
/* Handler to regenerate the frame */
|
||||
static gboolean
|
||||
on_tick (GtkWidget *widget,
|
||||
GdkFrameClock *frame_clock,
|
||||
gpointer data)
|
||||
{
|
||||
gint64 current_time;
|
||||
double f;
|
||||
int i;
|
||||
double xmid, ymid;
|
||||
@@ -104,7 +105,11 @@ timeout (gpointer data)
|
||||
gdk_pixbuf_copy_area (background, 0, 0, back_width, back_height,
|
||||
frame, 0, 0);
|
||||
|
||||
f = (double) (frame_num % CYCLE_LEN) / CYCLE_LEN;
|
||||
if (start_time == 0)
|
||||
start_time = gdk_frame_clock_get_frame_time (frame_clock);
|
||||
|
||||
current_time = gdk_frame_clock_get_frame_time (frame_clock);
|
||||
f = ((current_time - start_time) % CYCLE_TIME) / (double)CYCLE_TIME;
|
||||
|
||||
xmid = back_width / 2.0;
|
||||
ymid = back_height / 2.0;
|
||||
@@ -159,20 +164,9 @@ timeout (gpointer data)
|
||||
|
||||
gtk_widget_queue_draw (da);
|
||||
|
||||
frame_num++;
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
static guint timeout_id;
|
||||
|
||||
static void
|
||||
cleanup_callback (GObject *object,
|
||||
gpointer data)
|
||||
{
|
||||
g_source_remove (timeout_id);
|
||||
timeout_id = 0;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_pixbufs (GtkWidget *do_widget)
|
||||
{
|
||||
@@ -188,8 +182,6 @@ do_pixbufs (GtkWidget *do_widget)
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (cleanup_callback), NULL);
|
||||
|
||||
|
||||
error = NULL;
|
||||
@@ -224,7 +216,7 @@ do_pixbufs (GtkWidget *do_widget)
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (window), da);
|
||||
|
||||
timeout_id = g_timeout_add (FRAME_DELAY, timeout, NULL);
|
||||
gtk_widget_add_tick_callback (da, on_tick, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ scroll_to_bottom (GtkTextView *textview)
|
||||
gtk_text_iter_set_line_offset (&iter, 0);
|
||||
|
||||
/* and place the mark at iter. the mark will stay there after we
|
||||
* insert some text at the end because it has right gravity.
|
||||
* insert some text at the end because it has left gravity.
|
||||
*/
|
||||
mark = gtk_text_buffer_get_mark (buffer, "scroll");
|
||||
gtk_text_buffer_move_mark (buffer, mark, &iter);
|
||||
|
||||
@@ -22,6 +22,7 @@ struct _CanvasItem
|
||||
gdouble x, y;
|
||||
};
|
||||
|
||||
static gboolean drag_data_requested_for_drop = FALSE;
|
||||
static CanvasItem *drop_item = NULL;
|
||||
static GList *canvas_items = NULL;
|
||||
|
||||
@@ -266,6 +267,7 @@ interactive_canvas_drag_motion (GtkWidget *widget,
|
||||
if (!target)
|
||||
return FALSE;
|
||||
|
||||
drag_data_requested_for_drop = FALSE;
|
||||
gtk_drag_get_data (widget, context, target, time);
|
||||
}
|
||||
|
||||
@@ -295,16 +297,36 @@ interactive_canvas_drag_data_received (GtkWidget *widget,
|
||||
tool_item = gtk_tool_palette_get_drag_item (GTK_TOOL_PALETTE (palette),
|
||||
selection);
|
||||
|
||||
/* create a drop indicator when a tool button was found */
|
||||
/* create a canvas item when a tool button was found */
|
||||
|
||||
g_assert (NULL == drop_item);
|
||||
|
||||
if (GTK_IS_TOOL_ITEM (tool_item))
|
||||
if (!GTK_IS_TOOL_ITEM (tool_item))
|
||||
return;
|
||||
|
||||
if (drop_item)
|
||||
{
|
||||
drop_item = canvas_item_new (widget, GTK_TOOL_BUTTON (tool_item), x, y);
|
||||
gdk_drag_status (context, GDK_ACTION_COPY, time);
|
||||
gtk_widget_queue_draw (widget);
|
||||
canvas_item_free (drop_item);
|
||||
drop_item = NULL;
|
||||
}
|
||||
|
||||
CanvasItem *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, FALSE, time);
|
||||
} else
|
||||
{
|
||||
drop_item = item;
|
||||
gdk_drag_status (context, GDK_ACTION_COPY, time);
|
||||
}
|
||||
|
||||
gtk_widget_queue_draw (widget);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -315,29 +337,19 @@ interactive_canvas_drag_drop (GtkWidget *widget,
|
||||
guint time,
|
||||
gpointer data)
|
||||
{
|
||||
if (drop_item)
|
||||
{
|
||||
/* turn the drop indicator into a real canvas item */
|
||||
GdkAtom target = gtk_drag_dest_find_target (widget, context, NULL);
|
||||
|
||||
drop_item->x = x;
|
||||
drop_item->y = y;
|
||||
if (!target)
|
||||
return FALSE;
|
||||
|
||||
canvas_items = g_list_append (canvas_items, drop_item);
|
||||
drop_item = NULL;
|
||||
|
||||
/* signal the item was accepted and redraw */
|
||||
|
||||
gtk_drag_finish (context, TRUE, FALSE, time);
|
||||
gtk_widget_queue_draw (widget);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
drag_data_requested_for_drop = TRUE;
|
||||
gtk_drag_get_data (widget, context, target, time);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
interactive_canvas_real_drag_leave (gpointer data)
|
||||
static void
|
||||
interactive_canvas_drag_leave (gpointer data)
|
||||
{
|
||||
if (drop_item)
|
||||
{
|
||||
@@ -346,20 +358,9 @@ interactive_canvas_real_drag_leave (gpointer data)
|
||||
canvas_item_free (drop_item);
|
||||
drop_item = NULL;
|
||||
|
||||
gtk_widget_queue_draw (widget);
|
||||
if (widget)
|
||||
gtk_widget_queue_draw (widget);
|
||||
}
|
||||
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
static void
|
||||
interactive_canvas_drag_leave (GtkWidget *widget,
|
||||
GdkDragContext *context,
|
||||
guint time,
|
||||
gpointer data)
|
||||
{
|
||||
/* defer cleanup until a potential "drag-drop" signal was received */
|
||||
g_idle_add (interactive_canvas_real_drag_leave, widget);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -591,7 +592,7 @@ do_toolpalette (GtkWidget *do_widget)
|
||||
"signal::draw", canvas_draw, NULL,
|
||||
"signal::drag-motion", interactive_canvas_drag_motion, NULL,
|
||||
"signal::drag-data-received", interactive_canvas_drag_data_received, NULL,
|
||||
"signal::drag-leave", interactive_canvas_drag_leave, NULL,
|
||||
"signal::drag-leave", interactive_canvas_drag_leave, contents,
|
||||
"signal::drag-drop", interactive_canvas_drag_drop, NULL,
|
||||
NULL);
|
||||
|
||||
|
||||
@@ -25,8 +25,6 @@
|
||||
|
||||
|
||||
|
||||
#define FRAME_DELAY 50
|
||||
|
||||
#define BACKGROUND_NAME "background.jpg"
|
||||
|
||||
static const char *image_names[] = {
|
||||
@@ -93,14 +91,17 @@ draw_cb (GtkWidget *widget, cairo_t *cr, gpointer data)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#define CYCLE_LEN 60
|
||||
#define CYCLE_TIME 3000000 /* 3 seconds */
|
||||
|
||||
static int frame_num;
|
||||
static gint64 start_time;
|
||||
|
||||
/* Timeout handler to regenerate the frame */
|
||||
static gint
|
||||
timeout (gpointer data)
|
||||
/* Handler to regenerate the frame */
|
||||
static gboolean
|
||||
on_tick (GtkWidget *widget,
|
||||
GdkFrameClock *frame_clock,
|
||||
gpointer data)
|
||||
{
|
||||
gint64 current_time;
|
||||
double f;
|
||||
int i;
|
||||
double xmid, ymid;
|
||||
@@ -109,7 +110,11 @@ timeout (gpointer data)
|
||||
gdk_pixbuf_copy_area (background, 0, 0, back_width, back_height,
|
||||
frame, 0, 0);
|
||||
|
||||
f = (double) (frame_num % CYCLE_LEN) / CYCLE_LEN;
|
||||
if (start_time == 0)
|
||||
start_time = gdk_frame_clock_get_frame_time (frame_clock);
|
||||
|
||||
current_time = gdk_frame_clock_get_frame_time (frame_clock);
|
||||
f = ((current_time - start_time) % CYCLE_TIME) / (double)CYCLE_TIME;
|
||||
|
||||
xmid = back_width / 2.0;
|
||||
ymid = back_height / 2.0;
|
||||
@@ -163,19 +168,13 @@ timeout (gpointer data)
|
||||
|
||||
gtk_widget_queue_draw (da);
|
||||
|
||||
frame_num++;
|
||||
return TRUE;
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
static guint timeout_id;
|
||||
|
||||
/* Destroy handler for the window */
|
||||
static void
|
||||
destroy_cb (GObject *object, gpointer data)
|
||||
{
|
||||
g_source_remove (timeout_id);
|
||||
timeout_id = 0;
|
||||
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
@@ -208,7 +207,7 @@ main (int argc, char **argv)
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (window), da);
|
||||
|
||||
timeout_id = gdk_threads_add_timeout (FRAME_DELAY, timeout, NULL);
|
||||
gtk_widget_add_tick_callback (da, on_tick, NULL, NULL);
|
||||
|
||||
gtk_widget_show_all (window);
|
||||
gtk_main ();
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
<xi:include href="xml/visuals.xml" />
|
||||
<xi:include href="xml/cursors.xml" />
|
||||
<xi:include href="xml/windows.xml" />
|
||||
<xi:include href="xml/gdkframeclock.xml" />
|
||||
<xi:include href="xml/gdkframetimings.xml" />
|
||||
<xi:include href="xml/events.xml" />
|
||||
<xi:include href="xml/event_structs.xml" />
|
||||
<xi:include href="xml/keys.xml" />
|
||||
@@ -69,6 +71,10 @@
|
||||
<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>
|
||||
|
||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
||||
|
||||
|
||||
@@ -404,6 +404,7 @@ gdk_window_process_updates
|
||||
gdk_window_set_debug_updates
|
||||
gdk_window_enable_synchronized_configure
|
||||
gdk_window_configure_finished
|
||||
gdk_window_get_frame_clock
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_window_set_user_data
|
||||
@@ -988,6 +989,7 @@ gdk_x11_window_set_hide_titlebar_when_maximized
|
||||
gdk_x11_window_set_theme_variant
|
||||
gdk_x11_window_set_user_time
|
||||
gdk_x11_window_move_to_current_desktop
|
||||
gdk_x11_window_set_utf8_property
|
||||
gdk_x11_get_default_root_xwindow
|
||||
gdk_x11_get_default_screen
|
||||
gdk_x11_get_default_xdisplay
|
||||
@@ -1154,3 +1156,38 @@ gdk_test_render_sync
|
||||
gdk_test_simulate_button
|
||||
gdk_test_simulate_key
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<TITLE>GdkFrameClock</TITLE>
|
||||
<FILE>gdkframeclock</FILE>
|
||||
GdkFrameClock
|
||||
gdk_frame_clock_get_frame_time
|
||||
GdkFrameClockPhase
|
||||
gdk_frame_clock_request_phase
|
||||
gdk_frame_clock_begin_updating
|
||||
gdk_frame_clock_end_updating
|
||||
gdk_frame_clock_get_frame_counter
|
||||
gdk_frame_clock_get_history_start
|
||||
gdk_frame_clock_get_timings
|
||||
gdk_frame_clock_get_current_timings
|
||||
gdk_frame_clock_get_refresh_info
|
||||
<SUBSECTION Private>
|
||||
GdkFrameClockPrivate
|
||||
gdk_frame_clock_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<TITLE>GdkFrameTimings</TITLE>
|
||||
<FILE>gdkframetimings</FILE>
|
||||
GdkFrameTimings
|
||||
gdk_frame_timings_ref
|
||||
gdk_frame_timings_unref
|
||||
gdk_frame_timings_get_frame_counter
|
||||
gdk_frame_timings_get_complete
|
||||
gdk_frame_timings_get_frame_time
|
||||
gdk_frame_timings_get_presentation_time
|
||||
gdk_frame_timings_get_refresh_interval
|
||||
gdk_frame_timings_get_predicted_presentation_time
|
||||
<SUBSECTION Private>
|
||||
gdk_frame_get_type
|
||||
</SECTION>
|
||||
|
||||
@@ -54,6 +54,15 @@ Start your applications like this:
|
||||
BROADWAY_DISPLAY=:5 gtk3-demo
|
||||
</programlisting>
|
||||
|
||||
You can add password protection for your session by creating a file in
|
||||
<filename>$XDG_CONFIG_HOME/broadway.passwd</filename> or <filename>$HOME/.config/broadway.passwd</filename>
|
||||
with a crypt(3) style password hash.
|
||||
|
||||
A simple way to generate it is with openssl:
|
||||
<programlisting>
|
||||
openssl passwd -1 > ~/.config/broadway.passwd
|
||||
</programlisting>
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ this range will trigger compiler warnings.
|
||||
Here is how you would compile hello.c if you want to allow it
|
||||
to use symbols that were not deprecated in 3.2:
|
||||
<programlisting>
|
||||
$ cc -DGDK_VERSION_MIN_REQIRED=GDK_VERSION_3_2 `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello
|
||||
$ cc -DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_2 `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
||||
@@ -4742,6 +4742,7 @@ GtkCellRendererState
|
||||
GtkCellRendererMode
|
||||
GtkCellRenderer
|
||||
GtkCellRendererClass
|
||||
gtk_cell_renderer_class_set_accessible_type
|
||||
gtk_cell_renderer_get_aligned_area
|
||||
gtk_cell_renderer_get_size
|
||||
gtk_cell_renderer_render
|
||||
@@ -5151,6 +5152,10 @@ gtk_widget_draw
|
||||
gtk_widget_queue_draw
|
||||
gtk_widget_queue_resize
|
||||
gtk_widget_queue_resize_no_redraw
|
||||
gtk_widget_get_frame_clock
|
||||
GtkTickCallback
|
||||
gtk_widget_add_tick_callback
|
||||
gtk_widget_remove_tick_callback
|
||||
gtk_widget_size_request
|
||||
gtk_widget_get_child_requisition
|
||||
gtk_widget_size_allocate
|
||||
@@ -5809,6 +5814,7 @@ gtk_style_context_get_parent
|
||||
gtk_style_context_get_path
|
||||
gtk_style_context_get_property
|
||||
gtk_style_context_get_screen
|
||||
gtk_style_context_get_frame_clock
|
||||
gtk_style_context_get_state
|
||||
gtk_style_context_get_style
|
||||
gtk_style_context_get_style_property
|
||||
@@ -5850,6 +5856,7 @@ gtk_style_context_remove_region
|
||||
gtk_style_context_has_region
|
||||
gtk_style_context_list_regions
|
||||
gtk_style_context_set_screen
|
||||
gtk_style_context_set_frame_clock
|
||||
gtk_style_context_set_state
|
||||
|
||||
<SUBSECTION>
|
||||
@@ -6493,8 +6500,6 @@ gtk_icon_info_load_symbolic
|
||||
gtk_icon_info_load_symbolic_async
|
||||
gtk_icon_info_load_symbolic_finish
|
||||
gtk_icon_info_load_symbolic_for_style
|
||||
gtk_icon_info_load_symbolic_for_style_async
|
||||
gtk_icon_info_load_symbolic_for_style_finish
|
||||
gtk_icon_info_load_symbolic_for_context
|
||||
gtk_icon_info_load_symbolic_for_context_async
|
||||
gtk_icon_info_load_symbolic_for_context_finish
|
||||
|
||||
@@ -119,7 +119,7 @@ gtk_page_setup_get_type
|
||||
@DISABLE_ON_W32@gtk_page_setup_unix_dialog_get_type
|
||||
gtk_paned_get_type
|
||||
gtk_paper_size_get_type
|
||||
@DISABLE_ON_W32@@DISABLE_ON_QUARTZ@gtk_plug_get_type
|
||||
@DISABLE_ON_W32@@DISABLE_ON_QUARTZ@@DISABLE_ON_WAYLAND@gtk_plug_get_type
|
||||
@DISABLE_ON_W32@gtk_printer_get_type
|
||||
gtk_print_context_get_type
|
||||
@DISABLE_ON_W32@gtk_print_job_get_type
|
||||
@@ -151,7 +151,7 @@ gtk_separator_menu_item_get_type
|
||||
gtk_separator_tool_item_get_type
|
||||
gtk_settings_get_type
|
||||
gtk_size_group_get_type
|
||||
@DISABLE_ON_W32@@DISABLE_ON_QUARTZ@gtk_socket_get_type
|
||||
@DISABLE_ON_W32@@DISABLE_ON_QUARTZ@@DISABLE_ON_WAYLAND@gtk_socket_get_type
|
||||
gtk_spin_button_get_type
|
||||
gtk_spinner_get_type
|
||||
gtk_statusbar_get_type
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
|
||||
]>
|
||||
<refentry id="gtk-osx">
|
||||
<refentry id="gtk-wayland">
|
||||
<refmeta>
|
||||
<refentrytitle>Using GTK+ with Wayland</refentrytitle>
|
||||
<manvolnum>3</manvolnum>
|
||||
|
||||
@@ -236,7 +236,6 @@ x11_introspection_files = \
|
||||
x11/gdkxftdefaults.c \
|
||||
x11/gdkxid.c \
|
||||
x11/xsettings-client.c \
|
||||
x11/xsettings-common.c \
|
||||
x11/gdkx.h \
|
||||
x11/gdkx11cursor.h \
|
||||
x11/gdkx11display.h \
|
||||
|
||||
@@ -83,7 +83,7 @@ broadwayd_SOURCES = \
|
||||
broadway-output.h \
|
||||
broadway-output.c
|
||||
|
||||
broadwayd_LDADD = $(GDK_DEP_LIBS) -lrt
|
||||
broadwayd_LDADD = $(GDK_DEP_LIBS) -lrt -lcrypt
|
||||
|
||||
MAINTAINERCLEANFILES = $(broadway_built_sources)
|
||||
EXTRA_DIST += $(broadway_built_sources)
|
||||
|
||||
@@ -317,6 +317,13 @@ broadway_output_get_next_serial (BroadwayOutput *output)
|
||||
return output->serial;
|
||||
}
|
||||
|
||||
void
|
||||
broadway_output_set_next_serial (BroadwayOutput *output,
|
||||
guint32 serial)
|
||||
{
|
||||
output->serial = serial;
|
||||
}
|
||||
|
||||
|
||||
/************************************************************************
|
||||
* Core rendering operations *
|
||||
@@ -471,6 +478,24 @@ broadway_output_new_surface(BroadwayOutput *output,
|
||||
append_bool (output, is_temp);
|
||||
}
|
||||
|
||||
void
|
||||
broadway_output_request_auth (BroadwayOutput *output)
|
||||
{
|
||||
write_header (output, BROADWAY_OP_REQUEST_AUTH);
|
||||
}
|
||||
|
||||
void
|
||||
broadway_output_auth_ok (BroadwayOutput *output)
|
||||
{
|
||||
write_header (output, BROADWAY_OP_AUTH_OK);
|
||||
}
|
||||
|
||||
void
|
||||
broadway_output_disconnected (BroadwayOutput *output)
|
||||
{
|
||||
write_header (output, BROADWAY_OP_DISCONNECTED);
|
||||
}
|
||||
|
||||
void
|
||||
broadway_output_show_surface(BroadwayOutput *output, int id)
|
||||
{
|
||||
|
||||
@@ -23,6 +23,8 @@ BroadwayOutput *broadway_output_new (GOutputStream *out,
|
||||
void broadway_output_free (BroadwayOutput *output);
|
||||
int broadway_output_flush (BroadwayOutput *output);
|
||||
int broadway_output_has_error (BroadwayOutput *output);
|
||||
void broadway_output_set_next_serial (BroadwayOutput *output,
|
||||
guint32 serial);
|
||||
guint32 broadway_output_get_next_serial (BroadwayOutput *output);
|
||||
void broadway_output_new_surface (BroadwayOutput *output,
|
||||
int id,
|
||||
@@ -31,6 +33,9 @@ void broadway_output_new_surface (BroadwayOutput *output,
|
||||
int w,
|
||||
int h,
|
||||
gboolean is_temp);
|
||||
void broadway_output_request_auth (BroadwayOutput *output);
|
||||
void broadway_output_auth_ok (BroadwayOutput *output);
|
||||
void broadway_output_disconnected (BroadwayOutput *output);
|
||||
void broadway_output_show_surface (BroadwayOutput *output,
|
||||
int id);
|
||||
void broadway_output_hide_surface (BroadwayOutput *output,
|
||||
|
||||
@@ -36,6 +36,9 @@ typedef enum {
|
||||
BROADWAY_OP_SET_TRANSIENT_FOR = 'p',
|
||||
BROADWAY_OP_PUT_RGB = 'i',
|
||||
BROADWAY_OP_FLUSH = 'f',
|
||||
BROADWAY_OP_REQUEST_AUTH = 'l',
|
||||
BROADWAY_OP_AUTH_OK = 'L',
|
||||
BROADWAY_OP_DISCONNECTED = 'D',
|
||||
} BroadwayOpType;
|
||||
|
||||
typedef struct {
|
||||
@@ -160,7 +163,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
BroadwayRequestBase base;
|
||||
guint32 id;
|
||||
char name[34];
|
||||
char name[36];
|
||||
guint32 width;
|
||||
guint32 height;
|
||||
} BroadwayRequestUpdate;
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
#include "broadway-output.h"
|
||||
|
||||
#define _XOPEN_SOURCE /* for crypt */
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gprintf.h>
|
||||
#include "gdktypes.h"
|
||||
@@ -9,6 +11,10 @@
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <crypt.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
@@ -19,6 +25,7 @@ typedef struct BroadwayWindow BroadwayWindow;
|
||||
struct _BroadwayServer {
|
||||
GObject parent_instance;
|
||||
|
||||
char *password;
|
||||
char *address;
|
||||
int port;
|
||||
GSocketService *service;
|
||||
@@ -69,6 +76,7 @@ typedef struct HttpRequest {
|
||||
|
||||
struct BroadwayInput {
|
||||
BroadwayServer *server;
|
||||
BroadwayOutput *output;
|
||||
GSocketConnection *connection;
|
||||
GByteArray *buffer;
|
||||
GSource *source;
|
||||
@@ -76,6 +84,7 @@ struct BroadwayInput {
|
||||
gint64 time_base;
|
||||
gboolean proto_v7_plus;
|
||||
gboolean binary;
|
||||
gboolean active;
|
||||
};
|
||||
|
||||
struct BroadwayWindow {
|
||||
@@ -90,6 +99,9 @@ struct BroadwayWindow {
|
||||
gint32 transient_for;
|
||||
|
||||
cairo_surface_t *last_surface;
|
||||
|
||||
char *cached_surface_name;
|
||||
cairo_surface_t *cached_surface;
|
||||
};
|
||||
|
||||
static void broadway_server_resync_windows (BroadwayServer *server);
|
||||
@@ -100,6 +112,8 @@ static void
|
||||
broadway_server_init (BroadwayServer *server)
|
||||
{
|
||||
BroadwayWindow *root;
|
||||
char *passwd_file;
|
||||
char *password, *p;
|
||||
|
||||
server->service = g_socket_service_new ();
|
||||
server->pointer_grab_window_id = -1;
|
||||
@@ -108,6 +122,22 @@ broadway_server_init (BroadwayServer *server)
|
||||
server->id_ht = g_hash_table_new (NULL, NULL);
|
||||
server->id_counter = 0;
|
||||
|
||||
passwd_file = g_build_filename (g_get_user_config_dir (),
|
||||
"broadway.passwd", NULL);
|
||||
|
||||
if (g_file_get_contents (passwd_file,
|
||||
&password, NULL, NULL))
|
||||
{
|
||||
p = strchr (password, '\n');
|
||||
if (p)
|
||||
*p = 0;
|
||||
g_strstrip (password);
|
||||
if (strlen (password) > 3)
|
||||
server->password = password;
|
||||
else
|
||||
g_free (password);
|
||||
}
|
||||
|
||||
root = g_new0 (BroadwayWindow, 1);
|
||||
root->id = server->id_counter++;
|
||||
root->width = 1024;
|
||||
@@ -139,7 +169,7 @@ broadway_server_class_init (BroadwayServerClass * class)
|
||||
object_class->finalize = broadway_server_finalize;
|
||||
}
|
||||
|
||||
static void start_output (HttpRequest *request, gboolean proto_v7_plus, gboolean binary);
|
||||
static void start (BroadwayInput *input);
|
||||
|
||||
static void
|
||||
http_request_free (HttpRequest *request)
|
||||
@@ -349,6 +379,14 @@ update_future_pointer_info (BroadwayServer *server, BroadwayInputPointerMsg *dat
|
||||
server->future_mouse_in_toplevel = data->mouse_window_id;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
verify_password (BroadwayServer *server, const char *password)
|
||||
{
|
||||
char *hash;
|
||||
hash = crypt (password, server->password);
|
||||
return strcmp (hash, server->password) == 0;
|
||||
}
|
||||
|
||||
static void
|
||||
parse_input_message (BroadwayInput *input, const char *message)
|
||||
{
|
||||
@@ -357,6 +395,22 @@ parse_input_message (BroadwayInput *input, const char *message)
|
||||
char *p;
|
||||
gint64 time_;
|
||||
|
||||
if (!input->active)
|
||||
{
|
||||
/* The input has not been activated yet, handle auth/start */
|
||||
|
||||
if (message[0] != 'l' ||
|
||||
!verify_password (server, message+1))
|
||||
{
|
||||
broadway_output_request_auth (input->output);
|
||||
broadway_output_flush (input->output);
|
||||
}
|
||||
else
|
||||
start (input);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
memset (&msg, 0, sizeof (msg));
|
||||
|
||||
p = (char *)message;
|
||||
@@ -570,7 +624,7 @@ parse_input (BroadwayInput *input)
|
||||
}
|
||||
break;
|
||||
case BROADWAY_WS_CNX_PING:
|
||||
broadway_output_pong (server->output);
|
||||
broadway_output_pong (input->output);
|
||||
break;
|
||||
case BROADWAY_WS_CNX_PONG:
|
||||
break; /* we never send pings, but tolerate pongs */
|
||||
@@ -596,7 +650,8 @@ parse_input (BroadwayInput *input)
|
||||
|
||||
if (buf[0] != 0)
|
||||
{
|
||||
server->input = NULL;
|
||||
if (server->input == input)
|
||||
server->input = NULL;
|
||||
broadway_input_free (input);
|
||||
return;
|
||||
}
|
||||
@@ -613,7 +668,8 @@ parse_input (BroadwayInput *input)
|
||||
|
||||
if (len > 0 && buf[0] != 0)
|
||||
{
|
||||
server->input = NULL;
|
||||
if (server->input == input)
|
||||
server->input = NULL;
|
||||
broadway_input_free (input);
|
||||
break;
|
||||
}
|
||||
@@ -640,19 +696,16 @@ queue_process_input_at_idle (BroadwayServer *server)
|
||||
}
|
||||
|
||||
static void
|
||||
broadway_server_read_all_input_nonblocking (BroadwayServer *server)
|
||||
broadway_server_read_all_input_nonblocking (BroadwayInput *input)
|
||||
{
|
||||
GInputStream *in;
|
||||
gssize res;
|
||||
guint8 buffer[1024];
|
||||
GError *error;
|
||||
BroadwayInput *input;
|
||||
|
||||
if (server->input == NULL)
|
||||
if (input == NULL)
|
||||
return;
|
||||
|
||||
input = server->input;
|
||||
|
||||
in = g_io_stream_get_input_stream (G_IO_STREAM (input->connection));
|
||||
|
||||
error = NULL;
|
||||
@@ -668,7 +721,8 @@ broadway_server_read_all_input_nonblocking (BroadwayServer *server)
|
||||
return;
|
||||
}
|
||||
|
||||
server->input = NULL;
|
||||
if (input->server->input == input)
|
||||
input->server->input = NULL;
|
||||
broadway_input_free (input);
|
||||
if (res < 0)
|
||||
{
|
||||
@@ -686,7 +740,7 @@ broadway_server_read_all_input_nonblocking (BroadwayServer *server)
|
||||
static void
|
||||
broadway_server_consume_all_input (BroadwayServer *server)
|
||||
{
|
||||
broadway_server_read_all_input_nonblocking (server);
|
||||
broadway_server_read_all_input_nonblocking (server->input);
|
||||
|
||||
/* Since we're parsing input but not processing the resulting messages
|
||||
we might not get a readable callback on the stream, so queue an idle to
|
||||
@@ -701,9 +755,10 @@ input_data_cb (GObject *stream,
|
||||
{
|
||||
BroadwayServer *server = input->server;
|
||||
|
||||
broadway_server_read_all_input_nonblocking (server);
|
||||
broadway_server_read_all_input_nonblocking (input);
|
||||
|
||||
process_input_messages (server);
|
||||
if (input->active)
|
||||
process_input_messages (server);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -878,15 +933,14 @@ start_input (HttpRequest *request, gboolean binary)
|
||||
gsize len;
|
||||
GChecksum *checksum;
|
||||
char *origin, *host;
|
||||
BroadwayServer *server;
|
||||
BroadwayInput *input;
|
||||
const void *data_buffer;
|
||||
gsize data_buffer_size;
|
||||
GInputStream *in;
|
||||
char *key_v7;
|
||||
gboolean proto_v7_plus;
|
||||
|
||||
server = request->server;
|
||||
GSocket *socket;
|
||||
int flag = 1;
|
||||
|
||||
#ifdef DEBUG_WEBSOCKETS
|
||||
g_print ("incoming request:\n%s\n", request->request->str);
|
||||
@@ -1033,15 +1087,11 @@ start_input (HttpRequest *request, gboolean binary)
|
||||
proto_v7_plus = FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (server->input != NULL)
|
||||
{
|
||||
broadway_input_free (server->input);
|
||||
server->input = NULL;
|
||||
}
|
||||
socket = g_socket_connection_get_socket (request->connection);
|
||||
setsockopt (g_socket_get_fd (socket), IPPROTO_TCP,
|
||||
TCP_NODELAY, (char *) &flag, sizeof(int));
|
||||
|
||||
input = g_new0 (BroadwayInput, 1);
|
||||
|
||||
input->server = request->server;
|
||||
input->connection = g_object_ref (request->connection);
|
||||
input->proto_v7_plus = proto_v7_plus;
|
||||
@@ -1051,9 +1101,9 @@ start_input (HttpRequest *request, gboolean binary)
|
||||
input->buffer = g_byte_array_sized_new (data_buffer_size);
|
||||
g_byte_array_append (input->buffer, data_buffer, data_buffer_size);
|
||||
|
||||
server->input = input;
|
||||
|
||||
start_output (request, proto_v7_plus, binary);
|
||||
input->output =
|
||||
broadway_output_new (g_io_stream_get_output_stream (G_IO_STREAM (request->connection)),
|
||||
0, proto_v7_plus, binary);
|
||||
|
||||
/* This will free and close the data input stream, but we got all the buffered content already */
|
||||
http_request_free (request);
|
||||
@@ -1063,35 +1113,53 @@ start_input (HttpRequest *request, gboolean binary)
|
||||
g_source_set_callback (input->source, (GSourceFunc)input_data_cb, input, NULL);
|
||||
g_source_attach (input->source, NULL);
|
||||
|
||||
if (input->server->password)
|
||||
{
|
||||
broadway_output_request_auth (input->output);
|
||||
broadway_output_flush (input->output);
|
||||
}
|
||||
else
|
||||
start (input);
|
||||
|
||||
/* Process any data in the pipe already */
|
||||
parse_input (input);
|
||||
process_input_messages (server);
|
||||
|
||||
g_strfreev (lines);
|
||||
}
|
||||
|
||||
static void
|
||||
start_output (HttpRequest *request, gboolean proto_v7_plus, gboolean binary)
|
||||
start (BroadwayInput *input)
|
||||
{
|
||||
GSocket *socket;
|
||||
BroadwayServer *server;
|
||||
int flag = 1;
|
||||
|
||||
socket = g_socket_connection_get_socket (request->connection);
|
||||
setsockopt(g_socket_get_fd (socket), IPPROTO_TCP,
|
||||
TCP_NODELAY, (char *) &flag, sizeof(int));
|
||||
input->active = TRUE;
|
||||
|
||||
server = BROADWAY_SERVER (request->server);
|
||||
server = BROADWAY_SERVER (input->server);
|
||||
|
||||
if (server->output)
|
||||
{
|
||||
broadway_output_disconnected (server->output);
|
||||
broadway_output_flush (server->output);
|
||||
}
|
||||
|
||||
if (server->input != NULL)
|
||||
{
|
||||
broadway_input_free (server->input);
|
||||
server->input = NULL;
|
||||
}
|
||||
|
||||
server->input = input;
|
||||
|
||||
if (server->output)
|
||||
{
|
||||
server->saved_serial = broadway_output_get_next_serial (server->output);
|
||||
broadway_output_free (server->output);
|
||||
}
|
||||
server->output = input->output;
|
||||
|
||||
server->output =
|
||||
broadway_output_new (g_io_stream_get_output_stream (G_IO_STREAM (request->connection)),
|
||||
server->saved_serial, proto_v7_plus, binary);
|
||||
broadway_output_set_next_serial (server->output, server->saved_serial);
|
||||
broadway_output_auth_ok (server->output);
|
||||
broadway_output_flush (server->output);
|
||||
|
||||
broadway_server_resync_windows (server);
|
||||
|
||||
@@ -1099,6 +1167,8 @@ start_output (HttpRequest *request, gboolean proto_v7_plus, gboolean binary)
|
||||
broadway_output_grab_pointer (server->output,
|
||||
server->pointer_grab_window_id,
|
||||
server->pointer_grab_owner_events);
|
||||
|
||||
process_input_messages (server);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1349,6 +1419,12 @@ broadway_server_destroy_window (BroadwayServer *server,
|
||||
server->toplevels = g_list_remove (server->toplevels, window);
|
||||
g_hash_table_remove (server->id_ht,
|
||||
GINT_TO_POINTER (id));
|
||||
|
||||
if (window->cached_surface_name != NULL)
|
||||
g_free (window->cached_surface_name);
|
||||
if (window->cached_surface != NULL)
|
||||
cairo_surface_destroy (window->cached_surface);
|
||||
|
||||
g_free (window);
|
||||
}
|
||||
}
|
||||
@@ -1583,6 +1659,11 @@ broadway_server_window_update (BroadwayServer *server,
|
||||
window->width,
|
||||
window->height);
|
||||
|
||||
g_assert (window->width == cairo_image_surface_get_width (window->last_surface));
|
||||
g_assert (window->width == cairo_image_surface_get_width (surface));
|
||||
g_assert (window->height == cairo_image_surface_get_height (window->last_surface));
|
||||
g_assert (window->height == cairo_image_surface_get_height (surface));
|
||||
|
||||
if (server->output != NULL)
|
||||
{
|
||||
if (window->last_synced)
|
||||
@@ -1739,6 +1820,86 @@ broadway_server_ungrab_pointer (BroadwayServer *server,
|
||||
return serial;
|
||||
}
|
||||
|
||||
static const cairo_user_data_key_t shm_cairo_key;
|
||||
|
||||
typedef struct {
|
||||
void *data;
|
||||
gsize data_size;
|
||||
} ShmSurfaceData;
|
||||
|
||||
static void
|
||||
shm_data_unmap (void *_data)
|
||||
{
|
||||
ShmSurfaceData *data = _data;
|
||||
munmap (data->data, data->data_size);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
cairo_surface_t *
|
||||
broadway_server_open_surface (BroadwayServer *server,
|
||||
guint32 id,
|
||||
char *name,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
BroadwayWindow *window;
|
||||
ShmSurfaceData *data;
|
||||
cairo_surface_t *surface;
|
||||
gsize size;
|
||||
void *ptr;
|
||||
int fd;
|
||||
|
||||
window = g_hash_table_lookup (server->id_ht,
|
||||
GINT_TO_POINTER (id));
|
||||
if (window == NULL)
|
||||
return NULL;
|
||||
|
||||
if (window->cached_surface_name != NULL &&
|
||||
strcmp (name, window->cached_surface_name) == 0)
|
||||
return cairo_surface_reference (window->cached_surface);
|
||||
|
||||
size = width * height * sizeof (guint32);
|
||||
|
||||
fd = shm_open(name, O_RDONLY, 0600);
|
||||
if (fd == -1)
|
||||
{
|
||||
perror ("Failed to shm_open");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ptr = mmap(0, size, PROT_READ, MAP_SHARED, fd, 0);
|
||||
(void) close(fd);
|
||||
|
||||
shm_unlink (name);
|
||||
|
||||
if (ptr == NULL)
|
||||
return NULL;
|
||||
|
||||
data = g_new0 (ShmSurfaceData, 1);
|
||||
|
||||
data->data = ptr;
|
||||
data->data_size = size;
|
||||
|
||||
surface = cairo_image_surface_create_for_data ((guchar *)data->data,
|
||||
CAIRO_FORMAT_RGB24,
|
||||
width, height,
|
||||
width * sizeof (guint32));
|
||||
g_assert (surface != NULL);
|
||||
|
||||
cairo_surface_set_user_data (surface, &shm_cairo_key,
|
||||
data, shm_data_unmap);
|
||||
|
||||
if (window->cached_surface_name != NULL)
|
||||
g_free (window->cached_surface_name);
|
||||
window->cached_surface_name = g_strdup (name);
|
||||
|
||||
if (window->cached_surface != NULL)
|
||||
cairo_surface_destroy (window->cached_surface);
|
||||
window->cached_surface = cairo_surface_reference (surface);
|
||||
|
||||
return surface;
|
||||
}
|
||||
|
||||
guint32
|
||||
broadway_server_new_window (BroadwayServer *server,
|
||||
int x,
|
||||
|
||||
@@ -78,5 +78,10 @@ gboolean broadway_server_window_move_resize (BroadwayServer *
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
cairo_surface_t * broadway_server_open_surface (BroadwayServer *server,
|
||||
guint32 id,
|
||||
char *name,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
#endif /* __BROADWAY_SERVER__ */
|
||||
|
||||
@@ -225,34 +225,16 @@ function flushSurface(surface)
|
||||
context.save();
|
||||
context.beginPath();
|
||||
|
||||
var minx;
|
||||
var miny;
|
||||
var maxx;
|
||||
var maxy;
|
||||
for (var j = 0; j < cmd.rects.length; j++) {
|
||||
var rect = cmd.rects[j];
|
||||
context.rect(rect.x, rect.y, rect.w, rect.h);
|
||||
if (j == 0) {
|
||||
minx = rect.x;
|
||||
miny = rect.y;
|
||||
maxx = rect.x + rect.w;
|
||||
maxy = rect.y + rect.h;
|
||||
} else {
|
||||
if (rect.x < minx)
|
||||
minx = rect.x;
|
||||
if (rect.y < miny)
|
||||
miny = rect.y;
|
||||
if (rect.x + rect.w > maxx)
|
||||
maxx = rect.x + rect.w;
|
||||
if (rect.y + rect.h > maxy)
|
||||
maxy = rect.y + rect.h;
|
||||
}
|
||||
}
|
||||
context.clip();
|
||||
context.globalCompositeOperation = "copy";
|
||||
context.drawImage(context.canvas,
|
||||
minx - cmd.dx, miny - cmd.dy, maxx - minx, maxy - miny,
|
||||
minx, miny, maxx - minx, maxy - miny);
|
||||
// This seems to break chrome when src overlaps dest
|
||||
// But source-over should be fine for rgb surfaces anyway
|
||||
//context.globalCompositeOperation = "copy";
|
||||
context.drawImage(surface.canvas,
|
||||
cmd.dx, cmd.dy);
|
||||
context.restore();
|
||||
break;
|
||||
|
||||
@@ -496,12 +478,6 @@ function cmdMoveResizeSurface(id, has_pos, x, y, has_size, w, h)
|
||||
var xOffset = surface.x;
|
||||
var yOffset = surface.y;
|
||||
|
||||
var transientToplevel = getTransientToplevel(surface);
|
||||
if (transientToplevel) {
|
||||
xOffset = surface.x - transientToplevel.x;
|
||||
yOffset = surface.y - transientToplevel.y;
|
||||
}
|
||||
|
||||
var element = surface.canvas;
|
||||
if (surface.frame) {
|
||||
element = surface.frame;
|
||||
@@ -543,6 +519,21 @@ function handleCommands(cmd)
|
||||
var command = cmd.get_char();
|
||||
lastSerial = cmd.get_32();
|
||||
switch (command) {
|
||||
case 'l':
|
||||
login ();
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
if (loginDiv != null)
|
||||
loginDiv.parentNode.removeChild(loginDiv);
|
||||
start ();
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
alert ("disconnected");
|
||||
inputSocket = null;
|
||||
break;
|
||||
|
||||
case 's': // create new surface
|
||||
id = cmd.get_16();
|
||||
x = cmd.get_16s();
|
||||
@@ -742,8 +733,12 @@ BinCommands.prototype.get_32 = function() {
|
||||
};
|
||||
BinCommands.prototype.get_image_url = function() {
|
||||
var size = this.get_32();
|
||||
var png_blob = new Blob ([this.arraybuffer.slice (this.pos, this.pos + size)], {type:"image/png"});
|
||||
var url = URL.createObjectURL(png_blob, {oneTimeOnly: true});
|
||||
var png_blob = new Blob ([new Uint8Array (this.arraybuffer, this.pos, size)], {type:"image/png"});
|
||||
var url;
|
||||
if (window.webkitURL)
|
||||
url = window.webkitURL.createObjectURL(png_blob);
|
||||
else
|
||||
url = window.URL.createObjectURL(png_blob, {oneTimeOnly: true});
|
||||
this.pos = this.pos + size;
|
||||
return url;
|
||||
};
|
||||
@@ -2590,7 +2585,7 @@ function onMouseWheel(ev)
|
||||
var id = getSurfaceId(ev);
|
||||
var pos = getPositionsFromEvent(ev, id);
|
||||
|
||||
var offset = ev.detail ? ev.detail : ev.wheelDelta;
|
||||
var offset = ev.detail ? ev.detail : -ev.wheelDelta;
|
||||
var dir = 0;
|
||||
if (offset > 0)
|
||||
dir = 1;
|
||||
@@ -2631,6 +2626,47 @@ function newWS(loc) {
|
||||
return ws;
|
||||
}
|
||||
|
||||
function start()
|
||||
{
|
||||
setupDocument(document);
|
||||
|
||||
var w, h;
|
||||
w = window.innerWidth;
|
||||
h = window.innerHeight;
|
||||
window.onresize = function(ev) {
|
||||
var w, h;
|
||||
w = window.innerWidth;
|
||||
h = window.innerHeight;
|
||||
sendInput ("d", [w, h]);
|
||||
};
|
||||
sendInput ("d", [w, h]);
|
||||
}
|
||||
|
||||
var loginDiv = null;
|
||||
function login()
|
||||
{
|
||||
if (loginDiv == null) {
|
||||
var div = document.createElement('div');
|
||||
document.body.appendChild(div);
|
||||
div.innerHTML = "Please enter password<br>";
|
||||
div.style.marginTop = "40px";
|
||||
div.style.textAlign = "center";
|
||||
|
||||
var input = document.createElement("input");
|
||||
input.setAttribute("type", "password");
|
||||
div.appendChild(input);
|
||||
input.focus ();
|
||||
input.onkeyup = function(e) {
|
||||
if (e.keyCode === 13 && input.value != "") {
|
||||
inputSocket.send ("l" + input.value);
|
||||
}
|
||||
}
|
||||
loginDiv = div;
|
||||
} else {
|
||||
alert ("Wrong password");
|
||||
}
|
||||
}
|
||||
|
||||
function connect()
|
||||
{
|
||||
var url = window.location.toString();
|
||||
@@ -2639,7 +2675,7 @@ function connect()
|
||||
var params = query_string[1].split("&");
|
||||
}
|
||||
|
||||
var loc = window.location.toString().replace("http:", "ws:");
|
||||
var loc = window.location.toString().replace("http:", "ws:").replace("https:", "wss:");
|
||||
loc = loc.substr(0, loc.lastIndexOf('/')) + "/socket";
|
||||
|
||||
var supports_binary = newWS (loc + "-test").binaryType == "blob";
|
||||
@@ -2652,23 +2688,13 @@ function connect()
|
||||
|
||||
ws.onopen = function() {
|
||||
inputSocket = ws;
|
||||
var w, h;
|
||||
w = window.innerWidth;
|
||||
h = window.innerHeight;
|
||||
window.onresize = function(ev) {
|
||||
var w, h;
|
||||
w = window.innerWidth;
|
||||
h = window.innerHeight;
|
||||
sendInput ("d", [w, h]);
|
||||
};
|
||||
sendInput ("d", [w, h]);
|
||||
};
|
||||
ws.onclose = function() {
|
||||
if (inputSocket != null)
|
||||
alert ("disconnected");
|
||||
inputSocket = null;
|
||||
};
|
||||
ws.onmessage = function(event) {
|
||||
handleMessage(event.data);
|
||||
};
|
||||
|
||||
setupDocument(document);
|
||||
}
|
||||
|
||||
@@ -140,62 +140,6 @@ region_from_rects (BroadwayRect *rects, int n_rects)
|
||||
return region;
|
||||
}
|
||||
|
||||
static const cairo_user_data_key_t shm_cairo_key;
|
||||
|
||||
typedef struct {
|
||||
void *data;
|
||||
gsize data_size;
|
||||
} ShmSurfaceData;
|
||||
|
||||
static void
|
||||
shm_data_unmap (void *_data)
|
||||
{
|
||||
ShmSurfaceData *data = _data;
|
||||
munmap (data->data, data->data_size);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
cairo_surface_t *
|
||||
open_surface (char *name, int width, int height)
|
||||
{
|
||||
ShmSurfaceData *data;
|
||||
cairo_surface_t *surface;
|
||||
gsize size;
|
||||
void *ptr;
|
||||
int fd;
|
||||
|
||||
size = width * height * sizeof (guint32);
|
||||
|
||||
fd = shm_open(name, O_RDONLY, 0600);
|
||||
if (fd == -1)
|
||||
{
|
||||
perror ("Failed to shm_open");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ptr = mmap(0, size, PROT_READ, MAP_SHARED, fd, 0);
|
||||
(void) close(fd);
|
||||
|
||||
if (ptr == NULL)
|
||||
return NULL;
|
||||
|
||||
data = g_new0 (ShmSurfaceData, 1);
|
||||
|
||||
data->data = ptr;
|
||||
data->data_size = size;
|
||||
|
||||
surface = cairo_image_surface_create_for_data ((guchar *)data->data,
|
||||
CAIRO_FORMAT_RGB24,
|
||||
width, height,
|
||||
width * sizeof (guint32));
|
||||
g_assert (surface != NULL);
|
||||
|
||||
cairo_surface_set_user_data (surface, &shm_cairo_key,
|
||||
data, shm_data_unmap);
|
||||
|
||||
return surface;
|
||||
}
|
||||
|
||||
void
|
||||
add_client_serial_mapping (BroadwayClient *client,
|
||||
guint32 client_serial,
|
||||
@@ -337,9 +281,11 @@ client_handle_request (BroadwayClient *client,
|
||||
cairo_region_destroy (area);
|
||||
break;
|
||||
case BROADWAY_REQUEST_UPDATE:
|
||||
surface = open_surface (request->update.name,
|
||||
request->update.width,
|
||||
request->update.height);
|
||||
surface = broadway_server_open_surface (server,
|
||||
request->update.id,
|
||||
request->update.name,
|
||||
request->update.width,
|
||||
request->update.height);
|
||||
if (surface != NULL)
|
||||
{
|
||||
broadway_server_window_update (server,
|
||||
@@ -409,7 +355,6 @@ client_fill_cb (GObject *source_object,
|
||||
guint32 size;
|
||||
gsize count, remaining;
|
||||
guint8 *buffer;
|
||||
BroadwayRequest request;
|
||||
|
||||
buffer = (guint8 *)g_buffered_input_stream_peek_buffer (client->in, &count);
|
||||
|
||||
@@ -417,14 +362,10 @@ client_fill_cb (GObject *source_object,
|
||||
while (remaining >= sizeof (guint32))
|
||||
{
|
||||
memcpy (&size, buffer, sizeof (guint32));
|
||||
|
||||
|
||||
if (size <= remaining)
|
||||
{
|
||||
g_assert (size >= sizeof (BroadwayRequestBase));
|
||||
g_assert (size <= sizeof (BroadwayRequest));
|
||||
|
||||
memcpy (&request, buffer, size);
|
||||
client_handle_request (client, &request);
|
||||
client_handle_request (client, (BroadwayRequest *)buffer);
|
||||
|
||||
remaining -= size;
|
||||
buffer += size;
|
||||
|
||||
@@ -506,7 +506,7 @@ make_valid_fs_char (char c)
|
||||
{
|
||||
char chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890";
|
||||
|
||||
return chars[c % sizeof (chars)];
|
||||
return chars[c % (sizeof (chars) - 1)];
|
||||
}
|
||||
|
||||
/* name must have at least space for 34 bytes */
|
||||
@@ -550,7 +550,7 @@ create_random_shm (char *name)
|
||||
static const cairo_user_data_key_t gdk_broadway_shm_cairo_key;
|
||||
|
||||
typedef struct {
|
||||
char name[34];
|
||||
char name[36];
|
||||
void *data;
|
||||
gsize data_size;
|
||||
} BroadwayShmSurfaceData;
|
||||
@@ -582,6 +582,13 @@ _gdk_broadway_server_create_surface (int width,
|
||||
res = ftruncate (fd, data->data_size);
|
||||
g_assert (res != -1);
|
||||
|
||||
res = posix_fallocate (fd, 0, data->data_size);
|
||||
if (res != 0)
|
||||
{
|
||||
shm_unlink (data->name);
|
||||
g_error ("Not enough shared memory for window surface");
|
||||
}
|
||||
|
||||
data->data = mmap(0, data->data_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
|
||||
(void) close(fd);
|
||||
|
||||
@@ -610,7 +617,7 @@ _gdk_broadway_server_window_update (GdkBroadwayServer *server,
|
||||
g_assert (data != NULL);
|
||||
|
||||
msg.id = id;
|
||||
memcpy (msg.name, data->name, 34);
|
||||
memcpy (msg.name, data->name, 36);
|
||||
msg.width = cairo_image_surface_get_width (surface);
|
||||
msg.height = cairo_image_surface_get_height (surface);
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
||||
GdkBroadwayDisplay *broadway_display;
|
||||
GdkScreen *screen;
|
||||
gint32 device_root_x, device_root_y;
|
||||
gint32 mouse_toplevel_id;
|
||||
guint32 mouse_toplevel_id;
|
||||
GdkWindow *mouse_toplevel;
|
||||
guint32 mask32;
|
||||
|
||||
@@ -181,14 +181,14 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
||||
&device_root_x,
|
||||
&device_root_y,
|
||||
&mask32);
|
||||
mouse_toplevel = g_hash_table_lookup (broadway_display->id_ht, GINT_TO_POINTER (mouse_toplevel_id));
|
||||
mouse_toplevel = g_hash_table_lookup (broadway_display->id_ht, GUINT_TO_POINTER (mouse_toplevel_id));
|
||||
|
||||
if (root_x)
|
||||
*root_x = device_root_x;
|
||||
if (root_y)
|
||||
*root_y = device_root_y;
|
||||
if (win_x)
|
||||
*win_x = device_root_y - toplevel->x;
|
||||
*win_x = device_root_x - toplevel->x;
|
||||
if (win_y)
|
||||
*win_y = device_root_y - toplevel->y;
|
||||
if (mask)
|
||||
@@ -211,6 +211,29 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_broadway_window_grab_check_unmap (GdkWindow *window,
|
||||
gulong serial)
|
||||
{
|
||||
GdkDisplay *display = gdk_window_get_display (window);
|
||||
GdkDeviceManager *device_manager;
|
||||
GList *devices, *d;
|
||||
|
||||
device_manager = gdk_display_get_device_manager (display);
|
||||
|
||||
/* Get all devices */
|
||||
devices = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_MASTER);
|
||||
devices = g_list_concat (devices, gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_SLAVE));
|
||||
devices = g_list_concat (devices, gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_FLOATING));
|
||||
|
||||
/* End all grabs on the newly hidden window */
|
||||
for (d = devices; d; d = d->next)
|
||||
_gdk_display_end_device_grab (display, d->data, serial, window, TRUE);
|
||||
|
||||
g_list_free (devices);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_gdk_broadway_window_grab_check_destroy (GdkWindow *window)
|
||||
{
|
||||
|
||||
@@ -66,6 +66,8 @@ struct _GdkBroadwayDisplay
|
||||
GdkWindow *active_offscreen_window;
|
||||
|
||||
GdkBroadwayServer *server;
|
||||
|
||||
gpointer move_resize_data;
|
||||
};
|
||||
|
||||
struct _GdkBroadwayDisplayClass
|
||||
|
||||
@@ -61,7 +61,11 @@ gdk_event_source_prepare (GSource *source,
|
||||
gdk_threads_enter ();
|
||||
|
||||
*timeout = -1;
|
||||
retval = (_gdk_event_queue_find_first (display) != NULL);
|
||||
|
||||
if (display->event_pause_count > 0)
|
||||
retval = FALSE;
|
||||
else
|
||||
retval = (_gdk_event_queue_find_first (display) != NULL);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
@@ -76,7 +80,9 @@ gdk_event_source_check (GSource *source)
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
if (event_source->event_poll_fd.revents & G_IO_IN)
|
||||
if (event_source->display->event_pause_count > 0)
|
||||
retval = FALSE;
|
||||
else if (event_source->event_poll_fd.revents & G_IO_IN)
|
||||
retval = (_gdk_event_queue_find_first (event_source->display) != NULL);
|
||||
else
|
||||
retval = FALSE;
|
||||
@@ -241,7 +247,7 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
break;
|
||||
case BROADWAY_EVENT_GRAB_NOTIFY:
|
||||
case BROADWAY_EVENT_UNGRAB_NOTIFY:
|
||||
_gdk_display_device_grab_update (display, display->core_pointer, NULL, message->base.serial);
|
||||
_gdk_display_device_grab_update (display, display->core_pointer, display->core_pointer, message->base.serial);
|
||||
break;
|
||||
|
||||
case BROADWAY_EVENT_CONFIGURE_NOTIFY:
|
||||
@@ -250,10 +256,6 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
{
|
||||
window->x = message->configure_notify.x;
|
||||
window->y = message->configure_notify.y;
|
||||
window->width = message->configure_notify.width;
|
||||
window->height = message->configure_notify.height;
|
||||
_gdk_window_update_size (window);
|
||||
_gdk_broadway_window_resize_surface (window);
|
||||
|
||||
event = gdk_event_new (GDK_CONFIGURE);
|
||||
event->configure.window = g_object_ref (window);
|
||||
|
||||
@@ -92,6 +92,8 @@ gboolean _gdk_broadway_moveresize_configure_done (GdkDisplay *display,
|
||||
|
||||
void _gdk_broadway_selection_window_destroyed (GdkWindow *window);
|
||||
void _gdk_broadway_window_grab_check_destroy (GdkWindow *window);
|
||||
void _gdk_broadway_window_grab_check_unmap (GdkWindow *window,
|
||||
gulong serial);
|
||||
|
||||
void _gdk_keymap_keys_changed (GdkDisplay *display);
|
||||
gint _gdk_broadway_get_group_for_state (GdkDisplay *display,
|
||||
|
||||
@@ -83,18 +83,16 @@ G_DEFINE_TYPE (GdkWindowImplBroadway,
|
||||
gdk_window_impl_broadway,
|
||||
GDK_TYPE_WINDOW_IMPL)
|
||||
|
||||
static guint dirty_flush_id = 0;
|
||||
|
||||
static gboolean
|
||||
dirty_flush_idle (gpointer data)
|
||||
static void
|
||||
update_dirty_windows_and_sync (void)
|
||||
{
|
||||
GList *l;
|
||||
GdkBroadwayDisplay *display;
|
||||
|
||||
dirty_flush_id = 0;
|
||||
gboolean updated_surface;
|
||||
|
||||
display = GDK_BROADWAY_DISPLAY (gdk_display_get_default ());
|
||||
|
||||
updated_surface = FALSE;
|
||||
for (l = display->toplevels; l != NULL; l = l->next)
|
||||
{
|
||||
GdkWindowImplBroadway *impl = l->data;
|
||||
@@ -102,6 +100,7 @@ dirty_flush_idle (gpointer data)
|
||||
if (impl->dirty)
|
||||
{
|
||||
impl->dirty = FALSE;
|
||||
updated_surface = TRUE;
|
||||
_gdk_broadway_server_window_update (display->server,
|
||||
impl->id,
|
||||
impl->surface);
|
||||
@@ -110,16 +109,32 @@ dirty_flush_idle (gpointer data)
|
||||
|
||||
/* We sync here to ensure all references to the impl->surface memory
|
||||
is done, as we may later paint new data in them. */
|
||||
gdk_display_sync (GDK_DISPLAY (display));
|
||||
if (updated_surface)
|
||||
gdk_display_sync (GDK_DISPLAY (display));
|
||||
else
|
||||
gdk_display_flush (GDK_DISPLAY (display));
|
||||
}
|
||||
|
||||
static guint flush_id = 0;
|
||||
|
||||
static gboolean
|
||||
flush_idle (gpointer data)
|
||||
{
|
||||
flush_id = 0;
|
||||
|
||||
gdk_display_flush (gdk_display_get_default ());
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* We need to flush in an idle rather than AFTER_PAINT, as the clock
|
||||
is frozen during e.g. window resizes so the paint will not happen
|
||||
and the window resize request is never flushed. */
|
||||
static void
|
||||
queue_dirty_flush (GdkBroadwayDisplay *display)
|
||||
queue_flush (GdkWindow *window)
|
||||
{
|
||||
if (dirty_flush_id == 0)
|
||||
dirty_flush_id = gdk_threads_add_idle (dirty_flush_idle, NULL);
|
||||
if (flush_id == 0)
|
||||
flush_id = gdk_threads_add_idle (flush_idle, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -197,6 +212,25 @@ _gdk_broadway_screen_init_root_window (GdkScreen * screen)
|
||||
_gdk_window_update_size (broadway_screen->root_window);
|
||||
}
|
||||
|
||||
static void
|
||||
on_frame_clock_after_paint (GdkFrameClock *clock,
|
||||
GdkWindow *window)
|
||||
{
|
||||
update_dirty_windows_and_sync ();
|
||||
}
|
||||
|
||||
static void
|
||||
connect_frame_clock (GdkWindow *window)
|
||||
{
|
||||
if (WINDOW_IS_TOPLEVEL (window))
|
||||
{
|
||||
GdkFrameClock *frame_clock = gdk_window_get_frame_clock (window);
|
||||
|
||||
g_signal_connect (frame_clock, "after-paint",
|
||||
G_CALLBACK (on_frame_clock_after_paint), window);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_broadway_display_create_window_impl (GdkDisplay *display,
|
||||
GdkWindow *window,
|
||||
@@ -229,22 +263,21 @@ _gdk_broadway_display_create_window_impl (GdkDisplay *display,
|
||||
g_assert (GDK_WINDOW_TYPE (window->parent) == GDK_WINDOW_ROOT);
|
||||
|
||||
broadway_display->toplevels = g_list_prepend (broadway_display->toplevels, impl);
|
||||
|
||||
connect_frame_clock (window);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_broadway_window_resize_surface (GdkWindow *window)
|
||||
{
|
||||
GdkWindowImplBroadway *impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||
cairo_surface_t *old;
|
||||
|
||||
if (impl->surface)
|
||||
{
|
||||
old = impl->surface;
|
||||
cairo_surface_destroy (impl->surface);
|
||||
|
||||
impl->surface = _gdk_broadway_server_create_surface (gdk_window_get_width (impl->wrapper),
|
||||
gdk_window_get_height (impl->wrapper));
|
||||
|
||||
cairo_surface_destroy (old);
|
||||
}
|
||||
|
||||
if (impl->ref_surface)
|
||||
@@ -384,7 +417,7 @@ gdk_window_broadway_show (GdkWindow *window, gboolean already_mapped)
|
||||
|
||||
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (window));
|
||||
if (_gdk_broadway_server_window_show (broadway_display->server, impl->id))
|
||||
queue_dirty_flush (broadway_display);
|
||||
queue_flush (window);
|
||||
|
||||
}
|
||||
|
||||
@@ -404,8 +437,12 @@ gdk_window_broadway_hide (GdkWindow *window)
|
||||
_gdk_make_event (GDK_WINDOW (window), GDK_UNMAP, NULL, FALSE);
|
||||
|
||||
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (window));
|
||||
|
||||
_gdk_broadway_window_grab_check_unmap (window,
|
||||
_gdk_broadway_server_get_next_serial (broadway_display->server));
|
||||
|
||||
if (_gdk_broadway_server_window_hide (broadway_display->server, impl->id))
|
||||
queue_dirty_flush (broadway_display);
|
||||
queue_flush (window);
|
||||
|
||||
_gdk_window_clear_update_area (window);
|
||||
}
|
||||
@@ -460,7 +497,7 @@ gdk_window_broadway_move_resize (GdkWindow *window,
|
||||
with_move,
|
||||
x, y,
|
||||
window->width, window->height);
|
||||
queue_dirty_flush (broadway_display);
|
||||
queue_flush (window);
|
||||
if (size_changed)
|
||||
window->resize_count++;
|
||||
}
|
||||
@@ -545,6 +582,12 @@ gdk_broadway_window_set_geometry_hints (GdkWindow *window,
|
||||
const GdkGeometry *geometry,
|
||||
GdkWindowHints geom_mask)
|
||||
{
|
||||
GdkWindowImplBroadway *impl;
|
||||
|
||||
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||
|
||||
impl->geometry_hints = *geometry;
|
||||
impl->geometry_hints_mask = geom_mask;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -610,7 +653,7 @@ gdk_window_broadway_set_device_cursor (GdkWindow *window,
|
||||
{
|
||||
_gdk_broadway_cursor_update_theme (cursor);
|
||||
g_hash_table_replace (impl->device_cursor,
|
||||
device, gdk_cursor_ref (cursor));
|
||||
device, g_object_ref (cursor));
|
||||
}
|
||||
|
||||
if (!GDK_WINDOW_DESTROYED (window))
|
||||
@@ -992,6 +1035,8 @@ struct _MoveResizeData
|
||||
gint moveresize_orig_width;
|
||||
gint moveresize_orig_height;
|
||||
long moveresize_process_time;
|
||||
GdkWindowHints moveresize_geom_mask;
|
||||
GdkGeometry moveresize_geometry;
|
||||
BroadwayInputMsg *moveresize_pending_event;
|
||||
};
|
||||
|
||||
@@ -999,20 +1044,19 @@ static MoveResizeData *
|
||||
get_move_resize_data (GdkDisplay *display,
|
||||
gboolean create)
|
||||
{
|
||||
GdkBroadwayDisplay *broadway_display;
|
||||
MoveResizeData *mv_resize;
|
||||
static GQuark move_resize_quark = 0;
|
||||
|
||||
if (!move_resize_quark)
|
||||
move_resize_quark = g_quark_from_static_string ("gdk-window-moveresize");
|
||||
broadway_display = GDK_BROADWAY_DISPLAY (display);
|
||||
|
||||
mv_resize = g_object_get_qdata (G_OBJECT (display), move_resize_quark);
|
||||
mv_resize = broadway_display->move_resize_data;
|
||||
|
||||
if (!mv_resize && create)
|
||||
{
|
||||
mv_resize = g_new0 (MoveResizeData, 1);
|
||||
mv_resize->display = display;
|
||||
|
||||
g_object_set_qdata (G_OBJECT (display), move_resize_quark, mv_resize);
|
||||
broadway_display->move_resize_data = mv_resize;
|
||||
}
|
||||
|
||||
return mv_resize;
|
||||
@@ -1081,6 +1125,13 @@ update_pos (MoveResizeData *mv_resize,
|
||||
w = MAX (w, 1);
|
||||
h = MAX (h, 1);
|
||||
|
||||
if (mv_resize->moveresize_geom_mask)
|
||||
{
|
||||
gdk_window_constrain_size (&mv_resize->moveresize_geometry,
|
||||
mv_resize->moveresize_geom_mask,
|
||||
w, h, &w, &h);
|
||||
}
|
||||
|
||||
gdk_window_move_resize (mv_resize->moveresize_window, x, y, w, h);
|
||||
}
|
||||
else
|
||||
@@ -1135,7 +1186,7 @@ _gdk_broadway_moveresize_handle_event (GdkDisplay *display,
|
||||
|
||||
switch (event->base.type)
|
||||
{
|
||||
case 'm':
|
||||
case BROADWAY_EVENT_POINTER_MOVE:
|
||||
if (mv_resize->moveresize_window->resize_count > 0)
|
||||
{
|
||||
if (mv_resize->moveresize_pending_event)
|
||||
@@ -1163,7 +1214,7 @@ _gdk_broadway_moveresize_handle_event (GdkDisplay *display,
|
||||
finish_drag (mv_resize);
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
case BROADWAY_EVENT_BUTTON_RELEASE:
|
||||
update_pos (mv_resize,
|
||||
event->pointer.root_x,
|
||||
event->pointer.root_y);
|
||||
@@ -1243,6 +1294,71 @@ create_moveresize_window (MoveResizeData *mv_resize,
|
||||
mv_resize->moveresize_process_time = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
calculate_unmoving_origin (MoveResizeData *mv_resize)
|
||||
{
|
||||
GdkRectangle rect;
|
||||
gint width, height;
|
||||
|
||||
if (mv_resize->moveresize_geom_mask & GDK_HINT_WIN_GRAVITY &&
|
||||
mv_resize->moveresize_geometry.win_gravity == GDK_GRAVITY_STATIC)
|
||||
{
|
||||
gdk_window_get_origin (mv_resize->moveresize_window,
|
||||
&mv_resize->moveresize_orig_x,
|
||||
&mv_resize->moveresize_orig_y);
|
||||
}
|
||||
else
|
||||
{
|
||||
gdk_window_get_frame_extents (mv_resize->moveresize_window, &rect);
|
||||
gdk_window_get_geometry (mv_resize->moveresize_window,
|
||||
NULL, NULL, &width, &height);
|
||||
|
||||
switch (mv_resize->moveresize_geometry.win_gravity)
|
||||
{
|
||||
case GDK_GRAVITY_NORTH_WEST:
|
||||
mv_resize->moveresize_orig_x = rect.x;
|
||||
mv_resize->moveresize_orig_y = rect.y;
|
||||
break;
|
||||
case GDK_GRAVITY_NORTH:
|
||||
mv_resize->moveresize_orig_x = rect.x + rect.width / 2 - width / 2;
|
||||
mv_resize->moveresize_orig_y = rect.y;
|
||||
break;
|
||||
case GDK_GRAVITY_NORTH_EAST:
|
||||
mv_resize->moveresize_orig_x = rect.x + rect.width - width;
|
||||
mv_resize->moveresize_orig_y = rect.y;
|
||||
break;
|
||||
case GDK_GRAVITY_WEST:
|
||||
mv_resize->moveresize_orig_x = rect.x;
|
||||
mv_resize->moveresize_orig_y = rect.y + rect.height / 2 - height / 2;
|
||||
break;
|
||||
case GDK_GRAVITY_CENTER:
|
||||
mv_resize->moveresize_orig_x = rect.x + rect.width / 2 - width / 2;
|
||||
mv_resize->moveresize_orig_y = rect.y + rect.height / 2 - height / 2;
|
||||
break;
|
||||
case GDK_GRAVITY_EAST:
|
||||
mv_resize->moveresize_orig_x = rect.x + rect.width - width;
|
||||
mv_resize->moveresize_orig_y = rect.y + rect.height / 2 - height / 2;
|
||||
break;
|
||||
case GDK_GRAVITY_SOUTH_WEST:
|
||||
mv_resize->moveresize_orig_x = rect.x;
|
||||
mv_resize->moveresize_orig_y = rect.y + rect.height - height;
|
||||
break;
|
||||
case GDK_GRAVITY_SOUTH:
|
||||
mv_resize->moveresize_orig_x = rect.x + rect.width / 2 - width / 2;
|
||||
mv_resize->moveresize_orig_y = rect.y + rect.height - height;
|
||||
break;
|
||||
case GDK_GRAVITY_SOUTH_EAST:
|
||||
mv_resize->moveresize_orig_x = rect.x + rect.width - width;
|
||||
mv_resize->moveresize_orig_y = rect.y + rect.height - height;
|
||||
break;
|
||||
default:
|
||||
mv_resize->moveresize_orig_x = rect.x;
|
||||
mv_resize->moveresize_orig_y = rect.y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_window_begin_resize_drag (GdkWindow *window,
|
||||
GdkWindowEdge edge,
|
||||
@@ -1252,16 +1368,15 @@ gdk_broadway_window_begin_resize_drag (GdkWindow *window,
|
||||
gint root_y,
|
||||
guint32 timestamp)
|
||||
{
|
||||
GdkBroadwayDisplay *broadway_display;
|
||||
MoveResizeData *mv_resize;
|
||||
GdkWindowImplBroadway *impl;
|
||||
|
||||
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (window) ||
|
||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
||||
return;
|
||||
|
||||
/* We need a connection to be able to get mouse events, if not, punt */
|
||||
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (window));
|
||||
|
||||
mv_resize = get_move_resize_data (GDK_WINDOW_DISPLAY (window), TRUE);
|
||||
|
||||
mv_resize->is_resize = TRUE;
|
||||
@@ -1271,12 +1386,14 @@ gdk_broadway_window_begin_resize_drag (GdkWindow *window,
|
||||
mv_resize->moveresize_y = root_y;
|
||||
mv_resize->moveresize_window = g_object_ref (window);
|
||||
|
||||
gdk_window_get_origin (mv_resize->moveresize_window,
|
||||
&mv_resize->moveresize_orig_x,
|
||||
&mv_resize->moveresize_orig_y);
|
||||
mv_resize->moveresize_orig_width = gdk_window_get_width (window);
|
||||
mv_resize->moveresize_orig_height = gdk_window_get_height (window);
|
||||
|
||||
mv_resize->moveresize_geom_mask = impl->geometry_hints_mask;
|
||||
mv_resize->moveresize_geometry = impl->geometry_hints;
|
||||
|
||||
calculate_unmoving_origin (mv_resize);
|
||||
|
||||
create_moveresize_window (mv_resize, timestamp);
|
||||
}
|
||||
|
||||
@@ -1332,7 +1449,6 @@ gdk_broadway_window_process_updates_recurse (GdkWindow *window,
|
||||
|
||||
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||
impl->dirty = TRUE;
|
||||
queue_dirty_flush (GDK_BROADWAY_DISPLAY (gdk_window_get_display (window)));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1398,7 +1514,7 @@ _gdk_broadway_window_translate (GdkWindow *window,
|
||||
if (_gdk_broadway_server_window_translate (broadway_display->server,
|
||||
impl->id,
|
||||
area, dx, dy))
|
||||
queue_dirty_flush (broadway_display);
|
||||
queue_flush (window);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -64,6 +64,9 @@ struct _GdkWindowImplBroadway
|
||||
gint8 toplevel_window_type;
|
||||
gboolean dirty;
|
||||
gboolean last_synced;
|
||||
|
||||
GdkGeometry geometry_hints;
|
||||
GdkWindowHints geometry_hints_mask;
|
||||
};
|
||||
|
||||
struct _GdkWindowImplBroadwayClass
|
||||
|
||||
@@ -42,3 +42,15 @@ isinf (double x)
|
||||
return (!_finite (x) && !_isnan (x));
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Workaround for round() for non-GCC/non-C99 compilers */
|
||||
#ifndef HAVE_ROUND
|
||||
static inline double
|
||||
round (double x)
|
||||
{
|
||||
if (x >= 0)
|
||||
return floor (x + 0.5);
|
||||
else
|
||||
return ceil (x - 0.5);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -139,7 +139,8 @@ static const GDebugKey gdk_debug_keys[] = {
|
||||
{"xinerama", GDK_DEBUG_XINERAMA},
|
||||
{"draw", GDK_DEBUG_DRAW},
|
||||
{"eventloop", GDK_DEBUG_EVENTLOOP},
|
||||
{"frames", GDK_DEBUG_FRAMES}
|
||||
{"frames", GDK_DEBUG_FRAMES},
|
||||
{"settings", GDK_DEBUG_SETTINGS}
|
||||
};
|
||||
|
||||
static gboolean
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
#include <gdk/gdkdnd.h>
|
||||
#include <gdk/gdkenumtypes.h>
|
||||
#include <gdk/gdkevents.h>
|
||||
#include <gdk/gdkframeclock.h>
|
||||
#include <gdk/gdkframetimings.h>
|
||||
#include <gdk/gdkkeys.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include <gdk/gdkmain.h>
|
||||
|
||||
@@ -610,6 +610,7 @@ gdk_x11_window_set_theme_variant
|
||||
gdk_x11_window_set_hide_titlebar_when_maximized
|
||||
gdk_x11_window_set_user_time
|
||||
gdk_x11_window_set_utf8_property
|
||||
gdk_x11_window_set_frame_sync_enabled
|
||||
gdk_x11_xatom_to_atom
|
||||
gdk_x11_xatom_to_atom_for_display
|
||||
#endif
|
||||
|
||||
@@ -213,7 +213,7 @@ gdk_cairo_set_source_pixbuf (cairo_t *cr,
|
||||
format = CAIRO_FORMAT_ARGB32;
|
||||
|
||||
cairo_stride = cairo_format_stride_for_width (format, width);
|
||||
cairo_pixels = g_malloc (height * cairo_stride);
|
||||
cairo_pixels = g_malloc_n (height, cairo_stride);
|
||||
surface = cairo_image_surface_create_for_data ((unsigned char *)cairo_pixels,
|
||||
format,
|
||||
width, height, cairo_stride);
|
||||
@@ -250,7 +250,7 @@ gdk_cairo_set_source_pixbuf (cairo_t *cr,
|
||||
guchar *end = p + 4 * width;
|
||||
guint t1,t2,t3;
|
||||
|
||||
#define MULT(d,c,a,t) G_STMT_START { t = c * a + 0x7f; d = ((t >> 8) + t) >> 8; } G_STMT_END
|
||||
#define MULT(d,c,a,t) G_STMT_START { t = c * a + 0x80; d = ((t >> 8) + t) >> 8; } G_STMT_END
|
||||
|
||||
while (p < end)
|
||||
{
|
||||
|
||||
@@ -330,7 +330,7 @@ gdk_device_manager_list_devices (GdkDeviceManager *device_manager,
|
||||
* for this application. In X11, window managers may change this depending on the interaction
|
||||
* pattern under the presence of several pointers.
|
||||
*
|
||||
* You should use this function sheldomly, only in code that isn't triggered by a #GdkEvent
|
||||
* You should use this function seldomly, only in code that isn't triggered by a #GdkEvent
|
||||
* and there aren't other means to get a meaningful #GdkDevice to operate on.
|
||||
*
|
||||
* Returns: (transfer none): The client pointer. This memory is
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
#include "gdkinternals.h"
|
||||
|
||||
/**
|
||||
* SECTION:frameclock
|
||||
* SECTION:gdkframeclock
|
||||
* @Short_description: Frame clock syncs painting to a window or display
|
||||
* @Title: Frame clock
|
||||
*
|
||||
@@ -52,10 +52,10 @@
|
||||
* sense for the synchronization being implemented, the clock will
|
||||
* process a frame and emit signals for each phase that has been
|
||||
* requested. (See the signals of the #GdkFrameClock class for
|
||||
* documentation of the phases. GDK_FRAME_CLOCK_PHASE_UPDATE and the
|
||||
* ::update signal are most interesting for application writers, and
|
||||
* are used to update the animations, using the frame time given by
|
||||
* gdk_frame_clock_get_frame_time().
|
||||
* documentation of the phases. %GDK_FRAME_CLOCK_PHASE_UPDATE and the
|
||||
* #GdkFrameClock::update signal are most interesting for application
|
||||
* writers, and are used to update the animations, using the frame time
|
||||
* given by gdk_frame_clock_get_frame_time().
|
||||
*
|
||||
* The frame time is reported in microseconds and generally in the same
|
||||
* timescale as g_get_monotonic_time(), however, it is not the same
|
||||
@@ -65,8 +65,8 @@
|
||||
* are called at a "similar" time get the same value. This means that
|
||||
* if different animations are timed by looking at the difference in
|
||||
* time between an initial value from gdk_frame_clock_get_frame_time()
|
||||
* and the value inside the ::update signal of the clock, they will
|
||||
* stay exactly synchronized.
|
||||
* and the value inside the #GdkFrameClock::update signal of the clock,
|
||||
* they will stay exactly synchronized.
|
||||
*/
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE (GdkFrameClock, gdk_frame_clock, G_TYPE_OBJECT)
|
||||
@@ -174,7 +174,7 @@ gdk_frame_clock_class_init (GdkFrameClockClass *klass)
|
||||
* This signal is emitted as the second step of toolkit and
|
||||
* application processing of the frame. Any work to update
|
||||
* sizes and positions of application elements should be
|
||||
* performed. GTK normally handles this internally.
|
||||
* performed. GTK+ normally handles this internally.
|
||||
*/
|
||||
signals[LAYOUT] =
|
||||
g_signal_new (g_intern_static_string ("layout"),
|
||||
@@ -192,8 +192,8 @@ gdk_frame_clock_class_init (GdkFrameClockClass *klass)
|
||||
* This signal is emitted as the third step of toolkit and
|
||||
* application processing of the frame. The frame is
|
||||
* repainted. GDK normally handles this internally and
|
||||
* produce expose events, which are turned into GTK
|
||||
* GtkWidget::draw signals.
|
||||
* produces expose events, which are turned into GTK+
|
||||
* #GtkWidget::draw signals.
|
||||
*/
|
||||
signals[PAINT] =
|
||||
g_signal_new (g_intern_static_string ("paint"),
|
||||
@@ -280,11 +280,12 @@ gdk_frame_clock_get_frame_time (GdkFrameClock *frame_clock)
|
||||
/**
|
||||
* gdk_frame_clock_request_phase:
|
||||
* @frame_clock: a #GdkFrameClock
|
||||
* @phase: the phase that is requested
|
||||
*
|
||||
* Asks the frame clock to run a particular phase. The signal
|
||||
* corresponding the requested phase will be emitted the next
|
||||
* time the frame clock processes. Multiple calls to
|
||||
* gdk_frame_clock_request_phase() will be combined togethe
|
||||
* gdk_frame_clock_request_phase() will be combined together
|
||||
* and only one frame processed. If you are displaying animated
|
||||
* content and want to continually request the
|
||||
* %GDK_FRAME_CLOCK_PHASE_UPDATE phase for a period of time,
|
||||
|
||||
@@ -58,7 +58,7 @@ typedef struct _GdkFrameClockClass GdkFrameClockClass;
|
||||
* @GDK_FRAME_CLOCK_PHASE_AFTER_PAINT: corresponds to GdkFrameClock::after-paint. Should not be handled by applications.
|
||||
*
|
||||
* #GdkFrameClockPhase is used to represent the different paint clock
|
||||
* phases that can be requested. The element of the enumeration
|
||||
* phases that can be requested. The elements of the enumeration
|
||||
* correspond to the signals of #GdkPaintClock.
|
||||
*
|
||||
* Since: 3.8
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#define FRAME_INTERVAL 16667 // microseconds
|
||||
#define FRAME_INTERVAL 16667 /* microseconds */
|
||||
|
||||
struct _GdkFrameClockIdlePrivate
|
||||
{
|
||||
@@ -247,7 +247,8 @@ maybe_start_idle (GdkFrameClockIdle *clock_idle)
|
||||
(GDestroyNotify) g_object_unref);
|
||||
}
|
||||
|
||||
if (priv->paint_idle_id == 0 && RUN_PAINT_IDLE (priv))
|
||||
if (!priv->in_paint_idle &&
|
||||
priv->paint_idle_id == 0 && RUN_PAINT_IDLE (priv))
|
||||
{
|
||||
priv->paint_idle_id = gdk_threads_add_timeout_full (GDK_PRIORITY_REDRAW,
|
||||
min_interval,
|
||||
@@ -364,11 +365,13 @@ gdk_frame_clock_paint_idle (void *data)
|
||||
/* We always emit ::before-paint and ::after-paint if
|
||||
* any of the intermediate phases are requested and
|
||||
* they don't get repeated if you freeze/thaw while
|
||||
* in them. */
|
||||
* in them.
|
||||
*/
|
||||
priv->requested &= ~GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT;
|
||||
g_signal_emit_by_name (G_OBJECT (clock), "before-paint");
|
||||
priv->phase = GDK_FRAME_CLOCK_PHASE_UPDATE;
|
||||
}
|
||||
/* fallthrough */
|
||||
case GDK_FRAME_CLOCK_PHASE_UPDATE:
|
||||
if (priv->freeze_count == 0)
|
||||
{
|
||||
@@ -379,6 +382,7 @@ gdk_frame_clock_paint_idle (void *data)
|
||||
g_signal_emit_by_name (G_OBJECT (clock), "update");
|
||||
}
|
||||
}
|
||||
/* fallthrough */
|
||||
case GDK_FRAME_CLOCK_PHASE_LAYOUT:
|
||||
if (priv->freeze_count == 0)
|
||||
{
|
||||
@@ -398,6 +402,7 @@ gdk_frame_clock_paint_idle (void *data)
|
||||
g_signal_emit_by_name (G_OBJECT (clock), "layout");
|
||||
}
|
||||
}
|
||||
/* fallthrough */
|
||||
case GDK_FRAME_CLOCK_PHASE_PAINT:
|
||||
if (priv->freeze_count == 0)
|
||||
{
|
||||
@@ -417,6 +422,7 @@ gdk_frame_clock_paint_idle (void *data)
|
||||
g_signal_emit_by_name (G_OBJECT (clock), "paint");
|
||||
}
|
||||
}
|
||||
/* fallthrough */
|
||||
case GDK_FRAME_CLOCK_PHASE_AFTER_PAINT:
|
||||
if (priv->freeze_count == 0)
|
||||
{
|
||||
@@ -431,6 +437,7 @@ gdk_frame_clock_paint_idle (void *data)
|
||||
timings->frame_end_time = g_get_monotonic_time ();
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
}
|
||||
/* fallthrough */
|
||||
case GDK_FRAME_CLOCK_PHASE_RESUME_EVENTS:
|
||||
;
|
||||
}
|
||||
@@ -439,7 +446,7 @@ gdk_frame_clock_paint_idle (void *data)
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if ((_gdk_debug_flags & GDK_DEBUG_FRAMES) != 0)
|
||||
{
|
||||
if (timings->complete)
|
||||
if (timings && timings->complete)
|
||||
_gdk_frame_clock_debug_print_timings (clock, timings);
|
||||
}
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
@@ -546,7 +553,8 @@ gdk_frame_clock_idle_thaw (GdkFrameClock *clock)
|
||||
maybe_start_idle (clock_idle);
|
||||
/* If nothing is requested so we didn't start an idle, we need
|
||||
* to skip to the end of the state chain, since the idle won't
|
||||
* run and do it for us. */
|
||||
* run and do it for us.
|
||||
*/
|
||||
if (priv->paint_idle_id == 0)
|
||||
priv->phase = GDK_FRAME_CLOCK_PHASE_NONE;
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include "gdkframeclockprivate.h"
|
||||
|
||||
/**
|
||||
* SECTION:frametimings
|
||||
* SECTION:gdkframetimings
|
||||
* @Short_description: Object holding timing information for a single frame
|
||||
* @Title: Frame timings
|
||||
*
|
||||
@@ -106,7 +106,7 @@ gdk_frame_timings_get_frame_counter (GdkFrameTimings *timings)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_frame_timings_complete:
|
||||
* gdk_frame_timings_get_complete:
|
||||
* @timings: a #GdkFrameTimings
|
||||
*
|
||||
* The timing information in a #GdkFrameTimings is filled in
|
||||
|
||||
@@ -83,7 +83,8 @@ typedef enum {
|
||||
GDK_DEBUG_XINERAMA = 1 << 8,
|
||||
GDK_DEBUG_DRAW = 1 << 9,
|
||||
GDK_DEBUG_EVENTLOOP = 1 << 10,
|
||||
GDK_DEBUG_FRAMES = 1 << 11
|
||||
GDK_DEBUG_FRAMES = 1 << 11,
|
||||
GDK_DEBUG_SETTINGS = 1 << 12
|
||||
} GdkDebugFlag;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@@ -42,6 +42,9 @@
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/* for the use of round() */
|
||||
#include "fallback-c89.c"
|
||||
|
||||
#undef DEBUG_WINDOW_PRINTING
|
||||
|
||||
|
||||
@@ -271,9 +274,10 @@ print_region (cairo_region_t *region)
|
||||
}
|
||||
else
|
||||
{
|
||||
int i;
|
||||
cairo_region_get_extents (region, &r);
|
||||
g_string_append_printf (s, "extent: %dx%d @%d,%d, details: ", r.width, r.height, r.x, r.y);
|
||||
for (int i = 0; i < num; i++)
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
g_string_append_printf (s, "[%dx%d @%d,%d]", r.width, r.height, r.x, r.y);
|
||||
if (i != num -1)
|
||||
@@ -936,19 +940,26 @@ static void
|
||||
apply_clip_as_shape (GdkWindow *window)
|
||||
{
|
||||
GdkRectangle r;
|
||||
cairo_region_t *region;
|
||||
|
||||
r.x = r.y = 0;
|
||||
r.width = window->width;
|
||||
r.height = window->height;
|
||||
|
||||
region = cairo_region_copy (window->clip_region);
|
||||
if (window->layered_region)
|
||||
cairo_region_subtract (region, window->layered_region);
|
||||
|
||||
/* We only apply the clip region if would differ
|
||||
from the actual clip region implied by the size
|
||||
of the window. This is to avoid unneccessarily
|
||||
adding meaningless shapes to all native subwindows */
|
||||
if (!region_rect_equal (window->clip_region, &r))
|
||||
apply_shape (window, window->clip_region);
|
||||
if (!region_rect_equal (region, &r))
|
||||
apply_shape (window, region);
|
||||
else
|
||||
apply_shape (window, NULL);
|
||||
|
||||
cairo_region_destroy (region);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -9991,6 +10002,13 @@ gdk_window_print (GdkWindow *window,
|
||||
g_print (" abs[%d,%d]",
|
||||
window->abs_x, window->abs_y);
|
||||
|
||||
if (window->alpha != 255)
|
||||
g_print (" alpha[%d]",
|
||||
window->alpha);
|
||||
|
||||
if (window->has_alpha_background)
|
||||
g_print (" alpha_bg");
|
||||
|
||||
s = print_region (window->clip_region);
|
||||
g_print (" clipbox[%s]", s);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/* GdkQuartzView.m
|
||||
*
|
||||
* Copyright (C) 2005-2007 Imendio AB
|
||||
* Copyright (C) 2011 Hiroyuki Yamamoto
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@@ -23,18 +24,541 @@
|
||||
|
||||
@implementation GdkQuartzView
|
||||
|
||||
-(id)initWithFrame: (NSRect)frameRect
|
||||
{
|
||||
if ((self = [super initWithFrame: frameRect]))
|
||||
{
|
||||
markedRange = NSMakeRange (NSNotFound, 0);
|
||||
selectedRange = NSMakeRange (NSNotFound, 0);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
-(BOOL)acceptsFirstResponder
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("acceptsFirstResponder\n"));
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(BOOL)becomeFirstResponder
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("becomeFirstResponder\n"));
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(BOOL)resignFirstResponder
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("resignFirstResponder\n"));
|
||||
return YES;
|
||||
}
|
||||
|
||||
-(void) keyDown: (NSEvent *) theEvent
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("keyDown\n"));
|
||||
[self interpretKeyEvents: [NSArray arrayWithObject: theEvent]];
|
||||
}
|
||||
|
||||
-(void)flagsChanged: (NSEvent *) theEvent
|
||||
{
|
||||
}
|
||||
|
||||
-(NSUInteger)characterIndexForPoint: (NSPoint)aPoint
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("characterIndexForPoint\n"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
-(NSRect)firstRectForCharacterRange: (NSRange)aRange actualRange: (NSRangePointer)actualRange
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("firstRectForCharacterRange\n"));
|
||||
gint ns_x, ns_y;
|
||||
GdkRectangle *rect;
|
||||
|
||||
rect = g_object_get_data (G_OBJECT (gdk_window), GIC_CURSOR_RECT);
|
||||
if (rect)
|
||||
{
|
||||
_gdk_quartz_window_gdk_xy_to_xy (rect->x, rect->y + rect->height,
|
||||
&ns_x, &ns_y);
|
||||
|
||||
return NSMakeRect (ns_x, ns_y, rect->width, rect->height);
|
||||
}
|
||||
else
|
||||
{
|
||||
return NSMakeRect (0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
-(NSArray *)validAttributesForMarkedText
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("validAttributesForMarkedText\n"));
|
||||
return [NSArray arrayWithObjects: NSUnderlineStyleAttributeName, nil];
|
||||
}
|
||||
|
||||
-(NSAttributedString *)attributedSubstringForProposedRange: (NSRange)aRange actualRange: (NSRangePointer)actualRange
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("attributedSubstringForProposedRange\n"));
|
||||
return nil;
|
||||
}
|
||||
|
||||
-(BOOL)hasMarkedText
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("hasMarkedText\n"));
|
||||
return markedRange.location != NSNotFound && markedRange.length != 0;
|
||||
}
|
||||
|
||||
-(NSRange)markedRange
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("markedRange\n"));
|
||||
return markedRange;
|
||||
}
|
||||
|
||||
-(NSRange)selectedRange
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("selectedRange\n"));
|
||||
return selectedRange;
|
||||
}
|
||||
|
||||
-(void)unmarkText
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("unmarkText\n"));
|
||||
gchar *prev_str;
|
||||
markedRange = selectedRange = NSMakeRange (NSNotFound, 0);
|
||||
|
||||
prev_str = g_object_get_data (G_OBJECT (gdk_window), TIC_MARKED_TEXT);
|
||||
if (prev_str)
|
||||
g_free (prev_str);
|
||||
g_object_set_data (G_OBJECT (gdk_window), TIC_MARKED_TEXT, NULL);
|
||||
}
|
||||
|
||||
-(void)setMarkedText: (id)aString selectedRange: (NSRange)newSelection replacementRange: (NSRange)replacementRange
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("setMarkedText\n"));
|
||||
const char *str;
|
||||
gchar *prev_str;
|
||||
|
||||
if (replacementRange.location == NSNotFound)
|
||||
{
|
||||
markedRange = NSMakeRange (newSelection.location, [aString length]);
|
||||
selectedRange = NSMakeRange (newSelection.location, newSelection.length);
|
||||
}
|
||||
else {
|
||||
markedRange = NSMakeRange (replacementRange.location, [aString length]);
|
||||
selectedRange = NSMakeRange (replacementRange.location + newSelection.location, newSelection.length);
|
||||
}
|
||||
|
||||
if ([aString isKindOfClass: [NSAttributedString class]])
|
||||
{
|
||||
str = [[aString string] UTF8String];
|
||||
}
|
||||
else {
|
||||
str = [aString UTF8String];
|
||||
}
|
||||
|
||||
prev_str = g_object_get_data (G_OBJECT (gdk_window), TIC_MARKED_TEXT);
|
||||
if (prev_str)
|
||||
g_free (prev_str);
|
||||
g_object_set_data (G_OBJECT (gdk_window), TIC_MARKED_TEXT, g_strdup (str));
|
||||
g_object_set_data (G_OBJECT (gdk_window), TIC_SELECTED_POS,
|
||||
GUINT_TO_POINTER (selectedRange.location));
|
||||
g_object_set_data (G_OBJECT (gdk_window), TIC_SELECTED_LEN,
|
||||
GUINT_TO_POINTER (selectedRange.length));
|
||||
|
||||
GDK_NOTE (EVENTS, g_print ("setMarkedText: set %s (%p, nsview %p): %s\n",
|
||||
TIC_MARKED_TEXT, gdk_window, self,
|
||||
str ? str : "(empty)"));
|
||||
|
||||
/* handle text input changes by mouse events */
|
||||
if (!GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (gdk_window),
|
||||
TIC_IN_KEY_DOWN)))
|
||||
{
|
||||
_gdk_quartz_synthesize_null_key_event(gdk_window);
|
||||
}
|
||||
}
|
||||
|
||||
-(void)doCommandBySelector: (SEL)aSelector
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("doCommandBySelector\n"));
|
||||
if ([self respondsToSelector: aSelector])
|
||||
[self performSelector: aSelector];
|
||||
}
|
||||
|
||||
-(void)insertText: (id)aString replacementRange: (NSRange)replacementRange
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("insertText\n"));
|
||||
const char *str;
|
||||
NSString *string;
|
||||
gchar *prev_str;
|
||||
|
||||
if ([self hasMarkedText])
|
||||
[self unmarkText];
|
||||
|
||||
if ([aString isKindOfClass: [NSAttributedString class]])
|
||||
string = [aString string];
|
||||
else
|
||||
string = aString;
|
||||
|
||||
NSCharacterSet *ctrlChars = [NSCharacterSet controlCharacterSet];
|
||||
NSCharacterSet *wsnlChars = [NSCharacterSet whitespaceAndNewlineCharacterSet];
|
||||
if ([string rangeOfCharacterFromSet:ctrlChars].length &&
|
||||
[string rangeOfCharacterFromSet:wsnlChars].length == 0)
|
||||
{
|
||||
/* discard invalid text input with Chinese input methods */
|
||||
str = "";
|
||||
[self unmarkText];
|
||||
NSInputManager *currentInputManager = [NSInputManager currentInputManager];
|
||||
[currentInputManager markedTextAbandoned:self];
|
||||
}
|
||||
else
|
||||
{
|
||||
str = [string UTF8String];
|
||||
}
|
||||
|
||||
prev_str = g_object_get_data (G_OBJECT (gdk_window), TIC_INSERT_TEXT);
|
||||
if (prev_str)
|
||||
g_free (prev_str);
|
||||
g_object_set_data (G_OBJECT (gdk_window), TIC_INSERT_TEXT, g_strdup (str));
|
||||
GDK_NOTE (EVENTS, g_print ("insertText: set %s (%p, nsview %p): %s\n",
|
||||
TIC_INSERT_TEXT, gdk_window, self,
|
||||
str ? str : "(empty)"));
|
||||
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_FILTERED));
|
||||
|
||||
/* handle text input changes by mouse events */
|
||||
if (!GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (gdk_window),
|
||||
TIC_IN_KEY_DOWN)))
|
||||
{
|
||||
_gdk_quartz_synthesize_null_key_event(gdk_window);
|
||||
}
|
||||
}
|
||||
|
||||
-(void)deleteBackward: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("deleteBackward\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)deleteForward: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("deleteForward\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)deleteToBeginningOfLine: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("deleteToBeginningOfLine\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)deleteToEndOfLine: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("deleteToEndOfLine\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)deleteWordBackward: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("deleteWordBackward\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)deleteWordForward: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("deleteWordForward\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)insertBacktab: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("insertBacktab\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)insertNewline: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("insertNewline\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY, GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)insertTab: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("insertTab\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveBackward: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveBackward\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveBackwardAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveBackwardAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveDown: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveDown\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveDownAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveDownAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveForward: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveForward\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveForwardAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveForwardAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveLeft: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveLeft\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveLeftAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveLeftAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveRight: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveRight\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveRightAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveRightAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveToBeginningOfDocument: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveToBeginningOfDocument\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveToBeginningOfDocumentAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveToBeginningOfDocumentAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveToBeginningOfLine: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveToBeginningOfLine\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveToBeginningOfLineAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveToBeginningOfLineAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveToEndOfDocument: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveToEndOfDocument\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveToEndOfDocumentAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveToEndOfDocumentAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveToEndOfLine: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveToEndOfLine\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveToEndOfLineAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveToEndOfLineAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveUp: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveUp\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveUpAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveUpAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveWordBackward: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveWordBackward\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveWordBackwardAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveWordBackwardAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveWordForward: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveWordForward\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveWordForwardAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveWordForwardAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveWordLeft: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveWordLeft\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveWordLeftAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveWordLeftAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveWordRight: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveWordRight\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)moveWordRightAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("moveWordRightAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)pageDown: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("pageDown\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)pageDownAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("pageDownAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)pageUp: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("pageUp\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)pageUpAndModifySelection: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("pageUpAndModifySelection\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)selectAll: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("selectAll\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)selectLine: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("selectLine\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)selectWord: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("selectWord\n"));
|
||||
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
|
||||
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
|
||||
}
|
||||
|
||||
-(void)noop: (id)sender
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print ("noop\n"));
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------- */
|
||||
|
||||
-(void)dealloc
|
||||
{
|
||||
if (trackingRect)
|
||||
{
|
||||
[self removeTrackingRect:trackingRect];
|
||||
[self removeTrackingRect: trackingRect];
|
||||
trackingRect = 0;
|
||||
}
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
-(void)setGdkWindow:(GdkWindow *)window
|
||||
-(void)setGdkWindow: (GdkWindow *)window
|
||||
{
|
||||
gdk_window = window;
|
||||
}
|
||||
@@ -60,10 +584,11 @@
|
||||
return YES;
|
||||
|
||||
/* A view is opaque if its GdkWindow doesn't have the RGBA visual */
|
||||
return gdk_window_get_visual (gdk_window) != gdk_screen_get_rgba_visual (_gdk_screen);
|
||||
return gdk_window_get_visual (gdk_window) !=
|
||||
gdk_screen_get_rgba_visual (_gdk_screen);
|
||||
}
|
||||
|
||||
-(void)drawRect:(NSRect)rect
|
||||
-(void)drawRect: (NSRect)rect
|
||||
{
|
||||
GdkRectangle gdk_rect;
|
||||
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (gdk_window->impl);
|
||||
@@ -75,7 +600,7 @@
|
||||
if (GDK_WINDOW_DESTROYED (gdk_window))
|
||||
return;
|
||||
|
||||
if (!(gdk_window->event_mask & GDK_EXPOSURE_MASK))
|
||||
if (! (gdk_window->event_mask & GDK_EXPOSURE_MASK))
|
||||
return;
|
||||
|
||||
if (NSEqualRects (rect, NSZeroRect))
|
||||
@@ -93,7 +618,7 @@
|
||||
[NSGraphicsContext saveGraphicsState];
|
||||
|
||||
[[NSColor windowBackgroundColor] setFill];
|
||||
[NSBezierPath fillRect:rect];
|
||||
[NSBezierPath fillRect: rect];
|
||||
|
||||
[NSGraphicsContext restoreGraphicsState];
|
||||
|
||||
@@ -107,9 +632,9 @@
|
||||
impl->needs_display_region = NULL;
|
||||
}
|
||||
|
||||
[self getRectsBeingDrawn:&drawn_rects count:&count];
|
||||
[self getRectsBeingDrawn: &drawn_rects count: &count];
|
||||
region = cairo_region_create ();
|
||||
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
gdk_rect.x = drawn_rects[i].origin.x;
|
||||
@@ -133,7 +658,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setNeedsInvalidateShadow:(BOOL)invalidate
|
||||
-(void)setNeedsInvalidateShadow: (BOOL)invalidate
|
||||
{
|
||||
needsInvalidateShadow = invalidate;
|
||||
}
|
||||
@@ -151,7 +676,7 @@
|
||||
|
||||
if (trackingRect)
|
||||
{
|
||||
[self removeTrackingRect:trackingRect];
|
||||
[self removeTrackingRect: trackingRect];
|
||||
trackingRect = 0;
|
||||
}
|
||||
|
||||
@@ -163,32 +688,32 @@
|
||||
*/
|
||||
|
||||
rect = [self bounds];
|
||||
trackingRect = [self addTrackingRect:rect
|
||||
owner:self
|
||||
userData:nil
|
||||
assumeInside:NO];
|
||||
trackingRect = [self addTrackingRect: rect
|
||||
owner: self
|
||||
userData: nil
|
||||
assumeInside: NO];
|
||||
}
|
||||
|
||||
-(void)viewDidMoveToWindow
|
||||
{
|
||||
if (![self window]) /* We are destroyed already */
|
||||
return;
|
||||
return;
|
||||
|
||||
[self updateTrackingRect];
|
||||
}
|
||||
|
||||
-(void)viewWillMoveToWindow:(NSWindow *)newWindow
|
||||
-(void)viewWillMoveToWindow: (NSWindow *)newWindow
|
||||
{
|
||||
if (newWindow == nil && trackingRect)
|
||||
{
|
||||
[self removeTrackingRect:trackingRect];
|
||||
[self removeTrackingRect: trackingRect];
|
||||
trackingRect = 0;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)setFrame:(NSRect)frame
|
||||
-(void)setFrame: (NSRect)frame
|
||||
{
|
||||
[super setFrame:frame];
|
||||
[super setFrame: frame];
|
||||
|
||||
if ([self window])
|
||||
[self updateTrackingRect];
|
||||
|
||||
@@ -17,17 +17,33 @@
|
||||
*/
|
||||
|
||||
#import <AppKit/AppKit.h>
|
||||
#include "gdkwindow.h"
|
||||
#include "gdk/gdk.h"
|
||||
|
||||
@interface GdkQuartzView : NSView {
|
||||
/* Text Input Client */
|
||||
#define TIC_MARKED_TEXT "tic-marked-text"
|
||||
#define TIC_SELECTED_POS "tic-selected-pos"
|
||||
#define TIC_SELECTED_LEN "tic-selected-len"
|
||||
#define TIC_INSERT_TEXT "tic-insert-text"
|
||||
#define TIC_IN_KEY_DOWN "tic-in-key-down"
|
||||
|
||||
/* GtkIMContext */
|
||||
#define GIC_CURSOR_RECT "gic-cursor-rect"
|
||||
#define GIC_FILTER_KEY "gic-filter-key"
|
||||
#define GIC_FILTER_PASSTHRU 0
|
||||
#define GIC_FILTER_FILTERED 1
|
||||
|
||||
@interface GdkQuartzView : NSView <NSTextInputClient>
|
||||
{
|
||||
GdkWindow *gdk_window;
|
||||
NSTrackingRectTag trackingRect;
|
||||
BOOL needsInvalidateShadow;
|
||||
NSRange markedRange;
|
||||
NSRange selectedRange;
|
||||
}
|
||||
|
||||
-(void)setGdkWindow:(GdkWindow *)window;
|
||||
-(GdkWindow *)gdkWindow;
|
||||
-(NSTrackingRectTag)trackingRect;
|
||||
-(void)setNeedsInvalidateShadow:(BOOL)invalidate;
|
||||
- (void)setGdkWindow: (GdkWindow *)window;
|
||||
- (GdkWindow *)gdkWindow;
|
||||
- (NSTrackingRectTag)trackingRect;
|
||||
- (void)setNeedsInvalidateShadow: (BOOL)invalidate;
|
||||
|
||||
@end
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "gdkprivate-quartz.h"
|
||||
#include <gdk/gdkdisplayprivate.h>
|
||||
|
||||
/*
|
||||
* This file implementations integration between the GLib main loop and
|
||||
@@ -617,11 +618,39 @@ gdk_event_prepare (GSource *source,
|
||||
gboolean retval;
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
|
||||
/* The prepare stage is the stage before the main loop starts polling
|
||||
* and dispatching events. The autorelease poll is drained here for
|
||||
* the preceding main loop iteration or, in case of the first iteration,
|
||||
* for the operations carried out between event loop initialization and
|
||||
* this first iteration.
|
||||
*
|
||||
* The autorelease poll must only be drained when the following conditions
|
||||
* apply:
|
||||
* - We are at the base CFRunLoop level (indicated by current_loop_level),
|
||||
* - We are at the base g_main_loop level (indicated by
|
||||
* g_main_depth())
|
||||
* - We are at the base poll_func level (indicated by getting events).
|
||||
*
|
||||
* Messing with the autorelease pool at any level of nesting can cause access
|
||||
* to deallocated memory because autorelease_pool is static and releasing a
|
||||
* pool will cause all pools allocated inside of it to be released as well.
|
||||
*/
|
||||
if (current_loop_level == 0 && g_main_depth() == 0 && getting_events == 0)
|
||||
{
|
||||
if (autorelease_pool)
|
||||
[autorelease_pool drain];
|
||||
|
||||
autorelease_pool = [[NSAutoreleasePool alloc] init];
|
||||
}
|
||||
|
||||
*timeout = -1;
|
||||
|
||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||
_gdk_quartz_event_loop_check_pending ());
|
||||
if (_gdk_display->event_pause_count > 0)
|
||||
retval = FALSE;
|
||||
else
|
||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||
_gdk_quartz_event_loop_check_pending ());
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
@@ -635,8 +664,11 @@ gdk_event_check (GSource *source)
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||
_gdk_quartz_event_loop_check_pending ());
|
||||
if (_gdk_display->event_pause_count > 0)
|
||||
retval = FALSE;
|
||||
else
|
||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||
_gdk_quartz_event_loop_check_pending ());
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
@@ -652,21 +684,6 @@ gdk_event_dispatch (GSource *source,
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
/* Refresh the autorelease pool if we're at the base CFRunLoop level
|
||||
* (indicated by current_loop_level) and the base g_main_loop level
|
||||
* (indicated by g_main_depth()). Messing with the autorelease pool at
|
||||
* any level of nesting can cause access to deallocated memory because
|
||||
* autorelease_pool is static and releasing a pool will cause all pools
|
||||
* allocated inside of it to be released as well.
|
||||
*/
|
||||
if (current_loop_level == 0 && g_main_depth() == 0)
|
||||
{
|
||||
if (autorelease_pool)
|
||||
[autorelease_pool drain];
|
||||
|
||||
autorelease_pool = [[NSAutoreleasePool alloc] init];
|
||||
}
|
||||
|
||||
_gdk_quartz_display_queue_events (_gdk_display);
|
||||
|
||||
event = _gdk_event_unqueue (_gdk_display);
|
||||
|
||||
@@ -1156,6 +1156,24 @@ synthesize_crossing_event (GdkWindow *window,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_quartz_synthesize_null_key_event (GdkWindow *window)
|
||||
{
|
||||
GdkEvent *event;
|
||||
GdkQuartzDeviceManagerCore *device_manager;
|
||||
|
||||
event = gdk_event_new (GDK_KEY_PRESS);
|
||||
event->any.type = GDK_KEY_PRESS;
|
||||
event->key.window = window;
|
||||
event->key.state = 0;
|
||||
event->key.hardware_keycode = 0;
|
||||
event->key.group = 0;
|
||||
event->key.keyval = GDK_KEY_VoidSymbol;
|
||||
device_manager = GDK_QUARTZ_DEVICE_MANAGER_CORE (_gdk_display->device_manager);
|
||||
gdk_event_set_device (event, device_manager->core_keyboard);
|
||||
append_event(event, FALSE);
|
||||
}
|
||||
|
||||
GdkModifierType
|
||||
_gdk_quartz_events_get_current_keyboard_modifiers (void)
|
||||
{
|
||||
@@ -1494,8 +1512,11 @@ gdk_event_translate (GdkEvent *event,
|
||||
}
|
||||
break;
|
||||
|
||||
case NSMouseEntered:
|
||||
case NSMouseExited:
|
||||
if (WINDOW_IS_TOPLEVEL (window))
|
||||
[[NSCursor arrowCursor] set];
|
||||
/* fall through */
|
||||
case NSMouseEntered:
|
||||
return_val = synthesize_crossing_event (window, event, nsevent, x, y, x_root, y_root);
|
||||
break;
|
||||
|
||||
|
||||
@@ -82,17 +82,6 @@ _gdk_quartz_display_get_keymap (GdkDisplay *display)
|
||||
return default_keymap;
|
||||
}
|
||||
|
||||
/* Note: we could check only if building against the 10.5 SDK instead, but
|
||||
* that would make non-xml layouts not work in 32-bit which would be a quite
|
||||
* bad regression. This way, old unsupported layouts will just not work in
|
||||
* 64-bit.
|
||||
*/
|
||||
#ifdef __LP64__
|
||||
static TISInputSourceRef current_layout = NULL;
|
||||
#else
|
||||
static KeyboardLayoutRef current_layout = NULL;
|
||||
#endif
|
||||
|
||||
/* This is a table of all keyvals. Each keycode gets KEYVALS_PER_KEYCODE entries.
|
||||
* TThere is 1 keyval per modifier (Nothing, Shift, Alt, Shift+Alt);
|
||||
*/
|
||||
@@ -267,10 +256,17 @@ const static struct {
|
||||
};
|
||||
|
||||
static void
|
||||
maybe_update_keymap (void)
|
||||
update_keymap (void)
|
||||
{
|
||||
const void *chr_data = NULL;
|
||||
guint *p;
|
||||
int i;
|
||||
|
||||
/* Note: we could check only if building against the 10.5 SDK instead, but
|
||||
* that would make non-xml layouts not work in 32-bit which would be a quite
|
||||
* bad regression. This way, old unsupported layouts will just not work in
|
||||
* 64-bit.
|
||||
*/
|
||||
#ifdef __LP64__
|
||||
TISInputSourceRef new_layout = TISCopyCurrentKeyboardLayoutInputSource ();
|
||||
CFDataRef layout_data_ref;
|
||||
@@ -282,228 +278,221 @@ maybe_update_keymap (void)
|
||||
KLGetCurrentKeyboardLayout (&new_layout);
|
||||
#endif
|
||||
|
||||
if (new_layout != current_layout)
|
||||
{
|
||||
guint *p;
|
||||
int i;
|
||||
|
||||
g_free (keyval_array);
|
||||
keyval_array = g_new0 (guint, NUM_KEYCODES * KEYVALS_PER_KEYCODE);
|
||||
g_free (keyval_array);
|
||||
keyval_array = g_new0 (guint, NUM_KEYCODES * KEYVALS_PER_KEYCODE);
|
||||
|
||||
#ifdef __LP64__
|
||||
layout_data_ref = (CFDataRef) TISGetInputSourceProperty
|
||||
(new_layout, kTISPropertyUnicodeKeyLayoutData);
|
||||
layout_data_ref = (CFDataRef) TISGetInputSourceProperty
|
||||
(new_layout, kTISPropertyUnicodeKeyLayoutData);
|
||||
|
||||
if (layout_data_ref)
|
||||
chr_data = CFDataGetBytePtr (layout_data_ref);
|
||||
if (layout_data_ref)
|
||||
chr_data = CFDataGetBytePtr (layout_data_ref);
|
||||
|
||||
if (chr_data == NULL)
|
||||
{
|
||||
g_error ("cannot get keyboard layout data");
|
||||
return;
|
||||
}
|
||||
#else
|
||||
/* Get the layout kind */
|
||||
KLGetKeyboardLayoutProperty (new_layout, kKLKind, (const void **)&layout_kind);
|
||||
|
||||
/* 8-bit-only keyabord layout */
|
||||
if (layout_kind == kKLKCHRKind)
|
||||
{
|
||||
/* Get chr data */
|
||||
KLGetKeyboardLayoutProperty (new_layout, kKLKCHRData, (const void **)&chr_data);
|
||||
|
||||
for (i = 0; i < NUM_KEYCODES; i++)
|
||||
{
|
||||
int j;
|
||||
UInt32 modifiers[] = {0, shiftKey, optionKey, shiftKey | optionKey};
|
||||
|
||||
p = keyval_array + i * KEYVALS_PER_KEYCODE;
|
||||
|
||||
for (j = 0; j < KEYVALS_PER_KEYCODE; j++)
|
||||
{
|
||||
UInt32 c, state = 0;
|
||||
UInt16 key_code;
|
||||
UniChar uc;
|
||||
|
||||
key_code = modifiers[j] | i;
|
||||
c = KeyTranslate (chr_data, key_code, &state);
|
||||
|
||||
if (state != 0)
|
||||
{
|
||||
UInt32 state2 = 0;
|
||||
c = KeyTranslate (chr_data, key_code | 128, &state2);
|
||||
}
|
||||
|
||||
if (c != 0 && c != 0x10)
|
||||
{
|
||||
int k;
|
||||
gboolean found = FALSE;
|
||||
|
||||
/* FIXME: some keyboard layouts (e.g. Russian) use
|
||||
* a different 8-bit character set. We should
|
||||
* check for this. Not a serious problem, because
|
||||
* most (all?) of these layouts also have a
|
||||
* uchr version.
|
||||
*/
|
||||
uc = macroman2ucs (c);
|
||||
|
||||
for (k = 0; k < G_N_ELEMENTS (special_ucs_table); k++)
|
||||
{
|
||||
if (special_ucs_table[k].ucs_value == uc)
|
||||
{
|
||||
p[j] = special_ucs_table[k].keyval;
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Special-case shift-tab since GTK+ expects
|
||||
* GDK_KEY_ISO_Left_Tab for that.
|
||||
*/
|
||||
if (found && p[j] == GDK_KEY_Tab && modifiers[j] == shiftKey)
|
||||
p[j] = GDK_KEY_ISO_Left_Tab;
|
||||
|
||||
if (!found)
|
||||
p[j] = gdk_unicode_to_keyval (uc);
|
||||
}
|
||||
}
|
||||
|
||||
if (p[3] == p[2])
|
||||
p[3] = 0;
|
||||
if (p[2] == p[1])
|
||||
p[2] = 0;
|
||||
if (p[1] == p[0])
|
||||
p[1] = 0;
|
||||
if (p[0] == p[2] &&
|
||||
p[1] == p[3])
|
||||
p[2] = p[3] = 0;
|
||||
}
|
||||
}
|
||||
/* unicode keyboard layout */
|
||||
else if (layout_kind == kKLKCHRuchrKind || layout_kind == kKLuchrKind)
|
||||
{
|
||||
/* Get chr data */
|
||||
KLGetKeyboardLayoutProperty (new_layout, kKLuchrData, (const void **)&chr_data);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < NUM_KEYCODES; i++)
|
||||
{
|
||||
int j;
|
||||
UInt32 modifiers[] = {0, shiftKey, optionKey, shiftKey | optionKey};
|
||||
UniChar chars[4];
|
||||
UniCharCount nChars;
|
||||
|
||||
p = keyval_array + i * KEYVALS_PER_KEYCODE;
|
||||
|
||||
for (j = 0; j < KEYVALS_PER_KEYCODE; j++)
|
||||
{
|
||||
UInt32 state = 0;
|
||||
OSStatus err;
|
||||
UInt16 key_code;
|
||||
UniChar uc;
|
||||
|
||||
key_code = modifiers[j] | i;
|
||||
err = UCKeyTranslate (chr_data, i, kUCKeyActionDisplay,
|
||||
(modifiers[j] >> 8) & 0xFF,
|
||||
LMGetKbdType(),
|
||||
0,
|
||||
&state, 4, &nChars, chars);
|
||||
|
||||
/* FIXME: Theoretically, we can get multiple UTF-16 values;
|
||||
* we should convert them to proper unicode and figure
|
||||
* out whether there are really keyboard layouts that
|
||||
* give us more than one character for one keypress. */
|
||||
if (err == noErr && nChars == 1)
|
||||
{
|
||||
int k;
|
||||
gboolean found = FALSE;
|
||||
|
||||
/* A few <Shift><Option>keys return two
|
||||
* characters, the first of which is U+00a0,
|
||||
* which isn't interesting; so we return the
|
||||
* second. More sophisticated handling is the
|
||||
* job of a GtkIMContext.
|
||||
*
|
||||
* If state isn't zero, it means that it's a
|
||||
* dead key of some sort. Some of those are
|
||||
* enumerated in the special_ucs_table with the
|
||||
* high nibble set to f to push it into the
|
||||
* private use range. Here we do the same.
|
||||
*/
|
||||
if (state != 0)
|
||||
chars[nChars - 1] |= 0xf000;
|
||||
uc = chars[nChars - 1];
|
||||
|
||||
for (k = 0; k < G_N_ELEMENTS (special_ucs_table); k++)
|
||||
{
|
||||
if (special_ucs_table[k].ucs_value == uc)
|
||||
{
|
||||
p[j] = special_ucs_table[k].keyval;
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Special-case shift-tab since GTK+ expects
|
||||
* GDK_KEY_ISO_Left_Tab for that.
|
||||
*/
|
||||
if (found && p[j] == GDK_KEY_Tab && modifiers[j] == shiftKey)
|
||||
p[j] = GDK_KEY_ISO_Left_Tab;
|
||||
|
||||
if (!found)
|
||||
p[j] = gdk_unicode_to_keyval (uc);
|
||||
}
|
||||
}
|
||||
|
||||
if (p[3] == p[2])
|
||||
p[3] = 0;
|
||||
if (p[2] == p[1])
|
||||
p[2] = 0;
|
||||
if (p[1] == p[0])
|
||||
p[1] = 0;
|
||||
if (p[0] == p[2] &&
|
||||
p[1] == p[3])
|
||||
p[2] = p[3] = 0;
|
||||
}
|
||||
#ifndef __LP64__
|
||||
}
|
||||
else
|
||||
{
|
||||
g_error ("unknown type of keyboard layout (neither KCHR nor uchr)"
|
||||
" - not supported right now");
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (modifier_keys); i++)
|
||||
{
|
||||
p = keyval_array + modifier_keys[i].keycode * KEYVALS_PER_KEYCODE;
|
||||
|
||||
if (p[0] == 0 && p[1] == 0 &&
|
||||
p[2] == 0 && p[3] == 0)
|
||||
p[0] = modifier_keys[i].keyval;
|
||||
}
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (function_keys); i++)
|
||||
{
|
||||
p = keyval_array + function_keys[i].keycode * KEYVALS_PER_KEYCODE;
|
||||
|
||||
p[0] = function_keys[i].keyval;
|
||||
p[1] = p[2] = p[3] = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (known_numeric_keys); i++)
|
||||
{
|
||||
p = keyval_array + known_numeric_keys[i].keycode * KEYVALS_PER_KEYCODE;
|
||||
|
||||
if (p[0] == known_numeric_keys[i].normal_keyval)
|
||||
p[0] = known_numeric_keys[i].keypad_keyval;
|
||||
}
|
||||
|
||||
if (current_layout)
|
||||
g_signal_emit_by_name (default_keymap, "keys_changed");
|
||||
|
||||
current_layout = new_layout;
|
||||
if (chr_data == NULL)
|
||||
{
|
||||
g_error ("cannot get keyboard layout data");
|
||||
return;
|
||||
}
|
||||
#else
|
||||
|
||||
/* Get the layout kind */
|
||||
KLGetKeyboardLayoutProperty (new_layout, kKLKind, (const void **)&layout_kind);
|
||||
|
||||
/* 8-bit-only keyabord layout */
|
||||
if (layout_kind == kKLKCHRKind)
|
||||
{
|
||||
/* Get chr data */
|
||||
KLGetKeyboardLayoutProperty (new_layout, kKLKCHRData, (const void **)&chr_data);
|
||||
|
||||
for (i = 0; i < NUM_KEYCODES; i++)
|
||||
{
|
||||
int j;
|
||||
UInt32 modifiers[] = {0, shiftKey, optionKey, shiftKey | optionKey};
|
||||
|
||||
p = keyval_array + i * KEYVALS_PER_KEYCODE;
|
||||
|
||||
for (j = 0; j < KEYVALS_PER_KEYCODE; j++)
|
||||
{
|
||||
UInt32 c, state = 0;
|
||||
UInt16 key_code;
|
||||
UniChar uc;
|
||||
|
||||
key_code = modifiers[j] | i;
|
||||
c = KeyTranslate (chr_data, key_code, &state);
|
||||
|
||||
if (state != 0)
|
||||
{
|
||||
UInt32 state2 = 0;
|
||||
c = KeyTranslate (chr_data, key_code | 128, &state2);
|
||||
}
|
||||
|
||||
if (c != 0 && c != 0x10)
|
||||
{
|
||||
int k;
|
||||
gboolean found = FALSE;
|
||||
|
||||
/* FIXME: some keyboard layouts (e.g. Russian) use a
|
||||
* different 8-bit character set. We should check
|
||||
* for this. Not a serious problem, because most
|
||||
* (all?) of these layouts also have a uchr version.
|
||||
*/
|
||||
uc = macroman2ucs (c);
|
||||
|
||||
for (k = 0; k < G_N_ELEMENTS (special_ucs_table); k++)
|
||||
{
|
||||
if (special_ucs_table[k].ucs_value == uc)
|
||||
{
|
||||
p[j] = special_ucs_table[k].keyval;
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Special-case shift-tab since GTK+ expects
|
||||
* GDK_KEY_ISO_Left_Tab for that.
|
||||
*/
|
||||
if (found && p[j] == GDK_KEY_Tab && modifiers[j] == shiftKey)
|
||||
p[j] = GDK_KEY_ISO_Left_Tab;
|
||||
|
||||
if (!found)
|
||||
p[j] = gdk_unicode_to_keyval (uc);
|
||||
}
|
||||
}
|
||||
|
||||
if (p[3] == p[2])
|
||||
p[3] = 0;
|
||||
if (p[2] == p[1])
|
||||
p[2] = 0;
|
||||
if (p[1] == p[0])
|
||||
p[1] = 0;
|
||||
if (p[0] == p[2] &&
|
||||
p[1] == p[3])
|
||||
p[2] = p[3] = 0;
|
||||
}
|
||||
}
|
||||
/* unicode keyboard layout */
|
||||
else if (layout_kind == kKLKCHRuchrKind || layout_kind == kKLuchrKind)
|
||||
{
|
||||
/* Get chr data */
|
||||
KLGetKeyboardLayoutProperty (new_layout, kKLuchrData, (const void **)&chr_data);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < NUM_KEYCODES; i++)
|
||||
{
|
||||
int j;
|
||||
UInt32 modifiers[] = {0, shiftKey, optionKey, shiftKey | optionKey};
|
||||
UniChar chars[4];
|
||||
UniCharCount nChars;
|
||||
|
||||
p = keyval_array + i * KEYVALS_PER_KEYCODE;
|
||||
|
||||
for (j = 0; j < KEYVALS_PER_KEYCODE; j++)
|
||||
{
|
||||
UInt32 state = 0;
|
||||
OSStatus err;
|
||||
UInt16 key_code;
|
||||
UniChar uc;
|
||||
|
||||
key_code = modifiers[j] | i;
|
||||
err = UCKeyTranslate (chr_data, i, kUCKeyActionDisplay,
|
||||
(modifiers[j] >> 8) & 0xFF,
|
||||
LMGetKbdType(),
|
||||
0,
|
||||
&state, 4, &nChars, chars);
|
||||
|
||||
/* FIXME: Theoretically, we can get multiple UTF-16
|
||||
* values; we should convert them to proper unicode and
|
||||
* figure out whether there are really keyboard layouts
|
||||
* that give us more than one character for one
|
||||
* keypress.
|
||||
*/
|
||||
if (err == noErr && nChars == 1)
|
||||
{
|
||||
int k;
|
||||
gboolean found = FALSE;
|
||||
|
||||
/* A few <Shift><Option>keys return two characters,
|
||||
* the first of which is U+00a0, which isn't
|
||||
* interesting; so we return the second. More
|
||||
* sophisticated handling is the job of a
|
||||
* GtkIMContext.
|
||||
*
|
||||
* If state isn't zero, it means that it's a dead
|
||||
* key of some sort. Some of those are enumerated in
|
||||
* the special_ucs_table with the high nibble set to
|
||||
* f to push it into the private use range. Here we
|
||||
* do the same.
|
||||
*/
|
||||
if (state != 0)
|
||||
chars[nChars - 1] |= 0xf000;
|
||||
uc = chars[nChars - 1];
|
||||
|
||||
for (k = 0; k < G_N_ELEMENTS (special_ucs_table); k++)
|
||||
{
|
||||
if (special_ucs_table[k].ucs_value == uc)
|
||||
{
|
||||
p[j] = special_ucs_table[k].keyval;
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Special-case shift-tab since GTK+ expects
|
||||
* GDK_KEY_ISO_Left_Tab for that.
|
||||
*/
|
||||
if (found && p[j] == GDK_KEY_Tab && modifiers[j] == shiftKey)
|
||||
p[j] = GDK_KEY_ISO_Left_Tab;
|
||||
|
||||
if (!found)
|
||||
p[j] = gdk_unicode_to_keyval (uc);
|
||||
}
|
||||
}
|
||||
|
||||
if (p[3] == p[2])
|
||||
p[3] = 0;
|
||||
if (p[2] == p[1])
|
||||
p[2] = 0;
|
||||
if (p[1] == p[0])
|
||||
p[1] = 0;
|
||||
if (p[0] == p[2] &&
|
||||
p[1] == p[3])
|
||||
p[2] = p[3] = 0;
|
||||
}
|
||||
#ifndef __LP64__
|
||||
}
|
||||
else
|
||||
{
|
||||
g_error ("unknown type of keyboard layout (neither KCHR nor uchr)"
|
||||
" - not supported right now");
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (modifier_keys); i++)
|
||||
{
|
||||
p = keyval_array + modifier_keys[i].keycode * KEYVALS_PER_KEYCODE;
|
||||
|
||||
if (p[0] == 0 && p[1] == 0 &&
|
||||
p[2] == 0 && p[3] == 0)
|
||||
p[0] = modifier_keys[i].keyval;
|
||||
}
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (function_keys); i++)
|
||||
{
|
||||
p = keyval_array + function_keys[i].keycode * KEYVALS_PER_KEYCODE;
|
||||
|
||||
p[0] = function_keys[i].keyval;
|
||||
p[1] = p[2] = p[3] = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (known_numeric_keys); i++)
|
||||
{
|
||||
p = keyval_array + known_numeric_keys[i].keycode * KEYVALS_PER_KEYCODE;
|
||||
|
||||
if (p[0] == known_numeric_keys[i].normal_keyval)
|
||||
p[0] = known_numeric_keys[i].keypad_keyval;
|
||||
}
|
||||
|
||||
g_signal_emit_by_name (default_keymap, "keys-changed");
|
||||
}
|
||||
|
||||
static PangoDirection
|
||||
@@ -542,8 +531,6 @@ gdk_quartz_keymap_get_entries_for_keyval (GdkKeymap *keymap,
|
||||
GArray *keys_array;
|
||||
int i;
|
||||
|
||||
maybe_update_keymap ();
|
||||
|
||||
*n_keys = 0;
|
||||
keys_array = g_array_new (FALSE, FALSE, sizeof (GdkKeymapKey));
|
||||
|
||||
@@ -579,8 +566,6 @@ gdk_quartz_keymap_get_entries_for_keycode (GdkKeymap *keymap,
|
||||
int i;
|
||||
guint *p;
|
||||
|
||||
maybe_update_keymap ();
|
||||
|
||||
*n_entries = 0;
|
||||
|
||||
if (hardware_keycode > NUM_KEYCODES)
|
||||
@@ -689,8 +674,6 @@ gdk_quartz_keymap_translate_keyboard_state (GdkKeymap *keymap,
|
||||
GdkModifierType bit;
|
||||
guint tmp_modifiers = 0;
|
||||
|
||||
maybe_update_keymap ();
|
||||
|
||||
if (keyval)
|
||||
*keyval = 0;
|
||||
if (effective_group)
|
||||
@@ -835,14 +818,36 @@ _gdk_quartz_keys_is_modifier (guint keycode)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
input_sources_changed_notification (CFNotificationCenterRef center,
|
||||
void *observer,
|
||||
CFStringRef name,
|
||||
const void *object,
|
||||
CFDictionaryRef userInfo)
|
||||
{
|
||||
update_keymap ();
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_quartz_keymap_init (GdkQuartzKeymap *keymap)
|
||||
{
|
||||
update_keymap ();
|
||||
CFNotificationCenterAddObserver (CFNotificationCenterGetDistributedCenter (),
|
||||
keymap,
|
||||
input_sources_changed_notification,
|
||||
CFSTR ("AppleSelectedInputSourcesChangedNotification"),
|
||||
NULL,
|
||||
CFNotificationSuspensionBehaviorDeliverImmediately);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_quartz_keymap_finalize (GObject *object)
|
||||
{
|
||||
CFNotificationCenterRemoveObserver (CFNotificationCenterGetDistributedCenter (),
|
||||
object,
|
||||
CFSTR ("AppleSelectedInputSourcesChangedNotification"),
|
||||
NULL);
|
||||
|
||||
G_OBJECT_CLASS (gdk_quartz_keymap_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
||||
@@ -74,6 +74,7 @@ void _gdk_quartz_event_loop_release_event (NSEvent *event);
|
||||
/* Keys */
|
||||
GdkEventType _gdk_quartz_keys_event_type (NSEvent *event);
|
||||
gboolean _gdk_quartz_keys_is_modifier (guint keycode);
|
||||
void _gdk_quartz_synthesize_null_key_event (GdkWindow *window);
|
||||
|
||||
/* Drag and Drop */
|
||||
void _gdk_quartz_window_register_dnd (GdkWindow *window);
|
||||
|
||||
@@ -55,6 +55,10 @@ typedef enum
|
||||
|
||||
GdkOSXVersion gdk_quartz_osx_version (void);
|
||||
|
||||
GdkAtom gdk_quartz_pasteboard_type_to_atom_libgtk_only (NSString *type);
|
||||
NSString *gdk_quartz_target_to_pasteboard_type_libgtk_only (const gchar *target);
|
||||
NSString *gdk_quartz_atom_to_pasteboard_type_libgtk_only (GdkAtom atom);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#define __GDKQUARTZ_H_INSIDE__
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include "gdkselection.h"
|
||||
#include "gdkproperty.h"
|
||||
#include "gdkquartz.h"
|
||||
|
||||
gboolean
|
||||
_gdk_quartz_display_set_selection_owner (GdkDisplay *display,
|
||||
@@ -171,3 +172,42 @@ _gdk_quartz_display_text_property_to_utf8_list (GdkDisplay *display,
|
||||
}
|
||||
}
|
||||
|
||||
GdkAtom
|
||||
gdk_quartz_pasteboard_type_to_atom_libgtk_only (NSString *type)
|
||||
{
|
||||
if ([type isEqualToString:NSStringPboardType])
|
||||
return gdk_atom_intern_static_string ("UTF8_STRING");
|
||||
else if ([type isEqualToString:NSTIFFPboardType])
|
||||
return gdk_atom_intern_static_string ("image/tiff");
|
||||
else if ([type isEqualToString:NSColorPboardType])
|
||||
return gdk_atom_intern_static_string ("application/x-color");
|
||||
else if ([type isEqualToString:NSURLPboardType])
|
||||
return gdk_atom_intern_static_string ("text/uri-list");
|
||||
else
|
||||
return gdk_atom_intern ([type UTF8String], FALSE);
|
||||
}
|
||||
|
||||
NSString *
|
||||
gdk_quartz_target_to_pasteboard_type_libgtk_only (const char *target)
|
||||
{
|
||||
if (strcmp (target, "UTF8_STRING") == 0)
|
||||
return NSStringPboardType;
|
||||
else if (strcmp (target, "image/tiff") == 0)
|
||||
return NSTIFFPboardType;
|
||||
else if (strcmp (target, "application/x-color") == 0)
|
||||
return NSColorPboardType;
|
||||
else if (strcmp (target, "text/uri-list") == 0)
|
||||
return NSURLPboardType;
|
||||
else
|
||||
return [NSString stringWithUTF8String:target];
|
||||
}
|
||||
|
||||
NSString *
|
||||
gdk_quartz_atom_to_pasteboard_type_libgtk_only (GdkAtom atom)
|
||||
{
|
||||
gchar *target = gdk_atom_name (atom);
|
||||
NSString *ret = gdk_quartz_target_to_pasteboard_type_libgtk_only (target);
|
||||
g_free (target);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -2338,14 +2338,18 @@ window_type_hint_to_level (GdkWindowTypeHint hint)
|
||||
return NSTornOffMenuWindowLevel;
|
||||
|
||||
case GDK_WINDOW_TYPE_HINT_DOCK:
|
||||
return NSFloatingWindowLevel; /* NSDockWindowLevel is deprecated, and not replaced */
|
||||
|
||||
case GDK_WINDOW_TYPE_HINT_UTILITY:
|
||||
case GDK_WINDOW_TYPE_HINT_DIALOG: /* Dialog window */
|
||||
return NSFloatingWindowLevel;
|
||||
|
||||
case GDK_WINDOW_TYPE_HINT_NORMAL: /* Normal toplevel window */
|
||||
case GDK_WINDOW_TYPE_HINT_DIALOG: /* Dialog window */
|
||||
case GDK_WINDOW_TYPE_HINT_TOOLBAR: /* Window used to implement toolbars */
|
||||
case GDK_WINDOW_TYPE_HINT_DESKTOP: /* N/A */
|
||||
break;
|
||||
return NSNormalWindowLevel;
|
||||
|
||||
case GDK_WINDOW_TYPE_HINT_DESKTOP:
|
||||
return kCGDesktopWindowLevelKey; /* doesn't map to any real Cocoa model */
|
||||
|
||||
default:
|
||||
break;
|
||||
@@ -2642,9 +2646,11 @@ gdk_quartz_window_set_decorations (GdkWindow *window,
|
||||
* NSTitledWindowMask. This behaved extremely oddly when
|
||||
* conditionalized upon that and since it has no side effects (i.e.
|
||||
* if NSTitledWindowMask is not requested, the title will not be
|
||||
* displayed) just do it unconditionally.
|
||||
* displayed) just do it unconditionally. We also must null check
|
||||
* 'title' before setting it to avoid crashing.
|
||||
*/
|
||||
[impl->toplevel setTitle:title];
|
||||
if (title)
|
||||
[impl->toplevel setTitle:title];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2664,7 +2670,8 @@ gdk_quartz_window_set_decorations (GdkWindow *window,
|
||||
screen:screen];
|
||||
[impl->toplevel setHasShadow: window_type_hint_to_shadow (impl->type_hint)];
|
||||
[impl->toplevel setLevel: window_type_hint_to_level (impl->type_hint)];
|
||||
[impl->toplevel setTitle:title];
|
||||
if (title)
|
||||
[impl->toplevel setTitle:title];
|
||||
[impl->toplevel setBackgroundColor:bg];
|
||||
[impl->toplevel setHidesOnDeactivate: window_type_hint_to_hides_on_deactivate (impl->type_hint)];
|
||||
[impl->toplevel setContentView:old_view];
|
||||
|
||||
@@ -37,6 +37,9 @@ gdk_event_source_prepare(GSource *base, gint *timeout)
|
||||
|
||||
*timeout = -1;
|
||||
|
||||
if (source->display->event_pause_count > 0)
|
||||
return FALSE;
|
||||
|
||||
/* We have to add/remove the GPollFD if we want to update our
|
||||
* poll event mask dynamically. Instead, let's just flush all
|
||||
* write on idle instead, which is what this amounts to. */
|
||||
@@ -57,6 +60,9 @@ gdk_event_source_check(GSource *base)
|
||||
if (source->pfd.revents & (G_IO_ERR | G_IO_HUP))
|
||||
g_error ("Lost connection to wayland compositor");
|
||||
|
||||
if (source->display->event_pause_count > 0)
|
||||
return FALSE;
|
||||
|
||||
return _gdk_event_queue_find_first (source->display) != NULL ||
|
||||
source->pfd.revents;
|
||||
}
|
||||
|
||||
@@ -324,13 +324,6 @@ gdk_wayland_window_attach_image (GdkWindow *window)
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
return;
|
||||
|
||||
/* The "drawn to" Cairo surface is the same as the Cairo surface from which
|
||||
* we are driving the buffer for the Wayland surface. Therefore we don't
|
||||
* need to do anything here
|
||||
*/
|
||||
if (impl->server_surface == impl->cairo_surface)
|
||||
return;
|
||||
|
||||
/* The wayland surface is attached to a buffer that is from the old "drawn
|
||||
* to" surface. Unref the surface and restore the state.
|
||||
*/
|
||||
@@ -1319,6 +1312,9 @@ gdk_wayland_window_fullscreen (GdkWindow *window)
|
||||
WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT,
|
||||
0,
|
||||
NULL);
|
||||
|
||||
gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FULLSCREEN);
|
||||
|
||||
impl->fullscreen = TRUE;
|
||||
}
|
||||
|
||||
@@ -1334,8 +1330,11 @@ gdk_wayland_window_unfullscreen (GdkWindow *window)
|
||||
return;
|
||||
|
||||
wl_shell_surface_set_toplevel (impl->shell_surface);
|
||||
gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FULLSCREEN, 0);
|
||||
gdk_wayland_window_configure (window, impl->saved_width, impl->saved_height,
|
||||
0);
|
||||
|
||||
|
||||
impl->fullscreen = FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -3330,9 +3330,12 @@ gdk_event_prepare (GSource *source,
|
||||
|
||||
*timeout = -1;
|
||||
|
||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||
(modal_win32_dialog == NULL &&
|
||||
GetQueueStatus (QS_ALLINPUT) != 0));
|
||||
if (_gdk_display->event_pause_count > 0)
|
||||
retval = FALSE;
|
||||
else
|
||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||
(modal_win32_dialog == NULL &&
|
||||
GetQueueStatus (QS_ALLINPUT) != 0));
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
@@ -3346,16 +3349,14 @@ gdk_event_check (GSource *source)
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
if (event_poll_fd.revents & G_IO_IN)
|
||||
{
|
||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||
(modal_win32_dialog == NULL &&
|
||||
GetQueueStatus (QS_ALLINPUT) != 0));
|
||||
}
|
||||
if (_gdk_display->event_pause_count > 0)
|
||||
retval = FALSE;
|
||||
else if (event_poll_fd.revents & G_IO_IN)
|
||||
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
|
||||
(modal_win32_dialog == NULL &&
|
||||
GetQueueStatus (QS_ALLINPUT) != 0));
|
||||
else
|
||||
{
|
||||
retval = FALSE;
|
||||
}
|
||||
retval = FALSE;
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
|
||||
@@ -147,9 +147,10 @@ _gdk_win32_window_change_property (GdkWindow *window,
|
||||
{
|
||||
HGLOBAL hdata;
|
||||
gint i, size;
|
||||
guchar *ucptr, *buf = NULL;
|
||||
guchar *ucptr;
|
||||
wchar_t *wcptr, *p;
|
||||
glong wclen;
|
||||
GError *err = NULL;
|
||||
|
||||
g_return_if_fail (window != NULL);
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
@@ -193,7 +194,13 @@ _gdk_win32_window_change_property (GdkWindow *window,
|
||||
return;
|
||||
}
|
||||
|
||||
wcptr = g_utf8_to_utf16 ((char *) data, nelements, NULL, &wclen, NULL);
|
||||
wcptr = g_utf8_to_utf16 ((char *) data, nelements, NULL, &wclen, &err);
|
||||
if (err != NULL)
|
||||
{
|
||||
g_warning ("Failed to convert utf8: %s", err->message);
|
||||
g_clear_error (&err);
|
||||
return;
|
||||
}
|
||||
|
||||
wclen++; /* Terminating 0 */
|
||||
size = wclen * 2;
|
||||
@@ -206,7 +213,7 @@ _gdk_win32_window_change_property (GdkWindow *window,
|
||||
WIN32_API_FAILED ("GlobalAlloc");
|
||||
if (!CloseClipboard ())
|
||||
WIN32_API_FAILED ("CloseClipboard");
|
||||
g_free (buf);
|
||||
g_free (wcptr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -53,9 +53,7 @@ libgdk_x11_la_SOURCES = \
|
||||
gdkx.h \
|
||||
gdkprivate-x11.h \
|
||||
xsettings-client.h \
|
||||
xsettings-client.c \
|
||||
xsettings-common.h \
|
||||
xsettings-common.c
|
||||
xsettings-client.c
|
||||
|
||||
libgdkinclude_HEADERS = \
|
||||
gdkx.h
|
||||
|
||||
@@ -859,6 +859,14 @@ _gdk_device_xi2_reset_scroll_valuators (GdkX11DeviceXI2 *device)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_device_xi2_unset_scroll_valuators (GdkX11DeviceXI2 *device)
|
||||
{
|
||||
if (device->scroll_valuators->len > 0)
|
||||
g_array_remove_range (device->scroll_valuators, 0,
|
||||
device->scroll_valuators->len);
|
||||
}
|
||||
|
||||
gint
|
||||
_gdk_x11_device_xi2_get_id (GdkX11DeviceXI2 *device)
|
||||
{
|
||||
|
||||
@@ -59,10 +59,6 @@ G_DEFINE_TYPE_WITH_CODE (GdkX11DeviceManagerXI2, gdk_x11_device_manager_xi2, GDK
|
||||
G_IMPLEMENT_INTERFACE (GDK_TYPE_EVENT_TRANSLATOR,
|
||||
gdk_x11_device_manager_xi2_event_translator_init))
|
||||
|
||||
|
||||
#define HAS_FOCUS(toplevel) ((toplevel)->has_focus || (toplevel)->has_pointer_focus)
|
||||
|
||||
|
||||
static void gdk_x11_device_manager_xi2_constructed (GObject *object);
|
||||
static void gdk_x11_device_manager_xi2_dispose (GObject *object);
|
||||
static void gdk_x11_device_manager_xi2_set_property (GObject *object,
|
||||
@@ -495,6 +491,8 @@ gdk_x11_device_manager_xi2_constructed (GObject *object)
|
||||
XIEventMask event_mask;
|
||||
unsigned char mask[2] = { 0 };
|
||||
|
||||
G_OBJECT_CLASS (gdk_x11_device_manager_xi2_parent_class)->constructed (object);
|
||||
|
||||
device_manager = GDK_X11_DEVICE_MANAGER_XI2 (object);
|
||||
display = gdk_device_manager_get_display (GDK_DEVICE_MANAGER (object));
|
||||
xdisplay = GDK_DISPLAY_XDISPLAY (display);
|
||||
@@ -767,6 +765,7 @@ handle_device_changed (GdkX11DeviceManagerXI2 *device_manager,
|
||||
if (device)
|
||||
{
|
||||
_gdk_device_reset_axes (device);
|
||||
_gdk_device_xi2_unset_scroll_valuators ((GdkX11DeviceXI2 *) device);
|
||||
translate_device_classes (display, device, ev->classes, ev->num_classes);
|
||||
|
||||
g_signal_emit_by_name (G_OBJECT (device), "changed");
|
||||
@@ -1559,7 +1558,25 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator,
|
||||
source_device = g_hash_table_lookup (device_manager->id_table,
|
||||
GUINT_TO_POINTER (xev->sourceid));
|
||||
gdk_event_set_source_device (event, source_device);
|
||||
_gdk_device_xi2_reset_scroll_valuators (GDK_X11_DEVICE_XI2 (source_device));
|
||||
|
||||
if (ev->evtype == XI_Enter &&
|
||||
xev->detail != XINotifyInferior && xev->mode != XINotifyPassiveUngrab &&
|
||||
gdk_window_get_window_type (window) == GDK_WINDOW_TOPLEVEL)
|
||||
{
|
||||
if (gdk_device_get_device_type (source_device) != GDK_DEVICE_TYPE_MASTER)
|
||||
_gdk_device_xi2_reset_scroll_valuators (GDK_X11_DEVICE_XI2 (source_device));
|
||||
else
|
||||
{
|
||||
GList *slaves, *l;
|
||||
|
||||
slaves = gdk_device_list_slave_devices (source_device);
|
||||
|
||||
for (l = slaves; l; l = l->next)
|
||||
_gdk_device_xi2_reset_scroll_valuators (GDK_X11_DEVICE_XI2 (l->data));
|
||||
|
||||
g_list_free (slaves);
|
||||
}
|
||||
}
|
||||
|
||||
event->crossing.mode = translate_crossing_mode (xev->mode);
|
||||
event->crossing.detail = translate_notify_type (xev->detail);
|
||||
|
||||
@@ -140,6 +140,7 @@ static const char *const precache_atoms[] = {
|
||||
"_NET_WM_STATE_ABOVE",
|
||||
"_NET_WM_STATE_BELOW",
|
||||
"_NET_WM_STATE_FULLSCREEN",
|
||||
"_NET_WM_STATE_HIDDEN",
|
||||
"_NET_WM_STATE_MODAL",
|
||||
"_NET_WM_STATE_MAXIMIZED_VERT",
|
||||
"_NET_WM_STATE_MAXIMIZED_HORZ",
|
||||
@@ -149,8 +150,17 @@ static const char *const precache_atoms[] = {
|
||||
"_NET_WM_SYNC_REQUEST",
|
||||
"_NET_WM_SYNC_REQUEST_COUNTER",
|
||||
"_NET_WM_WINDOW_TYPE",
|
||||
"_NET_WM_WINDOW_TYPE_COMBO",
|
||||
"_NET_WM_WINDOW_TYPE_DIALOG",
|
||||
"_NET_WM_WINDOW_TYPE_DND",
|
||||
"_NET_WM_WINDOW_TYPE_DROPDOWN_MENU",
|
||||
"_NET_WM_WINDOW_TYPE_MENU",
|
||||
"_NET_WM_WINDOW_TYPE_NORMAL",
|
||||
"_NET_WM_WINDOW_TYPE_POPUP_MENU",
|
||||
"_NET_WM_WINDOW_TYPE_TOOLTIP",
|
||||
"_NET_WM_WINDOW_TYPE_UTILITY",
|
||||
"_NET_WM_USER_TIME",
|
||||
"_NET_WM_USER_TIME_WINDOW",
|
||||
"_NET_VIRTUAL_ROOTS",
|
||||
"GDK_SELECTION",
|
||||
"_NET_WM_STATE_FOCUSED"
|
||||
@@ -1394,7 +1404,7 @@ _gdk_x11_display_open (const gchar *display_name)
|
||||
* structures in places
|
||||
*/
|
||||
for (i = 0; i < ScreenCount (display_x11->xdisplay); i++)
|
||||
_gdk_x11_screen_init_events (display_x11->screens[i]);
|
||||
_gdk_x11_xsettings_init (GDK_X11_SCREEN (display_x11->screens[i]));
|
||||
|
||||
/*set the default screen */
|
||||
display_x11->default_screen = display_x11->screens[DefaultScreen (display_x11->xdisplay)];
|
||||
@@ -1731,7 +1741,8 @@ device_grab_update_callback (GdkDisplay *display,
|
||||
|
||||
pointer_info = _gdk_display_get_pointer_info (display, device);
|
||||
_gdk_display_device_grab_update (display, device,
|
||||
pointer_info->last_slave, serial);
|
||||
pointer_info->last_slave ? pointer_info->last_slave : device,
|
||||
serial);
|
||||
}
|
||||
|
||||
#define XSERVER_TIME_IS_LATER(time1, time2) \
|
||||
|
||||
@@ -230,6 +230,8 @@ guint _gdk_x11_device_xi2_translate_state (XIModifierState *mods_state,
|
||||
XIButtonState *buttons_state,
|
||||
XIGroupState *group_state);
|
||||
gint _gdk_x11_device_xi2_get_id (GdkX11DeviceXI2 *device);
|
||||
void _gdk_device_xi2_unset_scroll_valuators (GdkX11DeviceXI2 *device);
|
||||
|
||||
|
||||
GdkDevice * _gdk_x11_device_manager_xi2_lookup (GdkX11DeviceManagerXI2 *device_manager_xi2,
|
||||
gint device_id);
|
||||
@@ -297,6 +299,10 @@ void _gdk_x11_precache_atoms (GdkDisplay *display,
|
||||
const gchar * const *atom_names,
|
||||
gint n_atoms);
|
||||
|
||||
Atom _gdk_x11_get_xatom_for_display_printf (GdkDisplay *display,
|
||||
const gchar *format,
|
||||
...) G_GNUC_PRINTF (2, 3);
|
||||
|
||||
GdkFilterReturn
|
||||
_gdk_x11_dnd_filter (GdkXEvent *xev,
|
||||
GdkEvent *event,
|
||||
@@ -304,7 +310,6 @@ _gdk_x11_dnd_filter (GdkXEvent *xev,
|
||||
|
||||
void _gdk_x11_screen_init_root_window (GdkScreen *screen);
|
||||
void _gdk_x11_screen_init_visuals (GdkScreen *screen);
|
||||
void _gdk_x11_screen_init_events (GdkScreen *screen);
|
||||
|
||||
void _gdk_x11_cursor_update_theme (GdkCursor *cursor);
|
||||
void _gdk_x11_cursor_display_finalize (GdkDisplay *display);
|
||||
|
||||
@@ -461,6 +461,26 @@ gdk_x11_get_xatom_by_name_for_display (GdkDisplay *display,
|
||||
gdk_atom_intern (atom_name, FALSE));
|
||||
}
|
||||
|
||||
Atom
|
||||
_gdk_x11_get_xatom_for_display_printf (GdkDisplay *display,
|
||||
const gchar *format,
|
||||
...)
|
||||
{
|
||||
va_list args;
|
||||
char *atom_name;
|
||||
Atom atom;
|
||||
|
||||
va_start (args, format);
|
||||
atom_name = g_strdup_vprintf (format, args);
|
||||
va_end (args);
|
||||
|
||||
atom = gdk_x11_get_xatom_by_name_for_display (display, atom_name);
|
||||
|
||||
g_free (atom_name);
|
||||
|
||||
return atom;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_get_xatom_by_name:
|
||||
* @atom_name: a string
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "gdkscreen-x11.h"
|
||||
#include "gdkdisplay-x11.h"
|
||||
#include "gdkprivate-x11.h"
|
||||
#include "xsettings-client.h"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
@@ -47,8 +48,6 @@
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
#endif
|
||||
|
||||
#include "gdksettings.c"
|
||||
|
||||
static void gdk_x11_screen_dispose (GObject *object);
|
||||
static void gdk_x11_screen_finalize (GObject *object);
|
||||
static void init_randr_support (GdkScreen *screen);
|
||||
@@ -97,13 +96,13 @@ gdk_x11_screen_get_display (GdkScreen *screen)
|
||||
static gint
|
||||
gdk_x11_screen_get_width (GdkScreen *screen)
|
||||
{
|
||||
return WidthOfScreen (GDK_X11_SCREEN (screen)->xscreen);
|
||||
return GDK_X11_SCREEN (screen)->width;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_x11_screen_get_height (GdkScreen *screen)
|
||||
{
|
||||
return HeightOfScreen (GDK_X11_SCREEN (screen)->xscreen);
|
||||
return GDK_X11_SCREEN (screen)->height;
|
||||
}
|
||||
|
||||
static gint
|
||||
@@ -130,18 +129,6 @@ gdk_x11_screen_get_root_window (GdkScreen *screen)
|
||||
return GDK_X11_SCREEN (screen)->root_window;
|
||||
}
|
||||
|
||||
static void
|
||||
_gdk_x11_screen_events_uninit (GdkScreen *screen)
|
||||
{
|
||||
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
|
||||
|
||||
if (x11_screen->xsettings_client)
|
||||
{
|
||||
xsettings_client_destroy (x11_screen->xsettings_client);
|
||||
x11_screen->xsettings_client = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_x11_screen_dispose (GObject *object)
|
||||
{
|
||||
@@ -157,11 +144,14 @@ gdk_x11_screen_dispose (GObject *object)
|
||||
}
|
||||
}
|
||||
|
||||
_gdk_x11_screen_events_uninit (GDK_SCREEN (object));
|
||||
_gdk_x11_xsettings_finish (x11_screen);
|
||||
|
||||
if (x11_screen->root_window)
|
||||
_gdk_window_destroy (x11_screen->root_window, TRUE);
|
||||
|
||||
for (i = 0; i < x11_screen->nvisuals; i++)
|
||||
g_object_run_dispose (G_OBJECT (x11_screen->visuals[i]));
|
||||
|
||||
G_OBJECT_CLASS (gdk_x11_screen_parent_class)->dispose (object);
|
||||
|
||||
x11_screen->xdisplay = NULL;
|
||||
@@ -298,7 +288,7 @@ get_current_desktop (GdkScreen *screen)
|
||||
&data_return);
|
||||
|
||||
if (type == XA_CARDINAL && format == 32 && n_items > 0)
|
||||
workspace = (int) data_return[0];
|
||||
workspace = ((long *) data_return)[0];
|
||||
|
||||
if (data_return)
|
||||
XFree (data_return);
|
||||
@@ -436,27 +426,23 @@ gdk_x11_screen_get_screen_number (GdkScreen *screen)
|
||||
return GDK_X11_SCREEN (screen)->screen_num;
|
||||
}
|
||||
|
||||
static Atom
|
||||
get_cm_atom (GdkX11Screen *x11_screen)
|
||||
{
|
||||
return _gdk_x11_get_xatom_for_display_printf (x11_screen->display, "_NET_WM_CM_S%d", x11_screen->screen_num);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_is_composited (GdkDisplay *display,
|
||||
GdkX11Screen *x11_screen)
|
||||
{
|
||||
Atom xselection = gdk_x11_atom_to_xatom_for_display (display, x11_screen->cm_selection_atom);
|
||||
Window xwindow;
|
||||
|
||||
xwindow = XGetSelectionOwner (GDK_DISPLAY_XDISPLAY (display), xselection);
|
||||
xwindow = XGetSelectionOwner (GDK_DISPLAY_XDISPLAY (display), get_cm_atom (x11_screen));
|
||||
|
||||
return xwindow != None;
|
||||
}
|
||||
|
||||
static GdkAtom
|
||||
make_cm_atom (int screen_number)
|
||||
{
|
||||
gchar *name = g_strdup_printf ("_NET_WM_CM_S%d", screen_number);
|
||||
GdkAtom atom = gdk_atom_intern (name, FALSE);
|
||||
g_free (name);
|
||||
return atom;
|
||||
}
|
||||
|
||||
static void
|
||||
init_monitor_geometry (GdkX11Monitor *monitor,
|
||||
int x, int y, int width, int height)
|
||||
@@ -909,8 +895,8 @@ _gdk_x11_screen_get_edge_monitors (GdkScreen *screen,
|
||||
gint *right)
|
||||
{
|
||||
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
|
||||
gint top_most_pos = HeightOfScreen (GDK_X11_SCREEN (screen)->xscreen);
|
||||
gint left_most_pos = WidthOfScreen (GDK_X11_SCREEN (screen)->xscreen);
|
||||
gint top_most_pos = x11_screen->height;
|
||||
gint left_most_pos = x11_screen->width;
|
||||
gint bottom_most_pos = 0;
|
||||
gint right_most_pos = 0;
|
||||
gint monitor_num;
|
||||
@@ -1039,6 +1025,30 @@ init_multihead (GdkScreen *screen)
|
||||
HeightOfScreen (x11_screen->xscreen));
|
||||
}
|
||||
|
||||
static void
|
||||
update_bounding_box (GdkScreen *screen)
|
||||
{
|
||||
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
|
||||
gint i, x1, y1, x2, y2;
|
||||
|
||||
x1 = y1 = G_MAXINT;
|
||||
x2 = y2 = G_MININT;
|
||||
|
||||
for (i = 0; i < x11_screen->n_monitors; i++)
|
||||
{
|
||||
GdkX11Monitor *monitor;
|
||||
|
||||
monitor = &x11_screen->monitors[i];
|
||||
x1 = MIN (x1, monitor->geometry.x);
|
||||
y1 = MIN (y1, monitor->geometry.y);
|
||||
x2 = MAX (x2, monitor->geometry.x + monitor->geometry.width);
|
||||
y2 = MAX (y2, monitor->geometry.y + monitor->geometry.height);
|
||||
}
|
||||
|
||||
x11_screen->width = x2 - x1;
|
||||
x11_screen->height = y2 - y1;
|
||||
}
|
||||
|
||||
GdkScreen *
|
||||
_gdk_x11_screen_new (GdkDisplay *display,
|
||||
gint screen_number)
|
||||
@@ -1064,7 +1074,8 @@ _gdk_x11_screen_new (GdkDisplay *display,
|
||||
|
||||
_gdk_x11_screen_init_visuals (screen);
|
||||
_gdk_x11_screen_init_root_window (screen);
|
||||
|
||||
update_bounding_box (screen);
|
||||
|
||||
return screen;
|
||||
}
|
||||
|
||||
@@ -1078,9 +1089,8 @@ _gdk_x11_screen_setup (GdkScreen *screen)
|
||||
{
|
||||
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
|
||||
|
||||
x11_screen->cm_selection_atom = make_cm_atom (x11_screen->screen_num);
|
||||
gdk_display_request_selection_notification (x11_screen->display,
|
||||
x11_screen->cm_selection_atom);
|
||||
gdk_x11_xatom_to_atom_for_display (x11_screen->display, get_cm_atom (x11_screen)));
|
||||
x11_screen->is_composited = check_is_composited (x11_screen->display, x11_screen);
|
||||
}
|
||||
|
||||
@@ -1097,6 +1107,7 @@ init_randr_support (GdkScreen *screen)
|
||||
{
|
||||
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
|
||||
|
||||
/* NB: This is also needed for XSettings, so don't remove. */
|
||||
XSelectInput (GDK_SCREEN_XDISPLAY (screen),
|
||||
x11_screen->xroot_window,
|
||||
StructureNotifyMask);
|
||||
@@ -1136,11 +1147,13 @@ process_monitors_change (GdkScreen *screen)
|
||||
x11_screen->monitors, x11_screen->n_monitors) ||
|
||||
x11_screen->primary_monitor != primary_monitor;
|
||||
|
||||
|
||||
free_monitors (monitors, n_monitors);
|
||||
|
||||
if (changed)
|
||||
g_signal_emit_by_name (screen, "monitors-changed");
|
||||
{
|
||||
update_bounding_box (screen);
|
||||
g_signal_emit_by_name (screen, "monitors-changed");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1195,10 +1208,8 @@ _gdk_x11_screen_process_owner_change (GdkScreen *screen,
|
||||
#ifdef HAVE_XFIXES
|
||||
XFixesSelectionNotifyEvent *selection_event = (XFixesSelectionNotifyEvent *)event;
|
||||
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
|
||||
Atom xcm_selection_atom = gdk_x11_atom_to_xatom_for_display (x11_screen->display,
|
||||
x11_screen->cm_selection_atom);
|
||||
|
||||
if (selection_event->selection == xcm_selection_atom)
|
||||
if (selection_event->selection == get_cm_atom (x11_screen))
|
||||
{
|
||||
gboolean composited = selection_event->owner != None;
|
||||
|
||||
@@ -1329,97 +1340,35 @@ gdk_x11_screen_get_window_stack (GdkScreen *screen)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_transform (const gchar *xsettings_name,
|
||||
GType src_type,
|
||||
GType dest_type)
|
||||
{
|
||||
if (!g_value_type_transformable (src_type, dest_type))
|
||||
{
|
||||
g_warning ("Cannot transform xsetting %s of type %s to type %s\n",
|
||||
xsettings_name,
|
||||
g_type_name (src_type),
|
||||
g_type_name (dest_type));
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_x11_screen_get_setting (GdkScreen *screen,
|
||||
const gchar *name,
|
||||
GValue *value)
|
||||
{
|
||||
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
|
||||
const char *xsettings_name = NULL;
|
||||
XSettingsResult result;
|
||||
XSettingsSetting *setting = NULL;
|
||||
gboolean success = FALSE;
|
||||
GValue tmp_val = G_VALUE_INIT;
|
||||
const GValue *setting;
|
||||
|
||||
xsettings_name = gdk_to_xsettings_name (name);
|
||||
if (!xsettings_name)
|
||||
if (x11_screen->xsettings == NULL)
|
||||
goto out;
|
||||
setting = g_hash_table_lookup (x11_screen->xsettings, name);
|
||||
if (setting == NULL)
|
||||
goto out;
|
||||
|
||||
result = xsettings_client_get_setting (x11_screen->xsettings_client,
|
||||
xsettings_name, &setting);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
goto out;
|
||||
|
||||
switch (setting->type)
|
||||
if (!g_value_type_transformable (G_VALUE_TYPE (setting), G_VALUE_TYPE (value)))
|
||||
{
|
||||
case XSETTINGS_TYPE_INT:
|
||||
if (check_transform (xsettings_name, G_TYPE_INT, G_VALUE_TYPE (value)))
|
||||
{
|
||||
g_value_init (&tmp_val, G_TYPE_INT);
|
||||
g_value_set_int (&tmp_val, setting->data.v_int);
|
||||
g_value_transform (&tmp_val, value);
|
||||
|
||||
success = TRUE;
|
||||
}
|
||||
break;
|
||||
case XSETTINGS_TYPE_STRING:
|
||||
if (check_transform (xsettings_name, G_TYPE_STRING, G_VALUE_TYPE (value)))
|
||||
{
|
||||
g_value_init (&tmp_val, G_TYPE_STRING);
|
||||
g_value_set_string (&tmp_val, setting->data.v_string);
|
||||
g_value_transform (&tmp_val, value);
|
||||
|
||||
success = TRUE;
|
||||
}
|
||||
break;
|
||||
case XSETTINGS_TYPE_COLOR:
|
||||
if (!check_transform (xsettings_name, GDK_TYPE_RGBA, G_VALUE_TYPE (value)))
|
||||
{
|
||||
GdkRGBA rgba;
|
||||
|
||||
g_value_init (&tmp_val, GDK_TYPE_RGBA);
|
||||
|
||||
rgba.red = setting->data.v_color.red / 65535.0;
|
||||
rgba.green = setting->data.v_color.green / 65535.0;
|
||||
rgba.blue = setting->data.v_color.blue / 65535.0;
|
||||
rgba.alpha = setting->data.v_color.alpha / 65535.0;
|
||||
|
||||
g_value_set_boxed (&tmp_val, &rgba);
|
||||
|
||||
g_value_transform (&tmp_val, value);
|
||||
|
||||
success = TRUE;
|
||||
}
|
||||
break;
|
||||
g_warning ("Cannot transform xsetting %s of type %s to type %s\n",
|
||||
name,
|
||||
g_type_name (G_VALUE_TYPE (setting)),
|
||||
g_type_name (G_VALUE_TYPE (value)));
|
||||
goto out;
|
||||
}
|
||||
|
||||
g_value_unset (&tmp_val);
|
||||
g_value_transform (setting, value);
|
||||
|
||||
return TRUE;
|
||||
|
||||
out:
|
||||
if (setting)
|
||||
xsettings_setting_free (setting);
|
||||
|
||||
if (success)
|
||||
return TRUE;
|
||||
else
|
||||
return _gdk_x11_get_xft_setting (screen, name, value);
|
||||
return _gdk_x11_get_xft_setting (screen, name, value);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1551,6 +1500,7 @@ gdk_x11_screen_supports_net_wm_hint (GdkScreen *screen,
|
||||
GdkX11Screen *x11_screen;
|
||||
NetWmSupportedAtoms *supported_atoms;
|
||||
GdkDisplay *display;
|
||||
Atom atom;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
|
||||
|
||||
@@ -1602,150 +1552,17 @@ gdk_x11_screen_supports_net_wm_hint (GdkScreen *screen,
|
||||
if (supported_atoms->atoms == NULL)
|
||||
return FALSE;
|
||||
|
||||
i = 0;
|
||||
while (i < supported_atoms->n_atoms)
|
||||
{
|
||||
if (supported_atoms->atoms[i] == gdk_x11_atom_to_xatom_for_display (display, property))
|
||||
return TRUE;
|
||||
atom = gdk_x11_atom_to_xatom_for_display (display, property);
|
||||
|
||||
++i;
|
||||
for (i = 0; i < supported_atoms->n_atoms; i++)
|
||||
{
|
||||
if (supported_atoms->atoms[i] == atom)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
refcounted_grab_server (Display *xdisplay)
|
||||
{
|
||||
GdkDisplay *display = gdk_x11_lookup_xdisplay (xdisplay);
|
||||
|
||||
gdk_x11_display_grab (display);
|
||||
}
|
||||
|
||||
static void
|
||||
refcounted_ungrab_server (Display *xdisplay)
|
||||
{
|
||||
GdkDisplay *display = gdk_x11_lookup_xdisplay (xdisplay);
|
||||
|
||||
gdk_x11_display_ungrab (display);
|
||||
}
|
||||
|
||||
static GdkFilterReturn
|
||||
gdk_xsettings_client_event_filter (GdkXEvent *xevent,
|
||||
GdkEvent *event,
|
||||
gpointer data)
|
||||
{
|
||||
GdkX11Screen *screen = data;
|
||||
|
||||
if (xsettings_client_process_event (screen->xsettings_client, (XEvent *)xevent))
|
||||
return GDK_FILTER_REMOVE;
|
||||
else
|
||||
return GDK_FILTER_CONTINUE;
|
||||
}
|
||||
|
||||
static Bool
|
||||
gdk_xsettings_watch_cb (Window window,
|
||||
Bool is_start,
|
||||
long mask,
|
||||
void *cb_data)
|
||||
{
|
||||
GdkWindow *gdkwin;
|
||||
GdkScreen *screen = cb_data;
|
||||
|
||||
gdkwin = gdk_x11_window_lookup_for_display (gdk_screen_get_display (screen), window);
|
||||
|
||||
if (is_start)
|
||||
{
|
||||
if (gdkwin)
|
||||
g_object_ref (gdkwin);
|
||||
else
|
||||
{
|
||||
gdkwin = gdk_x11_window_foreign_new_for_display (gdk_screen_get_display (screen), window);
|
||||
|
||||
/* gdk_window_foreign_new_for_display() can fail and return NULL if the
|
||||
* window has already been destroyed.
|
||||
*/
|
||||
if (!gdkwin)
|
||||
return False;
|
||||
}
|
||||
|
||||
gdk_window_add_filter (gdkwin, gdk_xsettings_client_event_filter, screen);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!gdkwin)
|
||||
{
|
||||
/* gdkwin should not be NULL here, since if starting the watch succeeded
|
||||
* we have a reference on the window. It might mean that the caller didn't
|
||||
* remove the watch when it got a DestroyNotify event. Or maybe the
|
||||
* caller ignored the return value when starting the watch failed.
|
||||
*/
|
||||
g_warning ("gdk_xsettings_watch_cb(): Couldn't find window to unwatch");
|
||||
return False;
|
||||
}
|
||||
|
||||
gdk_window_remove_filter (gdkwin, gdk_xsettings_client_event_filter, screen);
|
||||
g_object_unref (gdkwin);
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_xsettings_notify_cb (const char *name,
|
||||
XSettingsAction action,
|
||||
XSettingsSetting *setting,
|
||||
void *data)
|
||||
{
|
||||
GdkEvent new_event;
|
||||
GdkScreen *screen = data;
|
||||
GdkX11Screen *x11_screen = data;
|
||||
|
||||
if (x11_screen->xsettings_in_init)
|
||||
return;
|
||||
|
||||
new_event.type = GDK_SETTING;
|
||||
new_event.setting.window = gdk_screen_get_root_window (screen);
|
||||
new_event.setting.send_event = FALSE;
|
||||
new_event.setting.name = (char*) gdk_from_xsettings_name (name);
|
||||
|
||||
if (!new_event.setting.name)
|
||||
return;
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case XSETTINGS_ACTION_NEW:
|
||||
new_event.setting.action = GDK_SETTING_ACTION_NEW;
|
||||
break;
|
||||
case XSETTINGS_ACTION_CHANGED:
|
||||
new_event.setting.action = GDK_SETTING_ACTION_CHANGED;
|
||||
break;
|
||||
case XSETTINGS_ACTION_DELETED:
|
||||
new_event.setting.action = GDK_SETTING_ACTION_DELETED;
|
||||
break;
|
||||
}
|
||||
|
||||
gdk_event_put (&new_event);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_x11_screen_init_events (GdkScreen *screen)
|
||||
{
|
||||
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
|
||||
|
||||
/* Keep a flag to avoid extra notifies that we don't need
|
||||
*/
|
||||
x11_screen->xsettings_in_init = TRUE;
|
||||
x11_screen->xsettings_client = xsettings_client_new_with_grab_funcs (x11_screen->xdisplay,
|
||||
x11_screen->screen_num,
|
||||
gdk_xsettings_notify_cb,
|
||||
gdk_xsettings_watch_cb,
|
||||
screen,
|
||||
refcounted_grab_server,
|
||||
refcounted_ungrab_server);
|
||||
x11_screen->xsettings_in_init = FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_screen_get_window_manager_name:
|
||||
* @screen: (type GdkX11Screen): a #GdkScreen
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include "gdkscreenprivate.h"
|
||||
#include "gdkx11screen.h"
|
||||
#include "gdkvisual.h"
|
||||
#include "xsettings-client.h"
|
||||
#include <X11/X.h>
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
@@ -48,6 +47,9 @@ struct _GdkX11Screen
|
||||
GdkX11Monitor *monitors;
|
||||
gint primary_monitor;
|
||||
|
||||
gint width;
|
||||
gint height;
|
||||
|
||||
/* Xft resources for the display, used for default values for
|
||||
* the Xft/ XSETTINGS
|
||||
*/
|
||||
@@ -56,11 +58,15 @@ struct _GdkX11Screen
|
||||
gint xft_dpi;
|
||||
|
||||
/* Window manager */
|
||||
GdkAtom cm_selection_atom;
|
||||
long last_wmspec_check_time;
|
||||
Window wmspec_check_window;
|
||||
char *window_manager_name;
|
||||
|
||||
/* X Settings */
|
||||
GdkWindow *xsettings_manager_window;
|
||||
Atom xsettings_selection_atom;
|
||||
GHashTable *xsettings; /* string of GDK settings name => GValue */
|
||||
|
||||
/* TRUE if wmspec_check_window has changed since last
|
||||
* fetch of _NET_SUPPORTED
|
||||
*/
|
||||
@@ -69,7 +75,6 @@ struct _GdkX11Screen
|
||||
* fetch of window manager name
|
||||
*/
|
||||
guint need_refetch_wm_name : 1;
|
||||
guint xsettings_in_init : 1;
|
||||
guint is_composited : 1;
|
||||
guint xft_init : 1; /* Whether we've intialized these values yet */
|
||||
guint xft_antialias : 1;
|
||||
@@ -86,9 +91,6 @@ struct _GdkX11Screen
|
||||
GHashTable *visual_hash;
|
||||
GdkVisual *rgba_visual;
|
||||
|
||||
/* X settings */
|
||||
XSettingsClient *xsettings_client;
|
||||
|
||||
/* cache for window->translate vfunc */
|
||||
GC subwindow_gcs[32];
|
||||
|
||||
|
||||
@@ -97,20 +97,3 @@ gdk_from_xsettings_name (const char *xname)
|
||||
return g_hash_table_lookup (hash, xname);
|
||||
}
|
||||
|
||||
static const char *
|
||||
gdk_to_xsettings_name (const char *gdkname)
|
||||
{
|
||||
static GHashTable *hash = NULL;
|
||||
guint i;
|
||||
|
||||
if (G_UNLIKELY (hash == NULL))
|
||||
{
|
||||
hash = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (gdk_settings_map); i++)
|
||||
g_hash_table_insert (hash, (gpointer)gdk_settings_map[i].gdkname,
|
||||
(gpointer)gdk_settings_map[i].xname);
|
||||
}
|
||||
|
||||
return g_hash_table_lookup (hash, gdkname);
|
||||
}
|
||||
|
||||
@@ -87,12 +87,28 @@ gdk_x11_visual_finalize (GObject *object)
|
||||
G_OBJECT_CLASS (gdk_x11_visual_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_x11_visual_dispose (GObject *object)
|
||||
{
|
||||
GdkVisual *visual = (GdkVisual *)object;
|
||||
GdkX11Visual *x11_visual = (GdkX11Visual *)object;
|
||||
|
||||
if (x11_visual->colormap != None)
|
||||
{
|
||||
XFreeColormap (GDK_SCREEN_XDISPLAY (visual->screen), x11_visual->colormap);
|
||||
x11_visual->colormap = None;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (gdk_x11_visual_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_x11_visual_class_init (GdkX11VisualClass *class)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
||||
|
||||
object_class->finalize = gdk_x11_visual_finalize;
|
||||
object_class->dispose = gdk_x11_visual_dispose;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -157,6 +157,7 @@ gdk_window_impl_x11_init (GdkWindowImplX11 *impl)
|
||||
impl->toplevel_window_type = -1;
|
||||
impl->device_cursor = g_hash_table_new_full (NULL, NULL,
|
||||
NULL, g_object_unref);
|
||||
impl->frame_sync_enabled = TRUE;
|
||||
}
|
||||
|
||||
GdkToplevelX11 *
|
||||
@@ -403,7 +404,8 @@ gdk_x11_window_end_frame (GdkWindow *window)
|
||||
impl->toplevel->extended_update_counter,
|
||||
impl->toplevel->current_counter_value);
|
||||
|
||||
if (gdk_x11_screen_supports_net_wm_hint (gdk_window_get_screen (window),
|
||||
if (impl->frame_sync_enabled &&
|
||||
gdk_x11_screen_supports_net_wm_hint (gdk_window_get_screen (window),
|
||||
gdk_atom_intern_static_string ("_NET_WM_FRAME_DRAWN")))
|
||||
{
|
||||
impl->toplevel->frame_pending = TRUE;
|
||||
@@ -1077,15 +1079,15 @@ _gdk_x11_display_create_window_impl (GdkDisplay *display,
|
||||
class = InputOnly;
|
||||
}
|
||||
|
||||
if (window->width > 65535 ||
|
||||
window->height > 65535)
|
||||
if (window->width > 32767 ||
|
||||
window->height > 32767)
|
||||
{
|
||||
g_warning ("Native Windows wider or taller than 65535 pixels are not supported");
|
||||
g_warning ("Native Windows wider or taller than 32767 pixels are not supported");
|
||||
|
||||
if (window->width > 65535)
|
||||
window->width = 65535;
|
||||
if (window->height > 65535)
|
||||
window->height = 65535;
|
||||
if (window->width > 32767)
|
||||
window->width = 32767;
|
||||
if (window->height > 32767)
|
||||
window->height = 32767;
|
||||
}
|
||||
|
||||
impl->xid = XCreateWindow (xdisplay, xparent,
|
||||
@@ -5306,6 +5308,37 @@ gdk_x11_window_get_xid (GdkWindow *window)
|
||||
return GDK_WINDOW_IMPL_X11 (window->impl)->xid;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_window_set_frame_sync_enabled:
|
||||
* @window: (type GdkX11Window): a native #GdkWindow
|
||||
* @frame_sync_enabled: whether frame-synchronization should be enabled
|
||||
*
|
||||
* This function can be used to disable frame synchronization for a window.
|
||||
* Normally frame synchronziation will be enabled or disabled based on whether
|
||||
* the system has a compositor that supports frame synchronization, but if
|
||||
* the window is not directly managed by the window manager, then frame
|
||||
* synchronziation may need to be disabled. This is the case for a window
|
||||
* embedded via the XEMBED protocol.
|
||||
*
|
||||
* Since: 3.8
|
||||
*/
|
||||
void
|
||||
gdk_x11_window_set_frame_sync_enabled (GdkWindow *window,
|
||||
gboolean frame_sync_enabled)
|
||||
{
|
||||
/* Try to ensure the window has a native window */
|
||||
if (!_gdk_window_has_impl (window))
|
||||
gdk_window_ensure_native (window);
|
||||
|
||||
if (!GDK_WINDOW_IS_X11 (window))
|
||||
{
|
||||
g_warning (G_STRLOC " drawable is not a native X11 window");
|
||||
return;
|
||||
}
|
||||
|
||||
GDK_WINDOW_IMPL_X11 (window->impl)->frame_sync_enabled = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass)
|
||||
{
|
||||
|
||||
@@ -73,6 +73,7 @@ struct _GdkWindowImplX11
|
||||
* unset during resizing and scaling */
|
||||
guint override_redirect : 1;
|
||||
guint frame_clock_connected : 1;
|
||||
guint frame_sync_enabled : 1;
|
||||
|
||||
cairo_surface_t *cairo_surface;
|
||||
|
||||
@@ -172,6 +173,8 @@ GType gdk_window_impl_x11_get_type (void);
|
||||
|
||||
void gdk_x11_window_set_user_time (GdkWindow *window,
|
||||
guint32 timestamp);
|
||||
void gdk_x11_window_set_frame_sync_enabled (GdkWindow *window,
|
||||
gboolean frame_sync_enabled);
|
||||
|
||||
GdkToplevelX11 *_gdk_x11_window_get_toplevel (GdkWindow *window);
|
||||
void _gdk_x11_window_tmp_unset_bg (GdkWindow *window,
|
||||
|
||||
@@ -55,6 +55,7 @@ GType gdk_x11_window_get_type (void);
|
||||
Window gdk_x11_window_get_xid (GdkWindow *window);
|
||||
void gdk_x11_window_set_user_time (GdkWindow *window,
|
||||
guint32 timestamp);
|
||||
GDK_AVAILABLE_IN_3_4
|
||||
void gdk_x11_window_set_utf8_property (GdkWindow *window,
|
||||
const gchar *name,
|
||||
const gchar *value);
|
||||
@@ -66,6 +67,10 @@ void gdk_x11_window_set_hide_titlebar_when_maximized (GdkWindow *window,
|
||||
gboolean hide_titlebar_when_maximized);
|
||||
void gdk_x11_window_move_to_current_desktop (GdkWindow *window);
|
||||
|
||||
GDK_AVAILABLE_IN_3_8
|
||||
void gdk_x11_window_set_frame_sync_enabled (GdkWindow *window,
|
||||
gboolean frame_sync_enabled);
|
||||
|
||||
/**
|
||||
* GDK_WINDOW_XDISPLAY:
|
||||
* @win: a #GdkWindow.
|
||||
|
||||
@@ -25,58 +25,102 @@
|
||||
|
||||
#include "xsettings-client.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <gdk/x11/gdkx11display.h>
|
||||
#include <gdk/x11/gdkx11property.h>
|
||||
#include <gdk/x11/gdkx11screen.h>
|
||||
#include <gdk/x11/gdkx11window.h>
|
||||
#include <gdk/x11/gdkprivate-x11.h>
|
||||
#include <gdk/x11/gdkscreen-x11.h>
|
||||
|
||||
#include <gdkinternals.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xmd.h> /* For CARD16 */
|
||||
|
||||
struct _XSettingsClient
|
||||
#include "gdksettings.c"
|
||||
|
||||
/* Types of settings possible. Enum values correspond to
|
||||
* protocol values.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
Display *display;
|
||||
int screen;
|
||||
XSettingsNotifyFunc notify;
|
||||
XSettingsWatchFunc watch;
|
||||
void *cb_data;
|
||||
XSETTINGS_TYPE_INT = 0,
|
||||
XSETTINGS_TYPE_STRING = 1,
|
||||
XSETTINGS_TYPE_COLOR = 2
|
||||
} XSettingsType;
|
||||
|
||||
XSettingsGrabFunc grab;
|
||||
XSettingsGrabFunc ungrab;
|
||||
typedef struct _XSettingsBuffer XSettingsBuffer;
|
||||
|
||||
Window manager_window;
|
||||
Atom manager_atom;
|
||||
Atom selection_atom;
|
||||
Atom xsettings_atom;
|
||||
|
||||
XSettingsList *settings;
|
||||
struct _XSettingsBuffer
|
||||
{
|
||||
char byte_order;
|
||||
size_t len;
|
||||
unsigned char *data;
|
||||
unsigned char *pos;
|
||||
};
|
||||
|
||||
static void
|
||||
notify_changes (XSettingsClient *client,
|
||||
XSettingsList *old_list)
|
||||
gdk_xsettings_notify (GdkX11Screen *x11_screen,
|
||||
const char *name,
|
||||
GdkSettingAction action)
|
||||
{
|
||||
GdkEvent new_event;
|
||||
|
||||
new_event.type = GDK_SETTING;
|
||||
new_event.setting.window = gdk_screen_get_root_window (GDK_SCREEN (x11_screen));
|
||||
new_event.setting.send_event = FALSE;
|
||||
new_event.setting.action = action;
|
||||
new_event.setting.name = (char*) name;
|
||||
|
||||
gdk_event_put (&new_event);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
value_equal (const GValue *value_a,
|
||||
const GValue *value_b)
|
||||
{
|
||||
if (G_VALUE_TYPE (value_a) != G_VALUE_TYPE (value_b))
|
||||
return FALSE;
|
||||
|
||||
switch (G_VALUE_TYPE (value_a))
|
||||
{
|
||||
case G_TYPE_INT:
|
||||
return g_value_get_int (value_a) == g_value_get_int (value_b);
|
||||
case XSETTINGS_TYPE_COLOR:
|
||||
return gdk_rgba_equal (g_value_get_boxed (value_a), g_value_get_boxed (value_b));
|
||||
case G_TYPE_STRING:
|
||||
return g_str_equal (g_value_get_string (value_a), g_value_get_string (value_b));
|
||||
default:
|
||||
g_warning ("unable to compare values of type %s", g_type_name (G_VALUE_TYPE (value_a)));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
notify_changes (GdkX11Screen *x11_screen,
|
||||
GHashTable *old_list)
|
||||
{
|
||||
GHashTableIter iter;
|
||||
XSettingsSetting *setting, *old_setting;
|
||||
GValue *setting, *old_setting;
|
||||
const char *name;
|
||||
|
||||
if (!client->notify)
|
||||
return;
|
||||
|
||||
if (client->settings != NULL)
|
||||
if (x11_screen->xsettings != NULL)
|
||||
{
|
||||
g_hash_table_iter_init (&iter, client->settings);
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &setting))
|
||||
g_hash_table_iter_init (&iter, x11_screen->xsettings);
|
||||
while (g_hash_table_iter_next (&iter, (gpointer *) &name, (gpointer*) &setting))
|
||||
{
|
||||
old_setting = xsettings_list_lookup (old_list, setting->name);
|
||||
old_setting = old_list ? g_hash_table_lookup (old_list, name) : NULL;
|
||||
|
||||
if (old_setting == NULL)
|
||||
client->notify (setting->name, XSETTINGS_ACTION_NEW, setting, client->cb_data);
|
||||
else if (!xsettings_setting_equal (setting, old_setting))
|
||||
client->notify (setting->name, XSETTINGS_ACTION_CHANGED, setting, client->cb_data);
|
||||
gdk_xsettings_notify (x11_screen, name, GDK_SETTING_ACTION_NEW);
|
||||
else if (!value_equal (setting, old_setting))
|
||||
gdk_xsettings_notify (x11_screen, name, GDK_SETTING_ACTION_CHANGED);
|
||||
|
||||
/* remove setting from old_list */
|
||||
if (old_setting != NULL)
|
||||
g_hash_table_remove (old_list, setting->name);
|
||||
g_hash_table_remove (old_list, name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,270 +128,275 @@ notify_changes (XSettingsClient *client,
|
||||
{
|
||||
/* old_list now contains only deleted settings */
|
||||
g_hash_table_iter_init (&iter, old_list);
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &old_setting))
|
||||
client->notify (old_setting->name, XSETTINGS_ACTION_DELETED, NULL, client->cb_data);
|
||||
while (g_hash_table_iter_next (&iter, (gpointer *) &name, (gpointer*) &old_setting))
|
||||
gdk_xsettings_notify (x11_screen, name, GDK_SETTING_ACTION_DELETED);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
ignore_errors (Display *display, XErrorEvent *event)
|
||||
{
|
||||
return True;
|
||||
}
|
||||
|
||||
static char local_byte_order = '\0';
|
||||
|
||||
#define BYTES_LEFT(buffer) ((buffer)->data + (buffer)->len - (buffer)->pos)
|
||||
|
||||
static XSettingsResult
|
||||
#define return_if_fail_bytes(buffer, n_bytes) G_STMT_START{ \
|
||||
if (BYTES_LEFT (buffer) < (n_bytes)) \
|
||||
{ \
|
||||
g_warning ("Invalid XSETTINGS property (read off end: Expected %u bytes, only %ld left", \
|
||||
(n_bytes), BYTES_LEFT (buffer)); \
|
||||
return FALSE; \
|
||||
} \
|
||||
}G_STMT_END
|
||||
|
||||
static gboolean
|
||||
fetch_card16 (XSettingsBuffer *buffer,
|
||||
CARD16 *result)
|
||||
{
|
||||
CARD16 x;
|
||||
|
||||
if (BYTES_LEFT (buffer) < 2)
|
||||
return XSETTINGS_ACCESS;
|
||||
return_if_fail_bytes (buffer, 2);
|
||||
|
||||
x = *(CARD16 *)buffer->pos;
|
||||
buffer->pos += 2;
|
||||
|
||||
if (buffer->byte_order == local_byte_order)
|
||||
*result = x;
|
||||
if (buffer->byte_order == MSBFirst)
|
||||
*result = GUINT16_FROM_BE (x);
|
||||
else
|
||||
*result = (x << 8) | (x >> 8);
|
||||
*result = GUINT16_FROM_LE (x);
|
||||
|
||||
return XSETTINGS_SUCCESS;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static XSettingsResult
|
||||
static gboolean
|
||||
fetch_ushort (XSettingsBuffer *buffer,
|
||||
unsigned short *result)
|
||||
{
|
||||
CARD16 x;
|
||||
XSettingsResult r;
|
||||
gboolean r;
|
||||
|
||||
r = fetch_card16 (buffer, &x);
|
||||
if (r == XSETTINGS_SUCCESS)
|
||||
if (r)
|
||||
*result = x;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static XSettingsResult
|
||||
static gboolean
|
||||
fetch_card32 (XSettingsBuffer *buffer,
|
||||
CARD32 *result)
|
||||
{
|
||||
CARD32 x;
|
||||
|
||||
if (BYTES_LEFT (buffer) < 4)
|
||||
return XSETTINGS_ACCESS;
|
||||
return_if_fail_bytes (buffer, 4);
|
||||
|
||||
x = *(CARD32 *)buffer->pos;
|
||||
buffer->pos += 4;
|
||||
|
||||
if (buffer->byte_order == local_byte_order)
|
||||
*result = x;
|
||||
if (buffer->byte_order == MSBFirst)
|
||||
*result = GUINT32_FROM_BE (x);
|
||||
else
|
||||
*result = (x << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | (x >> 24);
|
||||
*result = GUINT32_FROM_LE (x);
|
||||
|
||||
return XSETTINGS_SUCCESS;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static XSettingsResult
|
||||
static gboolean
|
||||
fetch_card8 (XSettingsBuffer *buffer,
|
||||
CARD8 *result)
|
||||
{
|
||||
if (BYTES_LEFT (buffer) < 1)
|
||||
return XSETTINGS_ACCESS;
|
||||
return_if_fail_bytes (buffer, 1);
|
||||
|
||||
*result = *(CARD8 *)buffer->pos;
|
||||
buffer->pos += 1;
|
||||
|
||||
return XSETTINGS_SUCCESS;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#define XSETTINGS_PAD(n,m) ((n + m - 1) & (~(m-1)))
|
||||
|
||||
static XSettingsList *
|
||||
static gboolean
|
||||
fetch_string (XSettingsBuffer *buffer,
|
||||
guint length,
|
||||
char **result)
|
||||
{
|
||||
guint pad_len;
|
||||
|
||||
pad_len = XSETTINGS_PAD (length, 4);
|
||||
if (pad_len < length) /* guard against overflow */
|
||||
{
|
||||
g_warning ("Invalid XSETTINGS property (overflow in string length)");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return_if_fail_bytes (buffer, pad_len);
|
||||
|
||||
*result = g_strndup ((char *) buffer->pos, length);
|
||||
buffer->pos += pad_len;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
free_value (gpointer data)
|
||||
{
|
||||
GValue *value = data;
|
||||
|
||||
g_value_unset (value);
|
||||
g_free (value);
|
||||
}
|
||||
|
||||
static GHashTable *
|
||||
parse_settings (unsigned char *data,
|
||||
size_t len)
|
||||
{
|
||||
XSettingsBuffer buffer;
|
||||
XSettingsResult result = XSETTINGS_SUCCESS;
|
||||
XSettingsList *settings = NULL;
|
||||
GHashTable *settings = NULL;
|
||||
CARD32 serial;
|
||||
CARD32 n_entries;
|
||||
CARD32 i;
|
||||
XSettingsSetting *setting = NULL;
|
||||
GValue *value = NULL;
|
||||
char *x_name = NULL;
|
||||
const char *gdk_name;
|
||||
|
||||
local_byte_order = xsettings_byte_order ();
|
||||
|
||||
buffer.pos = buffer.data = data;
|
||||
buffer.len = len;
|
||||
|
||||
result = fetch_card8 (&buffer, (unsigned char *)&buffer.byte_order);
|
||||
if (!fetch_card8 (&buffer, (unsigned char *)&buffer.byte_order))
|
||||
goto out;
|
||||
|
||||
if (buffer.byte_order != MSBFirst &&
|
||||
buffer.byte_order != LSBFirst)
|
||||
{
|
||||
fprintf (stderr, "Invalid byte order in XSETTINGS property\n");
|
||||
result = XSETTINGS_FAILED;
|
||||
g_warning ("Invalid XSETTINGS property (unknown byte order %u)", buffer.byte_order);
|
||||
goto out;
|
||||
}
|
||||
|
||||
buffer.pos += 3;
|
||||
|
||||
result = fetch_card32 (&buffer, &serial);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
if (!fetch_card32 (&buffer, &serial) ||
|
||||
!fetch_card32 (&buffer, &n_entries))
|
||||
goto out;
|
||||
|
||||
result = fetch_card32 (&buffer, &n_entries);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
goto out;
|
||||
GDK_NOTE(SETTINGS, g_print("reading %u settings (serial %u byte order %u)\n", n_entries, serial, buffer.byte_order));
|
||||
|
||||
for (i = 0; i < n_entries; i++)
|
||||
{
|
||||
CARD8 type;
|
||||
CARD16 name_len;
|
||||
CARD32 v_int;
|
||||
size_t pad_len;
|
||||
|
||||
result = fetch_card8 (&buffer, &type);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
if (!fetch_card8 (&buffer, &type))
|
||||
goto out;
|
||||
|
||||
buffer.pos += 1;
|
||||
|
||||
result = fetch_card16 (&buffer, &name_len);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
if (!fetch_card16 (&buffer, &name_len))
|
||||
goto out;
|
||||
|
||||
pad_len = XSETTINGS_PAD(name_len, 4);
|
||||
if (BYTES_LEFT (&buffer) < pad_len)
|
||||
{
|
||||
result = XSETTINGS_ACCESS;
|
||||
goto out;
|
||||
}
|
||||
|
||||
setting = malloc (sizeof *setting);
|
||||
if (!setting)
|
||||
{
|
||||
result = XSETTINGS_NO_MEM;
|
||||
goto out;
|
||||
}
|
||||
setting->type = XSETTINGS_TYPE_INT; /* No allocated memory */
|
||||
|
||||
setting->name = malloc (name_len + 1);
|
||||
if (!setting->name)
|
||||
{
|
||||
result = XSETTINGS_NO_MEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
memcpy (setting->name, buffer.pos, name_len);
|
||||
setting->name[name_len] = '\0';
|
||||
buffer.pos += pad_len;
|
||||
|
||||
result = fetch_card32 (&buffer, &v_int);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
if (!fetch_string (&buffer, name_len, &x_name) ||
|
||||
/* last change serial (we ignore it) */
|
||||
!fetch_card32 (&buffer, &v_int))
|
||||
goto out;
|
||||
setting->last_change_serial = v_int;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case XSETTINGS_TYPE_INT:
|
||||
result = fetch_card32 (&buffer, &v_int);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
if (!fetch_card32 (&buffer, &v_int))
|
||||
goto out;
|
||||
|
||||
setting->data.v_int = (INT32)v_int;
|
||||
value = g_new0 (GValue, 1);
|
||||
g_value_init (value, G_TYPE_INT);
|
||||
g_value_set_int (value, (gint32) v_int);
|
||||
|
||||
GDK_NOTE(SETTINGS, g_print(" %s = %d\n", x_name, (gint32) v_int));
|
||||
break;
|
||||
case XSETTINGS_TYPE_STRING:
|
||||
result = fetch_card32 (&buffer, &v_int);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
goto out;
|
||||
{
|
||||
char *s;
|
||||
|
||||
pad_len = XSETTINGS_PAD (v_int, 4);
|
||||
if (v_int + 1 == 0 || /* Guard against wrap-around */
|
||||
BYTES_LEFT (&buffer) < pad_len)
|
||||
{
|
||||
result = XSETTINGS_ACCESS;
|
||||
goto out;
|
||||
}
|
||||
|
||||
setting->data.v_string = malloc (v_int + 1);
|
||||
if (!setting->data.v_string)
|
||||
{
|
||||
result = XSETTINGS_NO_MEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
memcpy (setting->data.v_string, buffer.pos, v_int);
|
||||
setting->data.v_string[v_int] = '\0';
|
||||
buffer.pos += pad_len;
|
||||
if (!fetch_card32 (&buffer, &v_int) ||
|
||||
!fetch_string (&buffer, v_int, &s))
|
||||
goto out;
|
||||
|
||||
value = g_new0 (GValue, 1);
|
||||
g_value_init (value, G_TYPE_STRING);
|
||||
g_value_take_string (value, s);
|
||||
|
||||
GDK_NOTE(SETTINGS, g_print(" %s = \"%s\"\n", x_name, s));
|
||||
}
|
||||
break;
|
||||
case XSETTINGS_TYPE_COLOR:
|
||||
result = fetch_ushort (&buffer, &setting->data.v_color.red);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
goto out;
|
||||
result = fetch_ushort (&buffer, &setting->data.v_color.green);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
goto out;
|
||||
result = fetch_ushort (&buffer, &setting->data.v_color.blue);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
goto out;
|
||||
result = fetch_ushort (&buffer, &setting->data.v_color.alpha);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
goto out;
|
||||
{
|
||||
unsigned short red, green, blue, alpha;
|
||||
GdkRGBA rgba;
|
||||
|
||||
if (!fetch_ushort (&buffer, &red) ||
|
||||
!fetch_ushort (&buffer, &green) ||
|
||||
!fetch_ushort (&buffer, &blue) ||
|
||||
!fetch_ushort (&buffer, &alpha))
|
||||
goto out;
|
||||
|
||||
rgba.red = red / 65535.0;
|
||||
rgba.green = green / 65535.0;
|
||||
rgba.blue = blue / 65535.0;
|
||||
rgba.alpha = alpha / 65535.0;
|
||||
|
||||
value = g_new0 (GValue, 1);
|
||||
g_value_init (value, G_TYPE_STRING);
|
||||
g_value_set_boxed (value, &rgba);
|
||||
|
||||
GDK_NOTE(SETTINGS, g_print(" %s = #%02X%02X%02X%02X\n", x_name, alpha,red, green, blue));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* Quietly ignore unknown types */
|
||||
GDK_NOTE(SETTINGS, g_print(" %s = ignored (unknown type %u)\n", x_name, type));
|
||||
break;
|
||||
}
|
||||
|
||||
setting->type = type;
|
||||
gdk_name = gdk_from_xsettings_name (x_name);
|
||||
g_free (x_name);
|
||||
x_name = NULL;
|
||||
|
||||
result = xsettings_list_insert (&settings, setting);
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
goto out;
|
||||
if (gdk_name == NULL)
|
||||
{
|
||||
GDK_NOTE(SETTINGS, g_print(" ==> unknown to GTK\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
GDK_NOTE(SETTINGS, g_print(" ==> storing as '%s'\n", gdk_name));
|
||||
|
||||
setting = NULL;
|
||||
}
|
||||
if (settings == NULL)
|
||||
settings = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
NULL,
|
||||
free_value);
|
||||
|
||||
out:
|
||||
if (g_hash_table_lookup (settings, gdk_name) != NULL)
|
||||
{
|
||||
g_warning ("Invalid XSETTINGS property (Duplicate entry for '%s')", gdk_name);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (result != XSETTINGS_SUCCESS)
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
case XSETTINGS_NO_MEM:
|
||||
fprintf(stderr, "Out of memory reading XSETTINGS property\n");
|
||||
break;
|
||||
case XSETTINGS_ACCESS:
|
||||
fprintf(stderr, "Invalid XSETTINGS property (read off end)\n");
|
||||
break;
|
||||
case XSETTINGS_DUPLICATE_ENTRY:
|
||||
fprintf (stderr, "Duplicate XSETTINGS entry for '%s'\n", setting->name);
|
||||
case XSETTINGS_FAILED:
|
||||
case XSETTINGS_SUCCESS:
|
||||
case XSETTINGS_NO_ENTRY:
|
||||
break;
|
||||
}
|
||||
|
||||
if (setting)
|
||||
xsettings_setting_free (setting);
|
||||
|
||||
xsettings_list_free (settings);
|
||||
settings = NULL;
|
||||
g_hash_table_insert (settings, (gpointer) gdk_name, value);
|
||||
}
|
||||
|
||||
value = NULL;
|
||||
}
|
||||
|
||||
return settings;
|
||||
|
||||
out:
|
||||
|
||||
if (value)
|
||||
free_value (value);
|
||||
|
||||
if (settings)
|
||||
g_hash_table_unref (settings);
|
||||
|
||||
g_free (x_name);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
read_settings (XSettingsClient *client)
|
||||
read_settings (GdkX11Screen *x11_screen,
|
||||
gboolean do_notify)
|
||||
{
|
||||
Atom type;
|
||||
int format;
|
||||
@@ -356,234 +405,169 @@ read_settings (XSettingsClient *client)
|
||||
unsigned char *data;
|
||||
int result;
|
||||
|
||||
int (*old_handler) (Display *, XErrorEvent *);
|
||||
|
||||
XSettingsList *old_list = client->settings;
|
||||
GHashTable *old_list = x11_screen->xsettings;
|
||||
|
||||
client->settings = NULL;
|
||||
x11_screen->xsettings = NULL;
|
||||
|
||||
if (client->manager_window)
|
||||
if (x11_screen->xsettings_manager_window)
|
||||
{
|
||||
old_handler = XSetErrorHandler (ignore_errors);
|
||||
result = XGetWindowProperty (client->display, client->manager_window,
|
||||
client->xsettings_atom, 0, LONG_MAX,
|
||||
False, client->xsettings_atom,
|
||||
GdkDisplay *display = x11_screen->display;
|
||||
Atom xsettings_atom = gdk_x11_get_xatom_by_name_for_display (display, "_XSETTINGS_SETTINGS");
|
||||
|
||||
gdk_x11_display_error_trap_push (display);
|
||||
result = XGetWindowProperty (gdk_x11_display_get_xdisplay (display),
|
||||
gdk_x11_window_get_xid (x11_screen->xsettings_manager_window),
|
||||
xsettings_atom, 0, LONG_MAX,
|
||||
False, xsettings_atom,
|
||||
&type, &format, &n_items, &bytes_after, &data);
|
||||
XSetErrorHandler (old_handler);
|
||||
gdk_x11_display_error_trap_pop_ignored (display);
|
||||
|
||||
if (result == Success && type != None)
|
||||
{
|
||||
if (type != client->xsettings_atom)
|
||||
if (type != xsettings_atom)
|
||||
{
|
||||
fprintf (stderr, "Invalid type for XSETTINGS property");
|
||||
g_warning ("Invalid type for XSETTINGS property: %s", gdk_x11_get_xatom_name_for_display (display, type));
|
||||
}
|
||||
else if (format != 8)
|
||||
{
|
||||
fprintf (stderr, "Invalid format for XSETTINGS property %d", format);
|
||||
g_warning ("Invalid format for XSETTINGS property: %d", format);
|
||||
}
|
||||
else
|
||||
client->settings = parse_settings (data, n_items);
|
||||
x11_screen->xsettings = parse_settings (data, n_items);
|
||||
|
||||
XFree (data);
|
||||
}
|
||||
}
|
||||
|
||||
notify_changes (client, old_list);
|
||||
xsettings_list_free (old_list);
|
||||
if (do_notify)
|
||||
notify_changes (x11_screen, old_list);
|
||||
if (old_list)
|
||||
g_hash_table_unref (old_list);
|
||||
}
|
||||
|
||||
static void
|
||||
add_events (Display *display,
|
||||
Window window,
|
||||
long mask)
|
||||
static Atom
|
||||
get_selection_atom (GdkX11Screen *x11_screen)
|
||||
{
|
||||
XWindowAttributes attr;
|
||||
|
||||
XGetWindowAttributes (display, window, &attr);
|
||||
XSelectInput (display, window, attr.your_event_mask | mask);
|
||||
return _gdk_x11_get_xatom_for_display_printf (x11_screen->display, "_XSETTINGS_S%d", x11_screen->screen_num);
|
||||
}
|
||||
|
||||
static GdkFilterReturn
|
||||
gdk_xsettings_manager_window_filter (GdkXEvent *xevent,
|
||||
GdkEvent *event,
|
||||
gpointer data);
|
||||
|
||||
static void
|
||||
check_manager_window (XSettingsClient *client)
|
||||
check_manager_window (GdkX11Screen *x11_screen,
|
||||
gboolean notify_changes)
|
||||
{
|
||||
if (client->manager_window && client->watch)
|
||||
client->watch (client->manager_window, False, 0, client->cb_data);
|
||||
GdkDisplay *display;
|
||||
Display *xdisplay;
|
||||
Window manager_window_xid;
|
||||
|
||||
if (client->grab)
|
||||
client->grab (client->display);
|
||||
else
|
||||
XGrabServer (client->display);
|
||||
display = x11_screen->display;
|
||||
xdisplay = gdk_x11_display_get_xdisplay (display);
|
||||
|
||||
client->manager_window = XGetSelectionOwner (client->display,
|
||||
client->selection_atom);
|
||||
if (client->manager_window)
|
||||
XSelectInput (client->display, client->manager_window,
|
||||
PropertyChangeMask | StructureNotifyMask);
|
||||
|
||||
if (client->ungrab)
|
||||
client->ungrab (client->display);
|
||||
else
|
||||
XUngrabServer (client->display);
|
||||
|
||||
XFlush (client->display);
|
||||
|
||||
if (client->manager_window && client->watch)
|
||||
if (x11_screen->xsettings_manager_window)
|
||||
{
|
||||
if (!client->watch (client->manager_window, True,
|
||||
PropertyChangeMask | StructureNotifyMask,
|
||||
client->cb_data))
|
||||
{
|
||||
/* Inability to watch the window probably means that it was destroyed
|
||||
* after we ungrabbed
|
||||
*/
|
||||
client->manager_window = None;
|
||||
return;
|
||||
}
|
||||
gdk_window_remove_filter (x11_screen->xsettings_manager_window, gdk_xsettings_manager_window_filter, x11_screen);
|
||||
g_object_unref (x11_screen->xsettings_manager_window);
|
||||
}
|
||||
|
||||
gdk_x11_display_grab (display);
|
||||
|
||||
manager_window_xid = XGetSelectionOwner (xdisplay, get_selection_atom (x11_screen));
|
||||
x11_screen->xsettings_manager_window = gdk_x11_window_foreign_new_for_display (display,
|
||||
manager_window_xid);
|
||||
/* XXX: Can't use gdk_window_set_events() here because the first call to this
|
||||
* function happens too early in gdk_init() */
|
||||
if (x11_screen->xsettings_manager_window)
|
||||
XSelectInput (xdisplay,
|
||||
gdk_x11_window_get_xid (x11_screen->xsettings_manager_window),
|
||||
PropertyChangeMask | StructureNotifyMask);
|
||||
|
||||
gdk_x11_display_ungrab (display);
|
||||
|
||||
gdk_display_flush (display);
|
||||
|
||||
if (x11_screen->xsettings_manager_window)
|
||||
{
|
||||
gdk_window_add_filter (x11_screen->xsettings_manager_window, gdk_xsettings_manager_window_filter, x11_screen);
|
||||
}
|
||||
|
||||
|
||||
read_settings (client);
|
||||
read_settings (x11_screen, notify_changes);
|
||||
}
|
||||
|
||||
XSettingsClient *
|
||||
xsettings_client_new (Display *display,
|
||||
int screen,
|
||||
XSettingsNotifyFunc notify,
|
||||
XSettingsWatchFunc watch,
|
||||
void *cb_data)
|
||||
static GdkFilterReturn
|
||||
gdk_xsettings_root_window_filter (GdkXEvent *xevent,
|
||||
GdkEvent *event,
|
||||
gpointer data)
|
||||
{
|
||||
return xsettings_client_new_with_grab_funcs (display, screen, notify, watch, cb_data,
|
||||
NULL, NULL);
|
||||
}
|
||||
GdkX11Screen *x11_screen = data;
|
||||
GdkDisplay *display = x11_screen->display;
|
||||
XEvent *xev = xevent;
|
||||
|
||||
XSettingsClient *
|
||||
xsettings_client_new_with_grab_funcs (Display *display,
|
||||
int screen,
|
||||
XSettingsNotifyFunc notify,
|
||||
XSettingsWatchFunc watch,
|
||||
void *cb_data,
|
||||
XSettingsGrabFunc grab,
|
||||
XSettingsGrabFunc ungrab)
|
||||
{
|
||||
XSettingsClient *client;
|
||||
char buffer[256];
|
||||
char *atom_names[3];
|
||||
Atom atoms[3];
|
||||
|
||||
client = malloc (sizeof *client);
|
||||
if (!client)
|
||||
return NULL;
|
||||
|
||||
client->display = display;
|
||||
client->screen = screen;
|
||||
client->notify = notify;
|
||||
client->watch = watch;
|
||||
client->cb_data = cb_data;
|
||||
client->grab = grab;
|
||||
client->ungrab = ungrab;
|
||||
client->manager_window = None;
|
||||
client->settings = NULL;
|
||||
|
||||
sprintf(buffer, "_XSETTINGS_S%d", screen);
|
||||
atom_names[0] = buffer;
|
||||
atom_names[1] = "_XSETTINGS_SETTINGS";
|
||||
atom_names[2] = "MANAGER";
|
||||
|
||||
XInternAtoms (display, atom_names, 3, False, atoms);
|
||||
|
||||
client->selection_atom = atoms[0];
|
||||
client->xsettings_atom = atoms[1];
|
||||
client->manager_atom = atoms[2];
|
||||
|
||||
/* Select on StructureNotify so we get MANAGER events
|
||||
*/
|
||||
add_events (display, RootWindow (display, screen), StructureNotifyMask);
|
||||
|
||||
if (client->watch)
|
||||
client->watch (RootWindow (display, screen), True, StructureNotifyMask,
|
||||
client->cb_data);
|
||||
|
||||
check_manager_window (client);
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
xsettings_client_set_grab_func (XSettingsClient *client,
|
||||
XSettingsGrabFunc grab)
|
||||
{
|
||||
client->grab = grab;
|
||||
}
|
||||
|
||||
void
|
||||
xsettings_client_set_ungrab_func (XSettingsClient *client,
|
||||
XSettingsGrabFunc ungrab)
|
||||
{
|
||||
client->ungrab = ungrab;
|
||||
}
|
||||
|
||||
void
|
||||
xsettings_client_destroy (XSettingsClient *client)
|
||||
{
|
||||
if (client->watch)
|
||||
client->watch (RootWindow (client->display, client->screen),
|
||||
False, 0, client->cb_data);
|
||||
if (client->manager_window && client->watch)
|
||||
client->watch (client->manager_window, False, 0, client->cb_data);
|
||||
|
||||
xsettings_list_free (client->settings);
|
||||
free (client);
|
||||
}
|
||||
|
||||
XSettingsResult
|
||||
xsettings_client_get_setting (XSettingsClient *client,
|
||||
const char *name,
|
||||
XSettingsSetting **setting)
|
||||
{
|
||||
XSettingsSetting *search = xsettings_list_lookup (client->settings, name);
|
||||
if (search)
|
||||
{
|
||||
*setting = xsettings_setting_copy (search);
|
||||
return *setting ? XSETTINGS_SUCCESS : XSETTINGS_NO_MEM;
|
||||
}
|
||||
else
|
||||
return XSETTINGS_NO_ENTRY;
|
||||
}
|
||||
|
||||
Bool
|
||||
xsettings_client_process_event (XSettingsClient *client,
|
||||
XEvent *xev)
|
||||
{
|
||||
/* The checks here will not unlikely cause us to reread
|
||||
* the properties from the manager window a number of
|
||||
* times when the manager changes from A->B. But manager changes
|
||||
* are going to be pretty rare.
|
||||
*/
|
||||
if (xev->xany.window == RootWindow (client->display, client->screen))
|
||||
if (xev->xany.type == ClientMessage &&
|
||||
xev->xclient.message_type == gdk_x11_get_xatom_by_name_for_display (display, "MANAGER") &&
|
||||
xev->xclient.data.l[1] == get_selection_atom (x11_screen))
|
||||
{
|
||||
if (xev->xany.type == ClientMessage &&
|
||||
xev->xclient.message_type == client->manager_atom &&
|
||||
xev->xclient.data.l[1] == client->selection_atom)
|
||||
{
|
||||
check_manager_window (client);
|
||||
return True;
|
||||
}
|
||||
}
|
||||
else if (xev->xany.window == client->manager_window)
|
||||
{
|
||||
if (xev->xany.type == DestroyNotify)
|
||||
{
|
||||
check_manager_window (client);
|
||||
/* let GDK do its cleanup */
|
||||
return False;
|
||||
}
|
||||
else if (xev->xany.type == PropertyNotify)
|
||||
{
|
||||
read_settings (client);
|
||||
return True;
|
||||
}
|
||||
check_manager_window (x11_screen, TRUE);
|
||||
return GDK_FILTER_REMOVE;
|
||||
}
|
||||
|
||||
return False;
|
||||
return GDK_FILTER_CONTINUE;
|
||||
}
|
||||
|
||||
static GdkFilterReturn
|
||||
gdk_xsettings_manager_window_filter (GdkXEvent *xevent,
|
||||
GdkEvent *event,
|
||||
gpointer data)
|
||||
{
|
||||
GdkX11Screen *x11_screen = data;
|
||||
XEvent *xev = xevent;
|
||||
|
||||
if (xev->xany.type == DestroyNotify)
|
||||
{
|
||||
check_manager_window (x11_screen, TRUE);
|
||||
/* let GDK do its cleanup */
|
||||
return GDK_FILTER_CONTINUE;
|
||||
}
|
||||
else if (xev->xany.type == PropertyNotify)
|
||||
{
|
||||
read_settings (x11_screen, TRUE);
|
||||
return GDK_FILTER_REMOVE;
|
||||
}
|
||||
|
||||
return GDK_FILTER_CONTINUE;;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_x11_xsettings_init (GdkX11Screen *x11_screen)
|
||||
{
|
||||
gdk_window_add_filter (gdk_screen_get_root_window (GDK_SCREEN (x11_screen)), gdk_xsettings_root_window_filter, x11_screen);
|
||||
|
||||
check_manager_window (x11_screen, FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_x11_xsettings_finish (GdkX11Screen *x11_screen)
|
||||
{
|
||||
gdk_window_remove_filter (gdk_screen_get_root_window (GDK_SCREEN (x11_screen)), gdk_xsettings_root_window_filter, x11_screen);
|
||||
if (x11_screen->xsettings_manager_window)
|
||||
{
|
||||
gdk_window_remove_filter (x11_screen->xsettings_manager_window, gdk_xsettings_manager_window_filter, x11_screen);
|
||||
g_object_unref (x11_screen->xsettings_manager_window);
|
||||
x11_screen->xsettings_manager_window = NULL;
|
||||
}
|
||||
|
||||
if (x11_screen->xsettings)
|
||||
{
|
||||
g_hash_table_unref (x11_screen->xsettings);
|
||||
x11_screen->xsettings = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,57 +23,9 @@
|
||||
#ifndef XSETTINGS_CLIENT_H
|
||||
#define XSETTINGS_CLIENT_H
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include "xsettings-common.h"
|
||||
#include <gdk/x11/gdkx11screen.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef struct _XSettingsClient XSettingsClient;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
XSETTINGS_ACTION_NEW,
|
||||
XSETTINGS_ACTION_CHANGED,
|
||||
XSETTINGS_ACTION_DELETED
|
||||
} XSettingsAction;
|
||||
|
||||
typedef void (*XSettingsNotifyFunc) (const char *name,
|
||||
XSettingsAction action,
|
||||
XSettingsSetting *setting,
|
||||
void *cb_data);
|
||||
typedef Bool (*XSettingsWatchFunc) (Window window,
|
||||
Bool is_start,
|
||||
long mask,
|
||||
void *cb_data);
|
||||
typedef void (*XSettingsGrabFunc) (Display *display);
|
||||
|
||||
XSettingsClient *xsettings_client_new (Display *display,
|
||||
int screen,
|
||||
XSettingsNotifyFunc notify,
|
||||
XSettingsWatchFunc watch,
|
||||
void *cb_data);
|
||||
XSettingsClient *xsettings_client_new_with_grab_funcs (Display *display,
|
||||
int screen,
|
||||
XSettingsNotifyFunc notify,
|
||||
XSettingsWatchFunc watch,
|
||||
void *cb_data,
|
||||
XSettingsGrabFunc grab,
|
||||
XSettingsGrabFunc ungrab);
|
||||
void xsettings_client_set_grab_func (XSettingsClient *client,
|
||||
XSettingsGrabFunc grab);
|
||||
void xsettings_client_set_ungrab_func (XSettingsClient *client,
|
||||
XSettingsGrabFunc ungrab);
|
||||
void xsettings_client_destroy (XSettingsClient *client);
|
||||
Bool xsettings_client_process_event (XSettingsClient *client,
|
||||
XEvent *xev);
|
||||
XSettingsResult xsettings_client_get_setting (XSettingsClient *client,
|
||||
const char *name,
|
||||
XSettingsSetting **setting);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
void _gdk_x11_xsettings_init (GdkX11Screen *x11_screen);
|
||||
void _gdk_x11_xsettings_finish (GdkX11Screen *x11_screen);
|
||||
|
||||
#endif /* XSETTINGS_CLIENT_H */
|
||||
|
||||
@@ -1,158 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2001 Red Hat, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation, and that the name of Red Hat not be used in advertising or
|
||||
* publicity pertaining to distribution of the software without specific,
|
||||
* written prior permission. Red Hat makes no representations about the
|
||||
* suitability of this software for any purpose. It is provided "as is"
|
||||
* without express or implied warranty.
|
||||
*
|
||||
* RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL RED HAT
|
||||
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* Author: Owen Taylor, Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "xsettings-common.h"
|
||||
|
||||
#include "string.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xmd.h> /* For CARD32 */
|
||||
|
||||
XSettingsSetting *
|
||||
xsettings_setting_copy (XSettingsSetting *setting)
|
||||
{
|
||||
XSettingsSetting *result;
|
||||
size_t str_len;
|
||||
|
||||
result = malloc (sizeof *result);
|
||||
if (!result)
|
||||
return NULL;
|
||||
|
||||
str_len = strlen (setting->name);
|
||||
result->name = malloc (str_len + 1);
|
||||
if (!result->name)
|
||||
goto err;
|
||||
|
||||
memcpy (result->name, setting->name, str_len + 1);
|
||||
|
||||
result->type = setting->type;
|
||||
|
||||
switch (setting->type)
|
||||
{
|
||||
case XSETTINGS_TYPE_INT:
|
||||
result->data.v_int = setting->data.v_int;
|
||||
break;
|
||||
case XSETTINGS_TYPE_COLOR:
|
||||
result->data.v_color = setting->data.v_color;
|
||||
break;
|
||||
case XSETTINGS_TYPE_STRING:
|
||||
str_len = strlen (setting->data.v_string);
|
||||
result->data.v_string = malloc (str_len + 1);
|
||||
if (!result->data.v_string)
|
||||
goto err;
|
||||
|
||||
memcpy (result->data.v_string, setting->data.v_string, str_len + 1);
|
||||
break;
|
||||
}
|
||||
|
||||
result->last_change_serial = setting->last_change_serial;
|
||||
|
||||
return result;
|
||||
|
||||
err:
|
||||
if (result->name)
|
||||
free (result->name);
|
||||
free (result);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
xsettings_setting_equal (XSettingsSetting *setting_a,
|
||||
XSettingsSetting *setting_b)
|
||||
{
|
||||
if (setting_a->type != setting_b->type)
|
||||
return 0;
|
||||
|
||||
if (strcmp (setting_a->name, setting_b->name) != 0)
|
||||
return 0;
|
||||
|
||||
switch (setting_a->type)
|
||||
{
|
||||
case XSETTINGS_TYPE_INT:
|
||||
return setting_a->data.v_int == setting_b->data.v_int;
|
||||
case XSETTINGS_TYPE_COLOR:
|
||||
return (setting_a->data.v_color.red == setting_b->data.v_color.red &&
|
||||
setting_a->data.v_color.green == setting_b->data.v_color.green &&
|
||||
setting_a->data.v_color.blue == setting_b->data.v_color.blue &&
|
||||
setting_a->data.v_color.alpha == setting_b->data.v_color.alpha);
|
||||
case XSETTINGS_TYPE_STRING:
|
||||
return strcmp (setting_a->data.v_string, setting_b->data.v_string) == 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
xsettings_setting_free (XSettingsSetting *setting)
|
||||
{
|
||||
if (setting->type == XSETTINGS_TYPE_STRING)
|
||||
free (setting->data.v_string);
|
||||
|
||||
if (setting->name)
|
||||
free (setting->name);
|
||||
|
||||
free (setting);
|
||||
}
|
||||
|
||||
void
|
||||
xsettings_list_free (XSettingsList *list)
|
||||
{
|
||||
if (list != NULL)
|
||||
g_hash_table_destroy (list);
|
||||
}
|
||||
|
||||
XSettingsResult
|
||||
xsettings_list_insert (XSettingsList **list,
|
||||
XSettingsSetting *setting)
|
||||
{
|
||||
if (*list == NULL)
|
||||
*list = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
|
||||
(GDestroyNotify) xsettings_setting_free);
|
||||
|
||||
if (g_hash_table_lookup (*list, setting->name) != NULL)
|
||||
return XSETTINGS_DUPLICATE_ENTRY;
|
||||
|
||||
g_hash_table_insert (*list, setting->name, setting);
|
||||
return XSETTINGS_SUCCESS;
|
||||
}
|
||||
|
||||
XSettingsSetting *
|
||||
xsettings_list_lookup (XSettingsList *list,
|
||||
const char *name)
|
||||
{
|
||||
if (list == NULL)
|
||||
return NULL;
|
||||
|
||||
return g_hash_table_lookup (list, name);
|
||||
}
|
||||
|
||||
char
|
||||
xsettings_byte_order (void)
|
||||
{
|
||||
CARD32 myint = 0x01020304;
|
||||
return (*(char *)&myint == 1) ? MSBFirst : LSBFirst;
|
||||
}
|
||||
@@ -1,122 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2001 Red Hat, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation, and that the name of Red Hat not be used in advertising or
|
||||
* publicity pertaining to distribution of the software without specific,
|
||||
* written prior permission. Red Hat makes no representations about the
|
||||
* suitability of this software for any purpose. It is provided "as is"
|
||||
* without express or implied warranty.
|
||||
*
|
||||
* RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL RED HAT
|
||||
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* Author: Owen Taylor, Red Hat, Inc.
|
||||
*/
|
||||
#ifndef XSETTINGS_COMMON_H
|
||||
#define XSETTINGS_COMMON_H
|
||||
|
||||
#include <glib.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Renames for GDK inclusion */
|
||||
|
||||
#define xsettings_byte_order _gdk_x11_xsettings_byte_order
|
||||
#define xsettings_client_destroy _gdk_x11_xsettings_client_destroy
|
||||
#define xsettings_client_get_setting _gdk_x11_xsettings_client_get_setting
|
||||
#define xsettings_client_new _gdk_x11_xsettings_client_new
|
||||
#define xsettings_client_new_with_grab_funcs _gdk_x11_xsettings_client_new_with_grab_funcs
|
||||
#define xsettings_client_set_grab_func _gdk_x11_xsettings_client_set_grab_func
|
||||
#define xsettings_client_set_ungrab_func _gdk_x11_xsettings_client_set_ungrab_func
|
||||
#define xsettings_client_process_event _gdk_x11_xsettings_client_process_event
|
||||
#define xsettings_list_free _gdk_x11_xsettings_list_free
|
||||
#define xsettings_list_insert _gdk_x11_xsettings_list_insert
|
||||
#define xsettings_list_lookup _gdk_x11_xsettings_list_lookup
|
||||
#define xsettings_setting_copy _gdk_x11_xsettings_setting_copy
|
||||
#define xsettings_setting_equal _gdk_x11_xsettings_setting_equal
|
||||
#define xsettings_setting_free _gdk_x11_xsettings_setting_free
|
||||
|
||||
typedef GHashTable XSettingsList;
|
||||
|
||||
typedef struct _XSettingsBuffer XSettingsBuffer;
|
||||
typedef struct _XSettingsColor XSettingsColor;
|
||||
typedef struct _XSettingsSetting XSettingsSetting;
|
||||
|
||||
/* Types of settings possible. Enum values correspond to
|
||||
* protocol values.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
XSETTINGS_TYPE_INT = 0,
|
||||
XSETTINGS_TYPE_STRING = 1,
|
||||
XSETTINGS_TYPE_COLOR = 2
|
||||
} XSettingsType;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
XSETTINGS_SUCCESS,
|
||||
XSETTINGS_NO_MEM,
|
||||
XSETTINGS_ACCESS,
|
||||
XSETTINGS_FAILED,
|
||||
XSETTINGS_NO_ENTRY,
|
||||
XSETTINGS_DUPLICATE_ENTRY
|
||||
} XSettingsResult;
|
||||
|
||||
struct _XSettingsBuffer
|
||||
{
|
||||
char byte_order;
|
||||
size_t len;
|
||||
unsigned char *data;
|
||||
unsigned char *pos;
|
||||
};
|
||||
|
||||
struct _XSettingsColor
|
||||
{
|
||||
unsigned short red, green, blue, alpha;
|
||||
};
|
||||
|
||||
struct _XSettingsSetting
|
||||
{
|
||||
char *name;
|
||||
XSettingsType type;
|
||||
|
||||
union {
|
||||
int v_int;
|
||||
char *v_string;
|
||||
XSettingsColor v_color;
|
||||
} data;
|
||||
|
||||
unsigned long last_change_serial;
|
||||
};
|
||||
|
||||
XSettingsSetting *xsettings_setting_copy (XSettingsSetting *setting);
|
||||
void xsettings_setting_free (XSettingsSetting *setting);
|
||||
int xsettings_setting_equal (XSettingsSetting *setting_a,
|
||||
XSettingsSetting *setting_b);
|
||||
|
||||
void xsettings_list_free (XSettingsList *list);
|
||||
XSettingsResult xsettings_list_insert (XSettingsList **list,
|
||||
XSettingsSetting *setting);
|
||||
XSettingsSetting *xsettings_list_lookup (XSettingsList *list,
|
||||
const char *name);
|
||||
|
||||
char xsettings_byte_order (void);
|
||||
|
||||
#define XSETTINGS_PAD(n,m) ((n + m - 1) & (~(m-1)))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* XSETTINGS_COMMON_H */
|
||||
@@ -422,6 +422,7 @@ gtk_private_h_sources = \
|
||||
gtkbitmaskprivateimpl.h \
|
||||
gtkborderimageprivate.h \
|
||||
gtkboxprivate.h \
|
||||
gtkbubblewindowprivate.h \
|
||||
gtkbuilderprivate.h \
|
||||
gtkbuttonprivate.h \
|
||||
gtkcairoblurprivate.h \
|
||||
@@ -621,6 +622,7 @@ gtk_base_c_sources = \
|
||||
gtkborder.c \
|
||||
gtkborderimage.c \
|
||||
gtkbox.c \
|
||||
gtkbubblewindow.c \
|
||||
gtkbuildable.c \
|
||||
gtkbuilder.c \
|
||||
gtkbuilderparser.c \
|
||||
@@ -882,6 +884,7 @@ gtk_base_c_sources = \
|
||||
$(gtk_clipboard_dnd_c_sources) \
|
||||
$(gtk_appchooser_impl_c_sources)
|
||||
|
||||
nodist_gtk_c_sources =
|
||||
gtk_c_sources = $(gtk_base_c_sources)
|
||||
gtk_all_c_sources = $(gtk_base_c_sources)
|
||||
|
||||
@@ -894,6 +897,9 @@ $(gtk_dbus_built_sources) : Makefile.am gtkdbusinterfaces.xml
|
||||
--generate-c-code gtkdbusgenerated \
|
||||
$(srcdir)/gtkdbusinterfaces.xml
|
||||
|
||||
nodist_gtk_c_sources += $(gtk_dbus_built_sources)
|
||||
gtk_all_c_sources += $(gtk_dbus_built_sources)
|
||||
|
||||
gtk_os_unix_c_sources = \
|
||||
gtkcustompaperunixdialog.c \
|
||||
gtkpagesetupunixdialog.c \
|
||||
@@ -905,8 +911,7 @@ gtk_os_unix_c_sources = \
|
||||
gtkprintoperation-unix.c \
|
||||
gtkprintunixdialog.c \
|
||||
gtkprintbackend.c \
|
||||
gtksearchenginetracker.c \
|
||||
$(gtk_dbus_built_sources)
|
||||
gtksearchenginetracker.c
|
||||
gtk_all_c_sources += $(gtk_os_unix_c_sources)
|
||||
if OS_UNIX
|
||||
gtk_private_h_sources += \
|
||||
@@ -918,8 +923,6 @@ gtk_private_h_sources += \
|
||||
gtkprinteroptionwidget.h \
|
||||
gtksearchenginetracker.h
|
||||
gtk_c_sources += $(gtk_os_unix_c_sources)
|
||||
else
|
||||
gtk_c_sources += $(gtk_dbus_built_sources)
|
||||
endif
|
||||
|
||||
gtk_os_win32_c_sources = \
|
||||
@@ -1023,14 +1026,12 @@ gtk_built_public_sources = \
|
||||
|
||||
# built headers that don't get installed
|
||||
gtk_built_private_headers = \
|
||||
gtkdbusgenerated.h \
|
||||
gtkresources.h \
|
||||
gtkmarshalers.h \
|
||||
gtkbuiltincache.h \
|
||||
gtkprivatetypebuiltins.h
|
||||
|
||||
gtk_built_sources = \
|
||||
gtkdbusgenerated.c \
|
||||
gtkresources.c \
|
||||
gtktypebuiltins.c \
|
||||
gtktypefuncs.c \
|
||||
@@ -1067,6 +1068,7 @@ gtk_extra_sources = \
|
||||
#
|
||||
MAINTAINERCLEANFILES = \
|
||||
$(gtk_built_sources) \
|
||||
$(gtk_dbus_built_sources) \
|
||||
$(stamp_files) \
|
||||
$(GENERATED_ICONS) \
|
||||
stock-icons/icon-theme.cache
|
||||
@@ -1096,7 +1098,10 @@ DND_CURSORS = \
|
||||
gen_sources = xgen-gdef xgen-gtbh xgen-gtic xgen-gmh xgen-gmc xgen-gmlh xgen-gmlc xgen-gtfsrc.c xgen-gtf
|
||||
CLEANFILES = $(gen_sources)
|
||||
|
||||
BUILT_SOURCES = $(gtk_built_sources) stamp-icons
|
||||
BUILT_SOURCES = \
|
||||
$(gtk_built_sources) \
|
||||
$(gtk_dbus_built_sources) \
|
||||
stamp-icons
|
||||
|
||||
# all autogenerated files need to be generated in the srcdir,
|
||||
# so old versions get remade and are not confused with newer
|
||||
@@ -1173,6 +1178,7 @@ deprecatedinclude_HEADERS= $(deprecated_h_sources)
|
||||
gtkunixprintincludedir = $(includedir)/gtk-3.0/unix-print/gtk
|
||||
gtkunixprintinclude_HEADERS = $(gtk_unix_print_public_h_sources)
|
||||
|
||||
nodist_libgtk_3_la_SOURCES = $(nodist_gtk_c_sources)
|
||||
libgtk_3_la_SOURCES = $(gtk_c_sources)
|
||||
libgtk_3_la_LDFLAGS = $(libtool_opts)
|
||||
libgtk_3_la_LIBADD = $(libadd)
|
||||
@@ -1263,13 +1269,24 @@ LDADDS = \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
if HAVE_INTROSPECTION
|
||||
# The Quartz clipboard and dnd files aren't annotated for
|
||||
# introspection. Rather than copy the annotations over from the
|
||||
# regular files, exclude the quartz ones:
|
||||
introspection_files = \
|
||||
$(filter-out %private.h gtktextdisplay.h gtktextlayout.h, $(gtkinclude_HEADERS) $(deprecatedinclude_HEADERS)) \
|
||||
$(gtk_base_c_sources) \
|
||||
$(filter-out gtkclipboard-quartz.c gtkdnd-quartz.c, \
|
||||
$(gtk_base_c_sources)) \
|
||||
gtkprintoperation-unix.c \
|
||||
gtktypebuiltins.h \
|
||||
gtktypebuiltins.c
|
||||
|
||||
# And include the regular ones:
|
||||
if USE_QUARTZ
|
||||
introspection_files += \
|
||||
gtkclipboard.c \
|
||||
gtkdnd.c
|
||||
endif
|
||||
|
||||
if USE_X11
|
||||
introspection_files += \
|
||||
gtksocket.c \
|
||||
@@ -1306,7 +1323,9 @@ endif
|
||||
#
|
||||
# Installed tools
|
||||
#
|
||||
bin_PROGRAMS = gtk-query-immodules-3.0
|
||||
bin_PROGRAMS = \
|
||||
gtk-query-immodules-3.0 \
|
||||
gtk-launch
|
||||
|
||||
if BUILD_ICON_CACHE
|
||||
bin_PROGRAMS += gtk-update-icon-cache
|
||||
@@ -1353,11 +1372,8 @@ gtk_update_icon_cache_LDADD = $(GDK_PIXBUF_LIBS)
|
||||
gtk_update_icon_cache_SOURCES = updateiconcache.c
|
||||
endif
|
||||
|
||||
if HAVE_GIO_UNIX
|
||||
bin_PROGRAMS += gtk-launch
|
||||
gtk_launch_LDADD = $(LDADDS)
|
||||
gtk_launch_SOURCES = gtk-launch.c
|
||||
endif
|
||||
|
||||
.PHONY: files test test-debug
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user