Compare commits
809 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a53cfaaf7b | ||
|
|
db6282d20f | ||
|
|
c6cc1a848f | ||
|
|
98c44a0ea8 | ||
|
|
5c8d9de2fc | ||
|
|
2e931bd1fe | ||
|
|
e3005ea454 | ||
|
|
0847389581 | ||
|
|
efe53e5afc | ||
|
|
b38f5ffa52 | ||
|
|
6c988c2850 | ||
|
|
18a366a206 | ||
|
|
901449adf7 | ||
|
|
47a321f5f2 | ||
|
|
cf028a1f7b | ||
|
|
bdd163d4ea | ||
|
|
67437c8d6c | ||
|
|
f5a6279471 | ||
|
|
0fb5e6fff3 | ||
|
|
674404f171 | ||
|
|
aca43f43be | ||
|
|
512ac214c6 | ||
|
|
32c08de08c | ||
|
|
d2d45b652f | ||
|
|
895eb18412 | ||
|
|
39f0287c58 | ||
|
|
0e941cca92 | ||
|
|
22db419f52 | ||
|
|
e82aed1e95 | ||
|
|
b448ae7963 | ||
|
|
182cf3daa6 | ||
|
|
87ebfb19fd | ||
|
|
1842b87465 | ||
|
|
722517dacb | ||
|
|
aac0806ca6 | ||
|
|
1f23b40b3d | ||
|
|
cba492ae24 | ||
|
|
c8f483c228 | ||
|
|
cfbbb5d076 | ||
|
|
6f3cdac015 | ||
|
|
b763e2cdaa | ||
|
|
456b19a35a | ||
|
|
6ad897819c | ||
|
|
b256211737 | ||
|
|
4651571ec3 | ||
|
|
a6179ec639 | ||
|
|
b4565e127a | ||
|
|
31df36cbfe | ||
|
|
cd0a5fef30 | ||
|
|
6a5e53a34a | ||
|
|
0dde424db3 | ||
|
|
fcd5e44e15 | ||
|
|
73b34cbe18 | ||
|
|
b463530a72 | ||
|
|
a53a30c7f8 | ||
|
|
988f374151 | ||
|
|
96e95d0a9f | ||
|
|
b4b8a969f4 | ||
|
|
b4120d6f25 | ||
|
|
9a16a83c95 | ||
|
|
e9dfc997a0 | ||
|
|
0f6ec6e76d | ||
|
|
5deb446b50 | ||
|
|
e0d2525a52 | ||
|
|
73d9ee0e62 | ||
|
|
9d900681d7 | ||
|
|
9d2963f469 | ||
|
|
a8b315f41f | ||
|
|
273283db92 | ||
|
|
ef9a92d225 | ||
|
|
7b06b81306 | ||
|
|
1481aac73f | ||
|
|
b246dc21c6 | ||
|
|
0fd83a217b | ||
|
|
b292ecef1f | ||
|
|
f4dfcefbd5 | ||
|
|
194303fc8f | ||
|
|
e5b30eecaf | ||
|
|
f5cc6dbdfa | ||
|
|
b433772b03 | ||
|
|
4e99d8d090 | ||
|
|
0594d4e349 | ||
|
|
756c3a09af | ||
|
|
1d3fc6c0c0 | ||
|
|
a3344ef699 | ||
|
|
68135b53fc | ||
|
|
436547a80e | ||
|
|
9aa26f0d64 | ||
|
|
48791fd514 | ||
|
|
32ec6ad073 | ||
|
|
296c534663 | ||
|
|
cb35b3166e | ||
|
|
7276fbc1d1 | ||
|
|
31863fc1b4 | ||
|
|
f46c1b76d8 | ||
|
|
eaecf396bf | ||
|
|
a628761838 | ||
|
|
126adb6ef3 | ||
|
|
932ad8ad29 | ||
|
|
bcfb7a6cdd | ||
|
|
a9b9699bde | ||
|
|
51b11b36a4 | ||
|
|
59a015fb85 | ||
|
|
bba6657bb5 | ||
|
|
5e41964965 | ||
|
|
04c42b6e53 | ||
|
|
e248c6812e | ||
|
|
ff6983e400 | ||
|
|
1edd94a950 | ||
|
|
a93793dca3 | ||
|
|
483d8f3446 | ||
|
|
58e1481d38 | ||
|
|
64a7fc279c | ||
|
|
e35e112ea9 | ||
|
|
4fa78201a1 | ||
|
|
89d16a5123 | ||
|
|
c7f2c88b18 | ||
|
|
b663f3a00b | ||
|
|
0955a59563 | ||
|
|
286fff4e5f | ||
|
|
24a42839ba | ||
|
|
2a8be23d17 | ||
|
|
d3df4678ca | ||
|
|
a99d14f61c | ||
|
|
c50063397f | ||
|
|
3fd7dbc940 | ||
|
|
b01e20f1d1 | ||
|
|
1e36e40e29 | ||
|
|
205d0eb4da | ||
|
|
61525f0662 | ||
|
|
6476f6a265 | ||
|
|
d026fd4a04 | ||
|
|
33c43c9264 | ||
|
|
70b13d734d | ||
|
|
c9beb22f7b | ||
|
|
420a09363c | ||
|
|
5ff8fe6971 | ||
|
|
a6151ebb95 | ||
|
|
66becfdab1 | ||
|
|
874b7207b0 | ||
|
|
aa62d0f334 | ||
|
|
8b9601df17 | ||
|
|
c7cf1f531d | ||
|
|
33f7754a71 | ||
|
|
1c993d52b8 | ||
|
|
8725dca380 | ||
|
|
8c7dca8c79 | ||
|
|
021c4d7e2e | ||
|
|
29fe165511 | ||
|
|
e19d620267 | ||
|
|
65ee452a99 | ||
|
|
39acc6488a | ||
|
|
c91be5893b | ||
|
|
e994543ee7 | ||
|
|
dd82b30433 | ||
|
|
bd8e9085ab | ||
|
|
6ab7b87a02 | ||
|
|
a0fc947f89 | ||
|
|
370f0d1d86 | ||
|
|
7c675b34c5 | ||
|
|
d5bc1b66d2 | ||
|
|
19623af04e | ||
|
|
18a6d9803e | ||
|
|
1892c64acc | ||
|
|
59fbfd6205 | ||
|
|
c1958ae9f2 | ||
|
|
14154dac31 | ||
|
|
38af387ee3 | ||
|
|
c9ef2d019e | ||
|
|
7d5d0a19e7 | ||
|
|
a40d0b44e1 | ||
|
|
af8c3fe98e | ||
|
|
59298d9e82 | ||
|
|
132ccf021f | ||
|
|
7cf53a9f60 | ||
|
|
2b83d03604 | ||
|
|
5a5737e3b6 | ||
|
|
a124d17825 | ||
|
|
9d96830571 | ||
|
|
6499088f7f | ||
|
|
3d87ee7716 | ||
|
|
6cbbc789d5 | ||
|
|
5834691e69 | ||
|
|
3a77b7e005 | ||
|
|
ded10365a1 | ||
|
|
3af04c1dce | ||
|
|
fe8ed0a3f6 | ||
|
|
af5f593b6d | ||
|
|
8f33324750 | ||
|
|
aeace5d005 | ||
|
|
a861fa0f92 | ||
|
|
0c33f0e958 | ||
|
|
e4bf7a2a3c | ||
|
|
4403cf0567 | ||
|
|
2ea4cef672 | ||
|
|
ee1bd4cc6d | ||
|
|
349e9cce9a | ||
|
|
2c704dd1a1 | ||
|
|
9dfb837019 | ||
|
|
013456187e | ||
|
|
3d165c1a90 | ||
|
|
c64797fe26 | ||
|
|
0682c4015f | ||
|
|
2b02a4c342 | ||
|
|
4e4a362234 | ||
|
|
e26101adaa | ||
|
|
0f9f9ec788 | ||
|
|
8def2dc162 | ||
|
|
34490abc84 | ||
|
|
8977275f28 | ||
|
|
49c1580b70 | ||
|
|
f43a8675b8 | ||
|
|
0561c7a68d | ||
|
|
7bd7c02a11 | ||
|
|
d48542e1cd | ||
|
|
9bf03f57da | ||
|
|
aba75fdc95 | ||
|
|
8537b1cefa | ||
|
|
34f9e6a0f3 | ||
|
|
a4c3271854 | ||
|
|
e465023051 | ||
|
|
6552a8245b | ||
|
|
64d3350264 | ||
|
|
ae5f82e455 | ||
|
|
6d8010d3d4 | ||
|
|
d88b7a6d6b | ||
|
|
b95bbb5e39 | ||
|
|
a5f516c818 | ||
|
|
fb2bc139bb | ||
|
|
824aeb77c6 | ||
|
|
7a34a5971e | ||
|
|
22cd009ef7 | ||
|
|
68e943506e | ||
|
|
e79647c45d | ||
|
|
b178259235 | ||
|
|
8f8b394c96 | ||
|
|
23db27831c | ||
|
|
a7b21b1644 | ||
|
|
a846518f81 | ||
|
|
c0f9d302ec | ||
|
|
cf210a87d7 | ||
|
|
51da151a6f | ||
|
|
d8702b395d | ||
|
|
5a59a1f542 | ||
|
|
a376dcc190 | ||
|
|
e1ede022f8 | ||
|
|
25a514da8a | ||
|
|
be58a6ce2c | ||
|
|
3c2eb053d6 | ||
|
|
493d79886e | ||
|
|
c2be5f3155 | ||
|
|
c254ebb56c | ||
|
|
4c06f52d77 | ||
|
|
5f360423c5 | ||
|
|
c3b074f6e2 | ||
|
|
e9de907f9e | ||
|
|
393a1261b3 | ||
|
|
e0ea002e0d | ||
|
|
f86351c05f | ||
|
|
98b8f4a9fd | ||
|
|
a5f632d815 | ||
|
|
9ddc11fbb5 | ||
|
|
9e8b2f2521 | ||
|
|
a172dff58b | ||
|
|
f1574cbe4d | ||
|
|
c37e425341 | ||
|
|
07cecfc601 | ||
|
|
2f19600708 | ||
|
|
26799f67a9 | ||
|
|
14147de0c2 | ||
|
|
f38901509e | ||
|
|
432b7ee2bc | ||
|
|
c132b6cfc7 | ||
|
|
f191798faf | ||
|
|
24981f75a0 | ||
|
|
14df59d47c | ||
|
|
415d916129 | ||
|
|
aaa2e0b1cd | ||
|
|
7ce29eecc1 | ||
|
|
71c16bad33 | ||
|
|
d82895127e | ||
|
|
8219a413ff | ||
|
|
b1ff243c57 | ||
|
|
cc79b08441 | ||
|
|
6902813a11 | ||
|
|
abd9242f33 | ||
|
|
1b818f2e46 | ||
|
|
0b7db6888a | ||
|
|
cf14868619 | ||
|
|
bdcb8558e3 | ||
|
|
9e46e5789c | ||
|
|
85e95a765d | ||
|
|
ca4152995a | ||
|
|
eb2a54decf | ||
|
|
eb9efc9fd2 | ||
|
|
5452525143 | ||
|
|
291b044028 | ||
|
|
e4cc5c09a4 | ||
|
|
b21eb01cff | ||
|
|
7eeebd4311 | ||
|
|
609e40718d | ||
|
|
d2d52567ad | ||
|
|
f6b264a34b | ||
|
|
7466f846b7 | ||
|
|
353c7c622e | ||
|
|
2c49983041 | ||
|
|
7fd19d7a36 | ||
|
|
7c77278010 | ||
|
|
7550157d66 | ||
|
|
70d70a0607 | ||
|
|
2c0a4ff143 | ||
|
|
6573e24d59 | ||
|
|
e12140f8da | ||
|
|
3fc80381fd | ||
|
|
7c0526e9b2 | ||
|
|
7cff8c4403 | ||
|
|
442b3d265a | ||
|
|
3db7344f33 | ||
|
|
9c85042de6 | ||
|
|
35eb92138a | ||
|
|
0ab9766253 | ||
|
|
a43f2ba010 | ||
|
|
9ed76387fa | ||
|
|
449c4bc362 | ||
|
|
94a9170808 | ||
|
|
3d0a2d50f0 | ||
|
|
0ce142e58d | ||
|
|
d09a12e0d6 | ||
|
|
f9379adca2 | ||
|
|
e97ed4374f | ||
|
|
e028a5c090 | ||
|
|
b71f28037f | ||
|
|
228f30e055 | ||
|
|
3a1b2871b8 | ||
|
|
e07d7f01a8 | ||
|
|
4e86b3f617 | ||
|
|
81c3558ea1 | ||
|
|
8fd73a935d | ||
|
|
b53a66b7e2 | ||
|
|
d116261e1f | ||
|
|
022327c408 | ||
|
|
ae2b2e7cfc | ||
|
|
767b2e2604 | ||
|
|
f317dd3831 | ||
|
|
0bedb51b33 | ||
|
|
057a50d58e | ||
|
|
f5aba05c93 | ||
|
|
8b9f0402b0 | ||
|
|
aeba575e1c | ||
|
|
e635f9d98e | ||
|
|
2cc409cb65 | ||
|
|
39f0a60792 | ||
|
|
79ff1b669c | ||
|
|
f714f01b45 | ||
|
|
4fafdd98b3 | ||
|
|
0832bad2b6 | ||
|
|
bf4558b21f | ||
|
|
299a97c8ce | ||
|
|
684ffdd234 | ||
|
|
7624a08fef | ||
|
|
c1af0ceafc | ||
|
|
6dd3432ecb | ||
|
|
c22feaab35 | ||
|
|
8183d328e8 | ||
|
|
bd92a61a5f | ||
|
|
50c50448bf | ||
|
|
27e2ae0388 | ||
|
|
c6aca6bb60 | ||
|
|
63013ee2aa | ||
|
|
2476d35142 | ||
|
|
668287b940 | ||
|
|
c21b6f4705 | ||
|
|
d717a2dcfc | ||
|
|
b314f03bf4 | ||
|
|
7edf79de26 | ||
|
|
4ea01b2cf3 | ||
|
|
f1476f31fe | ||
|
|
a51a31466d | ||
|
|
1bede5c3fb | ||
|
|
5445b3d7ec | ||
|
|
6faba61db1 | ||
|
|
3a1ce87c7e | ||
|
|
2e39400e18 | ||
|
|
eaed6d1912 | ||
|
|
21275a1636 | ||
|
|
f601994eff | ||
|
|
53edb2a4fb | ||
|
|
8b3ff3919d | ||
|
|
a8f62fe9af | ||
|
|
ed3c5075dd | ||
|
|
f2f781799a | ||
|
|
41dbd20d56 | ||
|
|
dc898e3f84 | ||
|
|
80fbbc38e3 | ||
|
|
be152f9b61 | ||
|
|
ef4690d511 | ||
|
|
f5e758bd60 | ||
|
|
640f06928f | ||
|
|
6eb777a8af | ||
|
|
0ee9a4790a | ||
|
|
22d046d7fe | ||
|
|
1204a850f3 | ||
|
|
c5cd4174c3 | ||
|
|
ee6b79becf | ||
|
|
a6899f2a9d | ||
|
|
ce58d8887f | ||
|
|
8cd9e34ee3 | ||
|
|
43e241b235 | ||
|
|
69de896589 | ||
|
|
d780dde9e1 | ||
|
|
553628efa1 | ||
|
|
b57180a684 | ||
|
|
3ff5a82e46 | ||
|
|
a233022934 | ||
|
|
53602c400d | ||
|
|
342c64c2f2 | ||
|
|
9379a48e22 | ||
|
|
8009a7f0b1 | ||
|
|
e0ab377f9b | ||
|
|
50101fba11 | ||
|
|
925ed7c70f | ||
|
|
4244349600 | ||
|
|
08bf2e0463 | ||
|
|
1090eba9a8 | ||
|
|
006d46362c | ||
|
|
84504014aa | ||
|
|
3fa5813ea3 | ||
|
|
18dba17f0b | ||
|
|
6d797d5356 | ||
|
|
676316bbd3 | ||
|
|
f64647077f | ||
|
|
b2188f5dc1 | ||
|
|
76c6f49805 | ||
|
|
ca317c6798 | ||
|
|
173cc862a1 | ||
|
|
fd1fabf5c3 | ||
|
|
bd69e6a6cd | ||
|
|
464fa4715f | ||
|
|
9b31aff56c | ||
|
|
a3719d3033 | ||
|
|
372a907e97 | ||
|
|
9dfff27c42 | ||
|
|
f060343a82 | ||
|
|
f7c188c019 | ||
|
|
5cc1318279 | ||
|
|
dca3ea896e | ||
|
|
6754614ac1 | ||
|
|
64b85e7bd8 | ||
|
|
6f39855c08 | ||
|
|
fd92e7150d | ||
|
|
383127cd0b | ||
|
|
227fafb93f | ||
|
|
5b97a58230 | ||
|
|
b043a0a610 | ||
|
|
280f34ec61 | ||
|
|
1ca773c2d7 | ||
|
|
4b394fc847 | ||
|
|
0039418001 | ||
|
|
c8e8cdaaf4 | ||
|
|
8f3e43326b | ||
|
|
f7dbdba267 | ||
|
|
2823c0f485 | ||
|
|
b042cabc5e | ||
|
|
651723b4d4 | ||
|
|
e11e51c252 | ||
|
|
52711beba5 | ||
|
|
a265fb763b | ||
|
|
3bd037b7d9 | ||
|
|
e9c0faba42 | ||
|
|
d7696bd25f | ||
|
|
431227e1af | ||
|
|
71c3f7e93d | ||
|
|
26e9d07718 | ||
|
|
8d6b560ff3 | ||
|
|
62d231aeff | ||
|
|
0d1b73f857 | ||
|
|
ebf0b6ee4d | ||
|
|
d985b95ef9 | ||
|
|
19c44967cb | ||
|
|
00d14e3515 | ||
|
|
c8fdd5e847 | ||
|
|
97aec9ae8e | ||
|
|
05aeaeef9e | ||
|
|
8dae05deaf | ||
|
|
23f2aab4d6 | ||
|
|
3415b6c553 | ||
|
|
83af296cb2 | ||
|
|
aa493ff8db | ||
|
|
7cf479135d | ||
|
|
4a857ac023 | ||
|
|
32eb38073e | ||
|
|
c672066fbc | ||
|
|
f136ee9b57 | ||
|
|
144e4af8bc | ||
|
|
311d782963 | ||
|
|
5c09061e0f | ||
|
|
f7bf35052e | ||
|
|
ca0c7c1649 | ||
|
|
80b94156ed | ||
|
|
14dc863da5 | ||
|
|
c83db6cdf0 | ||
|
|
c9023cadbf | ||
|
|
c4ad589fd5 | ||
|
|
71be77c399 | ||
|
|
2807d69db3 | ||
|
|
76beaf12ef | ||
|
|
512ef3e2ba | ||
|
|
b9b324077f | ||
|
|
8a7d5ce5e1 | ||
|
|
cfc765dc2a | ||
|
|
be512c9422 | ||
|
|
3825a098c8 | ||
|
|
5c5cdf23a8 | ||
|
|
ef159bc35c | ||
|
|
9186f061a2 | ||
|
|
99f489b5ef | ||
|
|
005894eccb | ||
|
|
a91868496a | ||
|
|
b50375abf4 | ||
|
|
d63015e627 | ||
|
|
b31c3f1c1f | ||
|
|
584ff7c29a | ||
|
|
36f712f272 | ||
|
|
04885f1c29 | ||
|
|
089edcf765 | ||
|
|
6cd134d39e | ||
|
|
aa9151a6ee | ||
|
|
52faf1f984 | ||
|
|
85d4a5abc7 | ||
|
|
60d031e311 | ||
|
|
ad0f54b87b | ||
|
|
9ef07cb0f3 | ||
|
|
97b1f34868 | ||
|
|
bee3d5f143 | ||
|
|
eb594da2f2 | ||
|
|
510d84f682 | ||
|
|
21d7eca12a | ||
|
|
3b7aed050d | ||
|
|
30340e521e | ||
|
|
e321034074 | ||
|
|
bcc1fd7efd | ||
|
|
0ee6141cf6 | ||
|
|
9e2fbca594 | ||
|
|
f42de9e52a | ||
|
|
504d6715c1 | ||
|
|
35e09df282 | ||
|
|
59efa6acdd | ||
|
|
b161328682 | ||
|
|
1158ed5795 | ||
|
|
07d99d26b2 | ||
|
|
88dd6372b0 | ||
|
|
2984e22ef0 | ||
|
|
52de413d43 | ||
|
|
dc15124c6f | ||
|
|
058a9090c2 | ||
|
|
cac5d60633 | ||
|
|
dec7a34047 | ||
|
|
7677e2d4e3 | ||
|
|
d241323b08 | ||
|
|
bda09159c3 | ||
|
|
1cb14a16b7 | ||
|
|
b8752210ba | ||
|
|
a485334c37 | ||
|
|
e89782742d | ||
|
|
76cfd8bfac | ||
|
|
c8783d3339 | ||
|
|
df754517dd | ||
|
|
a9fd6b7f85 | ||
|
|
7a82045ca8 | ||
|
|
22adfc67e5 | ||
|
|
a172697d47 | ||
|
|
74764f28bc | ||
|
|
ebb12d5f06 | ||
|
|
5bd3c52c0f | ||
|
|
3452b0493d | ||
|
|
4f33f10511 | ||
|
|
7b3c2751ee | ||
|
|
bcb00d9a43 | ||
|
|
f064d07bda | ||
|
|
60f3f92e95 | ||
|
|
dc12c373dc | ||
|
|
e0f12ce020 | ||
|
|
1686e515d6 | ||
|
|
df0fcfb940 | ||
|
|
e9c960929b | ||
|
|
b27a6568b7 | ||
|
|
f0da89fa20 | ||
|
|
2f5fbcd10a | ||
|
|
431987a2fa | ||
|
|
56f83ad197 | ||
|
|
cb8c608e49 | ||
|
|
ed603fa790 | ||
|
|
f1d791355a | ||
|
|
b227aa06eb | ||
|
|
2cb9f03a66 | ||
|
|
a14cecb0ad | ||
|
|
0f458f1e35 | ||
|
|
323d24db8c | ||
|
|
ad73ed298d | ||
|
|
db3fecc5b9 | ||
|
|
054a625497 | ||
|
|
c68eeaa966 | ||
|
|
d539ebbf5b | ||
|
|
23ebefe8e7 | ||
|
|
5580fe0e1e | ||
|
|
e391bc442a | ||
|
|
48d60bd771 | ||
|
|
e2397bf0da | ||
|
|
1bca4f3eb5 | ||
|
|
22a2867d79 | ||
|
|
ade913a60e | ||
|
|
915d32f59c | ||
|
|
8e324b38a6 | ||
|
|
2462019449 | ||
|
|
8cf52c8e6c | ||
|
|
6877893ed5 | ||
|
|
1207757924 | ||
|
|
9c85d4f6df | ||
|
|
930715665e | ||
|
|
d78acb55a0 | ||
|
|
0ee89f1360 | ||
|
|
a09ee203ec | ||
|
|
ba564088c3 | ||
|
|
6fb69845b0 | ||
|
|
7c4ad1f400 | ||
|
|
43d62c08e3 | ||
|
|
5b9857d9b9 | ||
|
|
8dbdfa7e73 | ||
|
|
96f9b67b51 | ||
|
|
97d26ac9c0 | ||
|
|
a18fab88a1 | ||
|
|
a58a2dc0d3 | ||
|
|
e79842ce94 | ||
|
|
d33088a805 | ||
|
|
66a7add23f | ||
|
|
52177f5e0d | ||
|
|
5795d3d616 | ||
|
|
9245a66e6f | ||
|
|
bf8ad994d4 | ||
|
|
26fb5c90b1 | ||
|
|
ab1ebb072e | ||
|
|
c36d291acc | ||
|
|
bf457d129e | ||
|
|
523190f69a | ||
|
|
23b15254bb | ||
|
|
a55d2f67b0 | ||
|
|
01f279338f | ||
|
|
1dda502bcb | ||
|
|
cabfcbd18d | ||
|
|
e3f70857af | ||
|
|
55d50b3cca | ||
|
|
9dee34ad27 | ||
|
|
f5a00f0c77 | ||
|
|
1075b7ac38 | ||
|
|
d9187472f5 | ||
|
|
b37863a5ba | ||
|
|
03ab18fa7a | ||
|
|
f60d0dc35a | ||
|
|
4163fa5d29 | ||
|
|
4add47946b | ||
|
|
8e621f593e | ||
|
|
5ccc66d855 | ||
|
|
db2ef8ce51 | ||
|
|
7067d36adb | ||
|
|
4bf22639d1 | ||
|
|
334ee81901 | ||
|
|
f2376ad401 | ||
|
|
bbe8d13c6e | ||
|
|
1b00a3eb76 | ||
|
|
6dec212d1d | ||
|
|
731120e26e | ||
|
|
c34a2d65d0 | ||
|
|
5eb614a25b | ||
|
|
1ce5a04406 | ||
|
|
053d34dc47 | ||
|
|
31776e2a25 | ||
|
|
14fbbf1420 | ||
|
|
ea4603e5d1 | ||
|
|
3f2b09422d | ||
|
|
0aae453d77 | ||
|
|
2ef00d23e3 | ||
|
|
dc1a47ad70 | ||
|
|
0ef0359566 | ||
|
|
72a971b0e0 | ||
|
|
c28b1e32e3 | ||
|
|
1821eac1c1 | ||
|
|
aa10abacbc | ||
|
|
4b92872a97 | ||
|
|
e80053c659 | ||
|
|
3c0b6914e0 | ||
|
|
bb008411e0 | ||
|
|
706167bbbd | ||
|
|
0d112810f9 | ||
|
|
8826a10bc8 | ||
|
|
915b442dc1 | ||
|
|
29a0685ee8 | ||
|
|
1a2ef4db60 | ||
|
|
e08006f691 | ||
|
|
abc92d5030 | ||
|
|
c96698e95f | ||
|
|
58b2204651 | ||
|
|
36156a6c49 | ||
|
|
f75e4d314a | ||
|
|
1688512252 | ||
|
|
858e13cad6 | ||
|
|
af14106a63 | ||
|
|
0db1b63b1f | ||
|
|
88ab6f14d3 | ||
|
|
077d897fa4 | ||
|
|
f3e9bb312e | ||
|
|
c9150374d9 | ||
|
|
7f125d95e8 | ||
|
|
cbaca3e4bf | ||
|
|
272f11069f | ||
|
|
c303d0b18c | ||
|
|
1fa2c503a7 | ||
|
|
94ee606f62 | ||
|
|
4db5ea20e8 | ||
|
|
fb19245493 | ||
|
|
693617700b | ||
|
|
76809e128a | ||
|
|
ce10919978 | ||
|
|
9af88217d1 | ||
|
|
b79802789d | ||
|
|
f854a46890 | ||
|
|
8655384f51 | ||
|
|
7611fe60f8 | ||
|
|
e570a91abb | ||
|
|
6439fb4263 | ||
|
|
48473b48e6 | ||
|
|
8a4cda71af | ||
|
|
6c44e85852 | ||
|
|
f0eef60123 | ||
|
|
f59b74622d | ||
|
|
0c721d919c | ||
|
|
1b302d3fad | ||
|
|
d46d1d7fcd | ||
|
|
810eda9cca | ||
|
|
9702e7c456 | ||
|
|
4f38ff9757 | ||
|
|
99686a2fef | ||
|
|
508353fd15 | ||
|
|
bd26ce1db6 | ||
|
|
d86c1486ba | ||
|
|
c3e0a0035e | ||
|
|
f84c787be4 | ||
|
|
fc7dfd7246 | ||
|
|
7862187015 | ||
|
|
991b782b75 | ||
|
|
c4008dff3b | ||
|
|
8afe90224b | ||
|
|
4cdc14d55f | ||
|
|
9d269bd7f2 | ||
|
|
c7bcef426b | ||
|
|
9e89bf34bf | ||
|
|
c4a5c99074 | ||
|
|
2ba9c4b4a7 | ||
|
|
6596dbff31 | ||
|
|
99080af3ee | ||
|
|
7e22b46c1f | ||
|
|
d324a99454 | ||
|
|
17f99f663f | ||
|
|
5bfef8c80a | ||
|
|
92e1d27475 | ||
|
|
94782e914c | ||
|
|
d4b992506a | ||
|
|
2485273247 | ||
|
|
6c64427273 | ||
|
|
48d859b823 | ||
|
|
bb09982b66 | ||
|
|
21a5b038a7 | ||
|
|
0893a3fd39 | ||
|
|
dca9db124b | ||
|
|
58ba8a7c7f | ||
|
|
a979e414fb | ||
|
|
c9f6c7645c | ||
|
|
ceca333309 | ||
|
|
39a4017c33 | ||
|
|
af00ca81e1 | ||
|
|
9112cb4dfa | ||
|
|
80d0efd94a | ||
|
|
ff95a79d98 | ||
|
|
fa2e287687 | ||
|
|
9ed65c5620 | ||
|
|
6c31de64b3 | ||
|
|
3de864cfff | ||
|
|
c1fbdb4fd0 | ||
|
|
cccf35f862 | ||
|
|
7726276fe9 | ||
|
|
9e6e6575de | ||
|
|
8962e0383f | ||
|
|
7985ab786d | ||
|
|
8d69f3daf2 | ||
|
|
b0dd7e1cfd | ||
|
|
786521d5a8 | ||
|
|
093612a46c | ||
|
|
2c6c0fe329 | ||
|
|
a4560cdfbb | ||
|
|
26a040e81b | ||
|
|
625947f9f2 | ||
|
|
fadd58a0fb | ||
|
|
8a544d54ea | ||
|
|
b7abf0b3ce | ||
|
|
2983f3fc14 | ||
|
|
e8486fdf71 | ||
|
|
28cb6f4bb3 | ||
|
|
2937a875a0 | ||
|
|
07f525368d | ||
|
|
3f07c44ea9 |
356
NEWS
356
NEWS
@@ -1,3 +1,359 @@
|
||||
Overview of Changes in GTK+ 3.2.3
|
||||
=================================
|
||||
|
||||
* GtkNotebook is now properly destroying action widgets
|
||||
|
||||
* The XI2 code has been made more robust:
|
||||
- Trap errors due to disappearing devices, which
|
||||
can happen when resuming from suspend
|
||||
- Prevent stuck grabs when using move-resize emulation
|
||||
with XI2
|
||||
- Avoid segfaults due to events on disabled devices
|
||||
|
||||
* Bugs fixed:
|
||||
646461 Leak in gtkfilechooserbutton.c: model_free_row_data
|
||||
650943 Clicking resize grip causes strange mouse grabbing...
|
||||
653676 Expand/Collapse doesn't respond after one click
|
||||
660554 gtk_tree_view_drag_begin: assertion `path != NULL' failed
|
||||
662814 Request for way to tell gtk_recent_manager_add_item_query...
|
||||
663322 a11y-related crash
|
||||
663856 Make option-foo accelerators use the right symbol
|
||||
664132 gdk_cairo_region_create_from_surface broken on PPC...
|
||||
664137 Crash in Audacious audio player when browsing...
|
||||
664238 GTK apps crashe when dragging something
|
||||
664456 segfault on arrow keypress in empty GtkIconView
|
||||
664467 prop-editor is broken for GdkColor properties
|
||||
664469 color button doesn't notify "color" and "alpha"...
|
||||
664537 GtkCssProvider: don't segfault when CSS file is not found
|
||||
664640 CUPS authentication does not work
|
||||
|
||||
* Translation updates:
|
||||
Slovak
|
||||
Spanish
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.2.2
|
||||
=================================
|
||||
|
||||
* Bugs fixed:
|
||||
658772 Directory paths for resource directories are hard-coded
|
||||
661858 Add annotations for some GtkRadio* constructors
|
||||
661859 Add annotations for some GtkSymbolicColor constructors
|
||||
661997 Gtk crashes when changing the TreeView model while rubber...
|
||||
662160 gtk_print_operation_cancel fails
|
||||
662177 Toolbar returns invalid paths for toolbar items
|
||||
662670 Pressing "Enter" in print dialog box will not cause printing
|
||||
662691 menuitem: Always treat submenus as popup
|
||||
662870 Fix introspection annotations for GtkRadioToolButton
|
||||
662953 x11: Fix window manager change detection
|
||||
663073 gtk_dialog_new_with_buttons should be G_GNUC_NULL_TERMINATED
|
||||
663138 iconview: layout items immediately when setting a GtkTreeModel
|
||||
663396 With multiple master devices, right clicking may show popup...
|
||||
663605 Fix event->state of many event types on quartz
|
||||
663694 GtkTreeViewAccessibleCellInfo are leaked
|
||||
663825 calling gtk_progress_bar_set_fraction with a fraction > 1.0...
|
||||
|
||||
* Translation updates:
|
||||
Brazilian Portuguese
|
||||
British English
|
||||
Japanese
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.2.1
|
||||
=================================
|
||||
|
||||
* GtkCellRendererAccel can show virtual modifiers
|
||||
|
||||
* CSS improvements:
|
||||
- 'transparent' can be used a color
|
||||
|
||||
* OS X improvements:
|
||||
- Disable mnemonics
|
||||
- Make Option work as a modifier
|
||||
- Cleanup of modifiers: Alt/Option is MOD1, Command is MOD2
|
||||
- Fix keyval <> Unicode and lowercase/uppercase mapping
|
||||
|
||||
* Improvements of cross-platform key and button event handling:
|
||||
- Support '<Primary>' in accelerator strings
|
||||
- Use approprivate modifiers for extending and modifying
|
||||
selections, depending on the platform
|
||||
- Use the appropriate button for triggering context menus,
|
||||
depending on the platform
|
||||
|
||||
* Bugs fixed:
|
||||
628936 gtk build fails because of objective-c elements
|
||||
653289 GtkCellRendererText "edited" signal not emitted...
|
||||
655057 rendering issues with map plugin
|
||||
657770 Write to released memory in gtkdnd-quartz.c
|
||||
658767 Drag and Drop NSEvent capture is racy
|
||||
658772 Directory paths for resource directories are hard-coded
|
||||
659022 gtk_tree_model_filter_clear_cache_helper: assertion failed
|
||||
659655 3 errors in Spanish translation of gtk+
|
||||
660687 roxterm X crashes with accessibility enabled
|
||||
660730 Use of "struct stat" breaks Windows
|
||||
|
||||
* Translation updates
|
||||
Catalan (Valencian)
|
||||
Czech
|
||||
Dutch
|
||||
Esperanto
|
||||
Galician
|
||||
Latvian
|
||||
Spanish
|
||||
Traditional Chinese
|
||||
Vietnamese
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.2
|
||||
===============================
|
||||
|
||||
* GtkFontChooser:
|
||||
- More speed ups. The font chooser will now load
|
||||
instanteously, even if you have thousands of fonts
|
||||
|
||||
* Bug fixes
|
||||
659826 new broadband connection weirdness in assistant
|
||||
659966 Fix module blacklisting
|
||||
640741 Fix return value fo gtk_tree_view_column_cell_get_position
|
||||
Assertion in the treeview accessible code
|
||||
Fix erroneous beeping in textview keynav
|
||||
|
||||
* Translation updates
|
||||
Assamese
|
||||
Basque
|
||||
Brazilian Portuguese
|
||||
Bulgarian
|
||||
Catalan
|
||||
Czech
|
||||
Danish
|
||||
French
|
||||
Galician
|
||||
German
|
||||
Hungarian
|
||||
Japanese
|
||||
Korean
|
||||
Latvian
|
||||
Lithuanian
|
||||
Oriya
|
||||
Polish
|
||||
Portuguese
|
||||
Russian
|
||||
Slovenian
|
||||
Spanish
|
||||
Swedish
|
||||
Telugu
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.1.92
|
||||
==================================
|
||||
|
||||
* GtkIconView:
|
||||
- Cells will now be prelighted, if you set the
|
||||
GtkCellRendererPixbuf::follow-state property.
|
||||
|
||||
* GtkFontChooser:
|
||||
- Speed up population of the font list somewhat.
|
||||
More speedups are expected in 3.2
|
||||
|
||||
* Bugs fixed:
|
||||
615501 GtkIconView does not support prelight cells
|
||||
658981 Inability to effectively clear string indicator in stf imp...
|
||||
659241 GtkPaned initially allocates space for separator, even if...
|
||||
659247 link-button: Reset the mouse cursor when destroyed
|
||||
|
||||
* Translation updates:
|
||||
Asturian
|
||||
Belarussian
|
||||
Brazilian Portuguese
|
||||
British English
|
||||
Bulgarian
|
||||
French
|
||||
Galician
|
||||
German
|
||||
Latvian
|
||||
Portuguese
|
||||
Punjabi
|
||||
Russian
|
||||
Serbian
|
||||
Slovenian
|
||||
Swedish
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.1.90
|
||||
==================================
|
||||
|
||||
* GtkAppChooserButton: A new function has been added
|
||||
that makes it possible to have the button select the
|
||||
default app (as opposed to the most-recently-used app).
|
||||
|
||||
* A lot of feedback on the the tree model refactoring has
|
||||
been incorporated via new test cases and bug fixes
|
||||
|
||||
* The filechooser search has been ported to tracker 0.12
|
||||
and is using the tracker DBus API directly now.
|
||||
|
||||
* The new fontchooser API has been reworked a bit to make
|
||||
it follow the same pattern we use else where. GtkFontChooser
|
||||
is now an interface that is implemented by GtkFontChooserButton,
|
||||
GtkFontChooserDialog and GtkFontChooserWidget (to which the
|
||||
original GtkFontChooser has been renamed).
|
||||
|
||||
* Bugs fixed
|
||||
514843 gtkfilechooser should be more robust to malformed URIs...
|
||||
617583 Dead accents keys don't work in GTK+ applications on OSX
|
||||
642706 No way to select the default entry
|
||||
657353 GtkTreeModelFilter hangs when filtering
|
||||
657627 new font chooser API inconsistent
|
||||
658272 Port gtksearchenginetracker.c to tracker 0.11/0.12
|
||||
658379 Disabled devices still added to list on startup
|
||||
658398 Use of uninitialized variable reported by Valgrind
|
||||
658507 better comboboxes for right to left languages
|
||||
658600 Geany crashes when reopening file chooser dialog
|
||||
658696 Crash when inserting a new node
|
||||
658774 Regression: GtkFileChooserButtons do not expand
|
||||
|
||||
* Translation updates:
|
||||
Belarusian
|
||||
British English
|
||||
French
|
||||
Galician
|
||||
Indonesian
|
||||
Italian
|
||||
Latvian
|
||||
Norwegian bokmål
|
||||
Persian
|
||||
Polish
|
||||
Portuguese
|
||||
Punjabi
|
||||
Simplified Chinese
|
||||
Slovenian
|
||||
Spanish
|
||||
Swedish
|
||||
Tamil
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.1.18
|
||||
==================================
|
||||
|
||||
* GtkFileChooser:
|
||||
- It is no possible to go to the containing folder of a
|
||||
selected file in recent files or search results.
|
||||
|
||||
* Bugs fixed
|
||||
530253 typo ifaces under gtk_tree_view_set_reorderable
|
||||
566202 GTK_SELECTION_MULTIPLE description unclear
|
||||
581435 gtk_tree_view_set_drag_dest_row() needs more documentation
|
||||
655631 Description of x and y parameters in gtk_render_arrow is in...
|
||||
657793 Support NULL sibling in gtk_grid_attach_next_to
|
||||
657882 gtk_css_provider_propagate_error's signature not updated...
|
||||
657963 themingengine: remove xthickness FIXME from gtk_render_line()
|
||||
657985 reeview: add GTK_STYLE_CLASS_SEPARATOR for tree view separators
|
||||
658008 Centered text alignment in GtkAssistant is wrong
|
||||
658077 Add theming support to GtkPathBar
|
||||
658111 gtk_label_set_pattern() is reset by a call to gtk_box_pack_...
|
||||
658168 Gtk-Message: Failed to load module "gail"
|
||||
658200 gtk_toolbar_finalize() does stuff it shouldn't
|
||||
Fix colord support in the print dialog
|
||||
|
||||
* Translation updates
|
||||
Belarusian
|
||||
Brazilian Portuguese
|
||||
Esperanto
|
||||
Galician
|
||||
Korean
|
||||
Lithuanian
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.1.16
|
||||
==================================
|
||||
|
||||
* Make distcheck work again, and fix errors that crept in by
|
||||
lack of a working distcheck.
|
||||
|
||||
* Bugs fixed:
|
||||
656223 GtkToolShell: Move vfunc default results to default impl...
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.1.14
|
||||
==================================
|
||||
|
||||
* GtkTreeView:
|
||||
- The GtkTreeModelFilter and GtkTreeModelSort implementations
|
||||
have been improved and a comprehensive test suite has been added.
|
||||
|
||||
* GtkFileChooser:
|
||||
- The selected file(s) can now be copied to the clipboard
|
||||
|
||||
* Bugs fixed:
|
||||
656851 Allow use of GVariant in GtkListStore
|
||||
344858 gtk_menu_item_new_with_label() created widget with refcount 2
|
||||
349502 option to copy full path in "Save AS"/"Open file" dialogs
|
||||
621076 GtkTreeModelFilter does not emit all signals in some situations
|
||||
634136 GtkTable::children accessor
|
||||
649588 crash when sending a notification: "Gdk-CRITICAL **: gdk_visual_...
|
||||
650762 gtk_misc_set_alignment replacement with the new API functions
|
||||
651827 Crash in check_application()
|
||||
656986 GtkSwitch is unusable when added to primary toolbar.
|
||||
657146 Missing files in POTFILEs.in
|
||||
657260 Gtk should use AtkWindow and remove that hack on GailUtil
|
||||
657359 Crash when specifying data length in gtk_css_provider_load_...
|
||||
657384 missing accessors for GdkEvent structures
|
||||
|
||||
* Translation updates:
|
||||
Galician
|
||||
German
|
||||
Gujarati
|
||||
Indonesian
|
||||
Norwegian bokmål
|
||||
Persian
|
||||
Russian
|
||||
Serbian
|
||||
Spanish
|
||||
Swedish
|
||||
Traditional Chinese
|
||||
Uighur
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.1.12
|
||||
==================================
|
||||
|
||||
* GtkFontChooserDialog: A newly designed font selection dialog
|
||||
that is intended to replace GtkFontSelectionDialog
|
||||
|
||||
* Drawing of focus rectangles is now optional; it can be turned
|
||||
off altogether, or until actual keyboard interaction happens,
|
||||
with the gtk-visible-focus setting.
|
||||
|
||||
* OS X: Fixes for 10.7 (Lion)
|
||||
|
||||
* Bugs fixed:
|
||||
407885 A new GtkFontSelectionDialog
|
||||
508601 Copying from GTK+ applications causes crash
|
||||
599664 The print dialog should not block while looking for an...
|
||||
645258 Add gtk_text_iter_assign API
|
||||
649567 hide focus rectangles when not keynavigating
|
||||
652991 Remove local copy of introspection.m4
|
||||
653817 Would like GtkGrid methods to insert rows/columns
|
||||
653964 Installing MinGW32 build misses gdk/win32 headers
|
||||
655074 Fix crash with undecorated windows on MacOS Lion
|
||||
655122 Crash when resizing window on MacOS Lion
|
||||
655173 small memory leak in GtkStyleProperty
|
||||
655495 Make X11-specific functions introspectable
|
||||
655496 X11-specific objects methods are introspected as static functions
|
||||
655545 condition can never be true in gtk_tree_view_real_set_cursor
|
||||
655822 Removal of GSettings key causes crash on upgrades
|
||||
656098 Tweak GtkAppChooser's short description
|
||||
656421 3.1.10: G_DISABLE_DEPRECATED detection breaks compilation
|
||||
|
||||
* Translation updates
|
||||
Brazilian Portuguese
|
||||
Bulgarian
|
||||
Russian
|
||||
Spanish
|
||||
Swedish
|
||||
Traditional Chinese
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.1.10
|
||||
==================================
|
||||
|
||||
|
||||
@@ -27,6 +27,13 @@ Installation
|
||||
See the file 'INSTALL'
|
||||
|
||||
|
||||
Release notes for 3.2
|
||||
=====================
|
||||
|
||||
* The accessible implementations for GTK+ widgets have been integrated
|
||||
into libgtk itself, and the gail module does not exist anymore. This
|
||||
change should not affect applications very much.
|
||||
|
||||
Release notes for 3.0
|
||||
=====================
|
||||
|
||||
|
||||
12
README.win32
12
README.win32
@@ -156,11 +156,17 @@ Use the Microsoft compiler, cl and Make, nmake. Say nmake -f
|
||||
makefile.msc in gdk and gtk. Be prepared to manually edit various
|
||||
makefile.msc files, and the makefile snippets in build/win32.
|
||||
|
||||
There are also VS 2008 solution and project files to build GTK+, which
|
||||
There are also VS 2008/2010 solution and project files to build GTK+, which
|
||||
are maintained by Chun-wei Fan. They should build GTK+ out of the box,
|
||||
provided that the afore-mentioned dependencies are installed. They will
|
||||
build GDK with the Win32 backend, GTK+ itself and the gtk-demo program.
|
||||
(The GAIL and GAIL-util sources are not built by this method yet)
|
||||
build GDK with the Win32 backend, GTK+ itself (with GAIL/a11y built in),
|
||||
the GAIL-Util library and the gtk-demo program.
|
||||
|
||||
Please refer to the following GNOME Live! page for a more detailed ouline
|
||||
on the process of building the GTK+ stack and its dependencies with Visual
|
||||
C++:
|
||||
|
||||
https://live.gnome.org/GTK%2B/Win32/MSVCCompilationOfGTKStack
|
||||
|
||||
Alternative 1 also generates Microsoft import libraries (.lib), if you
|
||||
have lib.exe available. It might also work for cross-compilation from
|
||||
|
||||
@@ -7,6 +7,8 @@ test -n "$srcdir" || srcdir=.
|
||||
olddir=`pwd`
|
||||
cd "$srcdir"
|
||||
|
||||
mkdir -p m4
|
||||
|
||||
GTKDOCIZE=`which gtkdocize`
|
||||
if test -z $GTKDOCIZE; then
|
||||
echo "*** No GTK-Doc found, please install it ***"
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
Note that all this is rather experimental.
|
||||
Please do not compile this package (GTK+) in paths that contain
|
||||
spaces in them-as strange problems may occur during compilation or during
|
||||
the use of the library.
|
||||
|
||||
A more detailed outline for instructions on building the GTK+ with Visual
|
||||
C++ can be found in the following GNOME Live! page:
|
||||
|
||||
https://live.gnome.org/GTK%2B/Win32/MSVCCompilationOfGTKStack
|
||||
|
||||
This VS10 solution and the projects it includes are intented to be used
|
||||
in a GTK+ source tree unpacked from a tarball. In a git checkout you
|
||||
|
||||
@@ -102,6 +102,23 @@ copy ..\..\..\gdk\win32\gdkwin32.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk
|
||||
copy ..\..\..\gdk\gdkwindow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk
|
||||
|
||||
|
||||
mkdir $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
|
||||
|
||||
copy ..\..\..\gdk\win32\gdkwin32cursor.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
|
||||
|
||||
copy ..\..\..\gdk\win32\gdkwin32display.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
|
||||
|
||||
copy ..\..\..\gdk\win32\gdkwin32displaymanager.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
|
||||
|
||||
copy ..\..\..\gdk\win32\gdkwin32dnd.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
|
||||
|
||||
copy ..\..\..\gdk\win32\gdkwin32keys.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
|
||||
|
||||
copy ..\..\..\gdk\win32\gdkwin32screen.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
|
||||
|
||||
copy ..\..\..\gdk\win32\gdkwin32window.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
|
||||
|
||||
|
||||
mkdir $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
|
||||
|
||||
copy ..\..\..\gtk\gtk.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
Note that all this is rather experimental.
|
||||
Please do not compile this package (GTK+) in paths that contain
|
||||
spaces in them-as strange problems may occur during compilation or during
|
||||
the use of the library.
|
||||
|
||||
A more detailed outline for instructions on building the GTK+ with Visual
|
||||
C++ can be found in the following GNOME Live! page:
|
||||
|
||||
https://live.gnome.org/GTK%2B/Win32/MSVCCompilationOfGTKStack
|
||||
|
||||
This VS9 solution and the projects it includes are intented to be used
|
||||
in a GTK+ source tree unpacked from a tarball. In a git checkout you
|
||||
|
||||
@@ -105,6 +105,15 @@ copy ..\..\..\gdk\gdkvisual.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk
&#
|
||||
copy ..\..\..\gdk\win32\gdkwin32.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk

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

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

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

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

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

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

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

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

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

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

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

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

|
||||
|
||||
@@ -112,11 +112,15 @@
|
||||
/* Have the Xrandr extension library */
|
||||
/* #undef HAVE_RANDR */
|
||||
|
||||
/* Define to 1 if shm.h is available */
|
||||
/* #undef HAVE_SHM_H */
|
||||
/* Define to 1 if rint() is available */
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_RINT 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if sigsetjmp is available */
|
||||
/* #undef HAVE_SIGSETJMP */
|
||||
/* Define to 1 if round() is available */
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_ROUND 1
|
||||
#endif
|
||||
|
||||
/* Have the sockaddr_un.sun_len member */
|
||||
/* #undef HAVE_SOCKADDR_UN_SUN_LEN */
|
||||
@@ -128,6 +132,9 @@
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_STDINT_H 1
|
||||
#else
|
||||
#if (_MSC_VER >= 1600) /* VS 2010+ ships with stdint.h */
|
||||
#define HAVE_STDINT_H 1
|
||||
#endif
|
||||
/* #undef HAVE_STDINT_H */
|
||||
#endif
|
||||
|
||||
@@ -135,7 +142,9 @@
|
||||
#define HAVE_STDLIB_H 1
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_STRINGS_H 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
68
configure.ac
68
configure.ac
@@ -9,9 +9,9 @@
|
||||
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.
|
||||
|
||||
m4_define([gtk_major_version], [3])
|
||||
m4_define([gtk_minor_version], [1])
|
||||
m4_define([gtk_micro_version], [10])
|
||||
m4_define([gtk_interface_age], [0])
|
||||
m4_define([gtk_minor_version], [2])
|
||||
m4_define([gtk_micro_version], [3])
|
||||
m4_define([gtk_interface_age], [3])
|
||||
m4_define([gtk_binary_age],
|
||||
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
|
||||
m4_define([gtk_version],
|
||||
@@ -41,9 +41,9 @@ m4_define([gtk_binary_version], [3.0.0])
|
||||
# required versions of other packages
|
||||
m4_define([glib_required_version], [2.29.14])
|
||||
m4_define([pango_required_version], [1.29.0])
|
||||
m4_define([atk_required_version], [1.30])
|
||||
m4_define([atk_required_version], [2.1.5])
|
||||
m4_define([cairo_required_version], [1.10.0])
|
||||
m4_define([gdk_pixbuf_required_version], [2.22.0])
|
||||
m4_define([gdk_pixbuf_required_version], [2.23.5])
|
||||
m4_define([introspection_required_version], [0.10.1])
|
||||
GLIB_REQUIRED_VERSION=glib_required_version
|
||||
PANGO_REQUIRED_VERSION=pango_required_version
|
||||
@@ -62,7 +62,7 @@ AC_SUBST(INTROSPECTION_REQUIRED_VERSION)
|
||||
# Save this value here, since automake will set cflags later
|
||||
cflags_set=${CFLAGS+set}
|
||||
|
||||
AM_INIT_AUTOMAKE([1.11 no-define -Wno-portability tar-ustar no-dist-gzip dist-xz])
|
||||
AM_INIT_AUTOMAKE([1.11 -Wall no-define -Wno-portability tar-ustar no-dist-gzip dist-xz])
|
||||
AM_MAINTAINER_MODE([enable])
|
||||
|
||||
# Support silent build rules. Disable
|
||||
@@ -318,6 +318,11 @@ if test -z "$backend_set"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(quartz-relocation,
|
||||
[AS_HELP_STRING([--enable-quartz-relocation],
|
||||
[enable bundle-based relocation functions])],
|
||||
[quartz_relocation=yes])
|
||||
|
||||
cairo_backends=
|
||||
backend_immodules=
|
||||
GDK_BACKENDS=
|
||||
@@ -327,7 +332,7 @@ GDK_WINDOWING=
|
||||
GIO_PACKAGE=gio-2.0
|
||||
PANGO_PACKAGES="pango pangocairo"
|
||||
|
||||
if test "x$enable_x11_backend" = xyes; then
|
||||
if test "$enable_x11_backend" = "yes"; then
|
||||
# GDK calls the xlib backend "x11," cairo calls it "xlib." Other
|
||||
# backend names are identical.
|
||||
cairo_backends="$cairo_backends cairo-xlib"
|
||||
@@ -340,7 +345,7 @@ if test "x$enable_x11_backend" = xyes; then
|
||||
#define GDK_WINDOWING_X11"
|
||||
fi
|
||||
|
||||
if test "x$enable_win32_backend" = xyes; then
|
||||
if test "$enable_win32_backend" = "yes"; then
|
||||
cairo_backends="$cairo_backends cairo-win32"
|
||||
GDK_BACKENDS="$GDK_BACKENDS win32"
|
||||
backend_immodules="$backend_immodules,ime"
|
||||
@@ -360,6 +365,10 @@ if test "x$enable_quartz_backend" = xyes; then
|
||||
#define GDK_WINDOWING_QUARTZ"
|
||||
GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -framework Cocoa"
|
||||
AM_CONDITIONAL(USE_QUARTZ, true)
|
||||
if test "x$quartz_relocation" = xyes; then
|
||||
AC_DEFINE([QUARTZ_RELOCATION], [1], [Use NSBundle functions to determine load paths for libraries, translations, etc.])
|
||||
fi
|
||||
|
||||
else
|
||||
AM_CONDITIONAL(USE_QUARTZ, false)
|
||||
fi
|
||||
@@ -383,7 +392,7 @@ if test "x$enable_wayland_backend" == "xyes"; then
|
||||
GIO_PACKAGE=gio-unix-2.0
|
||||
GDK_WINDOWING="$GDK_WINDOWING
|
||||
#define GDK_WINDOWING_WAYLAND"
|
||||
WAYLAND_PACKAGES="wayland-client xkbcommon wayland-egl"
|
||||
WAYLAND_PACKAGES="wayland-client xkbcommon wayland-egl egl"
|
||||
AM_CONDITIONAL(USE_WAYLAND, true)
|
||||
else
|
||||
AM_CONDITIONAL(USE_WAYLAND, false)
|
||||
@@ -753,6 +762,18 @@ if test $gtk_uxtheme_h = yes; then
|
||||
fi
|
||||
AC_MSG_RESULT($gtk_uxtheme_h)
|
||||
|
||||
# Check for round()
|
||||
AC_CHECK_LIB(m,round,have_round=yes,have_round=no)
|
||||
if test $have_round = yes; then
|
||||
AC_DEFINE(HAVE_ROUND, 1, [Define to 1 if round() is available])
|
||||
fi
|
||||
|
||||
# Check for rint()
|
||||
AC_CHECK_LIB(m,rint,have_rint=yes,have_rint=no)
|
||||
if test $have_rint = yes; then
|
||||
AC_DEFINE(HAVE_RINT, 1, [Define to 1 if rint() is available])
|
||||
fi
|
||||
|
||||
# Checks for gdkspawn
|
||||
AC_CHECK_HEADERS(crt_externs.h)
|
||||
AC_CHECK_FUNCS(_NSGetEnviron)
|
||||
@@ -1251,7 +1272,7 @@ LDFLAGS="$saved_ldflags"
|
||||
|
||||
GDK_PACKAGES="$PANGO_PACKAGES $GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES gdk-pixbuf-2.0 $cairo_backends cairo-gobject"
|
||||
|
||||
GDK_DEP_LIBS="$GDK_EXTRA_LIBS `$PKG_CONFIG --libs $GDK_PACKAGES`"
|
||||
GDK_DEP_LIBS="$GDK_EXTRA_LIBS `$PKG_CONFIG --libs $GDK_PACKAGES` $MATH_LIB"
|
||||
GDK_DEP_CFLAGS="`$PKG_CONFIG --cflags gthread-2.0 $GDK_PACKAGES` $GDK_EXTRA_CFLAGS"
|
||||
#
|
||||
# If we aren't writing explicit dependencies, then don't put the extra libraries we need
|
||||
@@ -1308,7 +1329,7 @@ if test x"$os_openbsd" = xyes; then
|
||||
fi
|
||||
|
||||
GTK_EXTRA_CFLAGS=
|
||||
GTK_DEP_LIBS="$GDK_EXTRA_LIBS $GTK_DEP_LIBS_FOR_X `$PKG_CONFIG --libs $PANGO_PACKAGES $GTK_PACKAGES_FOR_X $GTK_PACKAGES` $GTK_EXTRA_LIBS"
|
||||
GTK_DEP_LIBS="$GDK_EXTRA_LIBS $GTK_DEP_LIBS_FOR_X `$PKG_CONFIG --libs $PANGO_PACKAGES $GTK_PACKAGES_FOR_X $GTK_PACKAGES` $GTK_EXTRA_LIBS $MATH_LIB"
|
||||
GTK_DEP_CFLAGS="`$PKG_CONFIG --cflags gthread-2.0 $GDK_PACKAGES $GTK_PACKAGES` $GDK_EXTRA_CFLAGS $GTK_EXTRA_CFLAGS"
|
||||
|
||||
if test x"$os_win32" = xyes; then
|
||||
@@ -1528,7 +1549,7 @@ GOBJECT_INTROSPECTION_CHECK(introspection_required_version)
|
||||
|
||||
AC_ARG_ENABLE(packagekit,
|
||||
[AS_HELP_STRING([--enable-packagekit=@<:@yes/no/auto@:>@],
|
||||
[build packagekit open-with module [default=auto]])],
|
||||
[build PackageKit open-with module [default=auto]])],
|
||||
[enable_packagekit="$enableval"],
|
||||
[enable_packagekit=auto])
|
||||
if test "$enable_packagekit" = "auto"; then
|
||||
@@ -1539,7 +1560,7 @@ if test "$enable_packagekit" = "auto"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([Whether to use PackageKit])
|
||||
AC_MSG_CHECKING([whether to use PackageKit])
|
||||
build_packagekit=no
|
||||
if test "x$enable_packagekit" != "xno"; then
|
||||
if test "$os_win32" != "yes"; then
|
||||
@@ -1562,22 +1583,26 @@ AC_ARG_ENABLE(colord,
|
||||
[build colord support code [default=auto]])],
|
||||
[enable_colord="$enableval"],
|
||||
[enable_colord=auto])
|
||||
|
||||
AC_MSG_CHECKING([whether to use colord])
|
||||
if test "$enable_colord" = "auto"; then
|
||||
if test "$os_win32" = "yes"; then
|
||||
enable_colord=no
|
||||
else
|
||||
enable_colord=yes
|
||||
fi
|
||||
fi
|
||||
if test "$enable_colord" != "no"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([Whether to use colord])
|
||||
have_colord=no
|
||||
if test "x$enable_colord" != "xno"; then
|
||||
if test "$enable_colord" != "no"; then
|
||||
if test "$os_win32" != "yes"; then
|
||||
PKG_CHECK_MODULES(COLORD, colord >= 0.1.9,
|
||||
have_colord=yes, have_colord=no)
|
||||
if test "enable_colord" = "yes"; then
|
||||
if test "have_colord" = "no"; then
|
||||
if test "$enable_colord" = "yes"; then
|
||||
if test "$have_colord" = "no"; then
|
||||
AC_MSG_ERROR([--enable-colord specified, but not available])
|
||||
fi
|
||||
fi
|
||||
@@ -1585,9 +1610,8 @@ if test "x$enable_colord" != "xno"; then
|
||||
AC_MSG_ERROR([colord support is not available on win32])
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT([$have_colord])
|
||||
|
||||
if test "have_colord" = "yes"; then
|
||||
if test "$have_colord" = "yes"; then
|
||||
AC_DEFINE(HAVE_COLORD, 1, [define if we have colord])
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_COLORD, test "x$have_colord" = "xyes")
|
||||
@@ -1775,7 +1799,7 @@ echo " GTK+ $GTK_VERSION"
|
||||
echo " ==========="
|
||||
echo ""
|
||||
echo " GDK backends: $GDK_BACKENDS"
|
||||
if test "x$enable_x11_backend" = "xyes"; then
|
||||
if test "$enable_x11_backend" = "yes"; then
|
||||
echo " X11 extensions: $X_EXTENSIONS"
|
||||
fi
|
||||
echo " Print backends: $PRINT_BACKENDS"
|
||||
|
||||
@@ -73,7 +73,7 @@ EXTRA_DIST += \
|
||||
demo.ui
|
||||
|
||||
demos.h: @REBUILD@ $(demos) geninclude.pl
|
||||
(here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos)) > demos.h
|
||||
$(AM_V_GEN) (here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos)) > demos.h
|
||||
|
||||
gtk3_demo_SOURCES = \
|
||||
$(demos) \
|
||||
|
||||
@@ -25,8 +25,8 @@ activate_action (GtkAction *action)
|
||||
GtkSettings *settings = gtk_settings_get_default ();
|
||||
|
||||
g_object_set (G_OBJECT (settings),
|
||||
"gtk-application-prefer-dark-theme", value,
|
||||
NULL);
|
||||
"gtk-application-prefer-dark-theme", value,
|
||||
NULL);
|
||||
return;
|
||||
}
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
@@ -69,7 +69,7 @@ activate_radio_action (GtkAction *action, GtkRadioAction *current)
|
||||
|
||||
static void
|
||||
about_cb (GtkAction *action,
|
||||
GtkWidget *window)
|
||||
GtkWidget *window)
|
||||
{
|
||||
GdkPixbuf *pixbuf, *transparent;
|
||||
gchar *filename;
|
||||
@@ -102,21 +102,21 @@ about_cb (GtkAction *action,
|
||||
}
|
||||
|
||||
gtk_show_about_dialog (GTK_WINDOW (window),
|
||||
"program-name", "GTK+ Code Demos",
|
||||
"version", g_strdup_printf ("%s,\nRunning against GTK+ %d.%d.%d",
|
||||
PACKAGE_VERSION,
|
||||
gtk_get_major_version (),
|
||||
gtk_get_minor_version (),
|
||||
gtk_get_micro_version ()),
|
||||
"copyright", "(C) 1997-2009 The GTK+ Team",
|
||||
"license-type", GTK_LICENSE_LGPL_2_1,
|
||||
"website", "http://www.gtk.org",
|
||||
"comments", "Program to demonstrate GTK+ functions.",
|
||||
"authors", authors,
|
||||
"documenters", documentors,
|
||||
"logo", transparent,
|
||||
"program-name", "GTK+ Code Demos",
|
||||
"version", g_strdup_printf ("%s,\nRunning against GTK+ %d.%d.%d",
|
||||
PACKAGE_VERSION,
|
||||
gtk_get_major_version (),
|
||||
gtk_get_minor_version (),
|
||||
gtk_get_micro_version ()),
|
||||
"copyright", "(C) 1997-2009 The GTK+ Team",
|
||||
"license-type", GTK_LICENSE_LGPL_2_1,
|
||||
"website", "http://www.gtk.org",
|
||||
"comments", "Program to demonstrate GTK+ functions.",
|
||||
"authors", authors,
|
||||
"documenters", documentors,
|
||||
"logo", transparent,
|
||||
"title", "About GTK+ Code Demos",
|
||||
NULL);
|
||||
NULL);
|
||||
|
||||
g_object_unref (transparent);
|
||||
}
|
||||
@@ -249,9 +249,9 @@ static const gchar *ui_info =
|
||||
" <menu action='PreferencesMenu'>"
|
||||
" <menuitem action='DarkTheme'/>"
|
||||
" <menu action='ColorMenu'>"
|
||||
" <menuitem action='Red'/>"
|
||||
" <menuitem action='Green'/>"
|
||||
" <menuitem action='Blue'/>"
|
||||
" <menuitem action='Red'/>"
|
||||
" <menuitem action='Green'/>"
|
||||
" <menuitem action='Blue'/>"
|
||||
" </menu>"
|
||||
" <menu action='ShapeMenu'>"
|
||||
" <menuitem action='Square'/>"
|
||||
@@ -317,10 +317,10 @@ register_stock_icons (void)
|
||||
pixbuf = NULL;
|
||||
filename = demo_find_file ("gtk-logo-rgb.gif", NULL);
|
||||
if (filename)
|
||||
{
|
||||
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
|
||||
g_free (filename);
|
||||
}
|
||||
{
|
||||
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
/* Register icon to accompany stock item */
|
||||
if (pixbuf != NULL)
|
||||
@@ -355,8 +355,8 @@ update_statusbar (GtkTextBuffer *buffer,
|
||||
GtkTextIter iter;
|
||||
|
||||
gtk_statusbar_pop (statusbar, 0); /* clear any previous message,
|
||||
* underflow is allowed
|
||||
*/
|
||||
* underflow is allowed
|
||||
*/
|
||||
|
||||
count = gtk_text_buffer_get_char_count (buffer);
|
||||
|
||||
@@ -407,7 +407,7 @@ do_appwindow (GtkWidget *do_widget)
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Application Window");
|
||||
gtk_window_set_icon_name (GTK_WINDOW (window), "document-open");
|
||||
|
||||
@@ -416,7 +416,7 @@ do_appwindow (GtkWidget *do_widget)
|
||||
G_CALLBACK (gtk_widget_destroyed),
|
||||
&window);
|
||||
|
||||
table = gtk_table_new (1, 5, FALSE);
|
||||
table = gtk_grid_new ();
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (window), table);
|
||||
|
||||
@@ -425,60 +425,52 @@ do_appwindow (GtkWidget *do_widget)
|
||||
|
||||
action_group = gtk_action_group_new ("AppWindowActions");
|
||||
open_action = g_object_new (tool_menu_action_get_type (),
|
||||
"name", "Open",
|
||||
"label", "_Open",
|
||||
"tooltip", "Open a file",
|
||||
"stock-id", GTK_STOCK_OPEN,
|
||||
NULL);
|
||||
"name", "Open",
|
||||
"label", "_Open",
|
||||
"tooltip", "Open a file",
|
||||
"stock-id", GTK_STOCK_OPEN,
|
||||
NULL);
|
||||
gtk_action_group_add_action (action_group, open_action);
|
||||
g_object_unref (open_action);
|
||||
gtk_action_group_add_actions (action_group,
|
||||
entries, n_entries,
|
||||
window);
|
||||
entries, n_entries,
|
||||
window);
|
||||
gtk_action_group_add_toggle_actions (action_group,
|
||||
toggle_entries, n_toggle_entries,
|
||||
NULL);
|
||||
toggle_entries, n_toggle_entries,
|
||||
NULL);
|
||||
gtk_action_group_add_radio_actions (action_group,
|
||||
color_entries, n_color_entries,
|
||||
COLOR_RED,
|
||||
G_CALLBACK (activate_radio_action),
|
||||
NULL);
|
||||
color_entries, n_color_entries,
|
||||
COLOR_RED,
|
||||
G_CALLBACK (activate_radio_action),
|
||||
NULL);
|
||||
gtk_action_group_add_radio_actions (action_group,
|
||||
shape_entries, n_shape_entries,
|
||||
SHAPE_SQUARE,
|
||||
G_CALLBACK (activate_radio_action),
|
||||
NULL);
|
||||
shape_entries, n_shape_entries,
|
||||
SHAPE_SQUARE,
|
||||
G_CALLBACK (activate_radio_action),
|
||||
NULL);
|
||||
|
||||
merge = gtk_ui_manager_new ();
|
||||
g_object_set_data_full (G_OBJECT (window), "ui-manager", merge,
|
||||
g_object_unref);
|
||||
g_object_unref);
|
||||
gtk_ui_manager_insert_action_group (merge, action_group, 0);
|
||||
gtk_window_add_accel_group (GTK_WINDOW (window),
|
||||
gtk_ui_manager_get_accel_group (merge));
|
||||
gtk_ui_manager_get_accel_group (merge));
|
||||
|
||||
if (!gtk_ui_manager_add_ui_from_string (merge, ui_info, -1, &error))
|
||||
{
|
||||
g_message ("building menus failed: %s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
{
|
||||
g_message ("building menus failed: %s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
bar = gtk_ui_manager_get_widget (merge, "/MenuBar");
|
||||
gtk_widget_show (bar);
|
||||
gtk_table_attach (GTK_TABLE (table),
|
||||
bar,
|
||||
/* X direction */ /* Y direction */
|
||||
0, 1, 0, 1,
|
||||
GTK_EXPAND | GTK_FILL, 0,
|
||||
0, 0);
|
||||
gtk_widget_set_halign (bar, GTK_ALIGN_FILL);
|
||||
gtk_grid_attach (GTK_GRID (table), bar, 0, 0, 1, 1);
|
||||
|
||||
bar = gtk_ui_manager_get_widget (merge, "/ToolBar");
|
||||
gtk_widget_show (bar);
|
||||
gtk_table_attach (GTK_TABLE (table),
|
||||
bar,
|
||||
/* X direction */ /* Y direction */
|
||||
0, 1, 1, 2,
|
||||
GTK_EXPAND | GTK_FILL, 0,
|
||||
0, 0);
|
||||
gtk_widget_set_halign (bar, GTK_ALIGN_FILL);
|
||||
gtk_grid_attach (GTK_GRID (table), bar, 0, 1, 1, 1);
|
||||
|
||||
/* Create document
|
||||
*/
|
||||
@@ -495,12 +487,8 @@ do_appwindow (GtkWidget *do_widget)
|
||||
g_signal_connect (infobar, "response",
|
||||
G_CALLBACK (gtk_widget_hide), NULL);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table),
|
||||
infobar,
|
||||
/* X direction */ /* Y direction */
|
||||
0, 1, 2, 3,
|
||||
GTK_EXPAND | GTK_FILL, 0,
|
||||
0, 0);
|
||||
gtk_widget_set_halign (infobar, GTK_ALIGN_FILL);
|
||||
gtk_grid_attach (GTK_GRID (table), infobar, 0, 2, 1, 1);
|
||||
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
|
||||
@@ -511,12 +499,11 @@ do_appwindow (GtkWidget *do_widget)
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_SHADOW_IN);
|
||||
|
||||
gtk_table_attach (GTK_TABLE (table),
|
||||
sw,
|
||||
/* X direction */ /* Y direction */
|
||||
0, 1, 3, 4,
|
||||
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
|
||||
0, 0);
|
||||
gtk_widget_set_halign (sw, GTK_ALIGN_FILL);
|
||||
gtk_widget_set_valign (sw, GTK_ALIGN_FILL);
|
||||
gtk_widget_set_hexpand (sw, TRUE);
|
||||
gtk_widget_set_vexpand (sw, TRUE);
|
||||
gtk_grid_attach (GTK_GRID (table), sw, 0, 3, 1, 1);
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window),
|
||||
200, 200);
|
||||
@@ -530,16 +517,12 @@ do_appwindow (GtkWidget *do_widget)
|
||||
/* Create statusbar */
|
||||
|
||||
statusbar = gtk_statusbar_new ();
|
||||
gtk_table_attach (GTK_TABLE (table),
|
||||
statusbar,
|
||||
/* X direction */ /* Y direction */
|
||||
0, 1, 4, 5,
|
||||
GTK_EXPAND | GTK_FILL, 0,
|
||||
0, 0);
|
||||
gtk_widget_set_halign (sw, GTK_ALIGN_FILL);
|
||||
gtk_grid_attach (GTK_GRID (table), statusbar, 0, 4, 1, 1);
|
||||
|
||||
/* Show text widget info in the statusbar */
|
||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (contents));
|
||||
|
||||
|
||||
g_signal_connect_object (buffer,
|
||||
"changed",
|
||||
G_CALLBACK (update_statusbar),
|
||||
@@ -569,4 +552,3 @@ do_appwindow (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
@@ -101,6 +101,7 @@ create_page1 (GtkWidget *assistant)
|
||||
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
|
||||
|
||||
entry = gtk_entry_new ();
|
||||
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
|
||||
gtk_box_pack_start (GTK_BOX (box), entry, TRUE, TRUE, 0);
|
||||
g_signal_connect (G_OBJECT (entry), "changed",
|
||||
G_CALLBACK (on_entry_changed), assistant);
|
||||
@@ -146,22 +147,19 @@ create_page3 (GtkWidget *assistant)
|
||||
static void
|
||||
create_page4 (GtkWidget *assistant)
|
||||
{
|
||||
GtkWidget *page;
|
||||
|
||||
page = gtk_alignment_new (0.5, 0.5, 0.5, 0.0);
|
||||
|
||||
progress_bar = gtk_progress_bar_new ();
|
||||
gtk_container_add (GTK_CONTAINER (page), progress_bar);
|
||||
gtk_widget_set_halign (progress_bar, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (progress_bar, GTK_ALIGN_CENTER);
|
||||
|
||||
gtk_widget_show_all (page);
|
||||
gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
|
||||
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_PROGRESS);
|
||||
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Applying changes");
|
||||
gtk_widget_show (progress_bar);
|
||||
gtk_assistant_append_page (GTK_ASSISTANT (assistant), progress_bar);
|
||||
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), progress_bar, GTK_ASSISTANT_PAGE_PROGRESS);
|
||||
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), progress_bar, "Applying changes");
|
||||
|
||||
/* This prevents the assistant window from being
|
||||
* closed while we're "busy" applying changes.
|
||||
*/
|
||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, FALSE);
|
||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), progress_bar, FALSE);
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
|
||||
@@ -33,7 +33,7 @@ do_builder (GtkWidget *do_widget)
|
||||
static GtkWidget *window = NULL;
|
||||
GError *err = NULL;
|
||||
gchar *filename;
|
||||
|
||||
|
||||
if (!window)
|
||||
{
|
||||
builder = gtk_builder_new ();
|
||||
@@ -41,16 +41,16 @@ do_builder (GtkWidget *do_widget)
|
||||
gtk_builder_add_from_file (builder, filename, &err);
|
||||
g_free (filename);
|
||||
if (err)
|
||||
{
|
||||
g_error ("ERROR: %s\n", err->message);
|
||||
return NULL;
|
||||
}
|
||||
{
|
||||
g_error ("ERROR: %s\n", err->message);
|
||||
return NULL;
|
||||
}
|
||||
gtk_builder_connect_signals (builder, NULL);
|
||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
@@ -58,7 +58,7 @@ do_builder (GtkWidget *do_widget)
|
||||
gtk_widget_show_all (window);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
gtk_widget_destroy (window);
|
||||
window = NULL;
|
||||
}
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
|
||||
static GtkWidget *
|
||||
create_bbox (gint horizontal,
|
||||
char *title,
|
||||
gint spacing,
|
||||
gint layout)
|
||||
char *title,
|
||||
gint spacing,
|
||||
gint layout)
|
||||
{
|
||||
GtkWidget *frame;
|
||||
GtkWidget *bbox;
|
||||
GtkWidget *button;
|
||||
|
||||
|
||||
frame = gtk_frame_new (title);
|
||||
|
||||
if (horizontal)
|
||||
@@ -27,13 +27,13 @@ create_bbox (gint horizontal,
|
||||
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
|
||||
gtk_box_set_spacing (GTK_BOX (bbox), spacing);
|
||||
|
||||
|
||||
button = gtk_button_new_from_stock (GTK_STOCK_OK);
|
||||
gtk_container_add (GTK_CONTAINER (bbox), button);
|
||||
|
||||
|
||||
button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
|
||||
gtk_container_add (GTK_CONTAINER (bbox), button);
|
||||
|
||||
|
||||
button = gtk_button_new_from_stock (GTK_STOCK_HELP);
|
||||
gtk_container_add (GTK_CONTAINER (bbox), button);
|
||||
|
||||
@@ -49,68 +49,68 @@ do_button_box (GtkWidget *do_widget)
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *frame_horz;
|
||||
GtkWidget *frame_vert;
|
||||
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
|
||||
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed),
|
||||
&window);
|
||||
|
||||
G_CALLBACK (gtk_widget_destroyed),
|
||||
&window);
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
|
||||
|
||||
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), main_vbox);
|
||||
|
||||
|
||||
frame_horz = gtk_frame_new ("Horizontal Button Boxes");
|
||||
gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
|
||||
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
|
||||
gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),
|
||||
TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),
|
||||
TRUE, TRUE, 0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),
|
||||
TRUE, TRUE, 5);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),
|
||||
TRUE, TRUE, 5);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),
|
||||
TRUE, TRUE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),
|
||||
TRUE, TRUE, 5);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),
|
||||
TRUE, TRUE, 5);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),
|
||||
TRUE, TRUE, 5);
|
||||
|
||||
frame_vert = gtk_frame_new ("Vertical Button Boxes");
|
||||
gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
|
||||
|
||||
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
|
||||
gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),
|
||||
TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),
|
||||
TRUE, TRUE, 0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),
|
||||
TRUE, TRUE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),
|
||||
TRUE, TRUE, 5);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),
|
||||
TRUE, TRUE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),
|
||||
TRUE, TRUE, 5);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),
|
||||
TRUE, TRUE, 5);
|
||||
gtk_box_pack_start (GTK_BOX (hbox),
|
||||
create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),
|
||||
TRUE, TRUE, 5);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
@@ -118,7 +118,7 @@ do_button_box (GtkWidget *do_widget)
|
||||
gtk_widget_show_all (window);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
gtk_widget_destroy (window);
|
||||
window = NULL;
|
||||
}
|
||||
|
||||
@@ -95,8 +95,8 @@ find_toplevel_at_pointer (GdkDisplay *display)
|
||||
|
||||
static gboolean
|
||||
button_release_event_cb (GtkWidget *widget,
|
||||
GdkEventButton *event,
|
||||
gboolean *clicked)
|
||||
GdkEventButton *event,
|
||||
gboolean *clicked)
|
||||
{
|
||||
*clicked = TRUE;
|
||||
return TRUE;
|
||||
@@ -108,7 +108,7 @@ button_release_event_cb (GtkWidget *widget,
|
||||
*/
|
||||
static GtkWidget *
|
||||
query_for_toplevel (GdkScreen *screen,
|
||||
const char *prompt)
|
||||
const char *prompt)
|
||||
{
|
||||
GdkDisplay *display = gdk_screen_get_display (screen);
|
||||
GtkWidget *popup, *label, *frame;
|
||||
@@ -132,31 +132,31 @@ query_for_toplevel (GdkScreen *screen,
|
||||
cursor = gdk_cursor_new_for_display (display, GDK_CROSSHAIR);
|
||||
|
||||
if (gdk_pointer_grab (gtk_widget_get_window (popup), FALSE,
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL,
|
||||
cursor,
|
||||
GDK_CURRENT_TIME) == GDK_GRAB_SUCCESS)
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL,
|
||||
cursor,
|
||||
GDK_CURRENT_TIME) == GDK_GRAB_SUCCESS)
|
||||
{
|
||||
gboolean clicked = FALSE;
|
||||
|
||||
g_signal_connect (popup, "button-release-event",
|
||||
G_CALLBACK (button_release_event_cb), &clicked);
|
||||
G_CALLBACK (button_release_event_cb), &clicked);
|
||||
|
||||
/* Process events until clicked is set by button_release_event_cb.
|
||||
* We pass in may_block=TRUE since we want to wait if there
|
||||
* are no events currently.
|
||||
*/
|
||||
while (!clicked)
|
||||
g_main_context_iteration (NULL, TRUE);
|
||||
g_main_context_iteration (NULL, TRUE);
|
||||
|
||||
toplevel = find_toplevel_at_pointer (gdk_screen_get_display (screen));
|
||||
if (toplevel == popup)
|
||||
toplevel = NULL;
|
||||
toplevel = NULL;
|
||||
}
|
||||
|
||||
g_object_unref (cursor);
|
||||
gtk_widget_destroy (popup);
|
||||
gdk_flush (); /* Really release the grab */
|
||||
gdk_flush (); /* Really release the grab */
|
||||
|
||||
return toplevel;
|
||||
}
|
||||
@@ -171,8 +171,8 @@ query_change_display (ChangeDisplayInfo *info)
|
||||
GtkWidget *toplevel;
|
||||
|
||||
toplevel = query_for_toplevel (screen,
|
||||
"Please select the toplevel\n"
|
||||
"to move to the new screen");
|
||||
"Please select the toplevel\n"
|
||||
"to move to the new screen");
|
||||
|
||||
if (toplevel)
|
||||
gtk_window_set_screen (GTK_WINDOW (toplevel), info->current_screen);
|
||||
@@ -193,19 +193,19 @@ fill_screens (ChangeDisplayInfo *info)
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < n_screens; i++)
|
||||
{
|
||||
GdkScreen *screen = gdk_display_get_screen (info->current_display, i);
|
||||
GtkTreeIter iter;
|
||||
{
|
||||
GdkScreen *screen = gdk_display_get_screen (info->current_display, i);
|
||||
GtkTreeIter iter;
|
||||
|
||||
gtk_list_store_append (GTK_LIST_STORE (info->screen_model), &iter);
|
||||
gtk_list_store_set (GTK_LIST_STORE (info->screen_model), &iter,
|
||||
SCREEN_COLUMN_NUMBER, i,
|
||||
SCREEN_COLUMN_SCREEN, screen,
|
||||
-1);
|
||||
gtk_list_store_append (GTK_LIST_STORE (info->screen_model), &iter);
|
||||
gtk_list_store_set (GTK_LIST_STORE (info->screen_model), &iter,
|
||||
SCREEN_COLUMN_NUMBER, i,
|
||||
SCREEN_COLUMN_SCREEN, screen,
|
||||
-1);
|
||||
|
||||
if (i == 0)
|
||||
gtk_tree_selection_select_iter (info->screen_selection, &iter);
|
||||
}
|
||||
if (i == 0)
|
||||
gtk_tree_selection_select_iter (info->screen_selection, &iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,8 +215,8 @@ fill_screens (ChangeDisplayInfo *info)
|
||||
*/
|
||||
static void
|
||||
response_cb (GtkDialog *dialog,
|
||||
gint response_id,
|
||||
ChangeDisplayInfo *info)
|
||||
gint response_id,
|
||||
ChangeDisplayInfo *info)
|
||||
{
|
||||
if (response_id == GTK_RESPONSE_OK)
|
||||
query_change_display (info);
|
||||
@@ -230,7 +230,7 @@ response_cb (GtkDialog *dialog,
|
||||
*/
|
||||
static void
|
||||
open_display_cb (GtkWidget *button,
|
||||
ChangeDisplayInfo *info)
|
||||
ChangeDisplayInfo *info)
|
||||
{
|
||||
GtkWidget *content_area;
|
||||
GtkWidget *dialog;
|
||||
@@ -240,11 +240,11 @@ open_display_cb (GtkWidget *button,
|
||||
GdkDisplay *result = NULL;
|
||||
|
||||
dialog = gtk_dialog_new_with_buttons ("Open Display",
|
||||
GTK_WINDOW (info->window),
|
||||
GTK_DIALOG_MODAL,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_OK, GTK_RESPONSE_OK,
|
||||
NULL);
|
||||
GTK_WINDOW (info->window),
|
||||
GTK_DIALOG_MODAL,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_OK, GTK_RESPONSE_OK,
|
||||
NULL);
|
||||
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
|
||||
display_entry = gtk_entry_new ();
|
||||
@@ -264,25 +264,25 @@ open_display_cb (GtkWidget *button,
|
||||
{
|
||||
gint response_id = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
if (response_id != GTK_RESPONSE_OK)
|
||||
break;
|
||||
break;
|
||||
|
||||
new_screen_name = gtk_editable_get_chars (GTK_EDITABLE (display_entry),
|
||||
0, -1);
|
||||
0, -1);
|
||||
|
||||
if (strcmp (new_screen_name, "") != 0)
|
||||
{
|
||||
result = gdk_display_open (new_screen_name);
|
||||
if (!result)
|
||||
{
|
||||
gchar *error_msg =
|
||||
g_strdup_printf ("Can't open display :\n\t%s\nplease try another one\n",
|
||||
new_screen_name);
|
||||
gtk_label_set_text (GTK_LABEL (dialog_label), error_msg);
|
||||
g_free (error_msg);
|
||||
}
|
||||
{
|
||||
result = gdk_display_open (new_screen_name);
|
||||
if (!result)
|
||||
{
|
||||
gchar *error_msg =
|
||||
g_strdup_printf ("Can't open display :\n\t%s\nplease try another one\n",
|
||||
new_screen_name);
|
||||
gtk_label_set_text (GTK_LABEL (dialog_label), error_msg);
|
||||
g_free (error_msg);
|
||||
}
|
||||
|
||||
g_free (new_screen_name);
|
||||
}
|
||||
g_free (new_screen_name);
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
@@ -293,7 +293,7 @@ open_display_cb (GtkWidget *button,
|
||||
*/
|
||||
static void
|
||||
close_display_cb (GtkWidget *button,
|
||||
ChangeDisplayInfo *info)
|
||||
ChangeDisplayInfo *info)
|
||||
{
|
||||
if (info->current_display)
|
||||
gdk_display_close (info->current_display);
|
||||
@@ -305,7 +305,7 @@ close_display_cb (GtkWidget *button,
|
||||
*/
|
||||
static void
|
||||
display_changed_cb (GtkTreeSelection *selection,
|
||||
ChangeDisplayInfo *info)
|
||||
ChangeDisplayInfo *info)
|
||||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
@@ -314,8 +314,8 @@ display_changed_cb (GtkTreeSelection *selection,
|
||||
g_object_unref (info->current_display);
|
||||
if (gtk_tree_selection_get_selected (selection, &model, &iter))
|
||||
gtk_tree_model_get (model, &iter,
|
||||
DISPLAY_COLUMN_DISPLAY, &info->current_display,
|
||||
-1);
|
||||
DISPLAY_COLUMN_DISPLAY, &info->current_display,
|
||||
-1);
|
||||
else
|
||||
info->current_display = NULL;
|
||||
|
||||
@@ -327,7 +327,7 @@ display_changed_cb (GtkTreeSelection *selection,
|
||||
*/
|
||||
static void
|
||||
screen_changed_cb (GtkTreeSelection *selection,
|
||||
ChangeDisplayInfo *info)
|
||||
ChangeDisplayInfo *info)
|
||||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
@@ -336,8 +336,8 @@ screen_changed_cb (GtkTreeSelection *selection,
|
||||
g_object_unref (info->current_screen);
|
||||
if (gtk_tree_selection_get_selected (selection, &model, &iter))
|
||||
gtk_tree_model_get (model, &iter,
|
||||
SCREEN_COLUMN_SCREEN, &info->current_screen,
|
||||
-1);
|
||||
SCREEN_COLUMN_SCREEN, &info->current_screen,
|
||||
-1);
|
||||
else
|
||||
info->current_screen = NULL;
|
||||
}
|
||||
@@ -349,10 +349,10 @@ screen_changed_cb (GtkTreeSelection *selection,
|
||||
*/
|
||||
static void
|
||||
create_frame (ChangeDisplayInfo *info,
|
||||
const char *title,
|
||||
GtkWidget **frame,
|
||||
GtkWidget **tree_view,
|
||||
GtkWidget **button_vbox)
|
||||
const char *title,
|
||||
GtkWidget **frame,
|
||||
GtkWidget **tree_view,
|
||||
GtkWidget **button_vbox)
|
||||
{
|
||||
GtkTreeSelection *selection;
|
||||
GtkWidget *scrollwin;
|
||||
@@ -366,9 +366,9 @@ create_frame (ChangeDisplayInfo *info,
|
||||
|
||||
scrollwin = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin),
|
||||
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin),
|
||||
GTK_SHADOW_IN);
|
||||
GTK_SHADOW_IN);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0);
|
||||
|
||||
*tree_view = gtk_tree_view_new ();
|
||||
@@ -397,7 +397,8 @@ left_align_button_new (const char *label)
|
||||
GtkWidget *button = gtk_button_new_with_mnemonic (label);
|
||||
GtkWidget *child = gtk_bin_get_child (GTK_BIN (button));
|
||||
|
||||
gtk_misc_set_alignment (GTK_MISC (child), 0., 0.5);
|
||||
gtk_widget_set_halign (child, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (child, GTK_ALIGN_CENTER);
|
||||
|
||||
return button;
|
||||
}
|
||||
@@ -425,20 +426,20 @@ create_display_frame (ChangeDisplayInfo *info)
|
||||
gtk_box_pack_start (GTK_BOX (button_vbox), button, FALSE, FALSE, 0);
|
||||
|
||||
info->display_model = (GtkTreeModel *)gtk_list_store_new (DISPLAY_NUM_COLUMNS,
|
||||
G_TYPE_STRING,
|
||||
GDK_TYPE_DISPLAY);
|
||||
G_TYPE_STRING,
|
||||
GDK_TYPE_DISPLAY);
|
||||
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), info->display_model);
|
||||
|
||||
column = gtk_tree_view_column_new_with_attributes ("Name",
|
||||
gtk_cell_renderer_text_new (),
|
||||
"text", DISPLAY_COLUMN_NAME,
|
||||
NULL);
|
||||
gtk_cell_renderer_text_new (),
|
||||
"text", DISPLAY_COLUMN_NAME,
|
||||
NULL);
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
|
||||
|
||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
|
||||
g_signal_connect (selection, "changed",
|
||||
G_CALLBACK (display_changed_cb), info);
|
||||
G_CALLBACK (display_changed_cb), info);
|
||||
|
||||
return frame;
|
||||
}
|
||||
@@ -456,20 +457,20 @@ create_screen_frame (ChangeDisplayInfo *info)
|
||||
create_frame (info, "Screen", &frame, &tree_view, &button_vbox);
|
||||
|
||||
info->screen_model = (GtkTreeModel *)gtk_list_store_new (SCREEN_NUM_COLUMNS,
|
||||
G_TYPE_INT,
|
||||
GDK_TYPE_SCREEN);
|
||||
G_TYPE_INT,
|
||||
GDK_TYPE_SCREEN);
|
||||
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), info->screen_model);
|
||||
|
||||
column = gtk_tree_view_column_new_with_attributes ("Number",
|
||||
gtk_cell_renderer_text_new (),
|
||||
"text", SCREEN_COLUMN_NUMBER,
|
||||
NULL);
|
||||
gtk_cell_renderer_text_new (),
|
||||
"text", SCREEN_COLUMN_NUMBER,
|
||||
NULL);
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
|
||||
|
||||
info->screen_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
|
||||
g_signal_connect (info->screen_selection, "changed",
|
||||
G_CALLBACK (screen_changed_cb), info);
|
||||
G_CALLBACK (screen_changed_cb), info);
|
||||
|
||||
return frame;
|
||||
}
|
||||
@@ -479,8 +480,8 @@ create_screen_frame (ChangeDisplayInfo *info)
|
||||
*/
|
||||
static void
|
||||
display_closed_cb (GdkDisplay *display,
|
||||
gboolean is_error,
|
||||
ChangeDisplayInfo *info)
|
||||
gboolean is_error,
|
||||
ChangeDisplayInfo *info)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
gboolean valid;
|
||||
@@ -492,13 +493,13 @@ display_closed_cb (GdkDisplay *display,
|
||||
GdkDisplay *tmp_display;
|
||||
|
||||
gtk_tree_model_get (info->display_model, &iter,
|
||||
DISPLAY_COLUMN_DISPLAY, &tmp_display,
|
||||
-1);
|
||||
DISPLAY_COLUMN_DISPLAY, &tmp_display,
|
||||
-1);
|
||||
if (tmp_display == display)
|
||||
{
|
||||
gtk_list_store_remove (GTK_LIST_STORE (info->display_model), &iter);
|
||||
break;
|
||||
}
|
||||
{
|
||||
gtk_list_store_remove (GTK_LIST_STORE (info->display_model), &iter);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -508,27 +509,27 @@ display_closed_cb (GdkDisplay *display,
|
||||
*/
|
||||
static void
|
||||
add_display (ChangeDisplayInfo *info,
|
||||
GdkDisplay *display)
|
||||
GdkDisplay *display)
|
||||
{
|
||||
const gchar *name = gdk_display_get_name (display);
|
||||
GtkTreeIter iter;
|
||||
|
||||
gtk_list_store_append (GTK_LIST_STORE (info->display_model), &iter);
|
||||
gtk_list_store_set (GTK_LIST_STORE (info->display_model), &iter,
|
||||
DISPLAY_COLUMN_NAME, name,
|
||||
DISPLAY_COLUMN_DISPLAY, display,
|
||||
-1);
|
||||
DISPLAY_COLUMN_NAME, name,
|
||||
DISPLAY_COLUMN_DISPLAY, display,
|
||||
-1);
|
||||
|
||||
g_signal_connect (display, "closed",
|
||||
G_CALLBACK (display_closed_cb), info);
|
||||
G_CALLBACK (display_closed_cb), info);
|
||||
}
|
||||
|
||||
/* Called when a new display is opened
|
||||
*/
|
||||
static void
|
||||
display_opened_cb (GdkDisplayManager *manager,
|
||||
GdkDisplay *display,
|
||||
ChangeDisplayInfo *info)
|
||||
GdkDisplay *display,
|
||||
ChangeDisplayInfo *info)
|
||||
{
|
||||
add_display (info, display);
|
||||
}
|
||||
@@ -550,7 +551,7 @@ initialize_displays (ChangeDisplayInfo *info)
|
||||
g_slist_free (tmp_list);
|
||||
|
||||
g_signal_connect (manager, "display-opened",
|
||||
G_CALLBACK (display_opened_cb), info);
|
||||
G_CALLBACK (display_opened_cb), info);
|
||||
}
|
||||
|
||||
/* Cleans up when the toplevel is destroyed; we remove the
|
||||
@@ -565,13 +566,13 @@ destroy_info (ChangeDisplayInfo *info)
|
||||
GSList *tmp_list;
|
||||
|
||||
g_signal_handlers_disconnect_by_func (manager,
|
||||
display_opened_cb,
|
||||
info);
|
||||
display_opened_cb,
|
||||
info);
|
||||
|
||||
for (tmp_list = displays; tmp_list; tmp_list = tmp_list->next)
|
||||
g_signal_handlers_disconnect_by_func (tmp_list->data,
|
||||
display_closed_cb,
|
||||
info);
|
||||
display_closed_cb,
|
||||
info);
|
||||
|
||||
g_slist_free (tmp_list);
|
||||
|
||||
@@ -589,7 +590,7 @@ destroy_info (ChangeDisplayInfo *info)
|
||||
|
||||
static void
|
||||
destroy_cb (GObject *object,
|
||||
ChangeDisplayInfo **info)
|
||||
ChangeDisplayInfo **info)
|
||||
{
|
||||
destroy_info (*info);
|
||||
*info = NULL;
|
||||
@@ -612,18 +613,18 @@ do_changedisplay (GtkWidget *do_widget)
|
||||
info = g_new0 (ChangeDisplayInfo, 1);
|
||||
|
||||
info->window = gtk_dialog_new_with_buttons ("Change Screen or display",
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
|
||||
"Change", GTK_RESPONSE_OK,
|
||||
NULL);
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
|
||||
"Change", GTK_RESPONSE_OK,
|
||||
NULL);
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (info->window), 300, 400);
|
||||
|
||||
g_signal_connect (info->window, "response",
|
||||
G_CALLBACK (response_cb), info);
|
||||
G_CALLBACK (response_cb), info);
|
||||
g_signal_connect (info->window, "destroy",
|
||||
G_CALLBACK (destroy_cb), &info);
|
||||
G_CALLBACK (destroy_cb), &info);
|
||||
|
||||
content_area = gtk_dialog_get_content_area (GTK_DIALOG (info->window));
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
/* Combo boxes
|
||||
/* Combo boxes
|
||||
*
|
||||
* The ComboBox widget allows to select one option out of a list.
|
||||
* The ComboBoxEntry additionally allows the user to enter a value
|
||||
* that is not in the list of options.
|
||||
* that is not in the list of options.
|
||||
*
|
||||
* How the options are displayed is controlled by cell renderers.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
enum
|
||||
enum
|
||||
{
|
||||
PIXBUF_COL,
|
||||
TEXT_COL
|
||||
@@ -20,16 +20,16 @@ strip_underscore (const gchar *text)
|
||||
{
|
||||
gchar *p, *q;
|
||||
gchar *result;
|
||||
|
||||
|
||||
result = g_strdup (text);
|
||||
p = q = result;
|
||||
while (*p)
|
||||
while (*p)
|
||||
{
|
||||
if (*p != '_')
|
||||
{
|
||||
*q = *p;
|
||||
q++;
|
||||
}
|
||||
{
|
||||
*q = *p;
|
||||
q++;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
*q = '\0';
|
||||
@@ -46,7 +46,7 @@ create_stock_icon_store (void)
|
||||
GTK_STOCK_NEW,
|
||||
GTK_STOCK_CLEAR,
|
||||
NULL,
|
||||
GTK_STOCK_OPEN
|
||||
GTK_STOCK_OPEN
|
||||
};
|
||||
|
||||
GtkStockItem item;
|
||||
@@ -58,50 +58,50 @@ create_stock_icon_store (void)
|
||||
gint i;
|
||||
|
||||
cellview = gtk_cell_view_new ();
|
||||
|
||||
|
||||
store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (stock_id); i++)
|
||||
{
|
||||
if (stock_id[i])
|
||||
{
|
||||
pixbuf = gtk_widget_render_icon_pixbuf (cellview, stock_id[i],
|
||||
GTK_ICON_SIZE_BUTTON);
|
||||
gtk_stock_lookup (stock_id[i], &item);
|
||||
label = strip_underscore (item.label);
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter,
|
||||
PIXBUF_COL, pixbuf,
|
||||
TEXT_COL, label,
|
||||
-1);
|
||||
g_object_unref (pixbuf);
|
||||
g_free (label);
|
||||
}
|
||||
{
|
||||
pixbuf = gtk_widget_render_icon_pixbuf (cellview, stock_id[i],
|
||||
GTK_ICON_SIZE_BUTTON);
|
||||
gtk_stock_lookup (stock_id[i], &item);
|
||||
label = strip_underscore (item.label);
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter,
|
||||
PIXBUF_COL, pixbuf,
|
||||
TEXT_COL, label,
|
||||
-1);
|
||||
g_object_unref (pixbuf);
|
||||
g_free (label);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter,
|
||||
PIXBUF_COL, NULL,
|
||||
TEXT_COL, "separator",
|
||||
-1);
|
||||
}
|
||||
{
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter,
|
||||
PIXBUF_COL, NULL,
|
||||
TEXT_COL, "separator",
|
||||
-1);
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_destroy (cellview);
|
||||
|
||||
|
||||
return GTK_TREE_MODEL (store);
|
||||
}
|
||||
|
||||
/* A GtkCellLayoutDataFunc that demonstrates how one can control
|
||||
* sensitivity of rows. This particular function does nothing
|
||||
* sensitivity of rows. This particular function does nothing
|
||||
* useful and just makes the second row insensitive.
|
||||
*/
|
||||
static void
|
||||
set_sensitive (GtkCellLayout *cell_layout,
|
||||
GtkCellRenderer *cell,
|
||||
GtkTreeModel *tree_model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
GtkCellRenderer *cell,
|
||||
GtkTreeModel *tree_model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
{
|
||||
GtkTreePath *path;
|
||||
gint *indices;
|
||||
@@ -116,13 +116,13 @@ set_sensitive (GtkCellLayout *cell_layout,
|
||||
}
|
||||
|
||||
/* A GtkTreeViewRowSeparatorFunc that demonstrates how rows can be
|
||||
* rendered as separators. This particular function does nothing
|
||||
* rendered as separators. This particular function does nothing
|
||||
* useful and just turns the fourth row into a separator.
|
||||
*/
|
||||
static gboolean
|
||||
is_separator (GtkTreeModel *model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
{
|
||||
GtkTreePath *path;
|
||||
gboolean result;
|
||||
@@ -141,11 +141,11 @@ create_capital_store (void)
|
||||
gchar *group;
|
||||
gchar *capital;
|
||||
} capitals[] = {
|
||||
{ "A - B", NULL },
|
||||
{ "A - B", NULL },
|
||||
{ NULL, "Albany" },
|
||||
{ NULL, "Annapolis" },
|
||||
{ NULL, "Atlanta" },
|
||||
{ NULL, "Augusta" },
|
||||
{ NULL, "Augusta" },
|
||||
{ NULL, "Austin" },
|
||||
{ NULL, "Baton Rouge" },
|
||||
{ NULL, "Bismarck" },
|
||||
@@ -199,36 +199,36 @@ create_capital_store (void)
|
||||
{ NULL, "Trenton" },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
GtkTreeIter iter, iter2;
|
||||
GtkTreeStore *store;
|
||||
gint i;
|
||||
|
||||
store = gtk_tree_store_new (1, G_TYPE_STRING);
|
||||
|
||||
|
||||
for (i = 0; capitals[i].group || capitals[i].capital; i++)
|
||||
{
|
||||
if (capitals[i].group)
|
||||
{
|
||||
gtk_tree_store_append (store, &iter, NULL);
|
||||
gtk_tree_store_set (store, &iter, 0, capitals[i].group, -1);
|
||||
}
|
||||
{
|
||||
gtk_tree_store_append (store, &iter, NULL);
|
||||
gtk_tree_store_set (store, &iter, 0, capitals[i].group, -1);
|
||||
}
|
||||
else if (capitals[i].capital)
|
||||
{
|
||||
gtk_tree_store_append (store, &iter2, &iter);
|
||||
gtk_tree_store_set (store, &iter2, 0, capitals[i].capital, -1);
|
||||
}
|
||||
{
|
||||
gtk_tree_store_append (store, &iter2, &iter);
|
||||
gtk_tree_store_set (store, &iter2, 0, capitals[i].capital, -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return GTK_TREE_MODEL (store);
|
||||
}
|
||||
|
||||
static void
|
||||
is_capital_sensitive (GtkCellLayout *cell_layout,
|
||||
GtkCellRenderer *cell,
|
||||
GtkTreeModel *tree_model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
GtkCellRenderer *cell,
|
||||
GtkTreeModel *tree_model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
{
|
||||
gboolean sensitive;
|
||||
|
||||
@@ -274,8 +274,8 @@ struct _MaskEntryClass
|
||||
static void mask_entry_editable_init (GtkEditableInterface *iface);
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (MaskEntry, mask_entry, GTK_TYPE_ENTRY,
|
||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE,
|
||||
mask_entry_editable_init));
|
||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE,
|
||||
mask_entry_editable_init));
|
||||
|
||||
|
||||
static void
|
||||
@@ -286,10 +286,10 @@ mask_entry_set_background (MaskEntry *entry)
|
||||
if (entry->mask)
|
||||
{
|
||||
if (!g_regex_match_simple (entry->mask, gtk_entry_get_text (GTK_ENTRY (entry)), 0, 0))
|
||||
{
|
||||
gtk_widget_override_color (GTK_WIDGET (entry), 0, &error_color);
|
||||
return;
|
||||
}
|
||||
{
|
||||
gtk_widget_override_color (GTK_WIDGET (entry), 0, &error_color);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
gtk_widget_override_color (GTK_WIDGET (entry), 0, NULL);
|
||||
@@ -338,58 +338,58 @@ do_combobox (GtkWidget *do_widget)
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Combo boxes");
|
||||
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed),
|
||||
&window);
|
||||
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
|
||||
/* A combobox demonstrating cell renderers, separators and
|
||||
* insensitive rows
|
||||
* insensitive rows
|
||||
*/
|
||||
frame = gtk_frame_new ("Some stock icons");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (box), 5);
|
||||
gtk_container_add (GTK_CONTAINER (frame), box);
|
||||
|
||||
|
||||
model = create_stock_icon_store ();
|
||||
combo = gtk_combo_box_new_with_model (model);
|
||||
g_object_unref (model);
|
||||
gtk_container_add (GTK_CONTAINER (box), combo);
|
||||
|
||||
|
||||
renderer = gtk_cell_renderer_pixbuf_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, FALSE);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
|
||||
"pixbuf", PIXBUF_COL,
|
||||
NULL);
|
||||
"pixbuf", PIXBUF_COL,
|
||||
NULL);
|
||||
|
||||
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
|
||||
renderer,
|
||||
set_sensitive,
|
||||
NULL, NULL);
|
||||
|
||||
renderer,
|
||||
set_sensitive,
|
||||
NULL, NULL);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
|
||||
"text", TEXT_COL,
|
||||
NULL);
|
||||
"text", TEXT_COL,
|
||||
NULL);
|
||||
|
||||
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
|
||||
renderer,
|
||||
set_sensitive,
|
||||
NULL, NULL);
|
||||
renderer,
|
||||
set_sensitive,
|
||||
NULL, NULL);
|
||||
|
||||
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo),
|
||||
is_separator, NULL, NULL);
|
||||
|
||||
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo),
|
||||
is_separator, NULL, NULL);
|
||||
|
||||
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
|
||||
|
||||
|
||||
/* A combobox demonstrating trees.
|
||||
*/
|
||||
frame = gtk_frame_new ("Where are we ?");
|
||||
@@ -398,7 +398,7 @@ do_combobox (GtkWidget *do_widget)
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (box), 5);
|
||||
gtk_container_add (GTK_CONTAINER (frame), box);
|
||||
|
||||
|
||||
model = create_capital_store ();
|
||||
combo = gtk_combo_box_new_with_model (model);
|
||||
g_object_unref (model);
|
||||
@@ -407,12 +407,12 @@ do_combobox (GtkWidget *do_widget)
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
|
||||
"text", 0,
|
||||
NULL);
|
||||
"text", 0,
|
||||
NULL);
|
||||
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
|
||||
renderer,
|
||||
is_capital_sensitive,
|
||||
NULL, NULL);
|
||||
renderer,
|
||||
is_capital_sensitive,
|
||||
NULL, NULL);
|
||||
|
||||
path = gtk_tree_path_new_from_indices (0, 8, -1);
|
||||
gtk_tree_model_get_iter (model, &iter, path);
|
||||
@@ -423,18 +423,18 @@ do_combobox (GtkWidget *do_widget)
|
||||
*/
|
||||
frame = gtk_frame_new ("Editable");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (box), 5);
|
||||
gtk_container_add (GTK_CONTAINER (frame), box);
|
||||
|
||||
|
||||
combo = gtk_combo_box_text_new_with_entry ();
|
||||
fill_combo_entry (combo);
|
||||
gtk_container_add (GTK_CONTAINER (box), combo);
|
||||
|
||||
|
||||
entry = g_object_new (TYPE_MASK_ENTRY, NULL);
|
||||
MASK_ENTRY (entry)->mask = "^([0-9]*|One|Two|2\302\275|Three)$";
|
||||
|
||||
|
||||
gtk_container_remove (GTK_CONTAINER (combo), gtk_bin_get_child (GTK_BIN (combo)));
|
||||
gtk_container_add (GTK_CONTAINER (combo), entry);
|
||||
|
||||
@@ -464,7 +464,7 @@ do_combobox (GtkWidget *do_widget)
|
||||
gtk_widget_show_all (window);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
gtk_widget_destroy (window);
|
||||
window = NULL;
|
||||
}
|
||||
|
||||
@@ -11,17 +11,17 @@ static GtkWidget *entry2 = NULL;
|
||||
|
||||
static void
|
||||
message_dialog_clicked (GtkButton *button,
|
||||
gpointer user_data)
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
static gint i = 1;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_OK,
|
||||
"This message box has been popped up the following\n"
|
||||
"number of times:");
|
||||
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_OK,
|
||||
"This message box has been popped up the following\n"
|
||||
"number of times:");
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
|
||||
"%d", i);
|
||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
@@ -31,7 +31,7 @@ message_dialog_clicked (GtkButton *button,
|
||||
|
||||
static void
|
||||
interactive_dialog_clicked (GtkButton *button,
|
||||
gpointer user_data)
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkWidget *content_area;
|
||||
GtkWidget *dialog;
|
||||
@@ -44,13 +44,13 @@ interactive_dialog_clicked (GtkButton *button,
|
||||
gint response;
|
||||
|
||||
dialog = gtk_dialog_new_with_buttons ("Interactive Dialog",
|
||||
GTK_WINDOW (window),
|
||||
GTK_DIALOG_MODAL| GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_STOCK_OK,
|
||||
GTK_RESPONSE_OK,
|
||||
GTK_WINDOW (window),
|
||||
GTK_DIALOG_MODAL| GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_STOCK_OK,
|
||||
GTK_RESPONSE_OK,
|
||||
"_Non-stock Button",
|
||||
GTK_RESPONSE_CANCEL,
|
||||
NULL);
|
||||
NULL);
|
||||
|
||||
content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
|
||||
|
||||
@@ -61,29 +61,25 @@ interactive_dialog_clicked (GtkButton *button,
|
||||
stock = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), stock, FALSE, FALSE, 0);
|
||||
|
||||
table = gtk_table_new (2, 2, FALSE);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (table), 4);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
|
||||
table = gtk_grid_new ();
|
||||
gtk_grid_set_row_spacing (GTK_GRID (table), 4);
|
||||
gtk_grid_set_column_spacing (GTK_GRID (table), 4);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), table, TRUE, TRUE, 0);
|
||||
label = gtk_label_new_with_mnemonic ("_Entry 1");
|
||||
gtk_table_attach_defaults (GTK_TABLE (table),
|
||||
label,
|
||||
0, 1, 0, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
|
||||
local_entry1 = gtk_entry_new ();
|
||||
gtk_entry_set_text (GTK_ENTRY (local_entry1), gtk_entry_get_text (GTK_ENTRY (entry1)));
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), local_entry1, 1, 2, 0, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), local_entry1, 1, 0, 1, 1);
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), local_entry1);
|
||||
|
||||
label = gtk_label_new_with_mnemonic ("E_ntry 2");
|
||||
gtk_table_attach_defaults (GTK_TABLE (table),
|
||||
label,
|
||||
0, 1, 1, 2);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 1, 1, 1);
|
||||
|
||||
local_entry2 = gtk_entry_new ();
|
||||
gtk_entry_set_text (GTK_ENTRY (local_entry2), gtk_entry_get_text (GTK_ENTRY (entry2)));
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), local_entry2, 1, 2, 1, 2);
|
||||
gtk_grid_attach (GTK_GRID (table), local_entry2, 1, 1, 1, 1);
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), local_entry2);
|
||||
|
||||
|
||||
gtk_widget_show_all (hbox);
|
||||
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
|
||||
@@ -106,12 +102,12 @@ do_dialog (GtkWidget *do_widget)
|
||||
GtkWidget *button;
|
||||
GtkWidget *table;
|
||||
GtkWidget *label;
|
||||
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Dialogs");
|
||||
|
||||
g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
@@ -129,7 +125,7 @@ do_dialog (GtkWidget *do_widget)
|
||||
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||
button = gtk_button_new_with_mnemonic ("_Message Dialog");
|
||||
g_signal_connect (button, "clicked",
|
||||
G_CALLBACK (message_dialog_clicked), NULL);
|
||||
G_CALLBACK (message_dialog_clicked), NULL);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox), gtk_separator_new (GTK_ORIENTATION_HORIZONTAL),
|
||||
@@ -142,33 +138,27 @@ do_dialog (GtkWidget *do_widget)
|
||||
|
||||
button = gtk_button_new_with_mnemonic ("_Interactive Dialog");
|
||||
g_signal_connect (button, "clicked",
|
||||
G_CALLBACK (interactive_dialog_clicked), NULL);
|
||||
G_CALLBACK (interactive_dialog_clicked), NULL);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
|
||||
|
||||
table = gtk_table_new (2, 2, FALSE);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (table), 4);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
|
||||
table = gtk_grid_new ();
|
||||
gtk_grid_set_row_spacing (GTK_GRID (table), 4);
|
||||
gtk_grid_set_column_spacing (GTK_GRID (table), 4);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), table, FALSE, FALSE, 0);
|
||||
|
||||
label = gtk_label_new_with_mnemonic ("_Entry 1");
|
||||
gtk_table_attach_defaults (GTK_TABLE (table),
|
||||
label,
|
||||
0, 1, 0, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
|
||||
|
||||
entry1 = gtk_entry_new ();
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), entry1, 1, 2, 0, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), entry1, 1, 0, 1, 1);
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry1);
|
||||
|
||||
label = gtk_label_new_with_mnemonic ("E_ntry 2");
|
||||
|
||||
gtk_table_attach_defaults (GTK_TABLE (table),
|
||||
label,
|
||||
0, 1, 1, 2);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 1, 1, 1);
|
||||
|
||||
entry2 = gtk_entry_new ();
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), entry2, 1, 2, 1, 2);
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry2);
|
||||
gtk_grid_attach (GTK_GRID (table), entry2, 1, 1, 1, 1);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
@@ -176,7 +166,7 @@ do_dialog (GtkWidget *do_widget)
|
||||
gtk_widget_show_all (window);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
gtk_widget_destroy (window);
|
||||
window = NULL;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* GtkCellRenderer::editing-started signal to do custom setup of the
|
||||
* editable widget.
|
||||
*
|
||||
* The cell renderers used in this demo are GtkCellRendererText,
|
||||
* The cell renderers used in this demo are GtkCellRendererText,
|
||||
* GtkCellRendererCombo and GtkCellRendererProgress.
|
||||
*/
|
||||
|
||||
@@ -205,7 +205,7 @@ editing_started (GtkCellRenderer *cell,
|
||||
const gchar *path,
|
||||
gpointer data)
|
||||
{
|
||||
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (editable),
|
||||
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (editable),
|
||||
separator_row, NULL, NULL);
|
||||
}
|
||||
|
||||
@@ -259,7 +259,7 @@ cell_edited (GtkCellRendererText *cell,
|
||||
}
|
||||
|
||||
static void
|
||||
add_columns (GtkTreeView *treeview,
|
||||
add_columns (GtkTreeView *treeview,
|
||||
GtkTreeModel *items_model,
|
||||
GtkTreeModel *numbers_model)
|
||||
{
|
||||
@@ -306,8 +306,6 @@ add_columns (GtkTreeView *treeview,
|
||||
-1, "Yummy", renderer,
|
||||
"value", COLUMN_ITEM_YUMMY,
|
||||
NULL);
|
||||
|
||||
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
|
||||
@@ -20,17 +20,17 @@ do_entry_buffer (GtkWidget *do_widget)
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_dialog_new_with_buttons ("GtkEntryBuffer",
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE,
|
||||
GTK_RESPONSE_NONE,
|
||||
NULL);
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE,
|
||||
GTK_RESPONSE_NONE,
|
||||
NULL);
|
||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||
|
||||
g_signal_connect (window, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
|
||||
|
||||
@@ -64,5 +64,3 @@ do_entry_buffer (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ create_completion_model (void)
|
||||
{
|
||||
GtkListStore *store;
|
||||
GtkTreeIter iter;
|
||||
|
||||
|
||||
store = gtk_list_store_new (1, G_TYPE_STRING);
|
||||
|
||||
/* Append one word */
|
||||
@@ -29,7 +29,7 @@ create_completion_model (void)
|
||||
/* And another word */
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter, 0, "totally", -1);
|
||||
|
||||
|
||||
return GTK_TREE_MODEL (store);
|
||||
}
|
||||
|
||||
@@ -43,51 +43,51 @@ do_entry_completion (GtkWidget *do_widget)
|
||||
GtkWidget *entry;
|
||||
GtkEntryCompletion *completion;
|
||||
GtkTreeModel *completion_model;
|
||||
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_dialog_new_with_buttons ("GtkEntryCompletion",
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE,
|
||||
GTK_RESPONSE_NONE,
|
||||
NULL);
|
||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||
{
|
||||
window = gtk_dialog_new_with_buttons ("GtkEntryCompletion",
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE,
|
||||
GTK_RESPONSE_NONE,
|
||||
NULL);
|
||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||
|
||||
g_signal_connect (window, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
g_signal_connect (window, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
|
||||
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
||||
gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
||||
gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
|
||||
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label), "Completion demo, try writing <b>total</b> or <b>gnome</b> for example.");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label), "Completion demo, try writing <b>total</b> or <b>gnome</b> for example.");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
|
||||
|
||||
/* Create our entry */
|
||||
entry = gtk_entry_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
|
||||
/* Create our entry */
|
||||
entry = gtk_entry_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
|
||||
|
||||
/* Create the completion object */
|
||||
completion = gtk_entry_completion_new ();
|
||||
/* Create the completion object */
|
||||
completion = gtk_entry_completion_new ();
|
||||
|
||||
/* Assign the completion to the entry */
|
||||
gtk_entry_set_completion (GTK_ENTRY (entry), completion);
|
||||
g_object_unref (completion);
|
||||
|
||||
/* Create a tree model and use it as the completion model */
|
||||
completion_model = create_completion_model ();
|
||||
gtk_entry_completion_set_model (completion, completion_model);
|
||||
g_object_unref (completion_model);
|
||||
|
||||
/* Use model column 0 as the text column */
|
||||
gtk_entry_completion_set_text_column (completion, 0);
|
||||
}
|
||||
/* Assign the completion to the entry */
|
||||
gtk_entry_set_completion (GTK_ENTRY (entry), completion);
|
||||
g_object_unref (completion);
|
||||
|
||||
/* Create a tree model and use it as the completion model */
|
||||
completion_model = create_completion_model ();
|
||||
gtk_entry_completion_set_model (completion, completion_model);
|
||||
g_object_unref (completion_model);
|
||||
|
||||
/* Use model column 0 as the text column */
|
||||
gtk_entry_completion_set_text_column (completion, 0);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show_all (window);
|
||||
@@ -96,5 +96,3 @@ do_entry_completion (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -17,21 +17,21 @@ do_expander (GtkWidget *do_widget)
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *label;
|
||||
GtkWidget *expander;
|
||||
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_dialog_new_with_buttons ("GtkExpander",
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE,
|
||||
GTK_RESPONSE_NONE,
|
||||
NULL);
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE,
|
||||
GTK_RESPONSE_NONE,
|
||||
NULL);
|
||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||
|
||||
g_signal_connect (window, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
|
||||
|
||||
@@ -57,5 +57,3 @@ do_expander (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* Text Widget/Hypertext
|
||||
*
|
||||
* Usually, tags modify the appearance of text in the view, e.g. making it
|
||||
* bold or colored or underlined. But tags are not restricted to appearance.
|
||||
* They can also affect the behavior of mouse and key presses, as this demo
|
||||
* Usually, tags modify the appearance of text in the view, e.g. making it
|
||||
* bold or colored or underlined. But tags are not restricted to appearance.
|
||||
* They can also affect the behavior of mouse and key presses, as this demo
|
||||
* shows.
|
||||
*/
|
||||
|
||||
@@ -12,19 +12,19 @@
|
||||
/* Inserts a piece of text into the buffer, giving it the usual
|
||||
* appearance of a hyperlink in a web browser: blue and underlined.
|
||||
* Additionally, attaches some data on the tag, to make it recognizable
|
||||
* as a link.
|
||||
* as a link.
|
||||
*/
|
||||
static void
|
||||
insert_link (GtkTextBuffer *buffer,
|
||||
GtkTextIter *iter,
|
||||
gchar *text,
|
||||
static void
|
||||
insert_link (GtkTextBuffer *buffer,
|
||||
GtkTextIter *iter,
|
||||
gchar *text,
|
||||
gint page)
|
||||
{
|
||||
GtkTextTag *tag;
|
||||
|
||||
tag = gtk_text_buffer_create_tag (buffer, NULL,
|
||||
"foreground", "blue",
|
||||
"underline", PANGO_UNDERLINE_SINGLE,
|
||||
|
||||
tag = gtk_text_buffer_create_tag (buffer, NULL,
|
||||
"foreground", "blue",
|
||||
"underline", PANGO_UNDERLINE_SINGLE,
|
||||
NULL);
|
||||
g_object_set_data (G_OBJECT (tag), "page", GINT_TO_POINTER (page));
|
||||
gtk_text_buffer_insert_with_tags (buffer, iter, text, -1, tag, NULL);
|
||||
@@ -34,7 +34,7 @@ insert_link (GtkTextBuffer *buffer,
|
||||
* hypertext app, this method would parse a file to identify the links.
|
||||
*/
|
||||
static void
|
||||
show_page (GtkTextBuffer *buffer,
|
||||
show_page (GtkTextBuffer *buffer,
|
||||
gint page)
|
||||
{
|
||||
GtkTextIter iter;
|
||||
@@ -51,7 +51,7 @@ show_page (GtkTextBuffer *buffer,
|
||||
}
|
||||
else if (page == 2)
|
||||
{
|
||||
gtk_text_buffer_insert (buffer, &iter,
|
||||
gtk_text_buffer_insert (buffer, &iter,
|
||||
"A tag is an attribute that can be applied to some range of text. "
|
||||
"For example, a tag might be called \"bold\" and make the text inside "
|
||||
"the tag bold. However, the tag concept is more general than that; "
|
||||
@@ -60,27 +60,27 @@ show_page (GtkTextBuffer *buffer,
|
||||
"user can't edit it, or countless other things.\n", -1);
|
||||
insert_link (buffer, &iter, "Go back", 1);
|
||||
}
|
||||
else if (page == 3)
|
||||
else if (page == 3)
|
||||
{
|
||||
GtkTextTag *tag;
|
||||
|
||||
tag = gtk_text_buffer_create_tag (buffer, NULL,
|
||||
"weight", PANGO_WEIGHT_BOLD,
|
||||
|
||||
tag = gtk_text_buffer_create_tag (buffer, NULL,
|
||||
"weight", PANGO_WEIGHT_BOLD,
|
||||
NULL);
|
||||
gtk_text_buffer_insert_with_tags (buffer, &iter, "hypertext:\n", -1, tag, NULL);
|
||||
gtk_text_buffer_insert (buffer, &iter,
|
||||
gtk_text_buffer_insert (buffer, &iter,
|
||||
"machine-readable text that is not sequential but is organized "
|
||||
"so that related items of information are connected.\n", -1);
|
||||
insert_link (buffer, &iter, "Go back", 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Looks at all tags covering the position of iter in the text view,
|
||||
/* Looks at all tags covering the position of iter in the text view,
|
||||
* and if one of them is a link, follow it by showing the page identified
|
||||
* by the data attached to it.
|
||||
*/
|
||||
static void
|
||||
follow_if_link (GtkWidget *text_view,
|
||||
follow_if_link (GtkWidget *text_view,
|
||||
GtkTextIter *iter)
|
||||
{
|
||||
GSList *tags = NULL, *tagp = NULL;
|
||||
@@ -98,7 +98,7 @@ follow_if_link (GtkWidget *text_view,
|
||||
}
|
||||
}
|
||||
|
||||
if (tags)
|
||||
if (tags)
|
||||
g_slist_free (tags);
|
||||
}
|
||||
|
||||
@@ -113,10 +113,10 @@ key_press_event (GtkWidget *text_view,
|
||||
|
||||
switch (event->keyval)
|
||||
{
|
||||
case GDK_KEY_Return:
|
||||
case GDK_KEY_Return:
|
||||
case GDK_KEY_KP_Enter:
|
||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
|
||||
gtk_text_buffer_get_iter_at_mark (buffer, &iter,
|
||||
gtk_text_buffer_get_iter_at_mark (buffer, &iter,
|
||||
gtk_text_buffer_get_insert (buffer));
|
||||
follow_if_link (text_view, &iter);
|
||||
break;
|
||||
@@ -154,7 +154,7 @@ event_after (GtkWidget *text_view,
|
||||
if (gtk_text_iter_get_offset (&start) != gtk_text_iter_get_offset (&end))
|
||||
return FALSE;
|
||||
|
||||
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
|
||||
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
|
||||
GTK_TEXT_WINDOW_WIDGET,
|
||||
event->x, event->y, &x, &y);
|
||||
|
||||
@@ -169,7 +169,7 @@ static gboolean hovering_over_link = FALSE;
|
||||
static GdkCursor *hand_cursor = NULL;
|
||||
static GdkCursor *regular_cursor = NULL;
|
||||
|
||||
/* Looks at all tags covering the position (x, y) in the text view,
|
||||
/* Looks at all tags covering the position (x, y) in the text view,
|
||||
* and if one of them is a link, change the cursor to the "hands" cursor
|
||||
* typically used by web browsers.
|
||||
*/
|
||||
@@ -183,14 +183,14 @@ set_cursor_if_appropriate (GtkTextView *text_view,
|
||||
gboolean hovering = FALSE;
|
||||
|
||||
gtk_text_view_get_iter_at_location (text_view, &iter, x, y);
|
||||
|
||||
|
||||
tags = gtk_text_iter_get_tags (&iter);
|
||||
for (tagp = tags; tagp != NULL; tagp = tagp->next)
|
||||
{
|
||||
GtkTextTag *tag = tagp->data;
|
||||
gint page = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tag), "page"));
|
||||
|
||||
if (page != 0)
|
||||
if (page != 0)
|
||||
{
|
||||
hovering = TRUE;
|
||||
break;
|
||||
@@ -207,11 +207,11 @@ set_cursor_if_appropriate (GtkTextView *text_view,
|
||||
gdk_window_set_cursor (gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT), regular_cursor);
|
||||
}
|
||||
|
||||
if (tags)
|
||||
if (tags)
|
||||
g_slist_free (tags);
|
||||
}
|
||||
|
||||
/* Update the cursor image if the pointer moved.
|
||||
/* Update the cursor image if the pointer moved.
|
||||
*/
|
||||
static gboolean
|
||||
motion_notify_event (GtkWidget *text_view,
|
||||
@@ -219,7 +219,7 @@ motion_notify_event (GtkWidget *text_view,
|
||||
{
|
||||
gint x, y;
|
||||
|
||||
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
|
||||
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
|
||||
GTK_TEXT_WINDOW_WIDGET,
|
||||
event->x, event->y, &x, &y);
|
||||
|
||||
@@ -242,7 +242,7 @@ visibility_notify_event (GtkWidget *text_view,
|
||||
gdk_window_get_pointer (gtk_widget_get_window (text_view),
|
||||
&wx, &wy, NULL);
|
||||
|
||||
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
|
||||
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
|
||||
GTK_TEXT_WINDOW_WIDGET,
|
||||
wx, wy, &bx, &by);
|
||||
|
||||
@@ -264,13 +264,13 @@ do_hypertext (GtkWidget *do_widget)
|
||||
|
||||
hand_cursor = gdk_cursor_new (GDK_HAND2);
|
||||
regular_cursor = gdk_cursor_new (GDK_XTERM);
|
||||
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_default_size (GTK_WINDOW (window),
|
||||
450, 450);
|
||||
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
@@ -279,17 +279,17 @@ do_hypertext (GtkWidget *do_widget)
|
||||
|
||||
view = gtk_text_view_new ();
|
||||
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
|
||||
g_signal_connect (view, "key-press-event",
|
||||
g_signal_connect (view, "key-press-event",
|
||||
G_CALLBACK (key_press_event), NULL);
|
||||
g_signal_connect (view, "event-after",
|
||||
g_signal_connect (view, "event-after",
|
||||
G_CALLBACK (event_after), NULL);
|
||||
g_signal_connect (view, "motion-notify-event",
|
||||
g_signal_connect (view, "motion-notify-event",
|
||||
G_CALLBACK (motion_notify_event), NULL);
|
||||
g_signal_connect (view, "visibility-notify-event",
|
||||
g_signal_connect (view, "visibility-notify-event",
|
||||
G_CALLBACK (visibility_notify_event), NULL);
|
||||
|
||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
|
||||
|
||||
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
@@ -314,4 +314,3 @@ do_hypertext (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
@@ -85,23 +85,23 @@ fill_store (GtkListStore *store)
|
||||
|
||||
/* We ignore hidden files that start with a '.' */
|
||||
if (name[0] != '.')
|
||||
{
|
||||
path = g_build_filename (parent, name, NULL);
|
||||
{
|
||||
path = g_build_filename (parent, name, NULL);
|
||||
|
||||
is_dir = g_file_test (path, G_FILE_TEST_IS_DIR);
|
||||
is_dir = g_file_test (path, G_FILE_TEST_IS_DIR);
|
||||
|
||||
display_name = g_filename_to_utf8 (name, -1, NULL, NULL, NULL);
|
||||
display_name = g_filename_to_utf8 (name, -1, NULL, NULL, NULL);
|
||||
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter,
|
||||
COL_PATH, path,
|
||||
COL_DISPLAY_NAME, display_name,
|
||||
COL_IS_DIRECTORY, is_dir,
|
||||
COL_PIXBUF, is_dir ? folder_pixbuf : file_pixbuf,
|
||||
-1);
|
||||
g_free (path);
|
||||
g_free (display_name);
|
||||
}
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter,
|
||||
COL_PATH, path,
|
||||
COL_DISPLAY_NAME, display_name,
|
||||
COL_IS_DIRECTORY, is_dir,
|
||||
COL_PIXBUF, is_dir ? folder_pixbuf : file_pixbuf,
|
||||
-1);
|
||||
g_free (path);
|
||||
g_free (display_name);
|
||||
}
|
||||
|
||||
name = g_dir_read_name (dir);
|
||||
}
|
||||
@@ -110,9 +110,9 @@ fill_store (GtkListStore *store)
|
||||
|
||||
static gint
|
||||
sort_func (GtkTreeModel *model,
|
||||
GtkTreeIter *a,
|
||||
GtkTreeIter *b,
|
||||
gpointer user_data)
|
||||
GtkTreeIter *a,
|
||||
GtkTreeIter *b,
|
||||
gpointer user_data)
|
||||
{
|
||||
gboolean is_dir_a, is_dir_b;
|
||||
gchar *name_a, *name_b;
|
||||
@@ -124,14 +124,14 @@ sort_func (GtkTreeModel *model,
|
||||
|
||||
|
||||
gtk_tree_model_get (model, a,
|
||||
COL_IS_DIRECTORY, &is_dir_a,
|
||||
COL_DISPLAY_NAME, &name_a,
|
||||
-1);
|
||||
COL_IS_DIRECTORY, &is_dir_a,
|
||||
COL_DISPLAY_NAME, &name_a,
|
||||
-1);
|
||||
|
||||
gtk_tree_model_get (model, b,
|
||||
COL_IS_DIRECTORY, &is_dir_b,
|
||||
COL_DISPLAY_NAME, &name_b,
|
||||
-1);
|
||||
COL_IS_DIRECTORY, &is_dir_b,
|
||||
COL_DISPLAY_NAME, &name_b,
|
||||
-1);
|
||||
|
||||
if (!is_dir_a && is_dir_b)
|
||||
ret = 1;
|
||||
@@ -154,26 +154,26 @@ create_store (void)
|
||||
GtkListStore *store;
|
||||
|
||||
store = gtk_list_store_new (NUM_COLS,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING,
|
||||
GDK_TYPE_PIXBUF,
|
||||
G_TYPE_BOOLEAN);
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_STRING,
|
||||
GDK_TYPE_PIXBUF,
|
||||
G_TYPE_BOOLEAN);
|
||||
|
||||
/* Set sort column and function */
|
||||
gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (store),
|
||||
sort_func,
|
||||
NULL, NULL);
|
||||
sort_func,
|
||||
NULL, NULL);
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
|
||||
GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
|
||||
GTK_SORT_ASCENDING);
|
||||
GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
|
||||
GTK_SORT_ASCENDING);
|
||||
|
||||
return store;
|
||||
}
|
||||
|
||||
static void
|
||||
item_activated (GtkIconView *icon_view,
|
||||
GtkTreePath *tree_path,
|
||||
gpointer user_data)
|
||||
GtkTreePath *tree_path,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkListStore *store;
|
||||
gchar *path;
|
||||
@@ -183,11 +183,11 @@ item_activated (GtkIconView *icon_view,
|
||||
store = GTK_LIST_STORE (user_data);
|
||||
|
||||
gtk_tree_model_get_iter (GTK_TREE_MODEL (store),
|
||||
&iter, tree_path);
|
||||
&iter, tree_path);
|
||||
gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
|
||||
COL_PATH, &path,
|
||||
COL_IS_DIRECTORY, &is_dir,
|
||||
-1);
|
||||
COL_PATH, &path,
|
||||
COL_IS_DIRECTORY, &is_dir,
|
||||
-1);
|
||||
|
||||
if (!is_dir)
|
||||
{
|
||||
@@ -207,7 +207,7 @@ item_activated (GtkIconView *icon_view,
|
||||
|
||||
static void
|
||||
up_clicked (GtkToolItem *item,
|
||||
gpointer user_data)
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkListStore *store;
|
||||
gchar *dir_name;
|
||||
@@ -223,12 +223,12 @@ up_clicked (GtkToolItem *item,
|
||||
|
||||
/* Maybe de-sensitize the up button */
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (up_button),
|
||||
strcmp (parent, "/") != 0);
|
||||
strcmp (parent, "/") != 0);
|
||||
}
|
||||
|
||||
static void
|
||||
home_clicked (GtkToolItem *item,
|
||||
gpointer user_data)
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkListStore *store;
|
||||
|
||||
@@ -241,7 +241,7 @@ home_clicked (GtkToolItem *item,
|
||||
|
||||
/* Sensitize the up button */
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (up_button),
|
||||
TRUE);
|
||||
TRUE);
|
||||
}
|
||||
|
||||
static void close_window(void)
|
||||
@@ -267,96 +267,96 @@ do_iconview (GtkWidget *do_widget)
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 650, 400);
|
||||
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "GtkIconView demo");
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (close_window), NULL);
|
||||
G_CALLBACK (close_window), NULL);
|
||||
|
||||
error = NULL;
|
||||
if (!load_pixbufs (&error))
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failed to load an image: %s",
|
||||
error->message);
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failed to load an image: %s",
|
||||
error->message);
|
||||
|
||||
g_error_free (error);
|
||||
g_error_free (error);
|
||||
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
|
||||
gtk_widget_show (dialog);
|
||||
}
|
||||
gtk_widget_show (dialog);
|
||||
}
|
||||
else
|
||||
{
|
||||
GtkWidget *sw;
|
||||
GtkWidget *icon_view;
|
||||
GtkListStore *store;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *tool_bar;
|
||||
GtkToolItem *home_button;
|
||||
{
|
||||
GtkWidget *sw;
|
||||
GtkWidget *icon_view;
|
||||
GtkListStore *store;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *tool_bar;
|
||||
GtkToolItem *home_button;
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
|
||||
tool_bar = gtk_toolbar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), tool_bar, FALSE, FALSE, 0);
|
||||
tool_bar = gtk_toolbar_new ();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), tool_bar, FALSE, FALSE, 0);
|
||||
|
||||
up_button = gtk_tool_button_new_from_stock (GTK_STOCK_GO_UP);
|
||||
gtk_tool_item_set_is_important (up_button, TRUE);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (up_button), FALSE);
|
||||
gtk_toolbar_insert (GTK_TOOLBAR (tool_bar), up_button, -1);
|
||||
up_button = gtk_tool_button_new_from_stock (GTK_STOCK_GO_UP);
|
||||
gtk_tool_item_set_is_important (up_button, TRUE);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (up_button), FALSE);
|
||||
gtk_toolbar_insert (GTK_TOOLBAR (tool_bar), up_button, -1);
|
||||
|
||||
home_button = gtk_tool_button_new_from_stock (GTK_STOCK_HOME);
|
||||
gtk_tool_item_set_is_important (home_button, TRUE);
|
||||
gtk_toolbar_insert (GTK_TOOLBAR (tool_bar), home_button, -1);
|
||||
home_button = gtk_tool_button_new_from_stock (GTK_STOCK_HOME);
|
||||
gtk_tool_item_set_is_important (home_button, TRUE);
|
||||
gtk_toolbar_insert (GTK_TOOLBAR (tool_bar), home_button, -1);
|
||||
|
||||
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_SHADOW_ETCHED_IN);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_SHADOW_ETCHED_IN);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
|
||||
|
||||
/* Create the store and fill it with the contents of '/' */
|
||||
parent = g_strdup ("/");
|
||||
store = create_store ();
|
||||
fill_store (store);
|
||||
/* Create the store and fill it with the contents of '/' */
|
||||
parent = g_strdup ("/");
|
||||
store = create_store ();
|
||||
fill_store (store);
|
||||
|
||||
icon_view = gtk_icon_view_new_with_model (GTK_TREE_MODEL (store));
|
||||
gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (icon_view),
|
||||
GTK_SELECTION_MULTIPLE);
|
||||
g_object_unref (store);
|
||||
icon_view = gtk_icon_view_new_with_model (GTK_TREE_MODEL (store));
|
||||
gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (icon_view),
|
||||
GTK_SELECTION_MULTIPLE);
|
||||
g_object_unref (store);
|
||||
|
||||
/* Connect to the "clicked" signal of the "Up" tool button */
|
||||
g_signal_connect (up_button, "clicked",
|
||||
G_CALLBACK (up_clicked), store);
|
||||
/* Connect to the "clicked" signal of the "Up" tool button */
|
||||
g_signal_connect (up_button, "clicked",
|
||||
G_CALLBACK (up_clicked), store);
|
||||
|
||||
/* Connect to the "clicked" signal of the "Home" tool button */
|
||||
g_signal_connect (home_button, "clicked",
|
||||
G_CALLBACK (home_clicked), store);
|
||||
/* Connect to the "clicked" signal of the "Home" tool button */
|
||||
g_signal_connect (home_button, "clicked",
|
||||
G_CALLBACK (home_clicked), store);
|
||||
|
||||
/* We now set which model columns that correspond to the text
|
||||
* and pixbuf of each item
|
||||
*/
|
||||
gtk_icon_view_set_text_column (GTK_ICON_VIEW (icon_view), COL_DISPLAY_NAME);
|
||||
gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (icon_view), COL_PIXBUF);
|
||||
/* We now set which model columns that correspond to the text
|
||||
* and pixbuf of each item
|
||||
*/
|
||||
gtk_icon_view_set_text_column (GTK_ICON_VIEW (icon_view), COL_DISPLAY_NAME);
|
||||
gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (icon_view), COL_PIXBUF);
|
||||
|
||||
/* Connect to the "item-activated" signal */
|
||||
g_signal_connect (icon_view, "item-activated",
|
||||
G_CALLBACK (item_activated), store);
|
||||
gtk_container_add (GTK_CONTAINER (sw), icon_view);
|
||||
/* Connect to the "item-activated" signal */
|
||||
g_signal_connect (icon_view, "item-activated",
|
||||
G_CALLBACK (item_activated), store);
|
||||
gtk_container_add (GTK_CONTAINER (sw), icon_view);
|
||||
|
||||
gtk_widget_grab_focus (icon_view);
|
||||
}
|
||||
gtk_widget_grab_focus (icon_view);
|
||||
}
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
@@ -369,4 +369,3 @@ do_iconview (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
@@ -47,10 +47,10 @@ create_store (void)
|
||||
|
||||
static void
|
||||
set_cell_color (GtkCellLayout *cell_layout,
|
||||
GtkCellRenderer *cell,
|
||||
GtkTreeModel *tree_model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
GtkCellRenderer *cell,
|
||||
GtkTreeModel *tree_model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
{
|
||||
gchar *text;
|
||||
GdkColor color;
|
||||
@@ -76,9 +76,9 @@ set_cell_color (GtkCellLayout *cell_layout,
|
||||
|
||||
static void
|
||||
edited (GtkCellRendererText *cell,
|
||||
gchar *path_string,
|
||||
gchar *text,
|
||||
gpointer data)
|
||||
gchar *path_string,
|
||||
gchar *text,
|
||||
gpointer data)
|
||||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
@@ -89,7 +89,7 @@ edited (GtkCellRendererText *cell,
|
||||
|
||||
gtk_tree_model_get_iter (model, &iter, path);
|
||||
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
|
||||
COL_TEXT, text, -1);
|
||||
COL_TEXT, text, -1);
|
||||
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
@@ -106,11 +106,11 @@ do_iconview_edit (GtkWidget *do_widget)
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Editing and Drag-and-Drop");
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
store = create_store ();
|
||||
fill_store (store);
|
||||
@@ -119,29 +119,29 @@ do_iconview_edit (GtkWidget *do_widget)
|
||||
g_object_unref (store);
|
||||
|
||||
gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (icon_view),
|
||||
GTK_SELECTION_SINGLE);
|
||||
GTK_SELECTION_SINGLE);
|
||||
gtk_icon_view_set_item_orientation (GTK_ICON_VIEW (icon_view),
|
||||
GTK_ORIENTATION_HORIZONTAL);
|
||||
GTK_ORIENTATION_HORIZONTAL);
|
||||
gtk_icon_view_set_columns (GTK_ICON_VIEW (icon_view), 2);
|
||||
gtk_icon_view_set_reorderable (GTK_ICON_VIEW (icon_view), TRUE);
|
||||
|
||||
renderer = gtk_cell_renderer_pixbuf_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (icon_view),
|
||||
renderer, TRUE);
|
||||
renderer, TRUE);
|
||||
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (icon_view),
|
||||
renderer,
|
||||
set_cell_color,
|
||||
NULL, NULL);
|
||||
renderer,
|
||||
set_cell_color,
|
||||
NULL, NULL);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (icon_view),
|
||||
renderer, TRUE);
|
||||
renderer, TRUE);
|
||||
g_object_set (renderer, "editable", TRUE, NULL);
|
||||
g_signal_connect (renderer, "edited", G_CALLBACK (edited), icon_view);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (icon_view),
|
||||
renderer,
|
||||
"text", COL_TEXT,
|
||||
NULL);
|
||||
renderer,
|
||||
"text", COL_TEXT,
|
||||
NULL);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (window), icon_view);
|
||||
}
|
||||
@@ -156,4 +156,3 @@ do_iconview_edit (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ static FILE* image_stream = NULL;
|
||||
|
||||
static void
|
||||
progressive_prepared_callback (GdkPixbufLoader *loader,
|
||||
gpointer data)
|
||||
gpointer data)
|
||||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
GtkWidget *image;
|
||||
@@ -44,11 +44,11 @@ progressive_prepared_callback (GdkPixbufLoader *loader,
|
||||
|
||||
static void
|
||||
progressive_updated_callback (GdkPixbufLoader *loader,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height,
|
||||
gpointer data)
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height,
|
||||
gpointer data)
|
||||
{
|
||||
GtkWidget *image;
|
||||
|
||||
@@ -86,97 +86,97 @@ progressive_timeout (gpointer data)
|
||||
bytes_read = fread (buf, 1, 256, image_stream);
|
||||
|
||||
if (ferror (image_stream))
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failure reading image file 'alphatest.png': %s",
|
||||
g_strerror (errno));
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failure reading image file 'alphatest.png': %s",
|
||||
g_strerror (errno));
|
||||
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
|
||||
fclose (image_stream);
|
||||
image_stream = NULL;
|
||||
fclose (image_stream);
|
||||
image_stream = NULL;
|
||||
|
||||
gtk_widget_show (dialog);
|
||||
gtk_widget_show (dialog);
|
||||
|
||||
load_timeout = 0;
|
||||
load_timeout = 0;
|
||||
|
||||
return FALSE; /* uninstall the timeout */
|
||||
}
|
||||
return FALSE; /* uninstall the timeout */
|
||||
}
|
||||
|
||||
if (!gdk_pixbuf_loader_write (pixbuf_loader,
|
||||
buf, bytes_read,
|
||||
&error))
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
buf, bytes_read,
|
||||
&error))
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failed to load image: %s",
|
||||
error->message);
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failed to load image: %s",
|
||||
error->message);
|
||||
|
||||
g_error_free (error);
|
||||
g_error_free (error);
|
||||
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
|
||||
fclose (image_stream);
|
||||
image_stream = NULL;
|
||||
fclose (image_stream);
|
||||
image_stream = NULL;
|
||||
|
||||
gtk_widget_show (dialog);
|
||||
gtk_widget_show (dialog);
|
||||
|
||||
load_timeout = 0;
|
||||
load_timeout = 0;
|
||||
|
||||
return FALSE; /* uninstall the timeout */
|
||||
}
|
||||
return FALSE; /* uninstall the timeout */
|
||||
}
|
||||
|
||||
if (feof (image_stream))
|
||||
{
|
||||
fclose (image_stream);
|
||||
image_stream = NULL;
|
||||
{
|
||||
fclose (image_stream);
|
||||
image_stream = NULL;
|
||||
|
||||
/* Errors can happen on close, e.g. if the image
|
||||
* file was truncated we'll know on close that
|
||||
* it was incomplete.
|
||||
*/
|
||||
error = NULL;
|
||||
if (!gdk_pixbuf_loader_close (pixbuf_loader,
|
||||
&error))
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
/* Errors can happen on close, e.g. if the image
|
||||
* file was truncated we'll know on close that
|
||||
* it was incomplete.
|
||||
*/
|
||||
error = NULL;
|
||||
if (!gdk_pixbuf_loader_close (pixbuf_loader,
|
||||
&error))
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failed to load image: %s",
|
||||
error->message);
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failed to load image: %s",
|
||||
error->message);
|
||||
|
||||
g_error_free (error);
|
||||
g_error_free (error);
|
||||
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
|
||||
gtk_widget_show (dialog);
|
||||
gtk_widget_show (dialog);
|
||||
|
||||
g_object_unref (pixbuf_loader);
|
||||
pixbuf_loader = NULL;
|
||||
g_object_unref (pixbuf_loader);
|
||||
pixbuf_loader = NULL;
|
||||
|
||||
load_timeout = 0;
|
||||
load_timeout = 0;
|
||||
|
||||
return FALSE; /* uninstall the timeout */
|
||||
}
|
||||
return FALSE; /* uninstall the timeout */
|
||||
}
|
||||
|
||||
g_object_unref (pixbuf_loader);
|
||||
pixbuf_loader = NULL;
|
||||
}
|
||||
g_object_unref (pixbuf_loader);
|
||||
pixbuf_loader = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -190,55 +190,55 @@ progressive_timeout (gpointer data)
|
||||
*/
|
||||
filename = demo_find_file ("alphatest.png", &error);
|
||||
if (error)
|
||||
{
|
||||
error_message = g_strdup (error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
{
|
||||
error_message = g_strdup (error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
else
|
||||
{
|
||||
image_stream = g_fopen (filename, "rb");
|
||||
g_free (filename);
|
||||
{
|
||||
image_stream = g_fopen (filename, "rb");
|
||||
g_free (filename);
|
||||
|
||||
if (!image_stream)
|
||||
error_message = g_strdup_printf ("Unable to open image file 'alphatest.png': %s",
|
||||
g_strerror (errno));
|
||||
}
|
||||
if (!image_stream)
|
||||
error_message = g_strdup_printf ("Unable to open image file 'alphatest.png': %s",
|
||||
g_strerror (errno));
|
||||
}
|
||||
|
||||
if (image_stream == NULL)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s", error_message);
|
||||
g_free (error_message);
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s", error_message);
|
||||
g_free (error_message);
|
||||
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
|
||||
gtk_widget_show (dialog);
|
||||
gtk_widget_show (dialog);
|
||||
|
||||
load_timeout = 0;
|
||||
load_timeout = 0;
|
||||
|
||||
return FALSE; /* uninstall the timeout */
|
||||
}
|
||||
return FALSE; /* uninstall the timeout */
|
||||
}
|
||||
|
||||
if (pixbuf_loader)
|
||||
{
|
||||
gdk_pixbuf_loader_close (pixbuf_loader, NULL);
|
||||
g_object_unref (pixbuf_loader);
|
||||
pixbuf_loader = NULL;
|
||||
}
|
||||
{
|
||||
gdk_pixbuf_loader_close (pixbuf_loader, NULL);
|
||||
g_object_unref (pixbuf_loader);
|
||||
pixbuf_loader = NULL;
|
||||
}
|
||||
|
||||
pixbuf_loader = gdk_pixbuf_loader_new ();
|
||||
|
||||
g_signal_connect (pixbuf_loader, "area-prepared",
|
||||
G_CALLBACK (progressive_prepared_callback), image);
|
||||
G_CALLBACK (progressive_prepared_callback), image);
|
||||
|
||||
g_signal_connect (pixbuf_loader, "area-updated",
|
||||
G_CALLBACK (progressive_updated_callback), image);
|
||||
G_CALLBACK (progressive_updated_callback), image);
|
||||
}
|
||||
|
||||
/* leave timeout installed */
|
||||
@@ -256,13 +256,13 @@ start_progressive_loading (GtkWidget *image)
|
||||
* pauses in the reading process.
|
||||
*/
|
||||
load_timeout = gdk_threads_add_timeout (150,
|
||||
progressive_timeout,
|
||||
image);
|
||||
progressive_timeout,
|
||||
image);
|
||||
}
|
||||
|
||||
static void
|
||||
cleanup_callback (GObject *object,
|
||||
gpointer data)
|
||||
gpointer data)
|
||||
{
|
||||
if (load_timeout)
|
||||
{
|
||||
@@ -314,7 +314,6 @@ do_images (GtkWidget *do_widget)
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *image;
|
||||
GtkWidget *label;
|
||||
GtkWidget *align;
|
||||
GtkWidget *button;
|
||||
GdkPixbuf *pixbuf;
|
||||
GIcon *gicon;
|
||||
@@ -325,13 +324,13 @@ do_images (GtkWidget *do_widget)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Images");
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (cleanup_callback), NULL);
|
||||
G_CALLBACK (cleanup_callback), NULL);
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (window), 8);
|
||||
|
||||
@@ -341,17 +340,14 @@ do_images (GtkWidget *do_widget)
|
||||
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label),
|
||||
"<u>Image loaded from a file</u>");
|
||||
"<u>Image loaded from a file</u>");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
|
||||
/* The alignment keeps the frame from growing when users resize
|
||||
* the window
|
||||
*/
|
||||
align = gtk_alignment_new (0.5, 0.5, 0, 0);
|
||||
gtk_container_add (GTK_CONTAINER (align), frame);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
|
||||
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
/* demo_find_file() looks in the current directory first,
|
||||
* so you can run gtk-demo without installing GTK, then looks
|
||||
@@ -360,34 +356,34 @@ do_images (GtkWidget *do_widget)
|
||||
pixbuf = NULL;
|
||||
filename = demo_find_file ("gtk-logo-rgb.gif", &error);
|
||||
if (filename)
|
||||
{
|
||||
pixbuf = gdk_pixbuf_new_from_file (filename, &error);
|
||||
g_free (filename);
|
||||
}
|
||||
{
|
||||
pixbuf = gdk_pixbuf_new_from_file (filename, &error);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
if (error)
|
||||
{
|
||||
/* This code shows off error handling. You can just use
|
||||
* gtk_image_new_from_file() instead if you don't want to report
|
||||
* errors to the user. If the file doesn't load when using
|
||||
* gtk_image_new_from_file(), a "missing image" icon will
|
||||
* be displayed instead.
|
||||
*/
|
||||
GtkWidget *dialog;
|
||||
{
|
||||
/* This code shows off error handling. You can just use
|
||||
* gtk_image_new_from_file() instead if you don't want to report
|
||||
* errors to the user. If the file doesn't load when using
|
||||
* gtk_image_new_from_file(), a "missing image" icon will
|
||||
* be displayed instead.
|
||||
*/
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Unable to open image file 'gtk-logo-rgb.gif': %s",
|
||||
error->message);
|
||||
g_error_free (error);
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Unable to open image file 'gtk-logo-rgb.gif': %s",
|
||||
error->message);
|
||||
g_error_free (error);
|
||||
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
|
||||
gtk_widget_show (dialog);
|
||||
}
|
||||
gtk_widget_show (dialog);
|
||||
}
|
||||
|
||||
image = gtk_image_new_from_pixbuf (pixbuf);
|
||||
|
||||
@@ -398,17 +394,14 @@ do_images (GtkWidget *do_widget)
|
||||
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label),
|
||||
"<u>Animation loaded from a file</u>");
|
||||
"<u>Animation loaded from a file</u>");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
|
||||
/* The alignment keeps the frame from growing when users resize
|
||||
* the window
|
||||
*/
|
||||
align = gtk_alignment_new (0.5, 0.5, 0, 0);
|
||||
gtk_container_add (GTK_CONTAINER (align), frame);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
|
||||
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
filename = demo_find_file ("floppybuddy.gif", NULL);
|
||||
image = gtk_image_new_from_file (filename);
|
||||
@@ -420,17 +413,14 @@ do_images (GtkWidget *do_widget)
|
||||
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label),
|
||||
"<u>Symbolic themed icon</u>");
|
||||
"<u>Symbolic themed icon</u>");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
|
||||
/* The alignment keeps the frame from growing when users resize
|
||||
* the window
|
||||
*/
|
||||
align = gtk_alignment_new (0.5, 0.5, 0, 0);
|
||||
gtk_container_add (GTK_CONTAINER (align), frame);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
|
||||
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
gicon = g_themed_icon_new_with_default_fallbacks ("battery-caution-charging-symbolic");
|
||||
image = gtk_image_new_from_gicon (gicon, GTK_ICON_SIZE_DIALOG);
|
||||
@@ -442,17 +432,14 @@ do_images (GtkWidget *do_widget)
|
||||
|
||||
label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label),
|
||||
"<u>Progressive image loading</u>");
|
||||
"<u>Progressive image loading</u>");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
|
||||
/* The alignment keeps the frame from growing when users resize
|
||||
* the window
|
||||
*/
|
||||
align = gtk_alignment_new (0.5, 0.5, 0, 0);
|
||||
gtk_container_add (GTK_CONTAINER (align), frame);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
|
||||
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
/* Create an empty image for now; the progressive loader
|
||||
* will create the pixbuf and fill it in.
|
||||
|
||||
@@ -15,10 +15,10 @@ on_bar_response (GtkInfoBar *info_bar,
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_OK,
|
||||
"You clicked a button on an info bar");
|
||||
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_OK,
|
||||
"You clicked a button on an info bar");
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
|
||||
"Your response has id %d", response_id);
|
||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
|
||||
@@ -54,11 +54,11 @@ do_links (GtkWidget *do_widget)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Links");
|
||||
gtk_container_set_border_width (GTK_CONTAINER (window), 12);
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
label = gtk_label_new ("Some <a href=\"http://en.wikipedia.org/wiki/Text\""
|
||||
"title=\"plain text\">text</a> may be marked up\n"
|
||||
|
||||
@@ -43,9 +43,9 @@ get_democodedir (void)
|
||||
{
|
||||
result = g_win32_get_package_installation_directory_of_module (NULL);
|
||||
if (result == NULL)
|
||||
result = "unknown-location";
|
||||
result = "unknown-location";
|
||||
|
||||
result = g_strconcat (result, "\\share\\gtk-2.0\\demo", NULL);
|
||||
result = g_strconcat (result, "\\share\\gtk-3.0\\demo", NULL);
|
||||
}
|
||||
|
||||
return result;
|
||||
@@ -59,19 +59,19 @@ get_democodedir (void)
|
||||
* demo_find_file:
|
||||
* @base: base filename
|
||||
* @err: location to store error, or %NULL.
|
||||
*
|
||||
*
|
||||
* Looks for @base first in the current directory, then in the
|
||||
* location GTK+ where it will be installed on make install,
|
||||
* returns the first file found.
|
||||
*
|
||||
*
|
||||
* Return value: the filename, if found or %NULL
|
||||
**/
|
||||
*/
|
||||
gchar *
|
||||
demo_find_file (const char *base,
|
||||
GError **err)
|
||||
GError **err)
|
||||
{
|
||||
g_return_val_if_fail (err == NULL || *err == NULL, NULL);
|
||||
|
||||
|
||||
if (g_file_test ("gtk-logo-rgb.gif", G_FILE_TEST_EXISTS) &&
|
||||
g_file_test (base, G_FILE_TEST_EXISTS))
|
||||
return g_strdup (base);
|
||||
@@ -79,12 +79,12 @@ demo_find_file (const char *base,
|
||||
{
|
||||
char *filename = g_build_filename (DEMOCODEDIR, base, NULL);
|
||||
if (!g_file_test (filename, G_FILE_TEST_EXISTS))
|
||||
{
|
||||
g_set_error (err, G_FILE_ERROR, G_FILE_ERROR_NOENT,
|
||||
"Cannot find demo data file \"%s\"", base);
|
||||
g_free (filename);
|
||||
return NULL;
|
||||
}
|
||||
{
|
||||
g_set_error (err, G_FILE_ERROR, G_FILE_ERROR_NOENT,
|
||||
"Cannot find demo data file \"%s\"", base);
|
||||
g_free (filename);
|
||||
return NULL;
|
||||
}
|
||||
return filename;
|
||||
}
|
||||
}
|
||||
@@ -98,12 +98,12 @@ window_closed_cb (GtkWidget *window, gpointer data)
|
||||
|
||||
gtk_tree_model_get_iter (cbdata->model, &iter, cbdata->path);
|
||||
gtk_tree_model_get (GTK_TREE_MODEL (cbdata->model), &iter,
|
||||
STYLE_COLUMN, &style,
|
||||
-1);
|
||||
STYLE_COLUMN, &style,
|
||||
-1);
|
||||
if (style == PANGO_STYLE_ITALIC)
|
||||
gtk_tree_store_set (GTK_TREE_STORE (cbdata->model), &iter,
|
||||
STYLE_COLUMN, PANGO_STYLE_NORMAL,
|
||||
-1);
|
||||
STYLE_COLUMN, PANGO_STYLE_NORMAL,
|
||||
-1);
|
||||
|
||||
gtk_tree_path_free (cbdata->path);
|
||||
g_free (cbdata);
|
||||
@@ -113,17 +113,17 @@ gboolean
|
||||
read_line (FILE *stream, GString *str)
|
||||
{
|
||||
int n_read = 0;
|
||||
|
||||
|
||||
#ifdef HAVE_FLOCKFILE
|
||||
flockfile (stream);
|
||||
#endif
|
||||
|
||||
g_string_truncate (str, 0);
|
||||
|
||||
|
||||
while (1)
|
||||
{
|
||||
int c;
|
||||
|
||||
|
||||
#ifdef HAVE_FLOCKFILE
|
||||
c = getc_unlocked (stream);
|
||||
#else
|
||||
@@ -131,31 +131,31 @@ read_line (FILE *stream, GString *str)
|
||||
#endif
|
||||
|
||||
if (c == EOF)
|
||||
goto done;
|
||||
goto done;
|
||||
else
|
||||
n_read++;
|
||||
n_read++;
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case '\r':
|
||||
case '\n':
|
||||
{
|
||||
{
|
||||
case '\r':
|
||||
case '\n':
|
||||
{
|
||||
#ifdef HAVE_FLOCKFILE
|
||||
int next_c = getc_unlocked (stream);
|
||||
int next_c = getc_unlocked (stream);
|
||||
#else
|
||||
int next_c = getc (stream);
|
||||
int next_c = getc (stream);
|
||||
#endif
|
||||
|
||||
if (!(next_c == EOF ||
|
||||
(c == '\r' && next_c == '\n') ||
|
||||
(c == '\n' && next_c == '\r')))
|
||||
ungetc (next_c, stream);
|
||||
|
||||
goto done;
|
||||
}
|
||||
default:
|
||||
g_string_append_c (str, c);
|
||||
}
|
||||
|
||||
if (!(next_c == EOF ||
|
||||
(c == '\r' && next_c == '\n') ||
|
||||
(c == '\n' && next_c == '\r')))
|
||||
ungetc (next_c, stream);
|
||||
|
||||
goto done;
|
||||
}
|
||||
default:
|
||||
g_string_append_c (str, c);
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
@@ -333,10 +333,10 @@ static gchar *control[] =
|
||||
};
|
||||
void
|
||||
parse_chars (gchar *text,
|
||||
gchar **end_ptr,
|
||||
gint *state,
|
||||
gchar **tag,
|
||||
gboolean start)
|
||||
gchar **end_ptr,
|
||||
gint *state,
|
||||
gchar **tag,
|
||||
gboolean start)
|
||||
{
|
||||
gint i;
|
||||
gchar *next_token;
|
||||
@@ -346,11 +346,11 @@ parse_chars (gchar *text,
|
||||
{
|
||||
*end_ptr = strstr (text, "*/");
|
||||
if (*end_ptr)
|
||||
{
|
||||
*end_ptr += 2;
|
||||
*state = STATE_NORMAL;
|
||||
*tag = "comment";
|
||||
}
|
||||
{
|
||||
*end_ptr += 2;
|
||||
*state = STATE_NORMAL;
|
||||
*tag = "comment";
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -362,9 +362,9 @@ parse_chars (gchar *text,
|
||||
{
|
||||
*end_ptr = strstr (text, "*/");
|
||||
if (*end_ptr)
|
||||
*end_ptr += 2;
|
||||
*end_ptr += 2;
|
||||
else
|
||||
*state = STATE_IN_COMMENT;
|
||||
*state = STATE_IN_COMMENT;
|
||||
*tag = "comment";
|
||||
return;
|
||||
}
|
||||
@@ -381,29 +381,29 @@ parse_chars (gchar *text,
|
||||
if (start && * text != '\t' && *text != ' ' && *text != '{' && *text != '}')
|
||||
{
|
||||
if (strstr (text, "("))
|
||||
{
|
||||
*end_ptr = strstr (text, "(");
|
||||
*tag = "function";
|
||||
return;
|
||||
}
|
||||
{
|
||||
*end_ptr = strstr (text, "(");
|
||||
*tag = "function";
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* check for types */
|
||||
for (i = 0; types[i] != NULL; i++)
|
||||
if (!strncmp (text, types[i], strlen (types[i])) ||
|
||||
(start && types[i][0] == ' ' && !strncmp (text, types[i] + 1, strlen (types[i]) - 1)))
|
||||
{
|
||||
*end_ptr = text + strlen (types[i]);
|
||||
*tag = "type";
|
||||
return;
|
||||
*end_ptr = text + strlen (types[i]);
|
||||
*tag = "type";
|
||||
return;
|
||||
}
|
||||
|
||||
/* check for control */
|
||||
for (i = 0; control[i] != NULL; i++)
|
||||
if (!strncmp (text, control[i], strlen (control[i])))
|
||||
{
|
||||
*end_ptr = text + strlen (control[i]);
|
||||
*tag = "control";
|
||||
return;
|
||||
*end_ptr = text + strlen (control[i]);
|
||||
*tag = "control";
|
||||
return;
|
||||
}
|
||||
|
||||
/* check for string */
|
||||
@@ -414,18 +414,18 @@ parse_chars (gchar *text,
|
||||
*end_ptr = text + 1;
|
||||
*tag = "string";
|
||||
while (**end_ptr != '\000')
|
||||
{
|
||||
if (**end_ptr == '\"' && !maybe_escape)
|
||||
{
|
||||
*end_ptr += 1;
|
||||
return;
|
||||
}
|
||||
if (**end_ptr == '\\')
|
||||
maybe_escape = TRUE;
|
||||
else
|
||||
maybe_escape = FALSE;
|
||||
*end_ptr += 1;
|
||||
}
|
||||
{
|
||||
if (**end_ptr == '\"' && !maybe_escape)
|
||||
{
|
||||
*end_ptr += 1;
|
||||
return;
|
||||
}
|
||||
if (**end_ptr == '\\')
|
||||
maybe_escape = TRUE;
|
||||
else
|
||||
maybe_escape = FALSE;
|
||||
*end_ptr += 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -434,36 +434,36 @@ parse_chars (gchar *text,
|
||||
{
|
||||
next_token = strstr (text, tokens[i]);
|
||||
if (next_token)
|
||||
{
|
||||
if (*end_ptr)
|
||||
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
|
||||
else
|
||||
*end_ptr = next_token;
|
||||
}
|
||||
{
|
||||
if (*end_ptr)
|
||||
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
|
||||
else
|
||||
*end_ptr = next_token;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; types[i] != NULL; i++)
|
||||
{
|
||||
next_token = strstr (text, types[i]);
|
||||
if (next_token)
|
||||
{
|
||||
if (*end_ptr)
|
||||
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
|
||||
else
|
||||
*end_ptr = next_token;
|
||||
}
|
||||
{
|
||||
if (*end_ptr)
|
||||
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
|
||||
else
|
||||
*end_ptr = next_token;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; control[i] != NULL; i++)
|
||||
{
|
||||
next_token = strstr (text, control[i]);
|
||||
if (next_token)
|
||||
{
|
||||
if (*end_ptr)
|
||||
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
|
||||
else
|
||||
*end_ptr = next_token;
|
||||
}
|
||||
{
|
||||
if (*end_ptr)
|
||||
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
|
||||
else
|
||||
*end_ptr = next_token;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -488,25 +488,25 @@ fontify (void)
|
||||
start_ptr = text = gtk_text_iter_get_text (&start_iter, &next_iter);
|
||||
|
||||
do
|
||||
{
|
||||
parse_chars (start_ptr, &end_ptr, &state, &tag, start);
|
||||
{
|
||||
parse_chars (start_ptr, &end_ptr, &state, &tag, start);
|
||||
|
||||
start = FALSE;
|
||||
if (end_ptr)
|
||||
{
|
||||
tmp_iter = start_iter;
|
||||
gtk_text_iter_forward_chars (&tmp_iter, end_ptr - start_ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp_iter = next_iter;
|
||||
}
|
||||
if (tag)
|
||||
gtk_text_buffer_apply_tag_by_name (source_buffer, tag, &start_iter, &tmp_iter);
|
||||
start = FALSE;
|
||||
if (end_ptr)
|
||||
{
|
||||
tmp_iter = start_iter;
|
||||
gtk_text_iter_forward_chars (&tmp_iter, end_ptr - start_ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp_iter = next_iter;
|
||||
}
|
||||
if (tag)
|
||||
gtk_text_buffer_apply_tag_by_name (source_buffer, tag, &start_iter, &tmp_iter);
|
||||
|
||||
start_iter = tmp_iter;
|
||||
start_ptr = end_ptr;
|
||||
}
|
||||
start_iter = tmp_iter;
|
||||
start_ptr = end_ptr;
|
||||
}
|
||||
while (end_ptr);
|
||||
|
||||
g_free (text);
|
||||
@@ -533,7 +533,7 @@ load_file (const gchar *filename)
|
||||
|
||||
g_free (current_file);
|
||||
current_file = g_strdup (filename);
|
||||
|
||||
|
||||
gtk_text_buffer_get_bounds (info_buffer, &start, &end);
|
||||
gtk_text_buffer_delete (info_buffer, &start, &end);
|
||||
|
||||
@@ -564,101 +564,101 @@ load_file (const gchar *filename)
|
||||
gchar *p = buffer->str;
|
||||
gchar *q;
|
||||
gchar *r;
|
||||
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case 0:
|
||||
/* Reading title */
|
||||
while (*p == '/' || *p == '*' || g_ascii_isspace (*p))
|
||||
p++;
|
||||
r = p;
|
||||
while (*r != '/' && strlen (r))
|
||||
r++;
|
||||
if (strlen (r) > 0)
|
||||
p = r + 1;
|
||||
q = p + strlen (p);
|
||||
while (q > p && g_ascii_isspace (*(q - 1)))
|
||||
q--;
|
||||
{
|
||||
case 0:
|
||||
/* Reading title */
|
||||
while (*p == '/' || *p == '*' || g_ascii_isspace (*p))
|
||||
p++;
|
||||
r = p;
|
||||
while (*r != '/' && strlen (r))
|
||||
r++;
|
||||
if (strlen (r) > 0)
|
||||
p = r + 1;
|
||||
q = p + strlen (p);
|
||||
while (q > p && g_ascii_isspace (*(q - 1)))
|
||||
q--;
|
||||
|
||||
if (q > p)
|
||||
{
|
||||
int len_chars = g_utf8_pointer_to_offset (p, q);
|
||||
if (q > p)
|
||||
{
|
||||
int len_chars = g_utf8_pointer_to_offset (p, q);
|
||||
|
||||
end = start;
|
||||
end = start;
|
||||
|
||||
g_assert (strlen (p) >= q - p);
|
||||
gtk_text_buffer_insert (info_buffer, &end, p, q - p);
|
||||
start = end;
|
||||
g_assert (strlen (p) >= q - p);
|
||||
gtk_text_buffer_insert (info_buffer, &end, p, q - p);
|
||||
start = end;
|
||||
|
||||
gtk_text_iter_backward_chars (&start, len_chars);
|
||||
gtk_text_buffer_apply_tag_by_name (info_buffer, "title", &start, &end);
|
||||
gtk_text_iter_backward_chars (&start, len_chars);
|
||||
gtk_text_buffer_apply_tag_by_name (info_buffer, "title", &start, &end);
|
||||
|
||||
start = end;
|
||||
|
||||
state++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
/* Reading body of info section */
|
||||
while (g_ascii_isspace (*p))
|
||||
p++;
|
||||
if (*p == '*' && *(p + 1) == '/')
|
||||
{
|
||||
gtk_text_buffer_get_iter_at_offset (source_buffer, &start, 0);
|
||||
state++;
|
||||
}
|
||||
else
|
||||
{
|
||||
int len;
|
||||
|
||||
while (*p == '*' || g_ascii_isspace (*p))
|
||||
p++;
|
||||
start = end;
|
||||
|
||||
len = strlen (p);
|
||||
while (g_ascii_isspace (*(p + len - 1)))
|
||||
len--;
|
||||
|
||||
if (len > 0)
|
||||
{
|
||||
if (in_para)
|
||||
gtk_text_buffer_insert (info_buffer, &start, " ", 1);
|
||||
state++;
|
||||
}
|
||||
break;
|
||||
|
||||
g_assert (strlen (p) >= len);
|
||||
gtk_text_buffer_insert (info_buffer, &start, p, len);
|
||||
in_para = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_text_buffer_insert (info_buffer, &start, "\n", 1);
|
||||
in_para = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
/* Reading body of info section */
|
||||
while (g_ascii_isspace (*p))
|
||||
p++;
|
||||
if (*p == '*' && *(p + 1) == '/')
|
||||
{
|
||||
gtk_text_buffer_get_iter_at_offset (source_buffer, &start, 0);
|
||||
state++;
|
||||
}
|
||||
else
|
||||
{
|
||||
int len;
|
||||
|
||||
case 2:
|
||||
/* Skipping blank lines */
|
||||
while (g_ascii_isspace (*p))
|
||||
p++;
|
||||
if (*p)
|
||||
{
|
||||
p = buffer->str;
|
||||
state++;
|
||||
/* Fall through */
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
case 3:
|
||||
/* Reading program body */
|
||||
gtk_text_buffer_insert (source_buffer, &start, p, -1);
|
||||
gtk_text_buffer_insert (source_buffer, &start, "\n", 1);
|
||||
break;
|
||||
}
|
||||
while (*p == '*' || g_ascii_isspace (*p))
|
||||
p++;
|
||||
|
||||
len = strlen (p);
|
||||
while (g_ascii_isspace (*(p + len - 1)))
|
||||
len--;
|
||||
|
||||
if (len > 0)
|
||||
{
|
||||
if (in_para)
|
||||
gtk_text_buffer_insert (info_buffer, &start, " ", 1);
|
||||
|
||||
g_assert (strlen (p) >= len);
|
||||
gtk_text_buffer_insert (info_buffer, &start, p, len);
|
||||
in_para = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_text_buffer_insert (info_buffer, &start, "\n", 1);
|
||||
in_para = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
/* Skipping blank lines */
|
||||
while (g_ascii_isspace (*p))
|
||||
p++;
|
||||
if (*p)
|
||||
{
|
||||
p = buffer->str;
|
||||
state++;
|
||||
/* Fall through */
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
case 3:
|
||||
/* Reading program body */
|
||||
gtk_text_buffer_insert (source_buffer, &start, p, -1);
|
||||
gtk_text_buffer_insert (source_buffer, &start, "\n", 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose (file);
|
||||
|
||||
|
||||
fontify ();
|
||||
|
||||
g_string_free (buffer, TRUE);
|
||||
@@ -667,7 +667,7 @@ load_file (const gchar *filename)
|
||||
void
|
||||
row_activated_cb (GtkTreeView *tree_view,
|
||||
GtkTreePath *path,
|
||||
GtkTreeViewColumn *column)
|
||||
GtkTreeViewColumn *column)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
PangoStyle style;
|
||||
@@ -676,39 +676,39 @@ row_activated_cb (GtkTreeView *tree_view,
|
||||
GtkTreeModel *model;
|
||||
|
||||
model = gtk_tree_view_get_model (tree_view);
|
||||
|
||||
|
||||
gtk_tree_model_get_iter (model, &iter, path);
|
||||
gtk_tree_model_get (GTK_TREE_MODEL (model),
|
||||
&iter,
|
||||
FUNC_COLUMN, &func,
|
||||
STYLE_COLUMN, &style,
|
||||
-1);
|
||||
&iter,
|
||||
FUNC_COLUMN, &func,
|
||||
STYLE_COLUMN, &style,
|
||||
-1);
|
||||
|
||||
if (func)
|
||||
{
|
||||
gtk_tree_store_set (GTK_TREE_STORE (model),
|
||||
&iter,
|
||||
STYLE_COLUMN, (style == PANGO_STYLE_ITALIC ? PANGO_STYLE_NORMAL : PANGO_STYLE_ITALIC),
|
||||
-1);
|
||||
&iter,
|
||||
STYLE_COLUMN, (style == PANGO_STYLE_ITALIC ? PANGO_STYLE_NORMAL : PANGO_STYLE_ITALIC),
|
||||
-1);
|
||||
window = (func) (gtk_widget_get_toplevel (GTK_WIDGET (tree_view)));
|
||||
|
||||
|
||||
if (window != NULL)
|
||||
{
|
||||
CallbackData *cbdata;
|
||||
|
||||
cbdata = g_new (CallbackData, 1);
|
||||
cbdata->model = model;
|
||||
cbdata->path = gtk_tree_path_copy (path);
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (window_closed_cb), cbdata);
|
||||
}
|
||||
{
|
||||
CallbackData *cbdata;
|
||||
|
||||
cbdata = g_new (CallbackData, 1);
|
||||
cbdata->model = model;
|
||||
cbdata->path = gtk_tree_path_copy (path);
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (window_closed_cb), cbdata);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
selection_cb (GtkTreeSelection *selection,
|
||||
GtkTreeModel *model)
|
||||
GtkTreeModel *model)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
GValue value = {0, };
|
||||
@@ -717,8 +717,8 @@ selection_cb (GtkTreeSelection *selection,
|
||||
return;
|
||||
|
||||
gtk_tree_model_get_value (model, &iter,
|
||||
FILENAME_COLUMN,
|
||||
&value);
|
||||
FILENAME_COLUMN,
|
||||
&value);
|
||||
if (g_value_get_string (&value))
|
||||
load_file (g_value_get_string (&value));
|
||||
g_value_unset (&value);
|
||||
@@ -726,7 +726,7 @@ selection_cb (GtkTreeSelection *selection,
|
||||
|
||||
static GtkWidget *
|
||||
create_text (GtkTextBuffer **buffer,
|
||||
gboolean is_source)
|
||||
gboolean is_source)
|
||||
{
|
||||
GtkWidget *scrolled_window;
|
||||
GtkWidget *text_view;
|
||||
@@ -734,20 +734,20 @@ create_text (GtkTextBuffer **buffer,
|
||||
|
||||
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
|
||||
GTK_SHADOW_IN);
|
||||
|
||||
GTK_SHADOW_IN);
|
||||
|
||||
text_view = gtk_text_view_new ();
|
||||
|
||||
|
||||
*buffer = gtk_text_buffer_new (NULL);
|
||||
gtk_text_view_set_buffer (GTK_TEXT_VIEW (text_view), *buffer);
|
||||
gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);
|
||||
gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);
|
||||
|
||||
|
||||
if (is_source)
|
||||
{
|
||||
font_desc = pango_font_description_from_string ("monospace");
|
||||
@@ -767,7 +767,7 @@ create_text (GtkTextBuffer **buffer,
|
||||
gtk_text_view_set_pixels_below_lines (GTK_TEXT_VIEW (text_view),
|
||||
2);
|
||||
}
|
||||
|
||||
|
||||
return scrolled_window;
|
||||
}
|
||||
|
||||
@@ -790,7 +790,7 @@ create_tree (void)
|
||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
|
||||
|
||||
gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection),
|
||||
GTK_SELECTION_BROWSE);
|
||||
GTK_SELECTION_BROWSE);
|
||||
gtk_widget_set_size_request (tree_view, 200, -1);
|
||||
|
||||
/* this code only supports 1 level of children. If we
|
||||
@@ -803,46 +803,46 @@ create_tree (void)
|
||||
gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
|
||||
|
||||
gtk_tree_store_set (GTK_TREE_STORE (model),
|
||||
&iter,
|
||||
TITLE_COLUMN, d->title,
|
||||
FILENAME_COLUMN, d->filename,
|
||||
FUNC_COLUMN, d->func,
|
||||
STYLE_COLUMN, PANGO_STYLE_NORMAL,
|
||||
-1);
|
||||
&iter,
|
||||
TITLE_COLUMN, d->title,
|
||||
FILENAME_COLUMN, d->filename,
|
||||
FUNC_COLUMN, d->func,
|
||||
STYLE_COLUMN, PANGO_STYLE_NORMAL,
|
||||
-1);
|
||||
|
||||
d++;
|
||||
|
||||
if (!children)
|
||||
continue;
|
||||
|
||||
while (children->title)
|
||||
{
|
||||
GtkTreeIter child_iter;
|
||||
continue;
|
||||
|
||||
gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
|
||||
|
||||
gtk_tree_store_set (GTK_TREE_STORE (model),
|
||||
&child_iter,
|
||||
TITLE_COLUMN, children->title,
|
||||
FILENAME_COLUMN, children->filename,
|
||||
FUNC_COLUMN, children->func,
|
||||
STYLE_COLUMN, PANGO_STYLE_NORMAL,
|
||||
-1);
|
||||
|
||||
children++;
|
||||
}
|
||||
while (children->title)
|
||||
{
|
||||
GtkTreeIter child_iter;
|
||||
|
||||
gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
|
||||
|
||||
gtk_tree_store_set (GTK_TREE_STORE (model),
|
||||
&child_iter,
|
||||
TITLE_COLUMN, children->title,
|
||||
FILENAME_COLUMN, children->filename,
|
||||
FUNC_COLUMN, children->func,
|
||||
STYLE_COLUMN, PANGO_STYLE_NORMAL,
|
||||
-1);
|
||||
|
||||
children++;
|
||||
}
|
||||
}
|
||||
|
||||
cell = gtk_cell_renderer_text_new ();
|
||||
|
||||
column = gtk_tree_view_column_new_with_attributes ("Widget (double click for demo)",
|
||||
cell,
|
||||
"text", TITLE_COLUMN,
|
||||
"style", STYLE_COLUMN,
|
||||
NULL);
|
||||
|
||||
cell,
|
||||
"text", TITLE_COLUMN,
|
||||
"style", STYLE_COLUMN,
|
||||
NULL);
|
||||
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
|
||||
GTK_TREE_VIEW_COLUMN (column));
|
||||
GTK_TREE_VIEW_COLUMN (column));
|
||||
|
||||
gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
|
||||
gtk_tree_selection_select_iter (GTK_TREE_SELECTION (selection), &iter);
|
||||
@@ -852,11 +852,11 @@ create_tree (void)
|
||||
|
||||
gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
|
||||
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
|
||||
|
||||
|
||||
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
|
||||
GTK_POLICY_NEVER,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
GTK_POLICY_NEVER,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
|
||||
|
||||
label = gtk_label_new ("Widget (double click for demo)");
|
||||
@@ -895,21 +895,21 @@ setup_default_icon (void)
|
||||
if (err)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
|
||||
dialog = gtk_message_dialog_new (NULL, 0,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failed to read icon file: %s",
|
||||
err->message);
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"Failed to read icon file: %s",
|
||||
err->message);
|
||||
g_error_free (err);
|
||||
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
}
|
||||
|
||||
if (pixbuf)
|
||||
{
|
||||
GList *list;
|
||||
GList *list;
|
||||
GdkPixbuf *transparent;
|
||||
|
||||
/* The gtk-logo-rgb icon has a white background, make it transparent */
|
||||
@@ -943,15 +943,15 @@ main (int argc, char **argv)
|
||||
g_setenv ("GTK_IM_MODULE_FILE", "../../modules/input/immodules.cache", TRUE);
|
||||
}
|
||||
/* -- End of hack -- */
|
||||
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
setup_default_icon ();
|
||||
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title (GTK_WINDOW (window), "GTK+ Code Demos");
|
||||
g_signal_connect_after (window, "destroy",
|
||||
G_CALLBACK (gtk_main_quit), NULL);
|
||||
G_CALLBACK (gtk_main_quit), NULL);
|
||||
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), hbox);
|
||||
@@ -963,8 +963,8 @@ main (int argc, char **argv)
|
||||
gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0);
|
||||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
create_text (&info_buffer, FALSE),
|
||||
gtk_label_new_with_mnemonic ("_Info"));
|
||||
create_text (&info_buffer, FALSE),
|
||||
gtk_label_new_with_mnemonic ("_Info"));
|
||||
|
||||
gtk_text_buffer_create_tag (info_buffer, "title",
|
||||
"font", "Sans 18",
|
||||
@@ -972,8 +972,8 @@ main (int argc, char **argv)
|
||||
g_object_unref (info_buffer);
|
||||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
create_text (&source_buffer, TRUE),
|
||||
gtk_label_new_with_mnemonic ("_Source"));
|
||||
create_text (&source_buffer, TRUE),
|
||||
gtk_label_new_with_mnemonic ("_Source"));
|
||||
|
||||
|
||||
gtk_text_buffer_create_tag (source_buffer, "comment",
|
||||
@@ -998,13 +998,12 @@ main (int argc, char **argv)
|
||||
"foreground", "DarkGoldenrod4",
|
||||
NULL);
|
||||
g_object_unref (source_buffer);
|
||||
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
|
||||
gtk_widget_show_all (window);
|
||||
|
||||
|
||||
load_file (testgtk_demos[0].filename);
|
||||
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
static GtkWidget *
|
||||
create_menu (gint depth,
|
||||
gboolean tearoff)
|
||||
gboolean tearoff)
|
||||
{
|
||||
GtkWidget *menu;
|
||||
GtkWidget *menuitem;
|
||||
@@ -61,7 +61,7 @@ create_menu (gint depth,
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
|
||||
gtk_widget_show (menuitem);
|
||||
if (i == 3)
|
||||
gtk_widget_set_sensitive (menuitem, FALSE);
|
||||
gtk_widget_set_sensitive (menuitem, FALSE);
|
||||
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
|
||||
}
|
||||
@@ -106,10 +106,10 @@ do_menus (GtkWidget *do_widget)
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Menus");
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK(gtk_widget_destroyed), &window);
|
||||
G_CALLBACK(gtk_widget_destroyed), &window);
|
||||
|
||||
accel_group = gtk_accel_group_new ();
|
||||
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
|
||||
@@ -152,13 +152,13 @@ do_menus (GtkWidget *do_widget)
|
||||
|
||||
button = gtk_button_new_with_label ("Flip");
|
||||
g_signal_connect (button, "clicked",
|
||||
G_CALLBACK (change_orientation), menubar);
|
||||
G_CALLBACK (change_orientation), menubar);
|
||||
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
button = gtk_button_new_with_label ("Close");
|
||||
g_signal_connect_swapped (button, "clicked",
|
||||
G_CALLBACK(gtk_widget_destroy), window);
|
||||
G_CALLBACK(gtk_widget_destroy), window);
|
||||
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
|
||||
gtk_widget_set_can_default (button, TRUE);
|
||||
gtk_widget_grab_default (button);
|
||||
|
||||
@@ -613,4 +613,3 @@ do_offscreen_window (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
@@ -524,4 +524,3 @@ do_offscreen_window2 (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ do_overlay (GtkWidget *do_widget)
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_default_size (GTK_WINDOW (window),
|
||||
450, 450);
|
||||
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
void
|
||||
toggle_resize (GtkWidget *widget,
|
||||
GtkWidget *child)
|
||||
GtkWidget *child)
|
||||
{
|
||||
GtkWidget *parent;
|
||||
GtkPaned *paned;
|
||||
@@ -43,7 +43,7 @@ toggle_resize (GtkWidget *widget,
|
||||
|
||||
void
|
||||
toggle_shrink (GtkWidget *widget,
|
||||
GtkWidget *child)
|
||||
GtkWidget *child)
|
||||
{
|
||||
GtkWidget *parent;
|
||||
GtkPaned *paned;
|
||||
@@ -70,10 +70,10 @@ toggle_shrink (GtkWidget *widget,
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
create_pane_options (GtkPaned *paned,
|
||||
const gchar *frame_label,
|
||||
const gchar *label1,
|
||||
const gchar *label2)
|
||||
create_pane_options (GtkPaned *paned,
|
||||
const gchar *frame_label,
|
||||
const gchar *label1,
|
||||
const gchar *label2)
|
||||
{
|
||||
GtkWidget *child1, *child2;
|
||||
GtkWidget *frame;
|
||||
@@ -86,47 +86,38 @@ create_pane_options (GtkPaned *paned,
|
||||
|
||||
frame = gtk_frame_new (frame_label);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
|
||||
|
||||
table = gtk_table_new (3, 2, TRUE);
|
||||
|
||||
table = gtk_grid_new ();
|
||||
gtk_container_add (GTK_CONTAINER (frame), table);
|
||||
|
||||
|
||||
label = gtk_label_new (label1);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), label,
|
||||
0, 1, 0, 1);
|
||||
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
|
||||
|
||||
check_button = gtk_check_button_new_with_mnemonic ("_Resize");
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), check_button,
|
||||
0, 1, 1, 2);
|
||||
gtk_grid_attach (GTK_GRID (table), check_button, 0, 1, 1, 1);
|
||||
g_signal_connect (check_button, "toggled",
|
||||
G_CALLBACK (toggle_resize), child1);
|
||||
G_CALLBACK (toggle_resize), child1);
|
||||
|
||||
check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), check_button,
|
||||
0, 1, 2, 3);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
|
||||
TRUE);
|
||||
gtk_grid_attach (GTK_GRID (table), check_button, 0, 2, 1, 1);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
|
||||
g_signal_connect (check_button, "toggled",
|
||||
G_CALLBACK (toggle_shrink), child1);
|
||||
G_CALLBACK (toggle_shrink), child1);
|
||||
|
||||
label = gtk_label_new (label2);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), label,
|
||||
1, 2, 0, 1);
|
||||
|
||||
gtk_grid_attach (GTK_GRID (table), label, 1, 0, 1, 1);
|
||||
|
||||
check_button = gtk_check_button_new_with_mnemonic ("_Resize");
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), check_button,
|
||||
1, 2, 1, 2);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
|
||||
TRUE);
|
||||
gtk_grid_attach (GTK_GRID (table), check_button, 1, 1, 1, 1);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
|
||||
g_signal_connect (check_button, "toggled",
|
||||
G_CALLBACK (toggle_resize), child2);
|
||||
G_CALLBACK (toggle_resize), child2);
|
||||
|
||||
check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), check_button,
|
||||
1, 2, 2, 3);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
|
||||
TRUE);
|
||||
gtk_grid_attach (GTK_GRID (table), check_button, 1, 2, 1, 1);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
|
||||
g_signal_connect (check_button, "toggled",
|
||||
G_CALLBACK (toggle_shrink), child2);
|
||||
G_CALLBACK (toggle_shrink), child2);
|
||||
|
||||
return frame;
|
||||
}
|
||||
@@ -145,10 +136,10 @@ do_panes (GtkWidget *do_widget)
|
||||
{
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Panes");
|
||||
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
|
||||
@@ -167,7 +158,7 @@ do_panes (GtkWidget *do_widget)
|
||||
gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
|
||||
gtk_widget_set_size_request (frame, 60, 60);
|
||||
gtk_paned_add1 (GTK_PANED (hpaned), frame);
|
||||
|
||||
|
||||
button = gtk_button_new_with_mnemonic ("_Hi there");
|
||||
gtk_container_add (GTK_CONTAINER(frame), button);
|
||||
|
||||
@@ -184,18 +175,18 @@ do_panes (GtkWidget *do_widget)
|
||||
/* Now create toggle buttons to control sizing */
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_pane_options (GTK_PANED (hpaned),
|
||||
"Horizontal",
|
||||
"Left",
|
||||
"Right"),
|
||||
FALSE, FALSE, 0);
|
||||
create_pane_options (GTK_PANED (hpaned),
|
||||
"Horizontal",
|
||||
"Left",
|
||||
"Right"),
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
create_pane_options (GTK_PANED (vpaned),
|
||||
"Vertical",
|
||||
"Top",
|
||||
"Bottom"),
|
||||
FALSE, FALSE, 0);
|
||||
create_pane_options (GTK_PANED (vpaned),
|
||||
"Vertical",
|
||||
"Top",
|
||||
"Bottom"),
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
gtk_widget_show_all (vbox);
|
||||
}
|
||||
|
||||
@@ -25,45 +25,54 @@ do_pickers (GtkWidget *do_widget)
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
|
||||
|
||||
table = gtk_table_new (5, 2, FALSE);
|
||||
gtk_table_set_col_spacing (GTK_TABLE (table), 0, 10);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (table), 3);
|
||||
table = gtk_grid_new ();
|
||||
gtk_grid_set_row_spacing (GTK_GRID (table), 3);
|
||||
gtk_grid_set_column_spacing (GTK_GRID (table), 10);
|
||||
gtk_container_add (GTK_CONTAINER (window), table);
|
||||
|
||||
gtk_container_set_border_width (GTK_CONTAINER (table), 10);
|
||||
|
||||
label = gtk_label_new ("Color:");
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_hexpand (label, TRUE);
|
||||
picker = gtk_color_button_new ();
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 0, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 0, 1, 1);
|
||||
|
||||
label = gtk_label_new ("Font:");
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_hexpand (label, TRUE);
|
||||
picker = gtk_font_button_new ();
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 1, 2);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 1, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 1, 1, 1);
|
||||
|
||||
label = gtk_label_new ("File:");
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_hexpand (label, TRUE);
|
||||
picker = gtk_file_chooser_button_new ("Pick a File",
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 2, 3);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 2, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 2, 1, 1);
|
||||
|
||||
label = gtk_label_new ("Folder:");
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
picker = gtk_file_chooser_button_new ("Pick a Folder",
|
||||
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 3, 4);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 3, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 3, 1, 1);
|
||||
|
||||
label = gtk_label_new ("Mail:");
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_hexpand (label, TRUE);
|
||||
picker = gtk_app_chooser_button_new ("x-scheme-handler/mailto");
|
||||
gtk_app_chooser_button_set_show_dialog_item (GTK_APP_CHOOSER_BUTTON (picker), TRUE);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5);
|
||||
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 4, 5);
|
||||
gtk_grid_attach (GTK_GRID (table), label, 0, 4, 1, 1);
|
||||
gtk_grid_attach (GTK_GRID (table), picker, 1, 4, 1, 1);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
|
||||
@@ -71,7 +71,7 @@ load_pixbufs (GError **error)
|
||||
|
||||
background = gdk_pixbuf_new_from_file (filename, error);
|
||||
g_free (filename);
|
||||
|
||||
|
||||
if (!background)
|
||||
return FALSE; /* Note that "error" was filled with a GError */
|
||||
|
||||
@@ -83,10 +83,10 @@ load_pixbufs (GError **error)
|
||||
filename = demo_find_file (image_names[i], error);
|
||||
if (!filename)
|
||||
return FALSE; /* Note that "error" was filled with a GError */
|
||||
|
||||
|
||||
images[i] = gdk_pixbuf_new_from_file (filename, error);
|
||||
g_free (filename);
|
||||
|
||||
|
||||
if (!images[i])
|
||||
return FALSE; /* Note that "error" was filled with a GError */
|
||||
}
|
||||
|
||||
@@ -26,8 +26,8 @@ typedef struct
|
||||
|
||||
static void
|
||||
begin_print (GtkPrintOperation *operation,
|
||||
GtkPrintContext *context,
|
||||
gpointer user_data)
|
||||
GtkPrintContext *context,
|
||||
gpointer user_data)
|
||||
{
|
||||
PrintData *data = (PrintData *)user_data;
|
||||
char *contents;
|
||||
@@ -55,9 +55,9 @@ begin_print (GtkPrintOperation *operation,
|
||||
|
||||
static void
|
||||
draw_page (GtkPrintOperation *operation,
|
||||
GtkPrintContext *context,
|
||||
gint page_nr,
|
||||
gpointer user_data)
|
||||
GtkPrintContext *context,
|
||||
gint page_nr,
|
||||
gpointer user_data)
|
||||
{
|
||||
PrintData *data = (PrintData *)user_data;
|
||||
cairo_t *cr;
|
||||
@@ -132,8 +132,8 @@ draw_page (GtkPrintOperation *operation,
|
||||
|
||||
static void
|
||||
end_print (GtkPrintOperation *operation,
|
||||
GtkPrintContext *context,
|
||||
gpointer user_data)
|
||||
GtkPrintContext *context,
|
||||
gpointer user_data)
|
||||
{
|
||||
PrintData *data = (PrintData *)user_data;
|
||||
|
||||
@@ -159,11 +159,11 @@ do_printing (GtkWidget *do_widget)
|
||||
data->font_size = 12.0;
|
||||
|
||||
g_signal_connect (G_OBJECT (operation), "begin-print",
|
||||
G_CALLBACK (begin_print), data);
|
||||
G_CALLBACK (begin_print), data);
|
||||
g_signal_connect (G_OBJECT (operation), "draw-page",
|
||||
G_CALLBACK (draw_page), data);
|
||||
G_CALLBACK (draw_page), data);
|
||||
g_signal_connect (G_OBJECT (operation), "end-print",
|
||||
G_CALLBACK (end_print), data);
|
||||
G_CALLBACK (end_print), data);
|
||||
|
||||
gtk_print_operation_set_use_full_page (operation, FALSE);
|
||||
gtk_print_operation_set_unit (operation, GTK_UNIT_POINTS);
|
||||
@@ -195,14 +195,14 @@ do_printing (GtkWidget *do_widget)
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (do_widget),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s", error->message);
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s", error->message);
|
||||
g_error_free (error);
|
||||
|
||||
g_signal_connect (dialog, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
|
||||
gtk_widget_show (dialog);
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ create_fancy_attr_list_for_layout (PangoLayout *layout)
|
||||
for (p = text; (p = strstr (p, HEART)); p += strlen (HEART))
|
||||
{
|
||||
PangoAttribute *attr;
|
||||
|
||||
|
||||
attr = pango_attr_shape_new_with_data (&ink_rect,
|
||||
&logical_rect,
|
||||
GUINT_TO_POINTER (g_utf8_get_char (p)),
|
||||
@@ -152,7 +152,7 @@ rotated_text_draw (GtkWidget *widget,
|
||||
|
||||
/* Inform Pango to re-layout the text with the new transformation matrix */
|
||||
pango_cairo_update_layout (cr, layout);
|
||||
|
||||
|
||||
pango_layout_get_pixel_size (layout, &width, &height);
|
||||
cairo_move_to (cr, - width / 2, - RADIUS * .9);
|
||||
pango_cairo_show_layout (cr, layout);
|
||||
@@ -166,7 +166,7 @@ rotated_text_draw (GtkWidget *widget,
|
||||
g_object_unref (layout);
|
||||
g_object_unref (context);
|
||||
cairo_pattern_destroy (pattern);
|
||||
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* GtkSizeGroup provides a mechanism for grouping a number of
|
||||
* widgets together so they all request the same amount of space.
|
||||
* This is typically useful when you want a column of widgets to
|
||||
* This is typically useful when you want a column of widgets to
|
||||
* have the same size, but you can't use a GtkTable widget.
|
||||
*
|
||||
*
|
||||
* Note that size groups only affect the amount of space requested,
|
||||
* not the size that the widgets finally receive. If you want the
|
||||
* widgets in a GtkSizeGroup to actually be the same size, you need
|
||||
@@ -26,7 +26,7 @@ create_combo_box (const char **strings)
|
||||
const char **str;
|
||||
|
||||
combo_box = gtk_combo_box_text_new ();
|
||||
|
||||
|
||||
for (str = strings; *str; str++)
|
||||
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), *str);
|
||||
|
||||
@@ -36,34 +36,30 @@ create_combo_box (const char **strings)
|
||||
}
|
||||
|
||||
static void
|
||||
add_row (GtkTable *table,
|
||||
int row,
|
||||
GtkSizeGroup *size_group,
|
||||
const char *label_text,
|
||||
const char **options)
|
||||
add_row (GtkGrid *table,
|
||||
int row,
|
||||
GtkSizeGroup *size_group,
|
||||
const char *label_text,
|
||||
const char **options)
|
||||
{
|
||||
GtkWidget *combo_box;
|
||||
GtkWidget *label;
|
||||
|
||||
label = gtk_label_new_with_mnemonic (label_text);
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0, 1);
|
||||
gtk_table_attach (GTK_TABLE (table), label,
|
||||
0, 1, row, row + 1,
|
||||
GTK_EXPAND | GTK_FILL, 0,
|
||||
0, 0);
|
||||
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_END);
|
||||
gtk_widget_set_hexpand (label, TRUE);
|
||||
gtk_grid_attach (table, label, 0, row, 1, 1);
|
||||
|
||||
combo_box = create_combo_box (options);
|
||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo_box);
|
||||
gtk_size_group_add_widget (size_group, combo_box);
|
||||
gtk_table_attach (GTK_TABLE (table), combo_box,
|
||||
1, 2, row, row + 1,
|
||||
0, 0,
|
||||
0, 0);
|
||||
gtk_grid_attach (table, combo_box, 1, row, 1, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
toggle_grouping (GtkToggleButton *check_button,
|
||||
GtkSizeGroup *size_group)
|
||||
GtkSizeGroup *size_group)
|
||||
{
|
||||
GtkSizeGroupMode new_mode;
|
||||
|
||||
@@ -75,7 +71,7 @@ toggle_grouping (GtkToggleButton *check_button,
|
||||
new_mode = GTK_SIZE_GROUP_HORIZONTAL;
|
||||
else
|
||||
new_mode = GTK_SIZE_GROUP_NONE;
|
||||
|
||||
|
||||
gtk_size_group_set_mode (size_group, new_mode);
|
||||
}
|
||||
|
||||
@@ -92,29 +88,29 @@ do_sizegroup (GtkWidget *do_widget)
|
||||
static const char *color_options[] = {
|
||||
"Red", "Green", "Blue", NULL
|
||||
};
|
||||
|
||||
|
||||
static const char *dash_options[] = {
|
||||
"Solid", "Dashed", "Dotted", NULL
|
||||
};
|
||||
|
||||
|
||||
static const char *end_options[] = {
|
||||
"Square", "Round", "Arrow", NULL
|
||||
};
|
||||
|
||||
|
||||
if (!window)
|
||||
{
|
||||
window = gtk_dialog_new_with_buttons ("GtkSizeGroup",
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE,
|
||||
GTK_RESPONSE_NONE,
|
||||
NULL);
|
||||
GTK_WINDOW (do_widget),
|
||||
0,
|
||||
GTK_STOCK_CLOSE,
|
||||
GTK_RESPONSE_NONE,
|
||||
NULL);
|
||||
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
|
||||
|
||||
|
||||
g_signal_connect (window, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
|
||||
|
||||
@@ -123,42 +119,40 @@ do_sizegroup (GtkWidget *do_widget)
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
|
||||
|
||||
size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
|
||||
|
||||
/* Create one frame holding color options
|
||||
*/
|
||||
|
||||
/* Create one frame holding color options */
|
||||
frame = gtk_frame_new ("Color Options");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
|
||||
|
||||
table = gtk_table_new (2, 2, FALSE);
|
||||
table = gtk_grid_new ();
|
||||
gtk_container_set_border_width (GTK_CONTAINER (table), 5);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (table), 5);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (table), 10);
|
||||
gtk_grid_set_row_spacing (GTK_GRID (table), 5);
|
||||
gtk_grid_set_column_spacing (GTK_GRID (table), 10);
|
||||
gtk_container_add (GTK_CONTAINER (frame), table);
|
||||
|
||||
add_row (GTK_TABLE (table), 0, size_group, "_Foreground", color_options);
|
||||
add_row (GTK_TABLE (table), 1, size_group, "_Background", color_options);
|
||||
add_row (GTK_GRID (table), 0, size_group, "_Foreground", color_options);
|
||||
add_row (GTK_GRID (table), 1, size_group, "_Background", color_options);
|
||||
|
||||
/* And another frame holding line style options
|
||||
*/
|
||||
/* And another frame holding line style options */
|
||||
frame = gtk_frame_new ("Line Options");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
table = gtk_table_new (2, 2, FALSE);
|
||||
table = gtk_grid_new ();
|
||||
gtk_container_set_border_width (GTK_CONTAINER (table), 5);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (table), 5);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (table), 10);
|
||||
gtk_grid_set_row_spacing (GTK_GRID (table), 5);
|
||||
gtk_grid_set_column_spacing (GTK_GRID (table), 10);
|
||||
gtk_container_add (GTK_CONTAINER (frame), table);
|
||||
|
||||
add_row (GTK_TABLE (table), 0, size_group, "_Dashing", dash_options);
|
||||
add_row (GTK_TABLE (table), 1, size_group, "_Line ends", end_options);
|
||||
add_row (GTK_GRID (table), 0, size_group, "_Dashing", dash_options);
|
||||
add_row (GTK_GRID (table), 1, size_group, "_Line ends", end_options);
|
||||
|
||||
/* And a check button to turn grouping on and off */
|
||||
check_button = gtk_check_button_new_with_mnemonic ("_Enable grouping");
|
||||
gtk_box_pack_start (GTK_BOX (vbox), check_button, FALSE, FALSE, 0);
|
||||
|
||||
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
|
||||
g_signal_connect (check_button, "toggled",
|
||||
G_CALLBACK (toggle_grouping), size_group);
|
||||
G_CALLBACK (toggle_grouping), size_group);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
|
||||
@@ -93,5 +93,3 @@ do_spinner (GtkWidget *do_widget)
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ stock_item_info_free (StockItemInfo *info)
|
||||
g_free (info->accel_str);
|
||||
if (info->small_icon)
|
||||
g_object_unref (info->small_icon);
|
||||
|
||||
|
||||
g_free (info);
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ stock_item_info_copy (StockItemInfo *src)
|
||||
info->id = g_strdup (src->id);
|
||||
info->macro = g_strdup (src->macro);
|
||||
info->accel_str = g_strdup (src->accel_str);
|
||||
|
||||
|
||||
info->item = src->item;
|
||||
|
||||
info->small_icon = src->small_icon;
|
||||
@@ -82,9 +82,9 @@ id_to_macro (const gchar *id)
|
||||
/* gtk-foo-bar -> GTK_STOCK_FOO_BAR */
|
||||
|
||||
macro = g_string_new (NULL);
|
||||
|
||||
|
||||
cp = id;
|
||||
|
||||
|
||||
if (strncmp (cp, "gtk-", 4) == 0)
|
||||
{
|
||||
g_string_append (macro, "GTK_STOCK_");
|
||||
@@ -94,11 +94,11 @@ id_to_macro (const gchar *id)
|
||||
while (*cp)
|
||||
{
|
||||
if (*cp == '-')
|
||||
g_string_append_c (macro, '_');
|
||||
g_string_append_c (macro, '_');
|
||||
else if (g_ascii_islower (*cp))
|
||||
g_string_append_c (macro, g_ascii_toupper (*cp));
|
||||
g_string_append_c (macro, g_ascii_toupper (*cp));
|
||||
else
|
||||
g_string_append_c (macro, *cp);
|
||||
g_string_append_c (macro, *cp);
|
||||
|
||||
cp++;
|
||||
}
|
||||
@@ -112,7 +112,7 @@ create_model (void)
|
||||
GtkListStore *store;
|
||||
GSList *ids;
|
||||
GSList *tmp_list;
|
||||
|
||||
|
||||
store = gtk_list_store_new (2, STOCK_ITEM_INFO_TYPE, G_TYPE_STRING);
|
||||
|
||||
ids = gtk_stock_list_ids ();
|
||||
@@ -124,9 +124,9 @@ create_model (void)
|
||||
GtkStockItem item;
|
||||
GtkTreeIter iter;
|
||||
GtkIconSet *icon_set;
|
||||
|
||||
|
||||
info.id = tmp_list->data;
|
||||
|
||||
|
||||
if (gtk_stock_lookup (info.id, &item))
|
||||
{
|
||||
info.item = item;
|
||||
@@ -165,19 +165,19 @@ create_model (void)
|
||||
++i;
|
||||
}
|
||||
g_free (sizes);
|
||||
|
||||
info.small_icon = gtk_widget_render_icon_pixbuf (window,
|
||||
|
||||
info.small_icon = gtk_widget_render_icon_pixbuf (window,
|
||||
info.id,
|
||||
size);
|
||||
|
||||
|
||||
if (size != GTK_ICON_SIZE_MENU)
|
||||
{
|
||||
/* Make the result the proper size for our thumbnail */
|
||||
gint w, h;
|
||||
GdkPixbuf *scaled;
|
||||
|
||||
|
||||
gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &w, &h);
|
||||
|
||||
|
||||
scaled = gdk_pixbuf_scale_simple (info.small_icon,
|
||||
w, h,
|
||||
GDK_INTERP_BILINEAR);
|
||||
@@ -200,7 +200,7 @@ create_model (void)
|
||||
}
|
||||
|
||||
info.macro = id_to_macro (info.id);
|
||||
|
||||
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter, 0, &info, 1, info.id, -1);
|
||||
|
||||
@@ -208,10 +208,10 @@ create_model (void)
|
||||
g_free (info.accel_str);
|
||||
if (info.small_icon)
|
||||
g_object_unref (info.small_icon);
|
||||
|
||||
|
||||
tmp_list = g_slist_next (tmp_list);
|
||||
}
|
||||
|
||||
|
||||
g_slist_foreach (ids, (GFunc)g_free, NULL);
|
||||
g_slist_free (ids);
|
||||
|
||||
@@ -235,16 +235,16 @@ get_largest_size (const char *id)
|
||||
for (i = 0; i < n_sizes; i++)
|
||||
{
|
||||
gint width, height;
|
||||
|
||||
|
||||
gtk_icon_size_lookup (sizes[i], &width, &height);
|
||||
|
||||
if (width * height > best_pixels)
|
||||
{
|
||||
best_size = sizes[i];
|
||||
best_pixels = width * height;
|
||||
}
|
||||
{
|
||||
best_size = sizes[i];
|
||||
best_pixels = width * height;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
g_free (sizes);
|
||||
|
||||
return best_size;
|
||||
@@ -257,7 +257,7 @@ selection_changed (GtkTreeSelection *selection)
|
||||
StockItemDisplay *display;
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
|
||||
|
||||
treeview = gtk_tree_selection_get_tree_view (selection);
|
||||
display = g_object_get_data (G_OBJECT (treeview), "stock-display");
|
||||
|
||||
@@ -265,7 +265,7 @@ selection_changed (GtkTreeSelection *selection)
|
||||
{
|
||||
StockItemInfo *info;
|
||||
gchar *str;
|
||||
|
||||
|
||||
gtk_tree_model_get (model, &iter,
|
||||
0, &info,
|
||||
-1);
|
||||
@@ -313,21 +313,21 @@ selection_changed (GtkTreeSelection *selection)
|
||||
|
||||
static void
|
||||
macro_set_func_text (GtkTreeViewColumn *tree_column,
|
||||
GtkCellRenderer *cell,
|
||||
GtkTreeModel *model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
GtkCellRenderer *cell,
|
||||
GtkTreeModel *model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
{
|
||||
StockItemInfo *info;
|
||||
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
0, &info,
|
||||
-1);
|
||||
|
||||
|
||||
g_object_set (GTK_CELL_RENDERER (cell),
|
||||
"text", info->macro,
|
||||
NULL);
|
||||
|
||||
|
||||
stock_item_info_free (info);
|
||||
}
|
||||
|
||||
@@ -339,15 +339,15 @@ id_set_func (GtkTreeViewColumn *tree_column,
|
||||
gpointer data)
|
||||
{
|
||||
StockItemInfo *info;
|
||||
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
0, &info,
|
||||
-1);
|
||||
|
||||
|
||||
g_object_set (GTK_CELL_RENDERER (cell),
|
||||
"text", info->id,
|
||||
NULL);
|
||||
|
||||
|
||||
stock_item_info_free (info);
|
||||
}
|
||||
|
||||
@@ -359,15 +359,15 @@ accel_set_func (GtkTreeViewColumn *tree_column,
|
||||
gpointer data)
|
||||
{
|
||||
StockItemInfo *info;
|
||||
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
0, &info,
|
||||
-1);
|
||||
|
||||
|
||||
g_object_set (GTK_CELL_RENDERER (cell),
|
||||
"text", info->accel_str,
|
||||
NULL);
|
||||
|
||||
|
||||
stock_item_info_free (info);
|
||||
}
|
||||
|
||||
@@ -379,21 +379,21 @@ label_set_func (GtkTreeViewColumn *tree_column,
|
||||
gpointer data)
|
||||
{
|
||||
StockItemInfo *info;
|
||||
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
0, &info,
|
||||
-1);
|
||||
|
||||
|
||||
g_object_set (GTK_CELL_RENDERER (cell),
|
||||
"text", info->item.label,
|
||||
NULL);
|
||||
|
||||
|
||||
stock_item_info_free (info);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_stock_browser (GtkWidget *do_widget)
|
||||
{
|
||||
{
|
||||
if (!window)
|
||||
{
|
||||
GtkWidget *frame;
|
||||
@@ -401,7 +401,6 @@ do_stock_browser (GtkWidget *do_widget)
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *sw;
|
||||
GtkWidget *treeview;
|
||||
GtkWidget *align;
|
||||
GtkTreeModel *model;
|
||||
GtkCellRenderer *cell_renderer;
|
||||
StockItemDisplay *display;
|
||||
@@ -410,7 +409,7 @@ do_stock_browser (GtkWidget *do_widget)
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Stock Icons and Items");
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), -1, 500);
|
||||
|
||||
@@ -427,31 +426,31 @@ do_stock_browser (GtkWidget *do_widget)
|
||||
gtk_box_pack_start (GTK_BOX (hbox), sw, FALSE, FALSE, 0);
|
||||
|
||||
model = create_model ();
|
||||
|
||||
|
||||
treeview = gtk_tree_view_new_with_model (model);
|
||||
|
||||
g_object_unref (model);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (sw), treeview);
|
||||
|
||||
|
||||
column = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_set_title (column, "Macro");
|
||||
|
||||
cell_renderer = gtk_cell_renderer_pixbuf_new ();
|
||||
gtk_tree_view_column_pack_start (column,
|
||||
cell_renderer,
|
||||
FALSE);
|
||||
cell_renderer,
|
||||
FALSE);
|
||||
gtk_tree_view_column_set_attributes (column, cell_renderer,
|
||||
"stock_id", 1, NULL);
|
||||
"stock_id", 1, NULL);
|
||||
cell_renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_column_pack_start (column,
|
||||
cell_renderer,
|
||||
TRUE);
|
||||
cell_renderer,
|
||||
TRUE);
|
||||
gtk_tree_view_column_set_cell_data_func (column, cell_renderer,
|
||||
macro_set_func_text, NULL, NULL);
|
||||
macro_set_func_text, NULL, NULL);
|
||||
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview),
|
||||
column);
|
||||
column);
|
||||
|
||||
cell_renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview),
|
||||
@@ -479,12 +478,10 @@ do_stock_browser (GtkWidget *do_widget)
|
||||
id_set_func,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
align = gtk_alignment_new (0.5, 0.0, 0.0, 0.0);
|
||||
gtk_box_pack_end (GTK_BOX (hbox), align, FALSE, FALSE, 0);
|
||||
|
||||
|
||||
frame = gtk_frame_new ("Selected Item");
|
||||
gtk_container_add (GTK_CONTAINER (align), frame);
|
||||
gtk_widget_set_valign (frame, GTK_ALIGN_START);
|
||||
gtk_box_pack_end (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
|
||||
@@ -495,7 +492,7 @@ do_stock_browser (GtkWidget *do_widget)
|
||||
"stock-display",
|
||||
display,
|
||||
g_free); /* free display with treeview */
|
||||
|
||||
|
||||
display->type_label = gtk_label_new (NULL);
|
||||
display->macro_label = gtk_label_new (NULL);
|
||||
display->id_label = gtk_label_new (NULL);
|
||||
@@ -507,7 +504,7 @@ do_stock_browser (GtkWidget *do_widget)
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox), display->icon_image,
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox), display->label_accel_label,
|
||||
FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), display->macro_label,
|
||||
@@ -517,11 +514,11 @@ do_stock_browser (GtkWidget *do_widget)
|
||||
|
||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
|
||||
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
|
||||
|
||||
|
||||
g_signal_connect (selection,
|
||||
"changed",
|
||||
G_CALLBACK (selection_changed),
|
||||
NULL);
|
||||
"changed",
|
||||
G_CALLBACK (selection_changed),
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
@@ -529,7 +526,7 @@ do_stock_browser (GtkWidget *do_widget)
|
||||
gtk_widget_show_all (window);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
gtk_widget_destroy (window);
|
||||
window = NULL;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Text Widget/Automatic scrolling
|
||||
*
|
||||
* This example demonstrates how to use the gravity of
|
||||
* This example demonstrates how to use the gravity of
|
||||
* GtkTextMarks to keep a text view scrolled to the bottom
|
||||
* while appending text.
|
||||
*/
|
||||
@@ -20,14 +20,14 @@ scroll_to_end (GtkTextView *textview)
|
||||
static int count;
|
||||
|
||||
buffer = gtk_text_view_get_buffer (textview);
|
||||
|
||||
/* Get "end" mark. It's located at the end of buffer because
|
||||
|
||||
/* Get "end" mark. It's located at the end of buffer because
|
||||
* of right gravity
|
||||
*/
|
||||
mark = gtk_text_buffer_get_mark (buffer, "end");
|
||||
gtk_text_buffer_get_iter_at_mark (buffer, &iter, mark);
|
||||
|
||||
/* and insert some text at its position, the iter will be
|
||||
/* and insert some text at its position, the iter will be
|
||||
* revalidated after insertion to point to the end of inserted text
|
||||
*/
|
||||
spaces = g_strnfill (count++, ' ');
|
||||
@@ -43,7 +43,7 @@ scroll_to_end (GtkTextView *textview)
|
||||
*/
|
||||
gtk_text_view_scroll_mark_onscreen (textview, mark);
|
||||
|
||||
/* Emulate typewriter behavior, shift to the left if we
|
||||
/* Emulate typewriter behavior, shift to the left if we
|
||||
* are far enough to the right.
|
||||
*/
|
||||
if (count > 150)
|
||||
@@ -64,7 +64,7 @@ scroll_to_bottom (GtkTextView *textview)
|
||||
static int count;
|
||||
|
||||
buffer = gtk_text_view_get_buffer (textview);
|
||||
|
||||
|
||||
/* Get end iterator */
|
||||
gtk_text_buffer_get_end_iter (buffer, &iter);
|
||||
|
||||
@@ -80,17 +80,17 @@ scroll_to_bottom (GtkTextView *textview)
|
||||
-1);
|
||||
g_free (spaces);
|
||||
|
||||
/* Move the iterator to the beginning of line, so we don't scroll
|
||||
* in horizontal direction
|
||||
/* Move the iterator to the beginning of line, so we don't scroll
|
||||
* in horizontal direction
|
||||
*/
|
||||
gtk_text_iter_set_line_offset (&iter, 0);
|
||||
|
||||
|
||||
/* and place the mark at iter. the mark will stay there after we
|
||||
* insert some text at the end because it has right gravity.
|
||||
*/
|
||||
mark = gtk_text_buffer_get_mark (buffer, "scroll");
|
||||
gtk_text_buffer_move_mark (buffer, mark, &iter);
|
||||
|
||||
|
||||
/* Scroll the mark onscreen.
|
||||
*/
|
||||
gtk_text_view_scroll_mark_onscreen (textview, mark);
|
||||
@@ -114,30 +114,30 @@ setup_scroll (GtkTextView *textview,
|
||||
gtk_text_buffer_get_end_iter (buffer, &iter);
|
||||
|
||||
if (to_end)
|
||||
{
|
||||
/* If we want to scroll to the end, including horizontal scrolling,
|
||||
* then we just create a mark with right gravity at the end of the
|
||||
* buffer. It will stay at the end unless explicitely moved with
|
||||
* gtk_text_buffer_move_mark.
|
||||
*/
|
||||
gtk_text_buffer_create_mark (buffer, "end", &iter, FALSE);
|
||||
|
||||
/* Add scrolling timeout. */
|
||||
return g_timeout_add (50, (GSourceFunc) scroll_to_end, textview);
|
||||
}
|
||||
{
|
||||
/* If we want to scroll to the end, including horizontal scrolling,
|
||||
* then we just create a mark with right gravity at the end of the
|
||||
* buffer. It will stay at the end unless explicitely moved with
|
||||
* gtk_text_buffer_move_mark.
|
||||
*/
|
||||
gtk_text_buffer_create_mark (buffer, "end", &iter, FALSE);
|
||||
|
||||
/* Add scrolling timeout. */
|
||||
return g_timeout_add (50, (GSourceFunc) scroll_to_end, textview);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If we want to scroll to the bottom, but not scroll horizontally,
|
||||
* then an end mark won't do the job. Just create a mark so we can
|
||||
* use it with gtk_text_view_scroll_mark_onscreen, we'll position it
|
||||
* explicitely when needed. Use left gravity so the mark stays where
|
||||
* we put it after inserting new text.
|
||||
*/
|
||||
gtk_text_buffer_create_mark (buffer, "scroll", &iter, TRUE);
|
||||
|
||||
/* Add scrolling timeout. */
|
||||
return g_timeout_add (100, (GSourceFunc) scroll_to_bottom, textview);
|
||||
}
|
||||
{
|
||||
/* If we want to scroll to the bottom, but not scroll horizontally,
|
||||
* then an end mark won't do the job. Just create a mark so we can
|
||||
* use it with gtk_text_view_scroll_mark_onscreen, we'll position it
|
||||
* explicitely when needed. Use left gravity so the mark stays where
|
||||
* we put it after inserting new text.
|
||||
*/
|
||||
gtk_text_buffer_create_mark (buffer, "scroll", &iter, TRUE);
|
||||
|
||||
/* Add scrolling timeout. */
|
||||
return g_timeout_add (100, (GSourceFunc) scroll_to_bottom, textview);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -163,7 +163,7 @@ create_text_view (GtkWidget *hbox,
|
||||
timeout = setup_scroll (GTK_TEXT_VIEW (textview), to_end);
|
||||
|
||||
/* Remove the timeout in destroy handler, so we don't try to
|
||||
* scroll destroyed widget.
|
||||
* scroll destroyed widget.
|
||||
*/
|
||||
g_signal_connect (textview, "destroy",
|
||||
G_CALLBACK (remove_timeout),
|
||||
@@ -181,9 +181,9 @@ do_textscroll (GtkWidget *do_widget)
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
|
||||
|
||||
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
||||
gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
|
||||
gtk_container_add (GTK_CONTAINER (window), hbox);
|
||||
@@ -193,9 +193,9 @@ do_textscroll (GtkWidget *do_widget)
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
gtk_widget_show_all (window);
|
||||
gtk_widget_show_all (window);
|
||||
else
|
||||
gtk_widget_destroy (window);
|
||||
gtk_widget_destroy (window);
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
@@ -561,7 +561,6 @@ recursive_attach_view (int depth,
|
||||
GtkWidget *child_view;
|
||||
GtkWidget *event_box;
|
||||
GdkRGBA color;
|
||||
GtkWidget *align;
|
||||
|
||||
if (depth > 4)
|
||||
return;
|
||||
@@ -573,11 +572,10 @@ recursive_attach_view (int depth,
|
||||
gdk_rgba_parse (&color, "black");
|
||||
gtk_widget_override_background_color (event_box, 0, &color);
|
||||
|
||||
align = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (align), 1);
|
||||
gtk_widget_set_halign (child_view, GTK_ALIGN_FILL);
|
||||
gtk_widget_set_valign (child_view, GTK_ALIGN_FILL);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (event_box), align);
|
||||
gtk_container_add (GTK_CONTAINER (align), child_view);
|
||||
gtk_container_add (GTK_CONTAINER (event_box), child_view);
|
||||
|
||||
gtk_text_view_add_child_at_anchor (view, event_box, anchor);
|
||||
|
||||
@@ -634,4 +632,3 @@ easter_egg_callback (GtkWidget *button,
|
||||
|
||||
gtk_widget_show_all (window);
|
||||
}
|
||||
|
||||
|
||||
@@ -170,14 +170,14 @@ create_model (void)
|
||||
|
||||
/* create tree store */
|
||||
model = gtk_tree_store_new (NUM_COLUMNS,
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN);
|
||||
G_TYPE_STRING,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN,
|
||||
G_TYPE_BOOLEAN);
|
||||
|
||||
/* add data to the tree store */
|
||||
while (month->label)
|
||||
@@ -186,35 +186,35 @@ create_model (void)
|
||||
|
||||
gtk_tree_store_append (model, &iter, NULL);
|
||||
gtk_tree_store_set (model, &iter,
|
||||
HOLIDAY_NAME_COLUMN, month->label,
|
||||
ALEX_COLUMN, FALSE,
|
||||
HAVOC_COLUMN, FALSE,
|
||||
TIM_COLUMN, FALSE,
|
||||
OWEN_COLUMN, FALSE,
|
||||
DAVE_COLUMN, FALSE,
|
||||
VISIBLE_COLUMN, FALSE,
|
||||
WORLD_COLUMN, FALSE,
|
||||
-1);
|
||||
HOLIDAY_NAME_COLUMN, month->label,
|
||||
ALEX_COLUMN, FALSE,
|
||||
HAVOC_COLUMN, FALSE,
|
||||
TIM_COLUMN, FALSE,
|
||||
OWEN_COLUMN, FALSE,
|
||||
DAVE_COLUMN, FALSE,
|
||||
VISIBLE_COLUMN, FALSE,
|
||||
WORLD_COLUMN, FALSE,
|
||||
-1);
|
||||
|
||||
/* add children */
|
||||
while (holiday->label)
|
||||
{
|
||||
GtkTreeIter child_iter;
|
||||
{
|
||||
GtkTreeIter child_iter;
|
||||
|
||||
gtk_tree_store_append (model, &child_iter, &iter);
|
||||
gtk_tree_store_set (model, &child_iter,
|
||||
HOLIDAY_NAME_COLUMN, holiday->label,
|
||||
ALEX_COLUMN, holiday->alex,
|
||||
HAVOC_COLUMN, holiday->havoc,
|
||||
TIM_COLUMN, holiday->tim,
|
||||
OWEN_COLUMN, holiday->owen,
|
||||
DAVE_COLUMN, holiday->dave,
|
||||
VISIBLE_COLUMN, TRUE,
|
||||
WORLD_COLUMN, holiday->world_holiday,
|
||||
-1);
|
||||
gtk_tree_store_append (model, &child_iter, &iter);
|
||||
gtk_tree_store_set (model, &child_iter,
|
||||
HOLIDAY_NAME_COLUMN, holiday->label,
|
||||
ALEX_COLUMN, holiday->alex,
|
||||
HAVOC_COLUMN, holiday->havoc,
|
||||
TIM_COLUMN, holiday->tim,
|
||||
OWEN_COLUMN, holiday->owen,
|
||||
DAVE_COLUMN, holiday->dave,
|
||||
VISIBLE_COLUMN, TRUE,
|
||||
WORLD_COLUMN, holiday->world_holiday,
|
||||
-1);
|
||||
|
||||
holiday++;
|
||||
}
|
||||
holiday++;
|
||||
}
|
||||
|
||||
month++;
|
||||
}
|
||||
@@ -224,8 +224,8 @@ create_model (void)
|
||||
|
||||
static void
|
||||
item_toggled (GtkCellRendererToggle *cell,
|
||||
gchar *path_str,
|
||||
gpointer data)
|
||||
gchar *path_str,
|
||||
gpointer data)
|
||||
{
|
||||
GtkTreeModel *model = (GtkTreeModel *)data;
|
||||
GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
|
||||
@@ -245,7 +245,7 @@ item_toggled (GtkCellRendererToggle *cell,
|
||||
|
||||
/* set new value */
|
||||
gtk_tree_store_set (GTK_TREE_STORE (model), &iter, column,
|
||||
toggle_item, -1);
|
||||
toggle_item, -1);
|
||||
|
||||
/* clean up */
|
||||
gtk_tree_path_free (path);
|
||||
@@ -264,10 +264,10 @@ add_columns (GtkTreeView *treeview)
|
||||
g_object_set (renderer, "xalign", 0.0, NULL);
|
||||
|
||||
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
|
||||
-1, "Holiday",
|
||||
renderer, "text",
|
||||
HOLIDAY_NAME_COLUMN,
|
||||
NULL);
|
||||
-1, "Holiday",
|
||||
renderer, "text",
|
||||
HOLIDAY_NAME_COLUMN,
|
||||
NULL);
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
|
||||
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
|
||||
|
||||
@@ -279,18 +279,18 @@ add_columns (GtkTreeView *treeview)
|
||||
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
|
||||
|
||||
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
|
||||
-1, "Alex",
|
||||
renderer,
|
||||
"active",
|
||||
ALEX_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
"activatable",
|
||||
WORLD_COLUMN, NULL);
|
||||
-1, "Alex",
|
||||
renderer,
|
||||
"active",
|
||||
ALEX_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
"activatable",
|
||||
WORLD_COLUMN, NULL);
|
||||
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
|
||||
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
|
||||
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
|
||||
|
||||
@@ -302,17 +302,17 @@ add_columns (GtkTreeView *treeview)
|
||||
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
|
||||
|
||||
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
|
||||
-1, "Havoc",
|
||||
renderer,
|
||||
"active",
|
||||
HAVOC_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
NULL);
|
||||
-1, "Havoc",
|
||||
renderer,
|
||||
"active",
|
||||
HAVOC_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
NULL);
|
||||
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
|
||||
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
|
||||
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
|
||||
|
||||
@@ -324,18 +324,18 @@ add_columns (GtkTreeView *treeview)
|
||||
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
|
||||
|
||||
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
|
||||
-1, "Tim",
|
||||
renderer,
|
||||
"active",
|
||||
TIM_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
"activatable",
|
||||
WORLD_COLUMN, NULL);
|
||||
-1, "Tim",
|
||||
renderer,
|
||||
"active",
|
||||
TIM_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
"activatable",
|
||||
WORLD_COLUMN, NULL);
|
||||
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
|
||||
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
|
||||
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
|
||||
|
||||
@@ -347,17 +347,17 @@ add_columns (GtkTreeView *treeview)
|
||||
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
|
||||
|
||||
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
|
||||
-1, "Owen",
|
||||
renderer,
|
||||
"active",
|
||||
OWEN_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
NULL);
|
||||
-1, "Owen",
|
||||
renderer,
|
||||
"active",
|
||||
OWEN_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
NULL);
|
||||
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
|
||||
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
|
||||
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
|
||||
|
||||
@@ -369,17 +369,17 @@ add_columns (GtkTreeView *treeview)
|
||||
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
|
||||
|
||||
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
|
||||
-1, "Dave",
|
||||
renderer,
|
||||
"active",
|
||||
DAVE_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
NULL);
|
||||
-1, "Dave",
|
||||
renderer,
|
||||
"active",
|
||||
DAVE_COLUMN,
|
||||
"visible",
|
||||
VISIBLE_COLUMN,
|
||||
NULL);
|
||||
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
|
||||
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
GTK_TREE_VIEW_COLUMN_FIXED);
|
||||
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
|
||||
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
|
||||
}
|
||||
@@ -397,25 +397,25 @@ do_tree_store (GtkWidget *do_widget)
|
||||
/* create window, etc */
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_widget_get_screen (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (vbox),
|
||||
gtk_label_new ("Jonathan's Holiday Card Planning Sheet"),
|
||||
FALSE, FALSE, 0);
|
||||
gtk_label_new ("Jonathan's Holiday Card Planning Sheet"),
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_SHADOW_ETCHED_IN);
|
||||
GTK_SHADOW_ETCHED_IN);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
|
||||
|
||||
/* create model */
|
||||
@@ -426,7 +426,7 @@ do_tree_store (GtkWidget *do_widget)
|
||||
g_object_unref (model);
|
||||
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
|
||||
gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)),
|
||||
GTK_SELECTION_MULTIPLE);
|
||||
GTK_SELECTION_MULTIPLE);
|
||||
|
||||
add_columns (GTK_TREE_VIEW (treeview));
|
||||
|
||||
@@ -434,7 +434,7 @@ do_tree_store (GtkWidget *do_widget)
|
||||
|
||||
/* expand all rows after the treeview widget has been realized */
|
||||
g_signal_connect (treeview, "realize",
|
||||
G_CALLBACK (gtk_tree_view_expand_all), NULL);
|
||||
G_CALLBACK (gtk_tree_view_expand_all), NULL);
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 650, 400);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ activate_action (GtkAction *action)
|
||||
static void
|
||||
activate_radio_action (GtkAction *action, GtkRadioAction *current)
|
||||
{
|
||||
g_message ("Radio action \"%s\" selected",
|
||||
gtk_action_get_name (GTK_ACTION (current)));
|
||||
g_message ("Radio action \"%s\" selected",
|
||||
gtk_action_get_name (GTK_ACTION (current)));
|
||||
}
|
||||
|
||||
static GtkActionEntry entries[] = {
|
||||
@@ -27,30 +27,30 @@ static GtkActionEntry entries[] = {
|
||||
{ "HelpMenu", NULL, "_Help" }, /* name, stock id, label */
|
||||
{ "New", GTK_STOCK_NEW, /* name, stock id */
|
||||
"_New", "<control>N", /* label, accelerator */
|
||||
"Create a new file", /* tooltip */
|
||||
G_CALLBACK (activate_action) },
|
||||
"Create a new file", /* tooltip */
|
||||
G_CALLBACK (activate_action) },
|
||||
{ "Open", GTK_STOCK_OPEN, /* name, stock id */
|
||||
"_Open","<control>O", /* label, accelerator */
|
||||
"_Open","<control>O", /* label, accelerator */
|
||||
"Open a file", /* tooltip */
|
||||
G_CALLBACK (activate_action) },
|
||||
G_CALLBACK (activate_action) },
|
||||
{ "Save", GTK_STOCK_SAVE, /* name, stock id */
|
||||
"_Save","<control>S", /* label, accelerator */
|
||||
"_Save","<control>S", /* label, accelerator */
|
||||
"Save current file", /* tooltip */
|
||||
G_CALLBACK (activate_action) },
|
||||
{ "SaveAs", GTK_STOCK_SAVE, /* name, stock id */
|
||||
"Save _As...", NULL, /* label, accelerator */
|
||||
"Save _As...", NULL, /* label, accelerator */
|
||||
"Save to a file", /* tooltip */
|
||||
G_CALLBACK (activate_action) },
|
||||
{ "Quit", GTK_STOCK_QUIT, /* name, stock id */
|
||||
"_Quit", "<control>Q", /* label, accelerator */
|
||||
"_Quit", "<control>Q", /* label, accelerator */
|
||||
"Quit", /* tooltip */
|
||||
G_CALLBACK (activate_action) },
|
||||
{ "About", NULL, /* name, stock id */
|
||||
"_About", "<control>A", /* label, accelerator */
|
||||
"About", /* tooltip */
|
||||
"_About", "<control>A", /* label, accelerator */
|
||||
"About", /* tooltip */
|
||||
G_CALLBACK (activate_action) },
|
||||
{ "Logo", "demo-gtk-logo", /* name, stock id */
|
||||
NULL, NULL, /* label, accelerator */
|
||||
NULL, NULL, /* label, accelerator */
|
||||
"GTK+", /* tooltip */
|
||||
G_CALLBACK (activate_action) },
|
||||
};
|
||||
@@ -59,9 +59,9 @@ static guint n_entries = G_N_ELEMENTS (entries);
|
||||
|
||||
static GtkToggleActionEntry toggle_entries[] = {
|
||||
{ "Bold", GTK_STOCK_BOLD, /* name, stock id */
|
||||
"_Bold", "<control>B", /* label, accelerator */
|
||||
"_Bold", "<control>B", /* label, accelerator */
|
||||
"Bold", /* tooltip */
|
||||
G_CALLBACK (activate_action),
|
||||
G_CALLBACK (activate_action),
|
||||
TRUE }, /* is_active */
|
||||
};
|
||||
static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
|
||||
@@ -74,13 +74,13 @@ enum {
|
||||
|
||||
static GtkRadioActionEntry color_entries[] = {
|
||||
{ "Red", NULL, /* name, stock id */
|
||||
"_Red", "<control>R", /* label, accelerator */
|
||||
"_Red", "<control>R", /* label, accelerator */
|
||||
"Blood", COLOR_RED }, /* tooltip, value */
|
||||
{ "Green", NULL, /* name, stock id */
|
||||
"_Green", "<control>G", /* label, accelerator */
|
||||
"_Green", "<control>G", /* label, accelerator */
|
||||
"Grass", COLOR_GREEN }, /* tooltip, value */
|
||||
{ "Blue", NULL, /* name, stock id */
|
||||
"_Blue", "<control>B", /* label, accelerator */
|
||||
"_Blue", "<control>B", /* label, accelerator */
|
||||
"Sky", COLOR_BLUE }, /* tooltip, value */
|
||||
};
|
||||
static guint n_color_entries = G_N_ELEMENTS (color_entries);
|
||||
@@ -93,18 +93,18 @@ enum {
|
||||
|
||||
static GtkRadioActionEntry shape_entries[] = {
|
||||
{ "Square", NULL, /* name, stock id */
|
||||
"_Square", "<control>S", /* label, accelerator */
|
||||
"_Square", "<control>S", /* label, accelerator */
|
||||
"Square", SHAPE_SQUARE }, /* tooltip, value */
|
||||
{ "Rectangle", NULL, /* name, stock id */
|
||||
"_Rectangle", "<control>R", /* label, accelerator */
|
||||
"_Rectangle", "<control>R", /* label, accelerator */
|
||||
"Rectangle", SHAPE_RECTANGLE }, /* tooltip, value */
|
||||
{ "Oval", NULL, /* name, stock id */
|
||||
"_Oval", "<control>O", /* label, accelerator */
|
||||
"Egg", SHAPE_OVAL }, /* tooltip, value */
|
||||
"_Oval", "<control>O", /* label, accelerator */
|
||||
"Egg", SHAPE_OVAL }, /* tooltip, value */
|
||||
};
|
||||
static guint n_shape_entries = G_N_ELEMENTS (shape_entries);
|
||||
|
||||
static const gchar *ui_info =
|
||||
static const gchar *ui_info =
|
||||
"<ui>"
|
||||
" <menubar name='MenuBar'>"
|
||||
" <menu action='FileMenu'>"
|
||||
@@ -117,9 +117,9 @@ static const gchar *ui_info =
|
||||
" </menu>"
|
||||
" <menu action='PreferencesMenu'>"
|
||||
" <menu action='ColorMenu'>"
|
||||
" <menuitem action='Red'/>"
|
||||
" <menuitem action='Green'/>"
|
||||
" <menuitem action='Blue'/>"
|
||||
" <menuitem action='Red'/>"
|
||||
" <menuitem action='Green'/>"
|
||||
" <menuitem action='Blue'/>"
|
||||
" </menu>"
|
||||
" <menu action='ShapeMenu'>"
|
||||
" <menuitem action='Square'/>"
|
||||
@@ -144,7 +144,7 @@ GtkWidget *
|
||||
do_ui_manager (GtkWidget *do_widget)
|
||||
{
|
||||
static GtkWidget *window = NULL;
|
||||
|
||||
|
||||
if (!window)
|
||||
{
|
||||
GtkWidget *box1;
|
||||
@@ -158,68 +158,66 @@ do_ui_manager (GtkWidget *do_widget)
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
|
||||
gtk_widget_get_screen (do_widget));
|
||||
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
g_signal_connect (window, "delete-event",
|
||||
G_CALLBACK (gtk_true), NULL);
|
||||
G_CALLBACK (gtk_true), NULL);
|
||||
|
||||
actions = gtk_action_group_new ("Actions");
|
||||
gtk_action_group_add_actions (actions, entries, n_entries, NULL);
|
||||
gtk_action_group_add_toggle_actions (actions,
|
||||
toggle_entries, n_toggle_entries,
|
||||
NULL);
|
||||
gtk_action_group_add_radio_actions (actions,
|
||||
color_entries, n_color_entries,
|
||||
COLOR_RED,
|
||||
G_CALLBACK (activate_radio_action),
|
||||
NULL);
|
||||
gtk_action_group_add_radio_actions (actions,
|
||||
shape_entries, n_shape_entries,
|
||||
SHAPE_OVAL,
|
||||
G_CALLBACK (activate_radio_action),
|
||||
NULL);
|
||||
gtk_action_group_add_toggle_actions (actions,
|
||||
toggle_entries, n_toggle_entries,
|
||||
NULL);
|
||||
gtk_action_group_add_radio_actions (actions,
|
||||
color_entries, n_color_entries,
|
||||
COLOR_RED,
|
||||
G_CALLBACK (activate_radio_action),
|
||||
NULL);
|
||||
gtk_action_group_add_radio_actions (actions,
|
||||
shape_entries, n_shape_entries,
|
||||
SHAPE_OVAL,
|
||||
G_CALLBACK (activate_radio_action),
|
||||
NULL);
|
||||
|
||||
ui = gtk_ui_manager_new ();
|
||||
gtk_ui_manager_insert_action_group (ui, actions, 0);
|
||||
g_object_unref (actions);
|
||||
gtk_window_add_accel_group (GTK_WINDOW (window),
|
||||
gtk_ui_manager_get_accel_group (ui));
|
||||
gtk_window_add_accel_group (GTK_WINDOW (window),
|
||||
gtk_ui_manager_get_accel_group (ui));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "UI Manager");
|
||||
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
|
||||
|
||||
|
||||
if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, -1, &error))
|
||||
{
|
||||
g_message ("building menus failed: %s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
{
|
||||
g_message ("building menus failed: %s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
box1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), box1);
|
||||
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (box1),
|
||||
gtk_ui_manager_get_widget (ui, "/MenuBar"),
|
||||
FALSE, FALSE, 0);
|
||||
gtk_ui_manager_get_widget (ui, "/MenuBar"),
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
label = gtk_label_new ("Type\n<alt>\nto start");
|
||||
gtk_widget_set_size_request (label, 200, 200);
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
|
||||
gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
|
||||
|
||||
|
||||
separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
|
||||
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
|
||||
|
||||
|
||||
box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
|
||||
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
|
||||
|
||||
button = gtk_button_new_with_label ("close");
|
||||
g_signal_connect_swapped (button, "clicked",
|
||||
G_CALLBACK (gtk_widget_destroy), window);
|
||||
G_CALLBACK (gtk_widget_destroy), window);
|
||||
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
|
||||
gtk_widget_set_can_default (button, TRUE);
|
||||
gtk_widget_grab_default (button);
|
||||
|
||||
@@ -8,7 +8,6 @@ EXTRA_DIST += \
|
||||
developers.txt \
|
||||
dnd_internals.txt \
|
||||
focus_tracking.txt \
|
||||
generation.txt \
|
||||
gtkdocs_fix \
|
||||
make-todo \
|
||||
refcounting.txt \
|
||||
|
||||
@@ -1,177 +0,0 @@
|
||||
Overview:
|
||||
========
|
||||
|
||||
This file describes the way that autogeneration
|
||||
works within the GTK+ source code.
|
||||
|
||||
The following files in the gdk/ subdirectory
|
||||
are autogenerated:
|
||||
|
||||
gdkkeysyms.h
|
||||
gdkcursors.h
|
||||
|
||||
The following files in the gtk/ subdirectory
|
||||
are autogenerated:
|
||||
|
||||
gtk.defs
|
||||
Description of GTK+ types (and some functions) in a lisp-style
|
||||
format.
|
||||
gtktypebuiltins.h
|
||||
Header file including declarations for internal types
|
||||
gtktypebuiltins_vars.c
|
||||
Variables for type values for internal types.
|
||||
gtktypebuiltins_ids.c
|
||||
Arrays holding information about each internal type.
|
||||
gtktypebuiltins_evals.c
|
||||
Arrays holding mapping between enumeration values
|
||||
and strings.
|
||||
|
||||
gtkmarshal.c
|
||||
gtkmarshal.h
|
||||
Autogenerated signal marshallers
|
||||
|
||||
GDK
|
||||
===
|
||||
|
||||
gdkkeysyms.h and gdkcursors.h are generated from
|
||||
the corresponding header files
|
||||
|
||||
X11/cursorfont.h
|
||||
X11/keysymdef.h
|
||||
|
||||
by some simple sed scripts. These are not actually
|
||||
run automatically because we want all the keysyms
|
||||
even on systems with a limited set.
|
||||
So the Gdk rule to generate both files (X-derived-headers)
|
||||
only needs to be rerun for every new release of the X Window
|
||||
System.
|
||||
|
||||
GTK+ - type definitions
|
||||
=======================
|
||||
|
||||
The type definitions are generated from several sources:
|
||||
|
||||
gtk-boxed.defs - definitions for boxed types
|
||||
GTK+ header files
|
||||
GDK header files
|
||||
|
||||
The makeenums.pl script does a heuristic parse of
|
||||
the header files and extracts all enumerations declarations.
|
||||
It also recognizes a number of pseudo-comments in the
|
||||
header files:
|
||||
|
||||
Two of these apply to individual enumeration values:
|
||||
|
||||
/*< skip >*/
|
||||
|
||||
This enumeration value should be skipped.
|
||||
|
||||
/*< nick=NICK >*/
|
||||
|
||||
The nickname for this value should NICK instead of the
|
||||
normally guessed value. For instance:
|
||||
|
||||
typedef enum {
|
||||
GTK_TARGET_SAME_APP = 1 << 0, /*< nick=same-app >*/
|
||||
GTK_TARGET_SAME_WIDGET = 1 << 1 /*< nick=same-widget >*/
|
||||
} GtkTargetFlags;
|
||||
|
||||
makes the nicks "same-app" and "same-widget", instead of
|
||||
"app" and "widget" that would normally be used.
|
||||
|
||||
The other two apply to entire enumeration declarations.
|
||||
|
||||
/*< prefix=PREFIX >*/
|
||||
|
||||
Specifies the prefix to be removed from the enumeration
|
||||
values to generate nicknames.
|
||||
|
||||
/*< flags >*/
|
||||
|
||||
Specifies that this enumeration is used as a bitfield.
|
||||
(makenums.pl normally guesses this from the presence of values
|
||||
with << operators). For instance:
|
||||
|
||||
typedef enum /*< flags >*/
|
||||
{
|
||||
GDK_IM_PREEDIT_AREA = 0x0001,
|
||||
GDK_IM_PREEDIT_CALLBACKS = 0x0002,
|
||||
[ ... ]
|
||||
} GdkIMStyle;
|
||||
|
||||
makeenums.pl can be run into two modes:
|
||||
|
||||
1) Generate the gtktypebuiltins_eval.c file (this
|
||||
contains arrays holding the mapping of
|
||||
string <=> enumeration value)
|
||||
|
||||
2) Generate the enumeration portion of gtk.defs.
|
||||
|
||||
The enumeration portion is added to the boxed type
|
||||
declarations in gtk-boxed.defs to create gtk.defs.
|
||||
|
||||
The makeetypes.awk program takes the gtk.defs file, and
|
||||
from that generates various files depending on the
|
||||
third parameter passed to it:
|
||||
|
||||
macros: gtktypebuiltins.h
|
||||
variables: gtktypebuiltins_vars.c
|
||||
entries: gtktypebuiltins_ids.c
|
||||
|
||||
GTK+ - marshallers
|
||||
==================
|
||||
|
||||
The files gtkmarshal.c and gtkmarshal.h include declarations
|
||||
and definitions for the marshallers needed inside of
|
||||
GTK+. The marshallers to be generated are listed in
|
||||
the file gtkmashal.list, which is processed
|
||||
by genmarshal.pl.
|
||||
|
||||
The format of this file is a list of lines:
|
||||
|
||||
<retval-type>:<arg1-type>,<arg2-type>,<arg3-type>
|
||||
|
||||
e.g.:
|
||||
|
||||
BOOL:POINTER,STRING,STRING,POINTER
|
||||
|
||||
A marshaller is generated for each line in the file.
|
||||
The possible types are:
|
||||
|
||||
NONE
|
||||
BOOL
|
||||
CHAR
|
||||
INT
|
||||
UINT
|
||||
LONG
|
||||
ULONG
|
||||
FLOAT
|
||||
DOUBLE
|
||||
STRING
|
||||
ENUM
|
||||
FLAGS
|
||||
BOXED
|
||||
POINTER
|
||||
OBJECT
|
||||
FOREIGN (gpointer data, GtkDestroyNotify notify)
|
||||
C_CALLBACK (GtkFunction func, gpointer func_data)
|
||||
SIGNAL (GtkSignalFunc f, gpointer data)
|
||||
ARGS (gint n_args, GtkArg *args)
|
||||
CALLBACK (GtkCallBackMarshal marshall,
|
||||
gpointer data,
|
||||
GtkDestroyNotify Notify)
|
||||
|
||||
Some of these types map to multiple return values - these
|
||||
are marked above with the return types in parentheses.
|
||||
|
||||
NOTES
|
||||
=====
|
||||
|
||||
When autogenerating GTK+ files, the autogenerated
|
||||
files are often rebuild resulting in the same result.
|
||||
|
||||
To prevent unnecessary rebuilds of the entire directory, some files
|
||||
that multiple other source files depend on are not actually written
|
||||
to directly. Instead, an intermediate file is written, which
|
||||
is then compared to the old file, and only if it is different
|
||||
is it copied into the final location.
|
||||
@@ -57,6 +57,10 @@
|
||||
<title>Index of new symbols in 3.0</title>
|
||||
<xi:include href="xml/api-index-3.0.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-2" role="3.2">
|
||||
<title>Index of new symbols in 3.2</title>
|
||||
<xi:include href="xml/api-index-3.2.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
|
||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
||||
|
||||
|
||||
@@ -761,11 +761,16 @@ gdk_event_put
|
||||
gdk_event_new
|
||||
gdk_event_copy
|
||||
gdk_event_free
|
||||
gdk_event_get_time
|
||||
gdk_event_get_state
|
||||
gdk_event_get_axis
|
||||
gdk_event_get_button
|
||||
gdk_event_get_click_count
|
||||
gdk_event_get_coords
|
||||
gdk_event_get_keycode
|
||||
gdk_event_get_keyval
|
||||
gdk_event_get_root_coords
|
||||
gdk_event_get_scroll_direction
|
||||
gdk_event_get_state
|
||||
gdk_event_get_time
|
||||
gdk_event_request_motions
|
||||
gdk_events_get_angle
|
||||
gdk_events_get_center
|
||||
|
||||
@@ -219,6 +219,8 @@
|
||||
<xi:include href="xml/gtkfilechooserwidget.xml" />
|
||||
<xi:include href="xml/gtkfilefilter.xml" />
|
||||
<xi:include href="xml/gtkfontbutton.xml" />
|
||||
<xi:include href="xml/gtkfontchooser.xml" />
|
||||
<xi:include href="xml/gtkfontchooserdlg.xml" />
|
||||
<xi:include href="xml/gtkfontsel.xml" />
|
||||
<xi:include href="xml/gtkfontseldlg.xml" />
|
||||
</chapter>
|
||||
|
||||
@@ -305,6 +305,7 @@ gtk_adjustment_get_lower
|
||||
gtk_adjustment_get_page_increment
|
||||
gtk_adjustment_get_page_size
|
||||
gtk_adjustment_get_step_increment
|
||||
gtk_adjustment_get_minimum_increment
|
||||
gtk_adjustment_get_upper
|
||||
gtk_adjustment_set_lower
|
||||
gtk_adjustment_set_page_increment
|
||||
@@ -902,6 +903,7 @@ gtk_container_child_get_property
|
||||
gtk_container_child_set_property
|
||||
gtk_container_child_get_valist
|
||||
gtk_container_child_set_valist
|
||||
gtk_container_child_notify
|
||||
gtk_container_forall
|
||||
gtk_container_get_border_width
|
||||
gtk_container_set_border_width
|
||||
@@ -1476,6 +1478,77 @@ GtkFontSelectionDialogPrivate
|
||||
gtk_font_selection_dialog_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkfontchooser</FILE>
|
||||
<TITLE>GtkFontChooser</TITLE>
|
||||
GtkFontChooser
|
||||
gtk_font_chooser_get_font_family
|
||||
gtk_font_chooser_get_font_face
|
||||
gtk_font_chooser_get_font_size
|
||||
gtk_font_chooser_get_font
|
||||
gtk_font_chooser_set_font
|
||||
gtk_font_chooser_get_font_desc
|
||||
gtk_font_chooser_set_font_desc
|
||||
gtk_font_chooser_get_preview_text
|
||||
gtk_font_chooser_set_preview_text
|
||||
gtk_font_chooser_get_show_preview_entry
|
||||
gtk_font_chooser_set_show_preview_entry
|
||||
GtkFontFilterFunc
|
||||
gtk_font_chooser_set_filter_func
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GtkFontChooserIface
|
||||
GTK_TYPE_FONT_CHOOSER
|
||||
GTK_FONT_CHOOSER
|
||||
GTK_FONT_CHOOSER_IFACE
|
||||
GTK_IS_FONT_CHOOSER
|
||||
GTK_IS_FONT_CHOOSER_IFACE
|
||||
GTK_FONT_CHOOSER_GET_IFACE
|
||||
|
||||
<SUBSECTION Private>
|
||||
gtk_font_chooser_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkfontchooserwidget</FILE>
|
||||
<TITLE>GtkFontChooserWidget</TITLE>
|
||||
GtkFontChooserWidget
|
||||
gtk_font_chooser_widget_new
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GtkFontChooserWidgetClass
|
||||
GTK_TYPE_FONT_CHOOSER_WIDGET
|
||||
GTK_FONT_CHOOSER_WIDGET
|
||||
GTK_FONT_CHOOSER_WIDGET_CLASS
|
||||
GTK_IS_FONT_CHOOSER_WIDGET
|
||||
GTK_IS_FONT_CHOOSER_WIDGET_CLASS
|
||||
GTK_FONT_CHOOSER_WIDGET_GET_CLASS
|
||||
|
||||
<SUBSECTION Private>
|
||||
GtkFontChooserWidgetPrivate
|
||||
gtk_font_chooser_widget_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkfontchooserdlg</FILE>
|
||||
<TITLE>GtkFontChooserDialog</TITLE>
|
||||
GtkFontChooserDialog
|
||||
gtk_font_chooser_dialog_new
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GtkFontChooserDialogClass
|
||||
GTK_TYPE_FONT_CHOOSER_DIALOG
|
||||
GTK_FONT_CHOOSER_DIALOG
|
||||
GTK_FONT_CHOOSER_DIALOG_CLASS
|
||||
GTK_IS_FONT_CHOOSER_DIALOG
|
||||
GTK_IS_FONT_CHOOSER_DIALOG_CLASS
|
||||
GTK_FONT_CHOOSER_DIALOG_GET_CLASS
|
||||
|
||||
<SUBSECTION Private>
|
||||
GtkFontChooserDialogPrivate
|
||||
gtk_font_chooser_dialog_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkframe</FILE>
|
||||
<TITLE>GtkFrame</TITLE>
|
||||
@@ -3269,6 +3342,7 @@ gtk_text_buffer_get_type
|
||||
GtkTextIter
|
||||
gtk_text_iter_get_buffer
|
||||
gtk_text_iter_copy
|
||||
gtk_text_iter_assign
|
||||
gtk_text_iter_free
|
||||
gtk_text_iter_get_offset
|
||||
gtk_text_iter_get_line
|
||||
@@ -4229,6 +4303,7 @@ gtk_tree_view_column_cell_is_visible
|
||||
gtk_tree_view_column_focus_cell
|
||||
gtk_tree_view_column_queue_resize
|
||||
gtk_tree_view_column_get_tree_view
|
||||
gtk_tree_view_column_get_x_offset
|
||||
<SUBSECTION Standard>
|
||||
GTK_TREE_VIEW_COLUMN
|
||||
GTK_IS_TREE_VIEW_COLUMN
|
||||
@@ -5111,6 +5186,7 @@ gtk_widget_unset_state_flags
|
||||
gtk_widget_get_state_flags
|
||||
gtk_widget_has_default
|
||||
gtk_widget_has_focus
|
||||
gtk_widget_has_visible_focus
|
||||
gtk_widget_has_grab
|
||||
gtk_widget_has_rc_style
|
||||
gtk_widget_is_drawable
|
||||
@@ -5293,6 +5369,8 @@ gtk_window_get_opacity
|
||||
gtk_window_set_opacity
|
||||
gtk_window_get_mnemonics_visible
|
||||
gtk_window_set_mnemonics_visible
|
||||
gtk_window_get_focus_visible
|
||||
gtk_window_set_focus_visible
|
||||
gtk_window_set_has_resize_grip
|
||||
gtk_window_get_has_resize_grip
|
||||
gtk_window_resize_grip_is_visible
|
||||
@@ -5420,6 +5498,7 @@ GTK_CHECK_VERSION
|
||||
GtkWidgetPath
|
||||
gtk_widget_path_append_type
|
||||
gtk_widget_path_append_with_siblings
|
||||
gtk_widget_path_append_for_widget
|
||||
gtk_widget_path_copy
|
||||
gtk_widget_path_ref
|
||||
gtk_widget_path_unref
|
||||
@@ -5530,6 +5609,7 @@ GTK_STYLE_CLASS_BACKGROUND
|
||||
GTK_STYLE_CLASS_BUTTON
|
||||
GTK_STYLE_CLASS_CALENDAR
|
||||
GTK_STYLE_CLASS_CELL
|
||||
GTK_STYLE_CLASS_COMBOBOX_ENTRY
|
||||
GTK_STYLE_CLASS_CHECK
|
||||
GTK_STYLE_CLASS_DEFAULT
|
||||
GTK_STYLE_CLASS_ENTRY
|
||||
@@ -5679,6 +5759,19 @@ gtk_css_provider_new
|
||||
gtk_css_provider_to_string
|
||||
GTK_CSS_PROVIDER_ERROR
|
||||
GtkCssProviderError
|
||||
<SUBSECTION>
|
||||
GtkCssSection
|
||||
GtkCssSectionType
|
||||
gtk_css_section_get_end_line
|
||||
gtk_css_section_get_end_position
|
||||
gtk_css_section_get_file
|
||||
gtk_css_section_get_parent
|
||||
gtk_css_section_get_section_type
|
||||
gtk_css_section_get_start_line
|
||||
gtk_css_section_get_start_position
|
||||
gtk_css_section_get_type
|
||||
gtk_css_section_ref
|
||||
gtk_css_section_unref
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_CSS_PROVIDER
|
||||
GTK_CSS_PROVIDER
|
||||
@@ -5689,6 +5782,7 @@ GTK_IS_CSS_PROVIDER_CLASS
|
||||
<SUBSECTION Private>
|
||||
gtk_css_provider_get_type
|
||||
gtk_css_provider_error_quark
|
||||
gtk_css_section_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -6914,6 +7008,10 @@ GtkGrid
|
||||
gtk_grid_new
|
||||
gtk_grid_attach
|
||||
gtk_grid_attach_next_to
|
||||
gtk_grid_get_child_at
|
||||
gtk_grid_insert_row
|
||||
gtk_grid_insert_column
|
||||
gtk_grid_insert_next_to
|
||||
gtk_grid_set_row_homogeneous
|
||||
gtk_grid_get_row_homogeneous
|
||||
gtk_grid_set_row_spacing
|
||||
@@ -6992,6 +7090,8 @@ gtk_app_chooser_button_new
|
||||
gtk_app_chooser_button_append_custom_item
|
||||
gtk_app_chooser_button_append_separator
|
||||
gtk_app_chooser_button_set_active_custom_item
|
||||
gtk_app_chooser_button_get_show_default_item
|
||||
gtk_app_chooser_button_set_show_default_item
|
||||
gtk_app_chooser_button_get_show_dialog_item
|
||||
gtk_app_chooser_button_set_show_dialog_item
|
||||
gtk_app_chooser_button_get_heading
|
||||
@@ -7095,6 +7195,7 @@ GtkLockButtonPrivate
|
||||
GtkOverlay
|
||||
|
||||
gtk_overlay_new
|
||||
gtk_overlay_add_overlay
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_OVERLAY
|
||||
|
||||
@@ -66,6 +66,9 @@ gtk_file_chooser_widget_get_type
|
||||
gtk_file_filter_get_type
|
||||
gtk_fixed_get_type
|
||||
gtk_font_button_get_type
|
||||
gtk_font_chooser_get_type
|
||||
gtk_font_chooser_dialog_get_type
|
||||
gtk_font_chooser_widget_get_type
|
||||
gtk_font_selection_dialog_get_type
|
||||
gtk_font_selection_get_type
|
||||
gtk_frame_get_type
|
||||
|
||||
@@ -25,7 +25,6 @@ EXTRA_DIST += \
|
||||
gdk.def \
|
||||
gdkmarshalers.list \
|
||||
gdkwindowimpl.h \
|
||||
makeenums.pl \
|
||||
makefile.msc \
|
||||
gdk.symbols \
|
||||
gdkenumtypes.c.template \
|
||||
|
||||
@@ -87,19 +87,6 @@ gdk_broadway_display_manager_lookup_keyval (GdkDisplayManager *manager,
|
||||
return _gdk_keyval_from_name (name);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_display_manager_keyval_convert_case (GdkDisplayManager *manager,
|
||||
guint symbol,
|
||||
guint *lower,
|
||||
guint *upper)
|
||||
{
|
||||
/* FIXME implement this */
|
||||
if (lower)
|
||||
*lower = symbol;
|
||||
if (upper)
|
||||
*upper = symbol;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_broadway_display_manager_init (GdkBroadwayDisplayManager *manager)
|
||||
{
|
||||
@@ -129,7 +116,6 @@ gdk_broadway_display_manager_class_init (GdkBroadwayDisplayManagerClass *class)
|
||||
manager_class->get_atom_name = _gdk_broadway_display_manager_get_atom_name;
|
||||
manager_class->lookup_keyval = gdk_broadway_display_manager_lookup_keyval;
|
||||
manager_class->get_keyval_name = gdk_broadway_display_manager_get_keyval_name;
|
||||
manager_class->keyval_convert_case = gdk_broadway_display_manager_keyval_convert_case;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -156,10 +156,15 @@ gdk_event_copy
|
||||
gdk_event_free
|
||||
gdk_event_get
|
||||
gdk_event_get_axis
|
||||
gdk_event_get_button
|
||||
gdk_event_get_click_count
|
||||
gdk_event_get_coords
|
||||
gdk_event_get_device
|
||||
gdk_event_get_keycode
|
||||
gdk_event_get_keyval
|
||||
gdk_event_get_root_coords
|
||||
gdk_event_get_screen
|
||||
gdk_event_get_scroll_direction
|
||||
gdk_event_get_source_device
|
||||
gdk_event_get_state
|
||||
gdk_event_get_time
|
||||
|
||||
@@ -427,7 +427,11 @@ gdk_cairo_region_create_from_surface (cairo_surface_t *surface)
|
||||
gint x0 = x;
|
||||
while (x < extents.width)
|
||||
{
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
if (((data[x / 8] >> (x%8)) & 1) == 0)
|
||||
#else
|
||||
if (((data[x / 8] >> (7-(x%8))) & 1) == 0)
|
||||
#endif
|
||||
/* This pixel is "transparent"*/
|
||||
break;
|
||||
x++;
|
||||
|
||||
@@ -1275,9 +1275,14 @@ gdk_display_pointer_is_grabbed (GdkDisplay *display)
|
||||
|
||||
if (gdk_device_get_source (device) == GDK_SOURCE_MOUSE &&
|
||||
gdk_display_device_is_grabbed (display, device))
|
||||
return TRUE;
|
||||
{
|
||||
g_list_free (devices);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
g_list_free (devices);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "gdkconfig.h"
|
||||
#include "gdkdisplaymanagerprivate.h"
|
||||
#include "gdkinternals.h"
|
||||
#include "gdkkeysprivate.h"
|
||||
#include "gdkmarshalers.h"
|
||||
#include "gdkintl.h"
|
||||
|
||||
@@ -136,6 +137,8 @@ gdk_display_manager_class_init (GdkDisplayManagerClass *klass)
|
||||
object_class->set_property = gdk_display_manager_set_property;
|
||||
object_class->get_property = gdk_display_manager_get_property;
|
||||
|
||||
klass->keyval_convert_case = _gdk_display_manager_real_keyval_convert_case;
|
||||
|
||||
/**
|
||||
* GdkDisplayManager::display-opened:
|
||||
* @manager: the object on which the signal is emitted
|
||||
|
||||
186
gdk/gdkevents.c
186
gdk/gdkevents.c
@@ -949,6 +949,192 @@ gdk_event_get_root_coords (const GdkEvent *event,
|
||||
return fetched;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_button:
|
||||
* @event: a #GdkEvent
|
||||
* @button: (out): location to store mouse button number
|
||||
*
|
||||
* Extract the button number from an event.
|
||||
*
|
||||
* Return value: %TRUE if the event delivered a button number
|
||||
*
|
||||
* Since: 3.2
|
||||
**/
|
||||
gboolean
|
||||
gdk_event_get_button (const GdkEvent *event,
|
||||
guint *button)
|
||||
{
|
||||
gboolean fetched = TRUE;
|
||||
guint number = 0;
|
||||
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
case GDK_3BUTTON_PRESS:
|
||||
case GDK_BUTTON_RELEASE:
|
||||
number = event->button.button;
|
||||
break;
|
||||
default:
|
||||
fetched = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (button)
|
||||
*button = number;
|
||||
|
||||
return fetched;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_click_count:
|
||||
* @event: a #GdkEvent
|
||||
* @click_count: (out): location to store click count
|
||||
*
|
||||
* Extracts the click count from an event.
|
||||
*
|
||||
* Return value: %TRUE if the event delivered a click count
|
||||
*
|
||||
* Since: 3.2
|
||||
*/
|
||||
gboolean
|
||||
gdk_event_get_click_count (const GdkEvent *event,
|
||||
guint *click_count)
|
||||
{
|
||||
gboolean fetched = TRUE;
|
||||
guint number = 0;
|
||||
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_BUTTON_RELEASE:
|
||||
number = 1;
|
||||
break;
|
||||
case GDK_2BUTTON_PRESS:
|
||||
number = 2;
|
||||
break;
|
||||
case GDK_3BUTTON_PRESS:
|
||||
number = 3;
|
||||
break;
|
||||
default:
|
||||
fetched = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (click_count)
|
||||
*click_count = number;
|
||||
|
||||
return fetched;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_keyval:
|
||||
* @event: a #GdkEvent
|
||||
* @keyval: (out): location to store the keyval
|
||||
*
|
||||
* Extracts the keyval from an event.
|
||||
*
|
||||
* Return value: %TRUE if the event delivered a key symbol
|
||||
*
|
||||
* Since: 3.2
|
||||
*/
|
||||
gboolean
|
||||
gdk_event_get_keyval (const GdkEvent *event,
|
||||
guint *keyval)
|
||||
{
|
||||
gboolean fetched = TRUE;
|
||||
guint number = 0;
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_KEY_PRESS:
|
||||
case GDK_KEY_RELEASE:
|
||||
number = event->key.keyval;
|
||||
break;
|
||||
default:
|
||||
fetched = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (keyval)
|
||||
*keyval = number;
|
||||
|
||||
return fetched;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_keycode:
|
||||
* @event: a #GdkEvent
|
||||
* @keycode: (out): location to store the keycode
|
||||
*
|
||||
* Extracts the hardware keycode from an event.
|
||||
*
|
||||
* Return value: %TRUE if the event delivered a hardware keycode
|
||||
*
|
||||
* Since: 3.2
|
||||
*/
|
||||
gboolean
|
||||
gdk_event_get_keycode (const GdkEvent *event,
|
||||
guint16 *keycode)
|
||||
{
|
||||
gboolean fetched = TRUE;
|
||||
guint16 number = 0;
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_KEY_PRESS:
|
||||
case GDK_KEY_RELEASE:
|
||||
number = event->key.hardware_keycode;
|
||||
break;
|
||||
default:
|
||||
fetched = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (keycode)
|
||||
*keycode = number;
|
||||
|
||||
return fetched;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_scroll_direction:
|
||||
* @event: a #GdkEvent
|
||||
* @direction: (out): location to store the scroll direction
|
||||
*
|
||||
* Extracts the scroll direction from an event.
|
||||
*
|
||||
* Return value: %TRUE if the event delivered a scroll direction
|
||||
*
|
||||
* Since: 3.2
|
||||
*/
|
||||
gboolean
|
||||
gdk_event_get_scroll_direction (const GdkEvent *event,
|
||||
GdkScrollDirection *direction)
|
||||
{
|
||||
gboolean fetched = TRUE;
|
||||
GdkScrollDirection dir = 0;
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_SCROLL:
|
||||
dir = event->scroll.direction;
|
||||
break;
|
||||
default:
|
||||
fetched = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (direction)
|
||||
*direction = dir;
|
||||
|
||||
return fetched;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_axis:
|
||||
* @event: a #GdkEvent
|
||||
|
||||
@@ -1054,9 +1054,19 @@ gboolean gdk_event_get_state (const GdkEvent *event,
|
||||
gboolean gdk_event_get_coords (const GdkEvent *event,
|
||||
gdouble *x_win,
|
||||
gdouble *y_win);
|
||||
gboolean gdk_event_get_root_coords (const GdkEvent *event,
|
||||
gdouble *x_root,
|
||||
gdouble *y_root);
|
||||
gboolean gdk_event_get_root_coords (const GdkEvent *event,
|
||||
gdouble *x_root,
|
||||
gdouble *y_root);
|
||||
gboolean gdk_event_get_button (const GdkEvent *event,
|
||||
guint *button);
|
||||
gboolean gdk_event_get_click_count (const GdkEvent *event,
|
||||
guint *click_count);
|
||||
gboolean gdk_event_get_keyval (const GdkEvent *event,
|
||||
guint *keyval);
|
||||
gboolean gdk_event_get_keycode (const GdkEvent *event,
|
||||
guint16 *keycode);
|
||||
gboolean gdk_event_get_scroll_direction (const GdkEvent *event,
|
||||
GdkScrollDirection *direction);
|
||||
gboolean gdk_event_get_axis (const GdkEvent *event,
|
||||
GdkAxisUse axis_use,
|
||||
gdouble *value);
|
||||
|
||||
127
gdk/gdkkeys.c
127
gdk/gdkkeys.c
@@ -26,6 +26,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkkeysyms.h"
|
||||
#include "gdkkeysprivate.h"
|
||||
#include "gdkdisplay.h"
|
||||
#include "gdkdisplaymanagerprivate.h"
|
||||
@@ -649,3 +650,129 @@ gdk_keyval_from_name (const gchar *keyval_name)
|
||||
return GDK_DISPLAY_MANAGER_GET_CLASS (manager)->lookup_keyval (manager,
|
||||
keyval_name);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_display_manager_real_keyval_convert_case (GdkDisplayManager *manager,
|
||||
guint symbol,
|
||||
guint *lower,
|
||||
guint *upper)
|
||||
{
|
||||
guint xlower = symbol;
|
||||
guint xupper = symbol;
|
||||
|
||||
/* Check for directly encoded 24-bit UCS characters: */
|
||||
if ((symbol & 0xff000000) == 0x01000000)
|
||||
{
|
||||
if (lower)
|
||||
*lower = gdk_unicode_to_keyval (g_unichar_tolower (symbol & 0x00ffffff));
|
||||
if (upper)
|
||||
*upper = gdk_unicode_to_keyval (g_unichar_toupper (symbol & 0x00ffffff));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (symbol >> 8)
|
||||
{
|
||||
case 0: /* Latin 1 */
|
||||
if ((symbol >= GDK_KEY_A) && (symbol <= GDK_KEY_Z))
|
||||
xlower += (GDK_KEY_a - GDK_KEY_A);
|
||||
else if ((symbol >= GDK_KEY_a) && (symbol <= GDK_KEY_z))
|
||||
xupper -= (GDK_KEY_a - GDK_KEY_A);
|
||||
else if ((symbol >= GDK_KEY_Agrave) && (symbol <= GDK_KEY_Odiaeresis))
|
||||
xlower += (GDK_KEY_agrave - GDK_KEY_Agrave);
|
||||
else if ((symbol >= GDK_KEY_agrave) && (symbol <= GDK_KEY_odiaeresis))
|
||||
xupper -= (GDK_KEY_agrave - GDK_KEY_Agrave);
|
||||
else if ((symbol >= GDK_KEY_Ooblique) && (symbol <= GDK_KEY_Thorn))
|
||||
xlower += (GDK_KEY_oslash - GDK_KEY_Ooblique);
|
||||
else if ((symbol >= GDK_KEY_oslash) && (symbol <= GDK_KEY_thorn))
|
||||
xupper -= (GDK_KEY_oslash - GDK_KEY_Ooblique);
|
||||
break;
|
||||
|
||||
case 1: /* Latin 2 */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol == GDK_KEY_Aogonek)
|
||||
xlower = GDK_KEY_aogonek;
|
||||
else if (symbol >= GDK_KEY_Lstroke && symbol <= GDK_KEY_Sacute)
|
||||
xlower += (GDK_KEY_lstroke - GDK_KEY_Lstroke);
|
||||
else if (symbol >= GDK_KEY_Scaron && symbol <= GDK_KEY_Zacute)
|
||||
xlower += (GDK_KEY_scaron - GDK_KEY_Scaron);
|
||||
else if (symbol >= GDK_KEY_Zcaron && symbol <= GDK_KEY_Zabovedot)
|
||||
xlower += (GDK_KEY_zcaron - GDK_KEY_Zcaron);
|
||||
else if (symbol == GDK_KEY_aogonek)
|
||||
xupper = GDK_KEY_Aogonek;
|
||||
else if (symbol >= GDK_KEY_lstroke && symbol <= GDK_KEY_sacute)
|
||||
xupper -= (GDK_KEY_lstroke - GDK_KEY_Lstroke);
|
||||
else if (symbol >= GDK_KEY_scaron && symbol <= GDK_KEY_zacute)
|
||||
xupper -= (GDK_KEY_scaron - GDK_KEY_Scaron);
|
||||
else if (symbol >= GDK_KEY_zcaron && symbol <= GDK_KEY_zabovedot)
|
||||
xupper -= (GDK_KEY_zcaron - GDK_KEY_Zcaron);
|
||||
else if (symbol >= GDK_KEY_Racute && symbol <= GDK_KEY_Tcedilla)
|
||||
xlower += (GDK_KEY_racute - GDK_KEY_Racute);
|
||||
else if (symbol >= GDK_KEY_racute && symbol <= GDK_KEY_tcedilla)
|
||||
xupper -= (GDK_KEY_racute - GDK_KEY_Racute);
|
||||
break;
|
||||
|
||||
case 2: /* Latin 3 */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Hstroke && symbol <= GDK_KEY_Hcircumflex)
|
||||
xlower += (GDK_KEY_hstroke - GDK_KEY_Hstroke);
|
||||
else if (symbol >= GDK_KEY_Gbreve && symbol <= GDK_KEY_Jcircumflex)
|
||||
xlower += (GDK_KEY_gbreve - GDK_KEY_Gbreve);
|
||||
else if (symbol >= GDK_KEY_hstroke && symbol <= GDK_KEY_hcircumflex)
|
||||
xupper -= (GDK_KEY_hstroke - GDK_KEY_Hstroke);
|
||||
else if (symbol >= GDK_KEY_gbreve && symbol <= GDK_KEY_jcircumflex)
|
||||
xupper -= (GDK_KEY_gbreve - GDK_KEY_Gbreve);
|
||||
else if (symbol >= GDK_KEY_Cabovedot && symbol <= GDK_KEY_Scircumflex)
|
||||
xlower += (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
|
||||
else if (symbol >= GDK_KEY_cabovedot && symbol <= GDK_KEY_scircumflex)
|
||||
xupper -= (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
|
||||
break;
|
||||
|
||||
case 3: /* Latin 4 */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Rcedilla && symbol <= GDK_KEY_Tslash)
|
||||
xlower += (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
|
||||
else if (symbol >= GDK_KEY_rcedilla && symbol <= GDK_KEY_tslash)
|
||||
xupper -= (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
|
||||
else if (symbol == GDK_KEY_ENG)
|
||||
xlower = GDK_KEY_eng;
|
||||
else if (symbol == GDK_KEY_eng)
|
||||
xupper = GDK_KEY_ENG;
|
||||
else if (symbol >= GDK_KEY_Amacron && symbol <= GDK_KEY_Umacron)
|
||||
xlower += (GDK_KEY_amacron - GDK_KEY_Amacron);
|
||||
else if (symbol >= GDK_KEY_amacron && symbol <= GDK_KEY_umacron)
|
||||
xupper -= (GDK_KEY_amacron - GDK_KEY_Amacron);
|
||||
break;
|
||||
|
||||
case 6: /* Cyrillic */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Serbian_DJE && symbol <= GDK_KEY_Serbian_DZE)
|
||||
xlower -= (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
|
||||
else if (symbol >= GDK_KEY_Serbian_dje && symbol <= GDK_KEY_Serbian_dze)
|
||||
xupper += (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
|
||||
else if (symbol >= GDK_KEY_Cyrillic_YU && symbol <= GDK_KEY_Cyrillic_HARDSIGN)
|
||||
xlower -= (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
|
||||
else if (symbol >= GDK_KEY_Cyrillic_yu && symbol <= GDK_KEY_Cyrillic_hardsign)
|
||||
xupper += (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
|
||||
break;
|
||||
|
||||
case 7: /* Greek */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Greek_ALPHAaccent && symbol <= GDK_KEY_Greek_OMEGAaccent)
|
||||
xlower += (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
|
||||
else if (symbol >= GDK_KEY_Greek_alphaaccent && symbol <= GDK_KEY_Greek_omegaaccent &&
|
||||
symbol != GDK_KEY_Greek_iotaaccentdieresis &&
|
||||
symbol != GDK_KEY_Greek_upsilonaccentdieresis)
|
||||
xupper -= (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
|
||||
else if (symbol >= GDK_KEY_Greek_ALPHA && symbol <= GDK_KEY_Greek_OMEGA)
|
||||
xlower += (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
|
||||
else if (symbol >= GDK_KEY_Greek_alpha && symbol <= GDK_KEY_Greek_omega &&
|
||||
symbol != GDK_KEY_Greek_finalsmallsigma)
|
||||
xupper -= (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
|
||||
break;
|
||||
}
|
||||
|
||||
if (lower)
|
||||
*lower = xlower;
|
||||
if (upper)
|
||||
*upper = xupper;
|
||||
}
|
||||
|
||||
@@ -106,15 +106,6 @@ gboolean gdk_keymap_get_entries_for_keycode (GdkKeymap *keymap,
|
||||
guint **keyvals,
|
||||
gint *n_entries);
|
||||
|
||||
/**
|
||||
* gdk_keymap_get_direction:
|
||||
* @keymap: a #GdkKeymap or %NULL to use the default keymap.
|
||||
*
|
||||
* Returns the direction of the keymap.
|
||||
*
|
||||
* Returns: the direction of the keymap, %PANGO_DIRECTION_LTR or
|
||||
* %PANGO_DIRECTION_RTL.
|
||||
*/
|
||||
PangoDirection gdk_keymap_get_direction (GdkKeymap *keymap);
|
||||
gboolean gdk_keymap_have_bidi_layouts (GdkKeymap *keymap);
|
||||
gboolean gdk_keymap_get_caps_lock_state (GdkKeymap *keymap);
|
||||
@@ -128,15 +119,6 @@ gboolean gdk_keymap_map_virtual_modifiers (GdkKeymap *keymap,
|
||||
*/
|
||||
gchar* gdk_keyval_name (guint keyval) G_GNUC_CONST;
|
||||
|
||||
/**
|
||||
* gdk_keyval_from_name:
|
||||
* @keyval_name: a key name.
|
||||
*
|
||||
* Converts a key name to a key value.
|
||||
*
|
||||
* Returns: the corresponding key value, or %GDK_VoidSymbol if the key name is
|
||||
* not a valid key.
|
||||
*/
|
||||
guint gdk_keyval_from_name (const gchar *keyval_name);
|
||||
void gdk_keyval_convert_case (guint symbol,
|
||||
guint *lower,
|
||||
|
||||
@@ -75,6 +75,11 @@ struct _GdkKeymap
|
||||
GdkDisplay *display;
|
||||
};
|
||||
|
||||
void _gdk_display_manager_real_keyval_convert_case (GdkDisplayManager *manager,
|
||||
guint symbol,
|
||||
guint *lower,
|
||||
guint *upper);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif
|
||||
|
||||
@@ -356,12 +356,11 @@ gdk_pango_context_get_for_screen (GdkScreen *screen)
|
||||
PangoContext *context;
|
||||
const cairo_font_options_t *options;
|
||||
double dpi;
|
||||
|
||||
|
||||
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
|
||||
|
||||
fontmap = pango_cairo_font_map_get_default ();
|
||||
|
||||
context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
|
||||
context = pango_font_map_create_context (fontmap);
|
||||
|
||||
options = gdk_screen_get_font_options (screen);
|
||||
pango_cairo_context_set_font_options (context, options);
|
||||
|
||||
@@ -287,13 +287,14 @@ gdk_screen_get_monitor_at_point (GdkScreen *screen,
|
||||
* gdk_screen_get_monitor_at_window:
|
||||
* @screen: a #GdkScreen.
|
||||
* @window: a #GdkWindow
|
||||
* @returns: the monitor number in which most of @window is located,
|
||||
* or if @window does not intersect any monitors, a monitor,
|
||||
* close to @window.
|
||||
*
|
||||
* Returns the number of the monitor in which the largest area of the
|
||||
* Returns the number of the monitor in which the largest area of the
|
||||
* bounding rectangle of @window resides.
|
||||
*
|
||||
* Returns: the monitor number in which most of @window is located,
|
||||
* or if @window does not intersect any monitors, a monitor,
|
||||
* close to @window.
|
||||
*
|
||||
* Since: 2.2
|
||||
**/
|
||||
gint
|
||||
|
||||
@@ -2043,7 +2043,7 @@ gdk_window_destroy (GdkWindow *window)
|
||||
/**
|
||||
* gdk_window_set_user_data:
|
||||
* @window: a #GdkWindow
|
||||
* @user_data: (allow-none): user data
|
||||
* @user_data: (allow-none) (type GObject.Object): user data
|
||||
*
|
||||
* For most purposes this function is deprecated in favor of
|
||||
* g_object_set_data(). However, for historical reasons GTK+ stores
|
||||
|
||||
279
gdk/makeenums.pl
279
gdk/makeenums.pl
@@ -1,279 +0,0 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# Information about the current enumeration
|
||||
|
||||
my $flags; # Is enumeration a bitmask
|
||||
my $seenbitshift; # Have we seen bitshift operators?
|
||||
my $prefix; # Prefix for this enumeration
|
||||
my $enumname; # Name for this enumeration
|
||||
my $firstenum = 1; # Is this the first enumeration in file?
|
||||
my @entries; # [ $name, $val ] for each entry
|
||||
|
||||
sub parse_options {
|
||||
my $opts = shift;
|
||||
my @opts;
|
||||
|
||||
for $opt (split /\s*,\s*/, $opts) {
|
||||
my ($key,$val) = $opt =~ /\s*(\w+)(?:=(\S+))?/;
|
||||
defined $val or $val = 1;
|
||||
push @opts, $key, $val;
|
||||
}
|
||||
@opts;
|
||||
}
|
||||
sub parse_entries {
|
||||
my $file = shift;
|
||||
|
||||
while (<$file>) {
|
||||
# Read lines until we have no open comments
|
||||
while (m@/\*
|
||||
([^*]|\*(?!/))*$
|
||||
@x) {
|
||||
my $new;
|
||||
defined ($new = <$file>) || die "Unmatched comment";
|
||||
$_ .= $new;
|
||||
}
|
||||
# Now strip comments
|
||||
s@/\*(?!<)
|
||||
([^*]+|\*(?!/))*
|
||||
\*/@@gx;
|
||||
|
||||
s@\n@ @;
|
||||
|
||||
next if m@^\s*$@;
|
||||
|
||||
# Handle include files
|
||||
if (/^\#include\s*<([^>]*)>/ ) {
|
||||
my $file= "../$1";
|
||||
open NEWFILE, $file or die "Cannot open include file $file: $!\n";
|
||||
|
||||
if (parse_entries (\*NEWFILE)) {
|
||||
return 1;
|
||||
} else {
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
if (/^\s*\}\s*(\w+)/) {
|
||||
$enumname = $1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (m@^\s*
|
||||
(\w+)\s* # name
|
||||
(?:=( # value
|
||||
(?:[^,/]|/(?!\*))*
|
||||
))?,?\s*
|
||||
(?:/\*< # options
|
||||
(([^*]|\*(?!/))*)
|
||||
>\*/)?
|
||||
\s*$
|
||||
@x) {
|
||||
my ($name, $value, $options) = ($1,$2,$3);
|
||||
|
||||
if (!defined $flags && defined $value && $value =~ /<</) {
|
||||
$seenbitshift = 1;
|
||||
}
|
||||
if (defined $options) {
|
||||
my %options = parse_options($options);
|
||||
if (!defined $options{skip}) {
|
||||
push @entries, [ $name, $options{nick} ];
|
||||
}
|
||||
} else {
|
||||
push @entries, [ $name ];
|
||||
}
|
||||
} else {
|
||||
print STDERR "Can't understand: $_\n";
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
my $gen_arrays = 0;
|
||||
my $gen_defs = 0;
|
||||
my $gen_includes = 0;
|
||||
my $gen_cfile = 0;
|
||||
|
||||
# Parse arguments
|
||||
|
||||
if (@ARGV) {
|
||||
if ($ARGV[0] eq "arrays") {
|
||||
shift @ARGV;
|
||||
$gen_arrays = 1;
|
||||
} elsif ($ARGV[0] eq "defs") {
|
||||
shift @ARGV;
|
||||
$gen_defs = 1;
|
||||
} elsif ($ARGV[0] eq "include") {
|
||||
shift @ARGV;
|
||||
$gen_includes = 1;
|
||||
} elsif ($ARGV[0] eq "cfile") {
|
||||
shift @ARGV;
|
||||
$gen_cfile = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ($gen_defs) {
|
||||
print ";; generated by makeenums.pl ; -*- scheme -*-\n\n";
|
||||
} else {
|
||||
print "/* Generated by makeenums.pl */\n\n";
|
||||
}
|
||||
|
||||
if ($gen_includes) {
|
||||
print "#ifndef __GDK_ENUM_TYPES_H__\n";
|
||||
print "#define __GDK_ENUM_TYPES_H__\n";
|
||||
}
|
||||
|
||||
if ($gen_cfile) {
|
||||
print "#include \"gdk.h\"\n";
|
||||
}
|
||||
|
||||
ENUMERATION:
|
||||
while (<>) {
|
||||
if (eof) {
|
||||
close (ARGV); # reset line numbering
|
||||
$firstenum = 1; # Flag to print filename at next enum
|
||||
}
|
||||
|
||||
if (m@^\s*typedef\s+enum\s*
|
||||
({)?\s*
|
||||
(?:/\*<
|
||||
(([^*]|\*(?!/))*)
|
||||
>\*/)?
|
||||
@x) {
|
||||
print "\n";
|
||||
if (defined $2) {
|
||||
my %options = parse_options($2);
|
||||
$prefix = $options{prefix};
|
||||
$flags = $options{flags};
|
||||
} else {
|
||||
$prefix = undef;
|
||||
$flags = undef;
|
||||
}
|
||||
# Didn't have trailing '{' look on next lines
|
||||
if (!defined $1) {
|
||||
while (<>) {
|
||||
if (s/^\s*\{//) {
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$seenbitshift = 0;
|
||||
@entries = ();
|
||||
|
||||
# Now parse the entries
|
||||
parse_entries (\*ARGV);
|
||||
|
||||
# figure out if this was a flags or enums enumeration
|
||||
|
||||
if (!defined $flags) {
|
||||
$flags = $seenbitshift;
|
||||
}
|
||||
|
||||
# Autogenerate a prefix
|
||||
|
||||
if (!defined $prefix) {
|
||||
for (@entries) {
|
||||
my $name = $_->[0];
|
||||
if (defined $prefix) {
|
||||
my $tmp = ~ ($name ^ $prefix);
|
||||
($tmp) = $tmp =~ /(^\xff*)/;
|
||||
$prefix = $prefix & $tmp;
|
||||
} else {
|
||||
$prefix = $name;
|
||||
}
|
||||
}
|
||||
# Trim so that it ends in an underscore
|
||||
$prefix =~ s/_[^_]*$/_/;
|
||||
}
|
||||
|
||||
for $entry (@entries) {
|
||||
my ($name,$nick) = @{$entry};
|
||||
if (!defined $nick) {
|
||||
($nick = $name) =~ s/^$prefix//;
|
||||
$nick =~ tr/_/-/;
|
||||
$nick = lc($nick);
|
||||
@{$entry} = ($name, $nick);
|
||||
}
|
||||
}
|
||||
|
||||
# Spit out the output
|
||||
|
||||
my $valuename = $enumname;
|
||||
$valuename =~ s/([^A-Z])([A-Z])/$1_$2/g;
|
||||
$valuename =~ s/([A-Z][A-Z])([A-Z][0-9a-z])/$1_$2/g;
|
||||
$valuename = lc($valuename);
|
||||
|
||||
my $typemacro = $enumname;
|
||||
$typemacro =~ s/([^A-Z])([A-Z])/$1_$2/g;
|
||||
$typemacro =~ s/([A-Z][A-Z])([A-Z][0-9a-z])/$1_$2/g;
|
||||
$typemacro = uc($valuename);
|
||||
$typemacro =~ s/GDK_/GDK_TYPE_/g;
|
||||
|
||||
if ($gen_defs) {
|
||||
if ($firstenum) {
|
||||
print qq(\n; enumerations from "$ARGV"\n);
|
||||
$firstenum = 0;
|
||||
}
|
||||
|
||||
print "\n(define-".($flags ? "flags" : "enum")." $enumname";
|
||||
|
||||
for (@entries) {
|
||||
my ($name,$nick) = @{$_};
|
||||
print "\n ($nick $name)";
|
||||
}
|
||||
print ")\n";
|
||||
|
||||
} elsif ($gen_arrays) {
|
||||
|
||||
print "static const GtkEnumValue _${valuename}_values[] = {\n";
|
||||
for (@entries) {
|
||||
my ($name,$nick) = @{$_};
|
||||
print qq( { $name, "$name", "$nick" },\n);
|
||||
}
|
||||
print " { 0, NULL, NULL }\n";
|
||||
print "};\n";
|
||||
} elsif ($gen_includes) {
|
||||
print "GType ${valuename}_get_type (void);\n";
|
||||
print "#define ${typemacro} ${valuename}_get_type ()\n";
|
||||
} elsif ($gen_cfile) {
|
||||
print (<<EOF);
|
||||
GType
|
||||
${valuename}_get_type (void)
|
||||
{
|
||||
static GType etype = 0;
|
||||
if (etype == 0)
|
||||
{
|
||||
EOF
|
||||
if ($flags) {
|
||||
print " static const GFlagsValue values[] = {\n";
|
||||
} else {
|
||||
print " static const GEnumValue values[] = {\n";
|
||||
}
|
||||
for (@entries) {
|
||||
my ($name,$nick) = @{$_};
|
||||
print qq( { $name, "$name", "$nick" },\n);
|
||||
}
|
||||
print " { 0, NULL, NULL }\n";
|
||||
print " };\n";
|
||||
|
||||
if ($flags) {
|
||||
print " etype = g_flags_register_static (\"$enumname\", values);\n";
|
||||
} else {
|
||||
print " etype = g_enum_register_static (\"$enumname\", values);\n";
|
||||
}
|
||||
|
||||
print (<<EOF);
|
||||
}
|
||||
return etype;
|
||||
}
|
||||
EOF
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($gen_includes) {
|
||||
print "#endif /* __GDK_ENUMS_H__ */\n";
|
||||
}
|
||||
@@ -165,6 +165,11 @@
|
||||
window->width = content_rect.size.width;
|
||||
window->height = content_rect.size.height;
|
||||
|
||||
/* Certain resize operations (e.g. going fullscreen), also move the
|
||||
* origin of the window.
|
||||
*/
|
||||
_gdk_quartz_window_update_position (window);
|
||||
|
||||
[[self contentView] setFrame:NSMakeRect (0, 0, window->width, window->height)];
|
||||
|
||||
_gdk_window_update_size (window);
|
||||
|
||||
@@ -214,7 +214,8 @@ gdk_quartz_device_core_query_state_helper (GdkWindow *window,
|
||||
toplevel = gdk_window_get_effective_toplevel (window);
|
||||
|
||||
if (mask)
|
||||
*mask = _gdk_quartz_events_get_current_event_mask ();
|
||||
*mask = _gdk_quartz_events_get_current_keyboard_modifiers () |
|
||||
_gdk_quartz_events_get_current_mouse_modifiers ();
|
||||
|
||||
/* Get the y coordinate, needs to be flipped. */
|
||||
if (window == _gdk_root)
|
||||
@@ -267,7 +268,6 @@ gdk_quartz_device_core_query_state (GdkDevice *device,
|
||||
gint *win_y,
|
||||
GdkModifierType *mask)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
GdkWindow *found_window;
|
||||
NSPoint point;
|
||||
gint x_tmp, y_tmp;
|
||||
@@ -275,10 +275,6 @@ gdk_quartz_device_core_query_state (GdkDevice *device,
|
||||
found_window = gdk_quartz_device_core_query_state_helper (window, device,
|
||||
win_x, win_y,
|
||||
mask);
|
||||
if (!found_window)
|
||||
return FALSE;
|
||||
|
||||
display = gdk_window_get_display (window);
|
||||
|
||||
if (root_window)
|
||||
*root_window = _gdk_root;
|
||||
@@ -358,7 +354,8 @@ gdk_quartz_device_core_window_at_position (GdkDevice *device,
|
||||
*win_y = found_window ? y_tmp : -1;
|
||||
|
||||
if (mask)
|
||||
*mask = _gdk_quartz_events_get_current_event_mask ();
|
||||
*mask = _gdk_quartz_events_get_current_keyboard_modifiers () |
|
||||
_gdk_quartz_events_get_current_mouse_modifiers ();
|
||||
|
||||
return found_window;
|
||||
}
|
||||
|
||||
@@ -91,19 +91,6 @@ gdk_quartz_display_manager_lookup_keyval (GdkDisplayManager *manager,
|
||||
return _gdk_keyval_from_name (name);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_quartz_display_manager_keyval_convert_case (GdkDisplayManager *manager,
|
||||
guint symbol,
|
||||
guint *lower,
|
||||
guint *upper)
|
||||
{
|
||||
/* FIXME implement this */
|
||||
if (lower)
|
||||
*lower = symbol;
|
||||
if (upper)
|
||||
*upper = symbol;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_quartz_display_manager_init (GdkQuartzDisplayManager *manager)
|
||||
{
|
||||
@@ -144,7 +131,6 @@ gdk_quartz_display_manager_class_init (GdkQuartzDisplayManagerClass *class)
|
||||
manager_class->get_atom_name = _gdk_quartz_display_manager_get_atom_name;
|
||||
manager_class->lookup_keyval = gdk_quartz_display_manager_lookup_keyval;
|
||||
manager_class->get_keyval_name = gdk_quartz_display_manager_get_keyval_name;
|
||||
manager_class->keyval_convert_case = gdk_quartz_display_manager_keyval_convert_case;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -124,7 +124,7 @@ static NSAutoreleasePool *autorelease_pool;
|
||||
* a run loop iteration, so we need to detect that and avoid triggering
|
||||
* our "run the GLib main looop while the run loop is active machinery.
|
||||
*/
|
||||
static gboolean getting_events;
|
||||
static gint getting_events = 0;
|
||||
|
||||
/************************************************************
|
||||
********* Select Thread *********
|
||||
@@ -207,9 +207,12 @@ signal_main_thread (void)
|
||||
*/
|
||||
if (!run_loop_polling_async)
|
||||
CFRunLoopSourceSignal (select_main_thread_source);
|
||||
|
||||
if (CFRunLoopIsWaiting (main_thread_run_loop))
|
||||
CFRunLoopWakeUp (main_thread_run_loop);
|
||||
|
||||
/* Don't check for CFRunLoopIsWaiting() here because it causes a
|
||||
* race condition (the loop could go into waiting state right after
|
||||
* we checked).
|
||||
*/
|
||||
CFRunLoopWakeUp (main_thread_run_loop);
|
||||
}
|
||||
|
||||
static void *
|
||||
@@ -632,17 +635,18 @@ gdk_event_check (GSource *source)
|
||||
|
||||
GDK_THREADS_ENTER ();
|
||||
|
||||
/* Refresh the autorelease pool if we're at the base CFRunLoop level
|
||||
* (indicated by current_loop_level) and the base g_main_loop level
|
||||
* (indicated by g_main_depth()). Messing with the autorelease pool at
|
||||
* any level of nesting can cause access to deallocated memory because
|
||||
* autorelease_pool is static and releasing a pool will cause all
|
||||
* pools allocated inside of it to be released as well.
|
||||
*/
|
||||
/* Refresh the autorelease pool if we're at the base CFRunLoop level
|
||||
* (indicated by current_loop_level) and the base g_main_loop level
|
||||
* (indicated by g_main_depth()). Messing with the autorelease pool at
|
||||
* any level of nesting can cause access to deallocated memory because
|
||||
* autorelease_pool is static and releasing a pool will cause all pools
|
||||
* allocated inside of it to be released as well.
|
||||
*/
|
||||
if (current_loop_level == 0 && g_main_depth() == 0)
|
||||
{
|
||||
if (autorelease_pool)
|
||||
[autorelease_pool release];
|
||||
[autorelease_pool drain];
|
||||
|
||||
autorelease_pool = [[NSAutoreleasePool alloc] init];
|
||||
}
|
||||
|
||||
@@ -710,12 +714,12 @@ poll_func (GPollFD *ufds,
|
||||
else
|
||||
limit_date = [NSDate dateWithTimeIntervalSinceNow:timeout_/1000.0];
|
||||
|
||||
getting_events = TRUE;
|
||||
getting_events++;
|
||||
event = [NSApp nextEventMatchingMask: NSAnyEventMask
|
||||
untilDate: limit_date
|
||||
inMode: NSDefaultRunLoopMode
|
||||
dequeue: YES];
|
||||
getting_events = FALSE;
|
||||
getting_events--;
|
||||
|
||||
if (n_ready < 0)
|
||||
n_ready = select_thread_collect_poll (ufds, nfds);
|
||||
@@ -776,8 +780,6 @@ query_main_context (GMainContext *context,
|
||||
static void
|
||||
run_loop_entry (void)
|
||||
{
|
||||
current_loop_level++;
|
||||
|
||||
if (acquired_loop_level == -1)
|
||||
{
|
||||
if (g_main_context_acquire (NULL))
|
||||
@@ -926,16 +928,13 @@ run_loop_after_waiting (void)
|
||||
static void
|
||||
run_loop_exit (void)
|
||||
{
|
||||
g_return_if_fail (current_loop_level > 0);
|
||||
|
||||
if (current_loop_level == acquired_loop_level)
|
||||
/* + 1 because we decrement current_loop_level separately in observer_callback() */
|
||||
if ((current_loop_level + 1) == acquired_loop_level)
|
||||
{
|
||||
g_main_context_release (NULL);
|
||||
acquired_loop_level = -1;
|
||||
GDK_NOTE (EVENTLOOP, g_print ("EventLoop: Ended tracking run loop activity\n"));
|
||||
}
|
||||
|
||||
current_loop_level--;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -943,9 +942,22 @@ run_loop_observer_callback (CFRunLoopObserverRef observer,
|
||||
CFRunLoopActivity activity,
|
||||
void *info)
|
||||
{
|
||||
if (getting_events) /* Activity we triggered */
|
||||
switch (activity)
|
||||
{
|
||||
case kCFRunLoopEntry:
|
||||
current_loop_level++;
|
||||
break;
|
||||
case kCFRunLoopExit:
|
||||
g_return_if_fail (current_loop_level > 0);
|
||||
current_loop_level--;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (getting_events > 0) /* Activity we triggered */
|
||||
return;
|
||||
|
||||
|
||||
switch (activity)
|
||||
{
|
||||
case kCFRunLoopEntry:
|
||||
|
||||
@@ -33,12 +33,14 @@
|
||||
|
||||
#include "gdkscreen.h"
|
||||
#include "gdkkeysyms.h"
|
||||
#include "gdkquartz.h"
|
||||
#include "gdkquartzdisplay.h"
|
||||
#include "gdkprivate-quartz.h"
|
||||
#include "gdkquartzdevicemanager-core.h"
|
||||
|
||||
#define GRIP_WIDTH 15
|
||||
#define GRIP_HEIGHT 15
|
||||
#define GDK_LION_RESIZE 5
|
||||
|
||||
#define WINDOW_IS_TOPLEVEL(window) \
|
||||
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
|
||||
@@ -48,9 +50,6 @@
|
||||
/* This is the window corresponding to the key window */
|
||||
static GdkWindow *current_keyboard_window;
|
||||
|
||||
/* This is the event mask and button state from the last event */
|
||||
static GdkEventMask current_event_mask;
|
||||
static int current_button_state;
|
||||
|
||||
static void append_event (GdkEvent *event,
|
||||
gboolean windowing);
|
||||
@@ -193,6 +192,25 @@ get_mouse_button_from_ns_event (NSEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
static GdkModifierType
|
||||
get_mouse_button_modifiers_from_ns_buttons (NSUInteger nsbuttons)
|
||||
{
|
||||
GdkModifierType modifiers = 0;
|
||||
|
||||
if (nsbuttons & (1 << 0))
|
||||
modifiers |= GDK_BUTTON1_MASK;
|
||||
if (nsbuttons & (1 << 1))
|
||||
modifiers |= GDK_BUTTON3_MASK;
|
||||
if (nsbuttons & (1 << 2))
|
||||
modifiers |= GDK_BUTTON2_MASK;
|
||||
if (nsbuttons & (1 << 3))
|
||||
modifiers |= GDK_BUTTON4_MASK;
|
||||
if (nsbuttons & (1 << 4))
|
||||
modifiers |= GDK_BUTTON5_MASK;
|
||||
|
||||
return modifiers;
|
||||
}
|
||||
|
||||
static GdkModifierType
|
||||
get_mouse_button_modifiers_from_ns_event (NSEvent *event)
|
||||
{
|
||||
@@ -208,25 +226,30 @@ get_mouse_button_modifiers_from_ns_event (NSEvent *event)
|
||||
}
|
||||
|
||||
static GdkModifierType
|
||||
get_keyboard_modifiers_from_ns_event (NSEvent *nsevent)
|
||||
get_keyboard_modifiers_from_ns_flags (NSUInteger nsflags)
|
||||
{
|
||||
GdkModifierType modifiers = 0;
|
||||
int nsflags;
|
||||
|
||||
nsflags = [nsevent modifierFlags];
|
||||
|
||||
if (nsflags & NSAlphaShiftKeyMask)
|
||||
modifiers |= GDK_LOCK_MASK;
|
||||
if (nsflags & NSShiftKeyMask)
|
||||
modifiers |= GDK_SHIFT_MASK;
|
||||
if (nsflags & NSControlKeyMask)
|
||||
modifiers |= GDK_CONTROL_MASK;
|
||||
if (nsflags & NSCommandKeyMask)
|
||||
if (nsflags & NSAlternateKeyMask)
|
||||
modifiers |= GDK_MOD1_MASK;
|
||||
if (nsflags & NSCommandKeyMask)
|
||||
modifiers |= GDK_MOD2_MASK;
|
||||
|
||||
return modifiers;
|
||||
}
|
||||
|
||||
static GdkModifierType
|
||||
get_keyboard_modifiers_from_ns_event (NSEvent *nsevent)
|
||||
{
|
||||
return get_keyboard_modifiers_from_ns_flags ([nsevent modifierFlags]);
|
||||
}
|
||||
|
||||
/* Return an event mask from an NSEvent */
|
||||
static GdkEventMask
|
||||
get_event_mask_from_ns_event (NSEvent *nsevent)
|
||||
@@ -357,7 +380,8 @@ generate_motion_event (GdkWindow *window)
|
||||
event->motion.x_root = x_root;
|
||||
event->motion.y_root = y_root;
|
||||
/* FIXME event->axes */
|
||||
event->motion.state = 0;
|
||||
event->motion.state = _gdk_quartz_events_get_current_keyboard_modifiers () |
|
||||
_gdk_quartz_events_get_current_mouse_modifiers ();
|
||||
event->motion.is_hint = FALSE;
|
||||
event->motion.device = _gdk_display->core_pointer;
|
||||
|
||||
@@ -442,7 +466,8 @@ _gdk_quartz_events_send_enter_notify_event (GdkWindow *window)
|
||||
event->crossing.y_root = y_root;
|
||||
event->crossing.mode = GDK_CROSSING_NORMAL;
|
||||
event->crossing.detail = GDK_NOTIFY_ANCESTOR;
|
||||
event->crossing.state = 0;
|
||||
event->crossing.state = _gdk_quartz_events_get_current_keyboard_modifiers () |
|
||||
_gdk_quartz_events_get_current_mouse_modifiers ();
|
||||
|
||||
gdk_event_set_device (event, _gdk_display->core_pointer);
|
||||
|
||||
@@ -647,30 +672,6 @@ find_toplevel_for_mouse_event (NSEvent *nsevent,
|
||||
|
||||
toplevel_impl = (GdkWindowImplQuartz *)toplevel->impl;
|
||||
|
||||
if ([toplevel_impl->toplevel showsResizeIndicator])
|
||||
{
|
||||
NSRect frame;
|
||||
|
||||
/* If the resize indicator is visible and the event
|
||||
* is in the lower right 15x15 corner, we leave these
|
||||
* events to Cocoa as to be handled as resize events.
|
||||
* Applications may have widgets in this area. These
|
||||
* will most likely be larger than 15x15 and for
|
||||
* scroll bars there are also other means to move
|
||||
* the scroll bar. Since the resize indicator is
|
||||
* the only way of resizing windows on Mac OS, it
|
||||
* is too important to not make functional.
|
||||
*/
|
||||
frame = [toplevel_impl->view bounds];
|
||||
if (x_tmp > frame.size.width - GRIP_WIDTH
|
||||
&& x_tmp < frame.size.width
|
||||
&& y_tmp > frame.size.height - GRIP_HEIGHT
|
||||
&& y_tmp < frame.size.height)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
*x = x_tmp;
|
||||
*y = y_tmp;
|
||||
}
|
||||
@@ -770,7 +771,8 @@ fill_crossing_event (GdkWindow *toplevel,
|
||||
event->crossing.y_root = y_root;
|
||||
event->crossing.mode = mode;
|
||||
event->crossing.detail = detail;
|
||||
event->crossing.state = get_keyboard_modifiers_from_ns_event (nsevent);
|
||||
event->crossing.state = get_keyboard_modifiers_from_ns_event (nsevent) |
|
||||
_gdk_quartz_events_get_current_mouse_modifiers ();
|
||||
|
||||
gdk_event_set_device (event, _gdk_display->core_pointer);
|
||||
|
||||
@@ -788,9 +790,9 @@ fill_button_event (GdkWindow *window,
|
||||
{
|
||||
GdkEventType type;
|
||||
gint state;
|
||||
gint button;
|
||||
|
||||
state = get_keyboard_modifiers_from_ns_event (nsevent);
|
||||
state = get_keyboard_modifiers_from_ns_event (nsevent) |
|
||||
_gdk_quartz_events_get_current_mouse_modifiers ();
|
||||
|
||||
switch ([nsevent type])
|
||||
{
|
||||
@@ -798,18 +800,19 @@ fill_button_event (GdkWindow *window,
|
||||
case NSRightMouseDown:
|
||||
case NSOtherMouseDown:
|
||||
type = GDK_BUTTON_PRESS;
|
||||
state &= ~get_mouse_button_modifiers_from_ns_event (nsevent);
|
||||
break;
|
||||
|
||||
case NSLeftMouseUp:
|
||||
case NSRightMouseUp:
|
||||
case NSOtherMouseUp:
|
||||
type = GDK_BUTTON_RELEASE;
|
||||
state |= get_mouse_button_modifiers_from_ns_event (nsevent);
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
button = get_mouse_button_from_ns_event (nsevent);
|
||||
|
||||
event->any.type = type;
|
||||
event->button.window = window;
|
||||
@@ -820,7 +823,7 @@ fill_button_event (GdkWindow *window,
|
||||
event->button.y_root = y_root;
|
||||
/* FIXME event->axes */
|
||||
event->button.state = state;
|
||||
event->button.button = button;
|
||||
event->button.button = get_mouse_button_from_ns_event (nsevent);
|
||||
event->button.device = _gdk_display->core_pointer;
|
||||
}
|
||||
|
||||
@@ -833,22 +836,6 @@ fill_motion_event (GdkWindow *window,
|
||||
gint x_root,
|
||||
gint y_root)
|
||||
{
|
||||
GdkModifierType state;
|
||||
|
||||
state = get_keyboard_modifiers_from_ns_event (nsevent);
|
||||
|
||||
switch ([nsevent type])
|
||||
{
|
||||
case NSLeftMouseDragged:
|
||||
case NSRightMouseDragged:
|
||||
case NSOtherMouseDragged:
|
||||
state |= get_mouse_button_modifiers_from_ns_event (nsevent);
|
||||
break;
|
||||
|
||||
case NSMouseMoved:
|
||||
break;
|
||||
}
|
||||
|
||||
event->any.type = GDK_MOTION_NOTIFY;
|
||||
event->motion.window = window;
|
||||
event->motion.time = get_time_from_ns_event (nsevent);
|
||||
@@ -857,7 +844,8 @@ fill_motion_event (GdkWindow *window,
|
||||
event->motion.x_root = x_root;
|
||||
event->motion.y_root = y_root;
|
||||
/* FIXME event->axes */
|
||||
event->motion.state = state;
|
||||
event->motion.state = get_keyboard_modifiers_from_ns_event (nsevent) |
|
||||
_gdk_quartz_events_get_current_mouse_modifiers ();
|
||||
event->motion.is_hint = FALSE;
|
||||
event->motion.device = _gdk_display->core_pointer;
|
||||
}
|
||||
@@ -934,7 +922,7 @@ fill_key_event (GdkWindow *window,
|
||||
{
|
||||
case GDK_KEY_Meta_R:
|
||||
case GDK_KEY_Meta_L:
|
||||
mask = GDK_MOD1_MASK;
|
||||
mask = GDK_MOD2_MASK;
|
||||
break;
|
||||
case GDK_KEY_Shift_R:
|
||||
case GDK_KEY_Shift_L:
|
||||
@@ -945,7 +933,7 @@ fill_key_event (GdkWindow *window,
|
||||
break;
|
||||
case GDK_KEY_Alt_R:
|
||||
case GDK_KEY_Alt_L:
|
||||
mask = GDK_MOD5_MASK;
|
||||
mask = GDK_MOD1_MASK;
|
||||
break;
|
||||
case GDK_KEY_Control_R:
|
||||
case GDK_KEY_Control_L:
|
||||
@@ -961,7 +949,7 @@ fill_key_event (GdkWindow *window,
|
||||
event->key.state |= mask;
|
||||
}
|
||||
|
||||
event->key.state |= current_button_state;
|
||||
event->key.state |= _gdk_quartz_events_get_current_mouse_modifiers ();
|
||||
|
||||
event->key.string = NULL;
|
||||
|
||||
@@ -1058,10 +1046,99 @@ synthesize_crossing_event (GdkWindow *window,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
GdkEventMask
|
||||
_gdk_quartz_events_get_current_event_mask (void)
|
||||
GdkModifierType
|
||||
_gdk_quartz_events_get_current_keyboard_modifiers (void)
|
||||
{
|
||||
return current_event_mask;
|
||||
if (gdk_quartz_osx_version () >= GDK_OSX_SNOW_LEOPARD)
|
||||
{
|
||||
return get_keyboard_modifiers_from_ns_flags ([NSClassFromString(@"NSEvent") modifierFlags]);
|
||||
}
|
||||
else
|
||||
{
|
||||
guint carbon_modifiers = GetCurrentKeyModifiers ();
|
||||
GdkModifierType modifiers = 0;
|
||||
|
||||
if (carbon_modifiers & alphaLock)
|
||||
modifiers |= GDK_LOCK_MASK;
|
||||
if (carbon_modifiers & shiftKey)
|
||||
modifiers |= GDK_SHIFT_MASK;
|
||||
if (carbon_modifiers & controlKey)
|
||||
modifiers |= GDK_CONTROL_MASK;
|
||||
if (carbon_modifiers & optionKey)
|
||||
modifiers |= GDK_MOD1_MASK;
|
||||
if (carbon_modifiers & cmdKey)
|
||||
modifiers |= GDK_MOD2_MASK;
|
||||
|
||||
return modifiers;
|
||||
}
|
||||
}
|
||||
|
||||
GdkModifierType
|
||||
_gdk_quartz_events_get_current_mouse_modifiers (void)
|
||||
{
|
||||
if (gdk_quartz_osx_version () >= GDK_OSX_SNOW_LEOPARD)
|
||||
{
|
||||
return get_mouse_button_modifiers_from_ns_buttons ([NSClassFromString(@"NSEvent") pressedMouseButtons]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return get_mouse_button_modifiers_from_ns_buttons (GetCurrentButtonState ());
|
||||
}
|
||||
}
|
||||
|
||||
/* Detect window resizing */
|
||||
|
||||
static gboolean
|
||||
test_resize (NSEvent *event, GdkWindow *toplevel, gint x, gint y)
|
||||
{
|
||||
GdkWindowImplQuartz *toplevel_impl;
|
||||
gboolean lion;
|
||||
/* Resizing only begins if an NSLeftMouseButton event is received in
|
||||
* the resizing area. Handle anything else.
|
||||
*/
|
||||
if ([event type] != NSLeftMouseDown)
|
||||
return FALSE;
|
||||
|
||||
toplevel_impl = (GdkWindowImplQuartz *)toplevel->impl;
|
||||
if ([toplevel_impl->toplevel showsResizeIndicator])
|
||||
{
|
||||
NSRect frame;
|
||||
|
||||
/* If the resize indicator is visible and the event
|
||||
* is in the lower right 15x15 corner, we leave these
|
||||
* events to Cocoa as to be handled as resize events.
|
||||
* Applications may have widgets in this area. These
|
||||
* will most likely be larger than 15x15 and for
|
||||
* scroll bars there are also other means to move
|
||||
* the scroll bar. Since the resize indicator is
|
||||
* the only way of resizing windows on Mac OS, it
|
||||
* is too important to not make functional.
|
||||
*/
|
||||
frame = [toplevel_impl->view bounds];
|
||||
if (x > frame.size.width - GRIP_WIDTH
|
||||
&& x < frame.size.width
|
||||
&& y > frame.size.height - GRIP_HEIGHT
|
||||
&& y < frame.size.height)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
/* If we're on Lion and within 5 pixels of an edge,
|
||||
* then assume that the user wants to resize, and
|
||||
* return NULL to let Quartz get on with it. We check
|
||||
* the selector isRestorable to see if we're on 10.7.
|
||||
* This extra check is in case the user starts
|
||||
* dragging before GDK recognizes the grab.
|
||||
*/
|
||||
|
||||
lion = gdk_quartz_osx_version() >= GDK_OSX_LION;
|
||||
if (lion && (x < GDK_LION_RESIZE ||
|
||||
x > toplevel->width - GDK_LION_RESIZE ||
|
||||
y > toplevel->height - GDK_LION_RESIZE))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -1093,25 +1170,6 @@ gdk_event_translate (GdkEvent *event,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Keep track of button state, since we don't get that information
|
||||
* for key events.
|
||||
*/
|
||||
switch (event_type)
|
||||
{
|
||||
case NSLeftMouseDown:
|
||||
case NSRightMouseDown:
|
||||
case NSOtherMouseDown:
|
||||
current_button_state |= get_mouse_button_modifiers_from_ns_event (nsevent);
|
||||
break;
|
||||
case NSLeftMouseUp:
|
||||
case NSRightMouseUp:
|
||||
case NSOtherMouseUp:
|
||||
current_button_state &= ~get_mouse_button_modifiers_from_ns_event (nsevent);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (_gdk_default_filters)
|
||||
{
|
||||
/* Apply global filters */
|
||||
@@ -1147,6 +1205,9 @@ gdk_event_translate (GdkEvent *event,
|
||||
window = find_window_for_ns_event (nsevent, &x, &y, &x_root, &y_root);
|
||||
if (!window)
|
||||
return FALSE;
|
||||
/* Quartz handles resizing on its own, so we want to stay out of the way. */
|
||||
if (test_resize(nsevent, window, x, y))
|
||||
return FALSE;
|
||||
|
||||
/* Apply any window filters. */
|
||||
if (GDK_IS_WINDOW (window))
|
||||
@@ -1196,8 +1257,6 @@ gdk_event_translate (GdkEvent *event,
|
||||
}
|
||||
}
|
||||
|
||||
current_event_mask = get_event_mask_from_ns_event (nsevent);
|
||||
|
||||
return_val = TRUE;
|
||||
|
||||
switch (event_type)
|
||||
|
||||
@@ -21,7 +21,24 @@
|
||||
#include "config.h"
|
||||
#include "gdktypes.h"
|
||||
#include "gdkprivate.h"
|
||||
#include "gdkquartz.h"
|
||||
|
||||
GdkDisplay *_gdk_display = NULL;
|
||||
GdkScreen *_gdk_screen = NULL;
|
||||
GdkWindow *_gdk_root = NULL;
|
||||
|
||||
GdkOSXVersion
|
||||
gdk_quartz_osx_version (void)
|
||||
{
|
||||
gint minor;
|
||||
OSErr err = Gestalt(gestaltSystemVersionMinor, &minor);
|
||||
g_return_val_if_fail(err == noErr, GDK_OSX_UNSUPPORTED);
|
||||
|
||||
if (minor < GDK_OSX_MIN)
|
||||
return GDK_OSX_UNSUPPORTED;
|
||||
else if (minor > GDK_OSX_CURRENT)
|
||||
return GDK_OSX_NEW;
|
||||
else
|
||||
return minor;
|
||||
|
||||
}
|
||||
|
||||
@@ -205,7 +205,60 @@ const static struct {
|
||||
{ 0x001d, GDK_KEY_Right },
|
||||
{ 0x001e, GDK_KEY_Up },
|
||||
{ 0x001f, GDK_KEY_Down },
|
||||
{ 0x007f, GDK_KEY_Delete }
|
||||
{ 0x007f, GDK_KEY_Delete },
|
||||
{ 0xf027, GDK_KEY_dead_acute },
|
||||
{ 0xf060, GDK_KEY_dead_grave },
|
||||
{ 0xf300, GDK_KEY_dead_grave },
|
||||
{ 0xf0b4, GDK_KEY_dead_acute },
|
||||
{ 0xf301, GDK_KEY_dead_acute },
|
||||
{ 0xf385, GDK_KEY_dead_acute },
|
||||
{ 0xf05e, GDK_KEY_dead_circumflex },
|
||||
{ 0xf2c6, GDK_KEY_dead_circumflex },
|
||||
{ 0xf302, GDK_KEY_dead_circumflex },
|
||||
{ 0xf07e, GDK_KEY_dead_tilde },
|
||||
{ 0xf303, GDK_KEY_dead_tilde },
|
||||
{ 0xf342, GDK_KEY_dead_perispomeni },
|
||||
{ 0xf0af, GDK_KEY_dead_macron },
|
||||
{ 0xf304, GDK_KEY_dead_macron },
|
||||
{ 0xf2d8, GDK_KEY_dead_breve },
|
||||
{ 0xf306, GDK_KEY_dead_breve },
|
||||
{ 0xf2d9, GDK_KEY_dead_abovedot },
|
||||
{ 0xf307, GDK_KEY_dead_abovedot },
|
||||
{ 0xf0a8, GDK_KEY_dead_diaeresis },
|
||||
{ 0xf308, GDK_KEY_dead_diaeresis },
|
||||
{ 0xf2da, GDK_KEY_dead_abovering },
|
||||
{ 0xf30A, GDK_KEY_dead_abovering },
|
||||
{ 0xf022, GDK_KEY_dead_doubleacute },
|
||||
{ 0xf2dd, GDK_KEY_dead_doubleacute },
|
||||
{ 0xf30B, GDK_KEY_dead_doubleacute },
|
||||
{ 0xf2c7, GDK_KEY_dead_caron },
|
||||
{ 0xf30C, GDK_KEY_dead_caron },
|
||||
{ 0xf0be, GDK_KEY_dead_cedilla },
|
||||
{ 0xf327, GDK_KEY_dead_cedilla },
|
||||
{ 0xf2db, GDK_KEY_dead_ogonek },
|
||||
{ 0xf328, GDK_KEY_dead_ogonek },
|
||||
{ 0xfe5d, GDK_KEY_dead_iota },
|
||||
{ 0xf323, GDK_KEY_dead_belowdot },
|
||||
{ 0xf309, GDK_KEY_dead_hook },
|
||||
{ 0xf31B, GDK_KEY_dead_horn },
|
||||
{ 0xf02d, GDK_KEY_dead_stroke },
|
||||
{ 0xf335, GDK_KEY_dead_stroke },
|
||||
{ 0xf336, GDK_KEY_dead_stroke },
|
||||
{ 0xf313, GDK_KEY_dead_abovecomma },
|
||||
/* { 0xf313, GDK_KEY_dead_psili }, */
|
||||
{ 0xf314, GDK_KEY_dead_abovereversedcomma },
|
||||
/* { 0xf314, GDK_KEY_dead_dasia }, */
|
||||
{ 0xf30F, GDK_KEY_dead_doublegrave },
|
||||
{ 0xf325, GDK_KEY_dead_belowring },
|
||||
{ 0xf2cd, GDK_KEY_dead_belowmacron },
|
||||
{ 0xf331, GDK_KEY_dead_belowmacron },
|
||||
{ 0xf32D, GDK_KEY_dead_belowcircumflex },
|
||||
{ 0xf330, GDK_KEY_dead_belowtilde },
|
||||
{ 0xf32E, GDK_KEY_dead_belowbreve },
|
||||
{ 0xf324, GDK_KEY_dead_belowdiaeresis },
|
||||
{ 0xf311, GDK_KEY_dead_invertedbreve },
|
||||
{ 0xf02c, GDK_KEY_dead_belowcomma },
|
||||
{ 0xf326, GDK_KEY_dead_belowcomma }
|
||||
};
|
||||
|
||||
static void
|
||||
@@ -306,18 +359,10 @@ maybe_update_keymap (void)
|
||||
p[j] = GDK_KEY_ISO_Left_Tab;
|
||||
|
||||
if (!found)
|
||||
{
|
||||
guint tmp;
|
||||
|
||||
tmp = gdk_unicode_to_keyval (uc);
|
||||
if (tmp != (uc | 0x01000000))
|
||||
p[j] = tmp;
|
||||
else
|
||||
p[j] = 0;
|
||||
}
|
||||
p[j] = gdk_unicode_to_keyval (uc);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (p[3] == p[2])
|
||||
p[3] = 0;
|
||||
if (p[2] == p[1])
|
||||
@@ -353,10 +398,10 @@ maybe_update_keymap (void)
|
||||
UniChar uc;
|
||||
|
||||
key_code = modifiers[j] | i;
|
||||
err = UCKeyTranslate (chr_data, i, kUCKeyActionDown,
|
||||
err = UCKeyTranslate (chr_data, i, kUCKeyActionDisplay,
|
||||
(modifiers[j] >> 8) & 0xFF,
|
||||
LMGetKbdType(),
|
||||
kUCKeyTranslateNoDeadKeysMask,
|
||||
0,
|
||||
&state, 4, &nChars, chars);
|
||||
|
||||
|
||||
@@ -368,8 +413,22 @@ maybe_update_keymap (void)
|
||||
{
|
||||
int k;
|
||||
gboolean found = FALSE;
|
||||
|
||||
uc = chars[0];
|
||||
|
||||
/* A few <Shift><Option>keys return two
|
||||
* characters, the first of which is U+00a0,
|
||||
* which isn't interesting; so we return the
|
||||
* second. More sophisticated handling is the
|
||||
* job of a GtkIMContext.
|
||||
*
|
||||
* If state isn't zero, it means that it's a
|
||||
* dead key of some sort. Some of those are
|
||||
* enumerated in the special_ucs_table with the
|
||||
* high nibble set to f to push it into the
|
||||
* private use range. Here we do the same.
|
||||
*/
|
||||
if (state != 0)
|
||||
chars[nChars - 1] |= 0xf000;
|
||||
uc = chars[nChars - 1];
|
||||
|
||||
for (k = 0; k < G_N_ELEMENTS (special_ucs_table); k++)
|
||||
{
|
||||
@@ -386,20 +445,12 @@ maybe_update_keymap (void)
|
||||
*/
|
||||
if (found && p[j] == GDK_KEY_Tab && modifiers[j] == shiftKey)
|
||||
p[j] = GDK_KEY_ISO_Left_Tab;
|
||||
|
||||
|
||||
if (!found)
|
||||
{
|
||||
guint tmp;
|
||||
|
||||
tmp = gdk_unicode_to_keyval (uc);
|
||||
if (tmp != (uc | 0x01000000))
|
||||
p[j] = tmp;
|
||||
else
|
||||
p[j] = 0;
|
||||
}
|
||||
p[j] = gdk_unicode_to_keyval (uc);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (p[3] == p[2])
|
||||
p[3] = 0;
|
||||
if (p[2] == p[1])
|
||||
@@ -494,8 +545,8 @@ gdk_quartz_keymap_get_entries_for_keyval (GdkKeymap *keymap,
|
||||
(*n_keys)++;
|
||||
|
||||
key.keycode = i / KEYVALS_PER_KEYCODE;
|
||||
key.group = 0;
|
||||
key.level = i % KEYVALS_PER_KEYCODE;
|
||||
key.group = (i % KEYVALS_PER_KEYCODE) >= 2;
|
||||
key.level = i % 2;
|
||||
|
||||
g_array_append_val (keys_array, key);
|
||||
}
|
||||
@@ -550,7 +601,7 @@ gdk_quartz_keymap_get_entries_for_keycode (GdkKeymap *keymap,
|
||||
GdkKeymapKey key;
|
||||
|
||||
key.keycode = hardware_keycode;
|
||||
key.group = i / 2;
|
||||
key.group = i >= 2;
|
||||
key.level = i % 2;
|
||||
|
||||
g_array_append_val (keys_array, key);
|
||||
@@ -606,6 +657,11 @@ translate_keysym (guint hardware_keycode,
|
||||
tmp_keyval = upper;
|
||||
}
|
||||
|
||||
if (effective_group)
|
||||
*effective_group = group;
|
||||
if (effective_level)
|
||||
*effective_level = level;
|
||||
|
||||
return tmp_keyval;
|
||||
}
|
||||
|
||||
@@ -636,12 +692,18 @@ gdk_quartz_keymap_translate_keyboard_state (GdkKeymap *keymap,
|
||||
|
||||
if (hardware_keycode < 0 || hardware_keycode >= NUM_KEYCODES)
|
||||
return FALSE;
|
||||
|
||||
/* Check if shift or capslock modify the keyval */
|
||||
for (bit = GDK_SHIFT_MASK; bit < GDK_CONTROL_MASK; bit <<= 1)
|
||||
|
||||
/* Check if modifiers modify the keyval */
|
||||
for (bit = GDK_SHIFT_MASK; bit < GDK_BUTTON1_MASK; bit <<= 1)
|
||||
{
|
||||
if (translate_keysym (hardware_keycode, group, state & ~bit, NULL, NULL) !=
|
||||
translate_keysym (hardware_keycode, group, state | bit, NULL, NULL))
|
||||
if (translate_keysym (hardware_keycode,
|
||||
(bit == GDK_MOD1_MASK) ? 0 : group,
|
||||
state & ~bit,
|
||||
NULL, NULL) !=
|
||||
translate_keysym (hardware_keycode,
|
||||
(bit == GDK_MOD1_MASK) ? 1 : group,
|
||||
state | bit,
|
||||
NULL, NULL))
|
||||
tmp_modifiers |= bit;
|
||||
}
|
||||
|
||||
@@ -660,14 +722,17 @@ static void
|
||||
gdk_quartz_keymap_add_virtual_modifiers (GdkKeymap *keymap,
|
||||
GdkModifierType *state)
|
||||
{
|
||||
/* FIXME: For now, we've mimiced the Windows backend. */
|
||||
if (*state & GDK_MOD2_MASK)
|
||||
*state |= GDK_META_MASK;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_quartz_keymap_map_virtual_modifiers (GdkKeymap *keymap,
|
||||
GdkModifierType *state)
|
||||
{
|
||||
/* FIXME: For now, we've mimiced the Windows backend. */
|
||||
if (*state & GDK_META_MASK)
|
||||
*state |= GDK_MOD2_MASK;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +62,9 @@ typedef enum {
|
||||
void _gdk_quartz_events_update_focus_window (GdkWindow *new_window,
|
||||
gboolean got_focus);
|
||||
void _gdk_quartz_events_send_map_event (GdkWindow *window);
|
||||
GdkEventMask _gdk_quartz_events_get_current_event_mask (void);
|
||||
|
||||
GdkModifierType _gdk_quartz_events_get_current_keyboard_modifiers (void);
|
||||
GdkModifierType _gdk_quartz_events_get_current_mouse_modifiers (void);
|
||||
|
||||
void _gdk_quartz_events_send_enter_notify_event (GdkWindow *window);
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
/* gdkquartz.h
|
||||
*
|
||||
* Copyright (C) 2005-2007 Imendio AB
|
||||
@@ -41,6 +42,20 @@ typedef unsigned int NSUInteger;
|
||||
typedef float CGFloat;
|
||||
#endif
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GDK_OSX_UNSUPPORTED = 0,
|
||||
GDK_OSX_MIN = 4,
|
||||
GDK_OSX_TIGER = 4,
|
||||
GDK_OSX_LEOPARD = 5,
|
||||
GDK_OSX_SNOW_LEOPARD = 6,
|
||||
GDK_OSX_LION = 7,
|
||||
GDK_OSX_CURRENT = 7,
|
||||
GDK_OSX_NEW = 99
|
||||
} GdkOSXVersion;
|
||||
|
||||
GdkOSXVersion gdk_quartz_osx_version (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#define __GDKQUARTZ_H_INSIDE__
|
||||
|
||||
@@ -1836,7 +1836,8 @@ gdk_window_quartz_get_device_state_helper (GdkWindow *window,
|
||||
|
||||
toplevel = gdk_window_get_toplevel (window);
|
||||
|
||||
*mask = _gdk_quartz_events_get_current_event_mask ();
|
||||
*mask = _gdk_quartz_events_get_current_keyboard_modifiers () |
|
||||
_gdk_quartz_events_get_current_mouse_modifiers ();
|
||||
|
||||
/* Get the y coordinate, needs to be flipped. */
|
||||
if (window == _gdk_root)
|
||||
@@ -2529,9 +2530,17 @@ gdk_quartz_window_get_frame_extents (GdkWindow *window,
|
||||
rect->height = ns_rect.size.height;
|
||||
}
|
||||
|
||||
/* Fake protocol to make gcc think that it's OK to call setStyleMask
|
||||
even if it isn't. We check to make sure before actually calling
|
||||
it. */
|
||||
|
||||
@protocol CanSetStyleMask
|
||||
- (void)setStyleMask:(int)mask;
|
||||
@end
|
||||
|
||||
static void
|
||||
gdk_quartz_window_set_decorations (GdkWindow *window,
|
||||
GdkWMDecoration decorations)
|
||||
GdkWMDecoration decorations)
|
||||
{
|
||||
GdkWindowImplQuartz *impl;
|
||||
NSUInteger old_mask, new_mask;
|
||||
@@ -2559,10 +2568,6 @@ gdk_quartz_window_set_decorations (GdkWindow *window,
|
||||
|
||||
old_mask = [impl->toplevel styleMask];
|
||||
|
||||
/* Note, there doesn't seem to be a way to change this without
|
||||
* recreating the toplevel. There might be bad side-effects of doing
|
||||
* that, but it seems alright.
|
||||
*/
|
||||
if (old_mask != new_mask)
|
||||
{
|
||||
NSRect rect;
|
||||
@@ -2586,15 +2591,26 @@ gdk_quartz_window_set_decorations (GdkWindow *window,
|
||||
rect = [NSWindow contentRectForFrameRect:rect styleMask:old_mask];
|
||||
}
|
||||
|
||||
impl->toplevel = [impl->toplevel initWithContentRect:rect
|
||||
styleMask:new_mask
|
||||
backing:NSBackingStoreBuffered
|
||||
defer:NO];
|
||||
/* Note, before OS 10.6 there doesn't seem to be a way to change this without
|
||||
* recreating the toplevel. There might be bad side-effects of doing
|
||||
* that, but it seems alright.
|
||||
*/
|
||||
if ([impl->toplevel respondsToSelector:@selector(setStyleMask:)])
|
||||
{
|
||||
[(id<CanSetStyleMask>)impl->toplevel setStyleMask:new_mask];
|
||||
}
|
||||
else
|
||||
{
|
||||
[impl->toplevel release];
|
||||
impl->toplevel = [[GdkQuartzNSWindow alloc] initWithContentRect:rect
|
||||
styleMask:new_mask
|
||||
backing:NSBackingStoreBuffered
|
||||
defer:NO];
|
||||
[impl->toplevel setHasShadow: window_type_hint_to_shadow (impl->type_hint)];
|
||||
[impl->toplevel setLevel: window_type_hint_to_level (impl->type_hint)];
|
||||
[impl->toplevel setContentView:old_view];
|
||||
}
|
||||
|
||||
[impl->toplevel setHasShadow: window_type_hint_to_shadow (impl->type_hint)];
|
||||
[impl->toplevel setLevel: window_type_hint_to_level (impl->type_hint)];
|
||||
|
||||
[impl->toplevel setContentView:old_view];
|
||||
[impl->toplevel setFrame:rect display:YES];
|
||||
|
||||
/* Invalidate the window shadow for non-opaque views that have shadow
|
||||
|
||||
@@ -138,132 +138,6 @@ gdk_wayland_display_manager_get_keyval_name (GdkDisplayManager *manager,
|
||||
return buf;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_wayland_display_manager_keyval_convert_case (GdkDisplayManager *manager,
|
||||
guint symbol,
|
||||
guint *lower,
|
||||
guint *upper)
|
||||
{
|
||||
guint xlower = symbol;
|
||||
guint xupper = symbol;
|
||||
|
||||
/* Check for directly encoded 24-bit UCS characters: */
|
||||
if ((symbol & 0xff000000) == 0x01000000)
|
||||
{
|
||||
if (lower)
|
||||
*lower = gdk_unicode_to_keyval (g_unichar_tolower (symbol & 0x00ffffff));
|
||||
if (upper)
|
||||
*upper = gdk_unicode_to_keyval (g_unichar_toupper (symbol & 0x00ffffff));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (symbol >> 8)
|
||||
{
|
||||
case 0: /* Latin 1 */
|
||||
if ((symbol >= GDK_KEY_A) && (symbol <= GDK_KEY_Z))
|
||||
xlower += (GDK_KEY_a - GDK_KEY_A);
|
||||
else if ((symbol >= GDK_KEY_a) && (symbol <= GDK_KEY_z))
|
||||
xupper -= (GDK_KEY_a - GDK_KEY_A);
|
||||
else if ((symbol >= GDK_KEY_Agrave) && (symbol <= GDK_KEY_Odiaeresis))
|
||||
xlower += (GDK_KEY_agrave - GDK_KEY_Agrave);
|
||||
else if ((symbol >= GDK_KEY_agrave) && (symbol <= GDK_KEY_odiaeresis))
|
||||
xupper -= (GDK_KEY_agrave - GDK_KEY_Agrave);
|
||||
else if ((symbol >= GDK_KEY_Ooblique) && (symbol <= GDK_KEY_Thorn))
|
||||
xlower += (GDK_KEY_oslash - GDK_KEY_Ooblique);
|
||||
else if ((symbol >= GDK_KEY_oslash) && (symbol <= GDK_KEY_thorn))
|
||||
xupper -= (GDK_KEY_oslash - GDK_KEY_Ooblique);
|
||||
break;
|
||||
|
||||
case 1: /* Latin 2 */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol == GDK_KEY_Aogonek)
|
||||
xlower = GDK_KEY_aogonek;
|
||||
else if (symbol >= GDK_KEY_Lstroke && symbol <= GDK_KEY_Sacute)
|
||||
xlower += (GDK_KEY_lstroke - GDK_KEY_Lstroke);
|
||||
else if (symbol >= GDK_KEY_Scaron && symbol <= GDK_KEY_Zacute)
|
||||
xlower += (GDK_KEY_scaron - GDK_KEY_Scaron);
|
||||
else if (symbol >= GDK_KEY_Zcaron && symbol <= GDK_KEY_Zabovedot)
|
||||
xlower += (GDK_KEY_zcaron - GDK_KEY_Zcaron);
|
||||
else if (symbol == GDK_KEY_aogonek)
|
||||
xupper = GDK_KEY_Aogonek;
|
||||
else if (symbol >= GDK_KEY_lstroke && symbol <= GDK_KEY_sacute)
|
||||
xupper -= (GDK_KEY_lstroke - GDK_KEY_Lstroke);
|
||||
else if (symbol >= GDK_KEY_scaron && symbol <= GDK_KEY_zacute)
|
||||
xupper -= (GDK_KEY_scaron - GDK_KEY_Scaron);
|
||||
else if (symbol >= GDK_KEY_zcaron && symbol <= GDK_KEY_zabovedot)
|
||||
xupper -= (GDK_KEY_zcaron - GDK_KEY_Zcaron);
|
||||
else if (symbol >= GDK_KEY_Racute && symbol <= GDK_KEY_Tcedilla)
|
||||
xlower += (GDK_KEY_racute - GDK_KEY_Racute);
|
||||
else if (symbol >= GDK_KEY_racute && symbol <= GDK_KEY_tcedilla)
|
||||
xupper -= (GDK_KEY_racute - GDK_KEY_Racute);
|
||||
break;
|
||||
|
||||
case 2: /* Latin 3 */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Hstroke && symbol <= GDK_KEY_Hcircumflex)
|
||||
xlower += (GDK_KEY_hstroke - GDK_KEY_Hstroke);
|
||||
else if (symbol >= GDK_KEY_Gbreve && symbol <= GDK_KEY_Jcircumflex)
|
||||
xlower += (GDK_KEY_gbreve - GDK_KEY_Gbreve);
|
||||
else if (symbol >= GDK_KEY_hstroke && symbol <= GDK_KEY_hcircumflex)
|
||||
xupper -= (GDK_KEY_hstroke - GDK_KEY_Hstroke);
|
||||
else if (symbol >= GDK_KEY_gbreve && symbol <= GDK_KEY_jcircumflex)
|
||||
xupper -= (GDK_KEY_gbreve - GDK_KEY_Gbreve);
|
||||
else if (symbol >= GDK_KEY_Cabovedot && symbol <= GDK_KEY_Scircumflex)
|
||||
xlower += (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
|
||||
else if (symbol >= GDK_KEY_cabovedot && symbol <= GDK_KEY_scircumflex)
|
||||
xupper -= (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
|
||||
break;
|
||||
|
||||
case 3: /* Latin 4 */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Rcedilla && symbol <= GDK_KEY_Tslash)
|
||||
xlower += (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
|
||||
else if (symbol >= GDK_KEY_rcedilla && symbol <= GDK_KEY_tslash)
|
||||
xupper -= (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
|
||||
else if (symbol == GDK_KEY_ENG)
|
||||
xlower = GDK_KEY_eng;
|
||||
else if (symbol == GDK_KEY_eng)
|
||||
xupper = GDK_KEY_ENG;
|
||||
else if (symbol >= GDK_KEY_Amacron && symbol <= GDK_KEY_Umacron)
|
||||
xlower += (GDK_KEY_amacron - GDK_KEY_Amacron);
|
||||
else if (symbol >= GDK_KEY_amacron && symbol <= GDK_KEY_umacron)
|
||||
xupper -= (GDK_KEY_amacron - GDK_KEY_Amacron);
|
||||
break;
|
||||
|
||||
case 6: /* Cyrillic */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Serbian_DJE && symbol <= GDK_KEY_Serbian_DZE)
|
||||
xlower -= (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
|
||||
else if (symbol >= GDK_KEY_Serbian_dje && symbol <= GDK_KEY_Serbian_dze)
|
||||
xupper += (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
|
||||
else if (symbol >= GDK_KEY_Cyrillic_YU && symbol <= GDK_KEY_Cyrillic_HARDSIGN)
|
||||
xlower -= (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
|
||||
else if (symbol >= GDK_KEY_Cyrillic_yu && symbol <= GDK_KEY_Cyrillic_hardsign)
|
||||
xupper += (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
|
||||
break;
|
||||
|
||||
case 7: /* Greek */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Greek_ALPHAaccent && symbol <= GDK_KEY_Greek_OMEGAaccent)
|
||||
xlower += (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
|
||||
else if (symbol >= GDK_KEY_Greek_alphaaccent && symbol <= GDK_KEY_Greek_omegaaccent &&
|
||||
symbol != GDK_KEY_Greek_iotaaccentdieresis &&
|
||||
symbol != GDK_KEY_Greek_upsilonaccentdieresis)
|
||||
xupper -= (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
|
||||
else if (symbol >= GDK_KEY_Greek_ALPHA && symbol <= GDK_KEY_Greek_OMEGA)
|
||||
xlower += (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
|
||||
else if (symbol >= GDK_KEY_Greek_alpha && symbol <= GDK_KEY_Greek_omega &&
|
||||
symbol != GDK_KEY_Greek_finalsmallsigma)
|
||||
xupper -= (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
|
||||
break;
|
||||
}
|
||||
|
||||
if (lower)
|
||||
*lower = xlower;
|
||||
if (upper)
|
||||
*upper = xupper;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_wayland_display_manager_class_init (GdkWaylandDisplayManagerClass *class)
|
||||
{
|
||||
@@ -280,7 +154,6 @@ gdk_wayland_display_manager_class_init (GdkWaylandDisplayManagerClass *class)
|
||||
manager_class->get_atom_name = gdk_wayland_display_manager_get_atom_name;
|
||||
manager_class->lookup_keyval = gdk_wayland_display_manager_lookup_keyval;
|
||||
manager_class->get_keyval_name = gdk_wayland_display_manager_get_keyval_name;
|
||||
manager_class->keyval_convert_case = gdk_wayland_display_manager_keyval_convert_case;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -400,9 +400,11 @@ gdk_wayland_create_cairo_surface (GdkDisplayWayland *display,
|
||||
display->create_image(display->egl_display, NULL, EGL_NATIVE_PIXMAP_KHR,
|
||||
(EGLClientBuffer) data->pixmap, NULL);
|
||||
|
||||
cairo_device_acquire(display->cairo_device);
|
||||
glGenTextures(1, &data->texture);
|
||||
glBindTexture(GL_TEXTURE_2D, data->texture);
|
||||
display->image_target_texture_2d(GL_TEXTURE_2D, data->image);
|
||||
cairo_device_release(display->cairo_device);
|
||||
|
||||
surface = cairo_gl_surface_create_for_texture(display->cairo_device,
|
||||
CAIRO_CONTENT_COLOR_ALPHA,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
libgdkincludedir = $(includedir)/gtk-3.0/gdk
|
||||
libgdkwin32includedir = $(includedir)/gtk-3.0/gdk/win32
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DG_LOG_DOMAIN=\"Gdk\" \
|
||||
@@ -65,4 +66,13 @@ libgdk_win32_la_SOURCES = \
|
||||
libgdkinclude_HEADERS = \
|
||||
gdkwin32.h
|
||||
|
||||
libgdkwin32include_HEADERS = \
|
||||
gdkwin32cursor.h \
|
||||
gdkwin32display.h \
|
||||
gdkwin32displaymanager.h\
|
||||
gdkwin32dnd.h \
|
||||
gdkwin32keys.h \
|
||||
gdkwin32screen.h \
|
||||
gdkwin32window.h
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
|
||||
@@ -82,19 +82,6 @@ gdk_win32_display_manager_lookup_keyval (GdkDisplayManager *manager,
|
||||
return _gdk_keyval_from_name (name);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_win32_display_manager_keyval_convert_case (GdkDisplayManager *manager,
|
||||
guint symbol,
|
||||
guint *lower,
|
||||
guint *upper)
|
||||
{
|
||||
/* FIXME implement this */
|
||||
if (lower)
|
||||
*lower = symbol;
|
||||
if (upper)
|
||||
*upper = symbol;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_win32_display_manager_init (GdkWin32DisplayManager *manager)
|
||||
{
|
||||
@@ -131,5 +118,4 @@ gdk_win32_display_manager_class_init (GdkWin32DisplayManagerClass *class)
|
||||
manager_class->get_atom_name = _gdk_win32_display_manager_get_atom_name;
|
||||
manager_class->lookup_keyval = gdk_win32_display_manager_lookup_keyval;
|
||||
manager_class->get_keyval_name = gdk_win32_display_manager_get_keyval_name;
|
||||
manager_class->keyval_convert_case = gdk_win32_display_manager_keyval_convert_case;
|
||||
}
|
||||
|
||||
@@ -328,13 +328,15 @@ gdk_x11_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
|
||||
if (icon == NULL)
|
||||
{
|
||||
icon = g_app_info_get_icon (info);
|
||||
g_object_ref (icon);
|
||||
if (icon != NULL)
|
||||
g_object_ref (icon);
|
||||
}
|
||||
|
||||
if (icon)
|
||||
icon_name = gicon_to_string (icon);
|
||||
|
||||
g_object_unref (icon);
|
||||
if (icon != NULL)
|
||||
{
|
||||
icon_name = gicon_to_string (icon);
|
||||
g_object_unref (icon);
|
||||
}
|
||||
}
|
||||
|
||||
binary_name = g_app_info_get_executable (info);
|
||||
|
||||
@@ -285,12 +285,12 @@ _gdk_x11_display_get_cursor_for_type (GdkDisplay *display,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_cursor_get_xdisplay: (skip)
|
||||
* @cursor: a #GdkCursor.
|
||||
* gdk_x11_cursor_get_xdisplay:
|
||||
* @cursor: (type GdkX11Cursor): a #GdkCursor.
|
||||
*
|
||||
* Returns the display of a #GdkCursor.
|
||||
*
|
||||
* Return value: an Xlib <type>Display*</type>.
|
||||
* Return value: (transfer none): an Xlib <type>Display*</type>.
|
||||
**/
|
||||
Display *
|
||||
gdk_x11_cursor_get_xdisplay (GdkCursor *cursor)
|
||||
@@ -301,8 +301,8 @@ gdk_x11_cursor_get_xdisplay (GdkCursor *cursor)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_cursor_get_xcursor: (skip)
|
||||
* @cursor: a #GdkCursor.
|
||||
* gdk_x11_cursor_get_xcursor:
|
||||
* @cursor: (type GdkX11Cursor): a #GdkCursor.
|
||||
*
|
||||
* Returns the X cursor belonging to a #GdkCursor.
|
||||
*
|
||||
@@ -435,7 +435,7 @@ update_cursor (gpointer data,
|
||||
|
||||
/**
|
||||
* gdk_x11_display_set_cursor_theme:
|
||||
* @display: a #GdkDisplay
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
* @theme: the name of the cursor theme to use, or %NULL to unset
|
||||
* a previously set value
|
||||
* @size: the cursor size to use, or 0 to keep the previous size
|
||||
|
||||
@@ -192,10 +192,12 @@ gdk_x11_device_xi2_get_state (GdkDevice *device,
|
||||
|
||||
display = gdk_device_get_display (device);
|
||||
|
||||
gdk_x11_display_error_trap_push (display);
|
||||
info = XIQueryDevice (GDK_DISPLAY_XDISPLAY (display),
|
||||
device_xi2->device_id, &ndevices);
|
||||
gdk_x11_display_error_trap_pop_ignored (display);
|
||||
|
||||
for (i = 0, j = 0; i < info->num_classes; i++)
|
||||
for (i = 0, j = 0; info && i < info->num_classes; i++)
|
||||
{
|
||||
XIAnyClassInfo *class_info = info->classes[i];
|
||||
GdkAxisUse use;
|
||||
@@ -234,7 +236,8 @@ gdk_x11_device_xi2_get_state (GdkDevice *device,
|
||||
j++;
|
||||
}
|
||||
|
||||
XIFreeDeviceInfo (info);
|
||||
if (info)
|
||||
XIFreeDeviceInfo (info);
|
||||
}
|
||||
|
||||
if (mask)
|
||||
|
||||
@@ -417,6 +417,10 @@ gdk_x11_device_manager_xi2_constructed (GObject *object)
|
||||
for (i = 0; i < ndevices; i++)
|
||||
{
|
||||
dev = &info[i];
|
||||
|
||||
if (!dev->enabled)
|
||||
continue;
|
||||
|
||||
add_device (device_manager, dev, FALSE);
|
||||
|
||||
if (dev->use == XIMasterPointer ||
|
||||
@@ -582,9 +586,14 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
|
||||
{
|
||||
if (ev->info[i].flags & XIDeviceEnabled)
|
||||
{
|
||||
gdk_x11_display_error_trap_push (display);
|
||||
info = XIQueryDevice (xdisplay, ev->info[i].deviceid, &ndevices);
|
||||
add_device (device_manager, &info[0], TRUE);
|
||||
XIFreeDeviceInfo (info);
|
||||
gdk_x11_display_error_trap_pop_ignored (display);
|
||||
if (info)
|
||||
{
|
||||
add_device (device_manager, &info[0], TRUE);
|
||||
XIFreeDeviceInfo (info);
|
||||
}
|
||||
}
|
||||
else if (ev->info[i].flags & XIDeviceDisabled)
|
||||
remove_device (device_manager, ev->info[i].deviceid);
|
||||
@@ -596,6 +605,9 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
|
||||
slave = g_hash_table_lookup (device_manager->id_table,
|
||||
GINT_TO_POINTER (ev->info[i].deviceid));
|
||||
|
||||
if (!slave)
|
||||
continue;
|
||||
|
||||
/* Remove old master info */
|
||||
master = gdk_device_get_associated_device (slave);
|
||||
|
||||
@@ -610,15 +622,23 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
|
||||
/* Add new master if it's an attachment event */
|
||||
if (ev->info[i].flags & XISlaveAttached)
|
||||
{
|
||||
gdk_x11_display_error_trap_push (display);
|
||||
info = XIQueryDevice (xdisplay, ev->info[i].deviceid, &ndevices);
|
||||
gdk_x11_display_error_trap_pop_ignored (display);
|
||||
if (info)
|
||||
{
|
||||
master = g_hash_table_lookup (device_manager->id_table,
|
||||
GINT_TO_POINTER (info->attachment));
|
||||
XIFreeDeviceInfo (info);
|
||||
}
|
||||
|
||||
master = g_hash_table_lookup (device_manager->id_table,
|
||||
GINT_TO_POINTER (info->attachment));
|
||||
if (master)
|
||||
{
|
||||
_gdk_device_set_associated_device (slave, master);
|
||||
_gdk_device_add_slave (master, slave);
|
||||
|
||||
_gdk_device_set_associated_device (slave, master);
|
||||
_gdk_device_add_slave (master, slave);
|
||||
|
||||
g_signal_emit_by_name (device_manager, "device-changed", master);
|
||||
g_signal_emit_by_name (device_manager, "device-changed", master);
|
||||
}
|
||||
}
|
||||
|
||||
g_signal_emit_by_name (device_manager, "device-changed", slave);
|
||||
@@ -637,10 +657,13 @@ handle_device_changed (GdkX11DeviceManagerXI2 *device_manager,
|
||||
device = g_hash_table_lookup (device_manager->id_table,
|
||||
GUINT_TO_POINTER (ev->deviceid));
|
||||
|
||||
_gdk_device_reset_axes (device);
|
||||
translate_device_classes (display, device, ev->classes, ev->num_classes);
|
||||
if (device)
|
||||
{
|
||||
_gdk_device_reset_axes (device);
|
||||
translate_device_classes (display, device, ev->classes, ev->num_classes);
|
||||
|
||||
g_signal_emit_by_name (G_OBJECT (device), "changed");
|
||||
g_signal_emit_by_name (G_OBJECT (device), "changed");
|
||||
}
|
||||
}
|
||||
|
||||
static GdkCrossingMode
|
||||
|
||||
@@ -385,7 +385,6 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
|
||||
GdkToplevelX11 *toplevel = NULL;
|
||||
GdkX11Display *display_x11 = GDK_X11_DISPLAY (display);
|
||||
gboolean return_val;
|
||||
Window xwindow = None;
|
||||
|
||||
/* Find the GdkWindow that this event relates to.
|
||||
* Basically this means substructure events
|
||||
@@ -405,7 +404,6 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
|
||||
x11_screen = GDK_X11_SCREEN (screen);
|
||||
toplevel = _gdk_x11_window_get_toplevel (window);
|
||||
window_impl = GDK_WINDOW_IMPL_X11 (window->impl);
|
||||
xwindow = GDK_WINDOW_XID (window);
|
||||
|
||||
g_object_ref (window);
|
||||
}
|
||||
@@ -432,7 +430,7 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
|
||||
screen = gdk_display_get_screen (display, i);
|
||||
x11_screen = GDK_X11_SCREEN (screen);
|
||||
|
||||
if (x11_screen->wmspec_check_window == xwindow)
|
||||
if (x11_screen->wmspec_check_window == xevent->xdestroywindow.window)
|
||||
{
|
||||
x11_screen->wmspec_check_window = None;
|
||||
x11_screen->last_wmspec_check_time = 0;
|
||||
@@ -1635,7 +1633,7 @@ gdk_x11_display_get_default_group (GdkDisplay *display)
|
||||
|
||||
/**
|
||||
* gdk_x11_display_grab:
|
||||
* @display: a #GdkDisplay
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
*
|
||||
* Call XGrabServer() on @display.
|
||||
* To ungrab the display again, use gdk_x11_display_ungrab().
|
||||
@@ -1660,7 +1658,7 @@ gdk_x11_display_grab (GdkDisplay *display)
|
||||
|
||||
/**
|
||||
* gdk_x11_display_ungrab:
|
||||
* @display: a #GdkDisplay
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
*
|
||||
* Ungrab @display after it has been grabbed with
|
||||
* gdk_x11_display_grab().
|
||||
@@ -1843,9 +1841,9 @@ _gdk_x11_display_screen_for_xrootwin (GdkDisplay *display,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_display_get_xdisplay: (skip)
|
||||
* @display: a #GdkDisplay
|
||||
* @returns: an X display.
|
||||
* gdk_x11_display_get_xdisplay:
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
* @returns: (transfer none): an X display.
|
||||
*
|
||||
* Returns the X display of a #GdkDisplay.
|
||||
*
|
||||
@@ -1975,7 +1973,7 @@ broadcast_xmessage (GdkDisplay *display,
|
||||
|
||||
/**
|
||||
* gdk_x11_display_broadcast_startup_message:
|
||||
* @display: a #GdkDisplay
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
* @message_type: startup notification message type ("new", "change",
|
||||
* or "remove")
|
||||
* @...: a list of key/value pairs (as strings), terminated by a
|
||||
@@ -2148,7 +2146,7 @@ gdk_x11_display_store_clipboard (GdkDisplay *display,
|
||||
|
||||
/**
|
||||
* gdk_x11_display_get_user_time:
|
||||
* @display: a #GdkDisplay
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
*
|
||||
* Returns the timestamp of the last user interaction on
|
||||
* @display. The timestamp is taken from events caused
|
||||
@@ -2180,7 +2178,7 @@ gdk_x11_display_supports_input_shapes (GdkDisplay *display)
|
||||
|
||||
/**
|
||||
* gdk_x11_display_get_startup_notification_id:
|
||||
* @display: a #GdkDisplay
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
*
|
||||
* Gets the startup notification ID for a display.
|
||||
*
|
||||
@@ -2196,7 +2194,7 @@ gdk_x11_display_get_startup_notification_id (GdkDisplay *display)
|
||||
|
||||
/**
|
||||
* gdk_x11_display_set_startup_notification_id:
|
||||
* @display: a #GdkDisplay
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
* @startup_id: the startup notification ID (must be valid utf8)
|
||||
*
|
||||
* Sets the startup notification ID for a display.
|
||||
@@ -2412,7 +2410,7 @@ delete_outdated_error_traps (GdkX11Display *display_x11)
|
||||
|
||||
/**
|
||||
* gdk_x11_display_error_trap_push:
|
||||
* @display: a #GdkDisplay
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
*
|
||||
* Begins a range of X requests on @display for which X error events
|
||||
* will be ignored. Unignored errors (when no trap is pushed) will abort
|
||||
@@ -2517,7 +2515,7 @@ gdk_x11_display_error_trap_pop_internal (GdkDisplay *display,
|
||||
|
||||
/**
|
||||
* gdk_x11_display_error_trap_pop:
|
||||
* @display: the display
|
||||
* @display: (type GdkX11Display): the display
|
||||
*
|
||||
* Pops the error trap pushed by gdk_x11_display_error_trap_push().
|
||||
* Will XSync() if necessary and will always block until
|
||||
@@ -2544,7 +2542,7 @@ gdk_x11_display_error_trap_pop (GdkDisplay *display)
|
||||
|
||||
/**
|
||||
* gdk_x11_display_error_trap_pop_ignored:
|
||||
* @display: the display
|
||||
* @display: (type GdkX11Display): the display
|
||||
*
|
||||
* Pops the error trap pushed by gdk_x11_display_error_trap_push().
|
||||
* Does not block to see if an error occurred; merely records the
|
||||
|
||||
@@ -110,7 +110,9 @@ gdk_x11_display_manager_class_init (GdkX11DisplayManagerClass *class)
|
||||
manager_class->get_atom_name = _gdk_x11_display_manager_get_atom_name;
|
||||
manager_class->lookup_keyval = _gdk_x11_display_manager_lookup_keyval;
|
||||
manager_class->get_keyval_name = _gdk_x11_display_manager_get_keyval_name;
|
||||
#ifdef HAVE_XCONVERTCASE
|
||||
manager_class->keyval_convert_case = _gdk_x11_display_manager_keyval_convert_case;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -1457,133 +1457,7 @@ _gdk_x11_display_manager_keyval_convert_case (GdkDisplayManager *manager,
|
||||
if (upper)
|
||||
*upper = xupper;
|
||||
}
|
||||
#else /* !HAVE_XCONVERTCASE */
|
||||
void
|
||||
_gdk_x11_display_manager_keyval_convert_case (GdkDisplayManager *manager,
|
||||
guint symbol,
|
||||
guint *lower,
|
||||
guint *upper)
|
||||
{
|
||||
guint xlower = symbol;
|
||||
guint xupper = symbol;
|
||||
|
||||
/* Check for directly encoded 24-bit UCS characters: */
|
||||
if ((symbol & 0xff000000) == 0x01000000)
|
||||
{
|
||||
if (lower)
|
||||
*lower = gdk_unicode_to_keyval (g_unichar_tolower (symbol & 0x00ffffff));
|
||||
if (upper)
|
||||
*upper = gdk_unicode_to_keyval (g_unichar_toupper (symbol & 0x00ffffff));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (symbol >> 8)
|
||||
{
|
||||
case 0: /* Latin 1 */
|
||||
if ((symbol >= GDK_KEY_A) && (symbol <= GDK_KEY_Z))
|
||||
xlower += (GDK_KEY_a - GDK_KEY_A);
|
||||
else if ((symbol >= GDK_KEY_a) && (symbol <= GDK_KEY_z))
|
||||
xupper -= (GDK_KEY_a - GDK_KEY_A);
|
||||
else if ((symbol >= GDK_KEY_Agrave) && (symbol <= GDK_KEY_Odiaeresis))
|
||||
xlower += (GDK_KEY_agrave - GDK_KEY_Agrave);
|
||||
else if ((symbol >= GDK_KEY_agrave) && (symbol <= GDK_KEY_odiaeresis))
|
||||
xupper -= (GDK_KEY_agrave - GDK_KEY_Agrave);
|
||||
else if ((symbol >= GDK_KEY_Ooblique) && (symbol <= GDK_KEY_Thorn))
|
||||
xlower += (GDK_KEY_oslash - GDK_KEY_Ooblique);
|
||||
else if ((symbol >= GDK_KEY_oslash) && (symbol <= GDK_KEY_thorn))
|
||||
xupper -= (GDK_KEY_oslash - GDK_KEY_Ooblique);
|
||||
break;
|
||||
|
||||
case 1: /* Latin 2 */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol == GDK_KEY_Aogonek)
|
||||
xlower = GDK_KEY_aogonek;
|
||||
else if (symbol >= GDK_KEY_Lstroke && symbol <= GDK_KEY_Sacute)
|
||||
xlower += (GDK_KEY_lstroke - GDK_KEY_Lstroke);
|
||||
else if (symbol >= GDK_KEY_Scaron && symbol <= GDK_KEY_Zacute)
|
||||
xlower += (GDK_KEY_scaron - GDK_KEY_Scaron);
|
||||
else if (symbol >= GDK_KEY_Zcaron && symbol <= GDK_KEY_Zabovedot)
|
||||
xlower += (GDK_KEY_zcaron - GDK_KEY_Zcaron);
|
||||
else if (symbol == GDK_KEY_aogonek)
|
||||
xupper = GDK_KEY_Aogonek;
|
||||
else if (symbol >= GDK_KEY_lstroke && symbol <= GDK_KEY_sacute)
|
||||
xupper -= (GDK_KEY_lstroke - GDK_KEY_Lstroke);
|
||||
else if (symbol >= GDK_KEY_scaron && symbol <= GDK_KEY_zacute)
|
||||
xupper -= (GDK_KEY_scaron - GDK_KEY_Scaron);
|
||||
else if (symbol >= GDK_KEY_zcaron && symbol <= GDK_KEY_zabovedot)
|
||||
xupper -= (GDK_KEY_zcaron - GDK_KEY_Zcaron);
|
||||
else if (symbol >= GDK_KEY_Racute && symbol <= GDK_KEY_Tcedilla)
|
||||
xlower += (GDK_KEY_racute - GDK_KEY_Racute);
|
||||
else if (symbol >= GDK_KEY_racute && symbol <= GDK_KEY_tcedilla)
|
||||
xupper -= (GDK_KEY_racute - GDK_KEY_Racute);
|
||||
break;
|
||||
|
||||
case 2: /* Latin 3 */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Hstroke && symbol <= GDK_KEY_Hcircumflex)
|
||||
xlower += (GDK_KEY_hstroke - GDK_KEY_Hstroke);
|
||||
else if (symbol >= GDK_KEY_Gbreve && symbol <= GDK_KEY_Jcircumflex)
|
||||
xlower += (GDK_KEY_gbreve - GDK_KEY_Gbreve);
|
||||
else if (symbol >= GDK_KEY_hstroke && symbol <= GDK_KEY_hcircumflex)
|
||||
xupper -= (GDK_KEY_hstroke - GDK_KEY_Hstroke);
|
||||
else if (symbol >= GDK_KEY_gbreve && symbol <= GDK_KEY_jcircumflex)
|
||||
xupper -= (GDK_KEY_gbreve - GDK_KEY_Gbreve);
|
||||
else if (symbol >= GDK_KEY_Cabovedot && symbol <= GDK_KEY_Scircumflex)
|
||||
xlower += (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
|
||||
else if (symbol >= GDK_KEY_cabovedot && symbol <= GDK_KEY_scircumflex)
|
||||
xupper -= (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
|
||||
break;
|
||||
|
||||
case 3: /* Latin 4 */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Rcedilla && symbol <= GDK_KEY_Tslash)
|
||||
xlower += (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
|
||||
else if (symbol >= GDK_KEY_rcedilla && symbol <= GDK_KEY_tslash)
|
||||
xupper -= (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
|
||||
else if (symbol == GDK_KEY_ENG)
|
||||
xlower = GDK_KEY_eng;
|
||||
else if (symbol == GDK_KEY_eng)
|
||||
xupper = GDK_KEY_ENG;
|
||||
else if (symbol >= GDK_KEY_Amacron && symbol <= GDK_KEY_Umacron)
|
||||
xlower += (GDK_KEY_amacron - GDK_KEY_Amacron);
|
||||
else if (symbol >= GDK_KEY_amacron && symbol <= GDK_KEY_umacron)
|
||||
xupper -= (GDK_KEY_amacron - GDK_KEY_Amacron);
|
||||
break;
|
||||
|
||||
case 6: /* Cyrillic */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Serbian_DJE && symbol <= GDK_KEY_Serbian_DZE)
|
||||
xlower -= (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
|
||||
else if (symbol >= GDK_KEY_Serbian_dje && symbol <= GDK_KEY_Serbian_dze)
|
||||
xupper += (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
|
||||
else if (symbol >= GDK_KEY_Cyrillic_YU && symbol <= GDK_KEY_Cyrillic_HARDSIGN)
|
||||
xlower -= (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
|
||||
else if (symbol >= GDK_KEY_Cyrillic_yu && symbol <= GDK_KEY_Cyrillic_hardsign)
|
||||
xupper += (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
|
||||
break;
|
||||
|
||||
case 7: /* Greek */
|
||||
/* Assume the KeySym is a legal value (ignore discontinuities) */
|
||||
if (symbol >= GDK_KEY_Greek_ALPHAaccent && symbol <= GDK_KEY_Greek_OMEGAaccent)
|
||||
xlower += (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
|
||||
else if (symbol >= GDK_KEY_Greek_alphaaccent && symbol <= GDK_KEY_Greek_omegaaccent &&
|
||||
symbol != GDK_KEY_Greek_iotaaccentdieresis &&
|
||||
symbol != GDK_KEY_Greek_upsilonaccentdieresis)
|
||||
xupper -= (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
|
||||
else if (symbol >= GDK_KEY_Greek_ALPHA && symbol <= GDK_KEY_Greek_OMEGA)
|
||||
xlower += (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
|
||||
else if (symbol >= GDK_KEY_Greek_alpha && symbol <= GDK_KEY_Greek_omega &&
|
||||
symbol != GDK_KEY_Greek_finalsmallsigma)
|
||||
xupper -= (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
|
||||
break;
|
||||
}
|
||||
|
||||
if (lower)
|
||||
*lower = xlower;
|
||||
if (upper)
|
||||
*upper = xupper;
|
||||
}
|
||||
#endif
|
||||
#endif /* HAVE_XCONVERTCASE */
|
||||
|
||||
gint
|
||||
_gdk_x11_get_group_for_state (GdkDisplay *display,
|
||||
@@ -1615,13 +1489,12 @@ _gdk_x11_keymap_add_virt_mods (GdkKeymap *keymap,
|
||||
keymap = GET_EFFECTIVE_KEYMAP (keymap);
|
||||
keymap_x11 = GDK_X11_KEYMAP (keymap);
|
||||
|
||||
for (i = 3; i < 8; i++)
|
||||
/* See comment in add_virtual_modifiers() */
|
||||
for (i = 4; i < 8; i++)
|
||||
{
|
||||
if ((1 << i) & *modifiers)
|
||||
{
|
||||
if (keymap_x11->modmap[i] & GDK_MOD1_MASK)
|
||||
*modifiers |= GDK_MOD1_MASK;
|
||||
else if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
|
||||
if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
|
||||
*modifiers |= GDK_SUPER_MASK;
|
||||
else if (keymap_x11->modmap[i] & GDK_HYPER_MASK)
|
||||
*modifiers |= GDK_HYPER_MASK;
|
||||
@@ -1641,12 +1514,16 @@ gdk_x11_keymap_add_virtual_modifiers (GdkKeymap *keymap,
|
||||
keymap = GET_EFFECTIVE_KEYMAP (keymap);
|
||||
keymap_x11 = GDK_X11_KEYMAP (keymap);
|
||||
|
||||
for (i = 3; i < 8; i++)
|
||||
/* This loop used to start at 3, which included MOD1 in the
|
||||
* virtual mapping. However, all of GTK+ treats MOD1 as a
|
||||
* synonym for Alt, and does not expect it to be mapped around,
|
||||
* therefore it's more sane to simply treat MOD1 like SHIFT and
|
||||
* CONTROL, which are not mappable either.
|
||||
*/
|
||||
for (i = 4; i < 8; i++)
|
||||
{
|
||||
if ((1 << i) & *state)
|
||||
{
|
||||
if (keymap_x11->modmap[i] & GDK_MOD1_MASK)
|
||||
*state |= GDK_MOD1_MASK;
|
||||
if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
|
||||
*state |= GDK_SUPER_MASK;
|
||||
if (keymap_x11->modmap[i] & GDK_HYPER_MASK)
|
||||
@@ -1715,7 +1592,8 @@ gdk_x11_keymap_map_virtual_modifiers (GdkKeymap *keymap,
|
||||
{
|
||||
if (*state & vmods[j])
|
||||
{
|
||||
for (i = 3; i < 8; i++)
|
||||
/* See comment in add_virtual_modifiers() */
|
||||
for (i = 4; i < 8; i++)
|
||||
{
|
||||
if (keymap_x11->modmap[i] & vmods[j])
|
||||
{
|
||||
|
||||
@@ -442,7 +442,7 @@ gdk_x11_get_default_screen (void)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_get_default_root_xwindow: (skip)
|
||||
* gdk_x11_get_default_root_xwindow:
|
||||
*
|
||||
* Gets the root window of the default screen
|
||||
* (see gdk_x11_get_default_screen()).
|
||||
@@ -456,13 +456,13 @@ gdk_x11_get_default_root_xwindow (void)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_get_default_xdisplay: (skip)
|
||||
* gdk_x11_get_default_xdisplay:
|
||||
*
|
||||
* Gets the default GTK+ display.
|
||||
*
|
||||
* Return value: the Xlib <type>Display*</type> for the display
|
||||
* specified in the <option>--display</option> command line option
|
||||
* or the <envar>DISPLAY</envar> environment variable.
|
||||
* Return value: (transfer none): the Xlib <type>Display*</type> for
|
||||
* the display specified in the <option>--display</option> command
|
||||
* line option or the <envar>DISPLAY</envar> environment variable.
|
||||
**/
|
||||
Display *
|
||||
gdk_x11_get_default_xdisplay (void)
|
||||
|
||||
@@ -275,10 +275,12 @@ guint _gdk_x11_display_manager_lookup_keyval (GdkDisplayManager *manager,
|
||||
const gchar *name);
|
||||
gchar * _gdk_x11_display_manager_get_keyval_name (GdkDisplayManager *manager,
|
||||
guint keyval);
|
||||
#ifdef HAVE_XCONVERTCASE
|
||||
void _gdk_x11_display_manager_keyval_convert_case (GdkDisplayManager *manager,
|
||||
guint symbol,
|
||||
guint *lower,
|
||||
guint *upper);
|
||||
#endif
|
||||
|
||||
GdkCursor *_gdk_x11_display_get_cursor_for_type (GdkDisplay *display,
|
||||
GdkCursorType type);
|
||||
|
||||
@@ -207,7 +207,7 @@ lookup_cached_xatom (GdkDisplay *display,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_atom_to_xatom_for_display: (skip)
|
||||
* gdk_x11_atom_to_xatom_for_display:
|
||||
* @display: A #GdkDisplay
|
||||
* @atom: A #GdkAtom, or %GDK_NONE
|
||||
*
|
||||
@@ -298,7 +298,7 @@ _gdk_x11_precache_atoms (GdkDisplay *display,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_atom_to_xatom: (skip)
|
||||
* gdk_x11_atom_to_xatom:
|
||||
* @atom: A #GdkAtom
|
||||
*
|
||||
* Converts from a #GdkAtom to the X atom for the default GDK display
|
||||
@@ -313,14 +313,14 @@ gdk_x11_atom_to_xatom (GdkAtom atom)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_xatom_to_atom_for_display: (skip)
|
||||
* gdk_x11_xatom_to_atom_for_display:
|
||||
* @display: A #GdkDisplay
|
||||
* @xatom: an X atom
|
||||
*
|
||||
* Convert from an X atom for a #GdkDisplay to the corresponding
|
||||
* #GdkAtom.
|
||||
*
|
||||
* Return value: the corresponding #GdkAtom.
|
||||
* Return value: (transfer none): the corresponding #GdkAtom.
|
||||
*
|
||||
* Since: 2.2
|
||||
**/
|
||||
@@ -373,13 +373,13 @@ gdk_x11_xatom_to_atom_for_display (GdkDisplay *display,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_xatom_to_atom: (skip)
|
||||
* gdk_x11_xatom_to_atom:
|
||||
* @xatom: an X atom for the default GDK display
|
||||
*
|
||||
* Convert from an X atom for the default display to the corresponding
|
||||
* #GdkAtom.
|
||||
*
|
||||
* Return value: the corresponding G#dkAtom.
|
||||
* Return value: (transfer none): the corresponding G#dkAtom.
|
||||
**/
|
||||
GdkAtom
|
||||
gdk_x11_xatom_to_atom (Atom xatom)
|
||||
@@ -450,7 +450,7 @@ _gdk_x11_display_manager_get_atom_name (GdkDisplayManager *manager,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_get_xatom_by_name_for_display: (skip)
|
||||
* gdk_x11_get_xatom_by_name_for_display:
|
||||
* @display: a #GdkDisplay
|
||||
* @atom_name: a string
|
||||
*
|
||||
@@ -472,7 +472,7 @@ gdk_x11_get_xatom_by_name_for_display (GdkDisplay *display,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_get_xatom_by_name: (skip)
|
||||
* gdk_x11_get_xatom_by_name:
|
||||
* @atom_name: a string
|
||||
*
|
||||
* Returns the X atom for GDK's default display corresponding to @atom_name.
|
||||
|
||||
@@ -265,8 +265,8 @@ gdk_x11_screen_get_monitor_plug_name (GdkScreen *screen,
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_screen_get_monitor_output: (skip)
|
||||
* @screen: a #GdkScreen
|
||||
* gdk_x11_screen_get_monitor_output:
|
||||
* @screen: (type GdkX11Screen): a #GdkScreen
|
||||
* @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen)
|
||||
*
|
||||
* Gets the XID of the specified output/monitor.
|
||||
@@ -319,7 +319,7 @@ gdk_x11_screen_get_rgba_visual (GdkScreen *screen)
|
||||
|
||||
/**
|
||||
* gdk_x11_screen_get_xscreen:
|
||||
* @screen: a #GdkScreen.
|
||||
* @screen: (type GdkX11Screen): a #GdkScreen.
|
||||
* @returns: (transfer none): an Xlib <type>Screen*</type>
|
||||
*
|
||||
* Returns the screen of a #GdkScreen.
|
||||
@@ -334,7 +334,7 @@ gdk_x11_screen_get_xscreen (GdkScreen *screen)
|
||||
|
||||
/**
|
||||
* gdk_x11_screen_get_screen_number:
|
||||
* @screen: a #GdkScreen.
|
||||
* @screen: (type GdkX11Screen): a #GdkScreen.
|
||||
* @returns: the position of @screen among the screens of
|
||||
* its display.
|
||||
*
|
||||
@@ -1275,7 +1275,7 @@ fetch_net_wm_check_window (GdkScreen *screen)
|
||||
|
||||
/**
|
||||
* gdk_x11_screen_supports_net_wm_hint:
|
||||
* @screen: the relevant #GdkScreen.
|
||||
* @screen: (type GdkX11Screen): the relevant #GdkScreen.
|
||||
* @property: a property atom.
|
||||
*
|
||||
* This function is specific to the X11 backend of GDK, and indicates
|
||||
@@ -1510,7 +1510,7 @@ _gdk_x11_screen_init_events (GdkScreen *screen)
|
||||
|
||||
/**
|
||||
* gdk_x11_screen_get_window_manager_name:
|
||||
* @screen: a #GdkScreen
|
||||
* @screen: (type GdkX11Screen): a #GdkScreen
|
||||
*
|
||||
* Returns the name of the window manager for @screen.
|
||||
*
|
||||
|
||||
@@ -333,7 +333,7 @@ _gdk_x11_display_send_selection_notify (GdkDisplay *display,
|
||||
|
||||
/**
|
||||
* gdk_x11_display_text_property_to_text_list:
|
||||
* @display: The #GdkDisplay where the encoding is defined
|
||||
* @display: (type GdkX11Display): The #GdkDisplay where the encoding is defined
|
||||
* @encoding: an atom representing the encoding. The most
|
||||
* common values for this are STRING, or COMPOUND_TEXT.
|
||||
* This is value used as the type for the property
|
||||
@@ -574,7 +574,7 @@ _gdk_x11_display_text_property_to_utf8_list (GdkDisplay *display,
|
||||
|
||||
/**
|
||||
* gdk_x11_display_string_to_compound_text:
|
||||
* @display: the #GdkDisplay where the encoding is defined
|
||||
* @display: (type GdkX11Display): the #GdkDisplay where the encoding is defined
|
||||
* @str: a nul-terminated string
|
||||
* @encoding: (out) (transfer none): location to store the encoding atom
|
||||
* (to be used as the type for the property)
|
||||
@@ -695,7 +695,7 @@ _gdk_x11_display_utf8_to_string_target (GdkDisplay *display,
|
||||
|
||||
/**
|
||||
* gdk_x11_display_utf8_to_compound_text:
|
||||
* @display: a #GdkDisplay
|
||||
* @display: (type GdkX11Display): a #GdkDisplay
|
||||
* @str: a UTF-8 string
|
||||
* @encoding: (out): location to store resulting encoding
|
||||
* @format: (out): location to store format of the result
|
||||
|
||||
@@ -80,7 +80,8 @@ static const char gdk_settings_names[] =
|
||||
"Net/EnableInputFeedbackSounds\0" "gtk-enable-input-feedback-sounds\0"
|
||||
"Net/EnableEventSounds\0" "gtk-enable-event-sounds\0"
|
||||
"Gtk/CursorBlinkTimeout\0" "gtk-cursor-blink-timeout\0"
|
||||
"Gtk/AutoMnemonics\0" "gtk-auto-mnemonics\0";
|
||||
"Gtk/AutoMnemonics\0" "gtk-auto-mnemonics\0"
|
||||
"Gtk/VisibleFocus\0" "gtk-visible-focus\0";
|
||||
|
||||
|
||||
static const struct
|
||||
@@ -133,5 +134,6 @@ static const struct
|
||||
{ 1573, 1603 },
|
||||
{ 1636, 1658 },
|
||||
{ 1682, 1705 },
|
||||
{ 1730, 1748 }
|
||||
{ 1730, 1748 },
|
||||
{ 1767, 1784 }
|
||||
};
|
||||
|
||||
@@ -457,7 +457,7 @@ _gdk_x11_screen_list_visuals (GdkScreen *screen)
|
||||
|
||||
/**
|
||||
* gdk_x11_screen_lookup_visual:
|
||||
* @screen: a #GdkScreen.
|
||||
* @screen: (type GdkX11Screen): a #GdkScreen.
|
||||
* @xvisualid: an X Visual ID.
|
||||
*
|
||||
* Looks up the #GdkVisual for a particular screen and X Visual ID.
|
||||
@@ -564,12 +564,12 @@ _gdk_visual_get_x11_colormap (GdkVisual *visual)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_visual_get_xvisual: (skip)
|
||||
* gdk_x11_visual_get_xvisual:
|
||||
* @visual: a #GdkVisual.
|
||||
*
|
||||
* Returns the X visual belonging to a #GdkVisual.
|
||||
*
|
||||
* Return value: an Xlib <type>Visual*</type>.
|
||||
* Return value: (transfer none): an Xlib <type>Visual*</type>.
|
||||
**/
|
||||
Visual *
|
||||
gdk_x11_visual_get_xvisual (GdkVisual *visual)
|
||||
|
||||
@@ -1699,7 +1699,7 @@ gdk_window_x11_lower (GdkWindow *window)
|
||||
|
||||
/**
|
||||
* gdk_x11_window_move_to_current_desktop:
|
||||
* @window: a #GdkWindow
|
||||
* @window: (type GdkX11Window): a #GdkWindow
|
||||
*
|
||||
* Moves the window to the correct workspace when running under a
|
||||
* window manager that supports multiple workspaces, as described
|
||||
@@ -3023,7 +3023,7 @@ gdk_x11_window_set_focus_on_map (GdkWindow *window,
|
||||
|
||||
/**
|
||||
* gdk_x11_window_set_user_time:
|
||||
* @window: A toplevel #GdkWindow
|
||||
* @window: (type GdkX11Window): A toplevel #GdkWindow
|
||||
* @timestamp: An XServer timestamp to which the property should be set
|
||||
*
|
||||
* The application can use this call to update the _NET_WM_USER_TIME
|
||||
@@ -3088,7 +3088,7 @@ gdk_x11_window_set_user_time (GdkWindow *window,
|
||||
|
||||
/**
|
||||
* gdk_x11_window_set_theme_variant:
|
||||
* @window: a #GdkWindow
|
||||
* @window: (type GdkX11Window): a #GdkWindow
|
||||
* @variant: the theme variant to export
|
||||
*
|
||||
* GTK+ applications can request a dark theme variant. In order to
|
||||
@@ -4293,6 +4293,33 @@ _gdk_x11_moveresize_handle_event (XEvent *event)
|
||||
if (event->xbutton.button == mv_resize->moveresize_button)
|
||||
finish_drag (mv_resize);
|
||||
break;
|
||||
|
||||
#ifdef HAVE_XGENERICEVENTS
|
||||
case GenericEvent:
|
||||
{
|
||||
/* we just assume this is an XI2 event */
|
||||
XIEvent *ev = (XIEvent *) event->xcookie.data;
|
||||
XIDeviceEvent *xev = (XIDeviceEvent *)ev;
|
||||
gint state;
|
||||
switch (ev->evtype)
|
||||
{
|
||||
case XI_Motion:
|
||||
update_pos (mv_resize, xev->root_x, xev->root_y);
|
||||
state = _gdk_x11_device_xi2_translate_state (&xev->mods, &xev->buttons, &xev->group);
|
||||
if ((state & button_mask) == 0)
|
||||
finish_drag (mv_resize);
|
||||
break;
|
||||
|
||||
case XI_ButtonRelease:
|
||||
update_pos (mv_resize, xev->root_x, xev->root_y);
|
||||
if (xev->detail == mv_resize->moveresize_button)
|
||||
finish_drag (mv_resize);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@@ -4701,9 +4728,10 @@ timestamp_predicate (Display *display,
|
||||
|
||||
/**
|
||||
* gdk_x11_get_server_time:
|
||||
* @window: a #GdkWindow, used for communication with the server.
|
||||
* The window must have GDK_PROPERTY_CHANGE_MASK in its
|
||||
* events mask or a hang will result.
|
||||
* @window: (type GdkX11Window): a #GdkWindow, used for communication
|
||||
* with the server. The window must have
|
||||
* GDK_PROPERTY_CHANGE_MASK in its events mask or a hang will
|
||||
* result.
|
||||
*
|
||||
* Routine to get the current X server time stamp.
|
||||
*
|
||||
@@ -4738,8 +4766,8 @@ gdk_x11_get_server_time (GdkWindow *window)
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_x11_window_get_xid: (skip)
|
||||
* @window: a native #GdkWindow.
|
||||
* gdk_x11_window_get_xid:
|
||||
* @window: (type GdkX11Window): a native #GdkWindow.
|
||||
*
|
||||
* Returns the X resource (window) belonging to a #GdkWindow.
|
||||
*
|
||||
|
||||
@@ -81,7 +81,8 @@ _gdk_x11_display_remove_window (GdkDisplay *display,
|
||||
|
||||
/**
|
||||
* gdk_x11_window_lookup_for_display:
|
||||
* @display: the #GdkDisplay corresponding to the window handle
|
||||
* @display: (type GdkX11Window): the #GdkDisplay corresponding to the
|
||||
* window handle
|
||||
* @window: an XLib <type>Window</type>
|
||||
*
|
||||
* Looks up the #GdkWindow that wraps the given native window handle.
|
||||
|
||||
16
gtk+.doap
16
gtk+.doap
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
|
||||
xmlns:foaf="http://xmlns.com/foaf/0.1/"
|
||||
@@ -5,6 +6,7 @@
|
||||
xmlns="http://usefulinc.com/ns/doap#">
|
||||
|
||||
<name xml:lang="en">Gtk+</name>
|
||||
<shortname>gtk+</shortname>
|
||||
<shortdesc xml:lang="en">Multi-platform toolkit</shortdesc>
|
||||
<description xml:lang="en">GTK+ is a multi-platform toolkit for creating graphical user
|
||||
interfaces. Offering a complete set of widgets, GTK+ is suitable for
|
||||
@@ -21,6 +23,9 @@ licensing terms for GTK+, the GNU LGPL, allow it to be used by all
|
||||
developers, including those developing proprietary software, without
|
||||
any license fees or royalties.</description>
|
||||
<homepage rdf:resource="http://www.gtk+.org/" />
|
||||
<license rdf:resource="http://usefulinc.com/doap/licenses/lgpl" />
|
||||
<bug-database rdf:resource="http://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2B" />
|
||||
<download-page rdf:resource="http://download.gnome.org/sources/gtk+/" />
|
||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-list" />
|
||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list" />
|
||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-devel-list" />
|
||||
@@ -28,6 +33,16 @@ any license fees or royalties.</description>
|
||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-i18n-list" />
|
||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-perl-list" />
|
||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/language-bindings" />
|
||||
<category rdf:resource="http://api.gnome.org/doap-extensions#platform" />
|
||||
|
||||
<programming-language>C</programming-language>
|
||||
|
||||
<repository>
|
||||
<GitRepository>
|
||||
<browse rdf:resource="http://git.gnome.org/browse/gtk+/"/>
|
||||
<location rdf:resource="git://git.gnome.org/gtk+"/>
|
||||
</GitRepository>
|
||||
</repository>
|
||||
|
||||
<maintainer>
|
||||
<foaf:Person>
|
||||
@@ -43,4 +58,5 @@ any license fees or royalties.</description>
|
||||
<gnome:userid>timj</gnome:userid>
|
||||
</foaf:Person>
|
||||
</maintainer>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -54,7 +54,6 @@ AM_CPPFLAGS = \
|
||||
-DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GTK_DEP_CFLAGS) \
|
||||
$(gtk_clipboard_dnd_c_sources_CFLAGS) \
|
||||
$(INCLUDED_IMMODULE_DEFINE)
|
||||
|
||||
if PLATFORM_WIN32
|
||||
@@ -199,6 +198,7 @@ gtk_public_h_sources = \
|
||||
gtkcomboboxtext.h \
|
||||
gtkcontainer.h \
|
||||
gtkcssprovider.h \
|
||||
gtkcsssection.h \
|
||||
gtkdebug.h \
|
||||
gtkdialog.h \
|
||||
gtkdnd.h \
|
||||
@@ -218,6 +218,9 @@ gtk_public_h_sources = \
|
||||
gtkfixed.h \
|
||||
gtkfontbutton.h \
|
||||
gtkfontsel.h \
|
||||
gtkfontchooser.h \
|
||||
gtkfontchooserdialog.h \
|
||||
gtkfontchooserwidget.h \
|
||||
gtkframe.h \
|
||||
gtkgradient.h \
|
||||
gtkgrid.h \
|
||||
@@ -392,6 +395,7 @@ gtk_private_h_sources = \
|
||||
gtkcontainerprivate.h \
|
||||
gtkcssparserprivate.h \
|
||||
gtkcssproviderprivate.h \
|
||||
gtkcsssectionprivate.h \
|
||||
gtkcssselectorprivate.h \
|
||||
gtkcsstypesprivate.h \
|
||||
gtkcustompaperunixdialog.h \
|
||||
@@ -404,6 +408,8 @@ gtk_private_h_sources = \
|
||||
gtkfilechooserutils.h \
|
||||
gtkfilesystem.h \
|
||||
gtkfilesystemmodel.h \
|
||||
gtkfontchooserprivate.h \
|
||||
gtkfontchooserutils.h \
|
||||
gtkiconcache.h \
|
||||
gtkimageprivate.h \
|
||||
gtkimcontextsimpleseqs.h \
|
||||
@@ -524,6 +530,7 @@ gtk_base_c_sources = \
|
||||
gtkcontainer.c \
|
||||
gtkcssparser.c \
|
||||
gtkcssprovider.c \
|
||||
gtkcsssection.c \
|
||||
gtkcssselector.c \
|
||||
gtkcsstypes.c \
|
||||
gtkdialog.c \
|
||||
@@ -548,6 +555,10 @@ gtk_base_c_sources = \
|
||||
gtkfixed.c \
|
||||
gtkfontbutton.c \
|
||||
gtkfontsel.c \
|
||||
gtkfontchooser.c \
|
||||
gtkfontchooserdialog.c \
|
||||
gtkfontchooserutils.c \
|
||||
gtkfontchooserwidget.c \
|
||||
gtkframe.c \
|
||||
gtkgradient.c \
|
||||
gtkgrid.c \
|
||||
@@ -780,7 +791,8 @@ if USE_QUARTZ
|
||||
gtk_private_h_sources += \
|
||||
gtksearchenginequartz.h
|
||||
gtk_c_sources += $(gtk_use_quartz_c_sources)
|
||||
gtk_use_quartz_c_sources_CFLAGS = "-xobjective-c"
|
||||
libgtk_3_la_CFLAGS = "-xobjective-c"
|
||||
|
||||
else
|
||||
gtk_c_sources += $(gtk_use_stub_c_sources)
|
||||
endif
|
||||
@@ -793,12 +805,8 @@ gtk_clipboard_dnd_c_sources = \
|
||||
gtkdnd-quartz.c \
|
||||
gtkquartz.c
|
||||
gtk_clipboard_dnd_h_sources = gtkquartz.h
|
||||
gtk_clipboard_dnd_c_sources_CFLAGS = "-xobjective-c"
|
||||
else
|
||||
gtk_clipboard_dnd_c_sources = \
|
||||
gtkclipboard.c \
|
||||
gtkdnd.c
|
||||
gtk_clipboard_dnd_c_sources_CFLAGS =
|
||||
gtk_clipboard_dnd_c_sources = gtkclipboard.c gtkdnd.c
|
||||
endif
|
||||
EXTRA_DIST += gtkquartz.h
|
||||
|
||||
@@ -839,12 +847,18 @@ gtk_extra_sources = \
|
||||
gtkstatusicon-quartz.c \
|
||||
gtk.symbols \
|
||||
gtkversion.h.in \
|
||||
gtkmarshalers.list
|
||||
gtkmarshalers.list \
|
||||
fallback-c89.c
|
||||
|
||||
#
|
||||
# setup GTK+ sources and their dependencies
|
||||
#
|
||||
MAINTAINERCLEANFILES = $(gtk_built_sources) $(stamp_files) $(GENERATED_ICONS) stock-icons/icon-theme.cache
|
||||
MAINTAINERCLEANFILES = \
|
||||
$(gtk_built_sources) \
|
||||
$(stamp_files) \
|
||||
$(GENERATED_ICONS) \
|
||||
stock-icons/icon-theme.cache
|
||||
|
||||
EXTRA_HEADERS =
|
||||
EXTRA_DIST += $(gtk_private_h_sources) $(gtk_extra_sources)
|
||||
EXTRA_DIST += $(gtk_built_sources)
|
||||
@@ -893,7 +907,7 @@ gtktypebuiltins.c: @REBUILD@ $(gtk_public_h_sources) gtktypebuiltins.c.template
|
||||
|
||||
gtktypefuncs.c: @REBUILD@ stamp-gtktypebuiltins.h $(top_srcdir)/gtk/*.h $(top_srcdir)/gdk/*.h Makefile
|
||||
$(AM_V_GEN) echo '#include <gtk/gtkx.h>' > xgen-gtfsrc.c && \
|
||||
${CPP} $(DEFS) $(AM_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) xgen-gtfsrc.c | \
|
||||
${CPP} $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) xgen-gtfsrc.c | \
|
||||
$(GREP) -o '\bg[td]k_[a-zA-Z0-9_]*_get_type\b' | \
|
||||
sort | uniq | \
|
||||
$(SED) '{ s/^/*tp++ = /; s/$$/();/; s/^.*\(gdk_x11\|gtk_plug_\|gtk_socket_\).*$$/#ifdef GDK_WINDOWING_X11\n&\n#endif/; }' > xgen-gtf \
|
||||
@@ -988,6 +1002,7 @@ uninstall-local: uninstall-ms-lib uninstall-def-file uninstall-mac-key-theme
|
||||
distclean-local:
|
||||
if test $(srcdir) != .; then \
|
||||
rm -f $(MAINTAINERCLEANFILES); \
|
||||
rm -rf stock-icons; \
|
||||
fi
|
||||
|
||||
DEPS = libgtk-3.la $(top_builddir)/gdk/libgdk-3.la
|
||||
@@ -1007,15 +1022,22 @@ introspection_files = \
|
||||
gtktypebuiltins.h \
|
||||
gtktypebuiltins.c
|
||||
|
||||
if USE_X11
|
||||
introspection_files += \
|
||||
gtksocket.c \
|
||||
gtkplug.c
|
||||
endif
|
||||
|
||||
Gtk-3.0.gir: $(INTROSPECTION_SCANNER) libgtk-3.la $(top_builddir)/gdk/Gdk-3.0.gir Makefile
|
||||
Gtk_3_0_gir_SCANNERFLAGS = \
|
||||
--add-include-path=$(top_builddir)/gdk \
|
||||
--include-uninstalled=$(top_builddir)/gdk/Gdk-3.0.gir
|
||||
Gtk_3_0_gir_INCLUDES = Atk-1.0
|
||||
if USE_X11
|
||||
Gtk_3_0_gir_SCANNERFLAGS += --add-include-path=$(top_builddir)/gdk/x11
|
||||
Gtk_3_0_gir_INCLUDES += xlib-2.0
|
||||
endif
|
||||
Gtk_3_0_gir_SCANNERFLAGS += --c-include="gtk/gtkx.h"
|
||||
Gtk_3_0_gir_INCLUDES = Atk-1.0
|
||||
Gtk_3_0_gir_CFLAGS = \
|
||||
$(AM_CPPFLAGS) \
|
||||
-UGDK_DISABLE_DEPRECATED \
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* GAIL - The GNOME Accessibility Implementation Library
|
||||
* Copyright 2011, F123 Consulting & Mais Diferenças
|
||||
* Copyright 2001, 2002, 2003 Sun Microsystems Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@@ -80,12 +81,12 @@ add_listener (GSignalEmissionHook listener,
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning("Invalid signal type %s\n", signal_name);
|
||||
g_warning ("Invalid signal type %s\n", signal_name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning("Invalid object type %s\n", object_type);
|
||||
g_warning ("Invalid object type %s\n", object_type);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
@@ -270,26 +271,10 @@ gail_util_add_global_event_listener (GSignalEmissionHook listener,
|
||||
|
||||
split_string = g_strsplit (event_type, ":", 3);
|
||||
|
||||
if (split_string)
|
||||
{
|
||||
if (!g_strcmp0 ("window", split_string[0]))
|
||||
{
|
||||
static gboolean initialized = FALSE;
|
||||
if (g_strv_length (split_string) == 3)
|
||||
rc = add_listener (listener, split_string[1], split_string[2], event_type);
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
do_window_event_initialization ();
|
||||
initialized = TRUE;
|
||||
}
|
||||
rc = add_listener (listener, "GtkWindowAccessible", split_string[1], event_type);
|
||||
}
|
||||
else
|
||||
{
|
||||
rc = add_listener (listener, split_string[1], split_string[2], event_type);
|
||||
}
|
||||
|
||||
g_strfreev (split_string);
|
||||
}
|
||||
g_strfreev (split_string);
|
||||
|
||||
return rc;
|
||||
}
|
||||
@@ -319,19 +304,19 @@ gail_util_remove_global_event_listener (guint remove_listener)
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning("Invalid listener hook_id %ld or signal_id %d\n",
|
||||
listener_info->hook_id, listener_info->signal_id);
|
||||
g_warning ("Invalid listener hook_id %ld or signal_id %d\n",
|
||||
listener_info->hook_id, listener_info->signal_id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning("No listener with the specified listener id %d",
|
||||
remove_listener);
|
||||
g_warning ("No listener with the specified listener id %d",
|
||||
remove_listener);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning("Invalid listener_id %d", remove_listener);
|
||||
g_warning ("Invalid listener_id %d", remove_listener);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -494,4 +479,5 @@ _gail_util_install (void)
|
||||
atk_class->get_toolkit_version = gail_util_get_toolkit_version;
|
||||
|
||||
listener_list = g_hash_table_new_full (g_int_hash, g_int_equal, NULL, g_free);
|
||||
do_window_event_initialization ();
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user