Compare commits
1010 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
353a7158ed | ||
|
|
6af277b502 | ||
|
|
939c818395 | ||
|
|
ba17081caa | ||
|
|
3821880398 | ||
|
|
600ef4e7d1 | ||
|
|
6413a421f1 | ||
|
|
d3483d010e | ||
|
|
dfa88ef9c7 | ||
|
|
adc2698da1 | ||
|
|
a309b7dd12 | ||
|
|
207757e70d | ||
|
|
af84227184 | ||
|
|
6421c96ccc | ||
|
|
9806d64e40 | ||
|
|
847aed3652 | ||
|
|
f6c5b74fb7 | ||
|
|
d6acd1ecd3 | ||
|
|
287b0ce008 | ||
|
|
583b0b53e8 | ||
|
|
73edf2ce77 | ||
|
|
d1045b6876 | ||
|
|
139e3cd47d | ||
|
|
337bdee253 | ||
|
|
621beb8aaf | ||
|
|
fd7bdf03e0 | ||
|
|
d2a3858b4b | ||
|
|
f314322885 | ||
|
|
33447a3856 | ||
|
|
031aa464c6 | ||
|
|
3f7c856606 | ||
|
|
8abed09aea | ||
|
|
5c42d2f6d6 | ||
|
|
f5c4b3740c | ||
|
|
f76880f205 | ||
|
|
646d68e4bd | ||
|
|
46afb008db | ||
|
|
1ec6733573 | ||
|
|
7cc3040412 | ||
|
|
8285f4fc6f | ||
|
|
0d15bc6687 | ||
|
|
4ebc61c067 | ||
|
|
7078402341 | ||
|
|
6047ed3ebd | ||
|
|
471afbe62b | ||
|
|
060978e069 | ||
|
|
58ca2448eb | ||
|
|
0c36e30836 | ||
|
|
2c0fc39e62 | ||
|
|
140c26afbc | ||
|
|
c7850eccde | ||
|
|
f755abd275 | ||
|
|
60e5a21022 | ||
|
|
6edbb34d54 | ||
|
|
238ede333f | ||
|
|
67d445eebc | ||
|
|
33347533ec | ||
|
|
58af2b56bf | ||
|
|
36d80dc374 | ||
|
|
f26c189e5b | ||
|
|
4ab10dc891 | ||
|
|
c7ac3835fa | ||
|
|
ce073aac7d | ||
|
|
9cb5eb75f8 | ||
|
|
a425e6b5c2 | ||
|
|
1bb0d4c0f3 | ||
|
|
5efb9be963 | ||
|
|
b0fd18c7bf | ||
|
|
91d99f8903 | ||
|
|
5a5fb5635f | ||
|
|
ee1d43929c | ||
|
|
42faec1736 | ||
|
|
47b3584d36 | ||
|
|
72bd1c5859 | ||
|
|
8e2b7688fd | ||
|
|
3e90b96b08 | ||
|
|
6c0458c428 | ||
|
|
b9017e53a2 | ||
|
|
72149265a3 | ||
|
|
f46ffebbc8 | ||
|
|
97fd98099c | ||
|
|
10a2d8be70 | ||
|
|
988f43bfa0 | ||
|
|
98e22a43ab | ||
|
|
12f7825907 | ||
|
|
d88375e9c3 | ||
|
|
06d68566df | ||
|
|
b1ab800825 | ||
|
|
27a8669d0d | ||
|
|
14f08e6a93 | ||
|
|
45c02db925 | ||
|
|
7351327089 | ||
|
|
3725bc3ad9 | ||
|
|
8715d1c1b3 | ||
|
|
fb6a7ccb92 | ||
|
|
9c3e01cf3a | ||
|
|
a85038d0ec | ||
|
|
d8bbe62f8e | ||
|
|
6343181e2b | ||
|
|
e2f7831640 | ||
|
|
9b26da82ca | ||
|
|
cb4a61eaa3 | ||
|
|
3e1dcab4c0 | ||
|
|
bb0ec69706 | ||
|
|
e94a7b1a7a | ||
|
|
7e44eced8c | ||
|
|
d8ab8e0e7d | ||
|
|
3ae1549289 | ||
|
|
3196b43aa2 | ||
|
|
3552f4bbf8 | ||
|
|
a0ca2a7b0d | ||
|
|
8b621ad059 | ||
|
|
d1e07dbee8 | ||
|
|
b214f7e59e | ||
|
|
f164436f86 | ||
|
|
d5f4e60c56 | ||
|
|
6ef274c0ed | ||
|
|
3c07b7ebbd | ||
|
|
a77c4da512 | ||
|
|
cf1d80fd80 | ||
|
|
9d874ec20a | ||
|
|
75fff482b9 | ||
|
|
b0f8915fe7 | ||
|
|
e2a5219220 | ||
|
|
3c0df19a58 | ||
|
|
00fbbe68b0 | ||
|
|
6a227eec1c | ||
|
|
08ebf9dbe9 | ||
|
|
268dd6deb7 | ||
|
|
b9a51f3530 | ||
|
|
5492003cff | ||
|
|
f2fe3fe221 | ||
|
|
704266d646 | ||
|
|
4848d691e0 | ||
|
|
52f5eeab68 | ||
|
|
fd8a1c93a9 | ||
|
|
e655e59bc7 | ||
|
|
4dce69399a | ||
|
|
0d214799be | ||
|
|
b89fb9835c | ||
|
|
6d5faa20c4 | ||
|
|
18ce1ade26 | ||
|
|
87b6664073 | ||
|
|
3785528ef8 | ||
|
|
acfab255cc | ||
|
|
4b2885b5d3 | ||
|
|
7a564681b1 | ||
|
|
4e0feda1bd | ||
|
|
a31d35650b | ||
|
|
a558d2dfef | ||
|
|
0aae38d765 | ||
|
|
40428da32c | ||
|
|
5f53c26527 | ||
|
|
e812996962 | ||
|
|
75f85f940e | ||
|
|
e45890a616 | ||
|
|
b443f453ed | ||
|
|
9b00b1a2ed | ||
|
|
65a9d5b2f9 | ||
|
|
d5129fbb3a | ||
|
|
58d21d03f6 | ||
|
|
f7bcb45607 | ||
|
|
7dbb5755a4 | ||
|
|
eff33964d7 | ||
|
|
0849664209 | ||
|
|
b6b7941b0d | ||
|
|
128cb63dcc | ||
|
|
3e4c74d7ef | ||
|
|
357c50b14e | ||
|
|
922d7fd0ae | ||
|
|
3f7c96b352 | ||
|
|
3a5447574b | ||
|
|
28cd4d6102 | ||
|
|
3322a264e0 | ||
|
|
a2951281f3 | ||
|
|
c3a163b021 | ||
|
|
ecb9ebbce3 | ||
|
|
6b15c2ca82 | ||
|
|
edebc6cf21 | ||
|
|
16786ffbf7 | ||
|
|
89a9da8a21 | ||
|
|
a9c05acd70 | ||
|
|
c62ab96bcc | ||
|
|
879683b674 | ||
|
|
bbe7d97e00 | ||
|
|
b89ed0c35f | ||
|
|
fa5c68f7c6 | ||
|
|
3261e656e5 | ||
|
|
31045ef4f2 | ||
|
|
fbe8f91806 | ||
|
|
d0b7b3f5c9 | ||
|
|
c961dd184b | ||
|
|
416b69a2c1 | ||
|
|
e1aba58de1 | ||
|
|
2e8d1aaa79 | ||
|
|
f6db9670d1 | ||
|
|
8d3a895773 | ||
|
|
dcc8bc33db | ||
|
|
4721a7dd40 | ||
|
|
c1381c8cea | ||
|
|
b9a26457b9 | ||
|
|
beb6af329e | ||
|
|
240a22f4ed | ||
|
|
104e5d2cc6 | ||
|
|
fd69dc379a | ||
|
|
b03172656c | ||
|
|
cc4aa3cd47 | ||
|
|
1fe70a7a0d | ||
|
|
49aa89e261 | ||
|
|
dc9d35402a | ||
|
|
483bec40cc | ||
|
|
eb0fec7865 | ||
|
|
44557367ed | ||
|
|
dfcde48090 | ||
|
|
486362db9f | ||
|
|
ee1b96185f | ||
|
|
0b54ffa9d6 | ||
|
|
bf69ab9d68 | ||
|
|
eacc9f5d05 | ||
|
|
a2524578cd | ||
|
|
c2f99dd168 | ||
|
|
fb00a59c2f | ||
|
|
cb7c4d6c7f | ||
|
|
6d13f0f9b3 | ||
|
|
683cb5753e | ||
|
|
c8fbf3b01e | ||
|
|
e33741aed6 | ||
|
|
f830dc3f36 | ||
|
|
e096fc9752 | ||
|
|
f6d4cb9b99 | ||
|
|
51021f88c5 | ||
|
|
78dbc1efdb | ||
|
|
0f0d9509c0 | ||
|
|
ebe76c752c | ||
|
|
75bda50723 | ||
|
|
698c89e5c4 | ||
|
|
af9c5dede4 | ||
|
|
0e2758ae42 | ||
|
|
7dbe380691 | ||
|
|
1fe35dda56 | ||
|
|
4bb5d92a02 | ||
|
|
10dcedad06 | ||
|
|
f2322ebeb4 | ||
|
|
1dafcb2a24 | ||
|
|
155da3a8c5 | ||
|
|
1cbad0a4fc | ||
|
|
caf8ebc6f1 | ||
|
|
b93d689290 | ||
|
|
02a871bc31 | ||
|
|
db10ace6c8 | ||
|
|
6cfad41c09 | ||
|
|
6ccb4844c9 | ||
|
|
17a24b0ca3 | ||
|
|
04f593c9fb | ||
|
|
41e007894c | ||
|
|
97c37421a6 | ||
|
|
5682c4abb6 | ||
|
|
cb6b2054ab | ||
|
|
0363711f77 | ||
|
|
bf7eeebb3a | ||
|
|
2c099e45e3 | ||
|
|
9c891d4417 | ||
|
|
0c27e75cbe | ||
|
|
02a024df2f | ||
|
|
7aac253dcc | ||
|
|
a7b3b116a9 | ||
|
|
29d8fe021b | ||
|
|
f616dc9a9a | ||
|
|
bd088fe083 | ||
|
|
94ed72d3e6 | ||
|
|
c312fe1c8d | ||
|
|
2fde6f677e | ||
|
|
568b42bd52 | ||
|
|
cad57a6686 | ||
|
|
e946fcf69d | ||
|
|
f1a524a21e | ||
|
|
38db8d1951 | ||
|
|
49dfa78e74 | ||
|
|
1575a19c59 | ||
|
|
7f2909bbab | ||
|
|
fdc36ada3f | ||
|
|
265a137efc | ||
|
|
17d141c8e5 | ||
|
|
47215ba403 | ||
|
|
690a18f032 | ||
|
|
d2716f8bfd | ||
|
|
477f14037c | ||
|
|
42cabcf5fb | ||
|
|
dceb6a11c8 | ||
|
|
fe63fe5da9 | ||
|
|
2b7f8016b5 | ||
|
|
7b9b0ab0fa | ||
|
|
31de6ff4e0 | ||
|
|
a4a3c87b3d | ||
|
|
db85d915e7 | ||
|
|
736bdbeaeb | ||
|
|
0e563e0064 | ||
|
|
0dece0ba4f | ||
|
|
814bfe1305 | ||
|
|
eff77f116b | ||
|
|
87f9cc2162 | ||
|
|
e8e7692534 | ||
|
|
7a235648ea | ||
|
|
0346147a0e | ||
|
|
4af7480f8f | ||
|
|
5d270c2f45 | ||
|
|
ca7082a04a | ||
|
|
b46f089b6f | ||
|
|
f6abe64479 | ||
|
|
20661babbf | ||
|
|
1f3c079761 | ||
|
|
d7cf38387c | ||
|
|
c86201e87e | ||
|
|
279d363ab2 | ||
|
|
7d4023e88e | ||
|
|
e2269c4f03 | ||
|
|
9648fd88b8 | ||
|
|
4ed3aa1cb8 | ||
|
|
355fbf04b8 | ||
|
|
7f39f122d2 | ||
|
|
96457c0af4 | ||
|
|
0b49ebc6f2 | ||
|
|
b08cdd5c00 | ||
|
|
62c2373866 | ||
|
|
5baacee740 | ||
|
|
ae6489b868 | ||
|
|
bebf5b23fd | ||
|
|
334ad44555 | ||
|
|
bdd1baec35 | ||
|
|
075c96bc26 | ||
|
|
7f400fd777 | ||
|
|
8e0cab7cba | ||
|
|
981607d4a0 | ||
|
|
cd14b33a8a | ||
|
|
99fee10fe1 | ||
|
|
c9122881c8 | ||
|
|
0bff0b31cb | ||
|
|
78280d9de0 | ||
|
|
2109f32cfa | ||
|
|
90eca42b09 | ||
|
|
2fe4312b12 | ||
|
|
9aac2c5a1f | ||
|
|
884770db85 | ||
|
|
0caf9d85a5 | ||
|
|
853ec8ef22 | ||
|
|
2be1b69313 | ||
|
|
59f64fa998 | ||
|
|
a77eacb2a1 | ||
|
|
601f4ecdb4 | ||
|
|
a46bb12afe | ||
|
|
54467af1c1 | ||
|
|
6b678e59fd | ||
|
|
e924208067 | ||
|
|
4cb1634b8c | ||
|
|
a63c1000a8 | ||
|
|
ee791f46b4 | ||
|
|
e08f874a51 | ||
|
|
0cb81deacc | ||
|
|
71828f4669 | ||
|
|
c808e8ee75 | ||
|
|
41035ec767 | ||
|
|
a8eac0c33e | ||
|
|
c79aed0e05 | ||
|
|
13da0b3878 | ||
|
|
8ef268f205 | ||
|
|
23fbaaadb0 | ||
|
|
fce02ea0be | ||
|
|
2abc008e51 | ||
|
|
d6aa14f9ac | ||
|
|
2e8dae28fd | ||
|
|
19cc4bc416 | ||
|
|
708e45dd43 | ||
|
|
965e34a43c | ||
|
|
874b1d06e7 | ||
|
|
a698395064 | ||
|
|
e53b16ed74 | ||
|
|
fe7211b9c2 | ||
|
|
3184f21f0a | ||
|
|
d86059ea5a | ||
|
|
c355f84a19 | ||
|
|
25884cfbf5 | ||
|
|
123d1f2673 | ||
|
|
c493091772 | ||
|
|
b7afebffed | ||
|
|
2a98c4a504 | ||
|
|
123709106e | ||
|
|
c8df83a2fe | ||
|
|
e48d4e7159 | ||
|
|
e3b8e18524 | ||
|
|
c4b3014e09 | ||
|
|
ed3c12aa5f | ||
|
|
f7a5303612 | ||
|
|
790a6ae5b2 | ||
|
|
fb8cd9520f | ||
|
|
f8a40e214a | ||
|
|
08d246be89 | ||
|
|
2a1cd0c42e | ||
|
|
fba2b02b10 | ||
|
|
c3c5e72151 | ||
|
|
d597937560 | ||
|
|
7ba4ba0d2f | ||
|
|
8ad52d1024 | ||
|
|
cf7b958af5 | ||
|
|
1616d67d81 | ||
|
|
c312e81604 | ||
|
|
bd745719cf | ||
|
|
e884fc143d | ||
|
|
0e6bf066c6 | ||
|
|
0d1978edbf | ||
|
|
ddabef3c49 | ||
|
|
dcc96c09bd | ||
|
|
032196b9dd | ||
|
|
f6665c9c0a | ||
|
|
e6f7751958 | ||
|
|
93ab7875e4 | ||
|
|
b7ab832906 | ||
|
|
b5658eeaef | ||
|
|
cc7f7a2eb5 | ||
|
|
103739f248 | ||
|
|
3f314b2cd8 | ||
|
|
fe480d99b4 | ||
|
|
965d225c9a | ||
|
|
82765cc166 | ||
|
|
7329d5cb8c | ||
|
|
44097af086 | ||
|
|
527bf45430 | ||
|
|
5f6e095722 | ||
|
|
919c335569 | ||
|
|
2720bec633 | ||
|
|
13ce27bfef | ||
|
|
d1812f696e | ||
|
|
03def75b3f | ||
|
|
63ff245b44 | ||
|
|
5622a388fa | ||
|
|
23aec8934e | ||
|
|
d0ccf396e7 | ||
|
|
4ed4f66911 | ||
|
|
e2aace2ade | ||
|
|
5fa74836b8 | ||
|
|
24de292011 | ||
|
|
9cf57615e6 | ||
|
|
8857d094a8 | ||
|
|
43916bf90f | ||
|
|
551b25196f | ||
|
|
0d45a265fa | ||
|
|
d0b6c5e10f | ||
|
|
a9912f2e78 | ||
|
|
cfd59821e7 | ||
|
|
e93751bbbd | ||
|
|
7b5763fdd0 | ||
|
|
0e7cab347a | ||
|
|
8ad3303188 | ||
|
|
7b07769355 | ||
|
|
dc69fc120d | ||
|
|
71c52a71f4 | ||
|
|
49fdaf4fff | ||
|
|
8864534892 | ||
|
|
718259dcc2 | ||
|
|
31055c2981 | ||
|
|
f111f4b58e | ||
|
|
fc7c7f466f | ||
|
|
656061cb2b | ||
|
|
a7f95d982f | ||
|
|
7170996088 | ||
|
|
fb430a8dc5 | ||
|
|
65044acefd | ||
|
|
72415bc1a7 | ||
|
|
3f8175bb20 | ||
|
|
5c86382961 | ||
|
|
165fab7605 | ||
|
|
f970ecf821 | ||
|
|
7b1a4b5eb5 | ||
|
|
8c56db61e3 | ||
|
|
3ea4f70fa6 | ||
|
|
aa1bf58196 | ||
|
|
59a36172d8 | ||
|
|
b4c814e272 | ||
|
|
8cf49d7c10 | ||
|
|
5f8748c53e | ||
|
|
d154bfafd9 | ||
|
|
4667d36ccd | ||
|
|
e53fd25b04 | ||
|
|
dbfe3d3967 | ||
|
|
7c30f2a15f | ||
|
|
cebb7bfc9f | ||
|
|
bfa2ec274b | ||
|
|
c1c8caa28c | ||
|
|
b43c45571d | ||
|
|
c25b3aad1e | ||
|
|
15201b48c9 | ||
|
|
c0ce3a6107 | ||
|
|
656eaa93bf | ||
|
|
2bc6d4548f | ||
|
|
ca7b223bf0 | ||
|
|
ca17982ed2 | ||
|
|
699dcbab17 | ||
|
|
5886cc2cdf | ||
|
|
81517a6d4c | ||
|
|
5e3acecc12 | ||
|
|
8f733319d1 | ||
|
|
af24aef782 | ||
|
|
8b9b7b9d04 | ||
|
|
b665608816 | ||
|
|
23124810d1 | ||
|
|
a3c7dca8cf | ||
|
|
7702d2f8fc | ||
|
|
a91be9352f | ||
|
|
da355feec6 | ||
|
|
f38374c160 | ||
|
|
8792bbbd28 | ||
|
|
34b7b5d74e | ||
|
|
ab7cb5019e | ||
|
|
5edb04999c | ||
|
|
ab3f4a1607 | ||
|
|
55b5e035fc | ||
|
|
002d37e6e3 | ||
|
|
524be636e9 | ||
|
|
26dcaeaf56 | ||
|
|
347efc33b8 | ||
|
|
9b4d90465e | ||
|
|
88fba9f845 | ||
|
|
da0930717e | ||
|
|
90408c4641 | ||
|
|
c2eb7c28fe | ||
|
|
24ca48fe78 | ||
|
|
5d37ea836c | ||
|
|
9b5ef39404 | ||
|
|
ca98134099 | ||
|
|
fc5df6bb7f | ||
|
|
188ea9b487 | ||
|
|
9dc1fd02b3 | ||
|
|
6a5a84b317 | ||
|
|
6d10b256ef | ||
|
|
8433a5afe5 | ||
|
|
65f993b4ac | ||
|
|
0f3a3909d1 | ||
|
|
d2cb5285d5 | ||
|
|
2e8e686cae | ||
|
|
09de6fb1d4 | ||
|
|
ddefd9c9f5 | ||
|
|
79e1b1ab6f | ||
|
|
1018412555 | ||
|
|
b483ca4b97 | ||
|
|
80b0b3ea05 | ||
|
|
bf44f089cd | ||
|
|
1d82cc2f2e | ||
|
|
dedcbc9918 | ||
|
|
09423315a1 | ||
|
|
e63d08e43f | ||
|
|
e07f8bfc6f | ||
|
|
4b7bbd4434 | ||
|
|
28c7089077 | ||
|
|
f93afa9c75 | ||
|
|
37460b2078 | ||
|
|
713cecba4c | ||
|
|
e5e47e6879 | ||
|
|
faa1434735 | ||
|
|
11f5588755 | ||
|
|
9860caa539 | ||
|
|
14bd8cf9e5 | ||
|
|
dbce6083ef | ||
|
|
00362c03f7 | ||
|
|
4c7408d9ea | ||
|
|
eab38fa264 | ||
|
|
494e401a15 | ||
|
|
1b5a1e1acb | ||
|
|
e14c6c1d87 | ||
|
|
fdaecac622 | ||
|
|
1ae617e324 | ||
|
|
5c68ecbc0f | ||
|
|
5c5a45f9b0 | ||
|
|
3c90c2cd53 | ||
|
|
913831b26f | ||
|
|
25bd56b995 | ||
|
|
f83d57e91b | ||
|
|
85adae970a | ||
|
|
7cb2ce4d11 | ||
|
|
7d0331a679 | ||
|
|
7bb4d7d961 | ||
|
|
ed1e531c36 | ||
|
|
b7f7f3d98d | ||
|
|
673c79d7d1 | ||
|
|
742d01908f | ||
|
|
d36df18dee | ||
|
|
406fd3362c | ||
|
|
2ee01439f0 | ||
|
|
4079c878ca | ||
|
|
48a9f44f31 | ||
|
|
e144ff2bb5 | ||
|
|
f57e0ba8b1 | ||
|
|
c390a6ec47 | ||
|
|
b8368a54a2 | ||
|
|
208057b914 | ||
|
|
e17f31db8f | ||
|
|
2e5dda7c62 | ||
|
|
b39687aac8 | ||
|
|
92270f8620 | ||
|
|
1dc1b050b2 | ||
|
|
cab220ee8b | ||
|
|
d0ff2dbc79 | ||
|
|
dbcf64a3f2 | ||
|
|
0895f5b669 | ||
|
|
07d3d46f08 | ||
|
|
7ffe514812 | ||
|
|
e2fdd9e54f | ||
|
|
8d99ec411e | ||
|
|
122ca000b5 | ||
|
|
7086e475e3 | ||
|
|
6b61461a40 | ||
|
|
344572dc71 | ||
|
|
b70abe38c1 | ||
|
|
6430ad631a | ||
|
|
c486540935 | ||
|
|
602a038747 | ||
|
|
d292dd9b27 | ||
|
|
5ab6b7e020 | ||
|
|
2cabeeb1c3 | ||
|
|
a1fe6d0337 | ||
|
|
aff37e7bea | ||
|
|
c3ccc9b136 | ||
|
|
bd1e56dd83 | ||
|
|
cd34fdd047 | ||
|
|
b377b2dc47 | ||
|
|
a21d063ef8 | ||
|
|
257c54a021 | ||
|
|
207eecc424 | ||
|
|
1e32cc3d63 | ||
|
|
db0c8b158c | ||
|
|
c1665b1441 | ||
|
|
a0d3a674d0 | ||
|
|
8725269e0d | ||
|
|
8102e79daf | ||
|
|
50a9ba1f26 | ||
|
|
e47f60d702 | ||
|
|
110dac34df | ||
|
|
210cb3f5a0 | ||
|
|
cd8e439b9b | ||
|
|
a391196ba5 | ||
|
|
f522f36dd1 | ||
|
|
bcecbbd1be | ||
|
|
895acc9f97 | ||
|
|
68935c790b | ||
|
|
7c8ae8a5f5 | ||
|
|
047e9fcf1a | ||
|
|
57967d9a98 | ||
|
|
88e84f52dd | ||
|
|
8a6a8c7bc3 | ||
|
|
7953813453 | ||
|
|
99fdc828eb | ||
|
|
d6d54509d3 | ||
|
|
bd191b6537 | ||
|
|
ab37cadbfe | ||
|
|
4a6a72fe6c | ||
|
|
23919bb08c | ||
|
|
53d06396b8 | ||
|
|
fdd65ddef3 | ||
|
|
d0f3668232 | ||
|
|
63596d22ae | ||
|
|
0e5ab967d5 | ||
|
|
579856439b | ||
|
|
bf874e967e | ||
|
|
781ff62d7a | ||
|
|
47c47914d6 | ||
|
|
cefd52f52f | ||
|
|
aed9cf77fa | ||
|
|
2abec112dc | ||
|
|
eb3e74cae9 | ||
|
|
6a322e11b2 | ||
|
|
4d3f6feb37 | ||
|
|
abce966642 | ||
|
|
67baa4b4a6 | ||
|
|
75650b4e96 | ||
|
|
c174981e0b | ||
|
|
04a70261a4 | ||
|
|
9256ac8a62 | ||
|
|
5aa450f97b | ||
|
|
dc93f21ffe | ||
|
|
457148333e | ||
|
|
123e299bcf | ||
|
|
c71c5f6a9e | ||
|
|
a7c7158c7b | ||
|
|
5ed260f03e | ||
|
|
d6c6ad105f | ||
|
|
3d6d886c6a | ||
|
|
152ff34893 | ||
|
|
10e187f2f6 | ||
|
|
004f0982e1 | ||
|
|
344a271704 | ||
|
|
b05a8405fe | ||
|
|
40a521703d | ||
|
|
4283c9de4f | ||
|
|
43dfe74c56 | ||
|
|
eae7b32f85 | ||
|
|
c9e78a1094 | ||
|
|
fe6ef6c07a | ||
|
|
e0498db360 | ||
|
|
906b1feab3 | ||
|
|
2fa59370f7 | ||
|
|
62f865ee09 | ||
|
|
962386fb82 | ||
|
|
075cb4320d | ||
|
|
f15bd558ab | ||
|
|
387379e6c4 | ||
|
|
ad137948b9 | ||
|
|
e8df8ce17b | ||
|
|
01003779e9 | ||
|
|
cb12593d57 | ||
|
|
218e61990c | ||
|
|
86be352e82 | ||
|
|
315affdfcb | ||
|
|
f75d8b0c23 | ||
|
|
aab3106abd | ||
|
|
9775962a96 | ||
|
|
142c848308 | ||
|
|
6e99903a4e | ||
|
|
1f455e53c0 | ||
|
|
2934f4f58c | ||
|
|
8460f39363 | ||
|
|
8b667441a3 | ||
|
|
38fc79fcfd | ||
|
|
39ff37dc74 | ||
|
|
91d3176504 | ||
|
|
513a06e966 | ||
|
|
1afc96a702 | ||
|
|
518a8a9c4e | ||
|
|
c3e04d86ec | ||
|
|
7d8df9e60a | ||
|
|
12fd81efd2 | ||
|
|
abf4f510de | ||
|
|
a92832509d | ||
|
|
2780a82a0e | ||
|
|
d142827b34 | ||
|
|
4851efe296 | ||
|
|
c0b9232351 | ||
|
|
5c9af6b5aa | ||
|
|
19bbe0557f | ||
|
|
2ca03393f5 | ||
|
|
864a386300 | ||
|
|
d466bcb7a0 | ||
|
|
998ac31096 | ||
|
|
67c79cda67 | ||
|
|
c924b9be6f | ||
|
|
b0a28fdadd | ||
|
|
de210bbdec | ||
|
|
61554862e6 | ||
|
|
befef270ab | ||
|
|
ce46df0b4b | ||
|
|
005626bd4d | ||
|
|
05bc6a5b36 | ||
|
|
e909f843f8 | ||
|
|
8850ce814d | ||
|
|
32e8dc45b0 | ||
|
|
187dbc0ce7 | ||
|
|
9556bba1ba | ||
|
|
5647eeecf3 | ||
|
|
3e3c14e9ef | ||
|
|
9546a9dc14 | ||
|
|
f83adda582 | ||
|
|
0dc21c5690 | ||
|
|
57703d0170 | ||
|
|
e3b303c212 | ||
|
|
9aab1c5e1b | ||
|
|
c7c0e3d58d | ||
|
|
21bb83612d | ||
|
|
efd3aec503 | ||
|
|
d6084b0f36 | ||
|
|
c07afdb123 | ||
|
|
6f818654a0 | ||
|
|
af4350fc92 | ||
|
|
d5b91db3ce | ||
|
|
e093c42383 | ||
|
|
e649afc0a8 | ||
|
|
7aa5779181 | ||
|
|
7cb8a11038 | ||
|
|
09ea2ad7be | ||
|
|
7be9418f30 | ||
|
|
d6b867723d | ||
|
|
2b210ff47e | ||
|
|
385164d6f9 | ||
|
|
1bafe5a8e7 | ||
|
|
52f719521a | ||
|
|
5c67089e7d | ||
|
|
af36f7765a | ||
|
|
0b0524d397 | ||
|
|
4eaccda110 | ||
|
|
16bcc7bc6d | ||
|
|
26004d36fa | ||
|
|
0b31d8a9c4 | ||
|
|
c2a843d8ed | ||
|
|
ecb8751322 | ||
|
|
d4a428d2e9 | ||
|
|
1d6172102d | ||
|
|
887540e646 | ||
|
|
18dfa1ae90 | ||
|
|
7ec269052d | ||
|
|
a3ee7a9416 | ||
|
|
92006c8e78 | ||
|
|
e6af5d49ae | ||
|
|
0dfc14aa8b | ||
|
|
6114e5b813 | ||
|
|
9c585e9210 | ||
|
|
0e3d507006 | ||
|
|
1cf5800665 | ||
|
|
3a02948170 | ||
|
|
26df647a0f | ||
|
|
ad7dc0e87f | ||
|
|
2a2323d64e | ||
|
|
3a1eebe683 | ||
|
|
520fd17eca | ||
|
|
09d32399ab | ||
|
|
c492bd10e8 | ||
|
|
0d1eb423a1 | ||
|
|
55f36bac3a | ||
|
|
3d19b7ce55 | ||
|
|
2ab408a700 | ||
|
|
1c77b5f926 | ||
|
|
13de9dc34f | ||
|
|
6788abaa48 | ||
|
|
39a05c0b55 | ||
|
|
8051b9d2bc | ||
|
|
30533f0397 | ||
|
|
01c3cd84f5 | ||
|
|
49efbf9b1d | ||
|
|
0f9fe89727 | ||
|
|
d7aa6a88fb | ||
|
|
c4089778fb | ||
|
|
61ca241924 | ||
|
|
79d880ccb7 | ||
|
|
20fee708a3 | ||
|
|
1a099c2ced | ||
|
|
ab7989217a | ||
|
|
6e28c40061 | ||
|
|
9a5ad5d44e | ||
|
|
e19f939b53 | ||
|
|
977b13d37f | ||
|
|
bfd68b4357 | ||
|
|
71824a2cd5 | ||
|
|
e2ae4aec47 | ||
|
|
59d586e2ff | ||
|
|
07a8601adf | ||
|
|
b1446447fc | ||
|
|
308adaa6db | ||
|
|
32cd050cfe | ||
|
|
740b70ea0c | ||
|
|
4268cd7312 | ||
|
|
5d81d2ab28 | ||
|
|
68bc2c51db | ||
|
|
acb95ed9da | ||
|
|
c36ca76bb8 | ||
|
|
30f22e0208 | ||
|
|
4e01061296 | ||
|
|
2be5abf4ed | ||
|
|
f59f2039c0 | ||
|
|
a20f83d9a9 | ||
|
|
4bf5d761bc | ||
|
|
8eb7761e72 | ||
|
|
c05d6f2d12 | ||
|
|
f553b79b70 | ||
|
|
4098ac22ff | ||
|
|
2f5621e566 | ||
|
|
93e1585614 | ||
|
|
5b3cc69b43 | ||
|
|
7033e33822 | ||
|
|
b2c30ad95d | ||
|
|
f2cfc17be8 | ||
|
|
186a0455be | ||
|
|
e0ea1f0c14 | ||
|
|
11f79ebe18 | ||
|
|
c2906f2bea | ||
|
|
a74e338517 | ||
|
|
d38e339ebb | ||
|
|
b47085512c | ||
|
|
cb98231c7d | ||
|
|
36e83663cf | ||
|
|
102b1de4b4 | ||
|
|
d362159181 | ||
|
|
9b7fd1bbe5 | ||
|
|
9457fe86d4 | ||
|
|
13fa9d3819 | ||
|
|
3f5c7acc33 | ||
|
|
7de464ffe8 | ||
|
|
c88afb81f9 | ||
|
|
34e324ca70 | ||
|
|
7bd32a06cf | ||
|
|
ba0b7257a7 | ||
|
|
690e34968a | ||
|
|
923f3f6992 | ||
|
|
f0f650948a | ||
|
|
03a7c4551b | ||
|
|
6b411f4b47 | ||
|
|
b78286eab5 | ||
|
|
dac3ffed60 | ||
|
|
16aa9c1964 | ||
|
|
ac05ab301d | ||
|
|
de26d9af9b | ||
|
|
8cff9d3307 | ||
|
|
995d97b001 | ||
|
|
a7960ed953 | ||
|
|
0328873baf | ||
|
|
babfb28c3c | ||
|
|
8a544b8912 | ||
|
|
75a00da8d1 | ||
|
|
38614a78b6 | ||
|
|
b44ec526b6 | ||
|
|
177354df02 | ||
|
|
2a2fff763d | ||
|
|
3c03a6787d | ||
|
|
f9739e8343 | ||
|
|
85d4cd0f43 | ||
|
|
e648c2d68f | ||
|
|
467e4e73c1 | ||
|
|
b141619b50 | ||
|
|
3f04c019cd | ||
|
|
3872c32d4a | ||
|
|
df0b05ef2b | ||
|
|
70b3b3e6e1 | ||
|
|
a783d668f1 | ||
|
|
a6e2c24b60 | ||
|
|
8a0d67391c | ||
|
|
63955ec2e2 | ||
|
|
077b5109a4 | ||
|
|
444c9529db | ||
|
|
600eaaea09 | ||
|
|
60c008eb99 | ||
|
|
27c086bd95 | ||
|
|
c91f2c0cfa | ||
|
|
3f4411ed52 | ||
|
|
f8170cbd7c | ||
|
|
8ecd7ef5ae | ||
|
|
0ac28d23a4 | ||
|
|
ced74f4435 | ||
|
|
16c6ee03ae | ||
|
|
eac28852ed | ||
|
|
f87ee7e51a | ||
|
|
9ce0cb6037 | ||
|
|
85764dad33 | ||
|
|
9addd8da2c | ||
|
|
bfc969f697 | ||
|
|
e8a447e002 | ||
|
|
8fa6f19aa2 | ||
|
|
85dd78b7d8 | ||
|
|
bc8e40387b | ||
|
|
566a13a6c0 | ||
|
|
9280285954 | ||
|
|
135cdd43a9 | ||
|
|
6e7f4a99e9 | ||
|
|
cfd3a51369 | ||
|
|
ab4fed04fe | ||
|
|
c86bf9bae2 | ||
|
|
b8e7ea1f11 | ||
|
|
54a9eb416d | ||
|
|
f9ad283402 | ||
|
|
8cde2c5c21 | ||
|
|
bc98ea9ce1 | ||
|
|
294cfcdb22 | ||
|
|
3ef2c37a83 | ||
|
|
78290be1c0 | ||
|
|
c31eb969ba | ||
|
|
68fcbef5a1 | ||
|
|
cc4dc8339d | ||
|
|
c57f1e318e | ||
|
|
bd9ddcb231 | ||
|
|
6acde3e1ce | ||
|
|
3832600822 | ||
|
|
fa107ded2a | ||
|
|
8eb77dfea2 | ||
|
|
9c8ed97e83 | ||
|
|
c8e5c809ed | ||
|
|
9b4919dcb8 | ||
|
|
96a7435911 | ||
|
|
7c698ad46c | ||
|
|
9a9070c26d | ||
|
|
aebd3d2df2 | ||
|
|
affaf4f9d2 | ||
|
|
4f3495f955 | ||
|
|
d19d3c5dca | ||
|
|
a8afd462c0 | ||
|
|
093dfedf74 | ||
|
|
48a15b7349 | ||
|
|
59436967d5 | ||
|
|
c5327ecc31 | ||
|
|
617a879dfe | ||
|
|
b7a6cd6750 | ||
|
|
ffc1084029 | ||
|
|
5724801800 | ||
|
|
309d7377e7 | ||
|
|
2ff460a6c8 | ||
|
|
3573f8b5f3 | ||
|
|
e583ab045f | ||
|
|
3d7c2d6634 | ||
|
|
47933b73db | ||
|
|
1432078569 | ||
|
|
6cfdaaa740 | ||
|
|
d94b21a8df | ||
|
|
cfda5f0035 | ||
|
|
5d6fe2d05f | ||
|
|
fb66cb05df | ||
|
|
5d5bbd1a21 | ||
|
|
c45ab2b2d6 | ||
|
|
4a4f0aedf3 | ||
|
|
db51126e3b | ||
|
|
2737494599 | ||
|
|
e9e7e4c86b | ||
|
|
7f17ced74b | ||
|
|
8f8b0f68ff | ||
|
|
f9e5e12bcc | ||
|
|
cb6412978c | ||
|
|
120df3b8b7 | ||
|
|
fabfc17d93 | ||
|
|
4db2561dd5 |
@@ -8,6 +8,5 @@ Makefile
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
configure
|
||||
gtk+.xconfig
|
||||
gtk-config
|
||||
config.cache
|
||||
|
||||
|
||||
29
AUTHORS
29
AUTHORS
@@ -1,3 +1,26 @@
|
||||
Peter Mattis (petm@xcf.berkeley.edu)
|
||||
Spencer Kimball (spencer@xcf.berkeley.edu)
|
||||
Josh MacDonald (jmacd@xcf.berkeley.edu)
|
||||
Original Authors
|
||||
----------------
|
||||
Peter Mattis <petm@xcf.berkeley.edu>
|
||||
Spencer Kimball <spencer@xcf.berkeley.edu>
|
||||
Josh MacDonald <jmacd@xcf.berkeley.edu>
|
||||
|
||||
|
||||
The GTK+ Team (in alphabetical order)
|
||||
-------------------------------------
|
||||
Shawn T. Amundson <amundson@gtk.org>
|
||||
Jerome Bolliet <bolliet@in2p3.fr>
|
||||
Tony Gale <gale@gtk.org>
|
||||
Lars Hamann <lars@gtk.org>
|
||||
Tim Janik <timj@gtk.org>
|
||||
Stefan Jeske <stefan@gtk.org>
|
||||
Elliot Lee <sopwith@gtk.org>
|
||||
Raph Levien <raph@gtk.org>
|
||||
Ian Main <imain@gtk.org>
|
||||
Fedrerico Mena <quartic@gtk.org>
|
||||
Paolo Molaro <lupus@lettere.unipd.it>
|
||||
Jay Painter <jpaint@gtk.org>
|
||||
Manish Singh <manish@gtk.org>
|
||||
Owen Taylor <otaylor@gtk.org>
|
||||
|
||||
There are many others who have contributed patches; we thank them,
|
||||
GTK+ is much better because of them.
|
||||
|
||||
9
COPYING
9
COPYING
@@ -2,7 +2,7 @@
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
675 Mass Ave, Cambridge, MA 02139, USA
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
@@ -436,7 +436,7 @@ DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
Appendix: How to Apply These Terms to Your New Libraries
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
@@ -463,8 +463,9 @@ convey the exclusion of warranty; and each file should have at least the
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
|
||||
4961
ChangeLog.pre-1-0
Normal file
4961
ChangeLog.pre-1-0
Normal file
File diff suppressed because it is too large
Load Diff
9080
ChangeLog.pre-2-0
9080
ChangeLog.pre-2-0
File diff suppressed because it is too large
Load Diff
9080
ChangeLog.pre-2-10
9080
ChangeLog.pre-2-10
File diff suppressed because it is too large
Load Diff
9080
ChangeLog.pre-2-2
9080
ChangeLog.pre-2-2
File diff suppressed because it is too large
Load Diff
9080
ChangeLog.pre-2-4
9080
ChangeLog.pre-2-4
File diff suppressed because it is too large
Load Diff
9080
ChangeLog.pre-2-6
9080
ChangeLog.pre-2-6
File diff suppressed because it is too large
Load Diff
9080
ChangeLog.pre-2-8
9080
ChangeLog.pre-2-8
File diff suppressed because it is too large
Load Diff
28
HACKING
28
HACKING
@@ -2,29 +2,32 @@ If you want to hack on the Gtk+ project, it will make you life easier
|
||||
to have the following packages installed:
|
||||
|
||||
- GNU autoconf 2.12
|
||||
- GNU automake 1.2d
|
||||
Available in ftp://ftp.cygnus.com/pub/tromey
|
||||
- GNU libtool 1.0h
|
||||
Available in ftp://alpha.gnu.org/gnu/
|
||||
- GNU automake 1.3
|
||||
(Beta releases are at ftp://ftp.cygnus.com/pub/tromey)
|
||||
- GNU libtool 1.2b
|
||||
- indent (GNU indent 1.9.1 is known good)
|
||||
|
||||
These should be available by ftp from prep.ai.mit.edu or any of the
|
||||
These should be available by ftp from ftp.gnu.org or any of the
|
||||
fine GNU mirrors. Beta software can be found at alpha.gnu.org.
|
||||
|
||||
If you are accessing gtk+ via CVS, then you will need to take several
|
||||
steps to get it to compile. You can do all these steps at once
|
||||
by running:
|
||||
In order to get CVS gtk+ installed on your system, you need to have
|
||||
the most recent CVS version of glib installed as well.
|
||||
The installation process of glib is similar to that of gtk+, but
|
||||
needs to be fulfilled prior to installation of gtk+.
|
||||
|
||||
To compile a CVS version of gtk+ on your system, you will need to take
|
||||
several steps to setup the tree for compilation. You can do all these
|
||||
steps at once by running:
|
||||
|
||||
cvsroot/gtk+# ./autogen.sh
|
||||
|
||||
Basically this does the following for you:
|
||||
|
||||
cvsroot/gtk+# aclocal; automake; autoconf
|
||||
cvsroot/gtk+/glib# aclocal; automake; autoconf
|
||||
|
||||
The above commands create the "configure" script. Now you
|
||||
can run the configure script in cvsroot/gtk+ to create all
|
||||
the Makefiles. You only need to call "configure" in cvsroot/gtk+
|
||||
as the one in glib will be invoked automatically.
|
||||
the Makefiles.
|
||||
|
||||
Before running autogen.sh or configure, make sure you have libtool
|
||||
in your path.
|
||||
@@ -34,11 +37,12 @@ options like --prefix=/usr to configure you can give those options
|
||||
to autogen.sh and they will be passed on to configure.
|
||||
|
||||
If at all possible, please use CVS to get the latest development version of
|
||||
gtk+. You can do the following to get gtk+ from cvs:
|
||||
gtk+ and glib. You can do the following to get glib and gtk+ from cvs:
|
||||
|
||||
$ export CVSROOT=':pserver:anonymous@cvs.gimp.org:/debian/home/gnomecvs'
|
||||
$ cvs login
|
||||
(there is no password, just hit return)
|
||||
$ cvs -z9 checkout glib
|
||||
$ cvs -z9 checkout gtk+
|
||||
|
||||
Please submit patches to the gtk-list@redhat.com mailing list (you must
|
||||
|
||||
158
INSTALL
158
INSTALL
@@ -1,36 +1,156 @@
|
||||
The 'configure' script can be given a number of options to
|
||||
enable and disable various features. For a complete list,
|
||||
type:
|
||||
Prerequisites
|
||||
=============
|
||||
|
||||
GTK+ requires the GLIB library, available at the same location as
|
||||
you got this package.
|
||||
|
||||
Simple install procedure
|
||||
========================
|
||||
|
||||
% gzip -cd gtk+-1.1.7.tar.gz | tar xvf - # unpack the sources
|
||||
% cd gtk+-1.1.7 # change to the toplevel directory
|
||||
% ./configure # run the `configure' script
|
||||
% make # build GTK
|
||||
[ Become root if necessary ]
|
||||
% make install # install GTK
|
||||
|
||||
The Nitty-Gritty
|
||||
================
|
||||
|
||||
The 'configure' script can be given a number of options to enable
|
||||
and disable various features. For a complete list, type:
|
||||
|
||||
./configure --help
|
||||
|
||||
A few of the more important ones:
|
||||
|
||||
* --prefix=PREFIX install architecture-independent files in PREFIX
|
||||
[ Defaults to /usr/local ]
|
||||
|
||||
* --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
|
||||
[ Defaults to the value given to --prefix ]
|
||||
|
||||
* --with-xinput=[no/gxi/xfree] support XInput [default=no]
|
||||
|
||||
The --with-xinput flag specifies whether to compile with support
|
||||
for the XInput extension (mainly used for graphics tablets), and
|
||||
which form of support to use:
|
||||
|
||||
no : no support
|
||||
gxi : Use generic XInput support
|
||||
xfree : Use special features in the Wacom drivers in XFree86 3.3.1
|
||||
and later.
|
||||
|
||||
For more information, follow the link from http://www.gtk.org
|
||||
|
||||
* --enable-xim support XIM [default=yes]
|
||||
|
||||
Specifying --disable-xim will disable support for entering
|
||||
internationalized text using X Input Methods. This will give
|
||||
some slight savings in speed and memory use and might be necessary
|
||||
internationalized text using X Input Methods. This will give some
|
||||
slight savings in speed and memory use and might be necessary
|
||||
with older versions of X.
|
||||
|
||||
* --with-locale=LOCALE locale name you want to use
|
||||
* --with-locale=LOCALE locale name you want to use
|
||||
|
||||
The --with-locale options is used to determine if your operating
|
||||
system has support for the locale you will be using. If not, X's built
|
||||
in locale support will be used.
|
||||
system has support for the locale you will be using. If not, X's
|
||||
built in locale support will be used.
|
||||
|
||||
Because of bugs in autoconf, it is necessary to specify this option
|
||||
even if your LANG environment variable is correctly set.
|
||||
Because of bugs in autoconf, it is necessary to specify this
|
||||
option even if your LANG environment variable is correctly set.
|
||||
|
||||
This option does not determine which locale GTK will use at
|
||||
runtime. That will be determined from the usual environment variables.
|
||||
If you will be using multiple locales with GTK, specify the one
|
||||
for which your operating system has the worst support for the
|
||||
--with-locale option.
|
||||
runtime. That will be determined from the usual environment
|
||||
variables. If you will be using multiple locales with GTK,
|
||||
specify the one for which your operating system has the worst
|
||||
support for the --with-locale option.
|
||||
|
||||
|
||||
Note for using XIM support with kinput2
|
||||
---------------------------------------
|
||||
Options can be given to the compiler and linker by setting
|
||||
environment variables before running configure. A few of the more
|
||||
important ones:
|
||||
|
||||
There is a bug in older versions of kinput2 that will cause
|
||||
GTK to hang when destroying a text entry. The latest versions
|
||||
of kinput is available from:
|
||||
CC : The C compiler to use
|
||||
CPPFLAGS : Flags for the C preprocesser such as -I and -D
|
||||
CFLAGS : C compiler flags
|
||||
|
||||
The most important use of this is to set the
|
||||
optimization/debugging flags. For instance, to compile with no
|
||||
debugging information at all, run configure as:
|
||||
|
||||
CFLAGS=-O2 ./configure # Bourne compatible shells (sh/bash/zsh)
|
||||
|
||||
or,
|
||||
|
||||
setenv CFLAGS -O2 ; ./configure # csh and variants
|
||||
|
||||
|
||||
Using an uninstalled copy of GLIB
|
||||
=================================
|
||||
|
||||
You can compile GTK+ against a copy of GLIB that you have not
|
||||
yet installed. To do this, give the --with-glib=DIR options
|
||||
to ./configure. For instance:
|
||||
|
||||
./configure --with-glib=../glib-1.1.7
|
||||
|
||||
This, however, will not work if you built GLIB with different
|
||||
source and build directories.
|
||||
|
||||
|
||||
Installation directories
|
||||
========================
|
||||
|
||||
The location of the installed files is determined by the --prefix
|
||||
and --exec-prefix options given to configure. There are also more
|
||||
detailed flags to control individual directories. However, the
|
||||
use of these flags is not tested.
|
||||
|
||||
One particular detail to note, is that the architecture-dependent
|
||||
include file glibconfig.h is installed in:
|
||||
|
||||
$exec_pref/lib/glib/include/
|
||||
|
||||
if you have a version in $prefix/include, this is out of date
|
||||
and should be deleted.
|
||||
|
||||
A shell script gtk-config is created during the configure
|
||||
process, and installed in the bin/ directory
|
||||
($exec_prefix/bin). This is used to determine the location of GTK
|
||||
when building applications. If you move GTK after installation,
|
||||
it will be necessary to edit this file.
|
||||
|
||||
For complete details, see the file docs/gtk-config.txt
|
||||
|
||||
|
||||
Notes for using XIM support for Japanese input
|
||||
==============================================
|
||||
|
||||
* There is a bug in older versions of kinput2 that will cause GTK
|
||||
to hang when destroying a text entry. The latest versions of
|
||||
kinput is available from:
|
||||
|
||||
ftp://ftp.sra.co.jp/pub/x11/kinput2
|
||||
|
||||
* The locale information file for the ja_JP EUC locale
|
||||
distributed with some recent versions of X11 specifies to use the
|
||||
C library multibyte functions. Unless your C library has support
|
||||
for Japanese locales, this is incorrect, and will cause problems
|
||||
for GTK's internationalization.
|
||||
|
||||
(In particular, this occurs with GNU libc 2.0 and 2.1, in which
|
||||
the multibyte functions always translate to and from UTF-8; but
|
||||
the problem may occur for other C libraries, and other operating
|
||||
systems as well.)
|
||||
|
||||
To fix this, change the line:
|
||||
|
||||
use_stdc_env True
|
||||
|
||||
to
|
||||
|
||||
use_stdc_env False
|
||||
|
||||
in the file /usr/X11R6/lib/X11/locale/ja_JP/XLC_LOCALE.
|
||||
|
||||
|
||||
|
||||
108
Makefile.am
108
Makefile.am
@@ -1,14 +1,93 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
SRC_SUBDIRS = glib gdk gtk
|
||||
SRC_SUBDIRS = gdk gtk
|
||||
SUBDIRS = $(SRC_SUBDIRS) docs
|
||||
|
||||
EXTRA_DIST = \
|
||||
gtk+.prj \
|
||||
makecopyright \
|
||||
TODO
|
||||
bin_SCRIPTS = gtk-config
|
||||
|
||||
.PHONY: files populate checkin release
|
||||
EXTRA_DIST = \
|
||||
HACKING \
|
||||
gtk+.spec \
|
||||
gtk.m4 \
|
||||
makecopyright \
|
||||
TODO \
|
||||
NEWS.pre-1-0 \
|
||||
ChangeLog.pre-1-0 \
|
||||
README.cvs-commits \
|
||||
examples/Makefile \
|
||||
examples/README.1ST \
|
||||
examples/extract.awk \
|
||||
examples/extract.sh \
|
||||
examples/aspectframe/Makefile \
|
||||
examples/aspectframe/aspectframe.c \
|
||||
examples/base/Makefile \
|
||||
examples/base/base.c \
|
||||
examples/buttons/Makefile \
|
||||
examples/buttons/buttons.c \
|
||||
examples/buttons/info.xpm \
|
||||
examples/clist/clist.c \
|
||||
examples/entry/Makefile \
|
||||
examples/entry/entry.c \
|
||||
examples/eventbox/Makefile \
|
||||
examples/eventbox/eventbox.c \
|
||||
examples/filesel/Makefile \
|
||||
examples/filesel/filesel.c \
|
||||
examples/gtkdial/Makefile \
|
||||
examples/gtkdial/dial_test.c \
|
||||
examples/gtkdial/gtkdial.c \
|
||||
examples/gtkdial/gtkdial.h \
|
||||
examples/helloworld/Makefile \
|
||||
examples/helloworld/helloworld.c \
|
||||
examples/helloworld2/Makefile \
|
||||
examples/helloworld2/helloworld2.c \
|
||||
examples/list/Makefile \
|
||||
examples/list/list.c \
|
||||
examples/menu/Makefile \
|
||||
examples/menu/menu.c \
|
||||
examples/menu/menufactory.c \
|
||||
examples/menu/menufactory.h \
|
||||
examples/menu/mfmain.c \
|
||||
examples/menu/mfmain.h \
|
||||
examples/notebook/Makefile \
|
||||
examples/notebook/notebook.c \
|
||||
examples/packer/Makefile \
|
||||
examples/packer/pack.c \
|
||||
examples/packbox/Makefile \
|
||||
examples/packbox/packbox.c \
|
||||
examples/paned/Makefile \
|
||||
examples/paned/paned.c \
|
||||
examples/pixmap/Makefile \
|
||||
examples/pixmap/pixmap.c \
|
||||
examples/progressbar/Makefile \
|
||||
examples/progressbar/progressbar.c \
|
||||
examples/radiobuttons/Makefile \
|
||||
examples/radiobuttons/radiobuttons.c \
|
||||
examples/rulers/Makefile \
|
||||
examples/rulers/rulers.c \
|
||||
examples/scribble-simple/Makefile \
|
||||
examples/scribble-simple/scribble-simple.c \
|
||||
examples/scrolledwin/Makefile \
|
||||
examples/scrolledwin/scrolledwin.c \
|
||||
examples/selection/Makefile \
|
||||
examples/selection/gettargets.c \
|
||||
examples/selection/setselection.c \
|
||||
examples/statusbar/Makefile \
|
||||
examples/statusbar/statusbar.c \
|
||||
examples/table/Makefile \
|
||||
examples/table/table.c \
|
||||
examples/tictactoe/Makefile \
|
||||
examples/tictactoe/tictactoe.c \
|
||||
examples/tictactoe/tictactoe.h \
|
||||
examples/tictactoe/ttt_test.c \
|
||||
examples/wheelbarrow/Makefile \
|
||||
examples/wheelbarrow/wheelbarrow.c \
|
||||
examples/find-examples.sh
|
||||
|
||||
|
||||
m4datadir = $(datadir)/aclocal
|
||||
m4data_DATA = gtk.m4
|
||||
|
||||
.PHONY: files release sanity snapshot
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
|
||||
@@ -21,13 +100,14 @@ files:
|
||||
done; \
|
||||
done
|
||||
|
||||
populate:
|
||||
@echo "populating project"
|
||||
@files=`$(MAKE) files | grep -v "make\[[1-9]\]"`; prcs populate -d gtk+.prj $$files
|
||||
|
||||
checkin: populate
|
||||
@echo "checking in project"
|
||||
@prcs checkin
|
||||
|
||||
release:
|
||||
rm -rf .deps */.deps
|
||||
cd docs && make distdocs
|
||||
$(MAKE) distcheck
|
||||
|
||||
sanity:
|
||||
./sanity_check $(VERSION)
|
||||
|
||||
|
||||
snapshot:
|
||||
$(MAKE) dist distdir=$(PACKAGE)`date +"%y%m%d"`
|
||||
|
||||
353
Makefile.in
353
Makefile.in
@@ -1,353 +0,0 @@
|
||||
# Makefile.in generated automatically by automake 1.2c from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
|
||||
top_builddir = .
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
transform = @program_transform_name@
|
||||
|
||||
NORMAL_INSTALL = true
|
||||
PRE_INSTALL = true
|
||||
POST_INSTALL = true
|
||||
NORMAL_UNINSTALL = true
|
||||
PRE_UNINSTALL = true
|
||||
POST_UNINSTALL = true
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
LD = @LD@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
NM = @NM@
|
||||
PACKAGE = @PACKAGE@
|
||||
RANLIB = @RANLIB@
|
||||
VERSION = @VERSION@
|
||||
x_cflags = @x_cflags@
|
||||
x_includes = @x_includes@
|
||||
x_ldflags = @x_ldflags@
|
||||
x_libs = @x_libs@
|
||||
xinput_progs = @xinput_progs@
|
||||
|
||||
SRC_SUBDIRS = glib gdk gtk
|
||||
SUBDIRS = $(SRC_SUBDIRS) docs
|
||||
|
||||
EXTRA_DIST = gtk+.prj makecopyright TODO REFCOUNTING BUGS
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES = gtk+.xconfig
|
||||
DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
|
||||
Makefile.in NEWS TODO acconfig.h aclocal.m4 config.guess config.h.in \
|
||||
config.sub configure configure.in gtk+.xconfig.in install-sh ltconfig \
|
||||
ltmain.sh missing mkinstalldirs stamp-h.in
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
GZIP = --best
|
||||
default: all
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: @MAINT@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
$(ACLOCAL_M4): @MAINT@ configure.in
|
||||
cd $(srcdir) && $(ACLOCAL)
|
||||
|
||||
config.status: $(srcdir)/configure
|
||||
$(SHELL) ./config.status --recheck
|
||||
$(srcdir)/configure: @MAINT@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
|
||||
config.h: stamp-h
|
||||
@:
|
||||
stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES= CONFIG_HEADERS=config.h \
|
||||
$(SHELL) ./config.status
|
||||
@echo timestamp > stamp-h
|
||||
$(srcdir)/config.h.in: @MAINT@$(srcdir)/stamp-h.in
|
||||
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
@echo timestamp > $(srcdir)/stamp-h.in
|
||||
|
||||
mostlyclean-hdr:
|
||||
|
||||
clean-hdr:
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h
|
||||
|
||||
maintainer-clean-hdr:
|
||||
gtk+.xconfig: $(top_builddir)/config.status gtk+.xconfig.in
|
||||
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= ./config.status
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
all-recursive install-data-recursive install-exec-recursive \
|
||||
installdirs-recursive install-recursive uninstall-recursive \
|
||||
check-recursive installcheck-recursive info-recursive dvi-recursive:
|
||||
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||
for subdir in $(SUBDIRS); do \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
(cd $$subdir && $(MAKE) $$target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||
rev=''; for subdir in $(SUBDIRS); do rev="$$subdir $$rev"; done; \
|
||||
for subdir in $$rev; do \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
(cd $$subdir && $(MAKE) $$target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
(cd $$subdir && $(MAKE) tags); \
|
||||
done
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES)
|
||||
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
||||
done; \
|
||||
test -z "$(ETAGS_ARGS)config.h.in$(SOURCES)$(HEADERS)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $(SOURCES) $(HEADERS) -o $$here/TAGS)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
clean-tags:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID
|
||||
|
||||
maintainer-clean-tags:
|
||||
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
-rm -rf $(distdir)
|
||||
GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz
|
||||
mkdir $(distdir)/=build
|
||||
mkdir $(distdir)/=inst
|
||||
dc_install_base=`cd $(distdir)/=inst && pwd`; \
|
||||
cd $(distdir)/=build \
|
||||
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
|
||||
&& $(MAKE) \
|
||||
&& $(MAKE) dvi \
|
||||
&& $(MAKE) check \
|
||||
&& $(MAKE) install \
|
||||
&& $(MAKE) installcheck \
|
||||
&& $(MAKE) dist
|
||||
-rm -rf $(distdir)
|
||||
@echo "========================"; \
|
||||
echo "$(distdir).tar.gz is ready for distribution"; \
|
||||
echo "========================"
|
||||
dist: distdir
|
||||
-chmod -R a+r $(distdir)
|
||||
GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
||||
-rm -rf $(distdir)
|
||||
dist-all: distdir
|
||||
-chmod -R a+r $(distdir)
|
||||
GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
||||
-rm -rf $(distdir)
|
||||
distdir: $(DISTFILES)
|
||||
-rm -rf $(distdir)
|
||||
mkdir $(distdir)
|
||||
-chmod 777 $(distdir)
|
||||
here=`cd $(top_builddir) && pwd`; \
|
||||
top_distdir=`cd $(distdir) && pwd`; \
|
||||
distdir=`cd $(distdir) && pwd`; \
|
||||
cd $(top_srcdir) \
|
||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
done
|
||||
for subdir in $(SUBDIRS); do \
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
chmod 777 $(distdir)/$$subdir; \
|
||||
(cd $$subdir && $(MAKE) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
|
||||
|| exit 1; \
|
||||
done
|
||||
info: info-recursive
|
||||
dvi: dvi-recursive
|
||||
check: all-am
|
||||
$(MAKE) check-recursive
|
||||
installcheck: installcheck-recursive
|
||||
all-recursive-am: config.h
|
||||
$(MAKE) all-recursive
|
||||
|
||||
all-am: Makefile config.h
|
||||
|
||||
install-exec: install-exec-recursive
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install-data: install-data-recursive
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install: install-recursive
|
||||
@:
|
||||
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
all: all-recursive-am all-am
|
||||
|
||||
install-strip:
|
||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||
installdirs: installdirs-recursive
|
||||
|
||||
|
||||
mostlyclean-generic:
|
||||
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(DISTCLEANFILES)
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||
mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
|
||||
|
||||
clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
|
||||
|
||||
distclean-am: distclean-hdr distclean-tags distclean-generic clean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \
|
||||
maintainer-clean-generic distclean-am
|
||||
|
||||
mostlyclean: mostlyclean-recursive mostlyclean-am
|
||||
|
||||
clean: clean-recursive clean-am
|
||||
|
||||
distclean: distclean-recursive distclean-am
|
||||
-rm -f config.status
|
||||
-rm -f libtool
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive maintainer-clean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
-rm -f config.status
|
||||
|
||||
.PHONY: default mostlyclean-hdr distclean-hdr clean-hdr \
|
||||
maintainer-clean-hdr install-data-recursive uninstall-data-recursive \
|
||||
install-exec-recursive uninstall-exec-recursive installdirs-recursive \
|
||||
uninstalldirs-recursive all-recursive check-recursive \
|
||||
installcheck-recursive info-recursive dvi-recursive \
|
||||
mostlyclean-recursive distclean-recursive clean-recursive \
|
||||
maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
|
||||
distclean-tags clean-tags maintainer-clean-tags distdir info dvi \
|
||||
installcheck all-recursive-am all-am install-exec install-data install \
|
||||
uninstall all installdirs mostlyclean-generic distclean-generic \
|
||||
clean-generic maintainer-clean-generic clean mostlyclean distclean \
|
||||
maintainer-clean
|
||||
|
||||
|
||||
.PHONY: files populate checkin release
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
@for subdir in $(SUBDIRS); do \
|
||||
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||
for file in $$files; do \
|
||||
echo $$subdir/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
populate:
|
||||
@echo "populating project"
|
||||
@files=`$(MAKE) files | grep -v "make\[[1-9]\]"`; prcs populate -d gtk+.prj $$files
|
||||
|
||||
checkin: populate
|
||||
@echo "checking in project"
|
||||
@prcs checkin
|
||||
|
||||
release:
|
||||
$(MAKE) dist distdir=$(PACKAGE)`date +"%y%m%d"`
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
251
NEWS
251
NEWS
@@ -1,77 +1,184 @@
|
||||
Overview of Fixes in GTK+ 0.99.5:
|
||||
What is new in GTK+ 1.1.7:
|
||||
|
||||
* Signal signedness and naming corrections
|
||||
* rc/style fixes
|
||||
* text, entry widget fixes
|
||||
* gtkeditable fixes
|
||||
* scrollbar flickering fixed
|
||||
* check casts are more descriptive
|
||||
* DND fixes
|
||||
* FAQ updates
|
||||
* Bug fixes
|
||||
* Fixed memory mis-allocation in default files code
|
||||
* Various event handling fixes
|
||||
* Wide character support for entry and text
|
||||
* Destroy widgets _after_ propagating unrealize signals through
|
||||
widget heirarchy
|
||||
* Only build XIM-support if available
|
||||
* Tutorial and examples updates
|
||||
* Added gtk_drag_source_unset()
|
||||
|
||||
Overview of Changes in GTK+ 0.99.4:
|
||||
What is new in GTK+ 1.1.6:
|
||||
|
||||
* Reference counting revolution integrated.
|
||||
Refer to docs/refcounting.txt on this issue.
|
||||
* Implementation of a decent debugging system, you would want
|
||||
to export GTK_DEBUG=objects if you are going to develop gtk applications,
|
||||
refer to docs/debugging.txt for further information.
|
||||
* Additions on the signal code for querying information about certain signals,
|
||||
and pending handlers of signals.
|
||||
* Support for user signals, and major changes to internal signal handler
|
||||
handling for proper signal removal and invokation of after signals.
|
||||
* Additional signals for various widgets e.g, GtkHandleBox::child_attached,
|
||||
GtkHandleBox::child_detached, GtkWidget::style_set, GtkWidget::parent_set.
|
||||
* GtkTooltips became a true descendant of GtkObject via derivation from
|
||||
GtkData and facilitates an extra tip string which can be used as e.g. an
|
||||
index into context help.
|
||||
* Split up of the widget/object flags into a private and a public portion,
|
||||
consult docs/widget_system.txt on this.
|
||||
* Support for hot keys on gtk programs via gtk_key_snooper_install().
|
||||
* Reimplementation of the *_interp functions as *_full functions to provide
|
||||
simple callback functions as well.
|
||||
* Idle functions are now prioritized.
|
||||
* Many enhancements to GtkNotebook.
|
||||
* New widget GtkSpinButton, check out testgtk.
|
||||
* New widget GtkTipsQuery for letting the user query tooltips of widgets.
|
||||
* Addition of GtkEditable base widget to encapsulate selection and
|
||||
clipboard handling. (GtkEntry and GtkText use this)
|
||||
* Text widget more complete.
|
||||
* Additions to GtkStatusBar to make it complete.
|
||||
* Gdk now supports regions.
|
||||
* Access masks for widget arguments (GTK_ARG_READABLE/GTK_ARG_WRITABLE).
|
||||
* Function replacements:
|
||||
g_string_hash() -> g_str_hash()
|
||||
g_string_equal() -> g_str_equal()
|
||||
gtk_tooltips_set_tips() -> gtk_tooltips_set_tip()
|
||||
* Support for quit handlers in gtk_main().
|
||||
* Motif window mangaer hints support.
|
||||
* Widget arguments are now flagged for readability/writability.
|
||||
* Additions to documentation.
|
||||
* Various FAQ updates. (FAQ now included)
|
||||
* Clean ups and many many bug fixes by a lot of people all over the place.
|
||||
* New, long and descriptive ChangeLog entries for bored readers ;)
|
||||
* The signal system now features emission hooks whith special semantics,
|
||||
refer to the ChangeLog for this.
|
||||
* Minor? speedups and memory reductions to the emission handling of the
|
||||
signal system.
|
||||
* _interp() function variants are deprecated now. the corresponding *_full()
|
||||
variants are provided for a long time now.
|
||||
* Dnd abort timeout increased to 10 minutes.
|
||||
* GtkScrolledWindow inherits from GtkBin now.
|
||||
* GTK_POLICY_NEVER is implemented for scrolled windows now.
|
||||
* Lots of API clean ups.
|
||||
* Incremental freezing abilities.
|
||||
* Integrated widgets from the GNOME tree: GtkLayout, GtkPlug and GtkSocket.
|
||||
* New window functions for transient relationship, default size, and
|
||||
geometry hints
|
||||
* Default rc files are now read in (<sysconfdir/etc/gtkrc and ~/.gtkrc)
|
||||
GTK_RC_FILES environment variable and functions are provided to configure
|
||||
this behavior
|
||||
* Read doc/Changes-1.2.txt to properly adapt your code.
|
||||
* Bug Fixes.
|
||||
|
||||
Overview of Changes in GTK+ 0.99.3:
|
||||
What is new in GTK+ 1.1.5:
|
||||
|
||||
* Filesel enhancement / stability changes
|
||||
* New widget, gtkcombo
|
||||
* Widgets in the toolbar do not get the focus
|
||||
* New widget, gtkstatusbar (still in-progress)
|
||||
* g_string_equal renamed g_str_equal
|
||||
* g_string_hash renamed g_str_hash
|
||||
* new gtkbox functions to allow modification of the child
|
||||
linkage after the widget tree is setup
|
||||
* gtk_*_get_arg() and gtk_*_set_arg() fixes and implementations
|
||||
* DND changes/fixes
|
||||
* Entry widget now has set_max_length function
|
||||
* Handlebox widget changes/fixes
|
||||
* Some work on text widget (still in-progress)
|
||||
* Now the toolbar supports arbitrary widgets as well
|
||||
* CList has resizable columns again
|
||||
* CList now looks consistant with scrolled windows
|
||||
* Remove flickering from entry widget
|
||||
* Added switch_page signal to notebook widget
|
||||
* Documentation additions
|
||||
* Other bug fixes...
|
||||
* Theme integration
|
||||
* Widget style modification is now handled through GtkRcStyles
|
||||
* GtkPixmaps now grey out pixmaps when insensitive
|
||||
* Notebook enhancements
|
||||
* Shadow configurability for menubars and handleboxes
|
||||
* DND enhancements
|
||||
* gtkfilesel now supports automounters better
|
||||
* Implementation of expose compression
|
||||
* Queued redraws of partial areas
|
||||
* Scrolledwindow (+Viewport) source incompatibilities, children that are added
|
||||
to a scrolled window don't get an automatic viewport anymore. a convenience
|
||||
function gtk_scrolled_window_add_with_viewport() is suplied for this task
|
||||
* Deprecated functions will now issue a message, informing the programmer about
|
||||
the use of this function. These functions will get removed in future versions
|
||||
* Non-functional functions got removed entirely
|
||||
* gtk_widget_new() and gtk_object_new() will now auto-construct new objects.
|
||||
A new function gtk_object_default_construct() is provided now which should
|
||||
be called after every gtk_type_new() to perfom the auto-construction
|
||||
* Improved argument support of several widgets
|
||||
* Bug Fixes
|
||||
|
||||
What is new in GTK+ 1.1.3:
|
||||
|
||||
* GtkCList/GtkCTree now have the ability to:
|
||||
- hide/show individual columns
|
||||
- disable/enable column resizing
|
||||
- set min and max for column widths
|
||||
- set expander style of the ctree
|
||||
- set/get row and cell styles
|
||||
- set spacing between tree expander and cell contents in ctree
|
||||
- toggle auto_resize for columns
|
||||
* Must enhanced DND support, removed old DND code
|
||||
* Idle functions are now implemented via GHook, giving a slight speed
|
||||
improvement
|
||||
* An environment variable GTK_MODULES which takes a colon seperated
|
||||
list of module names GTK+ will now automatically load at gtk_init() startup
|
||||
* GtkFontSel now has support for an extra 'base' filter
|
||||
* New function gdk_window_set_root_origin to get the real geometry taking
|
||||
into account window manager offsets
|
||||
* New function gtk_text_set_line_wrap to toggle line wrapping
|
||||
* New function gtk_widget_add_events which safely adds additional
|
||||
events to a widget's event mask
|
||||
* New function gdk_event_get_time to get the timestamp from a generic
|
||||
event
|
||||
* New widget GtkCalendar
|
||||
* New widget GtkInvisible - InputOnly offscreen windows used for reliable
|
||||
pointer grabs and selection handling in DND code
|
||||
* New functions gtk_object_remove_no_notify[_by_id] to remove a certain
|
||||
data portion without invokation of its destroy notifier
|
||||
* gtk_spin_button_construct is now deprecated, use gtk_spin_button_configure
|
||||
instead
|
||||
* gtk_clist_set_border is now deprecated, use gtk_clist_set_shadow_type
|
||||
instead
|
||||
* Removed functions gtk_object_set_data_destroy[_by_id]
|
||||
* Documentation additions/updates
|
||||
* HTML and plain text files are now included in the distribution
|
||||
* Bug fixes, typeness corrections, and general fixups
|
||||
|
||||
What is new in GTK+ 1.1.2:
|
||||
|
||||
* Gtk+ is now featuring runtime loading of dynamic modules via the
|
||||
--gtk-modules= command line switch. such modules have to export a
|
||||
G_MODULE_EXPORT void gtk_module_init (gint *argc, gchar ***argv);
|
||||
function which will be invoked to initialize the module. since such
|
||||
modules may create new widget types, they are always resident.
|
||||
* The tutorial has been updated again.
|
||||
* Changes to menus including tearoff menus and accelerators.
|
||||
* Better support for modal dialogs.
|
||||
* Removed CAN_FOCUS by default from scrollbars and button children of toolbar.
|
||||
* More improvements and fixes for GtkCList and GtkCTree (i.e. row sorting).
|
||||
* GtkCTree rows can be unselectable now.
|
||||
* The GtkCTree API has undergone major renames (see ChangeLog entry from Lars
|
||||
Hamann on Tue Aug 18 00:29:13 1998).
|
||||
* A bunch of varargs functions changed to get va_lists working on systems that
|
||||
implement va_lists as arrays.
|
||||
* Improvements to the gdkrgb code.
|
||||
* Improvements to Gdk color handling so we greatly reduce server traffic and
|
||||
don't leak colors anymore.
|
||||
* Improved internal widget tree iterators (the GtkContainer::foreach signal
|
||||
vanished because of this).
|
||||
* Option menus can have the keyboard focus now.
|
||||
* More fixups to the text widget.
|
||||
* GtkFileSelection should behave much more nicely in combination with AFS now.
|
||||
* Support for label underlining.
|
||||
* Support for GLib 1.1.3 log domains.
|
||||
* Documentation improvements.
|
||||
* Configuration fixes on various platforms.
|
||||
* Miscellaneous fixes to XInput support.
|
||||
* Build with shared library dependencies on Linux
|
||||
* Fix for a major bug in the type systems memory allocation code that could
|
||||
cause random crashes.
|
||||
* Libtool update to version 1.2b.
|
||||
* Lots of bugfixes and cleanups again ;)
|
||||
|
||||
|
||||
What is new in GTK+ 1.1.1:
|
||||
|
||||
* Tutorial updates and additions.
|
||||
* Key binding support for GtkListItems and GtkList.
|
||||
* Extended selection mode and autoscrolling for GtkLists.
|
||||
* A GtkCtree now operates on GtkCTreeNode* structures rather than GList*.
|
||||
* GtkCTreeNodes can now be created from GNode trees.
|
||||
* Bug fixes for GtkNotebook, GtkCList, GtkCombo and GdkWindow reparentation.
|
||||
|
||||
|
||||
What is new in GTK+ 1.1.0:
|
||||
|
||||
* New widget GtkFontSelector.
|
||||
* New featurefull progress bar.
|
||||
* New container widget GtkPacker.
|
||||
* New object GtkItemFactory, GtkMenuFactory is deprecated.
|
||||
* New key binding system, configurable via rcfiles, similar to styles.
|
||||
* New widget GtkCTree with drag selections and keyboard movement and
|
||||
and horizontal scrolling. Features also implemented for GtkCList.
|
||||
* Significant speedups to widget creation and destruction through caching
|
||||
colormap and visual queries to the XServer.
|
||||
* Speedups for type creation and especially gtk_type_is_a() checks.
|
||||
* Speedups in signal lookup, creation and emissions and connection handling.
|
||||
* Minor speedups with object data allocation and destruction.
|
||||
* Additions to the signal handling API (e.g. *_emitv).
|
||||
* Support for rc-file reparsing.
|
||||
* Resizing logic is now implemented on container widget basis, rather than
|
||||
for toplevel GtkWindows only.
|
||||
* Buttons support relief styles now.
|
||||
* Some widgets are now allocated through memchunks to behave more memory wise.
|
||||
* Newly included file gtkfeatures.h which defines compatibility macros to
|
||||
test for certain API features upon program compilation.
|
||||
* Child arguments support for container widgets.
|
||||
* Far better support for object arguments, revamp of the underlying
|
||||
mechanism for speed and reusability. Child/object arguments don't
|
||||
need to be preceeded by the "GtkType::" portion anymore.
|
||||
* Removed GtkAcceleratorTable in favour of GtkAccelGroup, accelerator display
|
||||
is now performed by a new widget GtkAccelLabel.
|
||||
* Overhaul of the resizing code. Resizing behaviour can now be specified
|
||||
on GtkContainer basis, so the underlying algorithm isn't only available
|
||||
for GtkWindows.
|
||||
* GtkTables are now fully resizable.
|
||||
* The GtkType system now supports an additional base class initialization
|
||||
function.
|
||||
* GtkStyles and key bindings can now be looked up depending on the base
|
||||
types of a widget, through a new keyword `class' in rc files.
|
||||
* GtkButton derives from GtkBin (finally).
|
||||
* More descriptive error messages on rc parsing.
|
||||
* Runtime information is available to query enum/flag definition values.
|
||||
* Upgrade to libtool-1.2
|
||||
* Legions of bug fixes, memory leaks, segfaults, of-by-something errors...
|
||||
including those that already went into the 1.0.x branch.
|
||||
* A big bunch of features and cosmetic fixups that just got lost in
|
||||
the masses of changes.
|
||||
|
||||
124
NEWS.pre-1-0
Normal file
124
NEWS.pre-1-0
Normal file
@@ -0,0 +1,124 @@
|
||||
|
||||
Overview of Changes in GTK+ 1.0.0:
|
||||
|
||||
* A few bug fixes.
|
||||
|
||||
Overview of Changes in GTK+ 0.99.10:
|
||||
|
||||
* Lots of bug fixes
|
||||
* Documentation improvements
|
||||
* Better looking handlebox
|
||||
* A few convenience functions
|
||||
|
||||
Overview of Changes in GTK+ 0.99.9:
|
||||
|
||||
* Added examples directory, even more examples soon
|
||||
* Added optional word wrap to gtktext
|
||||
* Changes to gtkhandlebox
|
||||
* Lots of bug fixes
|
||||
|
||||
Overview of Changes in GTK+ 0.99.8:
|
||||
|
||||
* Compilation and configuration fixes
|
||||
* DND Fixes
|
||||
* New test in testgtk: cursors
|
||||
* Tutorial updates/additions
|
||||
* Few more FAQ additions
|
||||
* More prep for 1.0
|
||||
|
||||
Overview of Changes in GTK+ 0.99.7:
|
||||
|
||||
* This release is mainly because 0.99.6 did not compile completely
|
||||
due to a missing file.
|
||||
* Fixes to Gtk's quit handlers.
|
||||
|
||||
Overview of Changes in GTK+ 0.99.6:
|
||||
|
||||
* Intermediate release to become 1.0.
|
||||
* More signedness corrections for handler functions in gtkmain.h.
|
||||
* Semantics of GtkWidget::delete_event changed.
|
||||
* Documentation updates.
|
||||
* Inclusion of Gtk tutorial.
|
||||
* Implementation of a new shutdown method for GtkObject's executed prior to
|
||||
actual destruction. WARNING: this breaks binary compatibility, programs using
|
||||
Gtk need to be recompiled.
|
||||
* Clean ups due to compiler warnings.
|
||||
* Various widget fixes.
|
||||
|
||||
Overview of Fixes in GTK+ 0.99.5:
|
||||
|
||||
* Signal signedness and naming corrections
|
||||
* rc/style fixes
|
||||
* text, entry widget fixes
|
||||
* gtkeditable fixes
|
||||
* scrollbar flickering fixed
|
||||
* check casts are more descriptive
|
||||
* DND fixes
|
||||
* FAQ updates
|
||||
* Bug fixes
|
||||
|
||||
Overview of Changes in GTK+ 0.99.4:
|
||||
|
||||
* Reference counting revolution integrated.
|
||||
Refer to docs/refcounting.txt on this issue.
|
||||
* Implementation of a decent debugging system, you would want
|
||||
to export GTK_DEBUG=objects if you are going to develop gtk applications,
|
||||
refer to docs/debugging.txt for further information.
|
||||
* Additions on the signal code for querying information about certain signals,
|
||||
and pending handlers of signals.
|
||||
* Support for user signals, and major changes to internal signal handler
|
||||
handling for proper signal removal and invokation of after signals.
|
||||
* Additional signals for various widgets e.g, GtkHandleBox::child_attached,
|
||||
GtkHandleBox::child_detached, GtkWidget::style_set, GtkWidget::parent_set.
|
||||
* GtkTooltips became a true descendant of GtkObject via derivation from
|
||||
GtkData and facilitates an extra tip string which can be used as e.g. an
|
||||
index into context help.
|
||||
* Split up of the widget/object flags into a private and a public portion,
|
||||
consult docs/widget_system.txt on this.
|
||||
* Support for hot keys on gtk programs via gtk_key_snooper_install().
|
||||
* Reimplementation of the *_interp functions as *_full functions to provide
|
||||
simple callback functions as well.
|
||||
* Idle functions are now prioritized.
|
||||
* Many enhancements to GtkNotebook.
|
||||
* New widget GtkSpinButton, check out testgtk.
|
||||
* New widget GtkTipsQuery for letting the user query tooltips of widgets.
|
||||
* Addition of GtkEditable base widget to encapsulate selection and
|
||||
clipboard handling. (GtkEntry and GtkText use this)
|
||||
* Text widget more complete.
|
||||
* Additions to GtkStatusBar to make it complete.
|
||||
* Gdk now supports regions.
|
||||
* Access masks for widget arguments (GTK_ARG_READABLE/GTK_ARG_WRITABLE).
|
||||
* Function replacements:
|
||||
g_string_hash() -> g_str_hash()
|
||||
g_string_equal() -> g_str_equal()
|
||||
gtk_tooltips_set_tips() -> gtk_tooltips_set_tip()
|
||||
* Support for quit handlers in gtk_main().
|
||||
* Motif window mangaer hints support.
|
||||
* Widget arguments are now flagged for readability/writability.
|
||||
* Additions to documentation.
|
||||
* Various FAQ updates. (FAQ now included)
|
||||
* Clean ups and many many bug fixes by a lot of people all over the place.
|
||||
* New, long and descriptive ChangeLog entries for bored readers ;)
|
||||
|
||||
Overview of Changes in GTK+ 0.99.3:
|
||||
|
||||
* Filesel enhancement / stability changes
|
||||
* New widget, gtkcombo
|
||||
* Widgets in the toolbar do not get the focus
|
||||
* New widget, gtkstatusbar (still in-progress)
|
||||
* g_string_equal renamed g_str_equal
|
||||
* g_string_hash renamed g_str_hash
|
||||
* new gtkbox functions to allow modification of the child
|
||||
linkage after the widget tree is setup
|
||||
* gtk_*_get_arg() and gtk_*_set_arg() fixes and implementations
|
||||
* DND changes/fixes
|
||||
* Entry widget now has set_max_length function
|
||||
* Handlebox widget changes/fixes
|
||||
* Some work on text widget (still in-progress)
|
||||
* Now the toolbar supports arbitrary widgets as well
|
||||
* CList has resizable columns again
|
||||
* CList now looks consistant with scrolled windows
|
||||
* Remove flickering from entry widget
|
||||
* Added switch_page signal to notebook widget
|
||||
* Documentation additions
|
||||
* Other bug fixes...
|
||||
71
README
71
README
@@ -1,18 +1,75 @@
|
||||
General Information
|
||||
===================
|
||||
|
||||
This is GTK+ version 0.99.5. GTK, which stands for the Gimp ToolKit,
|
||||
is a library for creating graphical user interfaces.
|
||||
This is GTK+ version 1.1.7. GTK+, which stands for the Gimp ToolKit,
|
||||
is a library for creating graphical user interfaces for the X Window
|
||||
System. It is designed to be small, efficient, and flexible. GTK+ is
|
||||
written in C with a very object-oriented approach.
|
||||
|
||||
The official ftp site is:
|
||||
ftp://ftp.gimp.org/pub/gtk
|
||||
ftp://ftp.gtk.org/pub/gtk
|
||||
|
||||
The official web site is:
|
||||
http://www.gimp.org/gtk
|
||||
|
||||
Patches can be uploaded to:
|
||||
ftp://ftp.gimp.org/incoming
|
||||
http://www.gtk.org/
|
||||
|
||||
A mailing list is located at:
|
||||
gtk-list@redhat.com
|
||||
|
||||
To subscribe: mail -s subscribe gtk-list-request@redhat.com < /dev/null
|
||||
(Send mail to gtk-list-request@redhat.com with the subject "subscribe")
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
See the file 'INSTALL'
|
||||
|
||||
How to report bugs
|
||||
==================
|
||||
|
||||
To report a bug, send mail either to gtk-list, as mentioned
|
||||
above, or to gtk-bugs@gtk.org. If you send mail to gtk-list, you
|
||||
must be subscribed yourself.
|
||||
|
||||
In the mail include:
|
||||
|
||||
* The version of GTK
|
||||
|
||||
* Information about your system. For instance:
|
||||
|
||||
- What operating system and version
|
||||
- What version of X
|
||||
- For Linux, what version of the C library
|
||||
|
||||
And anything else you think is relevant.
|
||||
|
||||
* How to reproduce the bug.
|
||||
|
||||
If you can reproduce it with the testgtk program that is built
|
||||
in the gtk/ subdirectory, that will be most convenient. Otherwise,
|
||||
please include a short test program that exhibits the behavior.
|
||||
As a last resort, you can also provide a pointer to a larger piece
|
||||
of software that can be downloaded.
|
||||
|
||||
(Bugs that can be reproduced within the GIMP are almost as good
|
||||
as bugs that can be reproduced in testgtk. If you are reporting a
|
||||
bug found with the GIMP, please include the version number of the GIMP
|
||||
you are using)
|
||||
|
||||
* If the bug was a crash, the exact text that was printed out
|
||||
when the crash occured.
|
||||
|
||||
* Further information such as stack traces may be useful, but
|
||||
is not necessary. If you do send a stack trace, and the error
|
||||
is an X error, it will be more useful if the stacktrace
|
||||
is produced running the test program with the --sync command
|
||||
line option.
|
||||
|
||||
Patches
|
||||
=======
|
||||
|
||||
Patches can be uploaded to the incoming/ directory on
|
||||
ftp.gtk.org. Please follow the instructions there, and include
|
||||
your name and email address in the README file.
|
||||
|
||||
If the patch fixes a bug, it is usually a good idea to include
|
||||
all the information described in "How to Report Bugs".
|
||||
|
||||
63
README.cvs-commits
Normal file
63
README.cvs-commits
Normal file
@@ -0,0 +1,63 @@
|
||||
GTK+ is part of the GNOME CVS repository. At the current time, any
|
||||
person with write access to the GNOME repository, can make changes to
|
||||
GTK+. This is a good thing, in that it encourages many people to work
|
||||
on GTK+, and progress can be made quickly. However, GTK+ is a fairly
|
||||
large and complicated package that many other things depend on, so to
|
||||
avoid unnecessary breakage, and to take advantage of the knowledge
|
||||
about GTK+ that has been built up over the last 18 months, we'd like
|
||||
to ask people commiting to GTK+ to follow a few rules:
|
||||
|
||||
0) Ask first. If your changes are major, or could possibly break existing
|
||||
code, you should always ask. If your change is minor and you've
|
||||
been working on GTK+ for a while it probably isn't necessary
|
||||
to ask. But when in doubt, ask. Even if your change is correct,
|
||||
somebody may know a better way to do things.
|
||||
|
||||
If you are making changes to GTK+, you should be subscribed
|
||||
to gtk-devel-list@redhat.com. (Subscription address:
|
||||
gtk-devel-list-request@redhat.com.) This is a good place to ask
|
||||
about intended changes.
|
||||
|
||||
If you just want to make a trivial change, and don't want to subscribe,
|
||||
you can also mail gtk-bugs@gtk.org. Or, alternatively, you can look in
|
||||
the ChangeLog for somebody who has been making changes to the file
|
||||
you want to change and email them.
|
||||
|
||||
#gimp on byxnet (irc.gimp.org, irc2.gimp.org, irc3.gimp.org,
|
||||
irc.germany.gimp.org...)s also a good place to find GTK+ developers to
|
||||
discuss changes with, however, email to gtk-devel-list is the most
|
||||
certain and preferred method.
|
||||
|
||||
1) Ask _first_.
|
||||
|
||||
2) There must be a ChangeLog for every commit. (If you discover that
|
||||
you only committed half the files you meant to and need to fix that
|
||||
up, or something, you don't need a new ChangeLog entry. But in general,
|
||||
ChangeLog entries are mandatory.) Changes with out ChangeLog entries
|
||||
will be reverted.
|
||||
|
||||
3) There _must_ be a ChangeLog for every commit.
|
||||
|
||||
Notes:
|
||||
|
||||
* If you are going to be changing many files in an experimental fashion,
|
||||
it probably is a good idea to create a separate branch for your changes.
|
||||
|
||||
* The ChangeLog entries should preferrably match in date format
|
||||
with the existing entries. You can set how emacs does this
|
||||
by using customize mode:
|
||||
|
||||
- M-x customize
|
||||
- set Programming/Tools/ChangeLog/Add Log Time Format to
|
||||
'Old Format'
|
||||
|
||||
Or, set the add-log-time-format to 'current-time-string in
|
||||
your .emacs file.
|
||||
|
||||
Owen Taylor
|
||||
13 Aug 1998
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
289
TODO
289
TODO
@@ -1,128 +1,58 @@
|
||||
TODO BEFORE GTK 1.0
|
||||
-------------------
|
||||
|
||||
For 1.2.0 release:
|
||||
- remove deprecated functions from *.[hc] files.
|
||||
- finish composite child stuff.
|
||||
- implement constructor functionality for all widgets.
|
||||
|
||||
Bugs:
|
||||
* pasting into a GtkEntry that already has a very long string,
|
||||
causes the app to hang.
|
||||
* Change bitfields to guints from enums, or vice versa?
|
||||
|
||||
* MappingNotify events produce warnings.
|
||||
|
||||
* the type system (gtktypeutils.c) has to handle creations of fundamental
|
||||
types seperatedly from derived types, so we don't screw foreign
|
||||
fundamental types with an already extensively increased seqno.
|
||||
|
||||
* Vertical scrollbar: the expose event looks hosed and is causing
|
||||
quite a bit of flickering
|
||||
Actually this affects both scrollbar implementation, you can best
|
||||
tell if you run the application with --sync (timj)
|
||||
|
||||
* signal parameters don't seem to get refreshed on recursive invokations
|
||||
of GTK_NO_RECURSE signals, which causes the restarted emissions to loose
|
||||
their actual point, i.e. parameter changes on the restarted emission,
|
||||
needs further investigation.
|
||||
|
||||
* Widget redrawing when the window resizes sometimes messes up.
|
||||
GtkLabels sometimes redraw without clearing up the underlying background on
|
||||
window resizes.
|
||||
|
||||
* Are there still some GtkCList changes outstanding? (Jay Painter)
|
||||
GtkCList is derived from GtkContainer but doesn't implement the
|
||||
need_resize, focus, add and remove methods from containers.
|
||||
it should at least issue a warning upon invokation of not supported
|
||||
member functions.
|
||||
|
||||
* GtkTree and GtkList should express in their *_add implementations,
|
||||
that they expect GtkListItems/GtkTreeItems as children. Similar
|
||||
things might apply to other containers.
|
||||
|
||||
* delay dnd settings to take effect once a widget is realized, this is
|
||||
to avoid force realizations. i think this goes along with owens dnd
|
||||
changes?
|
||||
-timj
|
||||
The way DND data types are set in GtkWidget really needs to be fixed.
|
||||
This is pretty high on my priority list, and I'll get to it as soon as
|
||||
the column list widget is done. The correct way dnd data needs to be set
|
||||
is to have a additional keyed data type with GtkWidget, which is applied to
|
||||
the widget's window upon realize.
|
||||
There also needs to be a way to set dnd-data on widget windows which are
|
||||
not the main window (for widgets that create more than one window).
|
||||
-Jay Painter
|
||||
DnD seems to work for me, but yes, there needs to be some sort of
|
||||
gtk_widget layer that makes it easier... Also, adding support for drop
|
||||
zones might be nice.
|
||||
-Elliot
|
||||
This one is reproducabel for me:
|
||||
testgtk --sync
|
||||
popup colorselection
|
||||
drag/drop works
|
||||
start up preview color
|
||||
drag works but not dropping
|
||||
end preview color
|
||||
drag/drop works
|
||||
start up prewiev color
|
||||
segfault in malloc
|
||||
-timj
|
||||
|
||||
* Change bitfields to guints from enums for C++ ?
|
||||
|
||||
* Force paned window handle to be kept on screen
|
||||
* A filter function which destroys the GDK window it is filtering
|
||||
events on is bad news.
|
||||
|
||||
Additions:
|
||||
* widgets which are redrawn because of a gtk_widget_draw(,NULL) should
|
||||
be removed from the redraw queue.
|
||||
|
||||
* GScanner: it might be good to ues stdio and getch() instead of 1-character
|
||||
reads. so one can take advantage of buffering. Currently each read() takes
|
||||
a separate syscall.
|
||||
|
||||
* implement gtk_default_draw_oval
|
||||
* focus handling for GtkOptionMenu (needs the previous)
|
||||
|
||||
* implement gtk_default_draw_oval and other missing things in gtkstyle.c.
|
||||
|
||||
* Lists should scroll to center the recently selected item if it isn't
|
||||
visible.
|
||||
|
||||
* enforce invariants on *_RESIZE* and *_REDRAW* flags.
|
||||
|
||||
* asure that child widgets are really get gtk_widget_destroy()ed in their
|
||||
parents destroy handler, and not just unparented or somesuch.
|
||||
|
||||
* GtkToolTips:
|
||||
allocate GtkTooltipsData from memchunks
|
||||
look into incorporation of outdated/gtk-dairiki-971208-[01].patch.gz
|
||||
|
||||
* Make widget attributes configurable after the widget is created (timj).
|
||||
|
||||
* Change gtk_widget_propagate_default_style() mechanism to
|
||||
void gtk_rc_string_export (const gchar *rc_additions,
|
||||
gboolean override_rc_styles);
|
||||
|
||||
* Configure events for windows that no longer exist fail in
|
||||
XTranslateCoordinates
|
||||
|
||||
TODO AFTER GTK 1.0
|
||||
------------------
|
||||
|
||||
* Make all widget attributes configurable after the widget is created (timj).
|
||||
|
||||
* Widgets dervied from GtkButton need to be able to override
|
||||
GtkButtonClass.paint. e.g. redrawing of GtkToggleButton with CAN_DEFAULT
|
||||
is messed up otheriwse. This does in fact not only apply to (toggle)buttons,
|
||||
we should introduce a common paint member for the GtkWidgetClass.
|
||||
|
||||
* Radio buttons need to display CAN/HAS_DEFAULT correctly.
|
||||
|
||||
* Seperate GtkObject and signaling system from Gdk dependancies?
|
||||
|
||||
* Seperate GtkObject, type and signaling system from Gdk dependancies,
|
||||
by moving them into a seperate libgtkobj.
|
||||
* move *_input_add (wrappers for select(2)) mechanism into glib.
|
||||
|
||||
* Make sure a widget added to a list is a list item and a widget added
|
||||
to a menu is a menu item, etc. GTK_BASIC was a first attempt at this,
|
||||
but it fails with subsequent container_add()s. maybe have another
|
||||
GTK_PARENT_BASIC (similar to GTK_PARENT_SENSITIVE) flag, to prevent
|
||||
tree iterations upon every container addition.
|
||||
|
||||
* gdk_expose_compress: ala-Xt, this would really help for opaque moves and
|
||||
such
|
||||
|
||||
* Entry should have a password mode (and it should show stars
|
||||
for user feedback).
|
||||
|
||||
* Entry should allow set_usize to work better, and should compute
|
||||
a different width when a maximum length is used.
|
||||
|
||||
* More dialogs: Print, GtkFontSelector, maybe others...
|
||||
|
||||
* Multiple document interface (MDI)?
|
||||
|
||||
* Support another widget style? Should be possible using GtkStyle's, but
|
||||
there may be some work needed to remove any style dependencies in widget
|
||||
code. Maybe GtkStyle's should have 'draw_push_button', 'draw_check_button',
|
||||
etc, functions to draw the various widgets.
|
||||
This will be covered by upcoming themability, raster is working on it.
|
||||
|
||||
* make the gtk_main callbacks consistent in their add/remove behaviour.
|
||||
|
||||
* More work on Documentation
|
||||
@@ -133,7 +63,7 @@ TODO AFTER GTK 1.0
|
||||
retrieve X values, and so they don't have to know the value of the
|
||||
XNxxx character constants.
|
||||
|
||||
* The "-geometry" option should be supported
|
||||
* The "--geometry" option should be supported
|
||||
|
||||
- Having gdk_init() parse the geometry option. (putting it into
|
||||
GDK means you can use XParseGeometry() without wrapping it)
|
||||
@@ -155,11 +85,63 @@ TODO AFTER GTK 1.0
|
||||
( You'd have to extend gdk_window_set_hints to accept the
|
||||
window gravity option to get it right. )
|
||||
|
||||
* Text/Edit widget: (some of these might be bugs that should be fixed now)
|
||||
? Allow moving the separator for paned widgets by dragging
|
||||
it directly instead of using the handle.
|
||||
|
||||
? Mark public use of gtk_tree_remove_item as deprecated - it should be used
|
||||
as:
|
||||
gtk_container_remove (GTK_CONTAINER(tree), widget);
|
||||
|
||||
* Standardize that all strings should be passed as gchar *, not
|
||||
guchar *. But what about non-string data? (gdk_property_change,
|
||||
gtk_selection_data_set) X makes these sort of things guchar...
|
||||
|
||||
* Check into XAddConnectionWatch - is this needed for XIM?
|
||||
|
||||
* Places where a _full variant is needed:
|
||||
|
||||
gtk_clist_set_row_data
|
||||
gtk_init_add
|
||||
gtk_menu_popup
|
||||
gtk_toolbar_prepend_element
|
||||
gtk_toolbar_insert_element
|
||||
gtk_widget_dnd_data_set (should be guchar * with a copy?
|
||||
shouldn't be there at all...)
|
||||
|
||||
* Try to rationally deal with someone else deleting one of our
|
||||
windows??? This would mean keeping track of our window heirarchy
|
||||
ourselves, for one thing, and will never be safe, because of
|
||||
race conditions.
|
||||
|
||||
* If a window spontaneously resizes itself N times before any
|
||||
ConfigureNotify events are received, then due to the interaction
|
||||
of the ConfigureNotify compression code in GDK and the resize
|
||||
count used for the window, the window will be size_allocated
|
||||
the next N-1 times it is moved.
|
||||
|
||||
Fix: Only send GDK_EVENT_CONFIGURE when the window is resized,
|
||||
create a new event type for toplevel motion. (GDK_EVENT_REPOSITION?)
|
||||
and eliminate the resize count in GtkWindow.
|
||||
|
||||
* Generic ScrolledWindow interface, which provide automatic scrollbar
|
||||
capability to Viewport, Text, and CList widgets.
|
||||
|
||||
* GTK_POLICY_NEVER for scrolled windows.
|
||||
|
||||
* Consider caching more state in GdkWindowPrivate. Currently,
|
||||
every widget realization involves a XGetGeometry and a
|
||||
XGetWindowAttributes. And every GdkWindow destruction
|
||||
involves a XQueryTree.
|
||||
|
||||
* Should all the default handlers really return FALSE? This can
|
||||
cause confusing presses to be sent to containers that actually
|
||||
want to get events on themselves.
|
||||
|
||||
Text/Edit widget:
|
||||
|
||||
Bugs:
|
||||
|
||||
- Who knows?
|
||||
- Really big font (150 pt), plus lots of editing caused segfault
|
||||
|
||||
Improvements:
|
||||
|
||||
@@ -200,30 +182,89 @@ TODO AFTER GTK 1.0
|
||||
appearance on exposes. But this would require using another
|
||||
window to get the origins.
|
||||
|
||||
? Allow moving the separator for paned widgets by dragging
|
||||
it directly instead of using the handle.
|
||||
- In word wrap mode, break:
|
||||
|
||||
? Mark public use of gtk_tree_remove_item as deprecated - it should be used
|
||||
as:
|
||||
gtk_container_remove (GTK_CONTAINER(tree), widget);
|
||||
aaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
||||
|
||||
* Standardize that all strings should be passed as gchar *, not
|
||||
guchar *. But what about non-string data? (gdk_property_change,
|
||||
gtk_selection_data_set) X makes these sort of things guchar...
|
||||
as:
|
||||
| Maximum column
|
||||
aaaaaaaaaaa bbbbbbbbbbb|
|
||||
bbbbbbbbbbbbbbbbbbbbbbb|
|
||||
bbbbbbbbb |
|
||||
|
||||
* Check into XAddConnectionWatch - is this needed for XIM?
|
||||
Instead of:
|
||||
|
|
||||
aaaaaaaaaaa |
|
||||
bbbbbbbbbbbbbbbbbbbbbbb|
|
||||
bbbbbbbbbbbbbbbbbbbb |
|
||||
|
||||
* Places where a _full variant is needed:
|
||||
- Blinking cursor
|
||||
|
||||
- API's : gtk_text_clear, gtk_text_delete_lines (gint start, gint end),
|
||||
gtk_text_append/prepend, gtk_text_insert_at (gint row, gint column),
|
||||
some function to get the row/column from the x/y-coordinates of a
|
||||
mouse click, some function to get the word/line under the mouse pointer
|
||||
[ From: Stefan Jeske <jeske@braunschweig.netsurf.de> ]
|
||||
|
||||
- "changed" emitted when doing deletes on empty Text widget.
|
||||
|
||||
- Delete IC in editable->unrealize, not editable->finalize?
|
||||
|
||||
Themes
|
||||
======
|
||||
|
||||
- When a scale gets shown/hidden only queue a redraw on the
|
||||
non-window portion, not the whole area.
|
||||
|
||||
- In various places, to avoid shaping windows excessively,
|
||||
we set parent relative backgrounds. This is an ugly
|
||||
hack and needs a better solution. Plus, I don't think
|
||||
these parent-relative backgrounds always persist to
|
||||
when they are actually needed.
|
||||
|
||||
Such calls exist in: GtkButton, GtkHandeBox, GtkItem,
|
||||
GtkListItem, GtkMenu, GtkMenuItem, GtkMisc,
|
||||
GtkNoteBook, GtkOptionMenu, GtkPaned, GtkPreview,
|
||||
GtkSpinButton and GtkTreeItem.
|
||||
|
||||
- For menus and for GtkWindow's, the realize() function
|
||||
calls paint(), so that background pixmaps can be set
|
||||
ahead of time, and prevent flashing when the window is
|
||||
shown. This is an ugly hack and needs a better solution.
|
||||
|
||||
=======
|
||||
|
||||
Calendar Widget:
|
||||
|
||||
- The widget should be nicely resizeable vertical too.
|
||||
|
||||
- CALENDAR_MARGIN should be removed, uses INNER_BORDER and
|
||||
style->class->[xy]thickness insted.
|
||||
|
||||
- Flag to choose between using standard three letter abbreviated
|
||||
weekday name or just the first character from it. It looks like
|
||||
that is what most other calendar-widgets do.
|
||||
|
||||
- Arrows should resize with the header-font.
|
||||
|
||||
- The keyboard support has to be finished.
|
||||
|
||||
DND
|
||||
===
|
||||
|
||||
- Use a cursor instead of an ICON when over Motif windows,
|
||||
to get rid of the current junk that Motif leaves because
|
||||
of it's XCopyArea stupidity for doing highlighting.
|
||||
|
||||
- Add a GTK_DRAG_VERIFY target flag and a "drag_data_verify"
|
||||
signal so that apps can easily check if a, say,
|
||||
text/uri-list URL looks OK during the drop.
|
||||
|
||||
- Check more for memory leaks.
|
||||
|
||||
- Drag and drop for Entry and Text widgets.
|
||||
|
||||
- Send synthetic motion events on structure changes so
|
||||
drag_enter/leave get sent properly. (See the popup
|
||||
in testdnd)
|
||||
|
||||
gtk_clist_set_row_data
|
||||
gtk_init_add
|
||||
gtk_menu_popup
|
||||
gtk_toolbar_prepend_element
|
||||
gtk_toolbar_insert_element
|
||||
gtk_widget_dnd_data_set (should be guchar * with a copy?
|
||||
shouldn't be there at all...)
|
||||
??? GtkDrawingarea.draw_data
|
||||
|
||||
* gtk_rc_add_[name/class]_style are broken for bg pixmaps, because
|
||||
styles are broken for bg pixmaps, and RC styles only hack around
|
||||
that.
|
||||
|
||||
17
acconfig.h
17
acconfig.h
@@ -15,27 +15,32 @@
|
||||
|
||||
|
||||
/* Other stuff */
|
||||
#undef GTK_COMPILED_WITH_DEBUGGING
|
||||
|
||||
#undef HAVE_IPC_H
|
||||
#undef HAVE_SHM_H
|
||||
#undef HAVE_XPM
|
||||
#undef HAVE_XSHM_H
|
||||
#undef HAVE_SHAPE_EXT
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
#undef HAVE_XCONVERTCASE
|
||||
|
||||
/* some systems do not allow to ipcrm pages prior to
|
||||
* actual usage, namely: OSF1 V3.2, SunOS 4.1.1, 5.5, 5.5.1, 5.6,
|
||||
* IRIX 5.2 and 6.2.
|
||||
*/
|
||||
#undef IPC_RMID_DEFERRED_RELEASE
|
||||
|
||||
#undef NO_FD_SET
|
||||
|
||||
#undef RESOURCE_BASE
|
||||
|
||||
/* Define to enable POSIX threading awareness */
|
||||
#undef USE_PTHREADS
|
||||
|
||||
#undef XINPUT_NONE
|
||||
#undef XINPUT_GXI
|
||||
#undef XINPUT_XFREE
|
||||
|
||||
#undef GTK_MAJOR_VERSION
|
||||
#undef GTK_MINOR_VERSION
|
||||
#undef GTK_MICRO_VERSION
|
||||
#undef GTK_VERSION
|
||||
|
||||
/* Define as the return type of signal handlers (int or void). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
|
||||
259
acinclude.m4
Normal file
259
acinclude.m4
Normal file
@@ -0,0 +1,259 @@
|
||||
## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*-
|
||||
## Copyright (C) 1996-1998 Free Software Foundation, Inc.
|
||||
## Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; either version 2 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful, but
|
||||
## WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
## General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program; if not, write to the Free Software
|
||||
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
##
|
||||
## As a special exception to the GNU General Public License, if you
|
||||
## distribute this file as part of a program that contains a
|
||||
## configuration script generated by Autoconf, you may include it under
|
||||
## the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# serial 24 AM_PROG_LIBTOOL
|
||||
AC_DEFUN(AM_PROG_LIBTOOL,
|
||||
[AC_REQUIRE([AM_ENABLE_SHARED])dnl
|
||||
AC_REQUIRE([AM_ENABLE_STATIC])dnl
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||
AC_REQUIRE([AC_PROG_RANLIB])dnl
|
||||
AC_REQUIRE([AC_PROG_CC])dnl
|
||||
AC_REQUIRE([AM_PROG_LD])dnl
|
||||
AC_REQUIRE([AM_PROG_NM])dnl
|
||||
AC_REQUIRE([AC_PROG_LN_S])dnl
|
||||
dnl
|
||||
# Always use our own libtool.
|
||||
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
|
||||
AC_SUBST(LIBTOOL)dnl
|
||||
|
||||
# Check for any special flags to pass to ltconfig.
|
||||
libtool_flags=
|
||||
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
|
||||
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
|
||||
test "$silent" = yes && libtool_flags="$libtool_flags --silent"
|
||||
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
|
||||
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
|
||||
|
||||
# Some flags need to be propagated to the compiler or linker for good
|
||||
# libtool support.
|
||||
case "$host" in
|
||||
*-*-irix6*)
|
||||
# Find out which ABI we are using.
|
||||
echo '[#]line __oline__ "configure"' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
case "`/usr/bin/file conftest.o`" in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -32"
|
||||
;;
|
||||
*N32*)
|
||||
LD="${LD-ld} -n32"
|
||||
;;
|
||||
*64-bit*)
|
||||
LD="${LD-ld} -64"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
rm -rf conftest*
|
||||
;;
|
||||
|
||||
*-*-sco3.2v5*)
|
||||
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
|
||||
CFLAGS="$CFLAGS -belf"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
||||
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
||||
LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
|
||||
${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \
|
||||
$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
|
||||
|| AC_MSG_ERROR([libtool configure failed])
|
||||
])
|
||||
|
||||
# AM_ENABLE_SHARED - implement the --enable-shared flag
|
||||
# Usage: AM_ENABLE_SHARED[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AM_ENABLE_SHARED,
|
||||
[define([AM_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(shared,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-shared build shared libraries [default=>>AM_ENABLE_SHARED_DEFAULT]
|
||||
changequote([, ])dnl
|
||||
[ --enable-shared=PKGS only build shared libraries if the current package
|
||||
appears as an element in the PKGS list],
|
||||
[p=${PACKAGE-default}
|
||||
case "$enableval" in
|
||||
yes) enable_shared=yes ;;
|
||||
no) enable_shared=no ;;
|
||||
*)
|
||||
enable_shared=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
||||
for pkg in $enableval; do
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_shared=yes
|
||||
fi
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
;;
|
||||
esac],
|
||||
enable_shared=AM_ENABLE_SHARED_DEFAULT)dnl
|
||||
])
|
||||
|
||||
# AM_DISABLE_SHARED - set the default shared flag to --disable-shared
|
||||
AC_DEFUN(AM_DISABLE_SHARED,
|
||||
[AM_ENABLE_SHARED(no)])
|
||||
|
||||
# AM_DISABLE_STATIC - set the default static flag to --disable-static
|
||||
AC_DEFUN(AM_DISABLE_STATIC,
|
||||
[AM_ENABLE_STATIC(no)])
|
||||
|
||||
# AM_ENABLE_STATIC - implement the --enable-static flag
|
||||
# Usage: AM_ENABLE_STATIC[(DEFAULT)]
|
||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||
# `yes'.
|
||||
AC_DEFUN(AM_ENABLE_STATIC,
|
||||
[define([AM_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||
AC_ARG_ENABLE(static,
|
||||
changequote(<<, >>)dnl
|
||||
<< --enable-static build static libraries [default=>>AM_ENABLE_STATIC_DEFAULT]
|
||||
changequote([, ])dnl
|
||||
[ --enable-static=PKGS only build shared libraries if the current package
|
||||
appears as an element in the PKGS list],
|
||||
[p=${PACKAGE-default}
|
||||
case "$enableval" in
|
||||
yes) enable_static=yes ;;
|
||||
no) enable_static=no ;;
|
||||
*)
|
||||
enable_static=no
|
||||
# Look at the argument we got. We use all the common list separators.
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
||||
for pkg in $enableval; do
|
||||
if test "X$pkg" = "X$p"; then
|
||||
enable_static=yes
|
||||
fi
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
;;
|
||||
esac],
|
||||
enable_static=AM_ENABLE_STATIC_DEFAULT)dnl
|
||||
])
|
||||
|
||||
|
||||
# AM_PROG_LD - find the path to the GNU or non-GNU linker
|
||||
AC_DEFUN(AM_PROG_LD,
|
||||
[AC_ARG_WITH(gnu-ld,
|
||||
[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
|
||||
test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
|
||||
AC_REQUIRE([AC_PROG_CC])
|
||||
ac_prog=ld
|
||||
if test "$ac_cv_prog_gcc" = yes; then
|
||||
# Check if gcc -print-prog-name=ld gives a path.
|
||||
AC_MSG_CHECKING([for ld used by GCC])
|
||||
ac_prog=`($CC -print-prog-name=ld) 2>&5`
|
||||
case "$ac_prog" in
|
||||
# Accept absolute paths.
|
||||
/* | [A-Za-z]:\\*)
|
||||
test -z "$LD" && LD="$ac_prog"
|
||||
;;
|
||||
"")
|
||||
# If it fails, then pretend we aren't using GCC.
|
||||
ac_prog=ld
|
||||
;;
|
||||
*)
|
||||
# If it is relative, then search for the first ld in PATH.
|
||||
with_gnu_ld=unknown
|
||||
;;
|
||||
esac
|
||||
elif test "$with_gnu_ld" = yes; then
|
||||
AC_MSG_CHECKING([for GNU ld])
|
||||
else
|
||||
AC_MSG_CHECKING([for non-GNU ld])
|
||||
fi
|
||||
AC_CACHE_VAL(ac_cv_path_LD,
|
||||
[if test -z "$LD"; then
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in $PATH; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f "$ac_dir/$ac_prog"; then
|
||||
ac_cv_path_LD="$ac_dir/$ac_prog"
|
||||
# Check to see if the program is GNU ld. I'd rather use --version,
|
||||
# but apparently some GNU ld's only accept -v.
|
||||
# Break only if it was the GNU/non-GNU ld that we prefer.
|
||||
if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
|
||||
test "$with_gnu_ld" != no && break
|
||||
else
|
||||
test "$with_gnu_ld" != yes && break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
else
|
||||
ac_cv_path_LD="$LD" # Let the user override the test with a path.
|
||||
fi])
|
||||
LD="$ac_cv_path_LD"
|
||||
if test -n "$LD"; then
|
||||
AC_MSG_RESULT($LD)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
|
||||
AC_SUBST(LD)
|
||||
AM_PROG_LD_GNU
|
||||
])
|
||||
|
||||
AC_DEFUN(AM_PROG_LD_GNU,
|
||||
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
|
||||
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
|
||||
if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
|
||||
ac_cv_prog_gnu_ld=yes
|
||||
else
|
||||
ac_cv_prog_gnu_ld=no
|
||||
fi])
|
||||
])
|
||||
|
||||
# AM_PROG_NM - find the path to a BSD-compatible name lister
|
||||
AC_DEFUN(AM_PROG_NM,
|
||||
[AC_MSG_CHECKING([for BSD-compatible nm])
|
||||
AC_CACHE_VAL(ac_cv_path_NM,
|
||||
[case "$NM" in
|
||||
/* | [A-Za-z]:\\*)
|
||||
ac_cv_path_NM="$NM" # Let the user override the test with a path.
|
||||
;;
|
||||
*)
|
||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
||||
for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
if test -f $ac_dir/nm; then
|
||||
# Check to see if the nm accepts a BSD-compat flag.
|
||||
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||
# nm: unknown option "B" ignored
|
||||
if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
|
||||
ac_cv_path_NM="$ac_dir/nm -B"
|
||||
elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
|
||||
ac_cv_path_NM="$ac_dir/nm -p"
|
||||
else
|
||||
ac_cv_path_NM="$ac_dir/nm"
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS="$ac_save_ifs"
|
||||
test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
|
||||
;;
|
||||
esac])
|
||||
NM="$ac_cv_path_NM"
|
||||
AC_MSG_RESULT([$NM])
|
||||
AC_SUBST(NM)
|
||||
])
|
||||
43
autogen.sh
43
autogen.sh
@@ -1,11 +1,20 @@
|
||||
#!/bin/sh
|
||||
# Run this to generate all the initial makefiles, etc.
|
||||
|
||||
srcdir=`dirname $0`
|
||||
test -z "$srcdir" && srcdir=.
|
||||
|
||||
ORIGDIR=`pwd`
|
||||
cd $srcdir
|
||||
PROJECT=Gtk+
|
||||
TEST_TYPE=-d
|
||||
FILE=gdk
|
||||
|
||||
DIE=0
|
||||
|
||||
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have autoconf installed to compile GTK+."
|
||||
echo "You must have autoconf installed to compile $PROJECT."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
|
||||
DIE=1
|
||||
@@ -13,15 +22,15 @@ DIE=0
|
||||
|
||||
(libtool --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have libtool installed to compile GTK+."
|
||||
echo "Get ftp://alpha.gnu.org/gnu/libtool-1.0h.tar.gz"
|
||||
echo "You must have libtool installed to compile $PROJECT."
|
||||
echo "Get ftp://alpha.gnu.org/gnu/libtool-1.2b.tar.gz"
|
||||
echo "(or a newer version if it is available)"
|
||||
DIE=1
|
||||
}
|
||||
|
||||
(automake --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have automake installed to compile GTK+."
|
||||
echo "You must have automake installed to compile $PROJECT."
|
||||
echo "Get ftp://ftp.cygnus.com/pub/home/tromey/automake-1.2d.tar.gz"
|
||||
echo "(or a newer version if it is available)"
|
||||
DIE=1
|
||||
@@ -31,8 +40,8 @@ if test "$DIE" -eq 1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
(test -d gtk && test -d glib) || {
|
||||
echo "You must run this script in the top-level GTK+ directory"
|
||||
test $TEST_TYPE $FILE || {
|
||||
echo "You must run this script in the top-level $PROJECT directory"
|
||||
exit 1
|
||||
}
|
||||
|
||||
@@ -41,12 +50,20 @@ if test -z "$*"; then
|
||||
echo "to pass any to it, please specify them on the $0 command line."
|
||||
fi
|
||||
|
||||
for i in glib .
|
||||
do
|
||||
echo processing $i
|
||||
(cd $i; aclocal; automake; autoconf)
|
||||
done
|
||||
./configure "$@"
|
||||
case $CC in
|
||||
*xlc | *xlc\ * | *lcc | *lcc\ *) am_opt=--include-deps;;
|
||||
esac
|
||||
|
||||
aclocal $ACLOCAL_FLAGS
|
||||
|
||||
# optionally feature autoheader
|
||||
(autoheader --version) < /dev/null > /dev/null 2>&1 && autoheader
|
||||
|
||||
automake $am_opt
|
||||
autoconf
|
||||
cd $ORIGDIR
|
||||
|
||||
$srcdir/configure "$@"
|
||||
|
||||
echo
|
||||
echo "Now type 'make' to compile GTK+."
|
||||
echo "Now type 'make' to compile $PROJECT."
|
||||
|
||||
13
config.guess
vendored
13
config.guess
vendored
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
@@ -478,10 +478,10 @@ EOF
|
||||
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
i*:CYGWIN*:*)
|
||||
echo i386-pc-cygwin32
|
||||
echo ${UNAME_MACHINE}-pc-cygwin32
|
||||
exit 0 ;;
|
||||
i*:MINGW*:*)
|
||||
echo i386-pc-mingw32
|
||||
echo ${UNAME_MACHINE}-pc-mingw32
|
||||
exit 0 ;;
|
||||
p*:CYGWIN*:*)
|
||||
echo powerpcle-unknown-cygwin32
|
||||
@@ -493,6 +493,12 @@ EOF
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
exit 0 ;;
|
||||
*:Linux:*:*)
|
||||
# uname on the ARM produces all sorts of strangeness, and we need to
|
||||
# filter it out.
|
||||
case "$UNAME_MACHINE" in
|
||||
arm* | sa110*) UNAME_MACHINE="arm" ;;
|
||||
esac
|
||||
|
||||
# The BFD linker knows what the default object file format is, so
|
||||
# first see if it will tell us.
|
||||
ld_help_string=`ld --help 2>&1`
|
||||
@@ -506,6 +512,7 @@ EOF
|
||||
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
|
||||
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
|
||||
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
|
||||
esac
|
||||
|
||||
29
config.h.in
29
config.h.in
@@ -6,9 +6,6 @@
|
||||
/* Define if you have a working `mmap' system call. */
|
||||
#undef HAVE_MMAP
|
||||
|
||||
/* Define as __inline if that's what the C compiler calls it. */
|
||||
#undef inline
|
||||
|
||||
/* Define as the return type of signal handlers (int or void). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
@@ -19,32 +16,46 @@
|
||||
#undef X_DISPLAY_MISSING
|
||||
|
||||
/* Other stuff */
|
||||
#undef GTK_COMPILED_WITH_DEBUGGING
|
||||
|
||||
#undef HAVE_IPC_H
|
||||
#undef HAVE_SHM_H
|
||||
#undef HAVE_XPM
|
||||
#undef HAVE_XSHM_H
|
||||
#undef HAVE_SHAPE_EXT
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
#undef HAVE_XCONVERTCASE
|
||||
|
||||
/* some systems do not allow to ipcrm pages prior to
|
||||
* actual usage, namely: OSF1 V3.2, SunOS 4.1.1, 5.5, 5.5.1, 5.6,
|
||||
* IRIX 5.2 and 6.2.
|
||||
*/
|
||||
#undef IPC_RMID_DEFERRED_RELEASE
|
||||
|
||||
#undef NO_FD_SET
|
||||
|
||||
#undef RESOURCE_BASE
|
||||
|
||||
/* Define to enable POSIX threading awareness */
|
||||
#undef USE_PTHREADS
|
||||
|
||||
#undef XINPUT_NONE
|
||||
#undef XINPUT_GXI
|
||||
#undef XINPUT_XFREE
|
||||
|
||||
#undef GTK_MAJOR_VERSION
|
||||
#undef GTK_MINOR_VERSION
|
||||
#undef GTK_MICRO_VERSION
|
||||
#undef GTK_VERSION
|
||||
|
||||
/* Define as the return type of signal handlers (int or void). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
/* Define if you have the broken_wctype function. */
|
||||
#undef HAVE_BROKEN_WCTYPE
|
||||
|
||||
/* Define if you have the getpagesize function. */
|
||||
#undef HAVE_GETPAGESIZE
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define if you have the <wchar.h> header file. */
|
||||
#undef HAVE_WCHAR_H
|
||||
|
||||
/* Define if you have the <wctype.h> header file. */
|
||||
#undef HAVE_WCTYPE_H
|
||||
|
||||
38
config.sub
vendored
38
config.sub
vendored
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script, version 1.1.
|
||||
# Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
# can handle that machine. It does not imply ALL GNU software can.
|
||||
@@ -162,7 +162,7 @@ case $basic_machine in
|
||||
# We use `pc' rather than `unknown'
|
||||
# because (1) that's what they normally are, and
|
||||
# (2) the word "unknown" tends to confuse beginning users.
|
||||
i[3456]86)
|
||||
i[34567]86)
|
||||
basic_machine=$basic_machine-pc
|
||||
;;
|
||||
# Object if more than one company name word.
|
||||
@@ -171,7 +171,7 @@ case $basic_machine in
|
||||
exit 1
|
||||
;;
|
||||
# Recognize the basic CPU types with company name.
|
||||
vax-* | tahoe-* | i[3456]86-* | i860-* | m32r-* | m68k-* | m68000-* \
|
||||
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
|
||||
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
||||
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
|
||||
@@ -350,19 +350,19 @@ case $basic_machine in
|
||||
os=-mvs
|
||||
;;
|
||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||
i[3456]86v32)
|
||||
i[34567]86v32)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv32
|
||||
;;
|
||||
i[3456]86v4*)
|
||||
i[34567]86v4*)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv4
|
||||
;;
|
||||
i[3456]86v)
|
||||
i[34567]86v)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv
|
||||
;;
|
||||
i[3456]86sol2)
|
||||
i[34567]86sol2)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-solaris2
|
||||
;;
|
||||
@@ -469,25 +469,23 @@ case $basic_machine in
|
||||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pentium | p5)
|
||||
basic_machine=i586-intel
|
||||
pentium | p5 | k5 | nexen)
|
||||
basic_machine=i586-pc
|
||||
;;
|
||||
pentiumpro | p6)
|
||||
basic_machine=i686-intel
|
||||
pentiumpro | p6 | k6 | 6x86)
|
||||
basic_machine=i686-pc
|
||||
;;
|
||||
pentium-* | p5-*)
|
||||
pentiumii | pentium2)
|
||||
basic_machine=i786-pc
|
||||
;;
|
||||
pentium-* | p5-* | k5-* | nexen-*)
|
||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumpro-* | p6-*)
|
||||
pentiumpro-* | p6-* | k6-* | 6x86-*)
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
k5)
|
||||
# We don't have specific support for AMD's K5 yet, so just call it a Pentium
|
||||
basic_machine=i586-amd
|
||||
;;
|
||||
nexen)
|
||||
# We don't have specific support for Nexgen yet, so just call it a Pentium
|
||||
basic_machine=i586-nexgen
|
||||
pentiumii-* | pentium2-*)
|
||||
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pn)
|
||||
basic_machine=pn-gould
|
||||
|
||||
338
configure.in
338
configure.in
@@ -4,18 +4,41 @@ AC_INIT(gdk/gdktypes.h)
|
||||
# Save this value here, since automake will set cflags later
|
||||
cflags_set=${CFLAGS+set}
|
||||
|
||||
GTK_MAJOR_VERSION=0
|
||||
GTK_MINOR_VERSION=99
|
||||
GTK_MICRO_VERSION=5
|
||||
# Making releases:
|
||||
# GTK_MICRO_VERSION += 1;
|
||||
# GTK_INTERFACE_AGE += 1;
|
||||
# GTK_BINARY_AGE += 1;
|
||||
# if any functions have been added, set GTK_INTERFACE_AGE to 0.
|
||||
# if backwards compatibility has been broken,
|
||||
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.
|
||||
#
|
||||
GTK_MAJOR_VERSION=1
|
||||
GTK_MINOR_VERSION=1
|
||||
GTK_MICRO_VERSION=7
|
||||
GTK_INTERFACE_AGE=0
|
||||
GTK_BINARY_AGE=0
|
||||
GTK_VERSION=$GTK_MAJOR_VERSION.$GTK_MINOR_VERSION.$GTK_MICRO_VERSION
|
||||
AC_SUBST(GTK_MAJOR_VERSION)
|
||||
AC_SUBST(GTK_MINOR_VERSION)
|
||||
AC_SUBST(GTK_MICRO_VERSION)
|
||||
AC_SUBST(GTK_INTERFACE_AGE)
|
||||
AC_SUBST(GTK_BINARY_AGE)
|
||||
AC_SUBST(GTK_VERSION)
|
||||
|
||||
# libtool versioning
|
||||
LT_RELEASE=$GTK_MAJOR_VERSION.$GTK_MINOR_VERSION
|
||||
LT_CURRENT=`expr $GTK_MICRO_VERSION - $GTK_INTERFACE_AGE`
|
||||
LT_REVISION=$GTK_INTERFACE_AGE
|
||||
LT_AGE=`expr $GTK_BINARY_AGE - $GTK_INTERFACE_AGE`
|
||||
AC_SUBST(LT_RELEASE)
|
||||
AC_SUBST(LT_CURRENT)
|
||||
AC_SUBST(LT_REVISION)
|
||||
AC_SUBST(LT_AGE)
|
||||
|
||||
# For automake.
|
||||
VERSION=$GTK_VERSION
|
||||
PACKAGE=gtk+
|
||||
|
||||
# Configure glib
|
||||
AC_CONFIG_SUBDIRS(glib)
|
||||
|
||||
# Save this value here, since automake will set cflags later
|
||||
cflags_set=${CFLAGS+set}
|
||||
|
||||
@@ -38,23 +61,27 @@ AC_ARG_ENABLE(shm, [ --enable-shm support shared memory if available
|
||||
AC_ARG_ENABLE(debug, [ --enable-debug=[no/minimum/yes] turn on debugging [default=minimum]],,enable_debug=minimum)
|
||||
AC_ARG_ENABLE(ansi, [ --enable-ansi turn on strict ansi [default=no]],
|
||||
, enable_ansi=no)
|
||||
AC_ARG_WITH(glib, [ --with-glib=DIR Use uninstalled copy of glib])
|
||||
AC_ARG_ENABLE(xim, [ --enable-xim support XIM [default=yes]],
|
||||
echo $enable_xim, enable_xim="yes")
|
||||
, enable_xim="yes")
|
||||
AC_ARG_WITH(locale, [ --with-locale=LOCALE locale name you want to use ])
|
||||
|
||||
AC_ARG_WITH(xinput, [ --with-xinput=[no/gxi/xfree] support XInput ])
|
||||
AC_ARG_WITH(threads, [ --with-threads=[posix] support threading ])
|
||||
|
||||
if test "x$enable_debug" = "xyes"; then
|
||||
test "$cflags_set" = set || CFLAGS="-g"
|
||||
CFLAGS="$CFLAGS -DG_ENABLE_DEBUG"
|
||||
test "$cflags_set" = set || CFLAGS="$CFLAGS -g"
|
||||
GTK_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
|
||||
else
|
||||
if test "x$enable_debug" = "xno"; then
|
||||
CFLAGS="$CFLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -DGTK_NO_CHECK_CASTS"
|
||||
GTK_DEBUG_FLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -DGTK_NO_CHECK_CASTS"
|
||||
else
|
||||
CFLAGS="$CFLAGS -DGTK_NO_CHECK_CASTS"
|
||||
GTK_DEBUG_FLAGS="-DGTK_NO_CHECK_CASTS"
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED(GTK_COMPILED_WITH_DEBUGGING, "${enable_debug}")
|
||||
|
||||
# Build time sanity check...
|
||||
AM_SANITY_CHECK
|
||||
|
||||
@@ -64,30 +91,129 @@ AM_PROG_CC_STDC
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
changequote(,)dnl
|
||||
if test "x$GCC" = "xyes"; then
|
||||
if test -z "`echo "$CFLAGS" | grep "\-Wall" 2> /dev/null`" ; then
|
||||
CFLAGS="$CFLAGS -Wall"
|
||||
fi
|
||||
case " $CFLAGS " in
|
||||
*[\ \ ]-Wall[\ \ ]*) ;;
|
||||
*) CFLAGS="$CFLAGS -Wall" ;;
|
||||
esac
|
||||
|
||||
if test "x$enable_ansi" = "xyes"; then
|
||||
if test -z "`echo "$CFLAGS" | grep "\-ansi" 2> /dev/null`" ; then
|
||||
CFLAGS="$CFLAGS -ansi"
|
||||
fi
|
||||
case " $CFLAGS " in
|
||||
*[\ \ ]-ansi[\ \ ]*) ;;
|
||||
*) CFLAGS="$CFLAGS -ansi" ;;
|
||||
esac
|
||||
|
||||
if test -z "`echo "$CFLAGS" | grep "\-pedantic" 2> /dev/null`" ; then
|
||||
CFLAGS="$CFLAGS -pedantic"
|
||||
fi
|
||||
case " $CFLAGS " in
|
||||
*[\ \ ]-pedantic[\ \ ]*) ;;
|
||||
*) CFLAGS="$CFLAGS -pedantic" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
changequote([,])dnl
|
||||
|
||||
if test "x$enable_xim" = "xyes"; then
|
||||
CFLAGS="$CFLAGS -DUSE_XIM"
|
||||
# define a MAINT-like variable REBUILD which is set if Perl
|
||||
# and awk are found, so autogenerated sources can be rebuilt
|
||||
|
||||
AC_PROG_AWK
|
||||
AC_CHECK_PROGS(PERL, perl5 perl)
|
||||
|
||||
# We would like indent, but don't require it.
|
||||
AC_CHECK_PROG(INDENT, indent, indent)
|
||||
|
||||
REBUILD=\#
|
||||
if test -n "$PERL" && perl -v | grep 'version 5.' > /dev/null ; then
|
||||
if test -n "$AWK" ; then
|
||||
REBUILD=
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(REBUILD)
|
||||
|
||||
dnl The DU4 header files don't provide library prototypes unless
|
||||
dnl -std1 is given to the native cc.
|
||||
AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
|
||||
|
||||
gtk_save_LIBS=$LIBS
|
||||
LIBS="$LIBS -lm"
|
||||
AC_TRY_RUN([#include <math.h>
|
||||
int main (void) { return (log(1) != log(1.)); }],
|
||||
AC_MSG_RESULT(none needed),
|
||||
gtk_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="$CFLAGS -std1"
|
||||
AC_TRY_RUN([#include <math.h>
|
||||
int main (void) { return (log(1) != log(1.)); }],
|
||||
AC_MSG_RESULT(-std1),
|
||||
AC_MSG_RESULT()
|
||||
CFLAGS=$gtk_save_CFLAGS
|
||||
AC_MSG_WARN(
|
||||
[No ANSI prototypes found in library. (-std1 didn't work.)])
|
||||
)
|
||||
)
|
||||
LIBS=$gtk_save_LIBS
|
||||
|
||||
dnl NeXTStep cc seems to need this
|
||||
AC_MSG_CHECKING([for extra flags for POSIX compliance])
|
||||
AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
|
||||
AC_MSG_RESULT(none needed),
|
||||
gtk_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="$CFLAGS -posix"
|
||||
AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
|
||||
AC_MSG_RESULT(-posix),
|
||||
AC_MSG_RESULT()
|
||||
CFLAGS=$gtk_save_CFLAGS
|
||||
AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
|
||||
|
||||
if test x$with_glib = xyes ; then
|
||||
AC_MSG_ERROR([
|
||||
*** Directory must be specified for --with-glib])
|
||||
fi
|
||||
|
||||
AC_DEFINE_UNQUOTED(GTK_MAJOR_VERSION, $GTK_MAJOR_VERSION)
|
||||
AC_DEFINE_UNQUOTED(GTK_MINOR_VERSION, $GTK_MINOR_VERSION)
|
||||
AC_DEFINE_UNQUOTED(GTK_MICRO_VERSION, $GTK_MICRO_VERSION)
|
||||
AC_DEFINE_UNQUOTED(GTK_VERSION, "$GTK_VERSION")
|
||||
if test x$with_glib = x ; then
|
||||
# Look for separately installed glib
|
||||
|
||||
AM_PATH_GLIB(1.1.6,,
|
||||
AC_MSG_ERROR([
|
||||
*** GLIB 1.1.6 or better is required. The latest version of GLIB
|
||||
*** is always available from ftp://ftp.gtk.org.]),
|
||||
gmodule)
|
||||
|
||||
glib_cflags=$GLIB_CFLAGS
|
||||
glib_libs=$GLIB_LIBS
|
||||
else
|
||||
# Use uninstalled glib (assume they got the version right)
|
||||
|
||||
GLIB_CONFIG=$with_glib/glib-config
|
||||
if test -x $GLIB_CONFIG ; then
|
||||
:
|
||||
else
|
||||
AC_MSG_ERROR([GLIB directory ($with_glib) not present or not configured])
|
||||
fi
|
||||
|
||||
# For use in gtk-config
|
||||
glib_cflags=`$GLIB_CONFIG --cflags`
|
||||
glib_libs=`$GLIB_CONFIG --libs`
|
||||
|
||||
glib_release=`$GLIB_CONFIG --version | sed 's%\\.[[0-9]]*$%%'`
|
||||
|
||||
# canonicalize relative paths
|
||||
case $with_glib in
|
||||
/*)
|
||||
glib_dir=$with_glib
|
||||
;;
|
||||
*)
|
||||
glib_dir="\$(top_builddir)/$with_glib"
|
||||
;;
|
||||
esac
|
||||
|
||||
GLIB_CFLAGS="-I$glib_dir"
|
||||
GLIB_LIBS=$glib_dir/libglib-$glib_release.la
|
||||
|
||||
AC_SUBST(GLIB_CFLAGS)
|
||||
AC_SUBST(GLIB_LIBS)
|
||||
fi
|
||||
|
||||
AC_SUBST(glib_cflags)
|
||||
AC_SUBST(glib_libs)
|
||||
|
||||
# Find the X11 include and library directories
|
||||
AC_PATH_X
|
||||
@@ -100,16 +226,58 @@ fi
|
||||
saved_cflags="$CFLAGS"
|
||||
saved_ldflags="$LDFLAGS"
|
||||
|
||||
CFLAGS="$X_CFLAGS"
|
||||
LDFLAGS="$X_LDFLAGS $X_LIBS"
|
||||
CFLAGS="$CFLAGS $X_CFLAGS"
|
||||
LDFLAGS="$LDFLAGS $X_LDFLAGS $X_LIBS"
|
||||
|
||||
if test "x$no_x" = "xyes"; then
|
||||
AC_MSG_ERROR([
|
||||
*** X libraries or include files not found. Check 'config.log' for
|
||||
*** more details.])
|
||||
fi
|
||||
|
||||
# Checks for libraries.
|
||||
# Check for the X11 library
|
||||
AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS", no_x11_lib=yes, $X_EXTRA_LIBS)
|
||||
AC_CHECK_LIB(X11, XOpenDisplay, x_libs="-lX11 $X_EXTRA_LIBS",
|
||||
AC_MSG_ERROR([*** libX11 not found. Check 'config.log' for more details.]),
|
||||
$X_EXTRA_LIBS)
|
||||
|
||||
if test "x$enable_shm" = "xyes"; then
|
||||
# Check for the Xext library (needed for XShm extention)
|
||||
AC_CHECK_LIB(Xext, XShmAttach, x_libs="-lXext $x_libs", no_xext_lib=yes, $x_libs)
|
||||
AC_CHECK_LIB(Xext, XShmAttach,
|
||||
x_libs="-lXext $x_libs",
|
||||
# On AIX, it is in XextSam instead, but we still need -lXext
|
||||
AC_CHECK_LIB(XextSam, XShmAttach,
|
||||
x_libs="-lXextSam -lXext $x_libs",
|
||||
no_xext_lib=yes, $x_libs),
|
||||
$x_libs)
|
||||
fi
|
||||
|
||||
# Check for shaped window extension
|
||||
|
||||
AC_CHECK_LIB(Xext, XShapeCombineMask,
|
||||
if test -z "`echo $x_libs | grep "\-lXext" 2> /dev/null`"; then
|
||||
x_libs="-lXext $x_libs"
|
||||
fi
|
||||
AC_DEFINE(HAVE_SHAPE_EXT),
|
||||
,
|
||||
$x_libs)
|
||||
|
||||
# Check for XConvertCase (X11R6 specific)
|
||||
|
||||
AC_CHECK_LIB(X11, XConvertCase,
|
||||
AC_DEFINE(HAVE_XCONVERTCASE),
|
||||
,
|
||||
$x_libs)
|
||||
|
||||
# Check for XIM support.
|
||||
|
||||
AC_CHECK_LIB(X11, XUnregisterIMInstantiateCallback,
|
||||
: ,
|
||||
enable_xim=no,
|
||||
$x_libs)
|
||||
|
||||
if test "x$enable_xim" = "xyes"; then
|
||||
GTK_XIM_FLAGS="-DUSE_XIM"
|
||||
fi
|
||||
|
||||
x_cflags="$X_CFLAGS"
|
||||
@@ -128,6 +296,22 @@ else
|
||||
AC_DEFINE(XINPUT_NONE)
|
||||
fi
|
||||
|
||||
# Threads
|
||||
|
||||
if test "x$with_threads" = "xposix" || test "x$with_threads" = "xyes"; then
|
||||
AC_CHECK_LIB(pthread, pthread_attr_init,
|
||||
[AC_DEFINE(USE_PTHREADS)
|
||||
x_libs="$x_libs -lpthread"
|
||||
GTK_THREAD_FLAGS="-D_REENTRANT"],
|
||||
# AIX has libpthreads, cause they're special. Special friends (TM)
|
||||
AC_CHECK_LIB(pthreads, pthread_attr_init,
|
||||
[AC_DEFINE(USE_PTHREADS)
|
||||
x_libs="$x_libs -lpthreads"
|
||||
GTK_THREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE"]))
|
||||
fi
|
||||
|
||||
CFLAGS="$saved_cflags"
|
||||
LDFLAGS="$saved_ldflags"
|
||||
|
||||
AC_SUBST(x_cflags)
|
||||
AC_SUBST(x_includes)
|
||||
@@ -135,9 +319,6 @@ AC_SUBST(x_ldflags)
|
||||
AC_SUBST(x_libs)
|
||||
AC_SUBST(xinput_progs)
|
||||
|
||||
CFLAGS="$saved_cflags"
|
||||
LDFLAGS="$saved_ldflags"
|
||||
|
||||
if test "x$enable_shm" = "xyes"; then
|
||||
# Check for shared memory
|
||||
AC_CHECK_HEADER(sys/ipc.h, AC_DEFINE(HAVE_IPC_H), no_sys_ipc=yes)
|
||||
@@ -230,7 +411,7 @@ need_x_locale=yes)
|
||||
AC_MSG_RESULT($need_x_locale)
|
||||
|
||||
if test $need_x_locale = yes; then
|
||||
CFLAGS="$CFLAGS -DX_LOCALE"
|
||||
GTK_LOCALE_CFLAGS="-DX_LOCALE"
|
||||
fi
|
||||
|
||||
# Checks for header files.
|
||||
@@ -238,26 +419,97 @@ AC_HEADER_STDC
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
|
||||
# Checks for library functions.
|
||||
AC_TYPE_SIGNAL
|
||||
AC_FUNC_MMAP
|
||||
|
||||
# Check for sys/select.h
|
||||
|
||||
AC_MSG_CHECKING([fd_set and sys/select])
|
||||
# Check if <sys/select.h> needs to be included for fd_set
|
||||
AC_MSG_CHECKING([for fd_set])
|
||||
AC_TRY_COMPILE([#include <sys/types.h>],
|
||||
[fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
|
||||
if test $gtk_ok = no; then
|
||||
if test $gtk_ok = yes; then
|
||||
AC_MSG_RESULT([yes, found in sys/types.h])
|
||||
else
|
||||
AC_HEADER_EGREP(fd_mask, sys/select.h, gtk_ok=yes)
|
||||
if test $gtk_ok = yes; then
|
||||
AC_DEFINE(HAVE_SYS_SELECT_H)
|
||||
AC_MSG_RESULT([yes, found in sys/select.h])
|
||||
else
|
||||
AC_DEFINE(NO_FD_SET)
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT($gtk_ok)
|
||||
if test $gtk_ok = no; then
|
||||
AC_DEFINE(NO_FD_SET)
|
||||
|
||||
# Duplicate `widechar' tests from `glib'.
|
||||
# Check for wchar.h
|
||||
if test x = y; then
|
||||
# will not be executed
|
||||
# hack so as not to update `acconfig.h'
|
||||
AC_CHECK_HEADERS(wchar.h wctype.h)
|
||||
AC_CHECK_FUNCS(broken_wctype)
|
||||
fi
|
||||
|
||||
AC_OUTPUT(Makefile gtk+.xconfig docs/Makefile gdk/Makefile gtk/Makefile)
|
||||
AC_MSG_CHECKING(for wchar.h)
|
||||
AC_TRY_CPP([#include <wchar.h>], gtk_ok=yes, gtk_ok=no)
|
||||
if test $gtk_ok = yes; then
|
||||
ac_kludge=HAVE_WCHAR_H
|
||||
AC_DEFINE($ac_kludge)
|
||||
fi
|
||||
AC_MSG_RESULT($gtk_ok)
|
||||
|
||||
# Check for wctype.h (for iswalnum)
|
||||
|
||||
AC_MSG_CHECKING(for wctype.h)
|
||||
AC_TRY_CPP([#include <wctype.h>], gtk_ok=yes, gtk_ok=no)
|
||||
if test $gtk_ok = yes; then
|
||||
ac_kludge=HAVE_WCTYPE_H
|
||||
AC_DEFINE($ac_kludge)
|
||||
fi
|
||||
AC_MSG_RESULT($gtk_ok)
|
||||
|
||||
# in Solaris 2.5, `iswalnum' is in -lw
|
||||
GDK_WLIBS=
|
||||
AC_CHECK_FUNC(iswalnum,,[AC_CHECK_LIB(w,iswalnum,GDK_WLIBS=-lw)])
|
||||
|
||||
# The following is necessary for Linux libc-5.4.38
|
||||
oLIBS="$LIBS"
|
||||
LIBS="$LIBS $GDK_WLIBS"
|
||||
AC_MSG_CHECKING(if iswalnum() and friends are properly defined)
|
||||
AC_TRY_LINK([#include <stdlib.h>],[
|
||||
#if (defined(HAVE_WCTYPE_H) || defined(HAVE_WCHAR_H))
|
||||
# ifdef HAVE_WCTYPE_H
|
||||
# include <wctype.h>
|
||||
# else
|
||||
# ifdef HAVE_WCHAR_H
|
||||
# include <wchar.h>
|
||||
# endif
|
||||
# endif
|
||||
#else
|
||||
# define iswalnum(c) ((wchar_t)(c) <= 0xFF && isalnum(c))
|
||||
#endif
|
||||
iswalnum((wchar_t) 0);
|
||||
], gtk_ok=yes, gtk_ok=no)
|
||||
LIBS="$oLIBS"
|
||||
|
||||
if test $gtk_ok = no; then
|
||||
ac_kludge=HAVE_BROKEN_WCTYPE
|
||||
AC_DEFINE($ac_kludge)
|
||||
GDK_WLIBS=
|
||||
fi
|
||||
AC_MSG_RESULT($gtk_ok)
|
||||
AC_SUBST(GDK_WLIBS)
|
||||
|
||||
AC_SUBST(GTK_DEBUG_FLAGS)
|
||||
AC_SUBST(GTK_XIM_FLAGS)
|
||||
AC_SUBST(GTK_LOCALE_FLAGS)
|
||||
AC_SUBST(GTK_THREAD_FLAGS)
|
||||
|
||||
AC_OUTPUT([
|
||||
Makefile
|
||||
gtk-config
|
||||
docs/Makefile
|
||||
gdk/Makefile
|
||||
gtk/Makefile
|
||||
gtk/gtkfeatures.h
|
||||
], [chmod +x gtk-config])
|
||||
|
||||
18
debian/README.debian
vendored
Normal file
18
debian/README.debian
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
libgtk1 for Debian
|
||||
----------------------
|
||||
|
||||
The GIMP Tool Kit (gtk) is a set of widgets to help you program
|
||||
programs for the X Windowing System easily and powerfully.
|
||||
|
||||
gtk is the moving force behind The GNU Image Manipulation Program (The
|
||||
GIMP) -- the number one freely-available image editing and creation
|
||||
program available.
|
||||
|
||||
gtk is rapidly under development, and the source tree has officially
|
||||
been separated from The GIMP now, as other teams of programmers
|
||||
are beginning to write software using its great widget set -- like
|
||||
GNOME, a desktop interface for X, and gzilla, a freely available
|
||||
web browser for X.
|
||||
|
||||
Ben Gertzfield <che@debian.org>, Mon, 29 Sep 1997 13:11:45 -0700
|
||||
|
||||
62
debian/build
vendored
Executable file
62
debian/build
vendored
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# Adjust debian/changelog and build a new
|
||||
# Debian package of a CVS archive.
|
||||
|
||||
# Written 17 November 1998 by Ben Gertzfield
|
||||
# <che@debian.org>
|
||||
|
||||
# This work is released under the GNU
|
||||
# General Public License, version 2 or
|
||||
# later.
|
||||
|
||||
use strict;
|
||||
use diagnostics;
|
||||
use File::Copy;
|
||||
|
||||
my $maintainer = 'Ben Gertzfield <che@debian.org>';
|
||||
|
||||
my @date = localtime;
|
||||
|
||||
my $datestr = sprintf("%d%.2d%.2d", $date[5] + 1900, $date[4] + 1, $date[3]);
|
||||
my $revision = '01';
|
||||
|
||||
open (CHANGELOG, 'debian/changelog') or die "Couldn't open debian/changelog: $!\n";
|
||||
|
||||
$_ = <CHANGELOG>;
|
||||
chomp;
|
||||
|
||||
close CHANGELOG;
|
||||
|
||||
my ($package, $last_date, $last_revision) = /^(.*?) \((.*?)\.(.*)?\)/;
|
||||
|
||||
if ($last_date eq $datestr) {
|
||||
$revision = sprintf("%.2d", $last_revision + 1);
|
||||
}
|
||||
|
||||
my $new_version = "$datestr.$revision";
|
||||
|
||||
copy('debian/changelog', 'debian/changelog.old') or die "Couldn't copy debian/changelog to debian/changelog.old: $!\n";
|
||||
|
||||
open(NEWCHANGELOG, ">debian/changelog") or die "Couldn't open debian/changelog for writing: $!\n";
|
||||
|
||||
print NEWCHANGELOG "$package ($new_version) unstable; urgency=low\n\n * CVS snapshot build at " . scalar localtime() . "\n\n -- $maintainer " . `date -R` . "\n";
|
||||
|
||||
open(OLDCHANGELOG, "debian/changelog.old") or die "Couldn't open debian/changelog.old: $!\n";
|
||||
|
||||
while (<OLDCHANGELOG>) {
|
||||
print NEWCHANGELOG;
|
||||
}
|
||||
|
||||
close OLDCHANGELOG;
|
||||
close NEWCHANGELOG;
|
||||
|
||||
unlink('debian/changelog.old') or die "Couldn't unlink debian/changelog.old: $!\n";
|
||||
|
||||
open(NEWVERSION, '>debian/version') or die "Couldn't open debian/version for writing: $!\n";
|
||||
print NEWVERSION "$new_version\n";
|
||||
close NEWVERSION;
|
||||
|
||||
system('dpkg-buildpackage -b -rfakeroot -us -uc');
|
||||
unlink 'debian/version' or die "Couldn't unlink debian/version: $!\n";
|
||||
|
||||
10
debian/changelog
vendored
Normal file
10
debian/changelog
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
gtk+-cvs (19981116.01) unstable; urgency=low
|
||||
|
||||
* First test build from CVS
|
||||
|
||||
-- Ben Gertzfield <che@debian.org> Tue, 17 Nov 1998 12:02:13 -0800
|
||||
|
||||
Local variables:
|
||||
mode: debian-changelog
|
||||
add-log-mailing-address: "che@debian.org"
|
||||
End:
|
||||
81
debian/control
vendored
Normal file
81
debian/control
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
Source: gtk+-cvs
|
||||
Priority: extra
|
||||
Section: libs
|
||||
Maintainer: Ben Gertzfield <che@debian.org>
|
||||
Standards-Version: 2.4.0.0
|
||||
|
||||
Package: libgtk-cvs-1.1
|
||||
Architecture: any
|
||||
Section: libs
|
||||
Depends: ${shlibs:Depends}
|
||||
Conflicts: libgtk-dev (<< 1:1.0.2), libgtk1.1
|
||||
Description: CVS build of the GIMP Toolkit set of widgets for X
|
||||
**THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
|
||||
BUILD OF THE GTK+ LIBRARIES! BEWARE! IT MAY NOT WORK!**
|
||||
.
|
||||
The GIMP Toolkit is a freely available set of widgets for X.
|
||||
GTK is easy to use, and has been implemented in such projects as
|
||||
The GNU Image Manipulation Program (The GIMP), GNOME, a GNU
|
||||
desktop set of utilities for X, and gzilla, a GNU web-browser.
|
||||
.
|
||||
This is the unstable 1.1 branch of GTK. It is not intended for use
|
||||
with stable projects!
|
||||
|
||||
Package: libgtk-cvs-dev
|
||||
Architecture: any
|
||||
Section: devel
|
||||
Depends: libgtk-cvs-1.1 (=${Source-Version}), libglib-cvs-dev
|
||||
Suggests: libgtk-cvs-doc
|
||||
Provides: libgtk1.1-dev
|
||||
Replaces: libgtk1.1-dev
|
||||
Conflicts: libgtk-dev, libgtk1 (<< 1:1.0.4), libgtk1.1-dev
|
||||
Description: CVS build of development files for the GIMP Toolkit
|
||||
**THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
|
||||
BUILD OF THE GTK+ LIBRARIES! BEWARE! IT MAY NOT WORK!**
|
||||
.
|
||||
This package contains the header files and static libraries for the
|
||||
GIMP Toolkit set of widgets for X.
|
||||
.
|
||||
This is the unstable, 1.1 branch of GTK+. This is not intended for
|
||||
use with stable releases of programs!
|
||||
.
|
||||
Install this package if you wish to develop your own X programs using
|
||||
the GIMP Toolkit 1.1, or if you wish to compile your own plug-ins for
|
||||
The GIMP.
|
||||
|
||||
Package: libgtk-cvs-doc
|
||||
Architecture: all
|
||||
Section: doc
|
||||
Conflicts: libgtk-dev (<< 1:0.99.4), libgtk-doc, libgtk1.1-doc
|
||||
Description: CVS build of documentation for the GIMP Toolkit
|
||||
**THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
|
||||
BUILD OF THE GTK+ LIBRARIES! BEWARE! IT MAY NOT WORK!**
|
||||
.
|
||||
This package contains lots of info-files, HTML docs, FAQs, and
|
||||
other handy documentation about the GIMP Toolkit set of widgets
|
||||
for X.
|
||||
.
|
||||
This package documents the unstable 1.1 release of the GIMP Toolkit.
|
||||
.
|
||||
Install this package if you want to have lots of info about the
|
||||
GIMP toolkit when you're programming.
|
||||
|
||||
Package: libgtk-cvs-dbg
|
||||
Architecture: any
|
||||
Section: devel
|
||||
Depends: libgtk-cvs-1.1 (= ${Source-Version}), libgtk-cvs-dev (= ${Source-Version})
|
||||
Suggests: libgtk-cvs-doc
|
||||
Conflicts: libgtk1.1-dbg
|
||||
Description: CVS build of debugging files for the GIMP Toolkit
|
||||
**THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
|
||||
BUILD OF THE GTK+ LIBRARIES! BEWARE! IT MAY NOT WORK!**
|
||||
.
|
||||
This package contains the debugging static libraries for the
|
||||
GIMP Toolkit set of widgets for X.
|
||||
.
|
||||
This is the unstable, 1.1 branch of GTK+. This is not intended for
|
||||
use with stable releases of programs!
|
||||
.
|
||||
Install this package if you wish to debug your own X programs using
|
||||
the GIMP Toolkit 1.1, or if you wish to debug your own plug-ins for
|
||||
The GIMP.
|
||||
8
debian/copyright
vendored
Normal file
8
debian/copyright
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
This package was debianized by Ben Gertzfield <che@debian.org> on
|
||||
Tue, 17 Nov 1998 12:07:17 -0800
|
||||
|
||||
It was produced from the CVS repository at cvs.gimp.org.
|
||||
|
||||
It may be redistributed under the terms of the GNU LGPL, Version 2 or
|
||||
later, found on Debian systems in the file /usr/doc/copyright/LGPL.
|
||||
|
||||
9
debian/libgtk-cvs-dev.files
vendored
Normal file
9
debian/libgtk-cvs-dev.files
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
usr/lib/libgdk.so
|
||||
usr/lib/libgdk.a
|
||||
usr/lib/libgtk.so
|
||||
usr/lib/libgtk.a
|
||||
usr/include/gdk/
|
||||
usr/include/gtk/
|
||||
usr/bin/gtk-config
|
||||
usr/man/man1/gtk-config.1
|
||||
usr/share/aclocal/gtk.m4
|
||||
5
debian/libgtk-cvs-dev.postinst
vendored
Normal file
5
debian/libgtk-cvs-dev.postinst
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
#DEBHELPER#
|
||||
6
debian/libgtk-cvs-dev.prerm
vendored
Normal file
6
debian/libgtk-cvs-dev.prerm
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
install-info --quiet --remove gtk
|
||||
|
||||
#DEBHELPER#
|
||||
8
debian/libgtk-cvs-doc.files
vendored
Normal file
8
debian/libgtk-cvs-doc.files
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
usr/info/gdk.info
|
||||
usr/info/gtk.info
|
||||
usr/info/gtk.info-1
|
||||
usr/info/gtk.info-2
|
||||
usr/info/gtk.info-3
|
||||
usr/info/gtk.info-4
|
||||
usr/info/gtk.info-5
|
||||
|
||||
11
debian/libgtk-cvs-doc.postinst
vendored
Normal file
11
debian/libgtk-cvs-doc.postinst
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
install-info --quiet --description="The GIMP Toolkit." \
|
||||
--section "The GIMP" "The GIMP" /usr/info/gtk.info.gz
|
||||
|
||||
install-info --quiet --description="The GIMP Drawing Kit." \
|
||||
--section "The GIMP" "The GIMP" /usr/info/gdk.info.gz
|
||||
|
||||
#DEBHELPER#
|
||||
7
debian/libgtk-cvs-doc.prerm
vendored
Normal file
7
debian/libgtk-cvs-doc.prerm
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
install-info --quiet --remove gtk
|
||||
install-info --quiet --remove gdk
|
||||
|
||||
#DEBHELPER#
|
||||
7
debian/postinst
vendored
Normal file
7
debian/postinst
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
ldconfig
|
||||
|
||||
#DEBHELPER#
|
||||
160
debian/rules
vendored
Executable file
160
debian/rules
vendored
Executable file
@@ -0,0 +1,160 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
# debian/rules file for gtk+ Debian package
|
||||
# written April 1998 by Ben Gertzfield <che@debian.org
|
||||
|
||||
build: build-stamp
|
||||
build-stamp:
|
||||
dh_testdir
|
||||
./autogen.sh --prefix=/usr --with-xinput=xfree
|
||||
$(MAKE)
|
||||
cd docs && make distdocs
|
||||
cd ..
|
||||
touch build-stamp
|
||||
|
||||
build-dbg: build-dbg-stamp
|
||||
build-dbg-stamp:
|
||||
dh_testdir
|
||||
./configure --prefix=/usr --with-xinput=xfree --enable-debug=yes
|
||||
$(MAKE)
|
||||
touch build-dbg-stamp
|
||||
|
||||
clean:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
rm -f build-stamp build-dbg-stamp install-stamp install-dbg-stamp
|
||||
# Add here commands to clean up after the build process.
|
||||
-$(MAKE) clean
|
||||
cd docs
|
||||
-$(MAKE) maintainer-clean
|
||||
cd ..
|
||||
-$(MAKE) distclean
|
||||
find . -name '*.o' -o -name '_libs' -o -name '*.lo' -o -name '*.a' -o -name '.deps' | xargs rm -rf
|
||||
dh_clean
|
||||
|
||||
clean-dbg:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
rm -f build-stamp build-dbg-stamp install-stamp install-dbg-stamp
|
||||
# Add here commands to clean up after the build process.
|
||||
-$(MAKE) clean
|
||||
cd docs
|
||||
-$(MAKE) maintainer-clean
|
||||
cd ..
|
||||
-$(MAKE) distclean
|
||||
find . -name '*.o' -o -name '_libs' -o -name '*.lo' -o -name '*.a' -o -name '.deps' | xargs rm -rf
|
||||
dh_clean -k
|
||||
|
||||
install: install-stamp
|
||||
install-stamp: build
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean
|
||||
$(MAKE) prefix=`pwd`/debian/tmp/usr install
|
||||
touch install-stamp
|
||||
|
||||
install-dbg: install-dbg-stamp
|
||||
install-dbg-stamp: build-dbg
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean -k
|
||||
$(MAKE) prefix=`pwd`/debian/libgtk-cvs-dbg/usr install
|
||||
touch install-dbg-stamp
|
||||
|
||||
# Build architecture-independent files here.
|
||||
binary-indep: build install libgtk-cvs-doc
|
||||
# We have nothing to do by default.
|
||||
|
||||
# Build architecture-dependent files here.
|
||||
binary-arch: build install libgtk-cvs-dev libgtk-cvs-1.1 libgtk-cvs-dbg
|
||||
|
||||
libgtk-cvs-1.1: build
|
||||
dh_testdir -plibgtk-cvs-1.1
|
||||
dh_testroot -plibgtk-cvs-1.1
|
||||
dh_installdirs -plibgtk-cvs-1.1
|
||||
# Add here commands to install the files into debian/tmp
|
||||
rm -rf debian/tmp/usr/bin debian/tmp/usr/include debian/tmp/usr/info debian/tmp/usr/lib/glib debian/tmp/usr/share/aclocal debian/tmp/usr/man debian/tmp/usr/lib/*.la
|
||||
dh_installdocs -plibgtk-cvs-1.1
|
||||
dh_installchangelogs -plibgtk-cvs-1.1
|
||||
dh_strip -plibgtk-cvs-1.1
|
||||
dh_compress -plibgtk-cvs-1.1
|
||||
dh_fixperms -plibgtk-cvs-1.1
|
||||
dh_installdeb -plibgtk-cvs-1.1
|
||||
dh_shlibdeps -plibgtk-cvs-1.1
|
||||
dh_gencontrol -plibgtk-cvs-1.1
|
||||
dh_makeshlibs -plibgtk-cvs-1.1 -V 'libgtk-cvs-1.1 (='`cat debian/version`')'
|
||||
dh_md5sums -plibgtk-cvs-1.1
|
||||
dh_builddeb -plibgtk-cvs-1.1
|
||||
|
||||
libgtk-cvs-dev: build
|
||||
dh_testdir -plibgtk-cvs-dev
|
||||
dh_testroot -plibgtk-cvs-dev
|
||||
dh_clean -plibgtk-cvs-dev -k
|
||||
dh_installdirs -plibgtk-cvs-dev
|
||||
# Add here commands to install the files into debian/tmp
|
||||
dh_movefiles -plibgtk-cvs-dev
|
||||
cp gtk-config debian/tmp/usr/bin
|
||||
dh_installdocs -plibgtk-cvs-dev
|
||||
dh_installchangelogs -plibgtk-cvs-dev
|
||||
dh_strip -plibgtk-cvs-dev
|
||||
dh_compress -plibgtk-cvs-dev
|
||||
dh_fixperms -plibgtk-cvs-dev
|
||||
dh_installdeb -plibgtk-cvs-dev
|
||||
dh_shlibdeps -plibgtk-cvs-dev
|
||||
dh_gencontrol -plibgtk-cvs-dev
|
||||
dh_md5sums -plibgtk-cvs-dev
|
||||
dh_builddeb -plibgtk-cvs-dev
|
||||
|
||||
libgtk-cvs-doc:
|
||||
dh_testdir -plibgtk-cvs-doc
|
||||
dh_testroot -plibgtk-cvs-doc
|
||||
dh_clean -plibgtk-cvs-doc -k
|
||||
dh_installdirs -plibgtk-cvs-doc usr/doc/libgtk-cvs-doc/faq-html \
|
||||
usr/doc/libgtk-cvs-doc/tutorial-html usr/doc/libgtk-cvs-doc/italian-tutorial-html usr/doc/libgtk-cvs-doc/french-tutorial-html usr/doc/libgtk-cvs-doc/gdk-html
|
||||
dh_movefiles -plibgtk-cvs-doc
|
||||
cp docs/html/gtkfaq*.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/faq-html
|
||||
cp docs/html/gtk_tut-*.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/tutorial-html
|
||||
cp docs/html/*.gif debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/tutorial-html
|
||||
cp docs/html/gtk_tut.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/tutorial-html
|
||||
cp docs/html/gtk_tut_it*.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/italian-tutorial-html
|
||||
cp docs/html/*.gif debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/italian-tutorial-html
|
||||
cp docs/html/gtk_tut_fr*.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/french-tutorial-html
|
||||
cp docs/html/*.gif debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/french-tutorial-html
|
||||
cp docs/html/gdk* debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/gdk-html
|
||||
cp docs/text/*.txt debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/
|
||||
|
||||
dh_installdocs -plibgtk-cvs-doc docs/{debugging,developers,styles,text_widget,widget_system,gtk-config,refcounting}.txt TODO NEWS
|
||||
dh_installchangelogs -plibgtk-cvs-doc
|
||||
dh_strip -plibgtk-cvs-doc
|
||||
dh_compress -plibgtk-cvs-doc
|
||||
dh_fixperms -plibgtk-cvs-doc
|
||||
dh_installdeb -plibgtk-cvs-doc
|
||||
dh_shlibdeps -plibgtk-cvs-doc
|
||||
dh_gencontrol -plibgtk-cvs-doc
|
||||
dh_md5sums -plibgtk-cvs-doc
|
||||
dh_builddeb -plibgtk-cvs-doc
|
||||
|
||||
libgtk-cvs-dbg: clean-dbg install-dbg
|
||||
dh_testdir -plibgtk-cvs-dbg
|
||||
dh_testroot -plibgtk-cvs-dbg
|
||||
dh_installdirs -plibgtk-cvs-dbg
|
||||
# Add here commands to install the files into debian/libgtk-cvs-dbg
|
||||
rm -rf debian/libgtk-cvs-dbg/usr/bin debian/libgtk-cvs-dbg/usr/include debian/libgtk-cvs-dbg/usr/info debian/libgtk-cvs-dbg/usr/lib/glib debian/libgtk-cvs-dbg/usr/man debian/libgtk-cvs-dbg/usr/share debian/libgtk-cvs-dbg/usr/lib/*.{la,so*}
|
||||
for file in `find debian/libgtk-cvs-dbg/usr/lib -name '*.a'` ; do \
|
||||
mv $$file debian/libgtk-cvs-dbg/usr/lib/`basename $$file .a`_g.a; \
|
||||
done
|
||||
dh_installdocs -plibgtk-cvs-dbg
|
||||
dh_installchangelogs -plibgtk-cvs-dbg
|
||||
dh_compress -plibgtk-cvs-dbg
|
||||
dh_fixperms -plibgtk-cvs-dbg
|
||||
dh_installdeb -plibgtk-cvs-dbg
|
||||
dh_shlibdeps -plibgtk-cvs-dbg
|
||||
dh_gencontrol -plibgtk-cvs-dbg
|
||||
dh_md5sums -plibgtk-cvs-dbg
|
||||
dh_builddeb -plibgtk-cvs-dbg
|
||||
|
||||
source diff:
|
||||
@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
|
||||
|
||||
binary: binary-indep binary-arch
|
||||
.PHONY: build clean binary-indep binary-arch binary
|
||||
@@ -1,5 +1,6 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.html
|
||||
*.info*
|
||||
*.dvi
|
||||
*.ps
|
||||
@@ -15,3 +16,5 @@ Makefile.in
|
||||
*.cps
|
||||
*.fns
|
||||
*.vrs
|
||||
html
|
||||
text
|
||||
|
||||
108
docs/Changes-1.2.txt
Normal file
108
docs/Changes-1.2.txt
Normal file
@@ -0,0 +1,108 @@
|
||||
Incompatible Changes from GTK+-1.0 to GTK+-1.2:
|
||||
|
||||
* GtkAcceleratorTable has been replaced with GtkAccelGroup
|
||||
|
||||
* GtkMenuFactory has been replaced with GtkItemFactory, although
|
||||
a version of GtkMenuFactory is provided to ease compatibility.
|
||||
|
||||
* GtkButton has been changed to derive from GtkBin.
|
||||
|
||||
To access a button's child, use GTK_BIN (button)->child, instead
|
||||
of the old GTK_BUTTON (button)->child.
|
||||
|
||||
* The selection API has been slightly modified:
|
||||
|
||||
gtk_selection_add_handler() and gtk_selection_add_handler_full()
|
||||
have been removed. To supply the selection, one now register
|
||||
the targets one is interested in with:
|
||||
|
||||
void gtk_selection_add_target (GtkWidget *widget,
|
||||
GdkAtom selection,
|
||||
GdkAtom target,
|
||||
guint info);
|
||||
|
||||
or:
|
||||
|
||||
void gtk_selection_add_targets (GtkWidget *widget,
|
||||
GdkAtom selection,
|
||||
GtkTargetEntry *targets,
|
||||
guint ntargets);
|
||||
|
||||
When a request for a selection is received, the new "selection_get"
|
||||
signal will be called:
|
||||
|
||||
void "selection_get" (GtkWidget *widget,
|
||||
GtkSelectionData *selection_data,
|
||||
guint info,
|
||||
guint time);
|
||||
|
||||
A "time" parameter has also been added to the "selection_received"
|
||||
signal.
|
||||
|
||||
void "selection_received" (GtkWidget *widget,
|
||||
GtkSelectionData *selection_data,
|
||||
guint time);
|
||||
|
||||
* The old drag and drop API has been completely removed and replaced.
|
||||
See the reference documentation for details on the new API.
|
||||
|
||||
* Support for Themes has been added. In general, this does
|
||||
not affect application code, however, a few new rules should
|
||||
be observed:
|
||||
|
||||
- To set a shape for a window, you must use
|
||||
gtk_widget_shape_combine_mask() instead of
|
||||
gdk_window_shape_combine_mask(), or the shape will be
|
||||
reset when switching themes.
|
||||
|
||||
- It is no longer permissable to draw directly on an arbitrary
|
||||
widget, or to set an arbitrary widget's background pixmap.
|
||||
If you need to do that, use a GtkDrawingArea or (for a
|
||||
toplevel) the new GtkDrawWindow widget.
|
||||
|
||||
* The ScrolledWindow widget no longer creates a Viewport
|
||||
automatically. Instead, it has been generalized to accept
|
||||
any "self-scrolling" widget.
|
||||
|
||||
The self-scrolling widgets in the Gtk+ core are GtkViewport,
|
||||
GtkCList, GtkCTree, GtkText, and GtkLayout. All of these widgets can
|
||||
be added to a scrolled window as normal children with
|
||||
gtk_container_add() and scrollbars will be set up automatically.
|
||||
|
||||
To add scrollbars to a non self-scrolling widget, (such as a GtkList),
|
||||
first add it to a viewport, then add the viewport to a scrolled window.
|
||||
The scrolled window code provides a convenience function to do this:
|
||||
|
||||
void gtk_scrolled_window_add_with_viewport (GtkScrolledWindow *scrollwin,
|
||||
GtkWidget *child);
|
||||
|
||||
This does exactly what it says - it creates a Viewport, adds the child
|
||||
widget to it, then adds the Viewport to the scrolled window.
|
||||
|
||||
The scrollbars have been removed from the GtkCList and GtkCTree,
|
||||
because they are now scrolled by simply adding them to a Scrolled
|
||||
Window. The scrollbar policy is set on the scrolled window with
|
||||
gtk_scrolled_window_set_policy() and not on the child widgets
|
||||
(e.g. GtkCList's gtk_clist_set_policy() was removed).
|
||||
|
||||
* the GTK_BASIC flag got removed, and with it the corresponding
|
||||
macro and function GTK_WIDGET_BASIC() and gtk_widget_basic().
|
||||
|
||||
* all freeze/thaw methods in gtk work in an incremental way now.
|
||||
code portions like:
|
||||
gboolean frozen;
|
||||
frozen = GTK_CLIST_FROZEN (clist);
|
||||
gtk_clist_freeze (clist);
|
||||
[...]
|
||||
if (!frozen)
|
||||
gtk_clist_thaw (clist);
|
||||
will not work anymore, they have to be modified to simply:
|
||||
gtk_clist_freeze (clist);
|
||||
[...]
|
||||
gtk_clist_thaw (clist);
|
||||
|
||||
* All functions matching g_message* are deprecated
|
||||
|
||||
* Functions *_interp are deprecated, *_full variants are available
|
||||
instead
|
||||
|
||||
183
docs/Makefile.am
183
docs/Makefile.am
@@ -1,20 +1,177 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
info_TEXINFOS = gdk.texi gtk.texi glib.texi
|
||||
info_TEXINFOS = gdk.texi gtk.texi
|
||||
|
||||
man_MANS = gtk-config.1
|
||||
|
||||
EXTRA_DIST = \
|
||||
texinfo.tex \
|
||||
macros.texi \
|
||||
Makefile.gtkfaq \
|
||||
gtkfaq.sgml \
|
||||
gtkfaq_fix \
|
||||
debugging.txt \
|
||||
developers.txt \
|
||||
refcounting.txt \
|
||||
styles.txt \
|
||||
text_widget.txt \
|
||||
widget_system.txt
|
||||
|
||||
texinfo.tex \
|
||||
macros.texi \
|
||||
gtkdocs_fix \
|
||||
gtkfaq.sgml \
|
||||
gtk-config.txt \
|
||||
gtk_tut.sgml \
|
||||
gtk_tut_it.sgml \
|
||||
gtk_tut_fr.sgml \
|
||||
debugging.txt \
|
||||
developers.txt \
|
||||
refcounting.txt \
|
||||
styles.txt \
|
||||
text_widget.txt \
|
||||
widget_system.txt \
|
||||
gtk_tut_packbox1.gif \
|
||||
gtk_tut_packbox2.gif \
|
||||
html/gtk_tut_table.gif \
|
||||
html/gtk_tut_packbox1.gif \
|
||||
html/gtk_tut_packbox2.gif \
|
||||
gtk_tut_table.gif \
|
||||
gtk-config.1 \
|
||||
html/gdk.html \
|
||||
html/gdk_toc.html \
|
||||
html/gtk.html \
|
||||
html/gtk_toc.html \
|
||||
html/gtk_tut.html \
|
||||
html/gtk_tut-1.html \
|
||||
html/gtk_tut-2.html \
|
||||
html/gtk_tut-3.html \
|
||||
html/gtk_tut-4.html \
|
||||
html/gtk_tut-5.html \
|
||||
html/gtk_tut-6.html \
|
||||
html/gtk_tut-7.html \
|
||||
html/gtk_tut-8.html \
|
||||
html/gtk_tut-9.html \
|
||||
html/gtk_tut-10.html \
|
||||
html/gtk_tut-11.html \
|
||||
html/gtk_tut-12.html \
|
||||
html/gtk_tut-13.html \
|
||||
html/gtk_tut-14.html \
|
||||
html/gtk_tut-15.html \
|
||||
html/gtk_tut-16.html \
|
||||
html/gtk_tut-17.html \
|
||||
html/gtk_tut-18.html \
|
||||
html/gtk_tut-19.html \
|
||||
html/gtk_tut-20.html \
|
||||
html/gtk_tut-21.html \
|
||||
html/gtk_tut-22.html \
|
||||
html/gtk_tut-23.html \
|
||||
html/gtk_tut-24.html \
|
||||
html/gtk_tut-25.html \
|
||||
html/gtk_tut-26.html \
|
||||
html/gtk_tut-27.html \
|
||||
html/gtk_tut-28.html \
|
||||
html/gtk_tut-29.html \
|
||||
html/gtk_tut-30.html \
|
||||
html/gtk_tut-31.html \
|
||||
html/gtk_tut_fr.html \
|
||||
html/gtk_tut_fr-1.html \
|
||||
html/gtk_tut_fr-2.html \
|
||||
html/gtk_tut_fr-3.html \
|
||||
html/gtk_tut_fr-4.html \
|
||||
html/gtk_tut_fr-5.html \
|
||||
html/gtk_tut_fr-6.html \
|
||||
html/gtk_tut_fr-7.html \
|
||||
html/gtk_tut_fr-8.html \
|
||||
html/gtk_tut_fr-9.html \
|
||||
html/gtk_tut_fr-10.html \
|
||||
html/gtk_tut_fr-11.html \
|
||||
html/gtk_tut_fr-12.html \
|
||||
html/gtk_tut_fr-13.html \
|
||||
html/gtk_tut_fr-14.html \
|
||||
html/gtk_tut_fr-15.html \
|
||||
html/gtk_tut_fr-16.html \
|
||||
html/gtk_tut_fr-17.html \
|
||||
html/gtk_tut_fr-18.html \
|
||||
html/gtk_tut_fr-19.html \
|
||||
html/gtk_tut_fr-20.html \
|
||||
html/gtk_tut_fr-21.html \
|
||||
html/gtk_tut_fr-22.html \
|
||||
html/gtk_tut_fr-23.html \
|
||||
html/gtk_tut_fr-24.html \
|
||||
html/gtk_tut_it.html \
|
||||
html/gtk_tut_it-1.html \
|
||||
html/gtk_tut_it-2.html \
|
||||
html/gtk_tut_it-3.html \
|
||||
html/gtk_tut_it-4.html \
|
||||
html/gtk_tut_it-5.html \
|
||||
html/gtk_tut_it-6.html \
|
||||
html/gtk_tut_it-7.html \
|
||||
html/gtk_tut_it-8.html \
|
||||
html/gtk_tut_it-9.html \
|
||||
html/gtk_tut_it-10.html \
|
||||
html/gtk_tut_it-11.html \
|
||||
html/gtk_tut_it-12.html \
|
||||
html/gtk_tut_it-13.html \
|
||||
html/gtk_tut_it-14.html \
|
||||
html/gtk_tut_it-15.html \
|
||||
html/gtk_tut_it-16.html \
|
||||
html/gtk_tut_it-17.html \
|
||||
html/gtk_tut_it-18.html \
|
||||
html/gtk_tut_it-19.html \
|
||||
html/gtk_tut_it-20.html \
|
||||
html/gtk_tut_it-21.html \
|
||||
html/gtk_tut_it-22.html \
|
||||
html/gtk_tut_it-23.html \
|
||||
html/gtk_tut_it-24.html \
|
||||
html/gtkfaq.html \
|
||||
html/gtkfaq-1.html \
|
||||
html/gtkfaq-2.html \
|
||||
html/gtkfaq-3.html \
|
||||
html/gtkfaq-4.html \
|
||||
html/gtkfaq-5.html \
|
||||
html/gtkfaq-6.html \
|
||||
html/gtkfaq-7.html \
|
||||
text/gtkfaq.txt \
|
||||
text/gtk_tut.txt \
|
||||
text/gtk_tut_it.txt \
|
||||
text/gtk_tut_fr.txt
|
||||
|
||||
.PHONY: html htmldir gdk.html gtk.html faq tutorial tutorial_it tutorial_fr files
|
||||
|
||||
distdocs: gdk.html gtk.html faq tutorial tutorial_it tutorial_fr
|
||||
|
||||
htmldir:
|
||||
mkdir -p html
|
||||
cp gtk_tut*gif html/
|
||||
|
||||
textdir:
|
||||
mkdir -p text
|
||||
|
||||
gdk.html: htmldir
|
||||
texi2html gdk.texi
|
||||
mv gdk.html gdk_toc.html html/
|
||||
|
||||
gtk.html: htmldir
|
||||
texi2html gtk.texi
|
||||
mv gtk.html gtk_toc.html html/
|
||||
|
||||
faq: htmldir textdir
|
||||
sgml2html gtkfaq.sgml
|
||||
perl gtkdocs_fix gtkfaq*html
|
||||
mv gtkfaq*html html/
|
||||
sgml2txt gtkfaq.sgml
|
||||
mv gtkfaq.txt text/
|
||||
|
||||
tutorial: htmldir textdir
|
||||
sgml2html gtk_tut.sgml
|
||||
perl gtkdocs_fix gtk_tut*html
|
||||
mv gtk_tut*html html/
|
||||
sgml2txt gtk_tut.sgml
|
||||
mv gtk_tut.txt text/
|
||||
|
||||
tutorial_it: htmldir
|
||||
sgml2html gtk_tut_it.sgml
|
||||
perl gtkdocs_fix gtk_tut_it*html
|
||||
mv gtk_tut_it*html html/
|
||||
sgml2txt gtk_tut_it.sgml
|
||||
mv gtk_tut_it.txt text/
|
||||
|
||||
tutorial_fr: htmldir
|
||||
sgml2html gtk_tut_fr.sgml
|
||||
perl gtkdocs_fix gtk_tut_fr*html
|
||||
mv gtk_tut_fr*html html/
|
||||
sgml2txt gtk_tut_fr.sgml
|
||||
mv gtk_tut_fr.txt text/
|
||||
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#
|
||||
# To use this makefile, do:
|
||||
# make -f Makefile.gtkfaq
|
||||
#
|
||||
# This is not done by default because you might
|
||||
# not have sgml2html installed... Perhaps we could
|
||||
# detect that in the future and combine it in with
|
||||
# the automake stuff...
|
||||
#
|
||||
|
||||
all: sgml
|
||||
|
||||
sgml:
|
||||
sgml2html gtkfaq.sgml
|
||||
cp gtkfaq.html index.html
|
||||
perl gtkfaq_fix *.html
|
||||
294
docs/Makefile.in
294
docs/Makefile.in
@@ -1,294 +0,0 @@
|
||||
# Makefile.in generated automatically by automake 1.2c from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
|
||||
bindir = @bindir@
|
||||
sbindir = @sbindir@
|
||||
libexecdir = @libexecdir@
|
||||
datadir = @datadir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
localstatedir = @localstatedir@
|
||||
libdir = @libdir@
|
||||
infodir = @infodir@
|
||||
mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
|
||||
top_builddir = ..
|
||||
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
transform = @program_transform_name@
|
||||
|
||||
NORMAL_INSTALL = true
|
||||
PRE_INSTALL = true
|
||||
POST_INSTALL = true
|
||||
NORMAL_UNINSTALL = true
|
||||
PRE_UNINSTALL = true
|
||||
POST_UNINSTALL = true
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
LD = @LD@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
NM = @NM@
|
||||
PACKAGE = @PACKAGE@
|
||||
RANLIB = @RANLIB@
|
||||
VERSION = @VERSION@
|
||||
x_cflags = @x_cflags@
|
||||
x_includes = @x_includes@
|
||||
x_ldflags = @x_ldflags@
|
||||
x_libs = @x_libs@
|
||||
xinput_progs = @xinput_progs@
|
||||
|
||||
info_TEXINFOS = gdk.texi gtk.texi
|
||||
|
||||
EXTRA_DIST = texinfo.tex macros.texi Makefile.gtkfaq gtkfaq.sgml gtkfaq_fix
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = ../config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
TEXI2DVI = texi2dvi
|
||||
TEXINFO_TEX = $(srcdir)/texinfo.tex
|
||||
INFO_DEPS = gdk.info gtk.info
|
||||
DVIS = gdk.dvi gtk.dvi
|
||||
TEXINFOS = gdk.texi gtk.texi
|
||||
DIST_COMMON = Makefile.am Makefile.in texinfo.tex
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
GZIP = --best
|
||||
default: all
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .dvi .info .ps .texi .texinfo
|
||||
$(srcdir)/Makefile.in: @MAINT@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
|
||||
gdk.info: gdk.texi
|
||||
gdk.dvi: gdk.texi
|
||||
|
||||
|
||||
gtk.info: gtk.texi
|
||||
gtk.dvi: gtk.texi
|
||||
|
||||
|
||||
DVIPS = dvips
|
||||
|
||||
.texi.info:
|
||||
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||
cd $(srcdir) \
|
||||
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||
|
||||
.texi.dvi:
|
||||
TEXINPUTS=$(srcdir):$$TEXINPUTS \
|
||||
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
||||
|
||||
.texi:
|
||||
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||
cd $(srcdir) \
|
||||
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||
|
||||
.texinfo.info:
|
||||
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||
cd $(srcdir) \
|
||||
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||
|
||||
.texinfo:
|
||||
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||
cd $(srcdir) \
|
||||
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||
|
||||
.texinfo.dvi:
|
||||
TEXINPUTS=$(srcdir):$$TEXINPUTS \
|
||||
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
||||
.dvi.ps:
|
||||
$(DVIPS) $< -o $@
|
||||
|
||||
install-info-am: $(INFO_DEPS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(infodir)
|
||||
@for file in $(INFO_DEPS); do \
|
||||
d=$(srcdir); \
|
||||
for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
|
||||
if test -f $$d/$$ifile; then \
|
||||
echo " $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile"; \
|
||||
$(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile; \
|
||||
else : ; fi; \
|
||||
done; \
|
||||
done
|
||||
@$(POST_INSTALL)
|
||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||
for file in $(INFO_DEPS); do \
|
||||
echo " install-info --info-dir=$(infodir) $(infodir)/$$file";\
|
||||
install-info --info-dir=$(infodir) $(infodir)/$$file || :;\
|
||||
done; \
|
||||
else : ; fi
|
||||
|
||||
uninstall-info:
|
||||
$(PRE_UNINSTALL)
|
||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||
ii=yes; \
|
||||
else ii=; fi; \
|
||||
for file in $(INFO_DEPS); do \
|
||||
test -z $ii || install-info --info-dir=$(infodir) --remove $$file; \
|
||||
done
|
||||
$(NORMAL_UNINSTALL)
|
||||
for file in $(INFO_DEPS); do \
|
||||
(cd $(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \
|
||||
done
|
||||
|
||||
dist-info: $(INFO_DEPS)
|
||||
for base in $(INFO_DEPS); do \
|
||||
d=$(srcdir); \
|
||||
for file in `cd $$d && eval echo $$base*`; do \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
mostlyclean-aminfo:
|
||||
-rm -f gdk.aux gdk.cp gdk.cps gdk.dvi gdk.fn gdk.fns gdk.ky gdk.kys \
|
||||
gdk.ps gdk.log gdk.pg gdk.toc gdk.tp gdk.tps gdk.vr gdk.vrs \
|
||||
gdk.op gdk.tr gdk.cv gdk.cn gtk.aux gtk.cp gtk.cps gtk.dvi \
|
||||
gtk.fn gtk.fns gtk.ky gtk.kys gtk.ps gtk.log gtk.pg gtk.toc \
|
||||
gtk.tp gtk.tps gtk.vr gtk.vrs gtk.op gtk.tr gtk.cv gtk.cn
|
||||
|
||||
clean-aminfo:
|
||||
|
||||
distclean-aminfo:
|
||||
|
||||
maintainer-clean-aminfo:
|
||||
for i in $(INFO_DEPS); do \
|
||||
rm -f $$i; \
|
||||
if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \
|
||||
rm -f $$i-[0-9]*; \
|
||||
fi; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
|
||||
subdir = docs
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
here=`cd $(top_builddir) && pwd`; \
|
||||
top_distdir=`cd $(top_distdir) && pwd`; \
|
||||
distdir=`cd $(distdir) && pwd`; \
|
||||
cd $(top_srcdir) \
|
||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu docs/Makefile
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
done
|
||||
$(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info
|
||||
info: $(INFO_DEPS)
|
||||
dvi: $(DVIS)
|
||||
check: all
|
||||
$(MAKE)
|
||||
installcheck:
|
||||
install-exec:
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install-data: install-info-am
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install: install-exec install-data all
|
||||
@:
|
||||
|
||||
uninstall: uninstall-info
|
||||
|
||||
all: Makefile $(INFO_DEPS)
|
||||
|
||||
install-strip:
|
||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||
installdirs:
|
||||
$(mkinstalldirs) $(infodir)
|
||||
|
||||
|
||||
mostlyclean-generic:
|
||||
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(DISTCLEANFILES)
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||
mostlyclean: mostlyclean-aminfo mostlyclean-generic
|
||||
|
||||
clean: clean-aminfo clean-generic mostlyclean
|
||||
|
||||
distclean: distclean-aminfo distclean-generic clean
|
||||
-rm -f config.status
|
||||
-rm -f libtool
|
||||
|
||||
maintainer-clean: maintainer-clean-aminfo maintainer-clean-generic \
|
||||
distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
.PHONY: default install-info-am uninstall-info mostlyclean-aminfo \
|
||||
distclean-aminfo clean-aminfo maintainer-clean-aminfo tags distdir info \
|
||||
dvi installcheck install-exec install-data install uninstall all \
|
||||
installdirs mostlyclean-generic distclean-generic clean-generic \
|
||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -53,11 +53,10 @@ by the:
|
||||
First the environment variables are applied, then the command line
|
||||
options are applied in the order given on the command line.
|
||||
|
||||
Each of these can either be the special value ALL, or a sequence of
|
||||
':' separated options. (Note, case is significant). The environment
|
||||
variables and the --gtk-debug and --gdk-debug options add debugging
|
||||
options and the --gtk-no-debug and --gdk-no-debug options remove
|
||||
them.
|
||||
Each of these can either be the special value 'all', or a sequence of
|
||||
':' separated options. (case is ignored). The environment variables
|
||||
and the --gtk-debug and --gdk-debug options add debugging options and
|
||||
the --gtk-no-debug and --gdk-no-debug options remove them.
|
||||
|
||||
As noted below, some of these are useful in application debugging, but
|
||||
most are only interested to those debugging the libraries
|
||||
|
||||
210
docs/dnd_internals.txt
Normal file
210
docs/dnd_internals.txt
Normal file
@@ -0,0 +1,210 @@
|
||||
This document describes some of the internals of the DND handling
|
||||
code.
|
||||
|
||||
Organization
|
||||
============
|
||||
|
||||
The DND code is split between a lowlevel part - gdkdnd.c and a
|
||||
highlevel part - gtkdnd.c. To put it simply, gdkdnd.c contain the
|
||||
portions of DND code that are easiest to do in raw X, while gtkdnd.c
|
||||
contains the portions of DND that are easiest to do with an event loop
|
||||
and high level selection handling.
|
||||
|
||||
Except for a few details of selection handling, most of the
|
||||
dependencies on the DND protocol are confined to gdkdnd.c.
|
||||
There are two or three supported protocols - Motif DND,
|
||||
Xdnd and a pseudo-protocol ROOTWIN, which is used for drops
|
||||
on root windows that aren't really accepting drops.
|
||||
gdkdnd.c divides into 4 pieces:
|
||||
|
||||
1) Utility functions (finding client windows)
|
||||
2) Motif specific code (the biggest chunk)
|
||||
3) Xdnd specific code
|
||||
4) The public interfaces
|
||||
|
||||
The code in gtkdnd.c roughly consists of three parts
|
||||
|
||||
1) General utility functions
|
||||
2) Destination side code
|
||||
3) Source side code.
|
||||
|
||||
Both on the source and dest side, there is some division
|
||||
between the low level layers and the default handlers,
|
||||
though they are rather mixed in many cases.
|
||||
|
||||
Structures and Memory Management
|
||||
================================
|
||||
|
||||
Information about source sites and drop sites is stored
|
||||
in the structures GtkSourceSite and GtkDestSite.
|
||||
|
||||
Information about in-progress drags and drops is stored
|
||||
in the structures GtkSourceInfo and GtkDestInfo.
|
||||
|
||||
The GtkSourceInfo structure is created when the drag
|
||||
begins, and persists until the drag either completes
|
||||
or times out. A pointer to it is stored in
|
||||
dataset-data for the GdkDragContext, however there
|
||||
is no ownership. If the SourceInfo is destroyed
|
||||
before the context, the field is simply cleared.
|
||||
|
||||
A GtkDestInfo is attached to each GdkDragContext
|
||||
that is received for an incoming drag. In contrast
|
||||
to the SourceInfo the DestInfo is "owned" by the
|
||||
context, and when the context is destroyed, destroyed.
|
||||
|
||||
The GDK API
|
||||
===========
|
||||
|
||||
It is expect that the GDK DND API will never be
|
||||
used by anything other than the DND code in GTK+.
|
||||
|
||||
/* Drag and Drop */
|
||||
|
||||
GdkDragContext * gdk_drag_context_new (void);
|
||||
void gdk_drag_context_ref (GdkDragContext *context);
|
||||
void gdk_drag_context_unref (GdkDragContext *context);
|
||||
|
||||
These create and refcount GdkDragContexts in a
|
||||
straightforward manner.
|
||||
|
||||
/* Destination side */
|
||||
|
||||
void gdk_drag_status (GdkDragContext *context,
|
||||
GdkDragAction action,
|
||||
guint32 time);
|
||||
void gdk_drop_reply (GdkDragContext *context,
|
||||
gboolean ok,
|
||||
guint32 time);
|
||||
void gdk_drop_finish (GdkDragContext *context,
|
||||
gboolean success,
|
||||
guint32 time);
|
||||
GdkAtom gdk_drag_get_selection (GdkDragContext *context);
|
||||
|
||||
/* Source side */
|
||||
|
||||
GdkDragContext * gdk_drag_begin (GdkWindow *window,
|
||||
GList *targets,
|
||||
GdkDragAction actions);
|
||||
gboolean gdk_drag_get_protocol (guint32 xid,
|
||||
GdkDragProtocol *protocol);
|
||||
void gdk_drag_find_window (GdkDragContext *context,
|
||||
GdkWindow *drag_window,
|
||||
gint x_root,
|
||||
gint y_root,
|
||||
GdkWindow **dest_window,
|
||||
GdkDragProtocol *protocol);
|
||||
gboolean gdk_drag_motion (GdkDragContext *context,
|
||||
GdkWindow *dest_window,
|
||||
GdkDragProtocol protocol,
|
||||
gint x_root,
|
||||
gint y_root,
|
||||
GdkDragAction action,
|
||||
guint32 time);
|
||||
void gdk_drag_drop (GdkDragContext *context,
|
||||
guint32 time);
|
||||
void gdk_drag_abort (GdkDragContext *context,
|
||||
guint32 time);
|
||||
|
||||
GdkAtom gdk_drag_get_selection (GdkDragContext *context);
|
||||
|
||||
Retrieves the selection that will be used to communicate
|
||||
the data for the drag context (valid on both source
|
||||
and dest sides)
|
||||
|
||||
Cursors and window heirarchies
|
||||
==============================
|
||||
|
||||
The DND code, when possible (and it isn't possible over
|
||||
Motif window) uses a shaped window as a drag icon.
|
||||
Because the cursor may fall inside this window during the
|
||||
drag, we actually have to figure out which window
|
||||
the cursor is in _ourselves_ so we can ignore the
|
||||
drag icon properly. (Oh for OutputOnly windows!)
|
||||
|
||||
To avoid obscene amounts of server traffic (which are only
|
||||
slighly observerable locally, but would really kill a
|
||||
session over a slow link), the code in GDK does
|
||||
XGetWindowAttributes for every child of the root window at
|
||||
the beginning of the drag, then selects with
|
||||
SubstructureNotifyMask on the root window, so that
|
||||
it can update this list.
|
||||
|
||||
It probably would be easier to just reread the entire
|
||||
list when one of these events occurs, instead of
|
||||
incrementally updating, but updating the list in
|
||||
sync was sort of fun code, so I did it that way ;-)
|
||||
|
||||
There is also a problem of trying to follow the
|
||||
mouse cursor as well as possible. Currently, the
|
||||
code uses PointerMotionHint, and an XQueryPointer
|
||||
on MotionNotify events. This results in pretty
|
||||
good syncing, but may result in somewhat poor
|
||||
accuracy for drops. (Because the coordinates of
|
||||
the drop are the coordinates when the server receives
|
||||
the button press, which might actually be before
|
||||
the XQueryPointer for the previous MotionNotify
|
||||
event is done.)
|
||||
|
||||
Probably better is doing MotionNotify compression
|
||||
and discarding MotionNotify events when there
|
||||
are more on the queue before the next ButtonPress/Release.
|
||||
|
||||
Proxying
|
||||
========
|
||||
|
||||
A perhaps rather unusual feature of GTK's DND is proxying. A
|
||||
dest site can be specified as a proxy drop site for another
|
||||
window. This is most needed for the plug-socket code - the
|
||||
socket needs to pass on drags to the plug since the original
|
||||
source only sees toplevel windows. However, it can also be
|
||||
used as a user visible proxy - i.e., dragging to buttons on
|
||||
the taskbar.
|
||||
|
||||
Internally, when the outer drag enters a proxy dest site, a
|
||||
new source drag is created, with SourceInfo and
|
||||
GdkDragContext. From the GDK side, it looks much like a
|
||||
normal source drag; on the GTK+ side, most of the code is
|
||||
disjoint. The need to pass in a specific target window
|
||||
is the reason why the GDK DND API splits
|
||||
gdk_drag_find_window() and gdk_drag_motion().
|
||||
|
||||
For proxy drags, the GtkDestInfo and GtkSourceInfo for the
|
||||
drag point at each other.
|
||||
|
||||
Because the abstraction of the drag protocol is at the GDK
|
||||
level, a proxy drag from Motif to Xdnd or vice versa happens
|
||||
pretty much automatically during the drag, though the
|
||||
drop can get complicated. For Xdnd <-> Motif,
|
||||
Motif <-> Xdnd, or Motif <-> Motif drags, it is necessary to
|
||||
for the Proxy to retrieve the data and pass it on to
|
||||
the true destination, since either the selection names
|
||||
differ or (Motif<->Motif), the proxy needs to know
|
||||
about the XmDRAG_SUCCESS/FAILURE selection targets.
|
||||
|
||||
Further Reading:
|
||||
================
|
||||
|
||||
Xdnd:
|
||||
|
||||
The spec is at:
|
||||
|
||||
http://www.cco.caltech.edu/~jafl/xdnd/
|
||||
|
||||
Motif:
|
||||
|
||||
The Motif DND protocol is best described in the
|
||||
Hungry Programmers _Inside Lesstif_ book, available
|
||||
from:
|
||||
|
||||
http://www.igpm.rwth-aachen.de/~albrecht/hungry.html
|
||||
|
||||
Harald Albrecht and Mitch Miers have done a far
|
||||
better job at documenting the DND protocol then
|
||||
anything the OpenGroup has produced.
|
||||
|
||||
|
||||
|
||||
Owen Taylor
|
||||
otaylor@redhat.com
|
||||
Oct 18, 1998
|
||||
@@ -8,7 +8,9 @@
|
||||
|
||||
<!-- NOTE: Use only one author tag, otherwise sgml2txt barfs - TRG -->
|
||||
<author>Nathan Froyd, Tony Gale, Shawn T. Amundson.
|
||||
<date>March 9th 1998
|
||||
|
||||
<date>July 6th 1998
|
||||
|
||||
<abstract>
|
||||
This document is intended to answer questions that are likely to be
|
||||
frequently asked by programmers using GTK+ or people who are just
|
||||
@@ -79,19 +81,17 @@ GNU, though."
|
||||
<sect1>Where is the documentation for GTK+?
|
||||
<p>
|
||||
In the GTK+ distribution's doc/ directory you will find the
|
||||
reference material for both GTK and GDK, and this FAQ.
|
||||
reference material for both GTK and GDK, this FAQ and the
|
||||
GTK Tutorial.
|
||||
|
||||
There is also a GTK+ Tutorial which can be found at
|
||||
<htmlurl url="http://www.levien.com/~slow/gtk/"
|
||||
name="http://www.levien.com/~slow/gtk/">.
|
||||
In addition, you can find links to HTML versions of these documents
|
||||
by going to
|
||||
<htmlurl url="http://www.gtk.org/"
|
||||
name="http://www.gtk.org/">.
|
||||
|
||||
The Tutorial and FAQ can also be found at
|
||||
<htmlurl url="http://www.geocities.com/ResearchTriangle/Lab/4299/"
|
||||
name="http://www.geocities.com/ResearchTriangle/Lab/4299/">.
|
||||
|
||||
In addition, you can find links to all of these documents by going to
|
||||
<htmlurl url="http://www.gimp.org/gtk/docs"
|
||||
name="http://www.gimp.org/gtk/docs">.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>Is there a mailing list (or mailing list archive) for GTK+?
|
||||
@@ -110,7 +110,7 @@ email message to <htmlurl url="mailto:gtk-list-request@redhat.com"
|
||||
name="gtk-list-request@redhat.com">
|
||||
with <em>subscribe</em> in the <bf>subject</bf>.
|
||||
<p>
|
||||
A searchable archive of the mailing list can be found at <htmlurl url="http://www.redhat.com/linux-info/gtk/gtk-list/index.html" name="http://www.redhat.com/linux-info/gtk/gtk-list/index.html">
|
||||
A searchable archive of the mailing list can be found at <htmlurl url="http://archive.redhat.com/gtk-list" name="http://archive.redhat.com/gtk-list">
|
||||
</itemize>
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>The gtk-list hasn't had any traffic for days, is it dead?
|
||||
@@ -165,6 +165,23 @@ name="http://www.gnome.org">)
|
||||
is using GTK+ to build a free desktop for Linux. Many more programs can be found
|
||||
there.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>I'm looking for an application to write in GTK+. How about an IRC client?
|
||||
<p>
|
||||
|
||||
Ask on gtk-list for suggestions. There are at least four IRC
|
||||
clients already under development.
|
||||
|
||||
<itemize>
|
||||
<item>girc. (Included with GNOME)
|
||||
<item>Bezerk (<htmlurl url="http://www.gtk.org/~trog/"
|
||||
name="http://www.gtk.org/~trog/">)
|
||||
<item>gsirc. (Location?)
|
||||
<item>Gnirc. (<htmlurl url="http://www.imaginet.fr/~dramboz/gnirc"
|
||||
name="http://www.imaginet.fr/~dramboz/gnirc">)
|
||||
</itemize>
|
||||
|
||||
|
||||
<!-- ***************************************************************** -->
|
||||
<sect>How to find, configure, install, and troubleshoot GTK+
|
||||
|
||||
@@ -181,9 +198,9 @@ and associated libraries on your system.
|
||||
<p>
|
||||
The canonical site is:
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/pub/gtk
|
||||
ftp://ftp.gtk.org/pub/gtk
|
||||
</verb>
|
||||
Of course, any mirrors of ftp.gimp.org should have the latest version, too.
|
||||
Of course, any mirrors of ftp.gtk.org should have the latest version, too.
|
||||
|
||||
<sect1>How do I configure/compile GTK+?
|
||||
<p>
|
||||
@@ -204,22 +221,37 @@ handle the automatically generated Makefiles.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
|
||||
<sect1>I've compiled and installed GTK+, but I can't get any programs to link
|
||||
with it!
|
||||
<sect1>I've compiled and installed GTK+, but I can't get any programs to link with it!
|
||||
<p>
|
||||
This problem is most often encountered when the GTK+ libraries can't be
|
||||
found or are the wrong version. Generally, the compiler will complain about an
|
||||
'unresolved symbol'. There are two things you need to check:
|
||||
<itemize>
|
||||
<item>Make sure that the libraries can be found. You want to edit
|
||||
/etc/ld.so.conf to include /usr/local/lib (or whereever you installed GTK+),
|
||||
/etc/ld.so.conf to include the directories which contain the GTK libraries,
|
||||
so it looks something like:
|
||||
<verb>
|
||||
/usr/X11R6/lib
|
||||
/usr/local/lib
|
||||
</verb>
|
||||
Then you need to run /sbin/ldconfig as root.
|
||||
<p>
|
||||
Then you need to run /sbin/ldconfig as root. You can find what directory
|
||||
GTK is in using
|
||||
<verb>
|
||||
gtk-config --libs
|
||||
</verb>
|
||||
|
||||
If your system doesn't use ld.so to find libraries (such as Solaris), then
|
||||
you will have to use the LD_LIBRARY_PATH environment variable (or compile
|
||||
the path into your program, which I'm not going to cover here). So, with a
|
||||
Bourne type shell you can do (if your GTK libraries are in /usr/local/lib):
|
||||
<verb>
|
||||
export LD_LIBRARY_PATH=/usr/local/lib
|
||||
</verb>
|
||||
and in a csh, you can do:
|
||||
<verb>
|
||||
setenv LD_LIBRARY_PATH /usr/local/lib
|
||||
</verb>
|
||||
|
||||
<item>Make sure the linker is finding the correct set of libraries. If you
|
||||
have a Linux distribution that installs GTK+ (e.g. RedHat 5.0) then this
|
||||
older version may be used. Now (assuming you have a RedHat
|
||||
@@ -235,50 +267,80 @@ the libraries libgtk, libgdk, libglib, or libgck. If they do exist, remove them
|
||||
and reinstall gtk+.
|
||||
</itemize>
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>When compiling programs with GTK+, I get compiler error messages about not being able to find <tt/"glibconfig.h"/.
|
||||
|
||||
<p> The header file "glibconfig.h" was moved to the directory
|
||||
$exec_prefix/lib/glib/include/. $exec_prefix is the
|
||||
directory that was specified by giving the --exec-prefix
|
||||
flags to ./configure when compiling GTK+. It defaults to
|
||||
$prefix, (specified with --prefix), which in turn defaults
|
||||
to /usr/local/.
|
||||
|
||||
This was done because "glibconfig.h" includes architecture
|
||||
dependent information, and the rest of the include files
|
||||
are put in $prefix/include, which can be shared between different
|
||||
architectures.
|
||||
|
||||
GTK+ includes a shell script, <tt/gtk-config/, that
|
||||
makes it easy to find out the correct include paths.
|
||||
The GTK+ tutorial includes an example of using <tt/gtk-config/
|
||||
for simple compilation from the command line. For information
|
||||
about more complicated configuration, see the file
|
||||
docs/gtk-config.txt in the GTK+ distribution.
|
||||
|
||||
If you are trying to compile an old program, you may
|
||||
be able to work around the problem by configuring it
|
||||
with a command line like:
|
||||
|
||||
<tscreen><verb>
|
||||
CPPFLAGS="-I/usr/local/include/glib/include" ./configure
|
||||
</verb></tscreen>
|
||||
|
||||
for Bourne-compatible shells like bash, or for csh variants:
|
||||
|
||||
<tscreen><verb>
|
||||
setenv CPPFLAGS "-I/usr/local/include/glib/include"
|
||||
./configure
|
||||
</verb></tscreen>
|
||||
|
||||
(Substitute the appropriate value of $exec_prefix for /usr/local.)
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>When installing The GIMP, configure reports that it can't find GTK.
|
||||
<p>
|
||||
There are several common reasons for this:
|
||||
<itemize>
|
||||
<item>You have an old version of GTK installed somewhere. RedHat 5.0, for
|
||||
example, installs an older copy of GTK that will not work with the latest
|
||||
versions of GIMP. You should remove this old copy, but note that in the case
|
||||
of RedHat 5.0 this will break the <tt/control-panel/ applications.
|
||||
<P>
|
||||
<item><tt/gtk-config/ (or another component of GTK) isn't in your path, or
|
||||
there is an old version on your system. Type:
|
||||
<verb>
|
||||
gtk-config --version
|
||||
</verb>
|
||||
to check for both of these. This should return a value of at least 0.99.8
|
||||
for things to work properly with GIMP 0.99.23. If it returns a value
|
||||
different from what you expect, then you have an old version of GTK on
|
||||
your system.
|
||||
<P>
|
||||
<item>The ./configure script can't find the GTK libraries. As ./configure
|
||||
compiles various test programs, it needs to be able to find the GTK
|
||||
libraries. See the question above for help on this.
|
||||
</itemize>
|
||||
<p>
|
||||
If none of the above help, then have a look in config.log, which is
|
||||
generated by ./configure as it runs. At the bottom will be the last
|
||||
action it took before failing. If it is a section of source code, copy
|
||||
the source code to a file and compile it with the line just above it in
|
||||
config.log. If the compilation is successful, try executing it.
|
||||
|
||||
<!-- ***************************************************************** -->
|
||||
<sect>Development of GTK+
|
||||
<!-- ***************************************************************** -->
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>When will it reach version 1.0?
|
||||
<p>
|
||||
The file 'TODO' in the gtk+ distribution lists the things that need to be done
|
||||
before version 1.0 is repleased. Not including bugs, this includes:
|
||||
|
||||
<itemize>
|
||||
<item>New Features
|
||||
<itemize>
|
||||
<item>gdk_expose_compress: ala-Xt, this would really help for opaque moves and
|
||||
such
|
||||
</itemize>
|
||||
<p>
|
||||
|
||||
<item>Widgets
|
||||
<itemize>
|
||||
<item>Column-list (Jay Painter)
|
||||
<item>Text widget (needs to be finished)
|
||||
<item>Entry should have a password mode (and it should show stars
|
||||
for user feedback)
|
||||
</itemize>
|
||||
<p>
|
||||
|
||||
<item>Drag-and-Drop (DND)
|
||||
<itemize>
|
||||
<item> It seems to be having problems again. The way DND data types are set in
|
||||
GtkWidget really needs to be fixed. This is pretty high on my priority
|
||||
list, and I'll get to it as soon as the column list widget is done. The
|
||||
correct way dnd data needs to be set is to have a additional keyed data
|
||||
type with GtkWidget, which is applied to the widget's window upon realize.
|
||||
There also needs to be a way to set dnd-data on widget windows which are
|
||||
not the main window (for widgets that create more than one window).
|
||||
-- Jay Painter
|
||||
<item> DnD seems to work for me, but yes, there needs to be some sort of
|
||||
gtk_widget layer that makes it easier... Also, adding support for drop
|
||||
zones might be nice.
|
||||
-- Elliot
|
||||
</itemize>
|
||||
</itemize>
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>Whats this CVS thing that everyone keeps talking about, and how do I access it?
|
||||
<p>
|
||||
@@ -303,7 +365,7 @@ using the following steps:
|
||||
<itemize>
|
||||
<item> In a bourne shell descendant (e.g. bash) type:
|
||||
<verb>
|
||||
export CVSROOT=':pserver:anonymous@cvs.gimp.org:/debian/home/gnomecvs'
|
||||
export CVSROOT=':pserver:anonymous@anoncvs.gimp.org:/debian/home/gnomecvs'
|
||||
</verb>
|
||||
<item>Next, the first time the source tree is checked out, a cvs login
|
||||
is needed.
|
||||
@@ -314,8 +376,16 @@ This will ask you for a password. There is no password for cvs.gimp.org,
|
||||
so just enter a carriage return.
|
||||
<item>To get the tree and place it in a subdir of your current working directory, issue the command:
|
||||
<verb>
|
||||
cvs -z9 get gtk+
|
||||
cvs -z3 get gtk+
|
||||
</verb>
|
||||
|
||||
Note that with the GTK+ 1.1 tree, glib has been moved to a separate CVS
|
||||
module, so if you don't have glib installed you will need to get that
|
||||
as well:
|
||||
<verb>
|
||||
cvs -z3 get glib
|
||||
</verb>
|
||||
|
||||
</itemize>
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How can I contribute to GTK+?
|
||||
@@ -327,7 +397,7 @@ and then generate a patch in the form of a 'context diff'. This can be done
|
||||
using a command such as <tt/diff -ru <oldfile> <newfile>/.
|
||||
Then upload the patchfile to:
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/incoming
|
||||
ftp://ftp.gtk.org/incoming
|
||||
</verb>
|
||||
along with a README file. Make sure you follow the naming conventions or your
|
||||
patch will just be deleted! The filenames should be of this form:
|
||||
@@ -344,12 +414,12 @@ Example:
|
||||
gtk-gale-982701-0.patch.gz
|
||||
gtk-gale-982701-0.patch.README
|
||||
</verb>
|
||||
Once you upload <em>anything</em>, send the README to ftp-admin@gimp.org
|
||||
Once you upload <em>anything</em>, send the README to ftp-admin@gtk.org
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How do I know if my patch got applied, and if not, why not?
|
||||
<p>
|
||||
Uploaded patches will be moved to <tt>ftp://ftp.gimp.org/pub/gtk/patches</tt>
|
||||
Uploaded patches will be moved to <tt>ftp://ftp.gtk.org/pub/gtk/patches</tt>
|
||||
where one of the GTK+ development team will pick them up. If applied, they
|
||||
will be moved to <tt>/pub/gtk/patches/old</tt>.
|
||||
|
||||
@@ -374,13 +444,11 @@ gladly be included.
|
||||
Yes. There is
|
||||
<itemize>
|
||||
<item>a C++ wrapper for GTK+ called gtk--. You can find the home page at:
|
||||
<verb>
|
||||
http://www.cs.tut.fi/~p150650/gtk/gtk--.html
|
||||
</verb>
|
||||
The FTP site is:
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/pub/gtk/gtk--/
|
||||
</verb>
|
||||
<htmlurl url="http://www.cs.tut.fi/~p150650/gtk/gtk--.html"
|
||||
name="http://www.cs.tut.fi/~p150650/gtk/gtk--.html">.
|
||||
The FTP site is
|
||||
<htmlurl url="ftp://ftp.gtk.org/pub/gtk/gtk--"
|
||||
name="ftp://ftp.gtk.org/pub/gtk/gtk--">.
|
||||
<p>
|
||||
|
||||
<item>There are two Objective-c bindings currently in development:
|
||||
@@ -395,7 +463,7 @@ ftp://ftp.gimp.org/pub/gtk/gtk--/
|
||||
<item>If you are more inclined towards the
|
||||
<htmlurl url="http://www.gnustep.org/" name="GNUstep project">,
|
||||
you may want to check out GTKKit by
|
||||
<htmlurl url="mailto:helge@mdlink.de" name="Helge Heszlig">.
|
||||
<htmlurl url="mailto:helge@mdlink.de" name="Helge Heß">.
|
||||
The intention is to setup a GTK+ binding using the FoundationKit.
|
||||
GTKKit includes nicities like writing a XML-type template file to
|
||||
construct a GTK+ interface.
|
||||
@@ -403,14 +471,12 @@ ftp://ftp.gimp.org/pub/gtk/gtk--/
|
||||
</itemize>
|
||||
<p>
|
||||
<item>Perl bindings
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/pub/gtk/perl
|
||||
</verb>
|
||||
|
||||
<item>Guile bindings. The home page is at:
|
||||
<verb>
|
||||
http://www.ping.de/sites/zagadka/guile-gtk/
|
||||
</verb>
|
||||
<htmlurl url="ftp://ftp.gtk.org/pub/gtk/perl"
|
||||
name="ftp://ftp.gtk.org/pub/gtk/perl">
|
||||
<P>
|
||||
<item>Guile bindings. The home page is at
|
||||
<htmlurl url="http://www.ping.de/sites/zagadka/guile-gtk"
|
||||
name="http://www.ping.de/sites/zagadka/guile-gtk">.
|
||||
By the way, Guile is the GNU Project's implemention of R4RS Scheme (the
|
||||
standard). If you like Scheme, you may want to take a look at this.
|
||||
<p>
|
||||
@@ -420,24 +486,28 @@ standard). If you like Scheme, you may want to take a look at this.
|
||||
The basics of the system, including callbacks, work fine.
|
||||
|
||||
The current development is in
|
||||
http://www.ens-lyon.fr/~dmonniau/arcs/
|
||||
<htmlurl url="http://www.ens-lyon.fr/~dmonniau/arcs"
|
||||
name="http://www.ens-lyon.fr/~dmonniau/arcs">
|
||||
</quote>
|
||||
|
||||
<item>
|
||||
Several python-gtk interfaces have been done. python-gtk is at:
|
||||
<verb>
|
||||
http://www.acs.ucalgary.cs/~nashceme/python-gtk/
|
||||
</verb>
|
||||
If you try python-gtk and don't like it, there's also pygtk located at:
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/pub/gtk/python/
|
||||
</verb>
|
||||
|
||||
Several python bindings have been done:
|
||||
<p>
|
||||
<itemize>
|
||||
<item>pygtk is at
|
||||
<htmlurl url="http://www.daa.com.au/~james/pygtk"
|
||||
name="http://www.daa.com.au/~james/pygtk"> and
|
||||
<htmlurl url="ftp://ftp.gtk.org/pub/gtk/python"
|
||||
name="ftp://ftp.gtk.org/pub/gtk/python">
|
||||
<item>python-gtk is at
|
||||
<htmlurl url="http://www.ucalgary.ca/~nascheme/python-gtk"
|
||||
name="http://www.ucalgary.ca/~nascheme/python-gtk">
|
||||
</itemize>
|
||||
<p>
|
||||
<item>
|
||||
There's a OpenGL/Mesa widget available for GTK+. Grab it at:
|
||||
<verb>
|
||||
http://www.sakuranet.or.jp/~aozasa/shige/doc/comp/gtk/gtkGL/files-en.html
|
||||
</verb>
|
||||
There's a OpenGL/Mesa widget available for GTK+. Grab it at
|
||||
<htmlurl url="http://www.sakuranet.or.jp/~aozasa/shige/doc/comp/gtk/gtkGL/files-en.html"
|
||||
name="http://www.sakuranet.or.jp/~aozasa/shige/doc/comp/gtk/gtkGL/files-en.html">
|
||||
|
||||
</itemize>
|
||||
|
||||
@@ -449,9 +519,9 @@ http://www.sakuranet.or.jp/~aozasa/shige/doc/comp/gtk/gtkGL/files-en.html
|
||||
<p>
|
||||
So, after you have installed GTK+ there are a couple of things that can
|
||||
ease you into developing applications with it. There is the
|
||||
GTK+ Tutorial <htmlurl url="http://www.levien.com/~slow/gtk/tutorial"
|
||||
name="<http://www.levien.com/~slow/gtk/tutorial>">, which is undergoing development. This will introduce you
|
||||
to writing applications using C.
|
||||
GTK+ Tutorial <htmlurl url="http://www.gtk.org/tutorial/"
|
||||
name="<http://www.gtk.org/tutorial/>">, which is undergoing
|
||||
development. This will introduce you to writing applications using C.
|
||||
|
||||
The Tutorial doesn't (yet) contain information on all of the widgets
|
||||
that are in GTK+. For example code on how to use the basics of all the
|
||||
@@ -503,6 +573,7 @@ The GTK+ Tutorial lists the following widgets:
|
||||
| | `GtkCheckButton
|
||||
| | `GtkRadioButton
|
||||
| +GtkCList
|
||||
| `GtkCTree
|
||||
| +GtkFixed
|
||||
| +GtkList
|
||||
| +GtkMenuShell
|
||||
@@ -545,6 +616,58 @@ The GTK+ Tutorial lists the following widgets:
|
||||
`GtkVSeparator
|
||||
</verb>
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>Is GTK+ thread safe? How do I write multi-threaded GTK+ applications?
|
||||
<p>
|
||||
Although GTK+, like many X toolkits, isn't thread safe, this does
|
||||
not prohibit the development of multi-threaded applications with
|
||||
GTK+.
|
||||
|
||||
Rob Browning (rlb@cs.utexas.edu) describes threading techniques for
|
||||
use with GTK+ (slightly edited):
|
||||
|
||||
There are basically two main approaches, the first is simple, and the
|
||||
second complicated. In the first, you just make sure that all GTK+ (or
|
||||
X) interactions are handled by one, and
|
||||
only one, thread. Any other thread that wants to draw something has
|
||||
to somehow notify the "GTK+" thread, and let it handle the
|
||||
actual work.
|
||||
|
||||
The second approach allows you to call GTK+ (or X) functions from any
|
||||
thread, but it requires some careful synchronization. The
|
||||
basic idea is that you create an X protection mutex, and no one may
|
||||
make any X calls without first acquiring this mutex.
|
||||
|
||||
Note that this is a little effort, but it allows you to be
|
||||
potentially more efficient than a completely thread safe GTK+. You
|
||||
get to decide the granularity of the thread locking. You also have to
|
||||
make sure that the thread that calls gtk_main is holding the lock when
|
||||
it calls gtk_main.
|
||||
|
||||
The next thing to worry about is that since you were holding the
|
||||
global mutex when you entered gtk_main, all callbacks will also be
|
||||
holding it. This means that the callback must release it if it's
|
||||
going to call any other code that might reacquire it. Otherwise
|
||||
you'll get deadlock. Also, you must be holding the mutex when you
|
||||
finally return from the callback.
|
||||
|
||||
In order to allow threads other than the one calling gtk_main to
|
||||
get access to the mutex, we also need to register a work function
|
||||
with GTK that allows us to release the mutex periodically.
|
||||
|
||||
Why can't GTK+ be thread safe by default?
|
||||
|
||||
Complexity, overhead, and manpower. The proportion of threaded
|
||||
programs is still reasonably small, and getting thread safety right is
|
||||
both quite difficult and takes valuable time away from the main work
|
||||
of getting a good graphics library finished. It would be nice to have
|
||||
GTK+ thread safe "out of the box", but that's not practical right now,
|
||||
and it also might make GTK+ substantially less efficient if not handled
|
||||
carefully.
|
||||
|
||||
Regardless, it's especially not a priority since relatively good
|
||||
workarounds exist.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How can I prevent redrawing and resizing while I change multiple widgets?
|
||||
<p>
|
||||
@@ -553,7 +676,7 @@ code where you are changing a lot of stuff. This will result in much faster
|
||||
speed since it will prevent resizing of the entire widget hierarchy.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How do I catch a double click event in a list widget?
|
||||
<sect1>How do I catch a double click event (in a list widget, for example)?
|
||||
<p>
|
||||
Tim Janik wrote to gtk-list (slightly modified):
|
||||
|
||||
@@ -596,7 +719,15 @@ And connect the handler to your object:
|
||||
/* something else */
|
||||
}
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
and, Owen Taylor wrote:
|
||||
|
||||
Note that a single button press will be received beforehand, and
|
||||
if you are doing this for a button, you will therefore also get a
|
||||
"clicked" signal for the button. (This is going to be true for
|
||||
any toolkit, since computers aren't good at reading one's
|
||||
mind.)
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How do I find out about the selection of a GtkList?
|
||||
<p>
|
||||
@@ -752,7 +883,7 @@ determined it didn't look good and removed it.
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How can I define a separation line in a menu?
|
||||
<p>
|
||||
See the <htmlurl url="http://www.levien.com/~slow/gtk/"
|
||||
See the <htmlurl url="http://www.gtk.org/tutorial/"
|
||||
name="Tutorial"> for information on how to create menus.
|
||||
However, to create a separation line in a menu, just insert an
|
||||
empty menu item:
|
||||
@@ -772,6 +903,31 @@ Use something like the following:
|
||||
menu_path = gtk_menu_factory_find (factory, "<MyApp>/Help");
|
||||
gtk_menu_item_right_justify(menu_path->widget);
|
||||
</verb></tscreen>
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How do I make my window modal? / How do I make a single window active?
|
||||
<p>
|
||||
After you create your window, do gtk_grab_add(my_window). And after
|
||||
closing the window do gtk_grab_remove(my_window).
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>Why doesn't my widget (e.g. progressbar) update?
|
||||
<p>
|
||||
|
||||
You are probably doing all the changes within a function
|
||||
without returning control to gtk_main. Most drawing updates are only
|
||||
placed on a queue, which is processed within gtk_main. You can
|
||||
force the drawing queue to be processed using something like:
|
||||
|
||||
<tscreen><verb>
|
||||
while (gtk_events_pending())
|
||||
gtk_main_iteration();
|
||||
</verb></tscreen>
|
||||
|
||||
inside you're function that changes the widget.
|
||||
|
||||
What the above snippet does is run all pending events and high priority
|
||||
idle functions, then return immediately (the drawing is done in a
|
||||
high priority idle function).
|
||||
|
||||
<!-- ***************************************************************** -->
|
||||
<sect>About gdk
|
||||
|
||||
198
docs/gdk.sgml
Normal file
198
docs/gdk.sgml
Normal file
@@ -0,0 +1,198 @@
|
||||
<!doctype linuxdoc system>
|
||||
|
||||
<article>
|
||||
|
||||
<!-- Title information -->
|
||||
|
||||
<title>The GTK+ Drawing Kit Programming Manual
|
||||
<author>Shawn T. Amundson, Peter Mattis
|
||||
<date>July 26, 1998
|
||||
|
||||
<abstract>
|
||||
This document aims at teaching user how to effectively program in
|
||||
GDK, the GTK+ Drawing Kit, and to serve as a reference guide to
|
||||
more experienced GTK+ programmers. It is a work in progress.
|
||||
|
||||
<!-- Table of contents -->
|
||||
<toc>
|
||||
|
||||
<!-- Begin the document -->
|
||||
|
||||
<!-- ***************************************************************** -->
|
||||
<sect>Introduction
|
||||
|
||||
<p>
|
||||
GDK is designed as a wrapper library that lies on top of Xlib. It
|
||||
performs many common and desired operations for a programmer instead
|
||||
of the programmer having to explicitly ask for such functionality from
|
||||
Xlib directly. For example, GDK provides a common interface to both
|
||||
regular and shared memory XImage types. By doing so, an application
|
||||
can nearly transparently use the fastest image type available. GDK
|
||||
also provides routines for determining the best available color depth
|
||||
and the best available visual which is not always the default visual
|
||||
for a screen.
|
||||
|
||||
GDK is distributed and developed with GTK+, and is licensed under the
|
||||
GNU Library General Public Licence (LGPL).
|
||||
|
||||
<sect>Getting Started
|
||||
|
||||
<sect1>Initialization
|
||||
<p>
|
||||
Initialization of GDK is easy. Simply call gdk_init() passing
|
||||
in the argc and argv parameters.
|
||||
|
||||
<tscreen><verb>
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
/* Initialize GDK. */
|
||||
gdk_init (&argc, &argv);
|
||||
|
||||
/* Cleanup of GDK is done automatically when the program exits. */
|
||||
return 0;
|
||||
}
|
||||
</verb></tscreen>
|
||||
|
||||
Generally, GDK initialization is done by gtk_init() in GTK+. This means
|
||||
that when using GTK+, you do not need to directly call gdk_init().
|
||||
|
||||
<sect1>An Example using GDK with GTK+
|
||||
<p>
|
||||
This example demonstrates drawing a line using the foreground
|
||||
color of the GtkDrawArea widget it is drawn inside. The example
|
||||
will end when you click inside the window, which is filled by the
|
||||
GtkDrawingArea widget.
|
||||
|
||||
The line is drawn during the expose event so that when the window
|
||||
drawing is done whenever it is needed.
|
||||
|
||||
<tscreen><verb>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
/* The expose callback does the drawing of the line */
|
||||
int
|
||||
expose_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
|
||||
{
|
||||
GdkGC *gc;
|
||||
|
||||
printf("expose...\n");
|
||||
|
||||
|
||||
/* The GC is the Graphics Context. Here it is borrowed from the widget */
|
||||
gc = widget->style->fg_gc[GTK_STATE_NORMAL];
|
||||
|
||||
gdk_draw_line (widget->window, /* GDK Window of GtkDrawingArea widget */
|
||||
gc, /* Graphics Context */
|
||||
0, /* x1, left */
|
||||
0, /* y1, top */
|
||||
200, /* x2, right */
|
||||
200); /* y2, bottom */
|
||||
}
|
||||
|
||||
/* This quits GTK+ */
|
||||
void destroy (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *darea;
|
||||
int events;
|
||||
|
||||
/* This initializes both GTK+ and GDK */
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
/* Create a window */
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
GTK_SIGNAL_FUNC (destroy), NULL);
|
||||
|
||||
/* Create a drawing area widget. This widget actually is just a
|
||||
simple widget which provides us an GDK window to draw on and
|
||||
takes care of all the toolkit integration, like providing the
|
||||
ability to add it to the window with gtk_contianer_add() */
|
||||
darea = gtk_drawing_area_new ();
|
||||
gtk_container_add (GTK_CONTAINER (window), darea);
|
||||
|
||||
/* Set the width and height (arguments are in that order) */
|
||||
gtk_drawing_area_size (GTK_DRAWING_AREA (darea), 200, 200);
|
||||
|
||||
/* Drawing in the expose event is important to keep the
|
||||
draw line always on the GDK window */
|
||||
gtk_signal_connect (GTK_OBJECT (darea), "expose_event",
|
||||
GTK_SIGNAL_FUNC (expose_callback), NULL);
|
||||
|
||||
/* We get the events, then add in button press. If we did not
|
||||
do this, we would not be notified of button press events in
|
||||
the GtkDrawingArea widget */
|
||||
events = gtk_widget_get_events (darea);
|
||||
gtk_widget_set_events (darea, events | GDK_BUTTON_PRESS_MASK);
|
||||
|
||||
/* If we click on the darea, the application will exit */
|
||||
gtk_signal_connect_object (GTK_OBJECT (darea), "button_press_event",
|
||||
GTK_SIGNAL_FUNC (gtk_widget_destroy),
|
||||
GTK_OBJECT (window));
|
||||
|
||||
gtk_widget_show (darea);
|
||||
gtk_widget_show (window);
|
||||
|
||||
/* The GTK+ main idle loop */
|
||||
gtk_main();
|
||||
|
||||
/* Cleanup of GDK is done automatically when the program exits. */
|
||||
return 0;
|
||||
}
|
||||
</verb></tscreen>
|
||||
|
||||
<sect>The Graphics Context
|
||||
<p>
|
||||
The Graphics Context, or GC, defines how things should be drawn,
|
||||
including color, font, fill, tile, stipple, clipping mask, line
|
||||
width, line style, and join style.
|
||||
|
||||
<sect1>Color
|
||||
<p>
|
||||
Changing color is done by changing the forground or background color
|
||||
of the GC.
|
||||
|
||||
<sect>Drawing Commands
|
||||
<sect>Event Handling
|
||||
<sect>Understanding and Using Visuals
|
||||
<sect>Creating and Using New Windows
|
||||
<sect>Pixmaps
|
||||
<sect>Images
|
||||
<sect>Fonts
|
||||
<sect>
|
||||
|
||||
<sect>About this Document
|
||||
<sect1>History
|
||||
<P>
|
||||
This document was originially written by Peter Mattis and entitled
|
||||
"The General Drawing Kit". It was meant as a reference guide.
|
||||
|
||||
This version of the document has been renamed and is meant as a general
|
||||
programming guide.
|
||||
|
||||
<sect1>Copying
|
||||
<p>
|
||||
Copyright (c) 1996 Peter Mattis
|
||||
<p>
|
||||
Copyright (c) 1998 Shawn T. Amundson
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of this
|
||||
manual provided the copyright notice and this permission notice are
|
||||
preserved on all copies.
|
||||
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the
|
||||
entire resulting derived work is distributed under the terms of a
|
||||
permission notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions,
|
||||
except that this permission notice may be stated in a translation
|
||||
approved by Peter Mattis.
|
||||
|
||||
</article>
|
||||
455
docs/glib.texi
455
docs/glib.texi
@@ -1,455 +0,0 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@c %**start of header
|
||||
@setfilename glib.info
|
||||
@settitle GLIB
|
||||
@setchapternewpage odd
|
||||
|
||||
@set edition 1.0
|
||||
@set update-date 3 Feburary 1998
|
||||
@set update-month Feburary 1998
|
||||
@c %**end of header
|
||||
|
||||
@ifinfo
|
||||
This file documents GLIB, A library of useful routines for C programming
|
||||
|
||||
Copyright (C) 1998 Gregory A McLean
|
||||
|
||||
Permission is granted to make and distributed verbatim copies of this
|
||||
manual, provided the copyright notice and this permission notice are
|
||||
preserved on all copies.
|
||||
|
||||
@ignore
|
||||
Permission is granted to process this file throught TeX and print the
|
||||
results, provided the printed document carries copying permission notice
|
||||
identical to this one except for the removal of this paragraph (this
|
||||
paragraph not being relevant to the printed manual).
|
||||
|
||||
@end ignore
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the
|
||||
entire resulting derived work is distributed under the terms of a
|
||||
permission notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions,
|
||||
except that this permission notice may be stated in a translation
|
||||
approved by Gregory McLean.
|
||||
@end ifinfo
|
||||
|
||||
@titlepage
|
||||
@title GLIB, Useful routines for C programming
|
||||
@subtitle Version 1.0
|
||||
@subtitle @value{update-month}
|
||||
@author by Gregory McLean
|
||||
|
||||
@page
|
||||
@vskip 0pt plus 1filll
|
||||
Copyright @copyright{} 1998 Gregory McLean
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of this
|
||||
manual provided the copyright notice and this permission notice are
|
||||
preserved on all copies.
|
||||
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the
|
||||
entire resulting derived work is distributed under the terms of a
|
||||
permission notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions,
|
||||
except that this permission notice may be stated in a translation
|
||||
approved by Gregory McLean.
|
||||
@end titlepage
|
||||
|
||||
@dircategory Library of useful routines for 'C' programing
|
||||
@direntry
|
||||
* GLIB: (glib). useful routines for 'C' programming
|
||||
@end direntry
|
||||
|
||||
@node Top, Copying, (dir), (dir)
|
||||
@top useful routines for 'C' programming
|
||||
@ifinfo
|
||||
This is edition @value{edition} of the GLIB documentation,
|
||||
@w{@value{update-date}}.
|
||||
@end ifinfo
|
||||
|
||||
@menu
|
||||
* Copying:: Your rights.
|
||||
* Overview:: What is GLIB?
|
||||
* Doubly linked lists:: Doubly linked lists
|
||||
* Signly linked lists:: Singly linked lists
|
||||
* List allocators:: List Allocators
|
||||
* Hash tables:: Hash tables
|
||||
* Caches:: Cache handling
|
||||
* Trees:: Tree handling
|
||||
* Memory:: Memory handling
|
||||
* Timers:: Timer functions
|
||||
* Output:: Output handling
|
||||
* Utilities:: Utilitiy functions
|
||||
* Errors:: Error handling
|
||||
* String Chunks:: String Chunks
|
||||
* Strings:: String handling
|
||||
* Resizable arrays:: Resizeable arrays
|
||||
* GScanner:: Flexible lexical scanner
|
||||
* Miscellany:: Other stuff
|
||||
* Function Index:: Index of functions
|
||||
* Concept Index:: Index of concepts
|
||||
@end menu
|
||||
|
||||
@node Copying, Overview, Top, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Copying
|
||||
|
||||
@node Overview, Doubly linked lists, Copying, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter What is GLIB
|
||||
|
||||
@node Doubly linked lists, Signly linked lists, Overview, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Doubly linked lists
|
||||
|
||||
@subsection Functions
|
||||
|
||||
@deftypefun GList* g_list_alloc (void)
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_list_free (GList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_list_free_1 (GList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_append (GList *@var{list}, gpointer @var{data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_prepend (GList *@var{list}, gpointer @var{data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_insert (GList *@var{list}, gpointer @var{data}, gint @var{position})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_insert_sorted (GList *@var{list}, gpointer @var{data}, GCompareFunc @var{func})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_concat (GList *@var{list1}, GList *@var{list2})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_remove (GList *@var{list}, gpointer @var{data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_remove_link (GList *@var{list}, GList *@var{link})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_reverse (GList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_nth (GList *@var{list}, gint @var{n})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_find (GList *@var{list}, gpointer @var{data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_last (GList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GList* g_list_first (GList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gint g_list_length (GList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_list_foreach (GList *@var{list}, GFunc @var{func}, gpointer @var{user_data})
|
||||
@end deftypefun
|
||||
|
||||
@node Signly linked lists, List allocators, Doubly linked lists, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Signly linked lists
|
||||
|
||||
@subsection Functions
|
||||
@deftypefun GSList* g_slist_alloc (void)
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_slist_free (GSList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_slist_free_1 (GSList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_append (GSList *@var{list}, gpointer @var{data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_prepend (GSList *@var{list}, gpointer @var{data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_insert (GSList *@var{list}, gpointer @var{data}, gint @var{position})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_insert_sorted (GSList *@var{list}, gpointer @var{data}, GCompareFunc @var{func})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_concat (GSList *@var{list1}, GSList *@var{list2})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_remove (GSList *@var{list}, gpointer @var{data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_remove_link (GSList *@var{list}, GSList *@var{link})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_reverse (GSList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_nth (GSList *@var{list}, gint @var{n})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_find (GSList *@var{list}, gpointer @var{data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GSList* g_slist_last (GSList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gint g_slist_length (GSList *@var{list})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_slist_foreach (GSList *@var{list}, GFunc @var{func}, gpointer @var{user_data})
|
||||
@end deftypefun
|
||||
|
||||
@node List allocators, Hash tables, Signly linked lists, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter List allocators
|
||||
|
||||
@subsection Functions
|
||||
|
||||
@deftypefun GListAllocator* g_list_allocator_new (void)
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_list_allocator_free (GListAllocator *@var{allocator})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GListAllocator* g_slist_set_allocator (GListAllocator *@var{allocator})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GListAllocator* g_list_set_allocator (GListAllocator *@var{allocator})
|
||||
@end deftypefun
|
||||
|
||||
@node Hash tables, Caches, List allocators, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Hash tables
|
||||
|
||||
@subsection Functions
|
||||
|
||||
@deftypefun GHashTable* g_hash_table_new (GHashFunc @var{hash_func}, GCompareFunc @var{key_compare_func})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_hash_table_destroy (GHashTable *@var{hash_table})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_hash_table_insert (GHashTable *@var{hash_table}, gpointer @var{key}, gpointer @var{value})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_hash_table_remove (GHashTable *@var{hash_table}, gpointer @var{key})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gpointer g_hash_table_lookup (GHashTable *@var{hash_table}, gpointer @var{key})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_hash_table_freeze (GHashTable *@var{hash_table})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_hash_table_thaw (GHashTable *@var{hash_table})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_hash_table_foreach (GHashTable *@var{hash_table}, GHFunc @var{func}, gpointer @var{user_data})
|
||||
@end deftypefun
|
||||
|
||||
@node Caches, Trees, Hash tables, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Cache handling
|
||||
|
||||
@subsection Functions
|
||||
|
||||
@deftypefun GCache* g_cache_new (GCacheNewFunc @var{value_new_func}, GCacheDestroyFunc @var{value_destroy_func}, GCacheDupFunc @var{key_dup_func}, GCacheDestroyFunc @var{key_destroy_func}, GHashFunc @var{hash_key_func}, GHashFunc @var{hash_value_func}, GCompareFunc @var{key_compare_func})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_cache_destroy (GCache *@var{cache})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gpointer g_cache_insert (GCache *@var{cache}, gpointer @var{key})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_cache_remove (GCache *@var{cache}, gpointer @var{key})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_cache_key_foreach (GCache *@var{cache}, GHFunc @var{func}, gpointer @var{user_data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_cache_value_foreach (GCache *@var{cache}, GHFunc @var{func}, gpointer @var{user_data})
|
||||
@end deftypefun
|
||||
|
||||
@node Trees, Memory, Caches, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Tree handling
|
||||
|
||||
@subsection Functions
|
||||
|
||||
@deftypefun GTree* g_tree_new (GCompareFunc @var{key_compare_func})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_tree_destroy (GTree *@var{tree})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_tree_remove (GTree *@var{tree}, gpointer @var{key}, gpointer @var{value})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gpointer g_tree_lookup (GTree *@var{tree}, gpointer @var{key})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_tree_traverse (GTree *@var{tree}, GTraverseFunc @var{traverse_func}, GTraverseType @var{traverse_type}, gpointer @var{data}
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gpointer g_tree_search (GTree *@var{tree}, GSearchFunc @var{search_func}, gpointer @var{data})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gint g_tree_height (GTree *@var{tree})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gint g_tree_nnodes (GTree *@var{tree})
|
||||
@end deftypefun
|
||||
|
||||
@node Memory, Timers, Trees, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Memory handling
|
||||
|
||||
@subsection Functions
|
||||
|
||||
@deftypefun gpointer g_malloc (gulong @var{size})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gpointer g_malloc0 (gulong @var{size})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gpointer g_realloc (gpointer @var{mem}, gulong @var{size})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_mem_profile (void)
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_mem_check (gpointer @var{mem})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun GMemChunk* g_mem_chunk_new (gchar *@var{name}, gint @var{atom_size}, gulong @var{area_size}, gint @var{type})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_mem_chunk_destroy (GMemChunk *@var{mem_chunk})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gpointer g_mem_chunk_alloc (GMemChunk *@var{mem_chunk})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_mem_chunk_free (GMemChunk *@var{mem_chunk}, gpointer @var{mem})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_mem_chunk_clean (GMemChunk *@var{mem_chunk})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_mem_chunk_reset (GMemChunk *@var{mem_chunk})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_mem_chunk_print (GMemChunk *@var{mem_chunk})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_mem_chunk_info (void)
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_blow_chunks (void)
|
||||
Not what you might be thinking, @code{g_blow_chunks()} simply compresses all
|
||||
the chunks. This operation consists of freeing every memory area that should
|
||||
be freed (but which we haven't gotten around to doing yet).
|
||||
@end deftypefun
|
||||
|
||||
@node Timers, Output, Memory, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Timer functions
|
||||
|
||||
@subsection Functions
|
||||
|
||||
@deftypefun GTimer* g_timer_new (void)
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_timer_destroy (GTimer *@var{timer})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_timer_start (GTimer *@var{timer})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_timer_stop (GTimer *@var{timer})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_timer_reset (GTimer *@var{timer})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun gdouble g_timer_elapsed (GTimer *@var{timer}, gulong *@var{microseconds})
|
||||
@end deftypefun
|
||||
|
||||
@node Output, Utilities, Timers, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Output functions
|
||||
|
||||
@subsection Functions
|
||||
|
||||
@deftypefun void g_error (gchar *@var{format}, @dots{})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_warning (gchar *@var{format}, @dots{})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_message (gchar *@var{format}, @dots{})
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void g_print (gchar *@var{format}, @dots{})
|
||||
@end deftypefun
|
||||
|
||||
@node Utilities, Errors, Output, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Utility functions
|
||||
|
||||
@node Errors, String Chunks, Utilities, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Error handling
|
||||
|
||||
@node String Chunks, Strings, Errors, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter String chunks
|
||||
|
||||
@node Strings, Resizable arrays, String Chunks, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter String handling
|
||||
|
||||
@node Resizable arrays, GScanner, Strings, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Resizable arrays
|
||||
|
||||
@node GScanner, Miscellany, Resizable arrays, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Flexible lexical scanner
|
||||
|
||||
@node Miscellany, Function Index, GScanner, Top
|
||||
@comment node-name, next, previous, up
|
||||
@chapter Other stuff
|
||||
|
||||
@node Function Index, Concept Index, Miscellany, Top
|
||||
@comment node-name, next, previous, up
|
||||
@unnumbered Function Index
|
||||
|
||||
@printindex fn
|
||||
|
||||
@node Concept Index, , Function Index, Top
|
||||
@comment node-name, next, previous, up
|
||||
@unnumbered Concept Index
|
||||
|
||||
@printindex cp
|
||||
|
||||
@summarycontents
|
||||
@contents
|
||||
@bye
|
||||
|
||||
49
docs/gtk-config.1
Normal file
49
docs/gtk-config.1
Normal file
@@ -0,0 +1,49 @@
|
||||
.TH GTK+ 1 "25 October 1998" Version 1.1.7
|
||||
.SH NAME
|
||||
gtk-config - script to get information about the installed version of GTK+
|
||||
.SH SYNOPSIS
|
||||
.B gtk-config
|
||||
[\-\-prefix\fI[=DIR]\fP] [\-\-exec\-prefix\fI[=DIR]\fP] [\-\-version] [\-\-libs] [\-\-cflags]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
\fIgtk-config\fP is a tool that is used to configure to determine
|
||||
the compiler and linker flags that should be used to compile
|
||||
and link programs that use \fIGTK+\fP. It is also used internally
|
||||
to the .m4 macros for GNU autoconf that are included with \fIGTK+\fP.
|
||||
.
|
||||
.SH OPTIONS
|
||||
.l
|
||||
\fIgtk-config\fP accepts the following options:
|
||||
.TP 8
|
||||
.B \-\-version
|
||||
Print the currently installed version of \fIGTK+\fP on the standard output.
|
||||
.TP 8
|
||||
.B \-\-libs
|
||||
Print the linker flags that are necessary to link a \fIGTK+\fP program.
|
||||
.TP 8
|
||||
.B \-\-cflags
|
||||
Print the compiler flags that are necessary to compile a \fIGTK+\fP program.
|
||||
.TP 8
|
||||
.B \-\-prefix=PREFIX
|
||||
If specified, use PREFIX instead of the installation prefix that \fIGTK+\fP
|
||||
was built with when computing the output for the \-\-cflags and
|
||||
\-\-libs options. This option is also used for the exec prefix
|
||||
if \-\-exec\-prefix was not specified. This option must be specified
|
||||
before any \-\-libs or \-\-cflags options.
|
||||
.TP 8
|
||||
.B \-\-exec\-prefix=PREFIX
|
||||
If specified, use PREFIX instead of the installation exec prefix that
|
||||
\fIGTK+\fP was built with when computing the output for the \-\-cflags
|
||||
and \-\-libs options. This option must be specified before any
|
||||
\-\-libs or \-\-cflags options.
|
||||
.SH SEE ALSO
|
||||
.BR gimp (1),
|
||||
.BR gimptool (1)
|
||||
.SH COPYRIGHT
|
||||
Copyright \(co 1998 Owen Taylor
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose and without fee is hereby granted,
|
||||
provided that the above copyright notice appear in all copies and that
|
||||
both that copyright notice and this permission notice appear in
|
||||
supporting documentation.
|
||||
228
docs/gtk-config.txt
Normal file
228
docs/gtk-config.txt
Normal file
@@ -0,0 +1,228 @@
|
||||
CONFIGURING PACKAGES TO WORK WITH GTK
|
||||
-------------------------------------
|
||||
|
||||
Compiling a program succesfully against the GTK, GDK, and GLIB
|
||||
libraries can require a large number of command line options
|
||||
to your compiler and linker that are hard to guess correctly.
|
||||
The additional libraries required may, for example, depend on the
|
||||
manner which GTK was configured
|
||||
|
||||
Several tools are included in this package to make process
|
||||
easier.
|
||||
|
||||
First, there is the shell script 'gtk-config' (installed in
|
||||
$exec_prefix/bin):
|
||||
|
||||
Invoking gtk-config
|
||||
-------------------
|
||||
|
||||
gtk-config takes the following flags:
|
||||
|
||||
--version
|
||||
Prints out the version of GTK installed
|
||||
|
||||
--cflags
|
||||
Prints '-I' flags pointing to the installed header files.
|
||||
|
||||
--libs
|
||||
Prints out the linker flags necessary to link a program against GTK
|
||||
|
||||
--prefix[=PREFIX]
|
||||
If PREFIX is specified, overrides the configured value of $prefix.
|
||||
(And of exec-prefix, unless --exec-prefix is also specified)
|
||||
Otherwise, prints out the configured value of $prefix
|
||||
|
||||
--exec-prefix[=PREFIX]
|
||||
If PREFIX is specified, overrides the configured value of $exec_prefix.
|
||||
Otherwise, prints out the configured value of $exec_prefix
|
||||
|
||||
|
||||
|
||||
Example of using gtk-config
|
||||
---------------------------
|
||||
|
||||
Typically, gtk-config will be used within a configure script,
|
||||
as described below. It, however, can also be used directly
|
||||
from the command line to compile a simple program. For example:
|
||||
|
||||
cc -o simple `gtk-config --cflags` simple.c `gtk-config --libs`
|
||||
|
||||
This command line might expand to (for example):
|
||||
|
||||
cc -o simple -I/usr/local/lib/glib/include -I/usr/local/include \
|
||||
-I/usr/X11R6/include simple.c -L/usr/local/lib -L/usr/X11R6/lib \
|
||||
-lgtk -lgdk -lglib -lXi -lXext -lX11 -lm
|
||||
|
||||
Not only is the form using gtk-config easier to type, it will
|
||||
work on any system, no matter how GTK was configured.
|
||||
|
||||
|
||||
AM_PATH_GTK
|
||||
-----------
|
||||
|
||||
For packages configured using GNU automake, GTK also provides
|
||||
a macro to automate the process of running GTK.
|
||||
|
||||
AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
|
||||
|
||||
This macro:
|
||||
|
||||
* Determines the location of GTK using gtk-config, which is either
|
||||
found in the user's path, or from the environment variable
|
||||
GTK_CONFIG
|
||||
|
||||
* Tests the installed libraries to make sure that there version
|
||||
is later than MINIMUM-VERSION. (A default version will be used
|
||||
if not specified)
|
||||
|
||||
* If the required version was found, sets the GTK_CFLAGS variable to
|
||||
the output of `gtk-config --cflags` and the GTK_LIBS variable to
|
||||
the output of `gtk-config --libs`, and calls AC_SUBST() for these
|
||||
variables so they can be used in generated makefiles, and then
|
||||
executes ACTION-IF-FOUND.
|
||||
|
||||
* If the required version was not found, sets GTK_CFLAGS and GTK_LIBS
|
||||
to empty strings, and executes ACTION-IF-NOT-FOUND.
|
||||
|
||||
This macro is in file 'gtk.m4' which is installed in $datadir/aclocal.
|
||||
Note that if automake was installed with a different --prefix than
|
||||
GTK, you will either have to manually move gtk.m4 to automake's
|
||||
$datadir/aclocal, or give aclocal the -I option when running it.
|
||||
|
||||
|
||||
Configuring a package that uses AM_PATH_GTK
|
||||
-------------------------------------------
|
||||
|
||||
Simply make sure that gtk-config is in your path, and run
|
||||
the configure script.
|
||||
|
||||
Notes:
|
||||
|
||||
* The directory where the GTK libraries are installed needs
|
||||
to be found by your system's dynamic linker.
|
||||
|
||||
This is generally done by
|
||||
|
||||
editing /etc/ld.so.conf and running ldconfig
|
||||
|
||||
Or by:
|
||||
|
||||
setting the environment variable LD_LIBRARY_PATH,
|
||||
|
||||
or, as a last resort,
|
||||
|
||||
Giving a -R or -rpath flag (depending on your linker) when
|
||||
running configure, for instance:
|
||||
|
||||
LDFLAGS=-R/usr/home/owen/lib ./configure
|
||||
|
||||
* You can also specify a gtk-config not in your path by
|
||||
setting the GTK_CONFIG environment variable to the
|
||||
name of the executable
|
||||
|
||||
* If you move the GTK package from its installed location,
|
||||
you will need either need to modify gtk-config script
|
||||
manually to point to the new location or rebuild GTK.
|
||||
|
||||
Advanced note:
|
||||
|
||||
* configure flags
|
||||
|
||||
--with-gtk-prefix=PREFIX
|
||||
--with-gtk-exec-prefix=PREFIX
|
||||
|
||||
are provided to override the prefix and exec-prefix that were stored
|
||||
in the gtk-config shell script by GTK's configure. You are generally
|
||||
better off configuring GTK with the right path to begin with.
|
||||
|
||||
Example of a package using AM_PATH_GTK
|
||||
--------------------------------------
|
||||
|
||||
The following shows how to build a simple package using automake
|
||||
and the AM_PATH_GTK macro. The program used here is the testinput.c
|
||||
|
||||
You should first read the introductory portions of the automake
|
||||
Manual, if you are not already familiar with it.
|
||||
|
||||
Two files are needed, 'configure.in', which is used to build the
|
||||
configure script:
|
||||
|
||||
==configure.in===
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(testinput.c)
|
||||
|
||||
AM_INIT_AUTOMAKE(testinput.c, 1.0.0)
|
||||
|
||||
AC_PROG_CC
|
||||
AM_PROG_CC_STDC
|
||||
AC_PROG_INSTALL
|
||||
|
||||
AM_PATH_GTK(0.99.5,
|
||||
[LIBS="$LIBS $GTK_LIBS"
|
||||
CFLAGS="$CFLAGS $GTK_CFLAGS"],
|
||||
AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?))
|
||||
|
||||
AC_OUTPUT(Makefile)
|
||||
=================
|
||||
|
||||
The only command in this which is not standard for automake
|
||||
is the AM_PATH_GTK() macro.
|
||||
|
||||
That command does the following:
|
||||
|
||||
If a GTK version greater than 0.99.5 is found, adds $GTK_LIBS to
|
||||
$LIBS and $GTK_CFLAGS to $CFLAGS. Otherwise, dies with the error
|
||||
message "Cannot find GTK: Is gtk-config in path?"
|
||||
|
||||
And the 'Makefile.am', which will be used to build the Makefile.
|
||||
|
||||
== Makefile.am ==
|
||||
bin_PROGRAMS = testinput
|
||||
testinput_SOURCES = testinput.c
|
||||
=================
|
||||
|
||||
This Makefile.am, says that we are building a single executable,
|
||||
from a single sourcefile 'testinput.c'. Since every program
|
||||
we are building uses GTK we simply added the GTK options
|
||||
to $LIBS and $CFLAGS, but in other circumstances, we might
|
||||
want to specify them on a per-program basis: for instance by
|
||||
adding the lines:
|
||||
|
||||
testinput_LDADD = $(GTK_LIBS)
|
||||
INCLUDES = $(GTK_CFLAGS)
|
||||
|
||||
to the Makefile.am.
|
||||
|
||||
To try this example out, create a new directory, add the two
|
||||
files above two it, and copy the testinput.c file from
|
||||
the gtk/ subdirectory to the new directory. Edit the line:
|
||||
|
||||
#include "gtk.h"
|
||||
|
||||
in testgtk.c, to read:
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
|
||||
Now execute the following commands:
|
||||
|
||||
automake --add-missing
|
||||
aclocal
|
||||
autoconf
|
||||
|
||||
You now have a package that can be built in the normal fashion
|
||||
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
|
||||
|
||||
Notes:
|
||||
|
||||
* If you are converting a package that used a pre-1.0 version of
|
||||
GTK, you should remove the autoconf tests for X. The results
|
||||
of these tests are included in gtk-config and will be added
|
||||
to GTK_LIBS and GTK_CFLAGS by the AM_PATH_GTK macro.
|
||||
|
||||
Owen Taylor
|
||||
14 Mar 1997
|
||||
807
docs/gtk.texi
807
docs/gtk.texi
File diff suppressed because it is too large
Load Diff
15540
docs/gtk_tut.sgml
Normal file
15540
docs/gtk_tut.sgml
Normal file
File diff suppressed because it is too large
Load Diff
8600
docs/gtk_tut_fr.sgml
Normal file
8600
docs/gtk_tut_fr.sgml
Normal file
File diff suppressed because it is too large
Load Diff
10090
docs/gtk_tut_it.sgml
Normal file
10090
docs/gtk_tut_it.sgml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
docs/gtk_tut_packbox1.gif
Normal file
BIN
docs/gtk_tut_packbox1.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.6 KiB |
BIN
docs/gtk_tut_packbox2.gif
Normal file
BIN
docs/gtk_tut_packbox2.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.9 KiB |
BIN
docs/gtk_tut_table.gif
Normal file
BIN
docs/gtk_tut_table.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl -w
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Stupid script to fix look of html files created with sgml2html...
|
||||
|
||||
@@ -8,3 +8,4 @@ foreach (@ARGV) {
|
||||
system("sed -e 's/<BODY>/<BODY BGCOLOR=\"#FFFFFF\">/g' -e 's/<HR>/<HR NOSHADE>/g' $_.orig > $_");
|
||||
unlink("$_.orig");
|
||||
}
|
||||
|
||||
352
docs/gtkfaq.sgml
352
docs/gtkfaq.sgml
@@ -8,7 +8,9 @@
|
||||
|
||||
<!-- NOTE: Use only one author tag, otherwise sgml2txt barfs - TRG -->
|
||||
<author>Nathan Froyd, Tony Gale, Shawn T. Amundson.
|
||||
<date>March 9th 1998
|
||||
|
||||
<date>July 6th 1998
|
||||
|
||||
<abstract>
|
||||
This document is intended to answer questions that are likely to be
|
||||
frequently asked by programmers using GTK+ or people who are just
|
||||
@@ -79,19 +81,17 @@ GNU, though."
|
||||
<sect1>Where is the documentation for GTK+?
|
||||
<p>
|
||||
In the GTK+ distribution's doc/ directory you will find the
|
||||
reference material for both GTK and GDK, and this FAQ.
|
||||
reference material for both GTK and GDK, this FAQ and the
|
||||
GTK Tutorial.
|
||||
|
||||
There is also a GTK+ Tutorial which can be found at
|
||||
<htmlurl url="http://www.levien.com/~slow/gtk/"
|
||||
name="http://www.levien.com/~slow/gtk/">.
|
||||
In addition, you can find links to HTML versions of these documents
|
||||
by going to
|
||||
<htmlurl url="http://www.gtk.org/"
|
||||
name="http://www.gtk.org/">.
|
||||
|
||||
The Tutorial and FAQ can also be found at
|
||||
<htmlurl url="http://www.geocities.com/ResearchTriangle/Lab/4299/"
|
||||
name="http://www.geocities.com/ResearchTriangle/Lab/4299/">.
|
||||
|
||||
In addition, you can find links to all of these documents by going to
|
||||
<htmlurl url="http://www.gimp.org/gtk/docs"
|
||||
name="http://www.gimp.org/gtk/docs">.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>Is there a mailing list (or mailing list archive) for GTK+?
|
||||
@@ -110,7 +110,7 @@ email message to <htmlurl url="mailto:gtk-list-request@redhat.com"
|
||||
name="gtk-list-request@redhat.com">
|
||||
with <em>subscribe</em> in the <bf>subject</bf>.
|
||||
<p>
|
||||
A searchable archive of the mailing list can be found at <htmlurl url="http://www.redhat.com/linux-info/gtk/gtk-list/index.html" name="http://www.redhat.com/linux-info/gtk/gtk-list/index.html">
|
||||
A searchable archive of the mailing list can be found at <htmlurl url="http://archive.redhat.com/gtk-list" name="http://archive.redhat.com/gtk-list">
|
||||
</itemize>
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>The gtk-list hasn't had any traffic for days, is it dead?
|
||||
@@ -165,6 +165,23 @@ name="http://www.gnome.org">)
|
||||
is using GTK+ to build a free desktop for Linux. Many more programs can be found
|
||||
there.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>I'm looking for an application to write in GTK+. How about an IRC client?
|
||||
<p>
|
||||
|
||||
Ask on gtk-list for suggestions. There are at least four IRC
|
||||
clients already under development.
|
||||
|
||||
<itemize>
|
||||
<item>girc. (Included with GNOME)
|
||||
<item>Bezerk (<htmlurl url="http://www.gtk.org/~trog/"
|
||||
name="http://www.gtk.org/~trog/">)
|
||||
<item>gsirc. (Location?)
|
||||
<item>Gnirc. (<htmlurl url="http://www.imaginet.fr/~dramboz/gnirc"
|
||||
name="http://www.imaginet.fr/~dramboz/gnirc">)
|
||||
</itemize>
|
||||
|
||||
|
||||
<!-- ***************************************************************** -->
|
||||
<sect>How to find, configure, install, and troubleshoot GTK+
|
||||
|
||||
@@ -181,9 +198,9 @@ and associated libraries on your system.
|
||||
<p>
|
||||
The canonical site is:
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/pub/gtk
|
||||
ftp://ftp.gtk.org/pub/gtk
|
||||
</verb>
|
||||
Of course, any mirrors of ftp.gimp.org should have the latest version, too.
|
||||
Of course, any mirrors of ftp.gtk.org should have the latest version, too.
|
||||
|
||||
<sect1>How do I configure/compile GTK+?
|
||||
<p>
|
||||
@@ -204,22 +221,37 @@ handle the automatically generated Makefiles.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
|
||||
<sect1>I've compiled and installed GTK+, but I can't get any programs to link
|
||||
with it!
|
||||
<sect1>I've compiled and installed GTK+, but I can't get any programs to link with it!
|
||||
<p>
|
||||
This problem is most often encountered when the GTK+ libraries can't be
|
||||
found or are the wrong version. Generally, the compiler will complain about an
|
||||
'unresolved symbol'. There are two things you need to check:
|
||||
<itemize>
|
||||
<item>Make sure that the libraries can be found. You want to edit
|
||||
/etc/ld.so.conf to include /usr/local/lib (or whereever you installed GTK+),
|
||||
/etc/ld.so.conf to include the directories which contain the GTK libraries,
|
||||
so it looks something like:
|
||||
<verb>
|
||||
/usr/X11R6/lib
|
||||
/usr/local/lib
|
||||
</verb>
|
||||
Then you need to run /sbin/ldconfig as root.
|
||||
<p>
|
||||
Then you need to run /sbin/ldconfig as root. You can find what directory
|
||||
GTK is in using
|
||||
<verb>
|
||||
gtk-config --libs
|
||||
</verb>
|
||||
|
||||
If your system doesn't use ld.so to find libraries (such as Solaris), then
|
||||
you will have to use the LD_LIBRARY_PATH environment variable (or compile
|
||||
the path into your program, which I'm not going to cover here). So, with a
|
||||
Bourne type shell you can do (if your GTK libraries are in /usr/local/lib):
|
||||
<verb>
|
||||
export LD_LIBRARY_PATH=/usr/local/lib
|
||||
</verb>
|
||||
and in a csh, you can do:
|
||||
<verb>
|
||||
setenv LD_LIBRARY_PATH /usr/local/lib
|
||||
</verb>
|
||||
|
||||
<item>Make sure the linker is finding the correct set of libraries. If you
|
||||
have a Linux distribution that installs GTK+ (e.g. RedHat 5.0) then this
|
||||
older version may be used. Now (assuming you have a RedHat
|
||||
@@ -235,50 +267,80 @@ the libraries libgtk, libgdk, libglib, or libgck. If they do exist, remove them
|
||||
and reinstall gtk+.
|
||||
</itemize>
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>When compiling programs with GTK+, I get compiler error messages about not being able to find <tt/"glibconfig.h"/.
|
||||
|
||||
<p> The header file "glibconfig.h" was moved to the directory
|
||||
$exec_prefix/lib/glib/include/. $exec_prefix is the
|
||||
directory that was specified by giving the --exec-prefix
|
||||
flags to ./configure when compiling GTK+. It defaults to
|
||||
$prefix, (specified with --prefix), which in turn defaults
|
||||
to /usr/local/.
|
||||
|
||||
This was done because "glibconfig.h" includes architecture
|
||||
dependent information, and the rest of the include files
|
||||
are put in $prefix/include, which can be shared between different
|
||||
architectures.
|
||||
|
||||
GTK+ includes a shell script, <tt/gtk-config/, that
|
||||
makes it easy to find out the correct include paths.
|
||||
The GTK+ tutorial includes an example of using <tt/gtk-config/
|
||||
for simple compilation from the command line. For information
|
||||
about more complicated configuration, see the file
|
||||
docs/gtk-config.txt in the GTK+ distribution.
|
||||
|
||||
If you are trying to compile an old program, you may
|
||||
be able to work around the problem by configuring it
|
||||
with a command line like:
|
||||
|
||||
<tscreen><verb>
|
||||
CPPFLAGS="-I/usr/local/include/glib/include" ./configure
|
||||
</verb></tscreen>
|
||||
|
||||
for Bourne-compatible shells like bash, or for csh variants:
|
||||
|
||||
<tscreen><verb>
|
||||
setenv CPPFLAGS "-I/usr/local/include/glib/include"
|
||||
./configure
|
||||
</verb></tscreen>
|
||||
|
||||
(Substitute the appropriate value of $exec_prefix for /usr/local.)
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>When installing The GIMP, configure reports that it can't find GTK.
|
||||
<p>
|
||||
There are several common reasons for this:
|
||||
<itemize>
|
||||
<item>You have an old version of GTK installed somewhere. RedHat 5.0, for
|
||||
example, installs an older copy of GTK that will not work with the latest
|
||||
versions of GIMP. You should remove this old copy, but note that in the case
|
||||
of RedHat 5.0 this will break the <tt/control-panel/ applications.
|
||||
<P>
|
||||
<item><tt/gtk-config/ (or another component of GTK) isn't in your path, or
|
||||
there is an old version on your system. Type:
|
||||
<verb>
|
||||
gtk-config --version
|
||||
</verb>
|
||||
to check for both of these. This should return a value of at least 0.99.8
|
||||
for things to work properly with GIMP 0.99.23. If it returns a value
|
||||
different from what you expect, then you have an old version of GTK on
|
||||
your system.
|
||||
<P>
|
||||
<item>The ./configure script can't find the GTK libraries. As ./configure
|
||||
compiles various test programs, it needs to be able to find the GTK
|
||||
libraries. See the question above for help on this.
|
||||
</itemize>
|
||||
<p>
|
||||
If none of the above help, then have a look in config.log, which is
|
||||
generated by ./configure as it runs. At the bottom will be the last
|
||||
action it took before failing. If it is a section of source code, copy
|
||||
the source code to a file and compile it with the line just above it in
|
||||
config.log. If the compilation is successful, try executing it.
|
||||
|
||||
<!-- ***************************************************************** -->
|
||||
<sect>Development of GTK+
|
||||
<!-- ***************************************************************** -->
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>When will it reach version 1.0?
|
||||
<p>
|
||||
The file 'TODO' in the gtk+ distribution lists the things that need to be done
|
||||
before version 1.0 is repleased. Not including bugs, this includes:
|
||||
|
||||
<itemize>
|
||||
<item>New Features
|
||||
<itemize>
|
||||
<item>gdk_expose_compress: ala-Xt, this would really help for opaque moves and
|
||||
such
|
||||
</itemize>
|
||||
<p>
|
||||
|
||||
<item>Widgets
|
||||
<itemize>
|
||||
<item>Column-list (Jay Painter)
|
||||
<item>Text widget (needs to be finished)
|
||||
<item>Entry should have a password mode (and it should show stars
|
||||
for user feedback)
|
||||
</itemize>
|
||||
<p>
|
||||
|
||||
<item>Drag-and-Drop (DND)
|
||||
<itemize>
|
||||
<item> It seems to be having problems again. The way DND data types are set in
|
||||
GtkWidget really needs to be fixed. This is pretty high on my priority
|
||||
list, and I'll get to it as soon as the column list widget is done. The
|
||||
correct way dnd data needs to be set is to have a additional keyed data
|
||||
type with GtkWidget, which is applied to the widget's window upon realize.
|
||||
There also needs to be a way to set dnd-data on widget windows which are
|
||||
not the main window (for widgets that create more than one window).
|
||||
-- Jay Painter
|
||||
<item> DnD seems to work for me, but yes, there needs to be some sort of
|
||||
gtk_widget layer that makes it easier... Also, adding support for drop
|
||||
zones might be nice.
|
||||
-- Elliot
|
||||
</itemize>
|
||||
</itemize>
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>Whats this CVS thing that everyone keeps talking about, and how do I access it?
|
||||
<p>
|
||||
@@ -303,7 +365,7 @@ using the following steps:
|
||||
<itemize>
|
||||
<item> In a bourne shell descendant (e.g. bash) type:
|
||||
<verb>
|
||||
export CVSROOT=':pserver:anonymous@cvs.gimp.org:/debian/home/gnomecvs'
|
||||
export CVSROOT=':pserver:anonymous@anoncvs.gimp.org:/debian/home/gnomecvs'
|
||||
</verb>
|
||||
<item>Next, the first time the source tree is checked out, a cvs login
|
||||
is needed.
|
||||
@@ -314,8 +376,16 @@ This will ask you for a password. There is no password for cvs.gimp.org,
|
||||
so just enter a carriage return.
|
||||
<item>To get the tree and place it in a subdir of your current working directory, issue the command:
|
||||
<verb>
|
||||
cvs -z9 get gtk+
|
||||
cvs -z3 get gtk+
|
||||
</verb>
|
||||
|
||||
Note that with the GTK+ 1.1 tree, glib has been moved to a separate CVS
|
||||
module, so if you don't have glib installed you will need to get that
|
||||
as well:
|
||||
<verb>
|
||||
cvs -z3 get glib
|
||||
</verb>
|
||||
|
||||
</itemize>
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How can I contribute to GTK+?
|
||||
@@ -327,7 +397,7 @@ and then generate a patch in the form of a 'context diff'. This can be done
|
||||
using a command such as <tt/diff -ru <oldfile> <newfile>/.
|
||||
Then upload the patchfile to:
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/incoming
|
||||
ftp://ftp.gtk.org/incoming
|
||||
</verb>
|
||||
along with a README file. Make sure you follow the naming conventions or your
|
||||
patch will just be deleted! The filenames should be of this form:
|
||||
@@ -344,12 +414,12 @@ Example:
|
||||
gtk-gale-982701-0.patch.gz
|
||||
gtk-gale-982701-0.patch.README
|
||||
</verb>
|
||||
Once you upload <em>anything</em>, send the README to ftp-admin@gimp.org
|
||||
Once you upload <em>anything</em>, send the README to ftp-admin@gtk.org
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How do I know if my patch got applied, and if not, why not?
|
||||
<p>
|
||||
Uploaded patches will be moved to <tt>ftp://ftp.gimp.org/pub/gtk/patches</tt>
|
||||
Uploaded patches will be moved to <tt>ftp://ftp.gtk.org/pub/gtk/patches</tt>
|
||||
where one of the GTK+ development team will pick them up. If applied, they
|
||||
will be moved to <tt>/pub/gtk/patches/old</tt>.
|
||||
|
||||
@@ -374,13 +444,11 @@ gladly be included.
|
||||
Yes. There is
|
||||
<itemize>
|
||||
<item>a C++ wrapper for GTK+ called gtk--. You can find the home page at:
|
||||
<verb>
|
||||
http://www.cs.tut.fi/~p150650/gtk/gtk--.html
|
||||
</verb>
|
||||
The FTP site is:
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/pub/gtk/gtk--/
|
||||
</verb>
|
||||
<htmlurl url="http://www.cs.tut.fi/~p150650/gtk/gtk--.html"
|
||||
name="http://www.cs.tut.fi/~p150650/gtk/gtk--.html">.
|
||||
The FTP site is
|
||||
<htmlurl url="ftp://ftp.gtk.org/pub/gtk/gtk--"
|
||||
name="ftp://ftp.gtk.org/pub/gtk/gtk--">.
|
||||
<p>
|
||||
|
||||
<item>There are two Objective-c bindings currently in development:
|
||||
@@ -395,7 +463,7 @@ ftp://ftp.gimp.org/pub/gtk/gtk--/
|
||||
<item>If you are more inclined towards the
|
||||
<htmlurl url="http://www.gnustep.org/" name="GNUstep project">,
|
||||
you may want to check out GTKKit by
|
||||
<htmlurl url="mailto:helge@mdlink.de" name="Helge Heszlig">.
|
||||
<htmlurl url="mailto:helge@mdlink.de" name="Helge Heß">.
|
||||
The intention is to setup a GTK+ binding using the FoundationKit.
|
||||
GTKKit includes nicities like writing a XML-type template file to
|
||||
construct a GTK+ interface.
|
||||
@@ -403,14 +471,12 @@ ftp://ftp.gimp.org/pub/gtk/gtk--/
|
||||
</itemize>
|
||||
<p>
|
||||
<item>Perl bindings
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/pub/gtk/perl
|
||||
</verb>
|
||||
|
||||
<item>Guile bindings. The home page is at:
|
||||
<verb>
|
||||
http://www.ping.de/sites/zagadka/guile-gtk/
|
||||
</verb>
|
||||
<htmlurl url="ftp://ftp.gtk.org/pub/gtk/perl"
|
||||
name="ftp://ftp.gtk.org/pub/gtk/perl">
|
||||
<P>
|
||||
<item>Guile bindings. The home page is at
|
||||
<htmlurl url="http://www.ping.de/sites/zagadka/guile-gtk"
|
||||
name="http://www.ping.de/sites/zagadka/guile-gtk">.
|
||||
By the way, Guile is the GNU Project's implemention of R4RS Scheme (the
|
||||
standard). If you like Scheme, you may want to take a look at this.
|
||||
<p>
|
||||
@@ -420,24 +486,28 @@ standard). If you like Scheme, you may want to take a look at this.
|
||||
The basics of the system, including callbacks, work fine.
|
||||
|
||||
The current development is in
|
||||
http://www.ens-lyon.fr/~dmonniau/arcs/
|
||||
<htmlurl url="http://www.ens-lyon.fr/~dmonniau/arcs"
|
||||
name="http://www.ens-lyon.fr/~dmonniau/arcs">
|
||||
</quote>
|
||||
|
||||
<item>
|
||||
Several python-gtk interfaces have been done. python-gtk is at:
|
||||
<verb>
|
||||
http://www.acs.ucalgary.cs/~nashceme/python-gtk/
|
||||
</verb>
|
||||
If you try python-gtk and don't like it, there's also pygtk located at:
|
||||
<verb>
|
||||
ftp://ftp.gimp.org/pub/gtk/python/
|
||||
</verb>
|
||||
|
||||
Several python bindings have been done:
|
||||
<p>
|
||||
<itemize>
|
||||
<item>pygtk is at
|
||||
<htmlurl url="http://www.daa.com.au/~james/pygtk"
|
||||
name="http://www.daa.com.au/~james/pygtk"> and
|
||||
<htmlurl url="ftp://ftp.gtk.org/pub/gtk/python"
|
||||
name="ftp://ftp.gtk.org/pub/gtk/python">
|
||||
<item>python-gtk is at
|
||||
<htmlurl url="http://www.ucalgary.ca/~nascheme/python-gtk"
|
||||
name="http://www.ucalgary.ca/~nascheme/python-gtk">
|
||||
</itemize>
|
||||
<p>
|
||||
<item>
|
||||
There's a OpenGL/Mesa widget available for GTK+. Grab it at:
|
||||
<verb>
|
||||
http://www.sakuranet.or.jp/~aozasa/shige/doc/comp/gtk/gtkGL/files-en.html
|
||||
</verb>
|
||||
There's a OpenGL/Mesa widget available for GTK+. Grab it at
|
||||
<htmlurl url="http://www.sakuranet.or.jp/~aozasa/shige/doc/comp/gtk/gtkGL/files-en.html"
|
||||
name="http://www.sakuranet.or.jp/~aozasa/shige/doc/comp/gtk/gtkGL/files-en.html">
|
||||
|
||||
</itemize>
|
||||
|
||||
@@ -449,9 +519,9 @@ http://www.sakuranet.or.jp/~aozasa/shige/doc/comp/gtk/gtkGL/files-en.html
|
||||
<p>
|
||||
So, after you have installed GTK+ there are a couple of things that can
|
||||
ease you into developing applications with it. There is the
|
||||
GTK+ Tutorial <htmlurl url="http://www.levien.com/~slow/gtk/tutorial"
|
||||
name="<http://www.levien.com/~slow/gtk/tutorial>">, which is undergoing development. This will introduce you
|
||||
to writing applications using C.
|
||||
GTK+ Tutorial <htmlurl url="http://www.gtk.org/tutorial/"
|
||||
name="<http://www.gtk.org/tutorial/>">, which is undergoing
|
||||
development. This will introduce you to writing applications using C.
|
||||
|
||||
The Tutorial doesn't (yet) contain information on all of the widgets
|
||||
that are in GTK+. For example code on how to use the basics of all the
|
||||
@@ -503,6 +573,7 @@ The GTK+ Tutorial lists the following widgets:
|
||||
| | `GtkCheckButton
|
||||
| | `GtkRadioButton
|
||||
| +GtkCList
|
||||
| `GtkCTree
|
||||
| +GtkFixed
|
||||
| +GtkList
|
||||
| +GtkMenuShell
|
||||
@@ -545,6 +616,58 @@ The GTK+ Tutorial lists the following widgets:
|
||||
`GtkVSeparator
|
||||
</verb>
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>Is GTK+ thread safe? How do I write multi-threaded GTK+ applications?
|
||||
<p>
|
||||
Although GTK+, like many X toolkits, isn't thread safe, this does
|
||||
not prohibit the development of multi-threaded applications with
|
||||
GTK+.
|
||||
|
||||
Rob Browning (rlb@cs.utexas.edu) describes threading techniques for
|
||||
use with GTK+ (slightly edited):
|
||||
|
||||
There are basically two main approaches, the first is simple, and the
|
||||
second complicated. In the first, you just make sure that all GTK+ (or
|
||||
X) interactions are handled by one, and
|
||||
only one, thread. Any other thread that wants to draw something has
|
||||
to somehow notify the "GTK+" thread, and let it handle the
|
||||
actual work.
|
||||
|
||||
The second approach allows you to call GTK+ (or X) functions from any
|
||||
thread, but it requires some careful synchronization. The
|
||||
basic idea is that you create an X protection mutex, and no one may
|
||||
make any X calls without first acquiring this mutex.
|
||||
|
||||
Note that this is a little effort, but it allows you to be
|
||||
potentially more efficient than a completely thread safe GTK+. You
|
||||
get to decide the granularity of the thread locking. You also have to
|
||||
make sure that the thread that calls gtk_main is holding the lock when
|
||||
it calls gtk_main.
|
||||
|
||||
The next thing to worry about is that since you were holding the
|
||||
global mutex when you entered gtk_main, all callbacks will also be
|
||||
holding it. This means that the callback must release it if it's
|
||||
going to call any other code that might reacquire it. Otherwise
|
||||
you'll get deadlock. Also, you must be holding the mutex when you
|
||||
finally return from the callback.
|
||||
|
||||
In order to allow threads other than the one calling gtk_main to
|
||||
get access to the mutex, we also need to register a work function
|
||||
with GTK that allows us to release the mutex periodically.
|
||||
|
||||
Why can't GTK+ be thread safe by default?
|
||||
|
||||
Complexity, overhead, and manpower. The proportion of threaded
|
||||
programs is still reasonably small, and getting thread safety right is
|
||||
both quite difficult and takes valuable time away from the main work
|
||||
of getting a good graphics library finished. It would be nice to have
|
||||
GTK+ thread safe "out of the box", but that's not practical right now,
|
||||
and it also might make GTK+ substantially less efficient if not handled
|
||||
carefully.
|
||||
|
||||
Regardless, it's especially not a priority since relatively good
|
||||
workarounds exist.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How can I prevent redrawing and resizing while I change multiple widgets?
|
||||
<p>
|
||||
@@ -553,7 +676,7 @@ code where you are changing a lot of stuff. This will result in much faster
|
||||
speed since it will prevent resizing of the entire widget hierarchy.
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How do I catch a double click event in a list widget?
|
||||
<sect1>How do I catch a double click event (in a list widget, for example)?
|
||||
<p>
|
||||
Tim Janik wrote to gtk-list (slightly modified):
|
||||
|
||||
@@ -596,7 +719,15 @@ And connect the handler to your object:
|
||||
/* something else */
|
||||
}
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
and, Owen Taylor wrote:
|
||||
|
||||
Note that a single button press will be received beforehand, and
|
||||
if you are doing this for a button, you will therefore also get a
|
||||
"clicked" signal for the button. (This is going to be true for
|
||||
any toolkit, since computers aren't good at reading one's
|
||||
mind.)
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How do I find out about the selection of a GtkList?
|
||||
<p>
|
||||
@@ -752,7 +883,7 @@ determined it didn't look good and removed it.
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How can I define a separation line in a menu?
|
||||
<p>
|
||||
See the <htmlurl url="http://www.levien.com/~slow/gtk/"
|
||||
See the <htmlurl url="http://www.gtk.org/tutorial/"
|
||||
name="Tutorial"> for information on how to create menus.
|
||||
However, to create a separation line in a menu, just insert an
|
||||
empty menu item:
|
||||
@@ -772,6 +903,31 @@ Use something like the following:
|
||||
menu_path = gtk_menu_factory_find (factory, "<MyApp>/Help");
|
||||
gtk_menu_item_right_justify(menu_path->widget);
|
||||
</verb></tscreen>
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>How do I make my window modal? / How do I make a single window active?
|
||||
<p>
|
||||
After you create your window, do gtk_grab_add(my_window). And after
|
||||
closing the window do gtk_grab_remove(my_window).
|
||||
|
||||
<!-- ----------------------------------------------------------------- -->
|
||||
<sect1>Why doesn't my widget (e.g. progressbar) update?
|
||||
<p>
|
||||
|
||||
You are probably doing all the changes within a function
|
||||
without returning control to gtk_main. Most drawing updates are only
|
||||
placed on a queue, which is processed within gtk_main. You can
|
||||
force the drawing queue to be processed using something like:
|
||||
|
||||
<tscreen><verb>
|
||||
while (gtk_events_pending())
|
||||
gtk_main_iteration();
|
||||
</verb></tscreen>
|
||||
|
||||
inside you're function that changes the widget.
|
||||
|
||||
What the above snippet does is run all pending events and high priority
|
||||
idle functions, then return immediately (the drawing is done in a
|
||||
high priority idle function).
|
||||
|
||||
<!-- ***************************************************************** -->
|
||||
<sect>About gdk
|
||||
|
||||
242
docs/man/gtk_button.pod
Normal file
242
docs/man/gtk_button.pod
Normal file
@@ -0,0 +1,242 @@
|
||||
|
||||
=head1 NAME
|
||||
|
||||
gtk_button - GTK+ push button widget
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
#include <gtk/gtkbutton.h>
|
||||
|
||||
GtkType gtk_button_get_type (void);
|
||||
GtkWidget* gtk_button_new (void);
|
||||
GtkWidget* gtk_button_new_with_label (const gchar *label);
|
||||
void gtk_button_pressed (GtkButton *button);
|
||||
void gtk_button_released (GtkButton *button);
|
||||
void gtk_button_clicked (GtkButton *button);
|
||||
void gtk_button_enter (GtkButton *button);
|
||||
void gtk_button_leave (GtkButton *button);
|
||||
void gtk_button_set_relief (GtkButton *button,
|
||||
GtkReliefStyle style);
|
||||
GtkReliefStyle gtk_button_get_relief (GtkButton *button);
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This widget is a standard push button widget. Push button widgets
|
||||
are generally used for allowing the user to click on them to initiate
|
||||
a command.
|
||||
|
||||
This widget is a container widget which contains one child.
|
||||
|
||||
=head1 OBJECT HIERARCHY
|
||||
|
||||
gtk_object
|
||||
gtk_widget
|
||||
gtk_container
|
||||
gtk_button
|
||||
|
||||
=head1 SIGNAL PROTOTYPES
|
||||
|
||||
"clicked" void user_function (GtkWidget *widget, gpointer data);
|
||||
"pressed" void user_function (GtkWidget *widget, gpointer data);
|
||||
"released" void user_function (GtkWidget *widget, gpointer data);
|
||||
"enter" void user_function (GtkWidget *widget, gpointer data);
|
||||
"leave" void user_function (GtkWidget *widget, gpointer data);
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
=head2 Creation
|
||||
|
||||
The most common way to create a button is with a label in it, which
|
||||
contains text for the user to read. The child of the button will then
|
||||
be a L<gtk_label(3)> widget with the text you passwd in. You can
|
||||
do this in one command:
|
||||
|
||||
GtkWidget *button;
|
||||
button = gtk_button_new_with_label ("This is a button");
|
||||
|
||||
To create a gtk_button widget which does not already have a child,
|
||||
use gtk_button_new():
|
||||
|
||||
GtkWidget *button;
|
||||
button = gtk_button_new ();
|
||||
|
||||
After you have created a button you can then add a widget to the
|
||||
button (such as a label or pixmap) using gtk_container_add(). See
|
||||
L<gtk_container(3)> for more information on adding widgets to
|
||||
containers.
|
||||
|
||||
=head2 Creating a pixmap in a button in a window
|
||||
|
||||
After we have an empty gtk_button, such as above, and we have a gtk_pixmap,
|
||||
we can simply add the gtk_pixmap to the gtk_button with gtk_container_add().
|
||||
|
||||
The following code will open the file "gimp.xpm" and place it in a
|
||||
button.
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *button;
|
||||
GtkWidget *pixmap;
|
||||
GtkStyle *style;
|
||||
GdkPixmap *gdkpixmap;
|
||||
GdkBitmap *mask;
|
||||
char *filename = "gimp.xpm";
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
button = gtk_button_new ();
|
||||
gtk_container_add (GTK_CONTAINER (window), button);
|
||||
|
||||
/* The button is realized now, which creates button->window
|
||||
used below to create the pixmap. */
|
||||
gtk_widget_realize (button);
|
||||
|
||||
style = gtk_widget_get_style (button);
|
||||
gdkpixmap = gdk_pixmap_create_from_xpm (button->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
filename);
|
||||
pixmap = gtk_pixmap_new (gdkpixmap, mask);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (button), pixmap);
|
||||
|
||||
gtk_widget_show (pixmap);
|
||||
gtk_widget_show (button);
|
||||
gtk_widget_show (window);
|
||||
|
||||
gtk_main ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
=head2 Different reliefs
|
||||
|
||||
Reliefs affect how the shadowing of the button is drawn. The different
|
||||
types of relief styles are:
|
||||
|
||||
GTK_RELIEF_NORMAL
|
||||
GTK_RELIEF_HALF
|
||||
GTK_RELIEF_NONE
|
||||
|
||||
When set to a normal relief, the widget looks and acts like a normal
|
||||
button. When half or none relief is used, shadowing is only drawn when the
|
||||
mouse cursor is over the widget.
|
||||
|
||||
To set the relief, use gtk_button_set_relief(), like:
|
||||
|
||||
gtk_button_set_relief (button, GTK_RELIEF_HALF);
|
||||
|
||||
To get the current relief of a button, use gtk_button_get_relief():
|
||||
|
||||
GtkReliefStyle relief;
|
||||
relief = gtk_button_get_relief (GTK_BUTTON (button));
|
||||
|
||||
=head2 Executing a command when the button is pressed
|
||||
|
||||
To execute a function when a button is pressed, use
|
||||
gtk_signal_connect() to connect to the "clicked" signal.
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (user_function),
|
||||
NULL);
|
||||
|
||||
user_function is a user defined function, like the following:
|
||||
|
||||
void user_function (GtkWidget *button, gpointer data)
|
||||
{
|
||||
printf("clicked\n");
|
||||
}
|
||||
|
||||
=head1 FUNCTIONS
|
||||
|
||||
GtkType gtk_button_get_type (void);
|
||||
|
||||
This function returns the GtkType which is assigned to the
|
||||
object class for gtk_button.
|
||||
|
||||
GtkWidget* gtk_button_new (void);
|
||||
|
||||
This functions returns a new button widget which can then be
|
||||
used as a container for another widget.
|
||||
|
||||
GtkWidget* gtk_button_new_with_label (const gchar *label);
|
||||
|
||||
This function returns a new button widget with a label widget
|
||||
as a child. The label widget will have the text passed into
|
||||
the commant.
|
||||
|
||||
void gtk_button_pressed (GtkButton *button);
|
||||
|
||||
This function sends a "pressed" signal to the button.
|
||||
|
||||
void gtk_button_released (GtkButton *button);
|
||||
|
||||
This function sends a "released" signal to the button.
|
||||
|
||||
void gtk_button_clicked (GtkButton *button);
|
||||
|
||||
This function sends a "clicked" signal to the button.
|
||||
|
||||
void gtk_button_enter (GtkButton *button);
|
||||
|
||||
This function sends a "enter" signal to the button.
|
||||
|
||||
void gtk_button_leave (GtkButton *button);
|
||||
|
||||
This function sends a "leave" signal to the button.
|
||||
|
||||
void gtk_button_set_relief (GtkButton *button, GtkReliefStyle style);
|
||||
|
||||
This function is sets the GtkReliefStyle of the button. The
|
||||
relief style is one of: GTK_RELIEF_NORMAL, GTK_RELIEF_HALF,
|
||||
or GTK_RELIEF_NONE. The relief determines when the shadow of
|
||||
the button is drawn.
|
||||
|
||||
GtkReliefStyle gtk_button_get_relief (GtkButton *button);
|
||||
|
||||
This function returns the current relief of the button.
|
||||
|
||||
=head1 SIGNALS
|
||||
|
||||
"clicked"
|
||||
|
||||
void user_function (GtkWidget *widget, gpointer data);
|
||||
|
||||
Gets emitted when the button is clicked. A click is
|
||||
a press and release of the button when the cursor is
|
||||
inside the button on release.
|
||||
|
||||
"pressed"
|
||||
|
||||
void user_function (GtkWidget *widget, gpointer data);
|
||||
|
||||
Gets emitted when the left mouse button is pressed.
|
||||
|
||||
"released"
|
||||
|
||||
void user_function (GtkWidget *widget, gpointer data);
|
||||
|
||||
Gets emitted when the left mouse button is released and
|
||||
the widget was previously pressed.
|
||||
|
||||
"enter"
|
||||
|
||||
void user_function (GtkWidget *widget, gpointer data);
|
||||
|
||||
Emitted when the mouse cursor enters the button.
|
||||
|
||||
"leave"
|
||||
|
||||
void user_function (GtkWidget *widget, gpointer data);
|
||||
|
||||
Emitted when the mouse cursor leaves the button.
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
The author of this man page is Shawn T. Amundson E<lt>amundson@gtk.orgE<gt>.
|
||||
For the authors of GTK+, see the AUTHORS file in the GTK+ distribution.
|
||||
|
||||
|
||||
@@ -25,13 +25,17 @@ gtk_widget_set_rc_style ()
|
||||
restore the default style otherwise.
|
||||
This will override a previously set user style or rc style.
|
||||
|
||||
gtk_widget_reset_rc_styles ()
|
||||
Descends through a widget heirarchy and sets the rc style
|
||||
on all widgets that don't have a user style set.
|
||||
|
||||
gtk_widget_restore_default_style ()
|
||||
Reset the widget's style to the default style, this is only usefull if
|
||||
the widgets default style had been saved by previous calls to
|
||||
gtk_widget_set_style() or gtk_widget_set_rc_style().
|
||||
|
||||
gtk_widget_ensure_style ()
|
||||
Ensure taht the widget either has a user style set, or an rc lookup
|
||||
Ensure that the widget either has a user style set, or an rc lookup
|
||||
has been performed.
|
||||
|
||||
gtk_rc_get_style ()
|
||||
@@ -55,7 +59,7 @@ gtk_widget_set_parent ()
|
||||
that do not have a user style set.
|
||||
|
||||
gtk_style_copy ()
|
||||
This function can be used to copy a widgets style.
|
||||
This function can be used to copy a widget's style.
|
||||
The style can subsequntly be changed (e.g., by modifications to the
|
||||
red/green/blue values of a certain color) and then be applied to the
|
||||
widget via gtk_widget_set_style().
|
||||
|
||||
15540
docs/tutorial/gtk_tut.sgml
Normal file
15540
docs/tutorial/gtk_tut.sgml
Normal file
File diff suppressed because it is too large
Load Diff
8600
docs/tutorial/gtk_tut_fr.sgml
Normal file
8600
docs/tutorial/gtk_tut_fr.sgml
Normal file
File diff suppressed because it is too large
Load Diff
10090
docs/tutorial/gtk_tut_it.sgml
Normal file
10090
docs/tutorial/gtk_tut_it.sgml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
docs/tutorial/gtk_tut_packbox1.gif
Normal file
BIN
docs/tutorial/gtk_tut_packbox1.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.6 KiB |
BIN
docs/tutorial/gtk_tut_packbox2.gif
Normal file
BIN
docs/tutorial/gtk_tut_packbox2.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.9 KiB |
BIN
docs/tutorial/gtk_tut_table.gif
Normal file
BIN
docs/tutorial/gtk_tut_table.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
@@ -333,8 +333,7 @@ Removing from a container
|
||||
When a widget is removed to a container, the container:
|
||||
|
||||
1) Calls gtk_widget_unparent (widget)
|
||||
2) Sets widget->parent to NULL
|
||||
3) Queues a resize.
|
||||
2) Queues a resize.
|
||||
|
||||
Notes:
|
||||
|
||||
@@ -378,7 +377,7 @@ The Map signal
|
||||
|
||||
1) Set the MAPPED flag
|
||||
2) If the widget has any windows, gdk_window_show those windows
|
||||
3) call gtk_widget_map for all child windows that are
|
||||
3) call gtk_widget_map for all child widgets that are
|
||||
VISIBLE and !MAPPED.
|
||||
3) Do any other functions related to putting the widget onscreen.
|
||||
(for instance, showing extra popup windows...)
|
||||
@@ -392,7 +391,7 @@ When a widget receives the unmap signal, it must:
|
||||
2) If the widget does not have a window, unmap all child widgets
|
||||
3) Do any other functions related to taking the widget offscreen
|
||||
(for instance, removing popup windows...)
|
||||
3) Unset GTK_MAPPED
|
||||
4) Unset GTK_MAPPED
|
||||
|
||||
|
||||
The Unrealize signal
|
||||
|
||||
19
examples/Makefile
Normal file
19
examples/Makefile
Normal file
@@ -0,0 +1,19 @@
|
||||
|
||||
SUBDIRS = aspectframe eventbox gtkdial notebook progressbar scrolledwin tictactoe \
|
||||
clist filesel list paned rulers table \
|
||||
entry menu pixmap scribble-simple text \
|
||||
base helloworld packbox radiobuttons selection tree \
|
||||
buttons helloworld2 packer rangewidgets statusbar wheelbarrow
|
||||
|
||||
all:
|
||||
list='$(SUBDIRS)'; \
|
||||
for subdir in $$list; do \
|
||||
(cd $$subdir && $(MAKE)); \
|
||||
done
|
||||
|
||||
clean:
|
||||
list='$(SUBDIRS)'; \
|
||||
for subdir in $$list; do \
|
||||
(cd $$subdir && $(MAKE) clean); \
|
||||
done
|
||||
|
||||
41
examples/README.1ST
Normal file
41
examples/README.1ST
Normal file
@@ -0,0 +1,41 @@
|
||||
GTK Example Code - Tony Gale <gale@gtk.org> 980623
|
||||
--------------------------------------------------
|
||||
|
||||
I have written an awk script to automatically extract the code
|
||||
examples from the GTK Tutorial (in sgml), so they only have to be
|
||||
changed in one place.
|
||||
|
||||
It's called 'extract.awk', and there is a shell wrapper to invoke
|
||||
it called 'extract.sh'
|
||||
|
||||
It takes the following switches:
|
||||
-c : Just do checking rather than output files
|
||||
-f <filename> : Extract a specific file
|
||||
-d : Extract file(s) to current directory
|
||||
|
||||
Without the -d switch, the code will be placed in the appropriate
|
||||
sub-directory. Those sub-directories will be created if they do not
|
||||
exist.
|
||||
|
||||
Without the -f switch, all code examples will be extracted.
|
||||
|
||||
The shell wrapper assumes that the GTK Tutorial is in the
|
||||
file "../docs/gtk_tut.sgml"
|
||||
|
||||
It works by looking for sections of text in the tutorial surrounded
|
||||
by, for example:
|
||||
|
||||
/* example-start helloworld helloworld.c */
|
||||
|
||||
and
|
||||
|
||||
/* example-end */
|
||||
|
||||
Where "helloworld" is the directory into which the file will be
|
||||
placed (which can also be a directory spec like hello/hello1), and
|
||||
"helloworld.c" is the file name for the code.
|
||||
|
||||
So, the code between these lines would be extracted to the file
|
||||
helloworld/helloworld.c
|
||||
|
||||
It also handles replacing the sgml tag '&' with '&'
|
||||
8
examples/aspectframe/Makefile
Normal file
8
examples/aspectframe/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
aspectframe: aspectframe.c
|
||||
$(CC) `gtk-config --cflags` aspectframe.c -o aspectframe `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o aspectframe
|
||||
44
examples/aspectframe/aspectframe.c
Normal file
44
examples/aspectframe/aspectframe.c
Normal file
@@ -0,0 +1,44 @@
|
||||
/* example-start aspectframe aspectframe.c */
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *aspect_frame;
|
||||
GtkWidget *drawing_area;
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Aspect Frame");
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
|
||||
gtk_container_border_width (GTK_CONTAINER (window), 10);
|
||||
|
||||
/* Create an aspect_frame and add it to our toplevel window */
|
||||
|
||||
aspect_frame = gtk_aspect_frame_new ("2x1", /* label */
|
||||
0.5, /* center x */
|
||||
0.5, /* center y */
|
||||
2, /* xsize/ysize = 2 */
|
||||
FALSE /* ignore child's aspect */);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER(window), aspect_frame);
|
||||
gtk_widget_show (aspect_frame);
|
||||
|
||||
/* Now add a child widget to the aspect frame */
|
||||
|
||||
drawing_area = gtk_drawing_area_new ();
|
||||
|
||||
/* Ask for a 200x200 window, but the AspectFrame will give us a 200x100
|
||||
* window since we are forcing a 2x1 aspect ratio */
|
||||
gtk_widget_set_usize (drawing_area, 200, 200);
|
||||
gtk_container_add (GTK_CONTAINER(aspect_frame), drawing_area);
|
||||
gtk_widget_show (drawing_area);
|
||||
|
||||
gtk_widget_show (window);
|
||||
gtk_main ();
|
||||
return 0;
|
||||
}
|
||||
/* example-end */
|
||||
8
examples/base/Makefile
Normal file
8
examples/base/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
base: base.c
|
||||
$(CC) `gtk-config --cflags` base.c -o base `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o base
|
||||
19
examples/base/base.c
Normal file
19
examples/base/base.c
Normal file
@@ -0,0 +1,19 @@
|
||||
/* example-start base base.c */
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
int main( int argc,
|
||||
char *argv[] )
|
||||
{
|
||||
GtkWidget *window;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_widget_show (window);
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return(0);
|
||||
}
|
||||
/* example-end */
|
||||
8
examples/buttons/Makefile
Normal file
8
examples/buttons/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
buttons: buttons.c
|
||||
$(CC) `gtk-config --cflags` buttons.c -o buttons `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o buttons
|
||||
109
examples/buttons/buttons.c
Normal file
109
examples/buttons/buttons.c
Normal file
@@ -0,0 +1,109 @@
|
||||
/* example-start buttons buttons.c */
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
/* Create a new hbox with an image and a label packed into it
|
||||
* and return the box. */
|
||||
|
||||
GtkWidget *xpm_label_box( GtkWidget *parent,
|
||||
gchar *xpm_filename,
|
||||
gchar *label_text )
|
||||
{
|
||||
GtkWidget *box1;
|
||||
GtkWidget *label;
|
||||
GtkWidget *pixmapwid;
|
||||
GdkPixmap *pixmap;
|
||||
GdkBitmap *mask;
|
||||
GtkStyle *style;
|
||||
|
||||
/* Create box for xpm and label */
|
||||
box1 = gtk_hbox_new (FALSE, 0);
|
||||
gtk_container_border_width (GTK_CONTAINER (box1), 2);
|
||||
|
||||
/* Get the style of the button to get the
|
||||
* background color. */
|
||||
style = gtk_widget_get_style(parent);
|
||||
|
||||
/* Now on to the xpm stuff */
|
||||
pixmap = gdk_pixmap_create_from_xpm (parent->window, &mask,
|
||||
&style->bg[GTK_STATE_NORMAL],
|
||||
xpm_filename);
|
||||
pixmapwid = gtk_pixmap_new (pixmap, mask);
|
||||
|
||||
/* Create a label for the button */
|
||||
label = gtk_label_new (label_text);
|
||||
|
||||
/* Pack the pixmap and label into the box */
|
||||
gtk_box_pack_start (GTK_BOX (box1),
|
||||
pixmapwid, FALSE, FALSE, 3);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 3);
|
||||
|
||||
gtk_widget_show(pixmapwid);
|
||||
gtk_widget_show(label);
|
||||
|
||||
return(box1);
|
||||
}
|
||||
|
||||
/* Our usual callback function */
|
||||
void callback( GtkWidget *widget,
|
||||
gpointer data )
|
||||
{
|
||||
g_print ("Hello again - %s was pressed\n", (char *) data);
|
||||
}
|
||||
|
||||
|
||||
int main( int argc,
|
||||
char *argv[] )
|
||||
{
|
||||
/* GtkWidget is the storage type for widgets */
|
||||
GtkWidget *window;
|
||||
GtkWidget *button;
|
||||
GtkWidget *box1;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
/* Create a new window */
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Pixmap'd Buttons!");
|
||||
|
||||
/* It's a good idea to do this for all windows. */
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
GTK_SIGNAL_FUNC (gtk_exit), NULL);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
|
||||
GTK_SIGNAL_FUNC (gtk_exit), NULL);
|
||||
|
||||
|
||||
/* Sets the border width of the window. */
|
||||
gtk_container_border_width (GTK_CONTAINER (window), 10);
|
||||
gtk_widget_realize(window);
|
||||
|
||||
/* Create a new button */
|
||||
button = gtk_button_new ();
|
||||
|
||||
/* Connect the "clicked" signal of the button to our callback */
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (callback), (gpointer) "cool button");
|
||||
|
||||
/* This calls our box creating function */
|
||||
box1 = xpm_label_box(window, "info.xpm", "cool button");
|
||||
|
||||
/* Pack and show all our widgets */
|
||||
gtk_widget_show(box1);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (button), box1);
|
||||
|
||||
gtk_widget_show(button);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (window), button);
|
||||
|
||||
gtk_widget_show (window);
|
||||
|
||||
/* Rest in gtk_main and wait for the fun to begin! */
|
||||
gtk_main ();
|
||||
|
||||
return(0);
|
||||
}
|
||||
/* example-end */
|
||||
92
examples/buttons/info.xpm
Normal file
92
examples/buttons/info.xpm
Normal file
@@ -0,0 +1,92 @@
|
||||
/* XPM */
|
||||
static char *openfile[] = {
|
||||
/* width height num_colors chars_per_pixel */
|
||||
" 20 19 66 2",
|
||||
/* colors */
|
||||
".. c None",
|
||||
".# c #000000",
|
||||
".a c #dfdfdf",
|
||||
".b c #7f7f7f",
|
||||
".c c #006f6f",
|
||||
".d c #00efef",
|
||||
".e c #009f9f",
|
||||
".f c #004040",
|
||||
".g c #00bfbf",
|
||||
".h c #ff0000",
|
||||
".i c #ffffff",
|
||||
".j c #7f0000",
|
||||
".k c #007070",
|
||||
".l c #00ffff",
|
||||
".m c #00a0a0",
|
||||
".n c #004f4f",
|
||||
".o c #00cfcf",
|
||||
".p c #8f8f8f",
|
||||
".q c #6f6f6f",
|
||||
".r c #a0a0a0",
|
||||
".s c #7f7f00",
|
||||
".t c #007f7f",
|
||||
".u c #5f5f5f",
|
||||
".v c #707070",
|
||||
".w c #00f0f0",
|
||||
".x c #009090",
|
||||
".y c #ffff00",
|
||||
".z c #0000ff",
|
||||
".A c #00afaf",
|
||||
".B c #00d0d0",
|
||||
".C c #00dfdf",
|
||||
".D c #005f5f",
|
||||
".E c #00b0b0",
|
||||
".F c #001010",
|
||||
".G c #00c0c0",
|
||||
".H c #000f0f",
|
||||
".I c #00007f",
|
||||
".J c #005050",
|
||||
".K c #002f2f",
|
||||
".L c #dfcfcf",
|
||||
".M c #dfd0d0",
|
||||
".N c #006060",
|
||||
".O c #00e0e0",
|
||||
".P c #00ff00",
|
||||
".Q c #002020",
|
||||
".R c #dfc0c0",
|
||||
".S c #008080",
|
||||
".T c #001f1f",
|
||||
".U c #003f3f",
|
||||
".V c #007f00",
|
||||
".W c #00000f",
|
||||
".X c #000010",
|
||||
".Y c #00001f",
|
||||
".Z c #000020",
|
||||
".0 c #00002f",
|
||||
".1 c #000030",
|
||||
".2 c #00003f",
|
||||
".3 c #000040",
|
||||
".4 c #00004f",
|
||||
".5 c #000050",
|
||||
".6 c #00005f",
|
||||
".7 c #000060",
|
||||
".8 c #00006f",
|
||||
".9 c #000070",
|
||||
"#. c #7f7f80",
|
||||
"## c #9f9f9f",
|
||||
/* pixels */
|
||||
"........................................",
|
||||
"........................................",
|
||||
"........................................",
|
||||
".......................#.#.#............",
|
||||
".....................#.......#...#......",
|
||||
"...............................#.#......",
|
||||
".......#.#.#.................#.#.#......",
|
||||
".....#.y.i.y.#.#.#.#.#.#.#..............",
|
||||
".....#.i.y.i.y.i.y.i.y.i.#..............",
|
||||
".....#.y.i.y.i.y.i.y.i.y.#..............",
|
||||
".....#.i.y.i.y.#.#.#.#.#.#.#.#.#.#.#....",
|
||||
".....#.y.i.y.#.s.s.s.s.s.s.s.s.s.#......",
|
||||
".....#.i.y.#.s.s.s.s.s.s.s.s.s.#........",
|
||||
".....#.y.#.s.s.s.s.s.s.s.s.s.#..........",
|
||||
".....#.#.s.s.s.s.s.s.s.s.s.#............",
|
||||
".....#.#.#.#.#.#.#.#.#.#.#..............",
|
||||
"........................................",
|
||||
"........................................",
|
||||
"........................................"
|
||||
};
|
||||
8
examples/calendar/Makefile
Normal file
8
examples/calendar/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
gcalendar: gcalendar.c
|
||||
$(CC) `gtk-config --cflags` gcalendar.c -o gcalendar `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f gcalendar
|
||||
362
examples/calendar/gcalendar.c
Normal file
362
examples/calendar/gcalendar.c
Normal file
@@ -0,0 +1,362 @@
|
||||
/* G Calendar
|
||||
* Copyright (C) 1998 Cesar Miquel, Shawn T. Amundson, Mattias Grönlund
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#define DEF_PAD 10
|
||||
#define DEF_PAD_SMALL 5
|
||||
|
||||
#define TM_YEAR_BASE 1900
|
||||
|
||||
|
||||
typedef struct _CalendarData {
|
||||
GtkWidget *flag_checkboxes[5];
|
||||
gboolean settings[5];
|
||||
gchar *font;
|
||||
GtkWidget *font_dialog;
|
||||
GtkWidget *window;
|
||||
GtkWidget *selected;
|
||||
GtkWidget *selected_double_click;
|
||||
GtkWidget *month;
|
||||
} CalendarData;
|
||||
|
||||
void create_calendar();
|
||||
gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data);
|
||||
void destroy (GtkWidget *widget, gpointer data);
|
||||
void day_selected_double_click (GtkWidget *widget, gpointer data);
|
||||
int main(int argc, char *argv[]);
|
||||
void calendar_month_changed (GtkWidget *widget, CalendarData *data);
|
||||
void calendar_day_selected (GtkWidget *widget, CalendarData *data);
|
||||
void calendar_day_selected_double_click (GtkWidget *widget, CalendarData *data);
|
||||
|
||||
|
||||
void calendar_set_flags(CalendarData *calendar);
|
||||
void calendar_toggle_flag(GtkWidget * toggle, CalendarData *calendar);
|
||||
void calendar_font_selection_ok(GtkWidget * button, CalendarData *calendar);
|
||||
void calendar_font_selection_destroy(GtkWidget * button, GtkWidget widget);
|
||||
void calendar_select_font(GtkWidget * button, CalendarData *calendar);
|
||||
void calendar_create_window_destroy(GtkWidget * ignore, CalendarData *calendar);
|
||||
void calendar_create_window(GtkWidget * ignored, CalendarData * calendar);
|
||||
void calendar_window_destroy(GtkWidget * ignore, CalendarData *calendar);
|
||||
void create_calendar();
|
||||
|
||||
/*
|
||||
* GtkCalendar
|
||||
*/
|
||||
|
||||
void
|
||||
calendar_month_changed (GtkWidget *widget, CalendarData *data)
|
||||
{
|
||||
char buffer[256];
|
||||
struct tm tm;
|
||||
time_t time;
|
||||
memset (&tm, 0, sizeof (tm));
|
||||
gtk_calendar_get_date (GTK_CALENDAR(data->window), &tm.tm_year, &tm.tm_mon, &tm.tm_mday);
|
||||
tm.tm_year -= TM_YEAR_BASE;
|
||||
time = mktime(&tm);
|
||||
strftime (buffer, 255, "%x", gmtime(&time));
|
||||
gtk_label_set (GTK_LABEL (data->month), buffer);
|
||||
}
|
||||
|
||||
void
|
||||
calendar_day_selected (GtkWidget *widget, CalendarData *data)
|
||||
{
|
||||
char buffer[256];
|
||||
struct tm tm;
|
||||
time_t time;
|
||||
memset (&tm, 0, sizeof (tm));
|
||||
gtk_calendar_get_date (GTK_CALENDAR(data->window), &tm.tm_year, &tm.tm_mon, &tm.tm_mday);
|
||||
tm.tm_year -= TM_YEAR_BASE;
|
||||
time = mktime(&tm);
|
||||
strftime (buffer, 255, "%x", gmtime(&time));
|
||||
gtk_label_set (GTK_LABEL (data->selected), buffer);
|
||||
}
|
||||
|
||||
void
|
||||
calendar_day_selected_double_click (GtkWidget *widget, CalendarData *data)
|
||||
{
|
||||
char buffer[256];
|
||||
struct tm tm;
|
||||
time_t time;
|
||||
memset (&tm, 0, sizeof (tm));
|
||||
gtk_calendar_get_date (GTK_CALENDAR(data->window), &tm.tm_year, &tm.tm_mon, &tm.tm_mday);
|
||||
tm.tm_year -= TM_YEAR_BASE;
|
||||
time = mktime(&tm);
|
||||
strftime (buffer, 255, "%x", gmtime(&time));
|
||||
gtk_label_set (GTK_LABEL (data->selected_double_click), buffer);
|
||||
}
|
||||
|
||||
enum {
|
||||
calendar_show_header,
|
||||
calendar_show_days,
|
||||
calendar_month_change,
|
||||
calendar_show_week,
|
||||
calendar_monday_first
|
||||
};
|
||||
|
||||
void
|
||||
calendar_set_flags(CalendarData *calendar)
|
||||
{
|
||||
gint i;
|
||||
gint options=0;
|
||||
for (i=0;i<5;i++)
|
||||
if (calendar->settings[i])
|
||||
{
|
||||
options=options + (1<<i);
|
||||
}
|
||||
if (calendar->window)
|
||||
gtk_calendar_display_options (GTK_CALENDAR (calendar->window), options);
|
||||
}
|
||||
|
||||
void
|
||||
calendar_toggle_flag(GtkWidget * toggle, CalendarData *calendar)
|
||||
{
|
||||
gint i;
|
||||
gint j;
|
||||
j=0;
|
||||
for (i=0; i<5; i++)
|
||||
if (calendar->flag_checkboxes[i] == toggle)
|
||||
j = i;
|
||||
|
||||
calendar->settings[j]=!calendar->settings[j];
|
||||
calendar_set_flags(calendar);
|
||||
|
||||
}
|
||||
void
|
||||
calendar_font_selection_ok(GtkWidget * button, CalendarData *calendar)
|
||||
{
|
||||
GtkStyle *style;
|
||||
GdkFont *font;
|
||||
|
||||
calendar->font = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG (calendar->font_dialog));
|
||||
if (calendar->window)
|
||||
{
|
||||
font = gtk_font_selection_dialog_get_font(GTK_FONT_SELECTION_DIALOG(calendar->font_dialog));
|
||||
if (font)
|
||||
{
|
||||
style = gtk_style_copy (gtk_widget_get_style (calendar->window));
|
||||
gdk_font_unref (style->font);
|
||||
style->font = font;
|
||||
gdk_font_ref (style->font);
|
||||
gtk_widget_set_style (calendar->window, style);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
calendar_select_font(GtkWidget * button, CalendarData *calendar)
|
||||
{
|
||||
GtkWidget *window;
|
||||
|
||||
if (!calendar->font_dialog) {
|
||||
window = gtk_font_selection_dialog_new ("Font Selection Dialog");
|
||||
g_return_if_fail(GTK_IS_FONT_SELECTION_DIALOG(window));
|
||||
calendar->font_dialog = window;
|
||||
|
||||
gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
GTK_SIGNAL_FUNC (gtk_widget_destroyed),
|
||||
&calendar->font_dialog);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->ok_button),
|
||||
"clicked", GTK_SIGNAL_FUNC(calendar_font_selection_ok),
|
||||
calendar);
|
||||
gtk_signal_connect_object (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (window)->cancel_button),
|
||||
"clicked",
|
||||
GTK_SIGNAL_FUNC (gtk_widget_destroy),
|
||||
GTK_OBJECT (calendar->font_dialog));
|
||||
}
|
||||
window=calendar->font_dialog;
|
||||
if (!GTK_WIDGET_VISIBLE (window))
|
||||
gtk_widget_show (window);
|
||||
else
|
||||
gtk_widget_destroy (window);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
create_calendar()
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *vbox, *vbox2, *vbox3;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *hbbox;
|
||||
GtkWidget *calendar;
|
||||
GtkWidget *toggle;
|
||||
GtkWidget *button;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *separator;
|
||||
GtkWidget *label;
|
||||
GtkWidget *bbox;
|
||||
static CalendarData calendar_data;
|
||||
gint i;
|
||||
|
||||
struct {
|
||||
char *label;
|
||||
} flags[] =
|
||||
{
|
||||
{ "Show Heading" },
|
||||
{ "Show Day Names" },
|
||||
{ "No Month Change" },
|
||||
{ "Show Week Numbers" },
|
||||
{ "Week Start Monday" }
|
||||
};
|
||||
|
||||
|
||||
calendar_data.window = NULL;
|
||||
calendar_data.font = NULL;
|
||||
calendar_data.font_dialog = NULL;
|
||||
|
||||
for (i=0; i<5; i++) {
|
||||
calendar_data.settings[i]=0;
|
||||
}
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_container_border_width (GTK_CONTAINER (window), 5);
|
||||
gtk_signal_connect(GTK_OBJECT(window), "destroy",
|
||||
GTK_SIGNAL_FUNC(gtk_main_quit),
|
||||
NULL);
|
||||
gtk_signal_connect(GTK_OBJECT(window), "delete-event",
|
||||
GTK_SIGNAL_FUNC(gtk_false),
|
||||
NULL);
|
||||
|
||||
gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, TRUE);
|
||||
|
||||
vbox = gtk_vbox_new(FALSE, DEF_PAD);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
|
||||
/*
|
||||
* The top part of the window, Calendar, flags and fontsel.
|
||||
*/
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, DEF_PAD);
|
||||
gtk_box_pack_start (GTK_BOX(vbox), hbox, TRUE, TRUE, DEF_PAD);
|
||||
hbbox = gtk_hbutton_box_new();
|
||||
gtk_box_pack_start(GTK_BOX(hbox), hbbox, FALSE, FALSE, DEF_PAD);
|
||||
gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox), GTK_BUTTONBOX_SPREAD);
|
||||
gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbbox), 5);
|
||||
|
||||
/* Calendar widget */
|
||||
frame = gtk_frame_new("Calendar");
|
||||
gtk_box_pack_start(GTK_BOX(hbbox), frame, TRUE, TRUE, DEF_PAD);
|
||||
calendar=gtk_calendar_new();
|
||||
calendar_data.window = calendar;
|
||||
calendar_set_flags(&calendar_data);
|
||||
gtk_calendar_mark_day ( GTK_CALENDAR(calendar), 19);
|
||||
gtk_container_add( GTK_CONTAINER( frame), calendar);
|
||||
gtk_signal_connect (GTK_OBJECT (calendar), "month_changed",
|
||||
GTK_SIGNAL_FUNC (calendar_month_changed),
|
||||
&calendar_data);
|
||||
gtk_signal_connect (GTK_OBJECT (calendar), "day_selected",
|
||||
GTK_SIGNAL_FUNC (calendar_day_selected),
|
||||
&calendar_data);
|
||||
gtk_signal_connect (GTK_OBJECT (calendar), "day_selected_double_click",
|
||||
GTK_SIGNAL_FUNC (calendar_day_selected_double_click),
|
||||
&calendar_data);
|
||||
|
||||
|
||||
separator = gtk_vseparator_new ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox), separator, FALSE, TRUE, 0);
|
||||
|
||||
vbox2 = gtk_vbox_new(FALSE, DEF_PAD);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, DEF_PAD);
|
||||
|
||||
/* Build the Right frame with the flags in */
|
||||
|
||||
frame = gtk_frame_new("Flags");
|
||||
gtk_box_pack_start(GTK_BOX(vbox2), frame, TRUE, TRUE, DEF_PAD);
|
||||
vbox3 = gtk_vbox_new(TRUE, DEF_PAD_SMALL);
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox3);
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
toggle = gtk_check_button_new_with_label(flags[i].label);
|
||||
gtk_signal_connect (GTK_OBJECT (toggle),
|
||||
"toggled",
|
||||
GTK_SIGNAL_FUNC(calendar_toggle_flag),
|
||||
&calendar_data);
|
||||
gtk_box_pack_start (GTK_BOX (vbox3), toggle, TRUE, TRUE, 0);
|
||||
calendar_data.flag_checkboxes[i]=toggle;
|
||||
}
|
||||
/* Build the right font-button */
|
||||
button = gtk_button_new_with_label("Font...");
|
||||
gtk_signal_connect (GTK_OBJECT (button),
|
||||
"clicked",
|
||||
GTK_SIGNAL_FUNC(calendar_select_font),
|
||||
&calendar_data);
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
|
||||
|
||||
/*
|
||||
* Build the Signal-event part.
|
||||
*/
|
||||
|
||||
frame = gtk_frame_new("Signal events");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, DEF_PAD);
|
||||
vbox2 = gtk_vbox_new(TRUE, DEF_PAD_SMALL);
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox2);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
|
||||
label = gtk_label_new ("Day selected:");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
|
||||
calendar_data.selected = gtk_label_new ("");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), calendar_data.selected, FALSE, TRUE, 0);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
|
||||
label = gtk_label_new ("Day selected double click:");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
|
||||
calendar_data.selected_double_click = gtk_label_new ("");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), calendar_data.selected_double_click, FALSE, TRUE, 0);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
|
||||
label = gtk_label_new ("Month change:");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
|
||||
calendar_data.month = gtk_label_new ("");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), calendar_data.month, FALSE, TRUE, 0);
|
||||
|
||||
bbox = gtk_hbutton_box_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, FALSE, 0);
|
||||
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
|
||||
|
||||
button = gtk_button_new_with_label ("Close");
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (gtk_main_quit),
|
||||
NULL);
|
||||
gtk_container_add (GTK_CONTAINER (bbox), button);
|
||||
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
|
||||
gtk_widget_grab_default (button);
|
||||
|
||||
gtk_widget_show_all(window);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
gtk_set_locale ();
|
||||
gtk_init (&argc, &argv);
|
||||
create_calendar();
|
||||
gtk_main ();
|
||||
return 0;
|
||||
}
|
||||
8
examples/clist/Makefile
Normal file
8
examples/clist/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
clist: clist.c
|
||||
$(CC) `gtk-config --cflags` clist.c -o clist `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o clist
|
||||
173
examples/clist/clist.c
Normal file
173
examples/clist/clist.c
Normal file
@@ -0,0 +1,173 @@
|
||||
/* example-start clist clist.c */
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <glib.h>
|
||||
|
||||
/* These are just the prototypes of the various callbacks */
|
||||
void button_add_clicked( GtkWidget *button, gpointer data);
|
||||
void button_clear_clicked( GtkWidget *button, gpointer data);
|
||||
void button_hide_show_clicked( GtkWidget *button, gpointer data);
|
||||
void selection_made( GtkWidget *clist, gint row, gint column,
|
||||
GdkEventButton *event, gpointer data);
|
||||
|
||||
gint main (int argc, gchar *argv[])
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *vbox, *hbox;
|
||||
GtkWidget *clist;
|
||||
GtkWidget *button_add, *button_clear, *button_hide_show;
|
||||
gchar *titles[2] = {"Ingredients","Amount"};
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
|
||||
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
|
||||
|
||||
gtk_window_set_title(GTK_WINDOW(window), "GtkCList Example");
|
||||
gtk_signal_connect(GTK_OBJECT(window),
|
||||
"destroy",
|
||||
GTK_SIGNAL_FUNC(gtk_main_quit),
|
||||
NULL);
|
||||
|
||||
vbox=gtk_vbox_new(FALSE, 5);
|
||||
gtk_container_border_width(GTK_CONTAINER(vbox), 5);
|
||||
gtk_container_add(GTK_CONTAINER(window), vbox);
|
||||
gtk_widget_show(vbox);
|
||||
|
||||
/* Create the GtkCList. For this example we use 2 columns */
|
||||
clist = gtk_clist_new_with_titles( 2, titles);
|
||||
|
||||
/* When a selection is made, we want to know about it. The callback
|
||||
* used is selection_made, and its code can be found further down */
|
||||
gtk_signal_connect(GTK_OBJECT(clist), "select_row",
|
||||
GTK_SIGNAL_FUNC(selection_made),
|
||||
NULL);
|
||||
|
||||
/* It isn't necessary to shadow the border, but it looks nice :) */
|
||||
gtk_clist_set_border(GTK_CLIST(clist), GTK_SHADOW_OUT);
|
||||
|
||||
/* What however is important, is that we set the column widths as
|
||||
* they will never be right otherwise. Note that the columns are
|
||||
* numbered from 0 and up (to 1 in this case).
|
||||
*/
|
||||
gtk_clist_set_column_width (GTK_CLIST(clist), 0, 150);
|
||||
|
||||
/* Scollbars _only when needed_ */
|
||||
gtk_clist_set_policy(GTK_CLIST(clist), GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
|
||||
/* Add the GtkCList widget to the vertical box and show it. */
|
||||
gtk_box_pack_start(GTK_BOX(vbox), clist, TRUE, TRUE, 0);
|
||||
gtk_widget_show(clist);
|
||||
|
||||
/* Create the buttons and add them to the window. See the button
|
||||
* tutorial for more examples and comments on this.
|
||||
*/
|
||||
hbox = gtk_hbox_new(FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
||||
gtk_widget_show(hbox);
|
||||
|
||||
button_add = gtk_button_new_with_label("Add List");
|
||||
button_clear = gtk_button_new_with_label("Clear List");
|
||||
button_hide_show = gtk_button_new_with_label("Hide/Show titles");
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button_add, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button_clear, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button_hide_show, TRUE, TRUE, 0);
|
||||
|
||||
/* Connect our callbacks to the three buttons */
|
||||
gtk_signal_connect_object(GTK_OBJECT(button_add), "clicked",
|
||||
GTK_SIGNAL_FUNC(button_add_clicked),
|
||||
(gpointer) clist);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button_clear), "clicked",
|
||||
GTK_SIGNAL_FUNC(button_clear_clicked),
|
||||
(gpointer) clist);
|
||||
gtk_signal_connect_object(GTK_OBJECT(button_hide_show), "clicked",
|
||||
GTK_SIGNAL_FUNC(button_hide_show_clicked),
|
||||
(gpointer) clist);
|
||||
|
||||
gtk_widget_show(button_add);
|
||||
gtk_widget_show(button_clear);
|
||||
gtk_widget_show(button_hide_show);
|
||||
|
||||
/* The interface is completely set up so we show the window and
|
||||
* enter the gtk_main loop.
|
||||
*/
|
||||
gtk_widget_show(window);
|
||||
gtk_main();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* User clicked the "Add List" button. */
|
||||
void button_add_clicked( GtkWidget *button, gpointer data)
|
||||
{
|
||||
int indx;
|
||||
|
||||
/* Something silly to add to the list. 4 rows of 2 columns each */
|
||||
gchar *drink[4][2] = {{"Milk", "3 Oz"},
|
||||
{"Water", "6 l"},
|
||||
{"Carrots", "2"},
|
||||
{"Snakes", "55"}};
|
||||
|
||||
/* Here we do the actual adding of the text. It's done once for
|
||||
* each row.
|
||||
*/
|
||||
for( indx=0; indx < 4; indx++)
|
||||
gtk_clist_append( (GtkCList*) data, drink[indx]);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* User clicked the "Clear List" button. */
|
||||
void button_clear_clicked( GtkWidget *button, gpointer data)
|
||||
{
|
||||
/* Clear the list using gtk_clist_clear. This is much faster than
|
||||
* calling gtk_clist_remove once for each row.
|
||||
*/
|
||||
gtk_clist_clear((GtkCList*) data);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* The user clicked the "Hide/Show titles" button. */
|
||||
void button_hide_show_clicked( GtkWidget *button, gpointer data)
|
||||
{
|
||||
/* Just a flag to remember the status. 0 = currently visible */
|
||||
static short int flag = 0;
|
||||
|
||||
if (flag == 0)
|
||||
{
|
||||
/* Hide the titles and set the flag to 1 */
|
||||
gtk_clist_column_titles_hide((GtkCList*) data);
|
||||
flag++;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Show the titles and reset flag to 0 */
|
||||
gtk_clist_column_titles_show((GtkCList*) data);
|
||||
flag--;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* If we come here, then the user has selected a row in the list. */
|
||||
void selection_made( GtkWidget *clist, gint row, gint column,
|
||||
GdkEventButton *event, gpointer data)
|
||||
{
|
||||
gchar *text;
|
||||
|
||||
/* Get the text that is stored in the selected row and column
|
||||
* which was clicked in. We will receive it as a pointer in the
|
||||
* argument text.
|
||||
*/
|
||||
gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);
|
||||
|
||||
/* Just prints some information about the selected row */
|
||||
g_print("You selected row %d. More specifically you clicked in column %d, and the text in this cell is %s\n\n", row, column, text);
|
||||
|
||||
return;
|
||||
}
|
||||
/* example-end */
|
||||
8
examples/entry/Makefile
Normal file
8
examples/entry/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
entry: entry.c
|
||||
$(CC) `gtk-config --cflags` entry.c -o entry `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o entry
|
||||
91
examples/entry/entry.c
Normal file
91
examples/entry/entry.c
Normal file
@@ -0,0 +1,91 @@
|
||||
/* example-start entry entry.c */
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
void enter_callback(GtkWidget *widget, GtkWidget *entry)
|
||||
{
|
||||
gchar *entry_text;
|
||||
entry_text = gtk_entry_get_text(GTK_ENTRY(entry));
|
||||
printf("Entry contents: %s\n", entry_text);
|
||||
}
|
||||
|
||||
void entry_toggle_editable (GtkWidget *checkbutton,
|
||||
GtkWidget *entry)
|
||||
{
|
||||
gtk_entry_set_editable(GTK_ENTRY(entry),
|
||||
GTK_TOGGLE_BUTTON(checkbutton)->active);
|
||||
}
|
||||
|
||||
void entry_toggle_visibility (GtkWidget *checkbutton,
|
||||
GtkWidget *entry)
|
||||
{
|
||||
gtk_entry_set_visibility(GTK_ENTRY(entry),
|
||||
GTK_TOGGLE_BUTTON(checkbutton)->active);
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
|
||||
GtkWidget *window;
|
||||
GtkWidget *vbox, *hbox;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *button;
|
||||
GtkWidget *check;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
/* create a new window */
|
||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_widget_set_usize( GTK_WIDGET (window), 200, 100);
|
||||
gtk_window_set_title(GTK_WINDOW (window), "GTK Entry");
|
||||
gtk_signal_connect(GTK_OBJECT (window), "delete_event",
|
||||
(GtkSignalFunc) gtk_exit, NULL);
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
gtk_widget_show (vbox);
|
||||
|
||||
entry = gtk_entry_new_with_max_length (50);
|
||||
gtk_signal_connect(GTK_OBJECT(entry), "activate",
|
||||
GTK_SIGNAL_FUNC(enter_callback),
|
||||
entry);
|
||||
gtk_entry_set_text (GTK_ENTRY (entry), "hello");
|
||||
gtk_entry_append_text (GTK_ENTRY (entry), " world");
|
||||
gtk_entry_select_region (GTK_ENTRY (entry),
|
||||
0, GTK_ENTRY(entry)->text_length);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);
|
||||
gtk_widget_show (entry);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (vbox), hbox);
|
||||
gtk_widget_show (hbox);
|
||||
|
||||
check = gtk_check_button_new_with_label("Editable");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT(check), "toggled",
|
||||
GTK_SIGNAL_FUNC(entry_toggle_editable), entry);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), TRUE);
|
||||
gtk_widget_show (check);
|
||||
|
||||
check = gtk_check_button_new_with_label("Visible");
|
||||
gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);
|
||||
gtk_signal_connect (GTK_OBJECT(check), "toggled",
|
||||
GTK_SIGNAL_FUNC(entry_toggle_visibility), entry);
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(check), TRUE);
|
||||
gtk_widget_show (check);
|
||||
|
||||
button = gtk_button_new_with_label ("Close");
|
||||
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC(gtk_exit),
|
||||
GTK_OBJECT (window));
|
||||
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
|
||||
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
|
||||
gtk_widget_grab_default (button);
|
||||
gtk_widget_show (button);
|
||||
|
||||
gtk_widget_show(window);
|
||||
|
||||
gtk_main();
|
||||
return(0);
|
||||
}
|
||||
/* example-end */
|
||||
8
examples/eventbox/Makefile
Normal file
8
examples/eventbox/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
eventbox: eventbox.c
|
||||
$(CC) `gtk-config --cflags` eventbox.c -o eventbox `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o eventbox
|
||||
54
examples/eventbox/eventbox.c
Normal file
54
examples/eventbox/eventbox.c
Normal file
@@ -0,0 +1,54 @@
|
||||
/* example-start eventbox eventbox.c */
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *event_box;
|
||||
GtkWidget *label;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Event Box");
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
GTK_SIGNAL_FUNC (gtk_exit), NULL);
|
||||
|
||||
gtk_container_border_width (GTK_CONTAINER (window), 10);
|
||||
|
||||
/* Create an EventBox and add it to our toplevel window */
|
||||
|
||||
event_box = gtk_event_box_new ();
|
||||
gtk_container_add (GTK_CONTAINER(window), event_box);
|
||||
gtk_widget_show (event_box);
|
||||
|
||||
/* Create a long label */
|
||||
|
||||
label = gtk_label_new ("Click here to quit, quit, quit, quit, quit");
|
||||
gtk_container_add (GTK_CONTAINER (event_box), label);
|
||||
gtk_widget_show (label);
|
||||
|
||||
/* Clip it short. */
|
||||
gtk_widget_set_usize (label, 110, 20);
|
||||
|
||||
/* And bind an action to it */
|
||||
gtk_widget_set_events (event_box, GDK_BUTTON_PRESS_MASK);
|
||||
gtk_signal_connect (GTK_OBJECT(event_box), "button_press_event",
|
||||
GTK_SIGNAL_FUNC (gtk_exit), NULL);
|
||||
|
||||
/* Yet one more thing you need an X window for ... */
|
||||
|
||||
gtk_widget_realize (event_box);
|
||||
gdk_window_set_cursor (event_box->window, gdk_cursor_new (GDK_HAND1));
|
||||
|
||||
gtk_widget_show (window);
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
/* example-end */
|
||||
59
examples/extract.awk
Normal file
59
examples/extract.awk
Normal file
@@ -0,0 +1,59 @@
|
||||
# extract - extract C source files from GTK Tutorial
|
||||
# Copyright (C) Tony Gale 1998
|
||||
# Contact: gale@gtk.org
|
||||
#
|
||||
# Command Switches:
|
||||
# -c : Just do checking rather than output files
|
||||
# -f <filename> : Extract a specific file
|
||||
# -d : Extract files to current directory
|
||||
|
||||
BEGIN {in_example=0; check=0; spec_example=""; do_output=0; flatten=0
|
||||
for (i=0 ; i < ARGC ; i++) {
|
||||
if ( ARGV[i] == "-c" ) {
|
||||
check = 1;
|
||||
ARGV[i]="";
|
||||
} else if ( ARGV[i] == "-f" ) {
|
||||
spec_example=ARGV[i+1];
|
||||
ARGV[i]="";
|
||||
ARGV[i+1]="";
|
||||
if ( length(spec_example) == 0 ) {
|
||||
print "usage: -f <filename>";
|
||||
exit;
|
||||
}
|
||||
} else if ( ARGV[i] == "-d" ) {
|
||||
flatten = 1;
|
||||
ARGV[i]="";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$2 == "example-start" && in_example == 1 { printf("\nERROR: nested example at line %d\n", NR) > "/dev/stderr";
|
||||
exit}
|
||||
|
||||
$2 == "example-start" { in_example=1 }
|
||||
|
||||
$2 == "example-start" && check == 0 \
|
||||
{ if ( (spec_example == "") || (spec_example == $4) ) {
|
||||
if ( flatten == 0 ) {
|
||||
if (file_name != "")
|
||||
close(file_name);
|
||||
file_name = sprintf("%s/%s",$3, $4);
|
||||
command = sprintf("mkdir -p %s", $3);
|
||||
system(command);
|
||||
} else {
|
||||
file_name = $4;
|
||||
}
|
||||
do_output=1;
|
||||
}
|
||||
}
|
||||
|
||||
in_example==1 && check==0 && do_output==1 { gsub(/&/, "\\&", $0);
|
||||
print $0 >file_name }
|
||||
|
||||
$2 == "example-end" && in_example == 0 { printf("\nERROR: multiple ends at line %d\n", NR) > "/dev/stderr";
|
||||
exit}
|
||||
$2 == "example-end" { in_example=0; do_output=0 }
|
||||
|
||||
|
||||
END {}
|
||||
|
||||
28
examples/extract.sh
Executable file
28
examples/extract.sh
Executable file
@@ -0,0 +1,28 @@
|
||||
#! /bin/sh
|
||||
# extract - extract C source files from GTK Tutorial
|
||||
# Copyright (C) Tony Gale 1998
|
||||
# Contact: gale@gtk.org
|
||||
#
|
||||
# extract.awk command Switches:
|
||||
# -c : Just do checking rather than output files
|
||||
# -f <filename> : Extract a specific file
|
||||
# -d : Extract files to current directory
|
||||
|
||||
if [ -x /usr/bin/gawk ]; then
|
||||
gawk -f extract.awk ../docs/gtk_tut.sgml $1 $2 $3 $4 $5
|
||||
else
|
||||
if [ -x /usr/bin/nawk ]; then
|
||||
nawk -f extract.awk ../docs/gtk_tut.sgml $1 $2 $3 $4 $5
|
||||
else
|
||||
if [ -x /usr/bin/awk ]; then
|
||||
awk -f extract.awk ../docs/gtk_tut.sgml $1 $2 $3 $4 $5
|
||||
else
|
||||
if [ -x /bin/awk ]; then
|
||||
awk -f extract.awk ../docs/gtk_tut.sgml $1 $2 $3 $4 $5
|
||||
else
|
||||
echo "Can't find awk... please edit extract.sh by hand"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
8
examples/filesel/Makefile
Normal file
8
examples/filesel/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
filesel: filesel.c
|
||||
$(CC) `gtk-config --cflags` filesel.c -o filesel `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o filesel
|
||||
45
examples/filesel/filesel.c
Normal file
45
examples/filesel/filesel.c
Normal file
@@ -0,0 +1,45 @@
|
||||
/* example-start filesel filesel.c */
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
/* Get the selected filename and print it to the console */
|
||||
void file_ok_sel (GtkWidget *w, GtkFileSelection *fs)
|
||||
{
|
||||
g_print ("%s\n", gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)));
|
||||
}
|
||||
|
||||
void destroy (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
GtkWidget *filew;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
/* Create a new file selection widget */
|
||||
filew = gtk_file_selection_new ("File selection");
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (filew), "destroy",
|
||||
(GtkSignalFunc) destroy, &filew);
|
||||
/* Connect the ok_button to file_ok_sel function */
|
||||
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
|
||||
"clicked", (GtkSignalFunc) file_ok_sel, filew );
|
||||
|
||||
/* Connect the cancel_button to destroy the widget */
|
||||
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button),
|
||||
"clicked", (GtkSignalFunc) gtk_widget_destroy,
|
||||
GTK_OBJECT (filew));
|
||||
|
||||
/* Lets set the filename, as if this were a save dialog, and we are giving
|
||||
a default filename */
|
||||
gtk_file_selection_set_filename (GTK_FILE_SELECTION(filew),
|
||||
"penguin.png");
|
||||
|
||||
gtk_widget_show(filew);
|
||||
gtk_main ();
|
||||
return 0;
|
||||
}
|
||||
/* example-end */
|
||||
4
examples/find-examples.sh
Executable file
4
examples/find-examples.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
find . -name CVS -prune -o \
|
||||
-not \( -type d -o -name Makefile.am -o -name find-examples.sh \) -print |
|
||||
sed 's%\./\(.*\)% examples/\1 \\%'
|
||||
echo " examples/find-examples.sh"
|
||||
14
examples/gtkdial/Makefile
Normal file
14
examples/gtkdial/Makefile
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
dial_test: gtkdial.o dial_test.o
|
||||
$(CC) dial_test.o gtkdial.o -o dial_test `gtk-config --libs`
|
||||
|
||||
dial_test.o: dial_test.c gtkdial.h
|
||||
$(CC) `gtk-config --cflags` -c dial_test.c -o dial_test.o
|
||||
|
||||
gtkdial.o: gtkdial.c gtkdial.h
|
||||
$(CC) `gtk-config --cflags` -c gtkdial.c -o gtkdial.o
|
||||
|
||||
clean:
|
||||
rm -f *.o dial_test
|
||||
64
examples/gtkdial/dial_test.c
Normal file
64
examples/gtkdial/dial_test.c
Normal file
@@ -0,0 +1,64 @@
|
||||
#include <gtk/gtk.h>
|
||||
#include "gtkdial.h"
|
||||
|
||||
void
|
||||
value_changed (GtkAdjustment *adjustment, GtkWidget *label)
|
||||
{
|
||||
char buffer[16];
|
||||
|
||||
sprintf(buffer,"%4.2f",adjustment->value);
|
||||
gtk_label_set (GTK_LABEL (label), buffer);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkAdjustment *adjustment;
|
||||
GtkWidget *dial;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *label;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Dial");
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
GTK_SIGNAL_FUNC (gtk_exit), NULL);
|
||||
|
||||
gtk_container_border_width (GTK_CONTAINER (window), 10);
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 5);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
gtk_widget_show(vbox);
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
|
||||
gtk_box_pack_start (GTK_BOX(vbox), frame, TRUE, TRUE, 0);
|
||||
gtk_widget_show (frame);
|
||||
|
||||
adjustment = GTK_ADJUSTMENT(gtk_adjustment_new (0, -1.0, 1.0, 0.01, 0.1, 0));
|
||||
|
||||
dial = gtk_dial_new(adjustment);
|
||||
gtk_dial_set_update_policy (GTK_DIAL(dial), GTK_UPDATE_DELAYED);
|
||||
/* gtk_widget_set_usize (dial, 100, 100); */
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (frame), dial);
|
||||
gtk_widget_show (dial);
|
||||
|
||||
label = gtk_label_new("0.00");
|
||||
gtk_box_pack_start (GTK_BOX(vbox), label, TRUE, TRUE, 0);
|
||||
gtk_widget_show (label);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT(adjustment), "value_changed",
|
||||
GTK_SIGNAL_FUNC (value_changed), label);
|
||||
|
||||
gtk_widget_show (window);
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
592
examples/gtkdial/gtkdial.c
Normal file
592
examples/gtkdial/gtkdial.c
Normal file
@@ -0,0 +1,592 @@
|
||||
/* example-start gtkdial gtkdial.c */
|
||||
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <gtk/gtkmain.h>
|
||||
#include <gtk/gtksignal.h>
|
||||
|
||||
#include "gtkdial.h"
|
||||
|
||||
#define SCROLL_DELAY_LENGTH 300
|
||||
#define DIAL_DEFAULT_SIZE 100
|
||||
|
||||
/* Forward declarations */
|
||||
|
||||
static void gtk_dial_class_init (GtkDialClass *klass);
|
||||
static void gtk_dial_init (GtkDial *dial);
|
||||
static void gtk_dial_destroy (GtkObject *object);
|
||||
static void gtk_dial_realize (GtkWidget *widget);
|
||||
static void gtk_dial_size_request (GtkWidget *widget,
|
||||
GtkRequisition *requisition);
|
||||
static void gtk_dial_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation);
|
||||
static gint gtk_dial_expose (GtkWidget *widget,
|
||||
GdkEventExpose *event);
|
||||
static gint gtk_dial_button_press (GtkWidget *widget,
|
||||
GdkEventButton *event);
|
||||
static gint gtk_dial_button_release (GtkWidget *widget,
|
||||
GdkEventButton *event);
|
||||
static gint gtk_dial_motion_notify (GtkWidget *widget,
|
||||
GdkEventMotion *event);
|
||||
static gint gtk_dial_timer (GtkDial *dial);
|
||||
|
||||
static void gtk_dial_update_mouse (GtkDial *dial, gint x, gint y);
|
||||
static void gtk_dial_update (GtkDial *dial);
|
||||
static void gtk_dial_adjustment_changed (GtkAdjustment *adjustment,
|
||||
gpointer data);
|
||||
static void gtk_dial_adjustment_value_changed (GtkAdjustment *adjustment,
|
||||
gpointer data);
|
||||
|
||||
/* Local data */
|
||||
|
||||
static GtkWidgetClass *parent_class = NULL;
|
||||
|
||||
guint
|
||||
gtk_dial_get_type ()
|
||||
{
|
||||
static guint dial_type = 0;
|
||||
|
||||
if (!dial_type)
|
||||
{
|
||||
GtkTypeInfo dial_info =
|
||||
{
|
||||
"GtkDial",
|
||||
sizeof (GtkDial),
|
||||
sizeof (GtkDialClass),
|
||||
(GtkClassInitFunc) gtk_dial_class_init,
|
||||
(GtkObjectInitFunc) gtk_dial_init,
|
||||
(GtkArgSetFunc) NULL,
|
||||
(GtkArgGetFunc) NULL,
|
||||
};
|
||||
|
||||
dial_type = gtk_type_unique (gtk_widget_get_type (), &dial_info);
|
||||
}
|
||||
|
||||
return dial_type;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_class_init (GtkDialClass *class)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
GtkWidgetClass *widget_class;
|
||||
|
||||
object_class = (GtkObjectClass*) class;
|
||||
widget_class = (GtkWidgetClass*) class;
|
||||
|
||||
parent_class = gtk_type_class (gtk_widget_get_type ());
|
||||
|
||||
object_class->destroy = gtk_dial_destroy;
|
||||
|
||||
widget_class->realize = gtk_dial_realize;
|
||||
widget_class->expose_event = gtk_dial_expose;
|
||||
widget_class->size_request = gtk_dial_size_request;
|
||||
widget_class->size_allocate = gtk_dial_size_allocate;
|
||||
widget_class->button_press_event = gtk_dial_button_press;
|
||||
widget_class->button_release_event = gtk_dial_button_release;
|
||||
widget_class->motion_notify_event = gtk_dial_motion_notify;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_init (GtkDial *dial)
|
||||
{
|
||||
dial->button = 0;
|
||||
dial->policy = GTK_UPDATE_CONTINUOUS;
|
||||
dial->timer = 0;
|
||||
dial->radius = 0;
|
||||
dial->pointer_width = 0;
|
||||
dial->angle = 0.0;
|
||||
dial->old_value = 0.0;
|
||||
dial->old_lower = 0.0;
|
||||
dial->old_upper = 0.0;
|
||||
dial->adjustment = NULL;
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
gtk_dial_new (GtkAdjustment *adjustment)
|
||||
{
|
||||
GtkDial *dial;
|
||||
|
||||
dial = gtk_type_new (gtk_dial_get_type ());
|
||||
|
||||
if (!adjustment)
|
||||
adjustment = (GtkAdjustment*) gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
|
||||
|
||||
gtk_dial_set_adjustment (dial, adjustment);
|
||||
|
||||
return GTK_WIDGET (dial);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_destroy (GtkObject *object)
|
||||
{
|
||||
GtkDial *dial;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GTK_IS_DIAL (object));
|
||||
|
||||
dial = GTK_DIAL (object);
|
||||
|
||||
if (dial->adjustment)
|
||||
gtk_object_unref (GTK_OBJECT (dial->adjustment));
|
||||
|
||||
if (GTK_OBJECT_CLASS (parent_class)->destroy)
|
||||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||
}
|
||||
|
||||
GtkAdjustment*
|
||||
gtk_dial_get_adjustment (GtkDial *dial)
|
||||
{
|
||||
g_return_val_if_fail (dial != NULL, NULL);
|
||||
g_return_val_if_fail (GTK_IS_DIAL (dial), NULL);
|
||||
|
||||
return dial->adjustment;
|
||||
}
|
||||
|
||||
void
|
||||
gtk_dial_set_update_policy (GtkDial *dial,
|
||||
GtkUpdateType policy)
|
||||
{
|
||||
g_return_if_fail (dial != NULL);
|
||||
g_return_if_fail (GTK_IS_DIAL (dial));
|
||||
|
||||
dial->policy = policy;
|
||||
}
|
||||
|
||||
void
|
||||
gtk_dial_set_adjustment (GtkDial *dial,
|
||||
GtkAdjustment *adjustment)
|
||||
{
|
||||
g_return_if_fail (dial != NULL);
|
||||
g_return_if_fail (GTK_IS_DIAL (dial));
|
||||
|
||||
if (dial->adjustment)
|
||||
{
|
||||
gtk_signal_disconnect_by_data (GTK_OBJECT (dial->adjustment), (gpointer) dial);
|
||||
gtk_object_unref (GTK_OBJECT (dial->adjustment));
|
||||
}
|
||||
|
||||
dial->adjustment = adjustment;
|
||||
gtk_object_ref (GTK_OBJECT (dial->adjustment));
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (adjustment), "changed",
|
||||
(GtkSignalFunc) gtk_dial_adjustment_changed,
|
||||
(gpointer) dial);
|
||||
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
|
||||
(GtkSignalFunc) gtk_dial_adjustment_value_changed,
|
||||
(gpointer) dial);
|
||||
|
||||
dial->old_value = adjustment->value;
|
||||
dial->old_lower = adjustment->lower;
|
||||
dial->old_upper = adjustment->upper;
|
||||
|
||||
gtk_dial_update (dial);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_realize (GtkWidget *widget)
|
||||
{
|
||||
GtkDial *dial;
|
||||
GdkWindowAttr attributes;
|
||||
gint attributes_mask;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_DIAL (widget));
|
||||
|
||||
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
|
||||
dial = GTK_DIAL (widget);
|
||||
|
||||
attributes.x = widget->allocation.x;
|
||||
attributes.y = widget->allocation.y;
|
||||
attributes.width = widget->allocation.width;
|
||||
attributes.height = widget->allocation.height;
|
||||
attributes.wclass = GDK_INPUT_OUTPUT;
|
||||
attributes.window_type = GDK_WINDOW_CHILD;
|
||||
attributes.event_mask = gtk_widget_get_events (widget) |
|
||||
GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
|
||||
GDK_POINTER_MOTION_HINT_MASK;
|
||||
attributes.visual = gtk_widget_get_visual (widget);
|
||||
attributes.colormap = gtk_widget_get_colormap (widget);
|
||||
|
||||
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
|
||||
widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask);
|
||||
|
||||
widget->style = gtk_style_attach (widget->style, widget->window);
|
||||
|
||||
gdk_window_set_user_data (widget->window, widget);
|
||||
|
||||
gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_size_request (GtkWidget *widget,
|
||||
GtkRequisition *requisition)
|
||||
{
|
||||
requisition->width = DIAL_DEFAULT_SIZE;
|
||||
requisition->height = DIAL_DEFAULT_SIZE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation)
|
||||
{
|
||||
GtkDial *dial;
|
||||
|
||||
g_return_if_fail (widget != NULL);
|
||||
g_return_if_fail (GTK_IS_DIAL (widget));
|
||||
g_return_if_fail (allocation != NULL);
|
||||
|
||||
widget->allocation = *allocation;
|
||||
dial = GTK_DIAL (widget);
|
||||
|
||||
if (GTK_WIDGET_REALIZED (widget))
|
||||
{
|
||||
|
||||
gdk_window_move_resize (widget->window,
|
||||
allocation->x, allocation->y,
|
||||
allocation->width, allocation->height);
|
||||
|
||||
}
|
||||
dial->radius = MIN(allocation->width,allocation->height) * 0.45;
|
||||
dial->pointer_width = dial->radius / 5;
|
||||
}
|
||||
|
||||
static gint
|
||||
gtk_dial_expose (GtkWidget *widget,
|
||||
GdkEventExpose *event)
|
||||
{
|
||||
GtkDial *dial;
|
||||
GdkPoint points[3];
|
||||
gdouble s,c;
|
||||
gdouble theta;
|
||||
gint xc, yc;
|
||||
gint tick_length;
|
||||
gint i;
|
||||
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
if (event->count > 0)
|
||||
return FALSE;
|
||||
|
||||
dial = GTK_DIAL (widget);
|
||||
|
||||
gdk_window_clear_area (widget->window,
|
||||
0, 0,
|
||||
widget->allocation.width,
|
||||
widget->allocation.height);
|
||||
|
||||
xc = widget->allocation.width/2;
|
||||
yc = widget->allocation.height/2;
|
||||
|
||||
/* Draw ticks */
|
||||
|
||||
for (i=0; i<25; i++)
|
||||
{
|
||||
theta = (i*M_PI/18. - M_PI/6.);
|
||||
s = sin(theta);
|
||||
c = cos(theta);
|
||||
|
||||
tick_length = (i%6 == 0) ? dial->pointer_width : dial->pointer_width/2;
|
||||
|
||||
gdk_draw_line (widget->window,
|
||||
widget->style->fg_gc[widget->state],
|
||||
xc + c*(dial->radius - tick_length),
|
||||
yc - s*(dial->radius - tick_length),
|
||||
xc + c*dial->radius,
|
||||
yc - s*dial->radius);
|
||||
}
|
||||
|
||||
/* Draw pointer */
|
||||
|
||||
s = sin(dial->angle);
|
||||
c = cos(dial->angle);
|
||||
|
||||
|
||||
points[0].x = xc + s*dial->pointer_width/2;
|
||||
points[0].y = yc + c*dial->pointer_width/2;
|
||||
points[1].x = xc + c*dial->radius;
|
||||
points[1].y = yc - s*dial->radius;
|
||||
points[2].x = xc - s*dial->pointer_width/2;
|
||||
points[2].y = yc - c*dial->pointer_width/2;
|
||||
|
||||
gtk_draw_polygon (widget->style,
|
||||
widget->window,
|
||||
GTK_STATE_NORMAL,
|
||||
GTK_SHADOW_OUT,
|
||||
points, 3,
|
||||
TRUE);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gint
|
||||
gtk_dial_button_press (GtkWidget *widget,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
GtkDial *dial;
|
||||
gint dx, dy;
|
||||
double s, c;
|
||||
double d_parallel;
|
||||
double d_perpendicular;
|
||||
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
dial = GTK_DIAL (widget);
|
||||
|
||||
/* Determine if button press was within pointer region - we
|
||||
do this by computing the parallel and perpendicular distance of
|
||||
the point where the mouse was pressed from the line passing through
|
||||
the pointer */
|
||||
|
||||
dx = event->x - widget->allocation.width / 2;
|
||||
dy = widget->allocation.height / 2 - event->y;
|
||||
|
||||
s = sin(dial->angle);
|
||||
c = cos(dial->angle);
|
||||
|
||||
d_parallel = s*dy + c*dx;
|
||||
d_perpendicular = fabs(s*dx - c*dy);
|
||||
|
||||
if (!dial->button &&
|
||||
(d_perpendicular < dial->pointer_width/2) &&
|
||||
(d_parallel > - dial->pointer_width))
|
||||
{
|
||||
gtk_grab_add (widget);
|
||||
|
||||
dial->button = event->button;
|
||||
|
||||
gtk_dial_update_mouse (dial, event->x, event->y);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gint
|
||||
gtk_dial_button_release (GtkWidget *widget,
|
||||
GdkEventButton *event)
|
||||
{
|
||||
GtkDial *dial;
|
||||
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
dial = GTK_DIAL (widget);
|
||||
|
||||
if (dial->button == event->button)
|
||||
{
|
||||
gtk_grab_remove (widget);
|
||||
|
||||
dial->button = 0;
|
||||
|
||||
if (dial->policy == GTK_UPDATE_DELAYED)
|
||||
gtk_timeout_remove (dial->timer);
|
||||
|
||||
if ((dial->policy != GTK_UPDATE_CONTINUOUS) &&
|
||||
(dial->old_value != dial->adjustment->value))
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gint
|
||||
gtk_dial_motion_notify (GtkWidget *widget,
|
||||
GdkEventMotion *event)
|
||||
{
|
||||
GtkDial *dial;
|
||||
GdkModifierType mods;
|
||||
gint x, y, mask;
|
||||
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_DIAL (widget), FALSE);
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
dial = GTK_DIAL (widget);
|
||||
|
||||
if (dial->button != 0)
|
||||
{
|
||||
x = event->x;
|
||||
y = event->y;
|
||||
|
||||
if (event->is_hint || (event->window != widget->window))
|
||||
gdk_window_get_pointer (widget->window, &x, &y, &mods);
|
||||
|
||||
switch (dial->button)
|
||||
{
|
||||
case 1:
|
||||
mask = GDK_BUTTON1_MASK;
|
||||
break;
|
||||
case 2:
|
||||
mask = GDK_BUTTON2_MASK;
|
||||
break;
|
||||
case 3:
|
||||
mask = GDK_BUTTON3_MASK;
|
||||
break;
|
||||
default:
|
||||
mask = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (mods & mask)
|
||||
gtk_dial_update_mouse (dial, x,y);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gint
|
||||
gtk_dial_timer (GtkDial *dial)
|
||||
{
|
||||
g_return_val_if_fail (dial != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_DIAL (dial), FALSE);
|
||||
|
||||
if (dial->policy == GTK_UPDATE_DELAYED)
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_update_mouse (GtkDial *dial, gint x, gint y)
|
||||
{
|
||||
gint xc, yc;
|
||||
gfloat old_value;
|
||||
|
||||
g_return_if_fail (dial != NULL);
|
||||
g_return_if_fail (GTK_IS_DIAL (dial));
|
||||
|
||||
xc = GTK_WIDGET(dial)->allocation.width / 2;
|
||||
yc = GTK_WIDGET(dial)->allocation.height / 2;
|
||||
|
||||
old_value = dial->adjustment->value;
|
||||
dial->angle = atan2(yc-y, x-xc);
|
||||
|
||||
if (dial->angle < -M_PI/2.)
|
||||
dial->angle += 2*M_PI;
|
||||
|
||||
if (dial->angle < -M_PI/6)
|
||||
dial->angle = -M_PI/6;
|
||||
|
||||
if (dial->angle > 7.*M_PI/6.)
|
||||
dial->angle = 7.*M_PI/6.;
|
||||
|
||||
dial->adjustment->value = dial->adjustment->lower + (7.*M_PI/6 - dial->angle) *
|
||||
(dial->adjustment->upper - dial->adjustment->lower) / (4.*M_PI/3.);
|
||||
|
||||
if (dial->adjustment->value != old_value)
|
||||
{
|
||||
if (dial->policy == GTK_UPDATE_CONTINUOUS)
|
||||
{
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_draw (GTK_WIDGET(dial), NULL);
|
||||
|
||||
if (dial->policy == GTK_UPDATE_DELAYED)
|
||||
{
|
||||
if (dial->timer)
|
||||
gtk_timeout_remove (dial->timer);
|
||||
|
||||
dial->timer = gtk_timeout_add (SCROLL_DELAY_LENGTH,
|
||||
(GtkFunction) gtk_dial_timer,
|
||||
(gpointer) dial);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_update (GtkDial *dial)
|
||||
{
|
||||
gfloat new_value;
|
||||
|
||||
g_return_if_fail (dial != NULL);
|
||||
g_return_if_fail (GTK_IS_DIAL (dial));
|
||||
|
||||
new_value = dial->adjustment->value;
|
||||
|
||||
if (new_value < dial->adjustment->lower)
|
||||
new_value = dial->adjustment->lower;
|
||||
|
||||
if (new_value > dial->adjustment->upper)
|
||||
new_value = dial->adjustment->upper;
|
||||
|
||||
if (new_value != dial->adjustment->value)
|
||||
{
|
||||
dial->adjustment->value = new_value;
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (dial->adjustment), "value_changed");
|
||||
}
|
||||
|
||||
dial->angle = 7.*M_PI/6. - (new_value - dial->adjustment->lower) * 4.*M_PI/3. /
|
||||
(dial->adjustment->upper - dial->adjustment->lower);
|
||||
|
||||
gtk_widget_draw (GTK_WIDGET(dial), NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_adjustment_changed (GtkAdjustment *adjustment,
|
||||
gpointer data)
|
||||
{
|
||||
GtkDial *dial;
|
||||
|
||||
g_return_if_fail (adjustment != NULL);
|
||||
g_return_if_fail (data != NULL);
|
||||
|
||||
dial = GTK_DIAL (data);
|
||||
|
||||
if ((dial->old_value != adjustment->value) ||
|
||||
(dial->old_lower != adjustment->lower) ||
|
||||
(dial->old_upper != adjustment->upper))
|
||||
{
|
||||
gtk_dial_update (dial);
|
||||
|
||||
dial->old_value = adjustment->value;
|
||||
dial->old_lower = adjustment->lower;
|
||||
dial->old_upper = adjustment->upper;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dial_adjustment_value_changed (GtkAdjustment *adjustment,
|
||||
gpointer data)
|
||||
{
|
||||
GtkDial *dial;
|
||||
|
||||
g_return_if_fail (adjustment != NULL);
|
||||
g_return_if_fail (data != NULL);
|
||||
|
||||
dial = GTK_DIAL (data);
|
||||
|
||||
if (dial->old_value != adjustment->value)
|
||||
{
|
||||
gtk_dial_update (dial);
|
||||
|
||||
dial->old_value = adjustment->value;
|
||||
}
|
||||
}
|
||||
/* example-end */
|
||||
92
examples/gtkdial/gtkdial.h
Normal file
92
examples/gtkdial/gtkdial.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/* example-start gtkdial gtkdial.h */
|
||||
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#ifndef __GTK_DIAL_H__
|
||||
#define __GTK_DIAL_H__
|
||||
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <gtk/gtkadjustment.h>
|
||||
#include <gtk/gtkwidget.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
#define GTK_DIAL(obj) GTK_CHECK_CAST (obj, gtk_dial_get_type (), GtkDial)
|
||||
#define GTK_DIAL_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_dial_get_type (), GtkDialClass)
|
||||
#define GTK_IS_DIAL(obj) GTK_CHECK_TYPE (obj, gtk_dial_get_type ())
|
||||
|
||||
|
||||
typedef struct _GtkDial GtkDial;
|
||||
typedef struct _GtkDialClass GtkDialClass;
|
||||
|
||||
struct _GtkDial
|
||||
{
|
||||
GtkWidget widget;
|
||||
|
||||
/* update policy (GTK_UPDATE_[CONTINUOUS/DELAYED/DISCONTINUOUS]) */
|
||||
guint policy : 2;
|
||||
|
||||
/* Button currently pressed or 0 if none */
|
||||
guint8 button;
|
||||
|
||||
/* Dimensions of dial components */
|
||||
gint radius;
|
||||
gint pointer_width;
|
||||
|
||||
/* ID of update timer, or 0 if none */
|
||||
guint32 timer;
|
||||
|
||||
/* Current angle */
|
||||
gfloat angle;
|
||||
|
||||
/* Old values from adjustment stored so we know when something changes */
|
||||
gfloat old_value;
|
||||
gfloat old_lower;
|
||||
gfloat old_upper;
|
||||
|
||||
/* The adjustment object that stores the data for this dial */
|
||||
GtkAdjustment *adjustment;
|
||||
};
|
||||
|
||||
struct _GtkDialClass
|
||||
{
|
||||
GtkWidgetClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GtkWidget* gtk_dial_new (GtkAdjustment *adjustment);
|
||||
guint gtk_dial_get_type (void);
|
||||
GtkAdjustment* gtk_dial_get_adjustment (GtkDial *dial);
|
||||
void gtk_dial_set_update_policy (GtkDial *dial,
|
||||
GtkUpdateType policy);
|
||||
|
||||
void gtk_dial_set_adjustment (GtkDial *dial,
|
||||
GtkAdjustment *adjustment);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
#endif /* __GTK_DIAL_H__ */
|
||||
/* example-end */
|
||||
8
examples/helloworld/Makefile
Normal file
8
examples/helloworld/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
helloworld: helloworld.c
|
||||
$(CC) `gtk-config --cflags` helloworld.c -o helloworld `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o helloworld
|
||||
101
examples/helloworld/helloworld.c
Normal file
101
examples/helloworld/helloworld.c
Normal file
@@ -0,0 +1,101 @@
|
||||
/* example-start helloworld helloworld.c */
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
/* This is a callback function. The data arguments are ignored
|
||||
* in this example. More on callbacks below. */
|
||||
void hello( GtkWidget *widget,
|
||||
gpointer data )
|
||||
{
|
||||
g_print ("Hello World\n");
|
||||
}
|
||||
|
||||
gint delete_event( GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
gpointer data )
|
||||
{
|
||||
/* If you return FALSE in the "delete_event" signal handler,
|
||||
* GTK will emit the "destroy" signal. Returning TRUE means
|
||||
* you don't want the window to be destroyed.
|
||||
* This is useful for popping up 'are you sure you want to quit?'
|
||||
* type dialogs. */
|
||||
|
||||
g_print ("delete event occurred\n");
|
||||
|
||||
/* Change TRUE to FALSE and the main window will be destroyed with
|
||||
* a "delete_event". */
|
||||
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
/* Another callback */
|
||||
void destroy( GtkWidget *widget,
|
||||
gpointer data )
|
||||
{
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
int main( int argc,
|
||||
char *argv[] )
|
||||
{
|
||||
/* GtkWidget is the storage type for widgets */
|
||||
GtkWidget *window;
|
||||
GtkWidget *button;
|
||||
|
||||
/* This is called in all GTK applications. Arguments are parsed
|
||||
* from the command line and are returned to the application. */
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
/* create a new window */
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
/* When the window is given the "delete_event" signal (this is given
|
||||
* by the window manager, usually by the 'close' option, or on the
|
||||
* titlebar), we ask it to call the delete_event () function
|
||||
* as defined above. The data passed to the callback
|
||||
* function is NULL and is ignored in the callback function. */
|
||||
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
|
||||
GTK_SIGNAL_FUNC (delete_event), NULL);
|
||||
|
||||
/* Here we connect the "destroy" event to a signal handler.
|
||||
* This event occurs when we call gtk_widget_destroy() on the window,
|
||||
* or if we return 'FALSE' in the "delete_event" callback. */
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
GTK_SIGNAL_FUNC (destroy), NULL);
|
||||
|
||||
/* Sets the border width of the window. */
|
||||
gtk_container_border_width (GTK_CONTAINER (window), 10);
|
||||
|
||||
/* Creates a new button with the label "Hello World". */
|
||||
button = gtk_button_new_with_label ("Hello World");
|
||||
|
||||
/* When the button receives the "clicked" signal, it will call the
|
||||
* function hello() passing it NULL as its argument. The hello()
|
||||
* function is defined above. */
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (hello), NULL);
|
||||
|
||||
/* This will cause the window to be destroyed by calling
|
||||
* gtk_widget_destroy(window) when "clicked". Again, the destroy
|
||||
* signal could come from here, or the window manager. */
|
||||
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (gtk_widget_destroy),
|
||||
GTK_OBJECT (window));
|
||||
|
||||
/* This packs the button into the window (a gtk container). */
|
||||
gtk_container_add (GTK_CONTAINER (window), button);
|
||||
|
||||
/* The final step is to display this newly created widget. */
|
||||
gtk_widget_show (button);
|
||||
|
||||
/* and the window */
|
||||
gtk_widget_show (window);
|
||||
|
||||
/* All GTK applications must have a gtk_main(). Control ends here
|
||||
* and waits for an event to occur (like a key press or
|
||||
* mouse event). */
|
||||
gtk_main ();
|
||||
|
||||
return(0);
|
||||
}
|
||||
/* example-end */
|
||||
8
examples/helloworld2/Makefile
Normal file
8
examples/helloworld2/Makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
CC = gcc
|
||||
|
||||
helloworld2: helloworld2.c
|
||||
$(CC) `gtk-config --cflags` helloworld2.c -o helloworld2 `gtk-config --libs`
|
||||
|
||||
clean:
|
||||
rm -f *.o helloworld2
|
||||
95
examples/helloworld2/helloworld2.c
Normal file
95
examples/helloworld2/helloworld2.c
Normal file
@@ -0,0 +1,95 @@
|
||||
/* example-start helloworld2 helloworld2.c */
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
/* Our new improved callback. The data passed to this function
|
||||
* is printed to stdout. */
|
||||
void callback( GtkWidget *widget,
|
||||
gpointer data )
|
||||
{
|
||||
g_print ("Hello again - %s was pressed\n", (char *) data);
|
||||
}
|
||||
|
||||
/* another callback */
|
||||
void delete_event( GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
gpointer data )
|
||||
{
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
int main( int argc,
|
||||
char *argv[] )
|
||||
{
|
||||
/* GtkWidget is the storage type for widgets */
|
||||
GtkWidget *window;
|
||||
GtkWidget *button;
|
||||
GtkWidget *box1;
|
||||
|
||||
/* This is called in all GTK applications. Arguments are parsed
|
||||
* from the command line and are returned to the application. */
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
/* Create a new window */
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
/* This is a new call, this just sets the title of our
|
||||
* new window to "Hello Buttons!" */
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Hello Buttons!");
|
||||
|
||||
/* Here we just set a handler for delete_event that immediately
|
||||
* exits GTK. */
|
||||
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
|
||||
GTK_SIGNAL_FUNC (delete_event), NULL);
|
||||
|
||||
/* Sets the border width of the window. */
|
||||
gtk_container_border_width (GTK_CONTAINER (window), 10);
|
||||
|
||||
/* We create a box to pack widgets into. This is described in detail
|
||||
* in the "packing" section. The box is not really visible, it
|
||||
* is just used as a tool to arrange widgets. */
|
||||
box1 = gtk_hbox_new(FALSE, 0);
|
||||
|
||||
/* Put the box into the main window. */
|
||||
gtk_container_add (GTK_CONTAINER (window), box1);
|
||||
|
||||
/* Creates a new button with the label "Button 1". */
|
||||
button = gtk_button_new_with_label ("Button 1");
|
||||
|
||||
/* Now when the button is clicked, we call the "callback" function
|
||||
* with a pointer to "button 1" as its argument */
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (callback), (gpointer) "button 1");
|
||||
|
||||
/* Instead of gtk_container_add, we pack this button into the invisible
|
||||
* box, which has been packed into the window. */
|
||||
gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);
|
||||
|
||||
/* Always remember this step, this tells GTK that our preparation for
|
||||
* this button is complete, and it can now be displayed. */
|
||||
gtk_widget_show(button);
|
||||
|
||||
/* Do these same steps again to create a second button */
|
||||
button = gtk_button_new_with_label ("Button 2");
|
||||
|
||||
/* Call the same callback function with a different argument,
|
||||
* passing a pointer to "button 2" instead. */
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
GTK_SIGNAL_FUNC (callback), (gpointer) "button 2");
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);
|
||||
|
||||
/* The order in which we show the buttons is not really important, but I
|
||||
* recommend showing the window last, so it all pops up at once. */
|
||||
gtk_widget_show(button);
|
||||
|
||||
gtk_widget_show(box1);
|
||||
|
||||
gtk_widget_show (window);
|
||||
|
||||
/* Rest in gtk_main and wait for the fun to begin! */
|
||||
gtk_main ();
|
||||
|
||||
return(0);
|
||||
}
|
||||
/* example-end */
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user