Compare commits
	
		
			734 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | c7b8f26cad | ||
|   | 8747b97ba3 | ||
|   | d20078574e | ||
|   | 26bd4fde5c | ||
|   | 2af49e503f | ||
|   | 6ea6af6eb4 | ||
|   | 10df80762c | ||
|   | f86032d700 | ||
|   | a8eb33f6fd | ||
|   | bd19de9429 | ||
|   | 2ca2838548 | ||
|   | df8234c5e3 | ||
|   | d03ffd801e | ||
|   | 7a4c808e43 | ||
|   | 4f1d62170b | ||
|   | e10804727d | ||
|   | e430e051b7 | ||
|   | 696d9d2fa9 | ||
|   | f6dd081acd | ||
|   | eddd6f8e9b | ||
|   | dfa4c7d670 | ||
|   | a487d4dd01 | ||
|   | c2ecdd0524 | ||
|   | 50b9042ac2 | ||
|   | f5e75de330 | ||
|   | 1ffe1eae4d | ||
|   | 970a446bd8 | ||
|   | 8880dffbdb | ||
|   | 5b6621811c | ||
|   | c2a9ccb7e2 | ||
|   | 4608cb6027 | ||
|   | ad61676af0 | ||
|   | c7c1225393 | ||
|   | c7dc6928a9 | ||
|   | 7cfaa6a6a8 | ||
|   | 673a9e2521 | ||
|   | 9ef4ac00df | ||
|   | 46f0cffa53 | ||
|   | b6203192b5 | ||
|   | 992a15e640 | ||
|   | f1620abfad | ||
|   | 591523e473 | ||
|   | 72769e113a | ||
|   | 387cb83c8a | ||
|   | 577e5e2e1a | ||
|   | 47cf63bebe | ||
|   | 0e58906194 | ||
|   | 13c7020b80 | ||
|   | 5ed6e37e3c | ||
|   | 9ed3a77102 | ||
|   | acd99927f9 | ||
|   | 13c92f63bb | ||
|   | 12400caef8 | ||
|   | a1b3fdfbd6 | ||
|   | 4b47c59a04 | ||
|   | 5d223c189c | ||
|   | c5d0923453 | ||
|   | 41f8fccf6b | ||
|   | e02ad64fef | ||
|   | 8db53af1f8 | ||
|   | defaa5876c | ||
|   | e7870cb665 | ||
|   | 64eb42023c | ||
|   | e7faef860b | ||
|   | 4dfbe9a493 | ||
|   | 6a17bb4cf5 | ||
|   | 58496de595 | ||
|   | f80a15f312 | ||
|   | 9df2d83aa0 | ||
|   | 1582448553 | ||
|   | eefa62bcd4 | ||
|   | e216b6ca0f | ||
|   | 8a33880c00 | ||
|   | 7a8c45dda8 | ||
|   | af01ddaf5d | ||
|   | 5ceffe86ee | ||
|   | 49df033b4e | ||
|   | ac3465ffbb | ||
|   | 884ab602cb | ||
|   | d944bda7b9 | ||
|   | 11f7cfb27b | ||
|   | 64358d9901 | ||
|   | 2efed44257 | ||
|   | 69c72ebb26 | ||
|   | 00a842f41b | ||
|   | 460dc9f2ef | ||
|   | be46869782 | ||
|   | 2863eba2e7 | ||
|   | e0b698d365 | ||
|   | edeac1de09 | ||
|   | 9281a1c191 | ||
|   | a3826987e6 | ||
|   | e46c7fd27b | ||
|   | 0bb8d29be4 | ||
|   | 1f905bd0e2 | ||
|   | cce5ad7cc0 | ||
|   | 97a4cc8c9b | ||
|   | 592374bc62 | ||
|   | 2e0f979613 | ||
|   | 6d365a700c | ||
|   | 72a9eb6a3e | ||
|   | ae3cfe6c01 | ||
|   | da557cb712 | ||
|   | c1e41d558f | ||
|   | 889844b004 | ||
|   | 6311a3ebc1 | ||
|   | 0f6c1db2ba | ||
|   | e6ec1abbfa | ||
|   | 42621c960e | ||
|   | 8e9ae2eb50 | ||
|   | ca7843372c | ||
|   | 1202714428 | ||
|   | 45addabe5d | ||
|   | 31abad0ea5 | ||
|   | c169d29836 | ||
|   | df8ad83cec | ||
|   | 381a9c2650 | ||
|   | dc3529d98a | ||
|   | e15bc37225 | ||
|   | 160150d127 | ||
|   | 6e02fb80c4 | ||
|   | 98b0a37442 | ||
|   | 4d437e32e0 | ||
|   | 7db236b2a4 | ||
|   | 377e2ed8a5 | ||
|   | 99cfbac473 | ||
|   | 34f06ee9e5 | ||
|   | f212723e71 | ||
|   | 660eceb61a | ||
|   | d395d75e26 | ||
|   | 2aea49a8d0 | ||
|   | c996dde5cb | ||
|   | 4bdd985faf | ||
|   | 6e831c88a6 | ||
|   | 0e3d164117 | ||
|   | ec6460382c | ||
|   | 436d3ff8a9 | ||
|   | e4269002ce | ||
|   | 4f2bb583bf | ||
|   | 702f3fc691 | ||
|   | 4cad9513b4 | ||
|   | 24974816a6 | ||
|   | 773ae8dc65 | ||
|   | 7f14298126 | ||
|   | a39cabfadb | ||
|   | 4df3e987c6 | ||
|   | 64c523c534 | ||
|   | fba2c49aae | ||
|   | e623406c99 | ||
|   | de36d51b91 | ||
|   | e6d5e98c9d | ||
|   | 832b7f9431 | ||
|   | 171a273d11 | ||
|   | 45b0765f2f | ||
|   | 2a773e0c85 | ||
|   | b5152c3327 | ||
|   | d4f8c29221 | ||
|   | 1b83e8a64c | ||
|   | 36eb5c305d | ||
|   | c72dbeb611 | ||
|   | 63aec4566d | ||
|   | 2cafb8be2d | ||
|   | 64544fa0ed | ||
|   | 51ccaaaff0 | ||
|   | b09f47d17f | ||
|   | 1dbefc4e36 | ||
|   | 7f6a77232f | ||
|   | 580feb0c85 | ||
|   | 842bc4421c | ||
|   | aba87407e9 | ||
|   | 112ef93e19 | ||
|   | c4efd1c789 | ||
|   | 7e61ef0936 | ||
|   | e9709b7ff9 | ||
|   | 027593faa5 | ||
|   | 491c5b622e | ||
|   | 5e9621ed80 | ||
|   | f5de1c78af | ||
|   | b0774d795c | ||
|   | 034ab77c30 | ||
|   | a6a9d3f448 | ||
|   | a215852d3c | ||
|   | 264a0bbd15 | ||
|   | 55a4d0e0cb | ||
|   | d900d83522 | ||
|   | e8b0c11703 | ||
|   | 3d337a98d9 | ||
|   | 3e38a48c40 | ||
|   | 5876f2e3e5 | ||
|   | aeb589c176 | ||
|   | 14dd766e11 | ||
|   | 24ff4b5622 | ||
|   | 7f3362bdce | ||
|   | 6b5cf2eb61 | ||
|   | fb0cd80332 | ||
|   | 579bf2105e | ||
|   | 995e8040dd | ||
|   | 0503f6bb9a | ||
|   | 87fe9685b5 | ||
|   | 2d9b8bb2d0 | ||
|   | 74b1a9e2b9 | ||
|   | fcc178ee8c | ||
|   | d8696c17be | ||
|   | b07aea467e | ||
|   | 04ef448927 | ||
|   | 790bfcad9a | ||
|   | fbfab93c63 | ||
|   | 70c0d39fa7 | ||
|   | 7d43bde019 | ||
|   | 7743c70d47 | ||
|   | c9343e3ee3 | ||
|   | 3abaf506a6 | ||
|   | 9de142db09 | ||
|   | 2942b22ccf | ||
|   | 94e6e55ef7 | ||
|   | 34fc234fd7 | ||
|   | c3ffd28bb6 | ||
|   | 1c680be11a | ||
|   | a362c08f4e | ||
|   | 380154af0a | ||
|   | d482590c84 | ||
|   | b3c572b8e3 | ||
|   | c64eb94724 | ||
|   | d8f569eaf5 | ||
|   | 57c31a56f4 | ||
|   | 8b21df92f0 | ||
|   | e914595062 | ||
|   | a2a3188331 | ||
|   | 453020c315 | ||
|   | d794db876a | ||
|   | b33b4a8e2c | ||
|   | 6f74a63bbd | ||
|   | 5298d1c8d0 | ||
|   | 493f619adc | ||
|   | a613a55658 | ||
|   | 3fe5a676c2 | ||
|   | 19420f147f | ||
|   | 32b7743735 | ||
|   | 093e101252 | ||
|   | 6f873be7fa | ||
|   | f37dd25e92 | ||
|   | d48df249c9 | ||
|   | e48c3dac87 | ||
|   | 3516902fae | ||
|   | 66185a468c | ||
|   | 84930f1d78 | ||
|   | 07273a075d | ||
|   | 3900aa10f8 | ||
|   | d8058138ab | ||
|   | ac49259fc7 | ||
|   | 12dbb90a5a | ||
|   | 90f2a3ae4c | ||
|   | 867e10dbcc | ||
|   | 9a57626556 | ||
|   | b9e21b76ae | ||
|   | 2ecc50af53 | ||
|   | 1cebe19bbe | ||
|   | 71055556ee | ||
|   | 4d9d66da65 | ||
|   | 30bdadb519 | ||
|   | c388ccf477 | ||
|   | a2d54bb2ab | ||
|   | cefadb55b1 | ||
|   | 06e31e4c03 | ||
|   | 869a137c2f | ||
|   | f4e4a05a9e | ||
|   | df15843407 | ||
|   | d8eb47e2b7 | ||
|   | e28a36affd | ||
|   | 53534b4ded | ||
|   | 079dd60e3d | ||
|   | 5d12f00b3b | ||
|   | 95f3bb3b81 | ||
|   | 2bfe6d2da5 | ||
|   | 27e0e44d8b | ||
|   | 7e5fb3e1a0 | ||
|   | 2ac17cc7ba | ||
|   | 7b32b7fcd1 | ||
|   | 2fcd75eadd | ||
|   | 8094c0ab23 | ||
|   | 831cf9a83a | ||
|   | 47be4fdf07 | ||
|   | 9b34545bd5 | ||
|   | e5317cc7a0 | ||
|   | b8887a6c3a | ||
|   | a6c51addac | ||
|   | 54a3847a5e | ||
|   | 5a8473e226 | ||
|   | 5c33b0d768 | ||
|   | 22a3126a2b | ||
|   | 9596c24f83 | ||
|   | 86d6baf30f | ||
|   | 3a3be74e37 | ||
|   | f57d64337b | ||
|   | e69fcc860c | ||
|   | afbca61524 | ||
|   | 66d37e06ba | ||
|   | 7e2d6cb6ec | ||
|   | b9f775fe02 | ||
|   | 90cf43da9f | ||
|   | bab51cbbe4 | ||
|   | e782426736 | ||
|   | 1071e9970f | ||
|   | 5d64bdf3d9 | ||
|   | 8012a315e3 | ||
|   | acd6df34da | ||
|   | 6431abbc85 | ||
|   | 57ff0f7071 | ||
|   | 2a2ac52726 | ||
|   | a91eeb24d4 | ||
|   | 581960abc8 | ||
|   | 3a307b5d24 | ||
|   | 4e21d5d610 | ||
|   | 02c2cf1960 | ||
|   | 748064678f | ||
|   | 982d554450 | ||
|   | 0e5f8997cf | ||
|   | 6111d3ee4a | ||
|   | 3876a1a192 | ||
|   | 6f3ae06362 | ||
|   | 7d7b859b40 | ||
|   | d78de379cc | ||
|   | 576384a73b | ||
|   | 2fcbc467e8 | ||
|   | 6139bc77ec | ||
|   | c1ac9d1dff | ||
|   | 945c530354 | ||
|   | 774ceec243 | ||
|   | 7c20621112 | ||
|   | afcdfd158f | ||
|   | 8fb9e0072c | ||
|   | c1b8e0ac8f | ||
|   | c90765370d | ||
|   | 8931b8026e | ||
|   | 55251aa986 | ||
|   | 946a42f13e | ||
|   | 0fd4059927 | ||
|   | 1d827049d6 | ||
|   | 881d256ce0 | ||
|   | 6b31bd402a | ||
|   | 129c729c50 | ||
|   | 8bf8f3ea55 | ||
|   | f0c1e39fb7 | ||
|   | dd4e655e2b | ||
|   | b3073bc3bc | ||
|   | 54603f4d95 | ||
|   | aab65a768e | ||
|   | 37c037278c | ||
|   | 9d904f9a85 | ||
|   | 8830814d70 | ||
|   | c0958090b4 | ||
|   | 7f9e4e47c5 | ||
|   | 2282326f30 | ||
|   | 8703daccbe | ||
|   | 3797ecaa65 | ||
|   | c6fcc79e6a | ||
|   | d588de635a | ||
|   | e5b46747d6 | ||
|   | 62d85f2e41 | ||
|   | 5ea6bf3b46 | ||
|   | 90d0bb96b4 | ||
|   | ff64cba616 | ||
|   | 30387df454 | ||
|   | 38484bf967 | ||
|   | e73946f0bf | ||
|   | 6004197064 | ||
|   | aa43e715c0 | ||
|   | 424fc5245a | ||
|   | 90952ac5c8 | ||
|   | 395fbefd3c | ||
|   | bdf47aeac4 | ||
|   | daac778f16 | ||
|   | 93a16f6d43 | ||
|   | e46cf80fdd | ||
|   | c37c741592 | ||
|   | 4cf461fffa | ||
|   | 859ea1457d | ||
|   | 188d532438 | ||
|   | f258556cec | ||
|   | 62dbaa89ca | ||
|   | b56396eca5 | ||
|   | 0fdc36cac4 | ||
|   | 2cc0d31b17 | ||
|   | e2bf91cd61 | ||
|   | 294311b2d1 | ||
|   | db6d89b742 | ||
|   | 2717a02a8d | ||
|   | 4344c9e192 | ||
|   | 53e2d34628 | ||
|   | c602d53649 | ||
|   | 43a121c8d9 | ||
|   | a8c5100fbb | ||
|   | 5034bd8a7e | ||
|   | 07d8b9ce19 | ||
|   | 9c5ac65311 | ||
|   | ce8d36a5db | ||
|   | 27b00d6f63 | ||
|   | c441364bd3 | ||
|   | 1a521e10c3 | ||
|   | e22d941f06 | ||
|   | 787d22dcd0 | ||
|   | 22d9182322 | ||
|   | 38295e8202 | ||
|   | fe57f7572d | ||
|   | aade16a9eb | ||
|   | e31a97759e | ||
|   | 472662d099 | ||
|   | 027f16b096 | ||
|   | 5c7fdd67e8 | ||
|   | 4a0b6793bf | ||
|   | 228d1bf9aa | ||
|   | 85bcb9c121 | ||
|   | 989a38767e | ||
|   | 78e72f0a47 | ||
|   | 0faa623043 | ||
|   | ecd7e662ff | ||
|   | 7d9925ba2e | ||
|   | 95c6547631 | ||
|   | b5235d5a46 | ||
|   | f3b1e8b3bd | ||
|   | 59bc5b7975 | ||
|   | 99cbe762d7 | ||
|   | 7a2c019514 | ||
|   | c02e1b6f56 | ||
|   | 7938458eb8 | ||
|   | 165e117028 | ||
|   | 32cb4a178e | ||
|   | 7b69780d9a | ||
|   | be500e33f9 | ||
|   | 427c5cc42b | ||
|   | 3f444cb2fe | ||
|   | 02bc4b54eb | ||
|   | 85c46be205 | ||
|   | f97db0215b | ||
|   | dc79d8aa3d | ||
|   | 00fecb6cea | ||
|   | f0e97b540f | ||
|   | 37266aabfe | ||
|   | 6cc423cca6 | ||
|   | ce820702e3 | ||
|   | 5eb72743dd | ||
|   | ae1be578ba | ||
|   | 7e1e9320bc | ||
|   | 18a1ed6ec5 | ||
|   | 09713c5fd4 | ||
|   | 909cd82bea | ||
|   | 0593df8fe0 | ||
|   | 29b3e69dfa | ||
|   | 639d5e4710 | ||
|   | 8c36cf5939 | ||
|   | cc107c0eda | ||
|   | c7f70d71f7 | ||
|   | 9c6ccf96a5 | ||
|   | 11262b76df | ||
|   | 8fcc0db0c1 | ||
|   | 7c999a9d13 | ||
|   | efc55347e0 | ||
|   | 5f11158721 | ||
|   | 88ee5a68d9 | ||
|   | e1870a41b1 | ||
|   | bb74499188 | ||
|   | 079822c3f4 | ||
|   | bfacd9d420 | ||
|   | 36361b86d4 | ||
|   | 7c9c232d14 | ||
|   | 14c460c7fd | ||
|   | 0371194191 | ||
|   | 3b0c7c568d | ||
|   | 08893400a0 | ||
|   | 03cde43646 | ||
|   | 8617efb544 | ||
|   | db4298502e | ||
|   | 9f90f25e80 | ||
|   | 1fdde85f53 | ||
|   | 0e529fba00 | ||
|   | 6a32fa9452 | ||
|   | b422b6f06e | ||
|   | bc96a14185 | ||
|   | fbcddbcf3e | ||
|   | dfe8979a90 | ||
|   | c3a6de749b | ||
|   | 935e820a1d | ||
|   | f4125b95ca | ||
|   | d8bc7f7aa1 | ||
|   | 6d67ee3965 | ||
|   | 991ea50038 | ||
|   | 885a6afdcd | ||
|   | 0106f8bab1 | ||
|   | d27bccd0ba | ||
|   | c66488210c | ||
|   | 6c3985220e | ||
|   | 802c1ac427 | ||
|   | 7a2a6e2675 | ||
|   | c27b4b7cfc | ||
|   | 0ab572d511 | ||
|   | 1c8d45e89c | ||
|   | 4e2c2cb1ab | ||
|   | 07dd4d3f93 | ||
|   | 22370bef09 | ||
|   | f8d443b5b8 | ||
|   | f22ecd1c57 | ||
|   | b85be9312b | ||
|   | cd0870730f | ||
|   | d6be75ae99 | ||
|   | c1be7f1a60 | ||
|   | fccd5fd4ca | ||
|   | 1e5ef70fe3 | ||
|   | 1347a06e38 | ||
|   | b5d5934e5a | ||
|   | 64b1c0f953 | ||
|   | 10d53fc7d2 | ||
|   | eb1292ea99 | ||
|   | e257580b94 | ||
|   | 42261156ec | ||
|   | 89e31f0d9d | ||
|   | c805e397fd | ||
|   | 760a36aeee | ||
|   | 5d57a2594d | ||
|   | 1a5132d391 | ||
|   | 0fe0534c85 | ||
|   | fe942049da | ||
|   | e6ed29f0e2 | ||
|   | 15f11f879d | ||
|   | f517eaf81e | ||
|   | 255347f876 | ||
|   | e4ae7d7b1b | ||
|   | 2be943d1d9 | ||
|   | 0a50488bef | ||
|   | 78c966321a | ||
|   | f65b7c59d3 | ||
|   | e31f55e146 | ||
|   | dc232b6cad | ||
|   | a2f2e07e9b | ||
|   | f5e48223c9 | ||
|   | 1478510392 | ||
|   | 18b38320a6 | ||
|   | 16be31b514 | ||
|   | accc183474 | ||
|   | 81699619e8 | ||
|   | 75c87e5876 | ||
|   | 50bc4ad0e1 | ||
|   | 277e8bdad9 | ||
|   | dc50ccf9b7 | ||
|   | 4595209346 | ||
|   | 50cf3dd1a5 | ||
|   | 66eac7824a | ||
|   | 4041f96ed3 | ||
|   | 3a15d637da | ||
|   | 5c3c7df948 | ||
|   | f9454e29db | ||
|   | 574c0c3287 | ||
|   | 9fa5aa9889 | ||
|   | 80a70a4ad1 | ||
|   | 7c1b734053 | ||
|   | 33e1017403 | ||
|   | f143fe3710 | ||
|   | 66406b3035 | ||
|   | 042ddc5637 | ||
|   | 5b04ab4473 | ||
|   | 16b86ae7f7 | ||
|   | 49400657ca | ||
|   | 30bc8bc6ce | ||
|   | ac18f41ed1 | ||
|   | 60c05a0dac | ||
|   | c47de98c88 | ||
|   | f1aada0fae | ||
|   | 4de492eb20 | ||
|   | 9ca00d5cce | ||
|   | b98e4e37ad | ||
|   | 8b64a951c9 | ||
|   | c2a0719e44 | ||
|   | 8cb7a450ae | ||
|   | 6fb857cb23 | ||
|   | fc87a635b2 | ||
|   | 81930ca76e | ||
|   | da65738901 | ||
|   | 4528e1216a | ||
|   | d56ecde39b | ||
|   | 4148a5cc6a | ||
|   | 8a6a568aca | ||
|   | 12cc0cee29 | ||
|   | 878b1012b4 | ||
|   | a78fec7951 | ||
|   | a24c512caa | ||
|   | c669a3892e | ||
|   | ba4f008d40 | ||
|   | b0a099935b | ||
|   | aba39ef953 | ||
|   | ebf8c460e1 | ||
|   | 25d3432eee | ||
|   | cd7a74fbcd | ||
|   | c64188c67f | ||
|   | 4c2371f2e7 | ||
|   | ff6c31dcc0 | ||
|   | 1b649c18ed | ||
|   | 93037e4c6b | ||
|   | ed358c8f4b | ||
|   | a22859a64a | ||
|   | c44438b19f | ||
|   | b58366d3ad | ||
|   | 6900128b2f | ||
|   | c0b4d68390 | ||
|   | 0d794f28f0 | ||
|   | e389eff79d | ||
|   | 41adbdda12 | ||
|   | 2d6555ca4d | ||
|   | 044d58951e | ||
|   | 9c97e8999e | ||
|   | e97b38b38e | ||
|   | 8809673a74 | ||
|   | 68321d9bf4 | ||
|   | 65390e50a4 | ||
|   | f8d32661b5 | ||
|   | d84911fdf9 | ||
|   | 4147ea4660 | ||
|   | 2dd7c98641 | ||
|   | 3aad30143c | ||
|   | 93d06d4368 | ||
|   | b19c061db5 | ||
|   | 497258f6e5 | ||
|   | 977e6388ad | ||
|   | 0879cf0d8d | ||
|   | 4aab7fb7b9 | ||
|   | 839fee19ef | ||
|   | 46a56bafbd | ||
|   | c8b4939c7e | ||
|   | fc3e82421a | ||
|   | 23046f6e28 | ||
|   | 823208120d | ||
|   | d12c507b12 | ||
|   | 2157c238b6 | ||
|   | 423bda908e | ||
|   | 98d427ddba | ||
|   | 7a35579c3f | ||
|   | adc89fbb2c | ||
|   | a6ca3f768f | ||
|   | 9362fbdcde | ||
|   | 47099f4a87 | ||
|   | 2e6e5b068c | ||
|   | ee840bc832 | ||
|   | 6333c174dc | ||
|   | a3bf9b01aa | ||
|   | 402b477458 | ||
|   | 6b273ca713 | ||
|   | c3ec6b34a3 | ||
|   | 78dc480e86 | ||
|   | 53364f986c | ||
|   | 5770b5b3c3 | ||
|   | f16f47bd38 | ||
|   | 58a57185b7 | ||
|   | 8fb361cb26 | ||
|   | 335d211204 | ||
|   | 7f64d6b92e | ||
|   | 8c1b2d5eda | ||
|   | 578b1c06c7 | ||
|   | 6dfde43786 | ||
|   | a8ead4d447 | ||
|   | 2926323a9a | ||
|   | 13bc8f7a76 | ||
|   | ad516492d2 | ||
|   | 6677c61db3 | ||
|   | f26f61ed7d | ||
|   | 8ca86fa8bf | ||
|   | f2f500836e | ||
|   | c39998efee | ||
|   | 3b811f33c7 | ||
|   | beea2f7acd | ||
|   | fb4c50478d | ||
|   | ac0602a02e | ||
|   | 5361e0259f | ||
|   | 04bf73ff6d | ||
|   | 047b9de1c6 | ||
|   | 39b3244a3e | ||
|   | 63f982eb72 | ||
|   | c689306dae | ||
|   | 0b7f2f8cd3 | ||
|   | efc90173b1 | ||
|   | 9e439a22b5 | ||
|   | 848c1f52f3 | ||
|   | 1b84be7031 | ||
|   | eb08a65b4c | ||
|   | 43ba596a0e | ||
|   | 2e1de1a037 | ||
|   | 81ede6abf8 | ||
|   | 1d98f1fee8 | ||
|   | f0582d1a86 | ||
|   | 607dbf0f43 | ||
|   | 584cd3e684 | ||
|   | 90ec5b05f3 | ||
|   | 7253a75b18 | ||
|   | cdbe3b274f | ||
|   | 3f3e3ce37e | ||
|   | 5e3d93da87 | ||
|   | 82b1d0d7e5 | ||
|   | 3583e57ec3 | ||
|   | 2ddde04678 | ||
|   | feda493fbf | ||
|   | fc72309b71 | ||
|   | 860c2a6282 | ||
|   | e6b4a34daf | ||
|   | 3319cdfec0 | ||
|   | fc5594faad | ||
|   | 7c9e0c2ebc | ||
|   | 9157cc2b70 | ||
|   | 69e7b32b54 | ||
|   | 04835eccb5 | ||
|   | 01c363bb6a | ||
|   | 7649772394 | ||
|   | ca3dc2e876 | ||
|   | 70d85049b1 | ||
|   | 29f6f5e0ad | ||
|   | d249cfd040 | ||
|   | 3cb912aee2 | ||
|   | 7df823132c | ||
|   | 41353d642b | ||
|   | c47039db82 | ||
|   | 0dab6df25a | ||
|   | c844bab232 | ||
|   | 848f9d1399 | ||
|   | 2e63de5c0a | ||
|   | 7319b10d72 | ||
|   | 1265efcf78 | ||
|   | 3e0ef03fd9 | ||
|   | 37076941ad | ||
|   | 25e43618a4 | ||
|   | fd404bafc8 | ||
|   | 3b3b26b000 | ||
|   | 33498f6b84 | ||
|   | c0a440b852 | ||
|   | 1772a2a59c | ||
|   | 44f362ad87 | ||
|   | 478f1020a4 | ||
|   | e8209e7b22 | ||
|   | 2d20c9ecad | 
							
								
								
									
										20
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -19,6 +19,8 @@ libtool | ||||
| ltmain.sh | ||||
| missing | ||||
| .deps | ||||
| src/50-mutter-navigation.xml | ||||
| src/50-mutter-system.xml | ||||
| src/50-mutter-windows.xml | ||||
| src/mutter-wm.desktop | ||||
| src/mutter.desktop | ||||
| @@ -60,6 +62,7 @@ mutter-message | ||||
| mutter-window-demo | ||||
| focus-window | ||||
| test-attached | ||||
| test-focus | ||||
| test-gravity | ||||
| test-resizing | ||||
| test-size-hints | ||||
| @@ -73,3 +76,20 @@ src/stamp-mutter-enum-types.h | ||||
| src/mutter-marshal.[ch] | ||||
| src/stamp-mutter-marshal.h | ||||
| src/mutter-plugins.pc | ||||
| doc/reference/*.args | ||||
| doc/reference/*.bak | ||||
| doc/reference/*.hierarchy | ||||
| doc/reference/*.interfaces | ||||
| doc/reference/*.prerequisites | ||||
| doc/reference/*.signals | ||||
| doc/reference/*.stamp | ||||
| doc/reference/html/ | ||||
| doc/reference/xml/ | ||||
| doc/reference/meta-decl-list.txt | ||||
| doc/reference/meta-decl.txt | ||||
| doc/reference/meta-overrides.txt | ||||
| doc/reference/meta-undeclared.txt | ||||
| doc/reference/meta-undocumented.txt | ||||
| doc/reference/meta-unused.txt | ||||
| doc/reference/meta-docs.sgml | ||||
| doc/reference/meta.types | ||||
|   | ||||
| @@ -4,3 +4,5 @@ SUBDIRS=src po doc | ||||
| EXTRA_DIST = HACKING MAINTAINERS rationales.txt | ||||
|  | ||||
| DISTCLEANFILES = intltool-extract intltool-merge intltool-update po/stamp-it po/.intltool-merge-cache | ||||
|  | ||||
| DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc | ||||
|   | ||||
							
								
								
									
										476
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										476
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,3 +1,479 @@ | ||||
| 3.9.2 | ||||
| ===== | ||||
| * Add meta_window_can_close() function [Jasper; #699269] | ||||
| * Add support for string-array preferences [Florian; #700223] | ||||
| * Fix a potential race condition with _NET_WM_MOVERESIZE [Jasper; #699777] | ||||
| * Fix shade window action [Stef; #693714] | ||||
| * Remove overlay_group [Giovanni; #700735] | ||||
| * Improve tracking of the focus window [Dan, Jasper; #647706] | ||||
| * Add API to freeze/unfreeze the keyboard [Rui; #697001] | ||||
| * Grab and emit a signal when XK_ISO_Next_Group is pressed [Rui; #697002] | ||||
| * Misc bug fixes and cleanups [Dieter, Jasper, Rui; #699636, #700735, #697000] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Rui Matos, Florian Müllner, Jasper St. Pierre, | ||||
|   Dieter Verfaillie, Stef Walter, Dan Winship | ||||
|  | ||||
| Translations: | ||||
|   Kjartan Maraas [nb], Ján Kyselica [sk] | ||||
|  | ||||
| 3.9.1 | ||||
| ===== | ||||
| * Fix miscellaneous memory leaks [Pavel; #698710] | ||||
| * Misc fixes and cleanups [Stef, Simon; #698179, #697758] | ||||
|  | ||||
| Contributors: | ||||
|   Simon McVittie, Pavel Vasin, Stef Walter | ||||
|  | ||||
| 3.8.1 | ||||
| ===== | ||||
| * Fix crash when getting default font [Bastien; #696814] | ||||
| * Fix ungrabbing of keybindings [Rui; #697003] | ||||
| * Misc fixes and cleanups [Jasper, Simon; #697758] | ||||
|  | ||||
| Contributors: | ||||
|   Jasper Lievisse Adriaanse, Rui Matos, Simon McVittie, Bastien Nocera | ||||
|  | ||||
| Translations: | ||||
|   Guillaume Desmottes [fr], Shankar Prasad [kn], Bruce Cowan [en_GB], | ||||
|   Andika Triwidada [id], Yaron Shahrabani [he], Kjartan Maraas [nb], | ||||
|   Gheyret Kenji [ug] | ||||
|  | ||||
| 3.8.0 | ||||
| ===== | ||||
| * Address major memory leak when changing backgrounds [Ray; #696157] | ||||
|  | ||||
| Contributors: | ||||
|   Ray Strode | ||||
|  | ||||
| Translations: | ||||
|   Sandeep Sheshrao Shedmake [mr], Victor Ibragimov [tg], Gabor Kelemen [hu], | ||||
|   Ville-Pekka Vainio [fi], Rajesh Ranjan [hi], Dr.T.Vasudevan [ta], | ||||
|   ManojKumar Giri [or], Yuri Myasoedov [ru], Petr Kovar [cs], | ||||
|   Jiro Matsuzawa [ja], Krishnababu Krothapalli [te], Ani Peter [ml], | ||||
|   Inaki Larranaga Murgoitio [eu] | ||||
|  | ||||
| 3.7.92 | ||||
| ====== | ||||
| * Build and improve reference docs [Tomeu; #676856, #695641, #695935] | ||||
| * Add tracking of whether there are fullscreen windows [Owen; 649748] | ||||
| * Misc bug fixes and cleanups [Adel, Giovanni, Owen, Jasper, Florian; #695269, | ||||
|   #695711, #694046, #695813, #695881, #676856, #696053, #682779, #696089, | ||||
|   #696091, #696087] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Adel Gadllah, Florian Müllner, Jasper St. Pierre, | ||||
|   Tomeu Vizoso, Owen W. Taylor | ||||
|  | ||||
| Translations: | ||||
|   Chao-Hsiung Liao [zh_HK, zh_TW], Rafael Ferreira [pt_BR], | ||||
|   Ihar Hrachyshka [be], Nilamdyuti Goswami [as], Matej Urbančič [sl], | ||||
|   Dimitris Spingos [el], Jan Kyselica [sk], Khaled Hosny [ar], | ||||
|   Мирослав Николић [sr, sr@latin], Duarte Loreto [pt], Sweta Kothari [gu], | ||||
|   Milo Casagrande [it], Changwoo Ryu [ko], Gil Forcada [ca], | ||||
|   Carles Ferrando [ca@valencia], Mattias Põldaru [et], Alexandre Franke [fr], | ||||
|   Ask H. Larsen [da], Rūdolfs Mazurs [lv], Nguyễn Thái Ngọc Duy [vi] | ||||
|  | ||||
| 3.7.91 | ||||
| ====== | ||||
| * Fix windows being treated as remote after hostname changes [Ray; #688716] | ||||
| * Add meta_window_get_all_monitors() method [Adel; #646861] | ||||
| * Add grab API for externally defined accelerators [Florian; #643111] | ||||
| * Make session registration an explicit step [Ray; #694876] | ||||
| * Avoid unnecessary stage redraws [Adel; #694988, #695006] | ||||
| * Misc fixes [Giovanni, Ray, Jasper, Rui, Pavel, Owen; #694801, #694725, | ||||
|   #694641, #694393, #678917, #695093, #694837, #695135, #694771, #694321] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Adel Gadllah, Rui Matos, Florian Müllner, | ||||
|   Jasper St. Pierre, Ray Strode, Owen Taylor, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|   Daniel Mustieles [es], Yaron Shahrabani [he], A S Alam [pa], Piotr Drąg [pl], | ||||
|   Gheyret Kenji [ug], Alexandre Franke [fr], Milo Casagrande [it], | ||||
|   Fran Diéguez [gl], Dimitris Spingos [el], Мирослав Николић [sr, sr@latin], | ||||
|   Chao-Hsiung Liao [zh_HK, zh_TW], Nguyễn Thái Ngọc Duy [vi], | ||||
|   Aurimas Černius [lt], Mario Blättermann [de], Kjartan Maraas [nb] | ||||
|  | ||||
| 3.7.90 | ||||
| ====== | ||||
| * Support _NET_WM_OPAQUE_REGION [Jasper, Adel; #679901] | ||||
| * Add wrapper for XI2.3 pointer barriers [Jasper; #677215] | ||||
| * Update style of resize popups [Cosimo; #692741] | ||||
| * Implement compositor <-> application frame synchronization [Owen; #685463] | ||||
| * Handle animated backgrounds [Ray; #682427] | ||||
| * Add a new window group for override-redirect windows [Gayan; #633620] | ||||
| * Pass on pointer events on guard window to Clutter [Jasper; #681540] | ||||
| * Show correct shortcut in window menus [Giovanni; #694045] | ||||
| * Don't put minimized windows at the back of alt-tab [Jasper; #693991] | ||||
| * Misc bug fixes and cleanups [Jasper, Rico, Adel, Florian, Rui, Giovanni, | ||||
|   Owen; #692679, #693354, #690581, #693439, #692718, #693475, #693482, #693540, | ||||
|   #690580, #680990, #693833, #693922, #693854, #694224] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Cosimo Cecchi, Adel Gadllah, Rui Matos, Florian Müllner, | ||||
|   Gayan Perera, Jasper St. Pierre, Ray Strode, Owen Taylor, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|   Fran Diéguez [gl], A S Alam [pa], Alexandre Franke [fr], Aurimas Černius [lt], | ||||
|   Мирослав Николић [sr, sr@latin], Fran Diéguez [gl], Piotr Drąg [pl], | ||||
|   Luca Ferretti [it], Daniel Mustieles [es] | ||||
|  | ||||
| 3.7.5 | ||||
| ===== | ||||
| * Don't allow multiline window titles [Jon; #683056] | ||||
| * Make meta_window_located_on_workspace() public [Jasper; #691744] | ||||
| * Request XI2.3 [Colin; #692877] | ||||
| * Add meta_window_set_icon_geometry() method [Florian; #692997] | ||||
| * Require XFixes 5.0 [Jasper; #677215] | ||||
| * Change unredirection hints to match spec changes [Adel; #693064] | ||||
| * Improve unredict heuristicts [Adel; #683786] | ||||
| * Misc bug fixes and cleanups [Florian, Jasper, Adel; #691874, #679901, | ||||
|   #692952, #693042] | ||||
|  | ||||
| Contributors: | ||||
|   Adel Gadllah, William Jon McCann, Florian Müllner, Jasper St. Pierre, | ||||
|   Colin Walters | ||||
|  | ||||
| Translations: | ||||
|   Daniel Mustieles [es], Ihar Hrachyshka [be], Nilamdyuti Goswami [as], | ||||
|   Gheyret Kenji [ug], Kjartan Maraas [nb], Yaron Shahrabani [he], | ||||
|   Piotr Drąg [pl], Chao-Hsiung Liao [zh_HK,zh_TW], Milo Casagrande [it] | ||||
|  | ||||
| 3.7.4 | ||||
| ===== | ||||
| * Add support for bypass compositor hints [Adel; #683020] | ||||
| * Make automaximization optional [Adel; #680990] | ||||
| * Add method for checking if the application is responding [Giovanni; #684340] | ||||
| * Expose the xinput opcode [Jasper; #690590] | ||||
| * Rebrand "minimize" as "hide" [Florian; #682887] | ||||
| * Misc bug fixes and cleanups [Giovanni, Ray, Jasper, Matthias, Debarshi, | ||||
|   Florian, Rui; #690454, #690573, #690593, #690956, #691363, #690609, #690317, | ||||
|   #689263] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Matthias Clasen, Adel Gadllah, Rui Matos, Florian Müllner, | ||||
|   Debarshi Ray, Jasper St. Pierre, Ray Strode | ||||
|  | ||||
| Translations: | ||||
|   Mattias Põldaru [et], Yaron Shahrabani [he], Daniel Mustieles [es], | ||||
|   Khaled Hosny [ar], Fran Diéguez [gl], A S Alam [pa], Piotr Drąg [pl], | ||||
|   Rafael Ferreira [pt_BR], Nilamdyuti Goswami [as], Alexander Shopov [bg], | ||||
|   Matej Urbančič [sl] | ||||
|  | ||||
| 3.7.3 | ||||
| ===== | ||||
| * Fix maximized windows jumping to other monitors [Alban; #556696] | ||||
| * Add 'switch-applications' keybinding [Florian; #688913] | ||||
| * Add a convenience method to focus the default window [Jasper; #689652] | ||||
| * Increase typical icon size to 96 [Jasper; #689651] | ||||
| * Port to XInput2 [Jasper; #688779] | ||||
| * Give dynamic keybindings a keybinding action [Florian; #682315] | ||||
| * Misc. fixes and cleanups [Jasper, Rui; #688777] | ||||
|  | ||||
| Contributors: | ||||
|   Alban Crequy, Rui Matos, Florian Müllner, Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|   Nilamdyuti Goswami [as], Piotr Drąg [pl], Yaron Shahrabani [he], | ||||
|   Dr.T.Vasudevan [ta], ManojKumar Giri [or], Shankar Prasad [kn] | ||||
|  | ||||
| 3.7.2 | ||||
| ===== | ||||
| * Fix spurious focus changes when showing desktop [Florian; #686928] | ||||
| * MetaPluginManager: don't send events to Clutter twice [Owen; #686406] | ||||
| * Add the ability to add shader hooks to MetaBackgroundActor [Giovanni; #669798] | ||||
| * Only process keyboard mapping events for the core X keyboard [Rui; #674859] | ||||
| * Import keybinding files from Metacity [Florian; #687672] | ||||
| * Add compositor hook to process keybindings selectively [Florian; #688202] | ||||
| * MetaBackgroundActor: add a setter for GLSL uniforms [Giovanni; #682536] | ||||
| * Misc. fixes and cleanups [Jasper, Rui, Florian, Rico; #688182] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Rui Matos, Florian Müllner, Jasper St. Pierre, | ||||
|   Owen Taylor, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|   Rafael Ferreira [pt_BR], Tobias Endrigkeit [de], Yaron Shahrabani [he] | ||||
|  | ||||
| 3.7.1 | ||||
| ===== | ||||
| * screen: Ignore num-workspaces when using dynamic workspaces [Florian; #685439] | ||||
|  | ||||
| Contributors: | ||||
|   Florian Müllner | ||||
|  | ||||
| Translations: | ||||
|   Mattias Põldaru [et], Kjartan Maraas [nb], Мирослав Николић [sr, sr@latin], | ||||
|   Marek Černocký [cs], Andika Triwidada [id], Daniel Mustieles [es], | ||||
|   Fran Diéguez [gl], Matej Urbančič [sl] | ||||
|  | ||||
| 3.6.1 | ||||
| ===== | ||||
| * Fix crash when opening large popup menus [Jasper; #681676] | ||||
| * window: Don't move the desktop window after monitor hotplug [Jasper; #681159] | ||||
| * Expose MetaPlugin to introspection [Evan; #671098] | ||||
| * Optionally delay focus changes in focus-follows-mouse mode [Florian; #678169] | ||||
| * Resize the guard window when the X screen is resized [Benjamin; #670396] | ||||
| * display: Only manage the default X screen [Jürg; #648156] | ||||
| * Misc cleanups: [Owen; #587255] | ||||
|  | ||||
| Contributors: | ||||
|   Benjamin Berg, Jürg Billeter, Evan Broder, Florian Müllner, Jasper St. Pierre, | ||||
|   Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|   Alexandre Franke [fr], Theppitak Karoonboonyanan [th], Sayak Sarkar [bn_IN], | ||||
|   Sandeep Sheshrao Shedmake [mr], Ask H. Larsen [da], Shankar Prasad [kn], | ||||
|   Alexander Shopov [bg], Aurimas Černius [lt], Ihar Hrachyshka [be], | ||||
|   Kjartan Maraas [nb], Daniel Mustieles [es], Changwoo Ryu [ko], | ||||
|   Yuri Myasoedov [ru], Tom Tryfonidis [el], Rūdolfs Mazurs [lv], | ||||
|   Chris Leonard [en_GB], Piotr Drąg [pl], Fran Diéguez [gl], Gil Forcada [ca], | ||||
|   Matej Urbančič [sl], Andika Triwidada [id], Carles Ferrando [ca] | ||||
|  | ||||
| 3.6.0 | ||||
| ===== | ||||
|  | ||||
| Translations: | ||||
|   Alexander Shopov [bg], Daniel Korostil [uk], Rajesh Ranjan [hi], | ||||
|   Krishnababu Krothapalli [te], Ani Peter [ml], Rūdolfs Mazurs [lv], | ||||
|   Sweta Kothari [gu], Ihar Hrachyshka [be], Noriko Mizumoto [ja], | ||||
|   Timo Jyrinki [fi], Mattias Põldaru [et] | ||||
|  | ||||
| 3.5.92 | ||||
| ====== | ||||
| * screen: Allow NULL out arguments in meta_screen_get_size [Tomeu] | ||||
| * display: Add API to set wm_name / wm_keybindings [Florian; #671010] | ||||
| * Improve the not responding dialog [Jon, Florian; #684306] | ||||
| * Misc. bugfixes [Jasper] | ||||
|  | ||||
| Contributors: | ||||
|   William Jon McCann, Florian Müllner, Jasper St. Pierre, Tomeu Vizoso | ||||
|  | ||||
| Translations: | ||||
|   Gabor Kelemen [hu], Piotr Drąg [pl], Dr.T.Vasudevan [ta], Bruce Cowan [en_GB], | ||||
|   Alexandre Franke [fr], Theppitak Karoonboonyanan [th], Gil Forcada [ca], | ||||
|   Carles Ferrando [ca@valencia], Tobias Endrigkeit [de], Tom Tryfonidis [el], | ||||
|   Nguyễn Thái Ngọc Duy [vi], Changwoo Ryu [ko], Ask H. Larsen [da], | ||||
|   Rafael Ferreira [pt_BR], Marek Černocký [cs] | ||||
|  | ||||
| 3.5.91 | ||||
| ====== | ||||
| * Do not include markup in app not responding dialog [Alex] | ||||
| * Fix subtracting unredirected windows from visible region [Jasper; #677116] | ||||
| * Minor improvements and bugfixes [Jasper, Florian; #682648, #682993] | ||||
|  | ||||
| Contributors: | ||||
|   Alexander Larsson, Florian Müllner, Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|   Dirgita [id], Piotr Drąg [pl], A S Alam [pa], Yuri Myasoedov [ru], | ||||
|   Milo Casagrande [it], Nilamdyuti Goswami [as], Tom Tryfonidis [el], | ||||
|   Duarte Loreto [pt], Fran Diéguez [gl], Nguyễn Thái Ngọc Duy [vi], | ||||
|   Aurimas Černius [lt], Daniel Nylander [sv] | ||||
|  | ||||
| 3.5.90 | ||||
| ====== | ||||
| * Fix logic for handling translations of the windows group [Owen; #681221] | ||||
| * Handle painting inside a Clutter clone [Owen; #681953] | ||||
| * Update overlay-key on settings changes [Florian; #681906] | ||||
| * Add keybinding for overlay-key [Florian; #665547] | ||||
| * Minor fixes and improvements [Javier, Florian] | ||||
|  | ||||
| Contributors: | ||||
|   Javier Jardón, Florian Müllner, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|   Sweta Kothari [gu], Muhammet Kara [tr], Khaled Hosny [ar], | ||||
|   Sandeep Sheshrao Shedmake [mr] | ||||
|  | ||||
| 3.5.5 | ||||
| ===== | ||||
| * Fix flickering around windows when using window group [Tom; #681221] | ||||
|  | ||||
| Contributor(s): | ||||
|   Tom Beckmann | ||||
|  | ||||
| Translations: | ||||
|   Chao-Hsiung Liao [zh_HK, zh_TW], Matej Urbančič [sl], Fran Diéguez [gl], | ||||
|   Мирослав Николић [sr, sr@latin], Yaron Shahrabani [he], Kjartan Maraas [nb] | ||||
|  | ||||
| 3.5.4 | ||||
| ===== | ||||
| * Make it possible to reimplement move-to-workspace keybindings from plugins | ||||
|   [Giovanni; #674104] | ||||
| * Add a preference to ignore hide-titlebar-when-maximized hint [Rico; #678947] | ||||
| * window: Also use hide-titlebar-when-maximized when tiled [Florian; #679290] | ||||
| * Center modal dialogs on their parent instead [Florian; #674499] | ||||
| * Reduce amount of markup in translated messages [Matthias; #679660] | ||||
| * Fix focus problem after closing a window with focus-follows-mouse | ||||
|   [Jasper; #675982] | ||||
| * Handle changes of the attach-modal-dialogs preference [Florian; #679904] | ||||
| * Do not restore tiling on unmaximize [Florian; #677565] | ||||
| * Misc. fixes and cleanups [Jasper Adriaanse, Jasper, Debarshi, Pavel; | ||||
|   #679153, 673824] | ||||
|  | ||||
| Contributors: | ||||
|  Jasper Lievisse Adriaanse, Giovanni Campagna, Matthias Clasen, Florian Müllner, | ||||
|  Debarshi Ray, Jasper St. Pierre, Rico Tzschichholz, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|  Alexander Shopov [bg], Kjartan Maraas [nb], Yaron Shahrabani [he], | ||||
|  Nilamdyuti Goswami [as], Ihar Hrachyshka [be], Daniel Mustieles [es] | ||||
|  | ||||
| 3.5.3 | ||||
| ===== | ||||
| * Simplify plugin system [Jasper; #676855] | ||||
| * meta-window-actor: Don't unredirect shaped windows [Jasper; #677657] | ||||
| * screen: Add new public meta_screen_get_current_monitor API [Tim; #642591] | ||||
| * frames: Increase the size of resize corners [Jasper; #677669] | ||||
| * window: Make some window methods public [Jasper; #678126] | ||||
| * Fix crash when running mutter stand-alone [Jasper; #678238] | ||||
| * meta-window-actor: Fix potential crash in shaping code [Jasper; #677977] | ||||
| * Misc. fixes [Jasper, Marc-Antoine, Rico] | ||||
|  | ||||
| Contributors: | ||||
|  Tim L, Marc-Antoine Perennou, Jasper St. Pierre, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|  | ||||
|  Daniel Mustieles [es], Matej Urbančič [sl], Khaled Hosny [ar], | ||||
|  Bruno Brouard [fr], Fran Diéguez [gl] | ||||
|  | ||||
| 3.5.2 | ||||
| ===== | ||||
| * keybindings: Remove 'toggle-recording' binding [Florian; #674376] | ||||
| * Switch to gtk-doc syntax [Jasper; #673752] | ||||
| * shaped-texture: never slice shape mask texture [Robert; #674731] | ||||
| * Make Mutter stop relying on Cogl including a GL header [Neil; #672711] | ||||
| * Make support for "XFree86" Xinerama mandatory [Owen; #674727] | ||||
| * meta_window_move_frame(): fix crash when frame is NULL [Owen; #675254] | ||||
| * Fix memory leaks [Pavel; #672640] | ||||
| * Code cleanups [Jasper; #671104 #674876 #676052] | ||||
| * Look for themes in XDG user data dir [Jasper; #675316] | ||||
| * Remove frame pixel caching [Jasper; #675111] | ||||
| * stack: Ignore keep-on-top property on maximized windows [Florian; #673581] | ||||
| * Misc. fixes [Javier, Jasper, Owen, Rico] | ||||
|  | ||||
| Contributors: | ||||
|  Robert Bragg, Javier Járdon, Florian Müllner, Neil Roberts, Jasper St. Pierre,  | ||||
|  Owen Taylor, Rico Tzschichholz, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|  Praveen Illa [te], Luca Ferretti [it], Daniel Mustieles [es] | ||||
|  | ||||
| 3.4.1 | ||||
| ===== | ||||
| * API change: the meta_display_add_keybinding() function added in 3.4 | ||||
|   wasn't usable from a GNOME Shell extension, so has been changed to take | ||||
|   a GSettings object rather than the name of a schema [Jasper; #673014] | ||||
| * Don't try to auto-maximize not-maximizable windows; this fixes the problem | ||||
|   with the Nautilus desktop window being mis-positioned when enabled | ||||
|   [Owen; #673566] | ||||
| * Fix a crash in the default plugin (not used in GNOME) [Giovanni; #673809] | ||||
| * Make the <Super> key work when set as the mouse button modifier | ||||
|   [Florian; #662476] | ||||
|  | ||||
| Contributors: | ||||
|  Giovanni Campagna, Florian Muellner, Jasper St. Pierre, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|  Khaled Hosny [ar], Jordi Serratosa [ca], Carles Ferrando [ca@valencia], | ||||
|  Christian Kirbach [de], Kristjan Schmidt [eo], Arash Mousavi [fa], | ||||
|  Jiro Matsuzawa [ja], Shankar Prasad [kn], Aurimas Černius [lt], | ||||
|  Yinghua Wang [zh_CN] | ||||
|  | ||||
| 3.4.0 | ||||
| ===== | ||||
| * Fix crash when a full-screen window is opened [Jasper; #672797] | ||||
| * Fix memory leaks [Pavel; #672640] | ||||
|  | ||||
| Contributors: | ||||
|  Jasper St. Pierre, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|  Marek Černocký, Petr Kovar [cz], Bruno Brouard [fr], Sweta Kothari [gu], | ||||
|  Yaron Shahrabani [he], Changwoo Ryu [kr], Enrico Nicoletto [pt_BR], | ||||
|  Yuri Myasoedov [ru], Muhammet Kara [tr], Nguyễn Thái Ngọc Duy [vi] | ||||
|  | ||||
| 3.3.92 | ||||
| ====== | ||||
| * Automaximize large windows on map [Adel; #671677] | ||||
| * When unmaximizing windows, make sure the unminimized size | ||||
|   is signficantly less than the maximized size [Adel; #671677] | ||||
| * Don't offer maximize option for windows larger than the screen | ||||
|   [Jasper; #643606] | ||||
| * Always focus the window immediately underneath without restacking | ||||
|   when closing a window [Jasper; #620744] | ||||
| * Avoid drawing shadows when two windows are tiled together [Rui; #643075] | ||||
| * Remove tooltips for window decorations [Florian; #645101] | ||||
| * Add org.gnome.mutter.dynamic-workspaces GSetting - when this is set | ||||
|   to true, workspace counts are never saved to GSettings, avoiding | ||||
|   pointless disk traffic for GNOME dynamic workspaces [Florian; #671568] | ||||
| * Add ::grab-op-begin, ::grab-op-end signals to MetaDisplay [Jasper; #670658] | ||||
| * Add meta_display_get_ignored_modifier_mask() [Florian; #665215] | ||||
| * Remove pointless wrapper methods on MetaPlugin [Jasper; #671103] | ||||
| * Fix frame drawing with 3.3.x GTK+ releases [Florian; #671796] | ||||
| * Build fixes [Jasper, Rico, Rui] | ||||
| * Misc bug fixes [Damien, Jasper, Lionel, Marius, Owen, Rui; | ||||
|   #661256, #667437, #671601, #671087, #672374] | ||||
|  | ||||
| Contributors: | ||||
|  Stefano Facchini, Adel Gadllah, Lionel Landwerlin, Mariusz Libera, | ||||
|  Rui Matos, Florian Müllner, Jasper St. Pierre, Damien Radtke, Owen Taylor, | ||||
|  Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|  Nilamdyuti Goswami [as], Ihar Hrachyshka [be], Alexander Shopov [bg], | ||||
|  David Planella [ca], Carles Ferrando [ca@valencia], Kenneth Nielsen [dk], | ||||
|  Bruce Cowan [en_GB], Daniel Mustieles [es], Mattias Põldaru [et], | ||||
|  Inaki Larranaga Murgoitio [eu], Timo Jyrinki [fi], Fran Diéguez [gl], | ||||
|  Gabor Kelemen [hu], Changwoo Ryu [ko], Anita Reitere [lv], | ||||
|  Kjartan Maraas [nb], Wouter Bolsterlee [nl], A S Alam [pa], Piotr Drąg [pl], | ||||
|  Duarte Loreto [pt], Yuri Myasoedov [ru], Daniel Nylander [se], | ||||
|  Matej Urbančič [sl], Miroslav Nikolić [sr], Tirumurti Vasudevan [ta], | ||||
|  Sasi Bhushan [te], Daniel Korostil [uk], Nguyễn Thái Ngọc Duy [vi], | ||||
|  YunQiang Su [zh_CN], Chao-Hsiung Liao [zh_HK, zh_TW] | ||||
|  | ||||
| 3.3.90 | ||||
| ====== | ||||
| * Update for Cogl API changes [Robert] | ||||
| * Bug fixes [Adel, Jasper;  #659643] | ||||
| * Build fixes [Jasper, Owen] | ||||
|  | ||||
| Contributors: | ||||
|  Robert Bragg, Adel Gadllah, Jasper St. Pierre, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|  Ask H. Larsen [dk], Miroslav Nikolić [sr] | ||||
|  | ||||
| 3.3.5 | ||||
| ===== | ||||
| * MetaShapedTexture no longer is a ClutterTexture subclass [Jasper; #660941] | ||||
| * Add meta_shaped_texture_get_image() [Jasper; #660941] | ||||
| * Cleanups [Rui, Jasper; #657639] | ||||
| * Depend on GTK+ 3.3.7 [Rico] | ||||
|  | ||||
| Contributors: | ||||
|  Rui Matos, Jasper St. Pierre, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|  Kjartan Maraas [nb], Chao-Hsiung Liao [zh_HK, zh_TW] | ||||
|  | ||||
| 3.3.4 | ||||
| ===== | ||||
| * Adapt to changes in GtkStateFlags [Owen] | ||||
| * Redo properties for applications menu corresponding to GTK+ changes - | ||||
|   they are now _GTK_* not DBUS_*. [Ryan] | ||||
| * Fix crash on gnome-shell restart when a modal dialog is open [Owen; #668299] | ||||
| * Code cleanup [Florian; #666039] | ||||
|  | ||||
| Contributors: | ||||
|  Ryan Lortie, Florian Müllner, Owen Taylor | ||||
|  | ||||
| Translations: | ||||
|  Alexander Shopov [bg], Fran Diéguez [gl] | ||||
|  | ||||
| 3.3.3 | ||||
| ===== | ||||
| * Add keybindings for tiling to left or right [Florian; #648700] | ||||
|   | ||||
							
								
								
									
										18
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								README
									
									
									
									
									
								
							| @@ -1,16 +1,10 @@ | ||||
| Metacity is not a meta-City as in an urban center, but rather | ||||
| Meta-ness as in the state of being meta. i.e. metacity : meta as | ||||
| opacity : opaque. Also it may have something to do with the Meta key | ||||
| on UNIX keyboards. | ||||
| The original codebase named "Metacity" is not a meta-City as in an | ||||
| urban center, but rather Meta-ness as in the state of being | ||||
| meta. i.e. metacity : meta as opacity : opaque. Also it may have | ||||
| something to do with the Meta key on UNIX keyboards. | ||||
|  | ||||
| The first release of Metacity was version 2.3. Metacity has no need for | ||||
| your petty hangups about version numbers. | ||||
|  | ||||
| The stable releases so far are 2.4.x, 2.6.x, 2.8.[01], 2.8.1.x, 2.8.5-, | ||||
| 2.10.x, 2.12.x, 2.14.x, 2.16.x. | ||||
|  | ||||
| Unstable branches are 2.3.x, 2.5.x, 2.8.2-4, 2.9.x, 2.11.x, 2.13.x, | ||||
| 2.15.x, 2.17.x. | ||||
| Since then, it has been renamed mutter after a rebase on top of | ||||
| clutter as a compositing manager. | ||||
|  | ||||
| COMPILING MUTTER | ||||
| === | ||||
|   | ||||
| @@ -7,7 +7,7 @@ test -z "$srcdir" && srcdir=. | ||||
| PKG_NAME="mutter" | ||||
| REQUIRED_AUTOMAKE_VERSION=1.10 | ||||
|  | ||||
| (test -f $srcdir/configure.in \ | ||||
| (test -f $srcdir/configure.ac \ | ||||
|   && test -d $srcdir/src) || { | ||||
|     echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" | ||||
|     echo " top-level metacity directory" | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| AC_PREREQ(2.50) | ||||
| 
 | ||||
| m4_define([mutter_major_version], [3]) | ||||
| m4_define([mutter_minor_version], [3]) | ||||
| m4_define([mutter_micro_version], [3]) | ||||
| m4_define([mutter_minor_version], [9]) | ||||
| m4_define([mutter_micro_version], [2]) | ||||
| 
 | ||||
| m4_define([mutter_version], | ||||
|           [mutter_major_version.mutter_minor_version.mutter_micro_version]) | ||||
| @@ -61,12 +61,21 @@ AC_CHECK_SIZEOF(__int64) | ||||
| ## byte order | ||||
| AC_C_BIGENDIAN | ||||
| 
 | ||||
| GTK_MIN_VERSION=3.3.3 | ||||
| GIO_MIN_VERSION=2.25.10 | ||||
| CANBERRA_GTK=libcanberra-gtk3 | ||||
| CANBERRA_GTK_VERSION=0.26 | ||||
| 
 | ||||
| MUTTER_PC_MODULES="gtk+-3.0 >= $GTK_MIN_VERSION gio-2.0 >= $GIO_MIN_VERSION pango >= 1.2.0 cairo >= 1.10.0 gsettings-desktop-schemas >= 3.3.0" | ||||
| CLUTTER_PACKAGE=clutter-1.0 | ||||
| 
 | ||||
| MUTTER_PC_MODULES=" | ||||
|    gtk+-3.0 >= 3.3.7 | ||||
|    gio-2.0 >= 2.25.10 | ||||
|    pango >= 1.2.0 | ||||
|    cairo >= 1.10.0 | ||||
|    gsettings-desktop-schemas >= 3.7.3 | ||||
|    xcomposite >= 0.2 xfixes xrender xdamage xi >= 1.6.0 | ||||
|    $CLUTTER_PACKAGE >= 1.13.5 | ||||
|    cogl-1.0 >= 1.13.3 | ||||
| " | ||||
| 
 | ||||
| GLIB_GSETTINGS | ||||
| 
 | ||||
| @@ -104,17 +113,14 @@ AC_ARG_ENABLE(shape, | ||||
|                  [disable mutter's use of the shaped window extension]),, | ||||
|   enable_shape=auto) | ||||
| 
 | ||||
| ## try definining HAVE_BACKTRACE | ||||
| AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)]) | ||||
| 
 | ||||
| AM_GLIB_GNU_GETTEXT | ||||
| 
 | ||||
| ## here we get the flags we'll actually use | ||||
| # GRegex requires Glib-2.14.0 | ||||
| PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.14.0) | ||||
| # gtk_window_set_icon_name requires gtk2+-2.6.0 | ||||
| PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-3.0 >= $GTK_MIN_VERSION) | ||||
| PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0 >= $GTK_MIN_VERSION) | ||||
| PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-3.0) | ||||
| PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0) | ||||
| 
 | ||||
| # Unconditionally use this dir to avoid a circular dep with gnomecc | ||||
| GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings" | ||||
| @@ -164,31 +170,6 @@ else | ||||
|   fi | ||||
| fi | ||||
| 
 | ||||
| XCOMPOSITE_VERSION=0.2 | ||||
| 
 | ||||
| AC_MSG_CHECKING([Xcomposite >= $XCOMPOSITE_VERSION]) | ||||
| if $PKG_CONFIG --atleast-version $XCOMPOSITE_VERSION xcomposite; then | ||||
|   MUTTER_PC_MODULES="$MUTTER_PC_MODULES xcomposite >= $XCOMPOSITE_VERSION xfixes xrender xdamage" | ||||
|   AC_DEFINE(HAVE_COMPOSITE_EXTENSIONS, 1, [Building with compositing manager support]) | ||||
|   echo "Building with compositing manager" | ||||
| 
 | ||||
|   ## force on render also | ||||
|   have_xrender=yes | ||||
| else | ||||
|   AC_MSG_ERROR([no. Mutter requires the Xcomposite extension to build.]) | ||||
| fi | ||||
| 
 | ||||
| CLUTTER_VERSION=1.7.5 | ||||
| CLUTTER_PACKAGE=clutter-1.0 | ||||
| AC_SUBST(CLUTTER_PACKAGE) | ||||
| if $PKG_CONFIG --atleast-version $CLUTTER_VERSION $CLUTTER_PACKAGE ; then | ||||
|   MUTTER_PC_MODULES="$MUTTER_PC_MODULES $CLUTTER_PACKAGE " | ||||
|   PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE) | ||||
|   AC_DEFINE(WITH_CLUTTER, , [Building with Clutter compositor]) | ||||
| else | ||||
|   AC_MSG_ERROR([no. Mutter requires Clutter version $CLUTTER_VERSION.]) | ||||
| fi | ||||
| 
 | ||||
| INTROSPECTION_VERSION=0.9.5 | ||||
| GOBJECT_INTROSPECTION_CHECK([$INTROSPECTION_VERSION]) | ||||
| 
 | ||||
| @@ -220,64 +201,42 @@ fi | ||||
| 
 | ||||
| PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES) | ||||
| 
 | ||||
| PKG_CHECK_EXISTS([xi >= 1.6.99.1], | ||||
|                  AC_DEFINE([HAVE_XI23],[1],[Define if you have support for XInput 2.3 or greater])) | ||||
| 
 | ||||
| # This is used for plugins | ||||
| AC_SUBST(CLUTTER_PACKAGE) | ||||
| PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE) | ||||
| 
 | ||||
| AC_PATH_XTRA | ||||
| 
 | ||||
| ALL_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" | ||||
| 
 | ||||
| # Check for Xinerama extension (Solaris impl or Xfree impl) | ||||
| # Check for Xinerama extension - we only support the "XFree86" style, | ||||
| # and not the older Solaris-only version; recent Solaris supports the | ||||
| # XFree86 style. | ||||
| mutter_save_cppflags="$CPPFLAGS" | ||||
| CPPFLAGS="$CPPFLAGS $X_CFLAGS" | ||||
| 
 | ||||
| AC_ARG_ENABLE(xinerama, | ||||
|   AC_HELP_STRING([--disable-xinerama], | ||||
|                  [disable mutter's use of the Xinerama extension]), | ||||
|   try_xinerama=$enable_xinerama,try_xinerama=yes) | ||||
| 
 | ||||
| use_solaris_xinerama=no | ||||
| use_xfree_xinerama=no | ||||
| if test "${try_xinerama}" != no; then | ||||
|     case "$host" in | ||||
|         *-*-solaris*) | ||||
|             # Check for solaris | ||||
|             use_solaris_xinerama=yes | ||||
|             AC_CHECK_LIB(Xext, XineramaGetInfo, | ||||
|                          use_solaris_xinerama=yes, use_solaris_xinerama=no, | ||||
|                          $ALL_X_LIBS) | ||||
|             if test "x$use_solaris_xinerama" = "xyes"; then | ||||
|                 AC_CHECK_HEADER(X11/extensions/xinerama.h, | ||||
|                                 if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then | ||||
|                                     X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS" | ||||
|                                 fi | ||||
|                                 AC_DEFINE(HAVE_SOLARIS_XINERAMA, , [Have Solaris-style Xinerama]) | ||||
|                                 AC_DEFINE(HAVE_XINERAMA, , [Have some version of Xinerama]), | ||||
|                                 use_solaris_xinerama=no, | ||||
|                                 [#include <X11/Xlib.h>]) | ||||
|             fi | ||||
|             AC_MSG_CHECKING(for Xinerama support on Solaris) | ||||
|             AC_MSG_RESULT($use_solaris_xinerama); | ||||
|             ;; | ||||
|         *) | ||||
|             # Check for XFree | ||||
|             use_xfree_xinerama=yes | ||||
|             AC_CHECK_LIB(Xinerama, XineramaQueryExtension, | ||||
|                 [AC_CHECK_HEADER(X11/extensions/Xinerama.h, | ||||
|                                  X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS" | ||||
|                                  if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then | ||||
|                                      X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS" | ||||
|                                  fi | ||||
|                                  AC_DEFINE(HAVE_XFREE_XINERAMA, , [Have XFree86-style Xinerama]) | ||||
|                                  AC_DEFINE(HAVE_XINERAMA,, [Have some version of Xinerama]), | ||||
|                                  use_xfree_xinerama=no, | ||||
|                                  [#include <X11/Xlib.h>])], | ||||
|                 use_xfree_xinerama=no, -lXext $ALL_X_LIBS) | ||||
|             AC_MSG_CHECKING(for Xinerama support on XFree86) | ||||
|             AC_MSG_RESULT($use_xfree_xinerama); | ||||
|             ;; | ||||
|     esac | ||||
| fi | ||||
| have_xinerama=yes | ||||
| AC_CHECK_LIB(Xinerama, XineramaQueryExtension, | ||||
|     [AC_CHECK_HEADER(X11/extensions/Xinerama.h, | ||||
| 		     [X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS" | ||||
| 		     if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then | ||||
| 			 X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS" | ||||
| 		     fi], | ||||
| 		     have_xinerama=no, | ||||
| 		     [#include <X11/Xlib.h>])], | ||||
|     have_xinerama=no, -lXext $ALL_X_LIBS) | ||||
| AC_MSG_CHECKING(for Xinerama support) | ||||
| AC_MSG_RESULT($have_xinerama) | ||||
| 
 | ||||
| CPPFLAGS="$mutter_save_cppflags" | ||||
| 
 | ||||
| if test x$have_xinerama = xno; then | ||||
|    AC_MSG_ERROR([Xinerama extension was not found]) | ||||
| fi | ||||
| 
 | ||||
| SHAPE_LIBS= | ||||
| found_shape=no | ||||
| AC_CHECK_LIB(Xext, XShapeQueryExtension, | ||||
| @@ -405,11 +364,7 @@ if test "x$enable_debug" = "xyes"; then | ||||
| 	CFLAGS="$CFLAGS -g -O" | ||||
| fi | ||||
| 
 | ||||
| # For fix-meta-rectangle.py | ||||
| AM_PATH_PYTHON([2.5]) | ||||
| 
 | ||||
| # Use gnome-doc-utils: | ||||
| GNOME_DOC_INIT([0.8.0]) | ||||
| GTK_DOC_CHECK([1.15], [--flavour no-tmpl]) | ||||
| 
 | ||||
| #### Warnings (last since -Werror can disturb other tests) | ||||
| 
 | ||||
| @@ -470,7 +425,7 @@ if test "$enable_compile_warnings" != no ; then | ||||
|     if test "$enable_compile_warnings" = error; then | ||||
|       case " $CFLAGS " in | ||||
|       *[\ \	]-Werror[\ \	]*) ;; | ||||
|       *) CFLAGS="$CFLAGS -Werror" ;; | ||||
|       *) CFLAGS="$CFLAGS -Werror -Wno-error=deprecated-declarations" ;; | ||||
|       esac | ||||
|     fi | ||||
|   fi | ||||
| @@ -481,6 +436,8 @@ AC_CONFIG_FILES([ | ||||
| Makefile | ||||
| doc/Makefile | ||||
| doc/man/Makefile | ||||
| doc/reference/Makefile | ||||
| doc/reference/meta-docs.sgml | ||||
| src/Makefile | ||||
| src/wm-tester/Makefile | ||||
| src/libmutter.pc | ||||
| @@ -508,8 +465,6 @@ mutter-$VERSION | ||||
| 	source code location:	  ${srcdir} | ||||
| 	compiler:		  ${CC} | ||||
| 
 | ||||
| 	XFree86 Xinerama:         ${use_xfree_xinerama} | ||||
| 	Solaris Xinerama:         ${use_solaris_xinerama} | ||||
| 	Startup notification:     ${have_startup_notification} | ||||
| 	libcanberra:              ${have_libcanberra} | ||||
| 	Introspection:            ${found_introspection} | ||||
| @@ -524,8 +479,8 @@ MUTTER_MINOR_VERSION=mutter_minor_version | ||||
| if expr $MUTTER_MINOR_VERSION % 2 > /dev/null ; then | ||||
|    stable_version=`expr $MUTTER_MINOR_VERSION - 1` | ||||
|    echo "This is the UNSTABLE branch of mutter" | ||||
|    echo -n "Use 2.$stable_version.x for stable " | ||||
|    echo    "(gnome-2-$stable_version branch in git)" | ||||
|    echo -n "Use 3.$stable_version.x for stable " | ||||
|    echo    "(gnome-3-$stable_version branch in git)" | ||||
| else | ||||
|    echo "This is the stable branch of mutter" | ||||
| fi | ||||
| @@ -1,4 +1,4 @@ | ||||
| SUBDIRS = man | ||||
| SUBDIRS = man reference | ||||
|  | ||||
| EXTRA_DIST=theme-format.txt dialogs.txt code-overview.txt \ | ||||
| 	how-to-get-focus-right.txt | ||||
|   | ||||
| @@ -31,8 +31,7 @@ workspaces.  In these cases, there needs to be a rule consistent with | ||||
| the above about the new window to choose. | ||||
|  | ||||
| Focus method  Behavior | ||||
|     click     Focus the most recently used window (same as the window | ||||
|               on top) | ||||
|     click     Focus the window on top | ||||
|    sloppy     Focus the window containing the pointer if there is such | ||||
|               a window, otherwise focus the most recently used window. | ||||
|     mouse     Focus the non-DESKTOP window containing the pointer if | ||||
|   | ||||
							
								
								
									
										166
									
								
								doc/reference/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								doc/reference/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,166 @@ | ||||
| ## Process this file with automake to produce Makefile.in | ||||
|  | ||||
| # We require automake 1.6 at least. | ||||
| AUTOMAKE_OPTIONS = 1.6 | ||||
|  | ||||
| # This is a blank Makefile.am for using gtk-doc. | ||||
| # Copy this to your project's API docs directory and modify the variables to | ||||
| # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples | ||||
| # of using the various options. | ||||
|  | ||||
| # The name of the module, e.g. 'glib'. | ||||
| DOC_MODULE=meta | ||||
|  | ||||
| # Uncomment for versioned docs and specify the version of the module, e.g. '2'. | ||||
| #DOC_MODULE_VERSION=2 | ||||
|  | ||||
|  | ||||
| # The top-level SGML file. You can change this if you want to. | ||||
| DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml | ||||
|  | ||||
| # Directories containing the source code, relative to $(srcdir). | ||||
| # gtk-doc will search all .c and .h files beneath these paths | ||||
| # for inline comments documenting functions and macros. | ||||
| # e.g. DOC_SOURCE_DIR=../../../gtk ../../../gdk | ||||
| DOC_SOURCE_DIR=../../src/ | ||||
|  | ||||
| # Extra options to pass to gtkdoc-scangobj. Not normally needed. | ||||
| SCANGOBJ_OPTIONS= | ||||
|  | ||||
| # Extra options to supply to gtkdoc-scan. | ||||
| # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" | ||||
| SCAN_OPTIONS=--rebuild-types | ||||
|  | ||||
| # Extra options to supply to gtkdoc-mkdb. | ||||
| # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml | ||||
| MKDB_OPTIONS=--xml-mode --output-format=xml | ||||
|  | ||||
| # Extra options to supply to gtkdoc-mktmpl | ||||
| # e.g. MKTMPL_OPTIONS=--only-section-tmpl | ||||
| MKTMPL_OPTIONS= | ||||
|  | ||||
| # Extra options to supply to gtkdoc-mkhtml | ||||
| MKHTML_OPTIONS= | ||||
|  | ||||
| # Extra options to supply to gtkdoc-fixref. Not normally needed. | ||||
| # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html | ||||
| FIXXREF_OPTIONS= | ||||
|  | ||||
| # Used for dependencies. The docs will be rebuilt if any of these change. | ||||
| # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h | ||||
| # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c | ||||
| HFILE_GLOB=$(top_srcdir)/src/*.h | ||||
| CFILE_GLOB=$(top_srcdir)/src/*.c | ||||
|  | ||||
| # Extra header to include when scanning, which are not under DOC_SOURCE_DIR | ||||
| # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h | ||||
| EXTRA_HFILES= | ||||
|  | ||||
| # Header files or dirs to ignore when scanning. Use base file/dir names | ||||
| # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code | ||||
| IGNORE_HFILES= \ | ||||
| 	async-getprop.h \ | ||||
| 	atoms.h \ | ||||
| 	bell.h \ | ||||
| 	boxes-private.h \ | ||||
| 	clutter-utils.h \ | ||||
| 	cogl-utils.h \ | ||||
| 	compositor-private.h \ | ||||
| 	constraints.h \ | ||||
| 	core.h \ | ||||
| 	display-private.h \ | ||||
| 	draw-workspace.h \ | ||||
| 	edge-resistance.h \ | ||||
| 	eventqueue.h \ | ||||
| 	frame.h \ | ||||
| 	frames.h \ | ||||
| 	group-private.h \ | ||||
| 	group-props.h \ | ||||
| 	iconcache.h \ | ||||
| 	inlinepixbufs.h \ | ||||
| 	keybindings-private.h \ | ||||
| 	menu.h \ | ||||
| 	metaaccellabel.h \ | ||||
| 	meta-background-actor-private.h \ | ||||
| 	meta-background-group-private.h \ | ||||
| 	meta-module.h \ | ||||
| 	meta-plugin-manager.h \ | ||||
| 	meta-shadow-factory-private.h \ | ||||
| 	meta-texture-rectangle.h \ | ||||
| 	meta-texture-tower.h \ | ||||
| 	meta-window-actor-private.h \ | ||||
| 	meta-window-group.h \ | ||||
| 	meta-window-shape.h \ | ||||
| 	mutter-enum-types.h \ | ||||
| 	mutter-Xatomtype.h \ | ||||
| 	place.h \ | ||||
| 	preview-widget.h \ | ||||
| 	region-utils.h \ | ||||
| 	resizepopup.h \ | ||||
| 	screen-private.h \ | ||||
| 	session.h \ | ||||
| 	stack.h \ | ||||
| 	stack-tracker.h \ | ||||
| 	stamp-mutter-enum-types.h \ | ||||
| 	tabpopup.h \ | ||||
| 	theme.h \ | ||||
| 	theme-private.h \ | ||||
| 	tile-preview.h \ | ||||
| 	ui.h \ | ||||
| 	window-private.h \ | ||||
| 	window-props.h \ | ||||
| 	workspace-private.h \ | ||||
| 	xprops.h \ | ||||
| 	$(NULL) | ||||
|  | ||||
| MKDB_OPTIONS+=--ignore-files="$(IGNORE_HFILES)" | ||||
|  | ||||
| # Images to copy into HTML directory. | ||||
| # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png | ||||
| HTML_IMAGES= | ||||
|  | ||||
| # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). | ||||
| # e.g. content_files=running.sgml building.sgml changes-2.0.sgml | ||||
| content_files= \ | ||||
| 	mutter-overview.xml \ | ||||
| 	running-mutter.xml \ | ||||
| 	$(NULL) | ||||
|  | ||||
| # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded | ||||
| # These files must be listed here *and* in content_files | ||||
| # e.g. expand_content_files=running.sgml | ||||
| expand_content_files= \ | ||||
| 	mutter-overview.xml \ | ||||
| 	running-mutter.xml \ | ||||
| 	$(NULL) | ||||
|  | ||||
| # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. | ||||
| # Only needed if you are using gtkdoc-scangobj to dynamically query widget | ||||
| # signals and properties. | ||||
| # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) | ||||
| # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) | ||||
| GTKDOC_CFLAGS=$(MUTTER_CFLAGS) | ||||
| GTKDOC_LIBS=$(MUTTER_LIBS) $(top_builddir)/src/libmutter.la | ||||
|  | ||||
| # This includes the standard gtk-doc make rules, copied by gtkdocize. | ||||
| include $(top_srcdir)/gtk-doc.make | ||||
|  | ||||
| # Other files to distribute | ||||
| # e.g. EXTRA_DIST += version.xml.in | ||||
| EXTRA_DIST += | ||||
|  | ||||
| # Files not to distribute | ||||
| # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types | ||||
| # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt | ||||
| DISTCLEANFILES = $(DOC_MODULES).types | ||||
|  | ||||
| # Comment this out if you want 'make check' to test you doc status | ||||
| # and run some sanity checks | ||||
| if ENABLE_GTK_DOC | ||||
| TESTS_ENVIRONMENT = cd $(srcdir) && \ | ||||
|   DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ | ||||
|   SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) | ||||
| #TESTS = $(GTKDOC_CHECK) | ||||
| endif | ||||
|  | ||||
| -include $(top_srcdir)/git.mk | ||||
							
								
								
									
										59
									
								
								doc/reference/meta-docs.sgml.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								doc/reference/meta-docs.sgml.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| <?xml version="1.0"?> | ||||
| <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" | ||||
|                "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" | ||||
| [ | ||||
|   <!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'"> | ||||
|   <!ENTITY version "@VERSION@"> | ||||
| ]> | ||||
| <book id="index"> | ||||
|   <bookinfo> | ||||
|     <title>Mutter Reference Manual</title> | ||||
|     <releaseinfo> | ||||
|       This document is for Mutter &version;. | ||||
|       The latest version of this documentation can be found on-line at | ||||
|       <ulink role="online-location" url="http://developer.gnome.org/meta/">http://developer.gnome.org/meta/</ulink>. | ||||
|     </releaseinfo> | ||||
|   </bookinfo> | ||||
|  | ||||
|   <xi:include href="xml/mutter-overview.xml"/> | ||||
|   <xi:include href="xml/running-mutter.xml"/> | ||||
|  | ||||
|   <part id="core-reference"> | ||||
|     <title>Mutter Core Reference</title> | ||||
|     <xi:include href="xml/main.xml"/> | ||||
|     <xi:include href="xml/common.xml"/> | ||||
|     <xi:include href="xml/gradient.xml"/> | ||||
|     <xi:include href="xml/prefs.xml"/> | ||||
|     <xi:include href="xml/util.xml"/> | ||||
|     <xi:include href="xml/errors.xml"/> | ||||
|     <xi:include href="xml/meta-plugin.xml"/> | ||||
|     <xi:include href="xml/barrier.xml"/> | ||||
|     <xi:include href="xml/boxes.xml"/> | ||||
|     <xi:include href="xml/compositor.xml"/> | ||||
|     <xi:include href="xml/display.xml"/> | ||||
|     <xi:include href="xml/group.xml"/> | ||||
|     <xi:include href="xml/keybindings.xml"/> | ||||
|     <xi:include href="xml/meta-background-actor.xml"/> | ||||
|     <xi:include href="xml/meta-shadow-factory.xml"/> | ||||
|     <xi:include href="xml/meta-shaped-texture.xml"/> | ||||
|     <xi:include href="xml/meta-window-actor.xml"/> | ||||
|     <xi:include href="xml/screen.xml"/> | ||||
|     <xi:include href="xml/window.xml"/> | ||||
|     <xi:include href="xml/workspace.xml"/> | ||||
|   </part> | ||||
|  | ||||
|   <chapter id="object-tree"> | ||||
|     <title>Object Hierarchy</title> | ||||
|      <xi:include href="xml/tree_index.sgml"/> | ||||
|   </chapter> | ||||
|   <index id="api-index-full"> | ||||
|     <title>API Index</title> | ||||
|     <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include> | ||||
|   </index> | ||||
|   <index id="deprecated-api-index" role="deprecated"> | ||||
|     <title>Index of deprecated API</title> | ||||
|     <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include> | ||||
|   </index> | ||||
|  | ||||
|   <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include> | ||||
| </book> | ||||
							
								
								
									
										667
									
								
								doc/reference/meta-sections.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										667
									
								
								doc/reference/meta-sections.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,667 @@ | ||||
| <SECTION> | ||||
| <FILE>barrier</FILE> | ||||
| <TITLE>MetaBarrier</TITLE> | ||||
| MetaBarrier | ||||
| MetaBarrierClass | ||||
| meta_barrier_is_active | ||||
| meta_barrier_destroy | ||||
| meta_barrier_release | ||||
| MetaBarrierDirection | ||||
| MetaBarrierEvent | ||||
| <SUBSECTION Standard> | ||||
| META_BARRIER | ||||
| META_BARRIER_CLASS | ||||
| META_BARRIER_GET_CLASS | ||||
| META_IS_BARRIER | ||||
| META_IS_BARRIER_CLASS | ||||
| META_TYPE_BARRIER | ||||
| META_TYPE_BARRIER_EVENT | ||||
| MetaBarrierPrivate | ||||
| meta_barrier_event_get_type | ||||
| meta_barrier_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>boxes</FILE> | ||||
| MetaRectangle | ||||
| MetaStrut | ||||
| MetaEdgeType | ||||
| MetaEdge | ||||
| meta_rectangle_copy | ||||
| meta_rectangle_free | ||||
| meta_rect | ||||
| meta_rectangle_area | ||||
| meta_rectangle_intersect | ||||
| meta_rectangle_equal | ||||
| meta_rectangle_union | ||||
| meta_rectangle_overlap | ||||
| meta_rectangle_vert_overlap | ||||
| meta_rectangle_horiz_overlap | ||||
| meta_rectangle_could_fit_rect | ||||
| meta_rectangle_contains_rect | ||||
| <SUBSECTION Standard> | ||||
| META_TYPE_RECTANGLE | ||||
| meta_rectangle_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>common</FILE> | ||||
| META_VIRTUAL_CORE_POINTER_ID | ||||
| META_VIRTUAL_CORE_KEYBOARD_ID | ||||
| MetaFrameFlags | ||||
| MetaMenuOp | ||||
| MetaWindowMenuFunc | ||||
| MetaGrabOp | ||||
| MetaCursor | ||||
| MetaFrameType | ||||
| MetaVirtualModifier | ||||
| MetaDirection | ||||
| MetaMotionDirection | ||||
| MetaSide | ||||
| MetaButtonFunction | ||||
| MAX_BUTTONS_PER_CORNER | ||||
| MetaButtonLayout | ||||
| MetaFrameBorders | ||||
| meta_frame_borders_clear | ||||
| META_ICON_WIDTH | ||||
| META_ICON_HEIGHT | ||||
| META_MINI_ICON_WIDTH | ||||
| META_MINI_ICON_HEIGHT | ||||
| META_DEFAULT_ICON_NAME | ||||
| META_PRIORITY_RESIZE | ||||
| META_PRIORITY_BEFORE_REDRAW | ||||
| META_PRIORITY_REDRAW | ||||
| META_PRIORITY_PREFS_NOTIFY | ||||
| POINT_IN_RECT | ||||
| MetaStackLayer | ||||
| MetaWindowMenu | ||||
| MetaResizePopup | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>compositor</FILE> | ||||
| MetaCompEffect | ||||
| MetaCompositor | ||||
| meta_compositor_new | ||||
| meta_compositor_destroy | ||||
| meta_compositor_manage_screen | ||||
| meta_compositor_unmanage_screen | ||||
| meta_compositor_window_shape_changed | ||||
| meta_compositor_process_event | ||||
| meta_compositor_filter_keybinding | ||||
| meta_compositor_add_window | ||||
| meta_compositor_remove_window | ||||
| meta_compositor_show_window | ||||
| meta_compositor_hide_window | ||||
| meta_compositor_switch_workspace | ||||
| meta_compositor_maximize_window | ||||
| meta_compositor_unmaximize_window | ||||
| meta_compositor_window_mapped | ||||
| meta_compositor_window_unmapped | ||||
| meta_compositor_sync_window_geometry | ||||
| meta_compositor_set_updates_frozen | ||||
| meta_compositor_queue_frame_drawn | ||||
| meta_compositor_sync_stack | ||||
| meta_compositor_sync_screen_size | ||||
| meta_compositor_flash_screen | ||||
| meta_get_stage_for_screen | ||||
| meta_get_overlay_group_for_screen | ||||
| meta_get_overlay_window | ||||
| meta_get_window_actors | ||||
| meta_get_window_group_for_screen | ||||
| meta_get_top_window_group_for_screen | ||||
| meta_disable_unredirect_for_screen | ||||
| meta_enable_unredirect_for_screen | ||||
| meta_set_stage_input_region | ||||
| meta_empty_stage_input_region | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>display</FILE> | ||||
| MetaTabList | ||||
| MetaTabShowType | ||||
| meta_XFree | ||||
| meta_display_get_compositor_version | ||||
| meta_display_get_xinput_opcode | ||||
| meta_display_supports_extended_barriers | ||||
| meta_display_get_xdisplay | ||||
| meta_display_get_compositor | ||||
| meta_display_get_screens | ||||
| meta_display_has_shape | ||||
| meta_display_screen_for_root | ||||
| meta_display_get_focus_window | ||||
| meta_display_xwindow_is_a_no_focus_window | ||||
| meta_display_get_damage_event_base | ||||
| meta_display_get_shape_event_base | ||||
| meta_display_xserver_time_is_before | ||||
| meta_display_get_last_user_time | ||||
| meta_display_get_current_time | ||||
| meta_display_get_current_time_roundtrip | ||||
| meta_display_get_ignored_modifier_mask | ||||
| meta_display_get_tab_list | ||||
| meta_display_get_tab_next | ||||
| meta_display_get_tab_current | ||||
| meta_display_begin_grab_op | ||||
| meta_display_end_grab_op | ||||
| meta_display_get_grab_op | ||||
| meta_display_add_keybinding | ||||
| meta_display_remove_keybinding | ||||
| meta_display_get_keybinding_action | ||||
| meta_display_set_input_focus_window | ||||
| meta_display_focus_the_no_focus_window | ||||
| meta_display_sort_windows_by_stacking | ||||
| meta_display_get_leader_window | ||||
| meta_display_add_ignored_crossing_serial | ||||
| meta_display_unmanage_screen | ||||
| meta_display_clear_mouse_mode | ||||
| MetaDisplay | ||||
| MetaDisplayClass | ||||
| <SUBSECTION Standard> | ||||
| META_DISPLAY | ||||
| META_DISPLAY_CLASS | ||||
| META_DISPLAY_GET_CLASS | ||||
| META_IS_DISPLAY | ||||
| META_IS_DISPLAY_CLASS | ||||
| META_TYPE_DISPLAY | ||||
| meta_display_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>errors</FILE> | ||||
| meta_error_trap_push | ||||
| meta_error_trap_pop | ||||
| meta_error_trap_push_with_return | ||||
| meta_error_trap_pop_with_return | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>gradient</FILE> | ||||
| MetaGradientType | ||||
| meta_gradient_create_simple | ||||
| meta_gradient_create_multi | ||||
| meta_gradient_create_interwoven | ||||
| meta_gradient_add_alpha | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>group</FILE> | ||||
| MetaGroup | ||||
| meta_window_get_group | ||||
| meta_window_compute_group | ||||
| meta_window_shutdown_group | ||||
| meta_window_group_leader_changed | ||||
| meta_display_lookup_group | ||||
| meta_group_list_windows | ||||
| meta_group_update_layers | ||||
| meta_group_get_startup_id | ||||
| meta_group_get_size | ||||
| meta_group_property_notify | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>keybindings</FILE> | ||||
| MetaKeyBinding | ||||
| META_TYPE_KEY_BINDING | ||||
| meta_key_binding_get_name | ||||
| meta_key_binding_get_modifiers | ||||
| meta_key_binding_get_mask | ||||
| meta_key_binding_is_builtin | ||||
| meta_keybindings_set_custom_handler | ||||
| meta_keybindings_switch_window | ||||
| meta_screen_ungrab_all_keys | ||||
| meta_screen_grab_all_keys | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>main</FILE> | ||||
| meta_get_option_context | ||||
| meta_init | ||||
| meta_run | ||||
| meta_get_replace_current_wm | ||||
| meta_set_wm_name | ||||
| meta_set_gnome_wm_keybindings | ||||
| MetaExitCode | ||||
| meta_exit | ||||
| meta_quit | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-background</FILE> | ||||
| <TITLE>MetaBackground</TITLE> | ||||
| MetaBackgroundEffects | ||||
| MetaBackground | ||||
| MetaBackgroundClass | ||||
| meta_background_new | ||||
| meta_background_copy | ||||
| meta_background_load_gradient | ||||
| meta_background_load_color | ||||
| meta_background_load_still_frame | ||||
| meta_background_load_file_async | ||||
| meta_background_load_file_finish | ||||
| meta_background_get_filename | ||||
| meta_background_get_style | ||||
| meta_background_get_shading | ||||
| meta_background_get_color | ||||
| meta_background_get_second_color | ||||
| <SUBSECTION Standard> | ||||
| META_BACKGROUND | ||||
| META_BACKGROUND_CLASS | ||||
| META_BACKGROUND_GET_CLASS | ||||
| META_IS_BACKGROUND | ||||
| META_IS_BACKGROUND_CLASS | ||||
| META_TYPE_BACKGROUND | ||||
| MetaBackgroundPrivate | ||||
| meta_background_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-background-actor</FILE> | ||||
| <TITLE>MetaBackgroundActor</TITLE> | ||||
| MetaBackgroundActor | ||||
| MetaBackgroundActorClass | ||||
| meta_background_actor_new_for_screen | ||||
| MetaSnippetHook | ||||
| meta_background_actor_add_glsl_snippet | ||||
| meta_background_actor_set_uniform_float | ||||
| <SUBSECTION Standard> | ||||
| META_BACKGROUND_ACTOR | ||||
| META_BACKGROUND_ACTOR_CLASS | ||||
| META_BACKGROUND_ACTOR_GET_CLASS | ||||
| META_IS_BACKGROUND_ACTOR | ||||
| META_IS_BACKGROUND_ACTOR_CLASS | ||||
| META_TYPE_BACKGROUND_ACTOR | ||||
| MetaBackgroundActorPrivate | ||||
| meta_background_actor_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-background-group</FILE> | ||||
| <TITLE>MetaBackgroundGroup</TITLE> | ||||
| MetaBackgroundGroupClass | ||||
| meta_background_group_new | ||||
| <SUBSECTION Standard> | ||||
| META_BACKGROUND_GROUP | ||||
| META_BACKGROUND_GROUP_CLASS | ||||
| META_BACKGROUND_GROUP_GET_CLASS | ||||
| META_IS_BACKGROUND_GROUP | ||||
| META_IS_BACKGROUND_GROUP_CLASS | ||||
| META_TYPE_BACKGROUND_GROUP | ||||
| MetaBackgroundGroupPrivate | ||||
| meta_background_group_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-plugin</FILE> | ||||
| <TITLE>MetaPlugin</TITLE> | ||||
| MetaPlugin | ||||
| MetaPluginClass | ||||
| MetaPluginInfo | ||||
| meta_plugin_running | ||||
| meta_plugin_debug_mode | ||||
| meta_plugin_get_info | ||||
| MetaPluginVersion | ||||
| META_PLUGIN_DECLARE | ||||
| meta_plugin_switch_workspace_completed | ||||
| meta_plugin_minimize_completed | ||||
| meta_plugin_maximize_completed | ||||
| meta_plugin_unmaximize_completed | ||||
| meta_plugin_map_completed | ||||
| meta_plugin_destroy_completed | ||||
| MetaModalOptions | ||||
| meta_plugin_begin_modal | ||||
| meta_plugin_end_modal | ||||
| meta_plugin_get_screen | ||||
| meta_plugin_manager_set_plugin_type | ||||
| <SUBSECTION Standard> | ||||
| META_IS_PLUGIN | ||||
| META_IS_PLUGIN_CLASS | ||||
| META_PLUGIN | ||||
| META_PLUGIN_CLASS | ||||
| META_PLUGIN_GET_CLASS | ||||
| META_TYPE_PLUGIN | ||||
| MetaPluginPrivate | ||||
| meta_plugin_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-shadow-factory</FILE> | ||||
| MetaShadowParams | ||||
| meta_shadow_factory_get_default | ||||
| meta_shadow_factory_set_params | ||||
| meta_shadow_factory_get_params | ||||
| MetaShadowFactory | ||||
| MetaShadowFactoryClass | ||||
| <SUBSECTION Standard> | ||||
| META_IS_SHADOW_FACTORY | ||||
| META_IS_SHADOW_FACTORY_CLASS | ||||
| META_SHADOW_FACTORY | ||||
| META_SHADOW_FACTORY_CLASS | ||||
| META_SHADOW_FACTORY_GET_CLASS | ||||
| META_TYPE_SHADOW_FACTORY | ||||
| meta_shadow_factory_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-shaped-texture</FILE> | ||||
| <TITLE>MetaShapedTexture</TITLE> | ||||
| MetaShapedTexture | ||||
| MetaShapedTextureClass | ||||
| meta_shaped_texture_new | ||||
| meta_shaped_texture_set_create_mipmaps | ||||
| meta_shaped_texture_update_area | ||||
| meta_shaped_texture_set_pixmap | ||||
| meta_shaped_texture_get_texture | ||||
| meta_shaped_texture_set_mask_texture | ||||
| meta_shaped_texture_set_clip_region | ||||
| meta_shaped_texture_get_image | ||||
| <SUBSECTION Standard> | ||||
| META_IS_SHAPED_TEXTURE | ||||
| META_IS_SHAPED_TEXTURE_CLASS | ||||
| META_SHAPED_TEXTURE | ||||
| META_SHAPED_TEXTURE_CLASS | ||||
| META_SHAPED_TEXTURE_GET_CLASS | ||||
| META_TYPE_SHAPED_TEXTURE | ||||
| MetaShapedTexturePrivate | ||||
| meta_shaped_texture_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-window-actor</FILE> | ||||
| <TITLE>MetaWindowActor</TITLE> | ||||
| MetaWindowActor | ||||
| MetaWindowActorClass | ||||
| meta_window_actor_get_x_window | ||||
| meta_window_actor_get_workspace | ||||
| meta_window_actor_get_meta_window | ||||
| meta_window_actor_get_texture | ||||
| meta_window_actor_is_override_redirect | ||||
| meta_window_actor_get_description | ||||
| meta_window_actor_showing_on_its_workspace | ||||
| meta_window_actor_is_destroyed | ||||
| <SUBSECTION Standard> | ||||
| META_IS_WINDOW_ACTOR | ||||
| META_IS_WINDOW_ACTOR_CLASS | ||||
| META_TYPE_WINDOW_ACTOR | ||||
| META_WINDOW_ACTOR | ||||
| META_WINDOW_ACTOR_CLASS | ||||
| META_WINDOW_ACTOR_GET_CLASS | ||||
| MetaWindowActorPrivate | ||||
| meta_window_actor_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>prefs</FILE> | ||||
| MetaPreference | ||||
| MetaPrefsChangedFunc | ||||
| meta_prefs_add_listener | ||||
| meta_prefs_remove_listener | ||||
| meta_prefs_init | ||||
| meta_prefs_override_preference_schema | ||||
| meta_preference_to_string | ||||
| meta_prefs_get_mouse_button_mods | ||||
| meta_prefs_get_mouse_button_resize | ||||
| meta_prefs_get_mouse_button_menu | ||||
| meta_prefs_get_focus_mode | ||||
| meta_prefs_get_focus_new_windows | ||||
| meta_prefs_get_attach_modal_dialogs | ||||
| meta_prefs_get_raise_on_click | ||||
| meta_prefs_get_theme | ||||
| meta_prefs_get_titlebar_font | ||||
| meta_prefs_get_num_workspaces | ||||
| meta_prefs_get_dynamic_workspaces | ||||
| meta_prefs_get_application_based | ||||
| meta_prefs_get_disable_workarounds | ||||
| meta_prefs_get_auto_raise | ||||
| meta_prefs_get_auto_raise_delay | ||||
| meta_prefs_get_focus_change_on_pointer_rest | ||||
| meta_prefs_get_gnome_accessibility | ||||
| meta_prefs_get_gnome_animations | ||||
| meta_prefs_get_edge_tiling | ||||
| meta_prefs_get_auto_maximize | ||||
| meta_prefs_get_button_layout | ||||
| meta_prefs_get_action_double_click_titlebar | ||||
| meta_prefs_get_action_middle_click_titlebar | ||||
| meta_prefs_get_action_right_click_titlebar | ||||
| meta_prefs_set_num_workspaces | ||||
| meta_prefs_get_workspace_name | ||||
| meta_prefs_change_workspace_name | ||||
| meta_prefs_get_cursor_theme | ||||
| meta_prefs_get_cursor_size | ||||
| meta_prefs_get_compositing_manager | ||||
| meta_prefs_get_force_fullscreen | ||||
| meta_prefs_set_force_fullscreen | ||||
| meta_prefs_get_workspaces_only_on_primary | ||||
| meta_prefs_get_no_tab_popup | ||||
| meta_prefs_set_no_tab_popup | ||||
| meta_prefs_get_draggable_border_width | ||||
| meta_prefs_get_ignore_request_hide_titlebar | ||||
| meta_prefs_set_ignore_request_hide_titlebar | ||||
| MetaKeyBindingAction | ||||
| MetaKeyBindingFlags | ||||
| MetaKeyCombo | ||||
| MetaKeyHandlerFunc | ||||
| meta_prefs_get_keybindings | ||||
| meta_prefs_get_keybinding_action | ||||
| meta_prefs_get_window_binding | ||||
| meta_prefs_get_overlay_binding | ||||
| meta_prefs_get_visual_bell | ||||
| meta_prefs_bell_is_audible | ||||
| meta_prefs_get_visual_bell_type | ||||
| MetaKeyHandler | ||||
| <SUBSECTION Standard> | ||||
| meta_key_binding_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>screen</FILE> | ||||
| MetaScreen | ||||
| MetaScreenClass | ||||
| meta_screen_get_screen_number | ||||
| meta_screen_get_display | ||||
| meta_screen_get_xroot | ||||
| meta_screen_get_size | ||||
| meta_screen_get_compositor_data | ||||
| meta_screen_set_compositor_data | ||||
| meta_screen_for_x_screen | ||||
| meta_screen_set_cm_selection | ||||
| meta_screen_unset_cm_selection | ||||
| meta_screen_get_startup_sequences | ||||
| meta_screen_get_workspaces | ||||
| meta_screen_get_n_workspaces | ||||
| meta_screen_get_workspace_by_index | ||||
| meta_screen_remove_workspace | ||||
| meta_screen_append_new_workspace | ||||
| meta_screen_get_active_workspace_index | ||||
| meta_screen_get_active_workspace | ||||
| meta_screen_get_n_monitors | ||||
| meta_screen_get_primary_monitor | ||||
| meta_screen_get_current_monitor | ||||
| meta_screen_get_monitor_geometry | ||||
| meta_screen_get_monitor_index_for_rect | ||||
| meta_screen_focus_default_window | ||||
| MetaScreenCorner | ||||
| meta_screen_override_workspace_layout | ||||
| <SUBSECTION Standard> | ||||
| META_IS_SCREEN | ||||
| META_IS_SCREEN_CLASS | ||||
| META_SCREEN | ||||
| META_SCREEN_CLASS | ||||
| META_SCREEN_GET_CLASS | ||||
| META_TYPE_SCREEN | ||||
| meta_screen_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>util</FILE> | ||||
| meta_is_verbose | ||||
| meta_set_verbose | ||||
| meta_is_debugging | ||||
| meta_set_debugging | ||||
| meta_is_syncing | ||||
| meta_set_syncing | ||||
| meta_set_replace_current_wm | ||||
| meta_debug_spew_real | ||||
| meta_verbose_real | ||||
| meta_bug | ||||
| meta_warning | ||||
| meta_fatal | ||||
| MetaDebugTopic | ||||
| meta_topic_real | ||||
| meta_add_verbose_topic | ||||
| meta_remove_verbose_topic | ||||
| meta_push_no_msg_prefix | ||||
| meta_pop_no_msg_prefix | ||||
| meta_unsigned_long_equal | ||||
| meta_unsigned_long_hash | ||||
| meta_frame_type_to_string | ||||
| meta_gravity_to_string | ||||
| _ | ||||
| N_ | ||||
| meta_g_utf8_strndup | ||||
| meta_free_gslist_and_elements | ||||
| meta_show_dialog | ||||
| meta_debug_spew | ||||
| meta_verbose | ||||
| meta_topic | ||||
| MetaLaterType | ||||
| meta_later_add | ||||
| meta_later_remove | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>window</FILE> | ||||
| MetaWindow | ||||
| MetaWindowClass | ||||
| MetaWindowType | ||||
| MetaMaximizeFlags | ||||
| meta_window_get_frame | ||||
| meta_window_has_focus | ||||
| meta_window_appears_focused | ||||
| meta_window_is_shaded | ||||
| meta_window_is_monitor_sized | ||||
| meta_window_is_override_redirect | ||||
| meta_window_is_skip_taskbar | ||||
| meta_window_get_rect | ||||
| meta_window_get_input_rect | ||||
| meta_window_get_outer_rect | ||||
| meta_window_get_screen | ||||
| meta_window_get_display | ||||
| meta_window_get_xwindow | ||||
| meta_window_get_window_type | ||||
| meta_window_get_window_type_atom | ||||
| meta_window_get_workspace | ||||
| meta_window_get_monitor | ||||
| meta_window_is_on_all_workspaces | ||||
| meta_window_located_on_workspace | ||||
| meta_window_is_hidden | ||||
| meta_window_activate | ||||
| meta_window_activate_with_workspace | ||||
| meta_window_get_description | ||||
| meta_window_get_wm_class | ||||
| meta_window_get_wm_class_instance | ||||
| meta_window_showing_on_its_workspace | ||||
| meta_window_get_gtk_application_id | ||||
| meta_window_get_gtk_unique_bus_name | ||||
| meta_window_get_gtk_application_object_path | ||||
| meta_window_get_gtk_window_object_path | ||||
| meta_window_get_gtk_app_menu_object_path | ||||
| meta_window_get_gtk_menubar_object_path | ||||
| meta_window_move | ||||
| meta_window_move_frame | ||||
| meta_window_move_resize_frame | ||||
| meta_window_move_to_monitor | ||||
| meta_window_resize | ||||
| meta_window_set_demands_attention | ||||
| meta_window_unset_demands_attention | ||||
| meta_window_get_startup_id | ||||
| meta_window_change_workspace_by_index | ||||
| meta_window_change_workspace | ||||
| meta_window_get_compositor_private | ||||
| meta_window_set_compositor_private | ||||
| meta_window_configure_notify | ||||
| meta_window_get_role | ||||
| meta_window_get_layer | ||||
| meta_window_find_root_ancestor | ||||
| meta_window_is_ancestor_of_transient | ||||
| MetaWindowForeachFunc | ||||
| meta_window_foreach_transient | ||||
| meta_window_foreach_ancestor | ||||
| meta_window_get_maximized | ||||
| meta_window_is_fullscreen | ||||
| meta_window_is_on_primary_monitor | ||||
| meta_window_requested_bypass_compositor | ||||
| meta_window_requested_dont_bypass_compositor | ||||
| meta_window_is_mapped | ||||
| meta_window_toplevel_is_mapped | ||||
| meta_window_get_icon_geometry | ||||
| meta_window_set_icon_geometry | ||||
| meta_window_maximize | ||||
| meta_window_unmaximize | ||||
| meta_window_minimize | ||||
| meta_window_unminimize | ||||
| meta_window_raise | ||||
| meta_window_lower | ||||
| meta_window_get_title | ||||
| meta_window_get_transient_for | ||||
| meta_window_get_transient_for_as_xid | ||||
| meta_window_delete | ||||
| meta_window_get_stable_sequence | ||||
| meta_window_get_user_time | ||||
| meta_window_get_pid | ||||
| meta_window_get_client_machine | ||||
| meta_window_is_remote | ||||
| meta_window_is_modal | ||||
| meta_window_is_attached_dialog | ||||
| meta_window_get_mutter_hints | ||||
| meta_window_get_frame_type | ||||
| meta_window_get_frame_bounds | ||||
| meta_window_get_tile_match | ||||
| meta_window_make_fullscreen | ||||
| meta_window_unmake_fullscreen | ||||
| meta_window_make_above | ||||
| meta_window_unmake_above | ||||
| meta_window_shade | ||||
| meta_window_unshade | ||||
| meta_window_stick | ||||
| meta_window_unstick | ||||
| meta_window_kill | ||||
| meta_window_focus | ||||
| meta_window_check_alive | ||||
| meta_window_get_work_area_current_monitor | ||||
| meta_window_get_work_area_for_monitor | ||||
| meta_window_get_work_area_all_monitors | ||||
| meta_window_begin_grab_op | ||||
| <SUBSECTION Standard> | ||||
| META_IS_WINDOW | ||||
| META_IS_WINDOW_CLASS | ||||
| META_TYPE_WINDOW | ||||
| META_WINDOW | ||||
| META_WINDOW_CLASS | ||||
| META_WINDOW_GET_CLASS | ||||
| meta_window_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>workspace</FILE> | ||||
| MetaWorkspace | ||||
| MetaWorkspaceClass | ||||
| meta_workspace_index | ||||
| meta_workspace_get_screen | ||||
| meta_workspace_list_windows | ||||
| meta_workspace_get_work_area_for_monitor | ||||
| meta_workspace_get_work_area_all_monitors | ||||
| meta_workspace_activate | ||||
| meta_workspace_activate_with_focus | ||||
| meta_workspace_update_window_hints | ||||
| meta_workspace_set_builtin_struts | ||||
| meta_workspace_get_neighbor | ||||
| <SUBSECTION Standard> | ||||
| META_IS_WORKSPACE | ||||
| META_IS_WORKSPACE_CLASS | ||||
| META_TYPE_WORKSPACE | ||||
| META_WORKSPACE | ||||
| META_WORKSPACE_CLASS | ||||
| META_WORKSPACE_GET_CLASS | ||||
| meta_workspace_get_type | ||||
| </SECTION> | ||||
|  | ||||
							
								
								
									
										15
									
								
								doc/reference/mutter-overview.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								doc/reference/mutter-overview.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| <part id="mutter-overview"> | ||||
|  | ||||
|   <title>Overview</title> | ||||
|  | ||||
|   <partintro> | ||||
|  | ||||
|     <para>Mutter is a GObject-based library for creating compositing window managers.</para> | ||||
|  | ||||
|     <para>Compositors that wish to use Mutter must implement a subclass of #MetaPlugin and register it with meta_plugin_manager_set_plugin_type() before calling meta_init() but after g_type_init().</para> | ||||
|  | ||||
|     <para>#MetaPlugin provides virtual functions that allow to override default behavior in the window management code, such as the effect to perform when a window is created or when switching workspaces.</para> | ||||
|  | ||||
|   </partintro> | ||||
|  | ||||
| </part> | ||||
							
								
								
									
										100
									
								
								doc/reference/running-mutter.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								doc/reference/running-mutter.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| <part id="running-mutter"> | ||||
|  | ||||
|   <title>Running Mutter</title> | ||||
|  | ||||
|   <partintro> | ||||
|  | ||||
|     <section id="environment-variables"> | ||||
|       <title>Environment Variables</title> | ||||
|  | ||||
|       <para> | ||||
|         Mutter automatically checks environment variables during | ||||
|         its initialization. These environment variables are meant | ||||
|         as debug tools or overrides for default behaviours: | ||||
|       </para> | ||||
|  | ||||
|       <variablelist> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_VERBOSE</term> | ||||
|           <listitem> | ||||
|             <para>Enable verbose mode, in which more information is printed to the console. Mutter needs to be built with the --enable-verbose-mode option (enabled by default). For more fine-grained control of the output, see meta_add_verbose_topic().</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DEBUG</term> | ||||
|           <listitem> | ||||
|             <para>Traps and prints X errors to the console.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_G_FATAL_WARNINGS</term> | ||||
|           <listitem> | ||||
|             <para>Causes any logging from the domains Mutter, Gtk, Gdk, Pango or GLib to terminate the process (only when using the log functions in GLib).</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_USE_LOGFILE</term> | ||||
|           <listitem> | ||||
|             <para>Log all messages to a temporary file.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DEBUG_XINERAMA</term> | ||||
|           <listitem> | ||||
|             <para>Log extra information about support of the XINERAMA extension.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DEBUG_SM</term> | ||||
|           <listitem> | ||||
|             <para>Log extra information about session management.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DEBUG_BUTTON_GRABS</term> | ||||
|           <listitem> | ||||
|             <para>Log extra information about button grabs.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_SYNC</term> | ||||
|           <listitem> | ||||
|             <para>Call XSync after each X call.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DISPLAY</term> | ||||
|           <listitem> | ||||
|             <para>Name of the X11 display to use.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>META_DISABLE_MIPMAPS</term> | ||||
|           <listitem> | ||||
|             <para>Disable use of mipmaps for the textures that back window pixmaps.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_USE_STATIC_GRAVITY</term> | ||||
|           <listitem> | ||||
|             <para>Enable support for clients with static bit-gravity.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_WM_CLASS_FILTER</term> | ||||
|           <listitem> | ||||
|             <para>Comma-separated list of WM_CLASS names to which to restrict Mutter to.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|         <varlistentry> | ||||
|           <term>MUTTER_DISABLE_FALLBACK_COLOR</term> | ||||
|           <listitem> | ||||
|             <para>Disable fallback for themed colors, for easier detection of typographical errors.</para> | ||||
|           </listitem> | ||||
|         </varlistentry> | ||||
|       </variablelist> | ||||
|  | ||||
|     </section> | ||||
|  | ||||
|   </partintro> | ||||
| </part> | ||||
| @@ -39,4 +39,11 @@ environment.</description> | ||||
|       <gnome:userid>otaylor</gnome:userid> | ||||
|     </foaf:Person> | ||||
|   </maintainer> | ||||
|   <maintainer> | ||||
|     <foaf:Person> | ||||
|       <foaf:name>Florian Müllner</foaf:name> | ||||
|       <foaf:mbox rdf:resource="mailto:fmuellner@gnome.org" /> | ||||
|       <gnome:userid>fmuellner</gnome:userid> | ||||
|     </foaf:Person> | ||||
|   </maintainer> | ||||
| </Project> | ||||
|   | ||||
| @@ -80,6 +80,7 @@ sr@latin | ||||
| sv | ||||
| ta | ||||
| te | ||||
| tg | ||||
| th | ||||
| tk | ||||
| tr | ||||
|   | ||||
| @@ -1,7 +1,10 @@ | ||||
| # List of source files containing translatable strings. | ||||
| # Please keep this file sorted alphabetically. | ||||
| src/50-mutter-navigation.xml.in | ||||
| src/50-mutter-system.xml.in | ||||
| src/50-mutter-windows.xml.in | ||||
| src/compositor/compositor.c | ||||
| src/compositor/meta-background.c | ||||
| src/core/bell.c | ||||
| src/core/core.c | ||||
| src/core/delete.c | ||||
|   | ||||
							
								
								
									
										184
									
								
								po/ast.po
									
									
									
									
									
								
							
							
						
						
									
										184
									
								
								po/ast.po
									
									
									
									
									
								
							| @@ -37,7 +37,6 @@ msgstr "Petición d'información ventana desconocida: %d" | ||||
| #. Translators: %s is a window title | ||||
| #: ../src/core/delete.c:95 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "<tt>%s</tt> is not responding." | ||||
| msgstr "<tt>%s</tt> nun ta respondiendo." | ||||
|  | ||||
| @@ -122,7 +121,6 @@ msgstr "Comandu de terminal nun definíu.\n" | ||||
|  | ||||
| #: ../src/core/main.c:130 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| @@ -261,7 +259,6 @@ msgstr "Error axustando númberu d'arees de trabayu a %d: %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:2028 ../src/core/prefs.c:2531 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Espaciu de Trabayu %d" | ||||
|  | ||||
| @@ -275,7 +272,6 @@ msgstr "\"%s\" atopau na base de datos de configuración nun ye un valor válidu | ||||
|  | ||||
| #: ../src/core/prefs.c:2612 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Error setting name for workspace %d to \"%s\": %s\n" | ||||
| msgstr "Fallu al afitar nome pal espaciu de trabayu %d a \"%s\": %s\n" | ||||
|  | ||||
| @@ -286,19 +282,16 @@ msgstr "Fallu al afitar l'estáu del compositor: %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:2845 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Error setting clutter plugin list: %s\n" | ||||
| msgstr "Fallu al afitar la llista desordenada de plugin: %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:2889 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Error setting live hidden windows status status: %s\n" | ||||
| msgstr "Fallu al afitar l'estáu de les ventanes anubríes: %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:2917 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Error setting no tab popup status: %s\n" | ||||
| msgstr "Fallu al afitar l'estáu de les llingüetes emerxentes: %s\n" | ||||
|  | ||||
| @@ -358,7 +351,6 @@ msgstr "Falló analizar ficheru de sesión guardáu: %s\n" | ||||
|  | ||||
| #: ../src/core/session.c:1198 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "<mutter_session> attribute seen but we already have the session ID" | ||||
| msgstr "Vióse l'atributu <mutter_session> pero yá tenemos la ID de sesión" | ||||
|  | ||||
| @@ -404,7 +396,6 @@ msgstr "Abiertu archivu log %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:139 ../src/tools/mutter-message.c:176 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter compilose ensin sofitu pal mou testu\n" | ||||
|  | ||||
| @@ -499,19 +490,19 @@ msgid "" | ||||
| msgstr "La propiedá %s del ventanu 0x%lx contien un códigu UTF-8 non válidu pal " | ||||
| "elementu %d na llista\n" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:88 | ||||
| #: ../src/include/all-keybindings.h:88 ../src/50-mutter-navigation.xml.in.h:18 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Cambiar a espaciu de trabayu 1" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:90 | ||||
| #: ../src/include/all-keybindings.h:90 ../src/50-mutter-navigation.xml.in.h:19 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Cambiar a espaciu de trabayu 2" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:92 | ||||
| #: ../src/include/all-keybindings.h:92 ../src/50-mutter-navigation.xml.in.h:20 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Cambiar a espaciu de trabayu 3" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:94 | ||||
| #: ../src/include/all-keybindings.h:94 ../src/50-mutter-navigation.xml.in.h:21 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Cambiar a espaciu de trabayu 4" | ||||
|  | ||||
| @@ -640,47 +631,57 @@ msgstr "Saca una semeya d'una ventana" | ||||
| msgid "Run a terminal" | ||||
| msgstr "Executar una terminal" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:271 | ||||
| #: ../src/include/all-keybindings.h:271 ../src/50-mutter-windows.xml.in.h:1 | ||||
| msgid "Activate the window menu" | ||||
| msgstr "Activar el menú de la ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:274 | ||||
| #: ../src/include/all-keybindings.h:274 ../src/50-mutter-windows.xml.in.h:13 | ||||
| #, fuzzy | ||||
| msgid "Toggle fullscreen mode" | ||||
| msgstr "Camudar a modu pantalla completa" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Camudar a modu pantalla completa\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Camudar a mou pantalla completa" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:276 | ||||
| #: ../src/include/all-keybindings.h:276 ../src/50-mutter-windows.xml.in.h:14 | ||||
| #, fuzzy | ||||
| msgid "Toggle maximization state" | ||||
| msgstr "Camudar a estáu maximizáu" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Camudar a estáu maximizáu\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Conmutar l'estáu maximizáu" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:278 | ||||
| msgid "Toggle whether a window will always be visible over other windows" | ||||
| msgstr "Conmutar si una ventana siempres se verá encima d'otres ventanes" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:280 | ||||
| #: ../src/include/all-keybindings.h:280 ../src/50-mutter-windows.xml.in.h:4 | ||||
| msgid "Maximize window" | ||||
| msgstr "Maximizar ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:282 | ||||
| #: ../src/include/all-keybindings.h:282 ../src/50-mutter-windows.xml.in.h:12 | ||||
| msgid "Restore window" | ||||
| msgstr "Restaurar la ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:284 | ||||
| #: ../src/include/all-keybindings.h:284 ../src/50-mutter-windows.xml.in.h:15 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Activa estáu endolcáu" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:286 | ||||
| #: ../src/include/all-keybindings.h:286 ../src/50-mutter-windows.xml.in.h:7 | ||||
| msgid "Minimize window" | ||||
| msgstr "Minimizar ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:288 | ||||
| #: ../src/include/all-keybindings.h:288 ../src/50-mutter-windows.xml.in.h:2 | ||||
| msgid "Close window" | ||||
| msgstr "Zarrar ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:290 | ||||
| #: ../src/include/all-keybindings.h:290 ../src/50-mutter-windows.xml.in.h:8 | ||||
| msgid "Move window" | ||||
| msgstr "Mover ventana" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:292 | ||||
| #: ../src/include/all-keybindings.h:292 ../src/50-mutter-windows.xml.in.h:11 | ||||
| msgid "Resize window" | ||||
| msgstr "Cambiar el tamañu la ventana" | ||||
|  | ||||
| @@ -689,18 +690,22 @@ msgid "Toggle whether window is on all workspaces or just one" | ||||
| msgstr "Conmutar si la ventana apaez en toles árees de trabayu o namái nuna" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:299 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:10 | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "Mover ventana al espaciu de trabayu 1" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:302 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:11 | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "Mover ventana al espaciu de trabayu 2" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:305 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:12 | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "Mover ventana al espaciu de trabayu 3" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:308 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:13 | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "Mover ventana al espaciu de trabayu 4" | ||||
|  | ||||
| @@ -736,19 +741,24 @@ msgstr "Mover ventana al espaciu de trabayu 11" | ||||
| msgid "Move window to workspace 12" | ||||
| msgstr "Mover ventana al espaciu de trabayu 12" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:344 | ||||
| #: ../src/include/all-keybindings.h:344 ../src/50-mutter-navigation.xml.in.h:7 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Mover ventana un espaciu de trabayu a manzorga" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:347 | ||||
| #: ../src/include/all-keybindings.h:347 ../src/50-mutter-navigation.xml.in.h:8 | ||||
| #, fuzzy | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Mover ventana un espaciu de trabayu a derecha" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Mover ventana un espaciu de trabayu a derecha\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Mover ventana un espaciu de trabayu a madrecha" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:350 | ||||
| #: ../src/include/all-keybindings.h:350 ../src/50-mutter-navigation.xml.in.h:9 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Mover ventana un espaciu de trabayu p'arriba" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:353 | ||||
| #: ../src/include/all-keybindings.h:353 ../src/50-mutter-navigation.xml.in.h:6 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Mover ventana un espaciu de trabayu p'abaxo" | ||||
|  | ||||
| @@ -757,19 +767,29 @@ msgid "Raise window if it's covered by another window, otherwise lower it" | ||||
| msgstr "" | ||||
| "Llevantar la ventana si ta cubierta por otra ventana, minimizala n'otru casu" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:358 | ||||
| #: ../src/include/all-keybindings.h:358 ../src/50-mutter-windows.xml.in.h:9 | ||||
| #, fuzzy | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Poner el ventanu en primer planu" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Poner el ventanu en primer planu\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Poner la ventana en primer planu" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:360 | ||||
| #: ../src/include/all-keybindings.h:360 ../src/50-mutter-windows.xml.in.h:3 | ||||
| #, fuzzy | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Ventanu más baxu per debaxo d'otros ventanos" | ||||
| msgstr "" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Ventanu más baxu per debaxo d'otros ventanos\n" | ||||
| "#-#-#-#-#  ast.po (metacity)  #-#-#-#-#\n" | ||||
| "Ventana más baxa per debaxo d'otres ventanes" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:364 | ||||
| #: ../src/include/all-keybindings.h:364 ../src/50-mutter-windows.xml.in.h:6 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Maximizar ventana verticalmente" | ||||
|  | ||||
| #: ../src/include/all-keybindings.h:368 | ||||
| #: ../src/include/all-keybindings.h:368 ../src/50-mutter-windows.xml.in.h:5 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Maximizar ventana horizontalmente" | ||||
|  | ||||
| @@ -983,7 +1003,6 @@ msgstr "Espaciu de Trabayu %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:213 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Espaciu de Trabayu 1_0" | ||||
|  | ||||
| @@ -1724,7 +1743,6 @@ msgstr "Nun se permite testu dientro del elementu <%s>" | ||||
| #: ../src/ui/theme-parser.c:3748 ../src/ui/theme-parser.c:3760 | ||||
| #: ../src/ui/theme-parser.c:3772 | ||||
| #, c-format | ||||
| #, c-format | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> especificáu dos vegaes pa esti tema" | ||||
|  | ||||
| @@ -1936,6 +1954,96 @@ msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "%d espresiones de coordenaes interpretaes en %g segundos (%g segundos de " | ||||
| "media)\n" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Anubrir toles ventanes normales" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:2 | ||||
| #, fuzzy | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Mover al área de trabayu d'arriba" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:3 | ||||
| #, fuzzy | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Mover al área de trabayu d'abaxo" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:4 | ||||
| #, fuzzy | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Mover al área de trabayu de la izquierda" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:5 | ||||
| #, fuzzy | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Mover al área de trabayu de la derecha" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:14 | ||||
| #, fuzzy | ||||
| msgid "Navigation" | ||||
| msgstr "Navegación" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:15 | ||||
| #, fuzzy | ||||
| msgid "Switch applications" | ||||
| msgstr "Movese ente aplicaciones" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:16 | ||||
| #, fuzzy | ||||
| msgid "Switch system controls" | ||||
| msgstr "Cambiar ente controles del sistema" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:17 | ||||
| #, fuzzy | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Movese ente los controles del sistema direutamente" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:22 | ||||
| #, fuzzy | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Cambiar ventanes direutamente" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:23 | ||||
| #, fuzzy | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Movese ente les ventanes d'una aplicación direutamente" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:24 | ||||
| #, fuzzy | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Movese ente les ventanes d'una aplicación" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Amosar el resume d'actividaes" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:2 | ||||
| #, fuzzy | ||||
| msgid "Show the run command prompt" | ||||
| msgstr "Amosar l'elementu «executar comando»" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:3 | ||||
| #, fuzzy | ||||
| msgid "System" | ||||
| msgstr "Sistema" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:10 | ||||
| #, fuzzy | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Llevantar la ventana si ta cubierta, minimizala n'otru casu" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:16 | ||||
| #, fuzzy | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Conmutar la ventana en toles árees de trabayu o namái nuna" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:17 | ||||
| #, fuzzy | ||||
| msgid "Windows" | ||||
| msgstr "Ventanes" | ||||
|  | ||||
| #~ msgid "Desktop" | ||||
| #~ msgstr "Escritoriu" | ||||
|  | ||||
|   | ||||
							
								
								
									
										2719
									
								
								po/bn_IN.po
									
									
									
									
									
								
							
							
						
						
									
										2719
									
								
								po/bn_IN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1397
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
							
						
						
									
										1397
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1334
									
								
								po/en_GB.po
									
									
									
									
									
								
							
							
						
						
									
										1334
									
								
								po/en_GB.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										576
									
								
								po/et.po
									
									
									
									
									
								
							
							
						
						
									
										576
									
								
								po/et.po
									
									
									
									
									
								
							| @@ -7,253 +7,174 @@ | ||||
| # | ||||
| # Tõivo Leedjärv <toivo linux ee>, 2004. | ||||
| # Ivar Smolin <okul linux ee>, 2005, 2006, 2009–2011. | ||||
| # Mattias Põldaru <mahfiaz gmail com>, 2008–2011. | ||||
| # Mattias Põldaru <mahfiaz@gmail.com>, 2008–2011, 2012, 2013. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter MASTER\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&component=general\n" | ||||
| "POT-Creation-Date: 2011-03-07 23:35+0000\n" | ||||
| "PO-Revision-Date: 2011-03-09 06:41+0200\n" | ||||
| "Last-Translator: Ivar Smolin <okul@linux.ee>\n" | ||||
| "Language-Team: Estonian <gnome-et@linux.ee>\n" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-12 18:53+0000\n" | ||||
| "PO-Revision-Date: 2013-03-12 20:55+0300\n" | ||||
| "Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n" | ||||
| "Language-Team: Estonian <>\n" | ||||
| "Language: et\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: et\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n!=1);\n" | ||||
|  | ||||
| msgid "Navigation" | ||||
| msgstr "Navigeerimine" | ||||
|  | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "Akna liigutamine 1. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "Akna liigutamine 2. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "Akna liigutamine 3. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "Akna liigutamine 4. tööalale" | ||||
|  | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Akna tõstmine vasakpoolsele tööalale" | ||||
|  | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Akna tõstmine parempoolsele tööalale" | ||||
|  | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Akna tõstmine ülemisele tööalale" | ||||
|  | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Akna tõstmine alumisele tööalale" | ||||
|  | ||||
| msgid "Switch applications" | ||||
| msgstr "Rakenduste vahetamine" | ||||
|  | ||||
| msgid "Switch windows" | ||||
| msgstr "Akende vahetamine" | ||||
|  | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Rakenduse akende vahetamine" | ||||
|  | ||||
| msgid "Switch system controls" | ||||
| msgstr "Süsteemi juhtalade vahetamine" | ||||
|  | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Akende kohene vahetamine" | ||||
|  | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Rakenduse akende kohene vahetamine" | ||||
|  | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Süsteemi juhtalade kohene vahetamine" | ||||
|  | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Kõigi tavaliste akende peitmine" | ||||
|  | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Lülitumine 1. tööalale" | ||||
| msgstr "1. tööalale liikumine" | ||||
|  | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Lülitumine 2. tööalale" | ||||
| msgstr "2. tööalale liikumine" | ||||
|  | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Lülitumine 3. tööalale" | ||||
| msgstr "3. tööalale liikumine" | ||||
|  | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Lülitumine 4. tööalale" | ||||
| msgstr "4. tööalale liikumine" | ||||
|  | ||||
| msgid "Switch to workspace 5" | ||||
| msgstr "Lülitumine 5. tööalale" | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Vasakpoolsele tööalale liikumine" | ||||
|  | ||||
| msgid "Switch to workspace 6" | ||||
| msgstr "Lülitumine 6. tööalale" | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Parempoolsele tööalale liikumine" | ||||
|  | ||||
| msgid "Switch to workspace 7" | ||||
| msgstr "Lülitumine 7. tööalale" | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Ülemisele tööalale liikumine" | ||||
|  | ||||
| msgid "Switch to workspace 8" | ||||
| msgstr "Lülitumine 8. tööalale" | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Alumisele tööalale liikumine" | ||||
|  | ||||
| msgid "Switch to workspace 9" | ||||
| msgstr "Lülitumine 9. tööalale" | ||||
| msgid "System" | ||||
| msgstr "Süsteem" | ||||
|  | ||||
| msgid "Switch to workspace 10" | ||||
| msgstr "Lülitumine 10. tööalale" | ||||
| msgid "Show the run command prompt" | ||||
| msgstr "Käsuviiba kuvamine" | ||||
|  | ||||
| msgid "Switch to workspace 11" | ||||
| msgstr "Lülitumine 11. tööalale" | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Tegevuste ülevaate avamine" | ||||
|  | ||||
| msgid "Switch to workspace 12" | ||||
| msgstr "Lülitumine 12. tööalale" | ||||
|  | ||||
| msgid "Switch to workspace on the left of the current workspace" | ||||
| msgstr "Lülitumine sellest tööalast vasakul olevale tööalale" | ||||
|  | ||||
| msgid "Switch to workspace on the right of the current workspace" | ||||
| msgstr "Lülitumine sellest tööalast paremal olevale tööalale" | ||||
|  | ||||
| msgid "Switch to workspace above the current workspace" | ||||
| msgstr "Lülitumine selle tööala kohal olevale tööalale" | ||||
|  | ||||
| msgid "Switch to workspace below the current workspace" | ||||
| msgstr "Lülitumine selle tööala all olevale tööalale" | ||||
|  | ||||
| msgid "Move between windows of an application, using a popup window" | ||||
| msgstr "Liigu rakenduse akende vahel, hüpikaknaga" | ||||
|  | ||||
| msgid "Move backward between windows of an application, using a popup window" | ||||
| msgstr "Liigu rakenduse akende vahel tagasisuunas, hüpikaknaga" | ||||
|  | ||||
| msgid "Move between windows, using a popup window" | ||||
| msgstr "Liigu akende vahel, hüpikaknaga" | ||||
|  | ||||
| msgid "Move backward between windows, using a popup window" | ||||
| msgstr "Liigu akende vahel tagasisuunas, hüpikaknaga" | ||||
|  | ||||
| msgid "Move between panels and the desktop, using a popup window" | ||||
| msgstr "Liigu paneelide ja töölaua vahel, hüpikaknaga" | ||||
|  | ||||
| msgid "Move backward between panels and the desktop, using a popup window" | ||||
| msgstr "Liigu tagasisuunas paneelide ja töölaua vahel, hüpikaknaga" | ||||
|  | ||||
| msgid "Move between windows of an application immediately" | ||||
| msgstr "Liigu koheselt rakenduse akende vahel" | ||||
|  | ||||
| msgid "Move backward between windows of an application immediately" | ||||
| msgstr "Liigu koheselt rakenduse akende vahel tagasisuunas" | ||||
|  | ||||
| msgid "Move between windows immediately" | ||||
| msgstr "Liigu koheselt akende vahel" | ||||
|  | ||||
| msgid "Move backward between windows immediately" | ||||
| msgstr "Liigu koheselt akende vahel tagasisuunas" | ||||
|  | ||||
| msgid "Move between panels and the desktop immediately" | ||||
| msgstr "Liigu koheselt paneeli ja töölaua vahel" | ||||
|  | ||||
| msgid "Move backward between panels and the desktop immediately" | ||||
| msgstr "Liigu koheselt tagasisuunas paneelide ja töölaua vahel" | ||||
|  | ||||
| msgid "Hide all normal windows and set focus to the desktop" | ||||
| msgstr "Peida kõik tavalised aknad ja fokuseeri töölaud" | ||||
|  | ||||
| msgid "Show the panel's main menu" | ||||
| msgstr "Paneeli peamenüü näitamine" | ||||
|  | ||||
| msgid "Show the panel's \"Run Application\" dialog box" | ||||
| msgstr "Paneeli dialoogi \"Käivita rakendus\" näitamine" | ||||
|  | ||||
| msgid "Start or stop recording the session" | ||||
| msgstr "Seansi salvestamise käivitamine või seiskamine" | ||||
|  | ||||
| msgid "Take a screenshot" | ||||
| msgstr "Kuvatõmmise võtmine" | ||||
|  | ||||
| msgid "Take a screenshot of a window" | ||||
| msgstr "Kuvatõmmise võtmine aknast" | ||||
|  | ||||
| msgid "Run a terminal" | ||||
| msgstr "Terminali käivitamine" | ||||
| msgid "Windows" | ||||
| msgstr "Aknad" | ||||
|  | ||||
| msgid "Activate the window menu" | ||||
| msgstr "Aknamenüü aktiveerimine" | ||||
| msgstr "Aknamenüü avamine" | ||||
|  | ||||
| msgid "Toggle fullscreen mode" | ||||
| msgstr "Täisekraanivaate sisse- ja väljalülitamine" | ||||
| msgstr "Täisekraanoleku vahetamine" | ||||
|  | ||||
| msgid "Toggle maximization state" | ||||
| msgstr "Maksimeeritud oleku sisse- ja väljalülitamine" | ||||
|  | ||||
| msgid "Toggle whether a window will always be visible over other windows" | ||||
| msgstr "Lüliti määrab, kas aken on alati teiste akende kohal nähtav" | ||||
| msgstr "Maksimeeritud oleku vahetamine" | ||||
|  | ||||
| msgid "Maximize window" | ||||
| msgstr "Akna maksimeerimine" | ||||
|  | ||||
| msgid "Restore window" | ||||
| msgstr "Taasta akna suurus" | ||||
| msgstr "Akna taastamine" | ||||
|  | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Varjatud oleku lüliti" | ||||
|  | ||||
| msgid "Minimize window" | ||||
| msgstr "Akna minimeerimine" | ||||
| msgstr "Varjatud oleku vahetamine" | ||||
|  | ||||
| msgid "Close window" | ||||
| msgstr "Akna sulgemine" | ||||
|  | ||||
| msgid "Hide window" | ||||
| msgstr "Peida aken" | ||||
|  | ||||
| msgid "Move window" | ||||
| msgstr "Teisalda aken" | ||||
| msgstr "Akna liigutamine" | ||||
|  | ||||
| msgid "Resize window" | ||||
| msgstr "Muuda akna suurust" | ||||
| msgstr "Akna suuruse muutmine" | ||||
|  | ||||
| msgid "Toggle whether window is on all workspaces or just one" | ||||
| msgstr "Lüliti määrab, kas aken on kõigil tööaladel või ainult ühel" | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Akna kõigil või ühel tööalal olemise vahetamine" | ||||
|  | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "Akna tõstmine 1. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "Akna tõstmine 2. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "Akna tõstmine 3. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "Akna tõstmine 4. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 5" | ||||
| msgstr "Akna tõstmine 5. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 6" | ||||
| msgstr "Akna tõstmine 6. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 7" | ||||
| msgstr "Akna tõstmine 7. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 8" | ||||
| msgstr "Akna tõstmine 8. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 9" | ||||
| msgstr "Akna tõstmine 9. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 10" | ||||
| msgstr "Akna tõstmine 10. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 11" | ||||
| msgstr "Akna tõstmine 11. tööalale" | ||||
|  | ||||
| msgid "Move window to workspace 12" | ||||
| msgstr "Akna tõstmine 12. tööalale" | ||||
|  | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Akna tõstmine ühe tööala võrra vasakule" | ||||
|  | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Akna tõstmine ühe tööala võrra paremale" | ||||
|  | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Akna tõstmine ühe tööala võrra ülespoole" | ||||
|  | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Akna tõstmine ühe tööala võrra allapoole" | ||||
|  | ||||
| msgid "Raise window if it's covered by another window, otherwise lower it" | ||||
| msgstr "Tõsta aken, kui seda katab teine aken, muul juhul vii tahapoole" | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Akna tõstmine, kui see on kaetud, muul juhul langetamine" | ||||
|  | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Akna tõstmine teiste akende kohale" | ||||
| msgstr "Akna tõstmine teiste kohale" | ||||
|  | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Saada aken teiste taha" | ||||
| msgstr "Akna langetamine teiste taha" | ||||
|  | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Maksimeeri aken vertikaalselt" | ||||
| msgstr "Akna vertikaalne maksimeerimine" | ||||
|  | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Maksimeeri aken horisontaalselt" | ||||
| msgstr "Akna horisontaalne maksimeerimine" | ||||
|  | ||||
| msgid "Move window to north-west (top left) corner" | ||||
| msgstr "Akna tõstmine ekraani loodepoolsesse (ülemisse vasakusse) nurka" | ||||
| msgid "View split on left" | ||||
| msgstr "Vaade poolitatakse vasakult" | ||||
|  | ||||
| msgid "Move window to north-east (top right) corner" | ||||
| msgstr "Akna tõstmine ekraani kirdepoolsesse (ülemisse paremasse) nurka" | ||||
| msgid "View split on right" | ||||
| msgstr "Vaade poolitatakse paremalt" | ||||
|  | ||||
| msgid "Move window to south-west (bottom left) corner" | ||||
| msgstr "Akna tõstmine ekraani edelapoolsesse (alumisse vasakusse) nurka" | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "Teine komposiithaldur juba töötab ekraani %i kuval \"%s\"." | ||||
|  | ||||
| msgid "Move window to south-east (bottom right) corner" | ||||
| msgstr "Akna tõstmine ekraani kagupoolsesse (alumisse paremasse) nurka" | ||||
|  | ||||
| msgid "Move window to north (top) side of screen" | ||||
| msgstr "Akna tõstmine ekraani põhjapoolsesse (ülemisse) serva" | ||||
|  | ||||
| msgid "Move window to south (bottom) side of screen" | ||||
| msgstr "Akna tõstmine ekraani lõunapoolsesse (alumisse) serva" | ||||
|  | ||||
| msgid "Move window to east (right) side of screen" | ||||
| msgstr "Akna tõstmine ekraani idapoolsesse (paremasse) serva" | ||||
|  | ||||
| msgid "Move window to west (left) side of screen" | ||||
| msgstr "Akna tõstmine ekraani läänepoolsesse (vasakusse) serva" | ||||
|  | ||||
| msgid "Move window to center of screen" | ||||
| msgstr "Akna tõstmine ekraani keskele" | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "failist polnud võimalik taustatekstuuri luua" | ||||
|  | ||||
| msgid "Bell event" | ||||
| msgstr "Helina sündmus" | ||||
| @@ -262,10 +183,12 @@ msgstr "Helina sündmus" | ||||
| msgid "Unknown window information request: %d" | ||||
| msgstr "Tundmatu aknateabe päring: %d" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #, c-format | ||||
| msgid "<tt>%s</tt> is not responding." | ||||
| msgstr "<tt>%s</tt> ei vasta." | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "„%s” ei vasta." | ||||
|  | ||||
| msgid "Application is not responding." | ||||
| msgstr "Rakendus ei vasta." | ||||
|  | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| @@ -294,26 +217,9 @@ msgstr "" | ||||
| "Mõni teine programm juba kasutab klahvi %s koos muuteklahvidega %x " | ||||
| "kiirklahvina\n" | ||||
|  | ||||
| #. Displayed when a keybinding which is | ||||
| #. * supposed to launch a program fails. | ||||
| #. | ||||
| #, c-format | ||||
| msgid "" | ||||
| "There was an error running <tt>%s</tt>:\n" | ||||
| "\n" | ||||
| "%s" | ||||
| msgstr "" | ||||
| "<tt>%s</tt> käivitamisel esines viga:\n" | ||||
| "\n" | ||||
| "%s" | ||||
|  | ||||
| #, c-format | ||||
| msgid "No command %d has been defined.\n" | ||||
| msgstr "Käsku %d pole defineeritud.\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "No terminal command has been defined.\n" | ||||
| msgstr "Terminalikäsku pole defineeritud.\n" | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\" pole sobiv kiirklahv\n" | ||||
|  | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Seansihalduriga ühendumise keelamine" | ||||
| @@ -361,41 +267,8 @@ msgstr "" | ||||
| msgid "Print version" | ||||
| msgstr "Versiooni printimine" | ||||
|  | ||||
| msgid "Comma-separated list of compositor plugins" | ||||
| msgstr "Komaga eraldatud nimekiri komposiitmontaaži pluginatest" | ||||
|  | ||||
| #. | ||||
| #. * We found it, but it was invalid.  Complain. | ||||
| #. * | ||||
| #. * FIXME: This replicates the original behaviour, but in the future | ||||
| #. * we might consider reverting invalid keys to their original values. | ||||
| #. * (We know the old value, so we can look up a suitable string in | ||||
| #. * the symtab.) | ||||
| #. * | ||||
| #. * (Empty comment follows so the translators don't see this.) | ||||
| #. | ||||
| #. | ||||
| #, c-format | ||||
| msgid "GConf key '%s' is set to an invalid value\n" | ||||
| msgstr "GConf võtme '%s' väärtus on vigane\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "%d stored in GConf key %s is out of range %d to %d\n" | ||||
| msgstr "" | ||||
| "%d, mis on salvestatud GConf võtmes %s, on väljaspool piirkonda %d - %d\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "GConf key \"%s\" is set to an invalid type\n" | ||||
| msgstr "GConf-i võti \"%s\" on määratud vigase tüübiga\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "GConf key %s is already in use and can't be used to override %s\n" | ||||
| msgstr "" | ||||
| "GConfi võti %s on juba kasutusel ja sellega ei saa tühistada võtit %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Can't override GConf key, %s not found\n" | ||||
| msgstr "GConfi võtit pole võimalik tühistada, võtit %s ei leitud\n" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Millist Mutteri pluginat kasutada" | ||||
|  | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| @@ -405,8 +278,8 @@ msgstr "" | ||||
| "ei pruugi õigesti käituda.\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GConf key %s\n" | ||||
| msgstr "Fondi kirjeldust \"%s\" GConf võtmest %s ei saa töödelda\n" | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Fondi kirjeldust \"%s\" GSettings võtmest %s pole võimalik töödelda\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -416,14 +289,6 @@ msgstr "" | ||||
| "Seadistuste andmebaasist leitud \"%s\" ei ole sobiv väärtus hiireklahvi " | ||||
| "modifikaatoriks\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error setting number of workspaces to %d: %s\n" | ||||
| msgstr "Viga tööalade arvuks %d määramisel: %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Tööala %d" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -433,16 +298,8 @@ msgstr "" | ||||
| "\"\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error setting name for workspace %d to \"%s\": %s\n" | ||||
| msgstr "Viga tööalale %d nime \"%s\" määramisel: %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error setting live hidden windows status status: %s\n" | ||||
| msgstr "Viga varjus elushoitavate akende oleku määramisel: %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error setting no tab popup status: %s\n" | ||||
| msgstr "" | ||||
| msgid "Workspace %d" | ||||
| msgstr "Tööala %d" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| @@ -540,10 +397,6 @@ msgstr "Aknahalduri hoiatus: " | ||||
| msgid "Window manager error: " | ||||
| msgstr "Aknahalduri viga: " | ||||
|  | ||||
| #. Translators: This is the title used on dialog boxes | ||||
| msgid "Mutter" | ||||
| msgstr "Mutter" | ||||
|  | ||||
| #. first time through | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -581,6 +434,12 @@ msgstr "%s (masinas %s)" | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Vigane WM_TRANSIENT_FOR aknale 0x%lx määratud %s jaoks.\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "" | ||||
| "WM_TRANSIENT_FOR aknale 0x%lx määratud %s jaoks tekitaks tsüklilise " | ||||
| "korduse.\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window 0x%lx has property %s\n" | ||||
| @@ -604,18 +463,8 @@ msgid "" | ||||
| "Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n" | ||||
| msgstr "Omadus %s aknal 0x%lx sisaldab vigast UTF-8 %d kirjele nimekirjas\n" | ||||
|  | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "Modaaldialoogide kinnistamine" | ||||
|  | ||||
| msgid "" | ||||
| "Determines whether hidden windows (i.e., minimized windows and windows on " | ||||
| "other workspaces than the current one) should be kept alive." | ||||
| msgstr "" | ||||
| "Määrab, kas varjatud aknaid (nt minimeeritud ja teistel tööaladel aknad) " | ||||
| "hoitakse elus." | ||||
|  | ||||
| msgid "Live Hidden Windows" | ||||
| msgstr "Varjatud akende aktiivsus" | ||||
| msgid "Mutter" | ||||
| msgstr "Mutter" | ||||
|  | ||||
| msgid "Modifier to use for extended window management operations" | ||||
| msgstr "Laiendatud aknaoperatsioonide korral kasutatav muuteklahv" | ||||
| @@ -632,6 +481,9 @@ msgstr "" | ||||
| "klahv\". Eeldatavasti määratakse selle seose väärtuseks vaikimisi või tühi " | ||||
| "sõne." | ||||
|  | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "Modaaldialoogide kinnistamine" | ||||
|  | ||||
| msgid "" | ||||
| "When true, instead of having independent titlebars, modal dialogs appear " | ||||
| "attached to the titlebar of the parent window and are moved together with " | ||||
| @@ -640,43 +492,90 @@ msgstr "" | ||||
| "Kui märgitud, siis eraldi tiitliribade asemel on moodaalsed dialoogid " | ||||
| "emaakna tiitliribade küljes ning liiguvad koos emaaknaga." | ||||
|  | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "Akna ümberpaigutamine selle lohistamisel ekraani serva" | ||||
|  | ||||
| msgid "" | ||||
| "If enabled, dropping windows on vertical screen edges maximizes them " | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
| "Kui märgitud, siis akna lohistamine ekraani külgservale maksimeerib selle " | ||||
| "vertikaalselt ja laius katab pool saadaolevast laiusest. Akna lohistamine " | ||||
| "ekraani ülaserva maksimeerib akna täielikult." | ||||
|  | ||||
| msgid "Workspaces are managed dynamically" | ||||
| msgstr "Tööalade dünaamiline haldus" | ||||
|  | ||||
| msgid "" | ||||
| "Determines whether workspaces are managed dynamically or whether there's a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
| "Määrab, kas tööalasid hallatakse dünaamiliselt või on nende arv staatiline " | ||||
| "(arvu määrab org.gnome.desktop.wm.preferences all võti num-workspaces)." | ||||
|  | ||||
| msgid "Workspaces only on primary" | ||||
| msgstr "Tööalad ainult peamisel" | ||||
|  | ||||
| msgid "" | ||||
| "Determines whether workspace switching should happen for windows on all " | ||||
| "monitors or only for windows on the primary monitor." | ||||
| msgstr "" | ||||
| "Määrab, kas tööalade vahetamine mõjutab kõiki aknaid kõigil monitoridel või " | ||||
| "ainult aknaid peamisel monitoril." | ||||
|  | ||||
| msgid "No tab popup" | ||||
| msgstr "Tabulaatoril pole hüpikakent" | ||||
|  | ||||
| msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
| "Kui märgitud, siis on hüpikaken ja esiletõstmise raam keelatud akende " | ||||
| "vahetamisel." | ||||
|  | ||||
| msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "Fookusemuutused lükatakse edasi kuni kursor peatub" | ||||
|  | ||||
| msgid "" | ||||
| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then " | ||||
| "the focus will not be changed immediately when entering a window, but only " | ||||
| "after the pointer stops moving." | ||||
| msgstr "" | ||||
| "Kui tõene ning fookusrežiim on kas \"sloppy\" või \"mouse\", siis fookust ei " | ||||
| "vahetata kohe, kui kursor aknale liigub, vaid alles pärast kursori peatumist." | ||||
|  | ||||
| msgid "Draggable border width" | ||||
| msgstr "Lohistatava äärise laius." | ||||
|  | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
| "Lohistatava äärise laius. Kui kujunduse nähtavatest ääristest ei piisa, " | ||||
| "lisatakse puuduoleva osa jaoks nähtamatu ääris." | ||||
|  | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "Peaaegu monitori suurused ekraanid maksimeeritakse automaatselt" | ||||
|  | ||||
| msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "" | ||||
| "Kui lubatud, maksimeeritakse automaatselt aknad, mis on avanedes monitori " | ||||
| "suurused." | ||||
|  | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Akna valimine tabulaatori hüpikaknalt" | ||||
|  | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Tabulaatori hüpikakna katkestamine" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Kasutamine: %s\n" | ||||
|  | ||||
| msgid "Close Window" | ||||
| msgstr "Sulge aken" | ||||
|  | ||||
| msgid "Window Menu" | ||||
| msgstr "Aknamenüü" | ||||
|  | ||||
| msgid "Minimize Window" | ||||
| msgstr "Akna minimeerimine" | ||||
|  | ||||
| msgid "Maximize Window" | ||||
| msgstr "Akna maksimeerimine" | ||||
|  | ||||
| msgid "Restore Window" | ||||
| msgstr "Akna taastamine" | ||||
|  | ||||
| msgid "Roll Up Window" | ||||
| msgstr "Akna kokkukerimine" | ||||
|  | ||||
| msgid "Unroll Window" | ||||
| msgstr "Akna lahtikerimine" | ||||
|  | ||||
| msgid "Keep Window On Top" | ||||
| msgstr "Akna kõige pealmiseks määramine" | ||||
|  | ||||
| msgid "Remove Window From Top" | ||||
| msgstr "Eemalda aken kõige pealmise kohalt" | ||||
|  | ||||
| msgid "Always On Visible Workspace" | ||||
| msgstr "Alati nähtaval tööalal" | ||||
|  | ||||
| msgid "Put Window On Only One Workspace" | ||||
| msgstr "Tõsta aken ainult ühele tööalale" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| msgid "Mi_nimize" | ||||
| msgstr "_Minimeeri" | ||||
| @@ -877,6 +776,30 @@ msgstr "Raami geomeetria ei määra nuppude suurust" | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Värviüleminekus peaks olema vähemalt kaks värvi" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| "parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "GTK kohandatud värvi määrang peab sisaldama sulgudes värvi nimetust ning " | ||||
| "varuvärvi, nt gtk:custom(foo,bar); väärtust \"%s\" pole võimalik töödelda" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| "_ are valid" | ||||
| msgstr "" | ||||
| "gtk:custom color_name parameetris sobimatu märk '%c', lubatud on ainult A-Za-" | ||||
| "z0-9-_" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| "fit the format" | ||||
| msgstr "" | ||||
| "Gtk:custom vorming on \"gtk:custom(värvi_nimi,varuvärv)\", \"%s\" ei sobi " | ||||
| "selle vorminguga" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -1512,24 +1435,5 @@ msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "%d koordinaatide avaldis töödeldi %g sekundiga (keskmine %g sekundit)\n" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "Don't make fullscreen windows that are maximized and have no decorations" | ||||
| #~ msgstr "Ei tehta maksimeeritud ilma raamita täisekraanaknaid." | ||||
|  | ||||
| #~ msgid "Whether window popup/frame should be shown when cycling windows." | ||||
| #~ msgstr "Kas hüpikakent/raami näidatakse akende vahetamisel." | ||||
|  | ||||
| #~ msgid "Internal argument for GObject introspection" | ||||
| #~ msgstr "GObject enesevaatluse siseargument" | ||||
|  | ||||
| #~ msgid "Failed to restart: %s\n" | ||||
| #~ msgstr "Tõrge taaskäivitamisel: %s\n" | ||||
|  | ||||
| #~ msgid "Error setting clutter plugin list: %s\n" | ||||
| #~ msgstr "Viga clutteri pluginate nimekirja määramisel: %s\n" | ||||
|  | ||||
| #~ msgid "Clutter Plugins" | ||||
| #~ msgstr "Clutteri pluginad" | ||||
|  | ||||
| #~ msgid "Plugins to load for the Clutter-based compositing manager." | ||||
| #~ msgstr "Clutteril põhineva komposiitmontaažihalduri laadimise pluginad." | ||||
| #~ msgid "Minimize window" | ||||
| #~ msgstr "Akna minimeerimine" | ||||
|   | ||||
							
								
								
									
										1305
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
							
						
						
									
										1305
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										27
									
								
								po/ro.po
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								po/ro.po
									
									
									
									
									
								
							| @@ -1944,6 +1944,33 @@ msgstr "" | ||||
| "Expresiile pentru coordonate %d parsate în %g secunde (o medie de %g " | ||||
| "secunde)\n" | ||||
|  | ||||
| #: ../src/50-mutter-launchers.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "Launchers" | ||||
| msgstr "Lansatori" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "Navigation" | ||||
| msgstr "Navigare" | ||||
|  | ||||
| #: ../src/50-mutter-screenshot.xml.in.h:1 | ||||
| #, fuzzy | ||||
| #| msgid "Take a screenshot" | ||||
| msgid "Screenshots" | ||||
| msgstr "Capturi de ecran" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:1 | ||||
| #, fuzzy | ||||
| msgid "System" | ||||
| msgstr "Sistem" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:1 | ||||
| #, fuzzy | ||||
| #| msgid "/_Windows" | ||||
| msgid "Windows" | ||||
| msgstr "Ferestre" | ||||
|  | ||||
| #~ msgid "Window Management" | ||||
| #~ msgstr "Administrare ferestre" | ||||
|  | ||||
|   | ||||
							
								
								
									
										3184
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
							
						
						
									
										3184
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										473
									
								
								po/tr.po
									
									
									
									
									
								
							
							
						
						
									
										473
									
								
								po/tr.po
									
									
									
									
									
								
							| @@ -6,36 +6,35 @@ | ||||
| # Baris Cicek <baris@teamforce.name.tr>, 2004, 2005, 2008, 2009. | ||||
| # İlker DAĞLI <ilker@ilkerdagli.info>, 2011. | ||||
| # Muhammed EKEN <gnome@m-eken.com>, 2011. | ||||
| # Muhammet Kara <muhammet.k@gmail.com>, 2011. | ||||
| # Muhammet Kara <muhammetk@acikkaynak.name.tr>, 2011, 2012. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter master\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2011-12-13 13:41+0000\n" | ||||
| "PO-Revision-Date: 2011-12-24 16:54+0200\n" | ||||
| "Last-Translator: Muhammet Kara <muhammet.k@gmail.com>\n" | ||||
| "POT-Creation-Date: 2012-08-06 23:35+0000\n" | ||||
| "PO-Revision-Date: 2012-08-09 16:48+0000\n" | ||||
| "Last-Translator: Muhammet Kara <muhammetk@acikkaynak.name.tr>\n" | ||||
| "Language-Team: Turkish <gnome-turk@gnome.org>\n" | ||||
| "Language: tr\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: Lokalize 1.2\n" | ||||
| "X-Generator: Lokalize 1.4\n" | ||||
| "Plural-Forms: nplurals=1; plural=0;\n" | ||||
| "Language: tr\n" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:1 | ||||
| msgid "Windows" | ||||
| msgstr "Pencereler" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:2 | ||||
| msgid "View split on left" | ||||
| msgstr "Solda bölünmüş olarak göster" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:2 | ||||
| #: ../src/50-mutter-windows.xml.in.h:3 | ||||
| msgid "View split on right" | ||||
| msgstr "Sağda bölünmüş olarak göster" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:3 | ||||
| #| msgid "_Windows" | ||||
| msgid "Windows" | ||||
| msgstr "Pencereler" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:492 | ||||
| @@ -47,7 +46,7 @@ msgstr "" | ||||
| "\"%2$s\" monitöründeki %1$i ekranında zaten başka bir birleştirme yöneticisi " | ||||
| "çalışıyor." | ||||
|  | ||||
| #: ../src/core/bell.c:307 | ||||
| #: ../src/core/bell.c:320 | ||||
| msgid "Bell event" | ||||
| msgstr "Etkinlik zili" | ||||
|  | ||||
| @@ -56,16 +55,17 @@ msgstr "Etkinlik zili" | ||||
| msgid "Unknown window information request: %d" | ||||
| msgstr "Bilinmeyen pencere bilgi isteği: %d" | ||||
|  | ||||
| #: ../src/core/delete.c:111 | ||||
| #, c-format | ||||
| msgid "<tt>%s</tt> is not responding." | ||||
| msgstr "<tt>%s</tt> cevap vermiyor." | ||||
|  | ||||
| #: ../src/core/delete.c:114 | ||||
| #, c-format | ||||
| #| msgid "<tt>%s</tt> is not responding." | ||||
| msgid "%s is not responding." | ||||
| msgstr "%s yanıt vermiyor." | ||||
|  | ||||
| #: ../src/core/delete.c:118 | ||||
| msgid "Application is not responding." | ||||
| msgstr "Uygulama cevap vermiyor" | ||||
|  | ||||
| #: ../src/core/delete.c:119 | ||||
| #: ../src/core/delete.c:123 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| @@ -73,25 +73,25 @@ msgstr "" | ||||
| "Uygulamanın devam etmesi için bir müddet bekleyi seçebilirsiniz ya d a " | ||||
| "uygulamanın tamamen çıkması için onu zorlayabilirsiniz." | ||||
|  | ||||
| #: ../src/core/delete.c:126 | ||||
| #: ../src/core/delete.c:130 | ||||
| msgid "_Wait" | ||||
| msgstr "_Bekle" | ||||
|  | ||||
| #: ../src/core/delete.c:126 | ||||
| #: ../src/core/delete.c:130 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Sonlandır" | ||||
|  | ||||
| #: ../src/core/display.c:365 | ||||
| #: ../src/core/display.c:380 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Kompozisyon için gerekli olan %s eklentisi eksik" | ||||
|  | ||||
| #: ../src/core/display.c:431 | ||||
| #: ../src/core/display.c:446 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "X Pencere Sistemi '%s' ekranı açılamadı\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:852 | ||||
| #: ../src/core/keybindings.c:844 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -100,36 +100,36 @@ msgstr "" | ||||
| "%s tuşu %x değiştiricileriyle birlikte başka bir uygulama tarafından tuş " | ||||
| "bağıolarak kullanılıyor\n" | ||||
|  | ||||
| #: ../src/core/main.c:206 | ||||
| #: ../src/core/main.c:196 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Ortam yöneticisine olan bağlantıyı kapat" | ||||
|  | ||||
| #: ../src/core/main.c:212 | ||||
| #: ../src/core/main.c:202 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Çalışan pencere yöneticisinin yerini al" | ||||
|  | ||||
| #: ../src/core/main.c:218 | ||||
| #: ../src/core/main.c:208 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Ortam yönetim ID'sini belirtin" | ||||
|  | ||||
| #: ../src/core/main.c:223 | ||||
| #: ../src/core/main.c:213 | ||||
| msgid "X Display to use" | ||||
| msgstr "Kullanılacak X Ekranı" | ||||
|  | ||||
| #: ../src/core/main.c:229 | ||||
| #: ../src/core/main.c:219 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Ortamı kayıtlı dosyadan başlat" | ||||
|  | ||||
| #: ../src/core/main.c:235 | ||||
| #: ../src/core/main.c:225 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "X çağrılarını eşazamanlı yap" | ||||
|  | ||||
| #: ../src/core/main.c:504 | ||||
| #: ../src/core/main.c:494 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Tema dizini taranırken hata oluştu: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:520 | ||||
| #: ../src/core/main.c:510 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -137,7 +137,7 @@ msgstr "" | ||||
| "Hiç tema bulunamadı! %s varlığından ve bildiğimiz temaları içerdiğinden emin " | ||||
| "olun.\n" | ||||
|  | ||||
| #: ../src/core/mutter.c:42 | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| @@ -151,15 +151,15 @@ msgstr "" | ||||
| "Bu bir özgür yazılımdır; telif koşullarını öğrenmek için kaynak koda bakın.\n" | ||||
| "Hiç bir garantisi, BELİRLİ BİR AMACA UYGUNLUĞU için dahi, YOKTUR.\n" | ||||
|  | ||||
| #: ../src/core/mutter.c:56 | ||||
| #: ../src/core/mutter.c:54 | ||||
| msgid "Print version" | ||||
| msgstr "Sürümü yazdır" | ||||
|  | ||||
| #: ../src/core/mutter.c:62 | ||||
| msgid "Comma-separated list of compositor plugins" | ||||
| msgstr "Kompozisyon eklentilerinin listesi (virgül ile ayrılmış)" | ||||
| #: ../src/core/mutter.c:60 | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Kullanılacak Mutter eklentisi" | ||||
|  | ||||
| #: ../src/core/prefs.c:1067 | ||||
| #: ../src/core/prefs.c:1065 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -167,14 +167,13 @@ msgstr "" | ||||
| "Hatalı uygulamalara yönelik çözümler devre dışı. Bazı uygulamalar düzgün " | ||||
| "işlemeyebilir.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1142 | ||||
| #: ../src/core/prefs.c:1140 | ||||
| #, c-format | ||||
| #| msgid "Could not parse font description \"%s\" from GConf key %s\n" | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "" | ||||
| "\"%s\" yazıtipi tanımlaması, %s GSettings anahtarından ayrıştırılamadı\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1208 | ||||
| #: ../src/core/prefs.c:1206 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -183,7 +182,7 @@ msgstr "" | ||||
| "Yapılandırma veritabanında bulunan \"%s\", fare düğme düzenleyicisi olarak " | ||||
| "geçerli bir değer değil\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1720 | ||||
| #: ../src/core/prefs.c:1724 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -192,17 +191,17 @@ msgstr "" | ||||
| "Yapılandırma veritabanında bulunan \"%s\", \"%s\" tuş bağı olarak geçerli " | ||||
| "bir değer değil\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1817 | ||||
| #: ../src/core/prefs.c:1821 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Çalışma Alanı %d" | ||||
|  | ||||
| #: ../src/core/screen.c:741 | ||||
| #: ../src/core/screen.c:652 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "'%2$s' X oturumundaki ekran %1$d geçersiz\n" | ||||
|  | ||||
| #: ../src/core/screen.c:757 | ||||
| #: ../src/core/screen.c:668 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -212,7 +211,7 @@ msgstr "" | ||||
| "geçerli pencere yöneticisinin yerine bir başkasını koymak için --replace " | ||||
| "seçeneğini kullanmayı deneyin.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:784 | ||||
| #: ../src/core/screen.c:695 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| @@ -220,13 +219,13 @@ msgstr "" | ||||
| "\"%2$s\" X oturumundaki ekran %1$d hangi pencere yöneticisine " | ||||
| "sahipöğrenilemedi\n" | ||||
|  | ||||
| #: ../src/core/screen.c:839 | ||||
| #: ../src/core/screen.c:750 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "" | ||||
| "\"%2$s\" X oturumundaki ekran %1$d bir pencere yöneticisine zaten sahip\n" | ||||
|  | ||||
| #: ../src/core/screen.c:1024 | ||||
| #: ../src/core/screen.c:935 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "\"%2$s\" X oturumundaki ekran %1$d serberst bırakılamadı\"\n" | ||||
| @@ -288,44 +287,44 @@ msgstr "" | ||||
| "Bu pencereler, "geçerli ayarları kaydet" özelliğini desteklemiyor " | ||||
| "ve bir dahaki girişinizde elle yeniden başlatmanız gerekecek." | ||||
|  | ||||
| #: ../src/core/util.c:111 | ||||
| #: ../src/core/util.c:80 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Hata ayıklama günlüğü açılamadı: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:121 | ||||
| #: ../src/core/util.c:90 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "fdopen() günlük dosyası %s açılamadı: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:127 | ||||
| #: ../src/core/util.c:96 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "%s günlük dosyası açıldı\n" | ||||
|  | ||||
| #: ../src/core/util.c:146 ../src/tools/mutter-message.c:149 | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter, ayrıntılı kip desteği olmadan derlenmiş\n" | ||||
|  | ||||
| #: ../src/core/util.c:290 | ||||
| #: ../src/core/util.c:259 | ||||
| msgid "Window manager: " | ||||
| msgstr "Pencere yöneticisi: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:407 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Pencere yöneticisinde hata: " | ||||
|  | ||||
| #: ../src/core/util.c:471 | ||||
| #: ../src/core/util.c:438 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Pencere yöneticisi uyarısı: " | ||||
|  | ||||
| #: ../src/core/util.c:499 | ||||
| #: ../src/core/util.c:466 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Pencere yöneticisi hatası: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7145 | ||||
| #: ../src/core/window.c:7234 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -341,32 +340,32 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:7808 | ||||
| #: ../src/core/window.c:7899 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %" | ||||
| "d x %d and max size %d x %d; this doesn't make much sense.\n" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| "%d x %d and max size %d x %d; this doesn't make much sense.\n" | ||||
| msgstr "" | ||||
| "%s penceresi bir yandan yeniden boyutlandırılamaz olduğunu gösteren bir MWM " | ||||
| "ipucu verirken anlamsız bir biçimde en küçük (%d x %d) ve en büyük (%d x %d) " | ||||
| "boyut sınırlarını da atıyor.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:309 | ||||
| #: ../src/core/window-props.c:310 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Uygulama geçersiz _NET_WM_PID %lu atadı\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:426 | ||||
| #: ../src/core/window-props.c:429 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (%s üzerinde)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1481 | ||||
| #: ../src/core/window-props.c:1484 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Geçersiz WM_TRANSIENT_FOR pencere 0x%lx belirtilen %s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1492 | ||||
| #: ../src/core/window-props.c:1495 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR penceresi 0x%lx  (%s için) döngü oluşturacak.\n" | ||||
| @@ -404,87 +403,10 @@ msgid "Mutter" | ||||
| msgstr "Mutter" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:1 | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "Yardımcı diyalogları ekle" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:2 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Sekmeyi yeni pencerede açmayı iptal et" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:3 | ||||
| msgid "" | ||||
| "Determines whether hidden windows (i.e., minimized windows and windows on " | ||||
| "other workspaces than the current one) should be kept alive." | ||||
| msgstr "" | ||||
| "Gizli pencerelerin (ö.r. küçültülmüş pencereler ve diğer çalışma alanındaki " | ||||
| "pencereler) çalışır bırakılıp bırakılmayacağını belirler." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:4 | ||||
| msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
| "Pencere geçişinde çerçeve vurgulanması ve açılır pencere kullanımının " | ||||
| "kapatılıp " | ||||
| "kapatılmayacağını belirler." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:5 | ||||
| msgid "" | ||||
| "Determines whether workspace switching should happen for windows on all " | ||||
| "monitors or only for windows on the primary monitor." | ||||
| msgstr "" | ||||
| "Çalışma alanı değiştirilmesinin, tüm monitörlerdeki pencerelerde mi yoksa " | ||||
| "sadece birincil monitördekilerde mi gerçekleşeceğini belirler." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:6 | ||||
| msgid "Draggable border width" | ||||
| msgstr "Sürüklenebilir kenarlık genişliği" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:7 | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "" | ||||
| "Pencereler ekran kenarlarında bırakıldığında kenar döşemeyi etkinleştir." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:8 | ||||
| msgid "" | ||||
| "If enabled, dropping windows on vertical screen edges maximizes them " | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
| "Eğer etkinleştirilirse, dikey ekran kenarlarına bırakılan pencereler dikey " | ||||
| "olarak " | ||||
| "ekranı kaplar ve yatayda kullanılabilir alanın yarısını kaplayacak şekilde " | ||||
| "yeniden " | ||||
| "boyutlandırılır. Ekranın tepedeki kenarına bırakılan pencereler ekranı " | ||||
| "tamamen kaplar." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:9 | ||||
| msgid "Live Hidden Windows" | ||||
| msgstr "Çalışır Durumdaki Gizli Pencereler" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:10 | ||||
| msgid "Modifier to use for extended window management operations" | ||||
| msgstr "Genişletilmiş pencere yönetimi işlemleri için kullanılacak değiştirici" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:11 | ||||
| msgid "No tab popup" | ||||
| msgstr "Sekme açılır penceresi yok" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:12 | ||||
| #| msgid "Remove Window From Top" | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Pencereyi, sekme açılır penceresinden seç" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:13 | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
| "Sürüklenebilir kenarlıkların toplam miktarı. Eğer temanın görünür " | ||||
| "kenarlıkları yetersiz gelirse, bu değere ulaşmak için görünmez kenarlıklar " | ||||
| "eklenir." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:14 | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:2 | ||||
| msgid "" | ||||
| "This key will initiate the \"overlay\", which is a combination window " | ||||
| "overview and application launching system. The default is intended to be the " | ||||
| @@ -496,7 +418,11 @@ msgstr "" | ||||
| "donanımındaki \"windows tuşu\" olması tasarlanmıştır. Bağlayıcı varsayılan " | ||||
| "olarak veya boş dize olarak ayarlanması beklenir." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:15 | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:3 | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "Yardımcı diyalogları ekle" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:4 | ||||
| msgid "" | ||||
| "When true, instead of having independent titlebars, modal dialogs appear " | ||||
| "attached to the titlebar of the parent window and are moved together with " | ||||
| @@ -506,59 +432,86 @@ msgstr "" | ||||
| "diyalogları üst pencerenin başlık çubuğunda ekli gözükür ve üst pencere ile " | ||||
| "birlikte hareket eder." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:16 | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:5 | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "" | ||||
| "Pencereler ekran kenarlarında bırakıldığında kenar döşemeyi etkinleştir." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:6 | ||||
| msgid "" | ||||
| "If enabled, dropping windows on vertical screen edges maximizes them " | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
| "Eğer etkinleştirilirse, dikey ekran kenarlarına bırakılan pencereler dikey " | ||||
| "olarak ekranı kaplar ve yatayda kullanılabilir alanın yarısını kaplayacak " | ||||
| "şekilde yeniden boyutlandırılır. Ekranın tepedeki kenarına bırakılan " | ||||
| "pencereler ekranı tamamen kaplar." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:7 | ||||
| msgid "Workspaces are managed dynamically" | ||||
| msgstr "Çalışma alanları dinamik olarak yönetilir" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:8 | ||||
| msgid "" | ||||
| "Determines whether workspaces are managed dynamically or whether there's a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
| "Çalışma alanlarının dinamik olarak mı yönetileceğini yoksa sabit sayıda " | ||||
| "çalışma alanı mı olacağını belirler (org.gnome.desktop.wm.preferences " | ||||
| "içindeki num-workspaces değişkeni tarafından belirlenir)." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:9 | ||||
| msgid "Workspaces only on primary" | ||||
| msgstr "Sadece birincil monitördeki çalışma alanları" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:10 | ||||
| msgid "" | ||||
| "Determines whether workspace switching should happen for windows on all " | ||||
| "monitors or only for windows on the primary monitor." | ||||
| msgstr "" | ||||
| "Çalışma alanı değiştirilmesinin, tüm monitörlerdeki pencerelerde mi yoksa " | ||||
| "sadece birincil monitördekilerde mi gerçekleşeceğini belirler." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:11 | ||||
| msgid "No tab popup" | ||||
| msgstr "Sekme açılır penceresi yok" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:12 | ||||
| msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
| "Pencere geçişinde çerçeve vurgulanması ve açılır pencere kullanımının " | ||||
| "kapatılıp kapatılmayacağını belirler." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:13 | ||||
| msgid "Draggable border width" | ||||
| msgstr "Sürüklenebilir kenarlık genişliği" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:14 | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
| "Sürüklenebilir kenarlıkların toplam miktarı. Eğer temanın görünür " | ||||
| "kenarlıkları yetersiz gelirse, bu değere ulaşmak için görünmez kenarlıklar " | ||||
| "eklenir." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:15 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Pencereyi, sekme açılır penceresinden seç" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:16 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Sekmeyi yeni pencerede açmayı iptal et" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Kullanım: %s\n" | ||||
|  | ||||
| #: ../src/ui/frames.c:1157 | ||||
| msgid "Close Window" | ||||
| msgstr "Pencereyi Kapat" | ||||
|  | ||||
| #: ../src/ui/frames.c:1160 | ||||
| msgid "Window Menu" | ||||
| msgstr "Pencere Menüsü" | ||||
|  | ||||
| #: ../src/ui/frames.c:1163 | ||||
| msgid "Minimize Window" | ||||
| msgstr "Pencereyi Küçült" | ||||
|  | ||||
| #: ../src/ui/frames.c:1166 | ||||
| msgid "Maximize Window" | ||||
| msgstr "Pencereyi Büyült" | ||||
|  | ||||
| #: ../src/ui/frames.c:1169 | ||||
| msgid "Restore Window" | ||||
| msgstr "Pencere Geri Getir" | ||||
|  | ||||
| #: ../src/ui/frames.c:1172 | ||||
| msgid "Roll Up Window" | ||||
| msgstr "Pencereyi Yukarı Sar" | ||||
|  | ||||
| #: ../src/ui/frames.c:1175 | ||||
| msgid "Unroll Window" | ||||
| msgstr "Pencereyi Geri Sar" | ||||
|  | ||||
| #: ../src/ui/frames.c:1178 | ||||
| msgid "Keep Window On Top" | ||||
| msgstr "Pencereyi Üstte Tut" | ||||
|  | ||||
| #: ../src/ui/frames.c:1181 | ||||
| msgid "Remove Window From Top" | ||||
| msgstr "Pencereyi Üstten Kaldır" | ||||
|  | ||||
| #: ../src/ui/frames.c:1184 | ||||
| msgid "Always On Visible Workspace" | ||||
| msgstr "Her Zaman Görünen Çalışma Alanında" | ||||
|  | ||||
| #: ../src/ui/frames.c:1187 | ||||
| msgid "Put Window On Only One Workspace" | ||||
| msgstr "Pencereyi Sadece Bir Çalışma Alanına Yerleştir" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Mi_nimize" | ||||
| @@ -758,49 +711,49 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:253 | ||||
| #: ../src/ui/theme.c:234 | ||||
| msgid "top" | ||||
| msgstr "üst" | ||||
|  | ||||
| #: ../src/ui/theme.c:255 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "bottom" | ||||
| msgstr "alt" | ||||
|  | ||||
| #: ../src/ui/theme.c:257 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "left" | ||||
| msgstr "sol" | ||||
|  | ||||
| #: ../src/ui/theme.c:259 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "right" | ||||
| msgstr "sağ" | ||||
|  | ||||
| #: ../src/ui/theme.c:286 | ||||
| #: ../src/ui/theme.c:268 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "çerçeve geometrisi \"%s\" boyutunu tanımlamıyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:305 | ||||
| #: ../src/ui/theme.c:287 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "" | ||||
| "çerçeve geometrisi \"%s\" boyutunu \"%s\" pencere kenarı için tanımlamıyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:342 | ||||
| #: ../src/ui/theme.c:324 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "%g kabul edilebilir bir düğme en-boy oranı değil" | ||||
|  | ||||
| #: ../src/ui/theme.c:354 | ||||
| #: ../src/ui/theme.c:336 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "Çerçeve geometrisi düğmelerin boyutunu tanımlamıyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1067 | ||||
| #: ../src/ui/theme.c:1049 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Renk geçişlerinde en az iki renk olmalı" | ||||
|  | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #: ../src/ui/theme.c:1201 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -809,7 +762,7 @@ msgstr "" | ||||
| "GTK özel renk belirtiminde parantez içinde renk adı ve fallback kelimesi yer " | ||||
| "almalıdır; örneğin, gtk:custom[foo,bar]; \"%s\" ayrıştırılamadı" | ||||
|  | ||||
| #: ../src/ui/theme.c:1235 | ||||
| #: ../src/ui/theme.c:1217 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -818,7 +771,7 @@ msgstr "" | ||||
| "gtk:custom color_name parametresinin adında geçersiz karakter '%c'; sadece A-" | ||||
| "Za-z0-9-_ karakterleri geçerlidir" | ||||
|  | ||||
| #: ../src/ui/theme.c:1249 | ||||
| #: ../src/ui/theme.c:1231 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -827,7 +780,7 @@ msgstr "" | ||||
| "Gtk:custom biçimi \"gtk:custom(color_name,fallback)\" şeklindedir; \"%s\" " | ||||
| "biçime uymuyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1294 | ||||
| #: ../src/ui/theme.c:1276 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -837,7 +790,7 @@ msgstr "" | ||||
| "örneğin, gtk:fg[NORMAL] belirtiminde NORMAL, durumu gösterir; \"%s\" " | ||||
| "ayrıştırılamadı" | ||||
|  | ||||
| #: ../src/ui/theme.c:1308 | ||||
| #: ../src/ui/theme.c:1290 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -847,17 +800,17 @@ msgstr "" | ||||
| "örneğin, gtk:fg[NORMAL] belirtiminde NORMAL, durumu gösterir; \"%s\" " | ||||
| "ayrıştırılamadı" | ||||
|  | ||||
| #: ../src/ui/theme.c:1319 | ||||
| #: ../src/ui/theme.c:1301 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Renk belirtimindeki \"%s\" durumu anlaşılamadı" | ||||
|  | ||||
| #: ../src/ui/theme.c:1332 | ||||
| #: ../src/ui/theme.c:1314 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "Renk belirtimindeki \"%s\" renk bileşeni anlaşılamadı" | ||||
|  | ||||
| #: ../src/ui/theme.c:1361 | ||||
| #: ../src/ui/theme.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -866,17 +819,17 @@ msgstr "" | ||||
| "Renk karışımının doğru biçimi \"blend/bg_color/fg_color/alpha\"dır; \"%s\" " | ||||
| "bu biçime uymuyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1372 | ||||
| #: ../src/ui/theme.c:1354 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Renk karışımındaki \"%s\" alfa değeri ayrıştırılamadı" | ||||
|  | ||||
| #: ../src/ui/theme.c:1382 | ||||
| #: ../src/ui/theme.c:1364 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "Renk karışımının alfa değeri \"%s\", 0.0 ile 1.0 arasında değil" | ||||
|  | ||||
| #: ../src/ui/theme.c:1429 | ||||
| #: ../src/ui/theme.c:1411 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| @@ -884,27 +837,27 @@ msgstr "" | ||||
| "Gölgelendirmenin doğru biçimi \"shade/bas_color/factor\"dır; \"%s\" bu " | ||||
| "biçime uymuyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1440 | ||||
| #: ../src/ui/theme.c:1422 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "Gölgeli rengin gölge katsayısı olan \"%s\" ayrıştırılamadı" | ||||
|  | ||||
| #: ../src/ui/theme.c:1450 | ||||
| #: ../src/ui/theme.c:1432 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Gölgeli rengin gölge katsayısı olan \"%s\", negatif" | ||||
|  | ||||
| #: ../src/ui/theme.c:1479 | ||||
| #: ../src/ui/theme.c:1461 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "\"%s\" rengi ayrıştırılamadı" | ||||
|  | ||||
| #: ../src/ui/theme.c:1790 | ||||
| #: ../src/ui/theme.c:1778 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Kordinat ifadesi izin verilmeyen '%s' karakterini içeriyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1817 | ||||
| #: ../src/ui/theme.c:1805 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| @@ -912,12 +865,12 @@ msgid "" | ||||
| msgstr "" | ||||
| "Kordinat ifadesi '%s' gerçel sayısını içeriyor ve bu sayı ayrıştırılamıyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1831 | ||||
| #: ../src/ui/theme.c:1819 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "Kordinat ifadesi ayrıştırılamayan '%s' tamsayısını içeriyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:1953 | ||||
| #: ../src/ui/theme.c:1940 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -925,17 +878,17 @@ msgid "" | ||||
| msgstr "" | ||||
| "Kordinat ifadesi bu metnin başında bilinmeyen bir işleç içeriyor: \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:2010 | ||||
| #: ../src/ui/theme.c:1997 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "Kordinat ifadesi boş ya da anlaşılamadı" | ||||
|  | ||||
| #: ../src/ui/theme.c:2121 ../src/ui/theme.c:2131 ../src/ui/theme.c:2165 | ||||
| #: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "Kordinat ifadesi sıfıra bölümle sonuçlanıyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:2173 | ||||
| #: ../src/ui/theme.c:2162 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| @@ -943,23 +896,23 @@ msgstr "" | ||||
| "Kordinat ifadesi bir gerçel sayı üzerinde mod (kalan bulma) işlecini " | ||||
| "kullanmaya çalıştı" | ||||
|  | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #: ../src/ui/theme.c:2218 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "Kordinat ifadesi işleneni beklenen \"%s\", işlecini içeriyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:2238 | ||||
| #: ../src/ui/theme.c:2227 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "Kordinat ifadesi işleci beklenen bir işlenen içeriyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2235 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "Kordinat ifadesi bir işlenen yerine işleçle bitiyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:2256 | ||||
| #: ../src/ui/theme.c:2245 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -968,38 +921,38 @@ msgstr "" | ||||
| "Kordinat ifadesi birbirlerinin izleyen ve aralarında işlenen olmayan \"%2$c" | ||||
| "\" ve \"%1$c\" işleçlerini içeriyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:2407 ../src/ui/theme.c:2452 | ||||
| #: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "" | ||||
| "Kordinat ifadesi bilinmeyen bir değişken ya da sabit olan \"%s\" içeriyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:2506 | ||||
| #: ../src/ui/theme.c:2495 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "Kordinat belirtim ayrıştırıcısı tamponundan taştı." | ||||
|  | ||||
| #: ../src/ui/theme.c:2535 | ||||
| #: ../src/ui/theme.c:2524 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "Kordinat ifadesi sol parantezi olmayan bir sağ parantez içeriyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:2599 | ||||
| #: ../src/ui/theme.c:2588 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "Kordinat ifadesi sağ parantezi olmayan bir sol parantez içeriyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:2610 | ||||
| #: ../src/ui/theme.c:2599 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "Kordinat ifadesi göründüğü kadarıyla ne işleç ne de işlenen içeriyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:2822 ../src/ui/theme.c:2842 ../src/ui/theme.c:2862 | ||||
| #: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Tema bir hata ile sonuçlanan ifadeye sahip: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4533 | ||||
| #: ../src/ui/theme.c:4498 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1008,25 +961,25 @@ msgstr "" | ||||
| "Bu çerçeve biçeminde <button function=\"%s\" state=\"%s\" draw_ops=\"her " | ||||
| "neyse\"/> belirtilmek zorunda" | ||||
|  | ||||
| #: ../src/ui/theme.c:5066 ../src/ui/theme.c:5091 | ||||
| #: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "" | ||||
| "Eksik <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"her neyse\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5139 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "\"%s\" teması yüklenemedi: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5275 ../src/ui/theme.c:5282 ../src/ui/theme.c:5289 | ||||
| #: ../src/ui/theme.c:5296 ../src/ui/theme.c:5303 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "\"%2$s\" temasında hiç <%1$s> atanmamış" | ||||
|  | ||||
| #: ../src/ui/theme.c:5311 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1035,14 +988,14 @@ msgstr "" | ||||
| "\"%2$s\" temasında \"%1$s\" pencere türüne çerçeve biçemi atanmamış, bir " | ||||
| "<window type=\"%3$s\" style_set=\"her neyse\"/> öğesi ekleyin" | ||||
|  | ||||
| #: ../src/ui/theme.c:5709 ../src/ui/theme.c:5771 ../src/ui/theme.c:5834 | ||||
| #: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "" | ||||
| "Kullanıcı tanımlı sabitler büyük harfle başlamalıdır; \"%s\" buna uymuyor" | ||||
|  | ||||
| #: ../src/ui/theme.c:5717 ../src/ui/theme.c:5779 ../src/ui/theme.c:5842 | ||||
| #: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "\"%s\" sabit değeri zaten tanımlanmış" | ||||
| @@ -1425,7 +1378,7 @@ msgstr "<%s> öğesinin içinde metin bulunmamalıdır" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "Bu tema için <%s> iki kez belirtilmiş" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4348 | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Tema %s için geçerli bir dosya bulunamadı\n" | ||||
| @@ -1629,6 +1582,52 @@ msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "%d kordinat ifadesi %g saniye içinde ayrıştırıldı (%g saniye ortalama ile)\n" | ||||
|  | ||||
| #~ msgid "Comma-separated list of compositor plugins" | ||||
| #~ msgstr "Kompozisyon eklentilerinin listesi (virgül ile ayrılmış)" | ||||
|  | ||||
| #~ msgid "Live Hidden Windows" | ||||
| #~ msgstr "Çalışır Durumdaki Gizli Pencereler" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "Determines whether hidden windows (i.e., minimized windows and windows on " | ||||
| #~ "other workspaces than the current one) should be kept alive." | ||||
| #~ msgstr "" | ||||
| #~ "Gizli pencerelerin (ö.r. küçültülmüş pencereler ve diğer çalışma " | ||||
| #~ "alanındaki pencereler) çalışır bırakılıp bırakılmayacağını belirler." | ||||
|  | ||||
| #~ msgid "Close Window" | ||||
| #~ msgstr "Pencereyi Kapat" | ||||
|  | ||||
| #~ msgid "Window Menu" | ||||
| #~ msgstr "Pencere Menüsü" | ||||
|  | ||||
| #~ msgid "Minimize Window" | ||||
| #~ msgstr "Pencereyi Küçült" | ||||
|  | ||||
| #~ msgid "Maximize Window" | ||||
| #~ msgstr "Pencereyi Büyült" | ||||
|  | ||||
| #~ msgid "Restore Window" | ||||
| #~ msgstr "Pencere Geri Getir" | ||||
|  | ||||
| #~ msgid "Roll Up Window" | ||||
| #~ msgstr "Pencereyi Yukarı Sar" | ||||
|  | ||||
| #~ msgid "Unroll Window" | ||||
| #~ msgstr "Pencereyi Geri Sar" | ||||
|  | ||||
| #~ msgid "Keep Window On Top" | ||||
| #~ msgstr "Pencereyi Üstte Tut" | ||||
|  | ||||
| #~ msgid "Remove Window From Top" | ||||
| #~ msgstr "Pencereyi Üstten Kaldır" | ||||
|  | ||||
| #~ msgid "Always On Visible Workspace" | ||||
| #~ msgstr "Her Zaman Görünen Çalışma Alanında" | ||||
|  | ||||
| #~ msgid "Put Window On Only One Workspace" | ||||
| #~ msgstr "Pencereyi Sadece Bir Çalışma Alanına Yerleştir" | ||||
|  | ||||
| #~ msgid "Switch to workspace 1" | ||||
| #~ msgstr "Çalışma alanı 1'e geç" | ||||
|  | ||||
|   | ||||
							
								
								
									
										1194
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
							
						
						
									
										1194
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1494
									
								
								po/zh_HK.po
									
									
									
									
									
								
							
							
						
						
									
										1494
									
								
								po/zh_HK.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1503
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
							
						
						
									
										1503
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										80
									
								
								src/50-mutter-navigation.xml.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								src/50-mutter-navigation.xml.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <KeyListEntries schema="org.gnome.desktop.wm.keybindings" | ||||
|                 group="system" | ||||
|                 _name="Navigation" | ||||
|                 wm_name="Mutter" | ||||
|                 package="mutter"> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-1" | ||||
| 	              _description="Move window to workspace 1" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-2" | ||||
| 	              _description="Move window to workspace 2" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-3" | ||||
| 	              _description="Move window to workspace 3" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-4" | ||||
| 	              _description="Move window to workspace 4" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-left" | ||||
| 	              _description="Move window one workspace to the left" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-right" | ||||
| 	              _description="Move window one workspace to the right" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-up" | ||||
| 	              _description="Move window one workspace up" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-down" | ||||
| 	              _description="Move window one workspace down" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-applications" | ||||
| 	              _description="Switch applications"/> | ||||
|  | ||||
| 	<KeyListEntry name="switch-windows" | ||||
| 	              _description="Switch windows"/> | ||||
|  | ||||
| 	<KeyListEntry name="switch-group" | ||||
| 	              _description="Switch windows of an application"/> | ||||
|  | ||||
| 	<KeyListEntry name="switch-panels" | ||||
| 	              _description="Switch system controls"/> | ||||
|  | ||||
| 	<KeyListEntry name="cycle-windows" | ||||
| 	              _description="Switch windows directly"/> | ||||
|  | ||||
| 	<KeyListEntry name="cycle-group" | ||||
| 	              _description="Switch windows of an app directly"/> | ||||
|  | ||||
| 	<KeyListEntry name="cycle-panels" | ||||
| 	              _description="Switch system controls directly"/> | ||||
|  | ||||
| 	<KeyListEntry name="show-desktop" | ||||
| 	              _description="Hide all normal windows"/> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-1" | ||||
| 	              _description="Switch to workspace 1" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-2" | ||||
| 	              _description="Switch to workspace 2" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-3" | ||||
| 	              _description="Switch to workspace 3" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-4" | ||||
| 	              _description="Switch to workspace 4" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-left" | ||||
| 	              _description="Move to workspace left" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-right" | ||||
| 	              _description="Move to workspace right" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-up" | ||||
| 	              _description="Move to workspace above" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-down" | ||||
| 	              _description="Move to workspace below" /> | ||||
|  | ||||
| </KeyListEntries> | ||||
							
								
								
									
										13
									
								
								src/50-mutter-system.xml.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/50-mutter-system.xml.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <KeyListEntries schema="org.gnome.desktop.wm.keybindings" | ||||
|                 group="system" | ||||
|                 _name="System" | ||||
|                 wm_name="Mutter" | ||||
|                 package="mutter"> | ||||
|  | ||||
| 	<KeyListEntry name="panel-run-dialog" _description="Show the run command prompt"/> | ||||
|  | ||||
| 	<KeyListEntry name="panel-main-menu" _description="Show the activities overview"/> | ||||
|  | ||||
| </KeyListEntries> | ||||
|  | ||||
| @@ -1,14 +1,49 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <KeyListEntries schema="org.gnome.mutter.keybindings" | ||||
| <KeyListEntries schema="org.gnome.desktop.wm.keybindings" | ||||
|                 group="system" | ||||
|                 _name="Windows" | ||||
|                 wm_name="Mutter" | ||||
|                 package="mutter"> | ||||
|  | ||||
| 	<KeyListEntry name="activate-window-menu" _description="Activate the window menu"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-fullscreen" _description="Toggle fullscreen mode"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-maximized" _description="Toggle maximization state"/> | ||||
|  | ||||
| 	<KeyListEntry name="maximize" _description="Maximize window"/> | ||||
|  | ||||
| 	<KeyListEntry name="unmaximize" _description="Restore window"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-shaded" _description="Toggle shaded state"/> | ||||
|  | ||||
| 	<KeyListEntry name="close" _description="Close window"/> | ||||
|  | ||||
| 	<KeyListEntry name="minimize" _description="Hide window"/> | ||||
|  | ||||
| 	<KeyListEntry name="begin-move" _description="Move window"/> | ||||
|  | ||||
| 	<KeyListEntry name="begin-resize" _description="Resize window"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-on-all-workspaces" | ||||
| 	              _description="Toggle window on all workspaces or one"/> | ||||
|  | ||||
| 	<KeyListEntry name="raise-or-lower" _description="Raise window if covered, otherwise lower it"/> | ||||
|  | ||||
| 	<KeyListEntry name="raise" _description="Raise window above other windows"/> | ||||
|  | ||||
| 	<KeyListEntry name="lower" _description="Lower window below other windows"/> | ||||
|  | ||||
| 	<KeyListEntry name="maximize-vertically" _description="Maximize window vertically"/> | ||||
|  | ||||
| 	<KeyListEntry name="maximize-horizontally" _description="Maximize window horizontally"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-tiled-left" | ||||
|                       schema="org.gnome.mutter.keybindings" | ||||
|                       _description="View split on left"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-tiled-right" | ||||
|                       schema="org.gnome.mutter.keybindings" | ||||
|                       _description="View split on right"/> | ||||
|  | ||||
| </KeyListEntries> | ||||
|   | ||||
| @@ -6,6 +6,9 @@ lib_LTLIBRARIES = libmutter.la | ||||
| SUBDIRS=wm-tester tools compositor/plugins | ||||
|  | ||||
| INCLUDES=								\ | ||||
| 	-DCLUTTER_ENABLE_EXPERIMENTAL_API				\ | ||||
| 	-DCOGL_ENABLE_EXPERIMENTAL_API					\ | ||||
| 	-DCOGL_ENABLE_EXPERIMENTAL_2_0_API                              \ | ||||
| 	$(MUTTER_CFLAGS)						\ | ||||
| 	-I$(srcdir)							\ | ||||
| 	-I$(srcdir)/core						\ | ||||
| @@ -33,17 +36,24 @@ mutter_built_sources = \ | ||||
| libmutter_la_SOURCES =				\ | ||||
| 	core/async-getprop.c			\ | ||||
| 	core/async-getprop.h			\ | ||||
| 	core/barrier.c				\ | ||||
| 	meta/barrier.h				\ | ||||
| 	core/bell.c				\ | ||||
| 	core/bell.h				\ | ||||
| 	core/boxes.c				\ | ||||
| 	core/boxes-private.h			\ | ||||
| 	meta/boxes.h				\ | ||||
| 	compositor/clutter-utils.c		\ | ||||
| 	compositor/clutter-utils.h		\ | ||||
| 	compositor/cogl-utils.c			\ | ||||
| 	compositor/cogl-utils.h			\ | ||||
| 	compositor/compositor.c			\ | ||||
| 	compositor/compositor-private.h		\ | ||||
| 	compositor/meta-background.c		\ | ||||
| 	compositor/meta-background-actor.c	\ | ||||
| 	compositor/meta-background-actor-private.h	\ | ||||
| 	compositor/meta-background-group.c	\ | ||||
| 	compositor/meta-background-group-private.h	\ | ||||
| 	compositor/meta-module.c		\ | ||||
| 	compositor/meta-module.h		\ | ||||
| 	compositor/meta-plugin.c		\ | ||||
| @@ -52,7 +62,6 @@ libmutter_la_SOURCES =				\ | ||||
| 	compositor/meta-shadow-factory.c	\ | ||||
| 	compositor/meta-shadow-factory-private.h	\ | ||||
| 	compositor/meta-shaped-texture.c	\ | ||||
| 	compositor/meta-shaped-texture.h	\ | ||||
| 	compositor/meta-texture-rectangle.c	\ | ||||
| 	compositor/meta-texture-rectangle.h	\ | ||||
| 	compositor/meta-texture-tower.c		\ | ||||
| @@ -66,7 +75,9 @@ libmutter_la_SOURCES =				\ | ||||
| 	compositor/region-utils.c		\ | ||||
| 	compositor/region-utils.h		\ | ||||
| 	meta/compositor.h			\ | ||||
| 	meta/meta-background.h			\ | ||||
| 	meta/meta-background-actor.h		\ | ||||
| 	meta/meta-background-group.h		\ | ||||
| 	meta/meta-plugin.h			\ | ||||
| 	meta/meta-shadow-factory.h		\ | ||||
| 	meta/meta-window-actor.h		\ | ||||
| @@ -85,8 +96,6 @@ libmutter_la_SOURCES =				\ | ||||
| 	core/edge-resistance.h			\ | ||||
| 	core/errors.c				\ | ||||
| 	meta/errors.h				\ | ||||
| 	core/eventqueue.c			\ | ||||
| 	core/eventqueue.h			\ | ||||
| 	core/frame.c				\ | ||||
| 	core/frame.h				\ | ||||
| 	ui/gradient.c				\ | ||||
| @@ -131,8 +140,6 @@ libmutter_la_SOURCES =				\ | ||||
| 	core/core.h				\ | ||||
| 	ui/ui.h					\ | ||||
| 	inlinepixbufs.h				\ | ||||
| 	ui/fixedtip.c				\ | ||||
| 	ui/fixedtip.h				\ | ||||
| 	ui/frames.c				\ | ||||
| 	ui/frames.h				\ | ||||
| 	ui/menu.c				\ | ||||
| @@ -160,6 +167,7 @@ libmutter_la_LIBADD  = $(MUTTER_LIBS) | ||||
| # Headers installed for plugins; introspected information will | ||||
| # be extracted into Mutter-<version>.gir | ||||
| libmutterinclude_base_headers =		\ | ||||
| 	meta/barrier.h				\ | ||||
| 	meta/boxes.h				\ | ||||
| 	meta/common.h				\ | ||||
| 	meta/compositor-mutter.h		\ | ||||
| @@ -171,7 +179,10 @@ libmutterinclude_base_headers =		\ | ||||
| 	meta/keybindings.h			\ | ||||
| 	meta/main.h				\ | ||||
| 	meta/meta-background-actor.h		\ | ||||
| 	meta/meta-background-group.h		\ | ||||
| 	meta/meta-background.h			\ | ||||
| 	meta/meta-plugin.h			\ | ||||
| 	meta/meta-shaped-texture.h		\ | ||||
| 	meta/meta-shadow-factory.h		\ | ||||
| 	meta/meta-window-actor.h		\ | ||||
| 	meta/prefs.h				\ | ||||
| @@ -223,8 +234,8 @@ typelib_DATA = Meta-$(api_version).typelib | ||||
| INTROSPECTION_GIRS = Meta-$(api_version).gir | ||||
|  | ||||
| Meta-$(api_version).gir: libmutter.la | ||||
| @META_GIR@_INCLUDES = GObject-2.0 GDesktopEnums-3.0 Gdk-3.0 Gtk-3.0 Clutter-1.0 xlib-2.0 xfixes-4.0 | ||||
| @META_GIR@_PACKAGES = clutter-1.0 gtk+-3.0 | ||||
| @META_GIR@_INCLUDES = GObject-2.0 GDesktopEnums-3.0 Gdk-3.0 Gtk-3.0 Clutter-1.0 xlib-2.0 xfixes-4.0 Cogl-1.0 | ||||
| @META_GIR@_EXPORT_PACKAGES = libmutter | ||||
| @META_GIR@_CFLAGS = $(INCLUDES) | ||||
| @META_GIR@_LIBS = libmutter.la | ||||
| @META_GIR@_FILES =				\ | ||||
| @@ -261,6 +272,8 @@ wmproperties_DATA = $(wmproperties_files) | ||||
|  | ||||
| xmldir       = @GNOME_KEYBINDINGS_KEYSDIR@ | ||||
| xml_in_files = \ | ||||
|         50-mutter-navigation.xml.in	\ | ||||
|         50-mutter-system.xml.in		\ | ||||
|         50-mutter-windows.xml.in | ||||
| xml_DATA     = $(xml_in_files:.xml.in=.xml) | ||||
|  | ||||
|   | ||||
							
								
								
									
										120
									
								
								src/compositor/clutter-utils.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								src/compositor/clutter-utils.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| /* | ||||
|  * Utilities for use with Cogl | ||||
|  * | ||||
|  * Copyright 2010 Red Hat, Inc. | ||||
|  * Copyright 2010 Intel Corporation | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| #include "clutter-utils.h" | ||||
| #include <math.h> | ||||
|  | ||||
| /* This file uses pixel-aligned region computation to determine what | ||||
|  * can be clipped out. This only really works if everything is aligned | ||||
|  * to the pixel grid - not scaled or rotated and at integer offsets. | ||||
|  * | ||||
|  * (This could be relaxed - if we turned off filtering for unscaled | ||||
|  * windows then windows would be, by definition aligned to the pixel | ||||
|  * grid. And for rectangular windows without a shape, the outline that | ||||
|  * we draw for an unrotated window is always a rectangle because we | ||||
|  * don't use antialasing for the window boundary - with or without | ||||
|  * filtering, with or without a scale. But figuring out exactly | ||||
|  * what pixels will be drawn by the graphics system in these cases | ||||
|  * gets tricky, so we just go for the easiest part - no scale, | ||||
|  * and at integer offsets.) | ||||
|  * | ||||
|  * The way we check for pixel-aligned is by looking at the | ||||
|  * transformation into screen space of the allocation box of an actor | ||||
|  * and and checking if the corners are "close enough" to integral | ||||
|  * pixel values. | ||||
|  */ | ||||
|  | ||||
| /* The definition of "close enough" to integral pixel values is | ||||
|  * equality when we convert to 24.8 fixed-point. | ||||
|  */ | ||||
| static inline int | ||||
| round_to_fixed (float x) | ||||
| { | ||||
|   return roundf (x * 256); | ||||
| } | ||||
|  | ||||
| /* This helper function checks if (according to our fixed point precision) | ||||
|  * the vertices @verts form a box of width @widthf and height @heightf | ||||
|  * located at integral coordinates. These coordinates are returned | ||||
|  * in @x_origin and @y_origin. | ||||
|  */ | ||||
| gboolean | ||||
| meta_actor_vertices_are_untransformed (ClutterVertex *verts, | ||||
|                                        float          widthf, | ||||
|                                        float          heightf, | ||||
|                                        int           *x_origin, | ||||
|                                        int           *y_origin) | ||||
| { | ||||
|   int width, height; | ||||
|   int v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y; | ||||
|   int x, y; | ||||
|  | ||||
|   width = round_to_fixed (widthf); height = round_to_fixed (heightf); | ||||
|  | ||||
|   v0x = round_to_fixed (verts[0].x); v0y = round_to_fixed (verts[0].y); | ||||
|   v1x = round_to_fixed (verts[1].x); v1y = round_to_fixed (verts[1].y); | ||||
|   v2x = round_to_fixed (verts[2].x); v2y = round_to_fixed (verts[2].y); | ||||
|   v3x = round_to_fixed (verts[3].x); v3y = round_to_fixed (verts[3].y); | ||||
|  | ||||
|   /* Using shifting for converting fixed => int, gets things right for | ||||
|    * negative values. / 256. wouldn't do the same | ||||
|    */ | ||||
|   x = v0x >> 8; | ||||
|   y = v0y >> 8; | ||||
|  | ||||
|   /* At integral coordinates? */ | ||||
|   if (x * 256 != v0x || y * 256 != v0y) | ||||
|     return FALSE; | ||||
|  | ||||
|   /* Not scaled? */ | ||||
|   if (v1x - v0x != width || v2y - v0y != height) | ||||
|     return FALSE; | ||||
|  | ||||
|   /* Not rotated/skewed? */ | ||||
|   if (v0x != v2x || v0y != v1y || | ||||
|       v3x != v1x || v3y != v2y) | ||||
|     return FALSE; | ||||
|  | ||||
|   *x_origin = x; | ||||
|   *y_origin = y; | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| /* Check if an actor is "untransformed" - which actually means transformed by | ||||
|  * at most a integer-translation. The integer translation, if any, is returned. | ||||
|  */ | ||||
| gboolean | ||||
| meta_actor_is_untransformed (ClutterActor *actor, | ||||
|                              int          *x_origin, | ||||
|                              int          *y_origin) | ||||
| { | ||||
|   gfloat widthf, heightf; | ||||
|   ClutterVertex verts[4]; | ||||
|  | ||||
|   clutter_actor_get_size (actor, &widthf, &heightf); | ||||
|   clutter_actor_get_abs_allocation_vertices (actor, verts); | ||||
|  | ||||
|   return meta_actor_vertices_are_untransformed (verts, widthf, heightf, x_origin, y_origin); | ||||
| } | ||||
|  | ||||
| @@ -1,10 +1,9 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| 
 | ||||
| /* Mutter X event source for main loop */ | ||||
| 
 | ||||
| /* 
 | ||||
|  * Copyright (C) 2001 Havoc Pennington | ||||
|  *  | ||||
| /*
 | ||||
|  * Utilities for use with Clutter | ||||
|  * | ||||
|  * Copyright 2010 Red Hat, Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
| @@ -14,27 +13,24 @@ | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef META_EVENT_QUEUE_H | ||||
| #define META_EVENT_QUEUE_H | ||||
| #ifndef __META_CLUTTER_UTILS_H__ | ||||
| #define __META_CLUTTER_UTILS_H__ | ||||
| 
 | ||||
| #include <glib.h> | ||||
| #include <X11/Xlib.h> | ||||
| #include <clutter/clutter.h> | ||||
| gboolean meta_actor_vertices_are_untransformed (ClutterVertex *verts, | ||||
|                                                 float          widthf, | ||||
|                                                 float          heightf, | ||||
|                                                 int           *x_origin, | ||||
|                                                 int           *y_origin); | ||||
| gboolean meta_actor_is_untransformed (ClutterActor *actor, | ||||
|                                       int          *x_origin, | ||||
|                                       int          *y_origin); | ||||
| 
 | ||||
| typedef struct _MetaEventQueue MetaEventQueue; | ||||
| 
 | ||||
| typedef void   (* MetaEventQueueFunc) (XEvent         *event, | ||||
|                                        gpointer        data); | ||||
| 
 | ||||
| MetaEventQueue* meta_event_queue_new  (Display            *display, | ||||
|                                        MetaEventQueueFunc  func, | ||||
|                                        gpointer            data); | ||||
| void            meta_event_queue_free (MetaEventQueue     *eq); | ||||
| 
 | ||||
| #endif | ||||
| #endif /* __META_CLUTTER_UTILS_H__ */ | ||||
| @@ -21,14 +21,15 @@ | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| #include "cogl-utils.h" | ||||
|  | ||||
| /** | ||||
|  * meta_create_color_texture_4ub: | ||||
|  * @red: | ||||
|  * @green: | ||||
|  * @blue: | ||||
|  * @alpha: | ||||
|  * @red: red component | ||||
|  * @green: green component | ||||
|  * @blue: blue component | ||||
|  * @alpha: alpha component | ||||
|  * @flags: Optional flags for the texture, or %COGL_TEXTURE_NONE; | ||||
|  *   %COGL_TEXTURE_NO_SLICING is useful if the texture will be | ||||
|  *   repeated to create a constant color fill, since hardware | ||||
| @@ -39,7 +40,7 @@ | ||||
|  * | ||||
|  * Return value: (transfer full): a newly created Cogl texture | ||||
|  */ | ||||
| CoglHandle | ||||
| CoglTexture * | ||||
| meta_create_color_texture_4ub (guint8           red, | ||||
|                                guint8           green, | ||||
|                                guint8           blue, | ||||
| @@ -68,43 +69,45 @@ meta_create_color_texture_4ub (guint8           red, | ||||
| /* Based on gnome-shell/src/st/st-private.c:_st_create_texture_material.c */ | ||||
|  | ||||
| /** | ||||
|  * meta_create_texture_material: | ||||
|  * meta_create_texture_pipeline: | ||||
|  * @src_texture: (allow-none): texture to use initially for the layer | ||||
|  * | ||||
|  * Creates a material with a single layer. Using a common template | ||||
|  * Creates a pipeline with a single layer. Using a common template | ||||
|  * allows sharing a shader for different uses in Mutter. To share the same | ||||
|  * shader with all other materials that are just texture plus opacity | ||||
|  * shader with all other pipelines that are just texture plus opacity | ||||
|  * would require Cogl fixes. | ||||
|  * (See http://bugzilla.clutter-project.org/show_bug.cgi?id=2425) | ||||
|  * | ||||
|  * Return value: (transfer full): a newly created Cogl material | ||||
|  * Return value: (transfer full): a newly created #CoglPipeline | ||||
|  */ | ||||
| CoglHandle | ||||
| meta_create_texture_material (CoglHandle src_texture) | ||||
| CoglPipeline * | ||||
| meta_create_texture_pipeline (CoglTexture *src_texture) | ||||
| { | ||||
|   static CoglHandle texture_material_template = COGL_INVALID_HANDLE; | ||||
|   CoglHandle material; | ||||
|   static CoglPipeline *texture_pipeline_template = NULL; | ||||
|   CoglPipeline *pipeline; | ||||
|  | ||||
|   /* We use a material that has a dummy texture as a base for all | ||||
|      texture materials. The idea is that only the Cogl texture object | ||||
|   /* We use a pipeline that has a dummy texture as a base for all | ||||
|      texture pipelines. The idea is that only the Cogl texture object | ||||
|      would be different in the children so it is likely that Cogl will | ||||
|      be able to share GL programs between all the textures. */ | ||||
|   if (G_UNLIKELY (texture_material_template == COGL_INVALID_HANDLE)) | ||||
|   if (G_UNLIKELY (texture_pipeline_template == NULL)) | ||||
|     { | ||||
|       CoglHandle dummy_texture; | ||||
|       CoglTexture *dummy_texture; | ||||
|       CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|  | ||||
|       dummy_texture = meta_create_color_texture_4ub (0xff, 0xff, 0xff, 0xff, | ||||
|                                                      COGL_TEXTURE_NONE); | ||||
|  | ||||
|       texture_material_template = cogl_material_new (); | ||||
|       cogl_material_set_layer (texture_material_template, 0, dummy_texture); | ||||
|       cogl_handle_unref (dummy_texture); | ||||
|  | ||||
|       texture_pipeline_template = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_layer_texture (texture_pipeline_template, 0, dummy_texture); | ||||
|       cogl_object_unref (dummy_texture); | ||||
|     } | ||||
|  | ||||
|   material = cogl_material_copy (texture_material_template); | ||||
|   pipeline = cogl_pipeline_copy (texture_pipeline_template); | ||||
|  | ||||
|   if (src_texture != COGL_INVALID_HANDLE) | ||||
|     cogl_material_set_layer (material, 0, src_texture); | ||||
|   if (src_texture != NULL) | ||||
|     cogl_pipeline_set_layer_texture (pipeline, 0, src_texture); | ||||
|  | ||||
|   return material; | ||||
|   return pipeline; | ||||
| } | ||||
|   | ||||
| @@ -25,11 +25,11 @@ | ||||
|  | ||||
| #include <cogl/cogl.h> | ||||
|  | ||||
| CoglHandle meta_create_color_texture_4ub (guint8           red, | ||||
|                                           guint8           green, | ||||
|                                           guint8           blue, | ||||
|                                           guint8           alpha, | ||||
|                                           CoglTextureFlags flags); | ||||
| CoglHandle meta_create_texture_material  (CoglHandle src_texture); | ||||
| CoglTexture * meta_create_color_texture_4ub (guint8           red, | ||||
|                                              guint8           green, | ||||
|                                              guint8           blue, | ||||
|                                              guint8           alpha, | ||||
|                                              CoglTextureFlags flags); | ||||
| CoglPipeline * meta_create_texture_pipeline (CoglTexture *texture); | ||||
|  | ||||
| #endif /* __META_COGL_UTILS_H__ */ | ||||
|   | ||||
| @@ -18,7 +18,6 @@ struct _MetaCompositor | ||||
|   MetaDisplay    *display; | ||||
|  | ||||
|   Atom            atom_x_root_pixmap; | ||||
|   Atom            atom_x_set_root; | ||||
|   Atom            atom_net_wm_window_opacity; | ||||
|   guint           repaint_func_id; | ||||
|  | ||||
| @@ -26,22 +25,28 @@ struct _MetaCompositor | ||||
|  | ||||
|   MetaPlugin     *modal_plugin; | ||||
|  | ||||
|   gboolean        show_redraw : 1; | ||||
|   gboolean        debug       : 1; | ||||
|   gboolean        no_mipmaps  : 1; | ||||
|   gint64          server_time_query_time; | ||||
|   gint64          server_time_offset; | ||||
|  | ||||
|   guint           server_time_is_monotonic_time : 1; | ||||
|   guint           show_redraw : 1; | ||||
|   guint           debug       : 1; | ||||
|   guint           no_mipmaps  : 1; | ||||
| }; | ||||
|  | ||||
| struct _MetaCompScreen | ||||
| { | ||||
|   MetaScreen            *screen; | ||||
|  | ||||
|   ClutterActor          *stage, *window_group, *overlay_group; | ||||
|   ClutterActor          *stage, *window_group, *top_window_group, *overlay_group; | ||||
|   ClutterActor          *background_actor; | ||||
|   ClutterActor		*hidden_group; | ||||
|   GList                 *windows; | ||||
|   GHashTable            *windows_by_xid; | ||||
|   Window                 output; | ||||
|  | ||||
|   CoglOnscreen          *onscreen; | ||||
|   CoglFrameClosure      *frame_closure; | ||||
|  | ||||
|   /* Used for unredirecting fullscreen windows */ | ||||
|   guint                   disable_unredirect_count; | ||||
|   MetaWindowActor             *unredirected_window; | ||||
| @@ -54,10 +59,10 @@ struct _MetaCompScreen | ||||
|   MetaPluginManager *plugin_mgr; | ||||
| }; | ||||
|  | ||||
| /* Wait 2ms after vblank before starting to draw next frame */ | ||||
| #define META_SYNC_DELAY 2 | ||||
|  | ||||
| void meta_switch_workspace_completed (MetaScreen    *screen); | ||||
| void meta_set_stage_input_region     (MetaScreen    *screen, | ||||
|                                       XserverRegion  region); | ||||
| void meta_empty_stage_input_region   (MetaScreen    *screen); | ||||
|  | ||||
| gboolean meta_begin_modal_for_plugin (MetaScreen       *screen, | ||||
|                                       MetaPlugin       *plugin, | ||||
| @@ -69,6 +74,9 @@ void     meta_end_modal_for_plugin   (MetaScreen       *screen, | ||||
|                                       MetaPlugin       *plugin, | ||||
|                                       guint32           timestamp); | ||||
|  | ||||
| gint64 meta_compositor_monotonic_time_to_server_time (MetaDisplay *display, | ||||
|                                                       gint64       monotonic_time); | ||||
|  | ||||
| void meta_check_end_modal (MetaScreen *screen); | ||||
|  | ||||
| #endif /* META_COMPOSITOR_PRIVATE_H */ | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -9,7 +9,6 @@ | ||||
| void meta_background_actor_set_visible_region  (MetaBackgroundActor *self, | ||||
|                                                 cairo_region_t      *visible_region); | ||||
|  | ||||
| void meta_background_actor_update              (MetaScreen *screen); | ||||
| void meta_background_actor_screen_size_changed (MetaScreen *screen); | ||||
| cairo_region_t *meta_background_actor_get_visible_region (MetaBackgroundActor *self); | ||||
|  | ||||
| #endif /* META_BACKGROUND_ACTOR_PRIVATE_H */ | ||||
|   | ||||
| @@ -1,7 +1,5 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| /* | ||||
|  * meta-background-actor.c: Actor for painting the root window background | ||||
|  * | ||||
|  * Copyright 2009 Sander Dijkhuis | ||||
|  * Copyright 2010 Red Hat, Inc. | ||||
|  * | ||||
| @@ -23,235 +21,42 @@ | ||||
|  * Portions adapted from gnome-shell/src/shell-global.c | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-background-actor | ||||
|  * @title: MetaBackgroundActor | ||||
|  * @short_description: Actor for painting the root window background | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #define COGL_ENABLE_EXPERIMENTAL_API | ||||
| #include <cogl/cogl-texture-pixmap-x11.h> | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
|  | ||||
| #include <X11/Xatom.h> | ||||
|  | ||||
| #include "cogl-utils.h" | ||||
| #include "compositor-private.h" | ||||
| #include <meta/errors.h> | ||||
| #include <meta/meta-background.h> | ||||
| #include "meta-background-actor-private.h" | ||||
|  | ||||
| /* We allow creating multiple MetaBackgroundActors for the same MetaScreen to | ||||
|  * allow different rendering options to be set for different copies. | ||||
|  * But we want to share the same underlying CoglTexture for efficiency and | ||||
|  * to avoid driver bugs that might occur if we created multiple CoglTexturePixmaps | ||||
|  * for the same pixmap. | ||||
|  * | ||||
|  * This structure holds common information. | ||||
|  */ | ||||
| typedef struct _MetaScreenBackground MetaScreenBackground; | ||||
|  | ||||
| struct _MetaScreenBackground | ||||
| { | ||||
|   MetaScreen *screen; | ||||
|   GSList *actors; | ||||
|  | ||||
|   float texture_width; | ||||
|   float texture_height; | ||||
|   CoglHandle texture; | ||||
|   CoglMaterialWrapMode wrap_mode; | ||||
|   guint have_pixmap : 1; | ||||
| }; | ||||
|  | ||||
| struct _MetaBackgroundActorPrivate | ||||
| { | ||||
|   MetaScreenBackground *background; | ||||
|   CoglHandle material; | ||||
|   cairo_region_t *visible_region; | ||||
|   float dim_factor; | ||||
| }; | ||||
|  | ||||
| enum | ||||
| { | ||||
|   PROP_0, | ||||
|  | ||||
|   PROP_DIM_FACTOR, | ||||
|  | ||||
|   PROP_LAST | ||||
| }; | ||||
|  | ||||
| static GParamSpec *obj_props[PROP_LAST]; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| static void set_texture                (MetaScreenBackground *background, | ||||
|                                         CoglHandle            texture); | ||||
| static void set_texture_to_stage_color (MetaScreenBackground *background); | ||||
|  | ||||
| static void | ||||
| on_notify_stage_color (GObject              *stage, | ||||
|                        GParamSpec           *pspec, | ||||
|                        MetaScreenBackground *background) | ||||
| { | ||||
|   if (!background->have_pixmap) | ||||
|     set_texture_to_stage_color (background); | ||||
| } | ||||
|  | ||||
| static void | ||||
| free_screen_background (MetaScreenBackground *background) | ||||
| { | ||||
|   set_texture (background, COGL_INVALID_HANDLE); | ||||
|  | ||||
|   if (background->screen != NULL) | ||||
|     { | ||||
|       ClutterActor *stage = meta_get_stage_for_screen (background->screen); | ||||
|       g_signal_handlers_disconnect_by_func (stage, | ||||
|                                             (gpointer) on_notify_stage_color, | ||||
|                                             background); | ||||
|       background->screen = NULL; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static MetaScreenBackground * | ||||
| meta_screen_background_get (MetaScreen *screen) | ||||
| { | ||||
|   MetaScreenBackground *background; | ||||
|  | ||||
|   background = g_object_get_data (G_OBJECT (screen), "meta-screen-background"); | ||||
|   if (background == NULL) | ||||
|     { | ||||
|       ClutterActor *stage; | ||||
|  | ||||
|       background = g_new0 (MetaScreenBackground, 1); | ||||
|  | ||||
|       background->screen = screen; | ||||
|       g_object_set_data_full (G_OBJECT (screen), "meta-screen-background", | ||||
|                               background, (GDestroyNotify) free_screen_background); | ||||
|  | ||||
|       stage = meta_get_stage_for_screen (screen); | ||||
|       g_signal_connect (stage, "notify::color", | ||||
|                         G_CALLBACK (on_notify_stage_color), background); | ||||
|  | ||||
|       meta_background_actor_update (screen); | ||||
|     } | ||||
|  | ||||
|   return background; | ||||
| } | ||||
|  | ||||
| static void | ||||
| update_wrap_mode_of_actor (MetaBackgroundActor *self) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|  | ||||
|   cogl_material_set_layer_wrap_mode (priv->material, 0, priv->background->wrap_mode); | ||||
| } | ||||
|  | ||||
| static void | ||||
| update_wrap_mode (MetaScreenBackground *background) | ||||
| { | ||||
|   GSList *l; | ||||
|   int width, height; | ||||
|  | ||||
|   meta_screen_get_size (background->screen, &width, &height); | ||||
|  | ||||
|   /* We turn off repeating when we have a full-screen pixmap to keep from | ||||
|    * getting artifacts from one side of the image sneaking into the other | ||||
|    * side of the image via bilinear filtering. | ||||
|    */ | ||||
|   if (width == background->texture_width && height == background->texture_height) | ||||
|     background->wrap_mode = COGL_MATERIAL_WRAP_MODE_CLAMP_TO_EDGE; | ||||
|   else | ||||
|     background->wrap_mode = COGL_MATERIAL_WRAP_MODE_REPEAT; | ||||
|  | ||||
|   for (l = background->actors; l; l = l->next) | ||||
|     update_wrap_mode_of_actor (l->data); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_texture_on_actor (MetaBackgroundActor *self) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|   MetaDisplay *display = meta_screen_get_display (priv->background->screen); | ||||
|  | ||||
|   /* This may trigger destruction of an old texture pixmap, which, if | ||||
|    * the underlying X pixmap is already gone has the tendency to trigger | ||||
|    * X errors inside DRI. For safety, trap errors */ | ||||
|   meta_error_trap_push (display); | ||||
|   cogl_material_set_layer (priv->material, 0, priv->background->texture); | ||||
|   meta_error_trap_pop (display); | ||||
|  | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (self)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_texture (MetaScreenBackground *background, | ||||
|              CoglHandle            texture) | ||||
| { | ||||
|   MetaDisplay *display = meta_screen_get_display (background->screen); | ||||
|   GSList *l; | ||||
|  | ||||
|   /* This may trigger destruction of an old texture pixmap, which, if | ||||
|    * the underlying X pixmap is already gone has the tendency to trigger | ||||
|    * X errors inside DRI. For safety, trap errors */ | ||||
|   meta_error_trap_push (display); | ||||
|   if (background->texture != COGL_INVALID_HANDLE) | ||||
|     { | ||||
|       cogl_handle_unref (background->texture); | ||||
|       background->texture = COGL_INVALID_HANDLE; | ||||
|     } | ||||
|   meta_error_trap_pop (display); | ||||
|  | ||||
|   if (texture != COGL_INVALID_HANDLE) | ||||
|     background->texture = cogl_handle_ref (texture); | ||||
|  | ||||
|   background->texture_width = cogl_texture_get_width (background->texture); | ||||
|   background->texture_height = cogl_texture_get_height (background->texture); | ||||
|  | ||||
|   for (l = background->actors; l; l = l->next) | ||||
|     set_texture_on_actor (l->data); | ||||
|  | ||||
|   update_wrap_mode (background); | ||||
| } | ||||
|  | ||||
| /* Sets our material to paint with a 1x1 texture of the stage's background | ||||
|  * color; doing this when we have no pixmap allows the application to turn | ||||
|  * off painting the stage. There might be a performance benefit to | ||||
|  * painting in this case with a solid color, but the normal solid color | ||||
|  * case is a 1x1 root pixmap, so we'd have to reverse-engineer that to | ||||
|  * actually pick up the (small?) performance win. This is just a fallback. | ||||
|  */ | ||||
| static void | ||||
| set_texture_to_stage_color (MetaScreenBackground *background) | ||||
| { | ||||
|   ClutterActor *stage = meta_get_stage_for_screen (background->screen); | ||||
|   ClutterColor color; | ||||
|   CoglHandle texture; | ||||
|  | ||||
|   clutter_stage_get_color (CLUTTER_STAGE (stage), &color); | ||||
|  | ||||
|   /* Slicing will prevent COGL from using hardware texturing for | ||||
|    * the tiled 1x1 pixmap, and will cause it to draw the window | ||||
|    * background in millions of separate 1x1 rectangles */ | ||||
|   texture = meta_create_color_texture_4ub (color.red, color.green, | ||||
|                                            color.blue, 0xff, | ||||
|                                            COGL_TEXTURE_NO_SLICING); | ||||
|   set_texture (background, texture); | ||||
|   cogl_handle_unref (texture); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_dispose (GObject *object) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object); | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|  | ||||
|   meta_background_actor_set_visible_region (self, NULL); | ||||
|  | ||||
|   if (priv->background != NULL) | ||||
|     { | ||||
|       priv->background->actors = g_slist_remove (priv->background->actors, self); | ||||
|       priv->background = NULL; | ||||
|     } | ||||
|  | ||||
|   if (priv->material != COGL_INVALID_HANDLE) | ||||
|     { | ||||
|       cogl_handle_unref (priv->material); | ||||
|       priv->material = COGL_INVALID_HANDLE; | ||||
|     } | ||||
|   G_OBJECT_CLASS (meta_background_actor_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -260,11 +65,15 @@ meta_background_actor_get_preferred_width (ClutterActor *actor, | ||||
|                                            gfloat       *min_width_p, | ||||
|                                            gfloat       *natural_width_p) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor); | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|   int width, height; | ||||
|   ClutterContent *content; | ||||
|   gfloat width; | ||||
|  | ||||
|   meta_screen_get_size (priv->background->screen, &width, &height); | ||||
|   content = clutter_actor_get_content (actor); | ||||
|  | ||||
|   if (content) | ||||
|     clutter_content_get_preferred_size (content, &width, NULL); | ||||
|   else | ||||
|     width = 0; | ||||
|  | ||||
|   if (min_width_p) | ||||
|     *min_width_p = width; | ||||
| @@ -279,11 +88,15 @@ meta_background_actor_get_preferred_height (ClutterActor *actor, | ||||
|                                             gfloat       *natural_height_p) | ||||
|  | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor); | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|   int width, height; | ||||
|   ClutterContent *content; | ||||
|   gfloat height; | ||||
|  | ||||
|   meta_screen_get_size (priv->background->screen, &width, &height); | ||||
|   content = clutter_actor_get_content (actor); | ||||
|  | ||||
|   if (content) | ||||
|     clutter_content_get_preferred_size (content, NULL, &height); | ||||
|   else | ||||
|     height = 0; | ||||
|  | ||||
|   if (min_height_p) | ||||
|     *min_height_p = height; | ||||
| @@ -291,64 +104,19 @@ meta_background_actor_get_preferred_height (ClutterActor *actor, | ||||
|     *natural_height_p = height; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_paint (ClutterActor *actor) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor); | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|   guint8 opacity = clutter_actor_get_paint_opacity (actor); | ||||
|   guint8 color_component; | ||||
|   int width, height; | ||||
|  | ||||
|   meta_screen_get_size (priv->background->screen, &width, &height); | ||||
|  | ||||
|   color_component = (int)(0.5 + opacity * priv->dim_factor); | ||||
|  | ||||
|   cogl_material_set_color4ub (priv->material, | ||||
|                               color_component, | ||||
|                               color_component, | ||||
|                               color_component, | ||||
|                               opacity); | ||||
|  | ||||
|   cogl_set_source (priv->material); | ||||
|  | ||||
|   if (priv->visible_region) | ||||
|     { | ||||
|       int n_rectangles = cairo_region_num_rectangles (priv->visible_region); | ||||
|       int i; | ||||
|  | ||||
|       for (i = 0; i < n_rectangles; i++) | ||||
|         { | ||||
|           cairo_rectangle_int_t rect; | ||||
|           cairo_region_get_rectangle (priv->visible_region, i, &rect); | ||||
|  | ||||
|           cogl_rectangle_with_texture_coords (rect.x, rect.y, | ||||
|                                               rect.x + rect.width, rect.y + rect.height, | ||||
|                                               rect.x / priv->background->texture_width, | ||||
|                                               rect.y / priv->background->texture_height, | ||||
|                                               (rect.x + rect.width) / priv->background->texture_width, | ||||
|                                               (rect.y + rect.height) / priv->background->texture_height); | ||||
|         } | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       cogl_rectangle_with_texture_coords (0.0f, 0.0f, | ||||
|                                           width, height, | ||||
|                                           0.0f, 0.0f, | ||||
|                                           width / priv->background->texture_width, | ||||
|                                           height / priv->background->texture_height); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_background_actor_get_paint_volume (ClutterActor       *actor, | ||||
|                                         ClutterPaintVolume *volume) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor); | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|   int width, height; | ||||
|   ClutterContent *content; | ||||
|   gfloat width, height; | ||||
|  | ||||
|   meta_screen_get_size (priv->background->screen, &width, &height); | ||||
|   content = clutter_actor_get_content (actor); | ||||
|  | ||||
|   if (!content) | ||||
|     return FALSE; | ||||
|  | ||||
|   clutter_content_get_preferred_size (content, &width, &height); | ||||
|  | ||||
|   clutter_paint_volume_set_width (volume, width); | ||||
|   clutter_paint_volume_set_height (volume, height); | ||||
| @@ -356,206 +124,48 @@ meta_background_actor_get_paint_volume (ClutterActor       *actor, | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_set_dim_factor (MetaBackgroundActor *self, | ||||
|                                       gfloat               dim_factor) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|  | ||||
|   if (priv->dim_factor == dim_factor) | ||||
|     return; | ||||
|  | ||||
|   priv->dim_factor = dim_factor; | ||||
|  | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (self)); | ||||
|  | ||||
|   g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_DIM_FACTOR]); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_get_property(GObject         *object, | ||||
|                                    guint            prop_id, | ||||
|                                    GValue          *value, | ||||
|                                    GParamSpec      *pspec) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object); | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|  | ||||
|   switch (prop_id) | ||||
|     { | ||||
|     case PROP_DIM_FACTOR: | ||||
|       g_value_set_float (value, priv->dim_factor); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_set_property(GObject         *object, | ||||
|                                    guint            prop_id, | ||||
|                                    const GValue    *value, | ||||
|                                    GParamSpec      *pspec) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object); | ||||
|  | ||||
|   switch (prop_id) | ||||
|     { | ||||
|     case PROP_DIM_FACTOR: | ||||
|       meta_background_actor_set_dim_factor (self, g_value_get_float (value)); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_class_init (MetaBackgroundActorClass *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|   ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); | ||||
|   GParamSpec *pspec; | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaBackgroundActorPrivate)); | ||||
|  | ||||
|   object_class->dispose = meta_background_actor_dispose; | ||||
|   object_class->get_property = meta_background_actor_get_property; | ||||
|   object_class->set_property = meta_background_actor_set_property; | ||||
|  | ||||
|   actor_class->get_preferred_width = meta_background_actor_get_preferred_width; | ||||
|   actor_class->get_preferred_height = meta_background_actor_get_preferred_height; | ||||
|   actor_class->paint = meta_background_actor_paint; | ||||
|   actor_class->get_paint_volume = meta_background_actor_get_paint_volume; | ||||
|  | ||||
|   /** | ||||
|    * MetaBackgroundActor:dim-factor: | ||||
|    * | ||||
|    * Factor to dim the background by, between 0.0 (black) and 1.0 (original | ||||
|    * colors) | ||||
|    */ | ||||
|   pspec = g_param_spec_float ("dim-factor", | ||||
|                               "Dim factor", | ||||
|                               "Factor to dim the background by", | ||||
|                               0.0, 1.0, | ||||
|                               1.0, | ||||
|                               G_PARAM_READWRITE); | ||||
|   obj_props[PROP_DIM_FACTOR] = pspec; | ||||
|   g_object_class_install_property (object_class, PROP_DIM_FACTOR, pspec); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_init (MetaBackgroundActor *self) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv; | ||||
|  | ||||
|   priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, | ||||
|                                                    META_TYPE_BACKGROUND_ACTOR, | ||||
|                                                    MetaBackgroundActorPrivate); | ||||
|   priv->dim_factor = 1.0; | ||||
|   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, | ||||
|                                             META_TYPE_BACKGROUND_ACTOR, | ||||
|                                             MetaBackgroundActorPrivate); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_new: | ||||
|  * @screen: the #MetaScreen | ||||
|  * | ||||
|  * Creates a new actor to draw the background for the given screen. | ||||
|  * Creates a new actor to draw the background for the given monitor. | ||||
|  * This actor should be associated with a #MetaBackground using | ||||
|  * clutter_actor_set_content() | ||||
|  * | ||||
|  * Return value: the newly created background actor | ||||
|  */ | ||||
| ClutterActor * | ||||
| meta_background_actor_new_for_screen (MetaScreen *screen) | ||||
| meta_background_actor_new (void) | ||||
| { | ||||
|   MetaBackgroundActor *self; | ||||
|   MetaBackgroundActorPrivate *priv; | ||||
|  | ||||
|   g_return_val_if_fail (META_IS_SCREEN (screen), NULL); | ||||
|  | ||||
|   self = g_object_new (META_TYPE_BACKGROUND_ACTOR, NULL); | ||||
|   priv = self->priv; | ||||
|  | ||||
|   priv->background = meta_screen_background_get (screen); | ||||
|   priv->background->actors = g_slist_prepend (priv->background->actors, self); | ||||
|  | ||||
|   priv->material = meta_create_texture_material (NULL); | ||||
|  | ||||
|   set_texture_on_actor (self); | ||||
|   update_wrap_mode_of_actor (self); | ||||
|  | ||||
|   return CLUTTER_ACTOR (self); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_update: | ||||
|  * @screen: a #MetaScreen | ||||
|  * | ||||
|  * Refetches the _XROOTPMAP_ID property for the root window and updates | ||||
|  * the contents of the background actor based on that. There's no attempt | ||||
|  * to optimize out pixmap values that don't change (since a root pixmap | ||||
|  * could be replaced by with another pixmap with the same ID under some | ||||
|  * circumstances), so this should only be called when we actually receive | ||||
|  * a PropertyNotify event for the property. | ||||
|  */ | ||||
| void | ||||
| meta_background_actor_update (MetaScreen *screen) | ||||
| { | ||||
|   MetaScreenBackground *background; | ||||
|   MetaDisplay *display; | ||||
|   MetaCompositor *compositor; | ||||
|   Atom type; | ||||
|   int format; | ||||
|   gulong nitems; | ||||
|   gulong bytes_after; | ||||
|   guchar *data; | ||||
|   Pixmap root_pixmap_id; | ||||
|  | ||||
|   background = meta_screen_background_get (screen); | ||||
|   display = meta_screen_get_display (screen); | ||||
|   compositor = meta_display_get_compositor (display); | ||||
|  | ||||
|   root_pixmap_id = None; | ||||
|   if (!XGetWindowProperty (meta_display_get_xdisplay (display), | ||||
|                            meta_screen_get_xroot (screen), | ||||
|                            compositor->atom_x_root_pixmap, | ||||
|                            0, LONG_MAX, | ||||
|                            False, | ||||
|                            AnyPropertyType, | ||||
|                            &type, &format, &nitems, &bytes_after, &data) && | ||||
|       type != None) | ||||
|   { | ||||
|      /* Got a property. */ | ||||
|      if (type == XA_PIXMAP && format == 32 && nitems == 1) | ||||
|        { | ||||
|          /* Was what we expected. */ | ||||
|          root_pixmap_id = *(Pixmap *)data; | ||||
|        } | ||||
|  | ||||
|      XFree(data); | ||||
|   } | ||||
|  | ||||
|   if (root_pixmap_id != None) | ||||
|     { | ||||
|       CoglHandle texture; | ||||
|  | ||||
|       meta_error_trap_push (display); | ||||
|       texture = cogl_texture_pixmap_x11_new (root_pixmap_id, FALSE); | ||||
|       meta_error_trap_pop (display); | ||||
|  | ||||
|       if (texture != COGL_INVALID_HANDLE) | ||||
|         { | ||||
|           set_texture (background, texture); | ||||
|           cogl_handle_unref (texture); | ||||
|  | ||||
|           background->have_pixmap = True; | ||||
|           return; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   background->have_pixmap = False; | ||||
|   set_texture_to_stage_color (background); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_set_visible_region: | ||||
|  * @self: a #MetaBackgroundActor | ||||
| @@ -575,40 +185,44 @@ meta_background_actor_set_visible_region (MetaBackgroundActor *self, | ||||
|  | ||||
|   priv = self->priv; | ||||
|  | ||||
|   if (priv->visible_region) | ||||
|     { | ||||
|       cairo_region_destroy (priv->visible_region); | ||||
|       priv->visible_region = NULL; | ||||
|     } | ||||
|   g_clear_pointer (&priv->visible_region, | ||||
|                    (GDestroyNotify) | ||||
|                    cairo_region_destroy); | ||||
|  | ||||
|   if (visible_region) | ||||
|     { | ||||
|       cairo_rectangle_int_t screen_rect = { 0 }; | ||||
|       meta_screen_get_size (priv->background->screen, &screen_rect.width, &screen_rect.height); | ||||
|  | ||||
|       /* Doing the intersection here is probably unnecessary - MetaWindowGroup | ||||
|        * should never compute a visible area that's larger than the root screen! | ||||
|        * but it's not that expensive and adds some extra robustness. | ||||
|        */ | ||||
|       priv->visible_region = cairo_region_create_rectangle (&screen_rect); | ||||
|       cairo_region_intersect (priv->visible_region, visible_region); | ||||
|     } | ||||
|     priv->visible_region = cairo_region_copy (visible_region); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_screen_size_changed: | ||||
|  * @screen: a #MetaScreen | ||||
|  * meta_background_actor_get_visible_region: | ||||
|  * @self: a #MetaBackgroundActor | ||||
|  * | ||||
|  * Called by the compositor when the size of the #MetaScreen changes | ||||
|  * Return value (transfer full): a #cairo_region_t that represents the part of | ||||
|  * the background not obscured by other #MetaBackgroundActor or | ||||
|  * #MetaWindowActor objects. | ||||
|  */ | ||||
| void | ||||
| meta_background_actor_screen_size_changed (MetaScreen *screen) | ||||
| cairo_region_t * | ||||
| meta_background_actor_get_visible_region (MetaBackgroundActor *self) | ||||
| { | ||||
|   MetaScreenBackground *background = meta_screen_background_get (screen); | ||||
|   GSList *l; | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|   ClutterActorBox content_box; | ||||
|   cairo_rectangle_int_t content_area = { 0 }; | ||||
|   cairo_region_t *visible_region; | ||||
|  | ||||
|   update_wrap_mode (background); | ||||
|   g_return_val_if_fail (META_IS_BACKGROUND_ACTOR (self), NULL); | ||||
|  | ||||
|   for (l = background->actors; l; l = l->next) | ||||
|     clutter_actor_queue_relayout (l->data); | ||||
|   if (!priv->visible_region) | ||||
|       return NULL; | ||||
|  | ||||
|   clutter_actor_get_content_box (CLUTTER_ACTOR (self), &content_box); | ||||
|  | ||||
|   content_area.x = content_box.x1; | ||||
|   content_area.y = content_box.y1; | ||||
|   content_area.width = content_box.x2 - content_box.x1; | ||||
|   content_area.height = content_box.y2 - content_box.y1; | ||||
|  | ||||
|   visible_region = cairo_region_create_rectangle (&content_area); | ||||
|   cairo_region_intersect (visible_region, priv->visible_region); | ||||
|  | ||||
|   return visible_region; | ||||
| } | ||||
|   | ||||
							
								
								
									
										11
									
								
								src/compositor/meta-background-group-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/compositor/meta-background-group-private.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| #ifndef META_BACKGROUND_GROUP_PRIVATE_H | ||||
| #define META_BACKGROUND_GROUP_PRIVATE_H | ||||
|  | ||||
| #include <meta/screen.h> | ||||
| #include <meta/meta-background-group.h> | ||||
|  | ||||
| void meta_background_group_set_visible_region  (MetaBackgroundGroup *self, | ||||
|                                                 cairo_region_t      *visible_region); | ||||
| #endif /* META_BACKGROUND_GROUP_PRIVATE_H */ | ||||
							
								
								
									
										110
									
								
								src/compositor/meta-background-group.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								src/compositor/meta-background-group.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-background-group | ||||
|  * @title: MetaBackgroundGroup | ||||
|  * @short_description: Container for background actors | ||||
|  * | ||||
|  * This class is a subclass of ClutterActor with special handling for | ||||
|  * MetaBackgroundActor/MetaBackgroundGroup when painting children. | ||||
|  * It makes sure to only draw the parts of the backgrounds not | ||||
|  * occluded by opaque windows. | ||||
|  * | ||||
|  * See #MetaWindowGroup for more information behind the motivation, | ||||
|  * and details on implementation. | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include "compositor-private.h" | ||||
| #include "clutter-utils.h" | ||||
| #include "meta-background-actor-private.h" | ||||
| #include "meta-background-group-private.h" | ||||
|  | ||||
| G_DEFINE_TYPE (MetaBackgroundGroup, meta_background_group, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| struct _MetaBackgroundGroupPrivate | ||||
| { | ||||
|   gpointer dummy; | ||||
| }; | ||||
|  | ||||
| static void | ||||
| meta_background_group_dispose (GObject *object) | ||||
| { | ||||
|   G_OBJECT_CLASS (meta_background_group_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_background_group_get_paint_volume (ClutterActor       *actor, | ||||
|                                         ClutterPaintVolume *volume) | ||||
| { | ||||
|   return clutter_paint_volume_set_from_allocation (volume, actor); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_group_class_init (MetaBackgroundGroupClass *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|   ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); | ||||
|  | ||||
|   actor_class->get_paint_volume = meta_background_group_get_paint_volume; | ||||
|   object_class->dispose = meta_background_group_dispose; | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaBackgroundGroupPrivate)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_group_init (MetaBackgroundGroup *self) | ||||
| { | ||||
|   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, | ||||
|                                             META_TYPE_BACKGROUND_GROUP, | ||||
|                                             MetaBackgroundGroupPrivate); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_group_set_visible_region: | ||||
|  * @self: a #MetaBackgroundGroup | ||||
|  * @visible_region: (allow-none): the parts of the background to paint | ||||
|  * | ||||
|  * Sets the area of the backgrounds that is unobscured by overlapping windows. | ||||
|  * This is used to optimize and only paint the visible portions. | ||||
|  */ | ||||
| void | ||||
| meta_background_group_set_visible_region (MetaBackgroundGroup *self, | ||||
|                                           cairo_region_t      *region) | ||||
| { | ||||
|   GList *children, *l; | ||||
|  | ||||
|   children = clutter_actor_get_children (CLUTTER_ACTOR (self)); | ||||
|   for (l = children; l; l = l->next) | ||||
|     { | ||||
|       ClutterActor *actor = l->data; | ||||
|  | ||||
|       if (META_IS_BACKGROUND_ACTOR (actor)) | ||||
|         { | ||||
|           meta_background_actor_set_visible_region (META_BACKGROUND_ACTOR (actor), region); | ||||
|         } | ||||
|       else if (META_IS_BACKGROUND_GROUP (actor)) | ||||
|         { | ||||
|           int x, y; | ||||
|  | ||||
|           if (!meta_actor_is_untransformed (actor, &x, &y)) | ||||
|             continue; | ||||
|  | ||||
|           cairo_region_translate (region, -x, -y); | ||||
|           meta_background_group_set_visible_region (META_BACKGROUND_GROUP (actor), region); | ||||
|           cairo_region_translate (region, x, y); | ||||
|         } | ||||
|     } | ||||
|   g_list_free (children); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_background_group_new (void) | ||||
| { | ||||
|   MetaBackgroundGroup *background_group; | ||||
|  | ||||
|   background_group = g_object_new (META_TYPE_BACKGROUND_GROUP, NULL); | ||||
|  | ||||
|   return CLUTTER_ACTOR (background_group); | ||||
| } | ||||
							
								
								
									
										1282
									
								
								src/compositor/meta-background.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1282
									
								
								src/compositor/meta-background.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -35,34 +35,32 @@ | ||||
|  | ||||
| #include <clutter/x11/clutter-x11.h> | ||||
|  | ||||
| static GSList *plugin_types; | ||||
|  | ||||
| /* | ||||
|  * We have one "default plugin manager" that acts for the first screen, | ||||
|  * but also can be used before we open any screens, and additional | ||||
|  * plugin managers for each screen. (This is ugly. Probably we should | ||||
|  * have one plugin manager and only make the plugins per-screen.) | ||||
|  */ | ||||
| static MetaPluginManager *default_plugin_manager; | ||||
| static GType plugin_type = G_TYPE_NONE; | ||||
|  | ||||
| struct MetaPluginManager | ||||
| { | ||||
|   MetaScreen   *screen; | ||||
|  | ||||
|   GList /* MetaPlugin */ *plugins;  /* TODO -- maybe use hash table */ | ||||
|   MetaScreen *screen; | ||||
|   MetaPlugin *plugin; | ||||
| }; | ||||
|  | ||||
| void | ||||
| meta_plugin_manager_set_plugin_type (GType gtype) | ||||
| { | ||||
|   if (plugin_type != G_TYPE_NONE) | ||||
|     meta_fatal ("Mutter plugin already set: %s", g_type_name (plugin_type)); | ||||
|  | ||||
|   plugin_type = gtype; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Loads the given plugin. | ||||
|  */ | ||||
| void | ||||
| meta_plugin_manager_load (MetaPluginManager *plugin_mgr, | ||||
|                           const gchar       *plugin_name) | ||||
| meta_plugin_manager_load (const gchar       *plugin_name) | ||||
| { | ||||
|   const gchar *dpath = MUTTER_PLUGIN_DIR "/"; | ||||
|   gchar       *path; | ||||
|   MetaModule  *module; | ||||
|   GType        plugin_type; | ||||
|  | ||||
|   if (g_path_is_absolute (plugin_name)) | ||||
|     path = g_strdup (plugin_name); | ||||
| @@ -81,162 +79,57 @@ meta_plugin_manager_load (MetaPluginManager *plugin_mgr, | ||||
|       exit (1); | ||||
|     } | ||||
|  | ||||
|   plugin_type = meta_module_get_plugin_type (module); | ||||
|   meta_plugin_manager_register (plugin_mgr, plugin_type); | ||||
|   meta_plugin_manager_set_plugin_type (meta_module_get_plugin_type (module)); | ||||
|  | ||||
|   g_type_module_unuse (G_TYPE_MODULE (module)); | ||||
|   g_free (path); | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Registers the given plugin type | ||||
|  */ | ||||
| void | ||||
| meta_plugin_manager_register (MetaPluginManager *plugin_mgr, | ||||
|                               GType              plugin_type) | ||||
| { | ||||
|   MetaPlugin  *plugin; | ||||
|  | ||||
|   plugin_types = g_slist_prepend (plugin_types, GSIZE_TO_POINTER (plugin_type)); | ||||
|  | ||||
|   plugin = g_object_new (plugin_type, NULL); | ||||
|   plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_manager_initialize (MetaPluginManager *plugin_mgr) | ||||
| { | ||||
|   GList *iter; | ||||
|  | ||||
|   if (!plugin_mgr->plugins) | ||||
|     { | ||||
|       /* | ||||
|        * If no plugins are specified, load the default plugin. | ||||
|        */ | ||||
|       meta_plugin_manager_load (plugin_mgr, "default"); | ||||
|     } | ||||
|  | ||||
|   for (iter = plugin_mgr->plugins; iter; iter = iter->next) | ||||
|     { | ||||
|       MetaPlugin *plugin = (MetaPlugin*) iter->data; | ||||
|       MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       g_object_set (plugin, | ||||
|                     "screen", plugin_mgr->screen, | ||||
|                     NULL); | ||||
|  | ||||
|       if (klass->start) | ||||
|         klass->start (plugin); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static MetaPluginManager * | ||||
| MetaPluginManager * | ||||
| meta_plugin_manager_new (MetaScreen *screen) | ||||
| { | ||||
|   MetaPluginManager *plugin_mgr; | ||||
|   MetaPluginClass *klass; | ||||
|   MetaPlugin *plugin; | ||||
|  | ||||
|   plugin_mgr = g_new0 (MetaPluginManager, 1); | ||||
|   plugin_mgr->screen = screen; | ||||
|   plugin_mgr->plugin = plugin = g_object_new (plugin_type, "screen", screen, NULL); | ||||
|  | ||||
|   if (screen) | ||||
|     g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", plugin_mgr); | ||||
|   klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   if (klass->start) | ||||
|     klass->start (plugin); | ||||
|  | ||||
|   return plugin_mgr; | ||||
| } | ||||
|  | ||||
| MetaPluginManager * | ||||
| meta_plugin_manager_get_default (void) | ||||
| { | ||||
|   if (!default_plugin_manager) | ||||
|     { | ||||
|       default_plugin_manager = meta_plugin_manager_new (NULL); | ||||
|     } | ||||
|  | ||||
|   return default_plugin_manager; | ||||
| } | ||||
|  | ||||
| MetaPluginManager * | ||||
| meta_plugin_manager_get (MetaScreen *screen) | ||||
| { | ||||
|   MetaPluginManager *plugin_mgr; | ||||
|  | ||||
|   plugin_mgr = g_object_get_data (G_OBJECT (screen), "meta-plugin-manager"); | ||||
|   if (plugin_mgr) | ||||
|     return plugin_mgr; | ||||
|  | ||||
|   if (!default_plugin_manager) | ||||
|     meta_plugin_manager_get_default (); | ||||
|  | ||||
|   if (!default_plugin_manager->screen) | ||||
|     { | ||||
|       /* The default plugin manager is so far unused, we can recycle it */ | ||||
|       default_plugin_manager->screen = screen; | ||||
|       g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", default_plugin_manager); | ||||
|  | ||||
|       return default_plugin_manager; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       GSList *iter; | ||||
|       GType plugin_type; | ||||
|       MetaPlugin *plugin; | ||||
|  | ||||
|       plugin_mgr = meta_plugin_manager_new (screen); | ||||
|  | ||||
|       for (iter = plugin_types; iter; iter = iter->next) | ||||
|         { | ||||
|           plugin_type = (GType)GPOINTER_TO_SIZE (iter->data); | ||||
|           plugin = g_object_new (plugin_type, "screen", screen,  NULL); | ||||
|           plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin); | ||||
|         } | ||||
|  | ||||
|       return plugin_mgr; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_manager_kill_window_effects (MetaPluginManager *plugin_mgr, | ||||
|                                          MetaWindowActor   *actor) | ||||
| { | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|   MetaPlugin        *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   while (l) | ||||
|     { | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       if (!meta_plugin_disabled (plugin) | ||||
| 	  && klass->kill_window_effects) | ||||
|         klass->kill_window_effects (plugin, actor); | ||||
|  | ||||
|       l = l->next; | ||||
|     } | ||||
|   if (klass->kill_window_effects) | ||||
|     klass->kill_window_effects (plugin, actor); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_manager_kill_switch_workspace (MetaPluginManager *plugin_mgr) | ||||
| { | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|   MetaPlugin        *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   while (l) | ||||
|     { | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       if (!meta_plugin_disabled (plugin) | ||||
|           && (meta_plugin_features (plugin) & META_PLUGIN_SWITCH_WORKSPACE) | ||||
| 	  && klass->kill_switch_workspace) | ||||
|         klass->kill_switch_workspace (plugin); | ||||
|  | ||||
|       l = l->next; | ||||
|     } | ||||
|   if (klass->kill_switch_workspace) | ||||
|     klass->kill_switch_workspace (plugin); | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Public method that the compositor hooks into for events that require | ||||
|  * no additional parameters. | ||||
|  * | ||||
|  * Returns TRUE if at least one of the plugins handled the event type (i.e., | ||||
|  * Returns TRUE if the plugin handled the event type (i.e., | ||||
|  * if the return value is FALSE, there will be no subsequent call to the | ||||
|  * manager completed() callback, and the compositor must ensure that any | ||||
|  * appropriate post-effect cleanup is carried out. | ||||
| @@ -246,60 +139,48 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr, | ||||
|                                   MetaWindowActor   *actor, | ||||
|                                   unsigned long      event) | ||||
| { | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|   gboolean retval = FALSE; | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   MetaDisplay *display  = meta_screen_get_display (plugin_mgr->screen); | ||||
|   gboolean retval = FALSE; | ||||
|  | ||||
|   if (display->display_opening) | ||||
|     return FALSE; | ||||
|  | ||||
|   while (l) | ||||
|   switch (event) | ||||
|     { | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       if (!meta_plugin_disabled (plugin) && | ||||
|           (meta_plugin_features (plugin) & event)) | ||||
|     case META_PLUGIN_MINIMIZE: | ||||
|       if (klass->minimize) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           meta_plugin_manager_kill_window_effects (plugin_mgr, | ||||
|                                                    actor); | ||||
|  | ||||
|           switch (event) | ||||
|             { | ||||
|             case META_PLUGIN_MINIMIZE: | ||||
|               if (klass->minimize) | ||||
|                 { | ||||
|                   meta_plugin_manager_kill_window_effects ( | ||||
| 		      plugin_mgr, | ||||
| 		      actor); | ||||
|  | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->minimize (plugin, actor); | ||||
|                 } | ||||
|               break; | ||||
|             case META_PLUGIN_MAP: | ||||
|               if (klass->map) | ||||
|                 { | ||||
|                   meta_plugin_manager_kill_window_effects ( | ||||
| 		      plugin_mgr, | ||||
| 		      actor); | ||||
|  | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->map (plugin, actor); | ||||
|                 } | ||||
|               break; | ||||
|             case META_PLUGIN_DESTROY: | ||||
|               if (klass->destroy) | ||||
|                 { | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->destroy (plugin, actor); | ||||
|                 } | ||||
|               break; | ||||
|             default: | ||||
|               g_warning ("Incorrect handler called for event %lu", event); | ||||
|             } | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->minimize (plugin, actor); | ||||
|         } | ||||
|       break; | ||||
|     case META_PLUGIN_MAP: | ||||
|       if (klass->map) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           meta_plugin_manager_kill_window_effects (plugin_mgr, | ||||
|                                                    actor); | ||||
|  | ||||
|       l = l->next; | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->map (plugin, actor); | ||||
|         } | ||||
|       break; | ||||
|     case META_PLUGIN_DESTROY: | ||||
|       if (klass->destroy) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->destroy (plugin, actor); | ||||
|         } | ||||
|       break; | ||||
|     default: | ||||
|       g_warning ("Incorrect handler called for event %lu", event); | ||||
|     } | ||||
|  | ||||
|   return retval; | ||||
| @@ -309,7 +190,7 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr, | ||||
|  * The public method that the compositor hooks into for maximize and unmaximize | ||||
|  * events. | ||||
|  * | ||||
|  * Returns TRUE if at least one of the plugins handled the event type (i.e., | ||||
|  * Returns TRUE if the plugin handled the event type (i.e., | ||||
|  * if the return value is FALSE, there will be no subsequent call to the | ||||
|  * manager completed() callback, and the compositor must ensure that any | ||||
|  * appropriate post-effect cleanup is carried out. | ||||
| @@ -323,57 +204,44 @@ meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr, | ||||
|                                     gint               target_width, | ||||
|                                     gint               target_height) | ||||
| { | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen); | ||||
|   gboolean retval = FALSE; | ||||
|   MetaDisplay *display  = meta_screen_get_display (plugin_mgr->screen); | ||||
|  | ||||
|   if (display->display_opening) | ||||
|     return FALSE; | ||||
|  | ||||
|   while (l) | ||||
|   switch (event) | ||||
|     { | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       if (!meta_plugin_disabled (plugin) && | ||||
|           (meta_plugin_features (plugin) & event)) | ||||
|     case META_PLUGIN_MAXIMIZE: | ||||
|       if (klass->maximize) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           meta_plugin_manager_kill_window_effects (plugin_mgr, | ||||
|                                                    actor); | ||||
|  | ||||
|           switch (event) | ||||
|             { | ||||
|             case META_PLUGIN_MAXIMIZE: | ||||
|               if (klass->maximize) | ||||
|                 { | ||||
|                   meta_plugin_manager_kill_window_effects ( | ||||
| 		      plugin_mgr, | ||||
| 		      actor); | ||||
|  | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->maximize (plugin, actor, | ||||
|                                    target_x, target_y, | ||||
|                                    target_width, target_height); | ||||
|                 } | ||||
|               break; | ||||
|             case META_PLUGIN_UNMAXIMIZE: | ||||
|               if (klass->unmaximize) | ||||
|                 { | ||||
|                   meta_plugin_manager_kill_window_effects ( | ||||
| 		      plugin_mgr, | ||||
| 		      actor); | ||||
|  | ||||
|                   _meta_plugin_effect_started (plugin); | ||||
|                   klass->unmaximize (plugin, actor, | ||||
|                                      target_x, target_y, | ||||
|                                      target_width, target_height); | ||||
|                 } | ||||
|               break; | ||||
|             default: | ||||
|               g_warning ("Incorrect handler called for event %lu", event); | ||||
|             } | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->maximize (plugin, actor, | ||||
|                            target_x, target_y, | ||||
|                            target_width, target_height); | ||||
|         } | ||||
|       break; | ||||
|     case META_PLUGIN_UNMAXIMIZE: | ||||
|       if (klass->unmaximize) | ||||
|         { | ||||
|           retval = TRUE; | ||||
|           meta_plugin_manager_kill_window_effects (plugin_mgr, | ||||
|                                                    actor); | ||||
|  | ||||
|       l = l->next; | ||||
|           _meta_plugin_effect_started (plugin); | ||||
|           klass->unmaximize (plugin, actor, | ||||
|                              target_x, target_y, | ||||
|                              target_width, target_height); | ||||
|         } | ||||
|       break; | ||||
|     default: | ||||
|       g_warning ("Incorrect handler called for event %lu", event); | ||||
|     } | ||||
|  | ||||
|   return retval; | ||||
| @@ -382,7 +250,7 @@ meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr, | ||||
| /* | ||||
|  * The public method that the compositor hooks into for desktop switching. | ||||
|  * | ||||
|  * Returns TRUE if at least one of the plugins handled the event type (i.e., | ||||
|  * Returns TRUE if the plugin handled the event type (i.e., | ||||
|  * if the return value is FALSE, there will be no subsequent call to the | ||||
|  * manager completed() callback, and the compositor must ensure that any | ||||
|  * appropriate post-effect cleanup is carried out. | ||||
| @@ -393,41 +261,43 @@ meta_plugin_manager_switch_workspace (MetaPluginManager   *plugin_mgr, | ||||
|                                       gint                 to, | ||||
|                                       MetaMotionDirection  direction) | ||||
| { | ||||
|   GList *l = plugin_mgr->plugins; | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen); | ||||
|   gboolean retval = FALSE; | ||||
|   MetaDisplay *display  = meta_screen_get_display (plugin_mgr->screen); | ||||
|  | ||||
|   if (display->display_opening) | ||||
|     return FALSE; | ||||
|  | ||||
|   while (l) | ||||
|   if (klass->switch_workspace) | ||||
|     { | ||||
|       MetaPlugin        *plugin = l->data; | ||||
|       MetaPluginClass   *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|       retval = TRUE; | ||||
|       meta_plugin_manager_kill_switch_workspace (plugin_mgr); | ||||
|  | ||||
|       if (!meta_plugin_disabled (plugin) && | ||||
|           (meta_plugin_features (plugin) & META_PLUGIN_SWITCH_WORKSPACE)) | ||||
|         { | ||||
|           if (klass->switch_workspace) | ||||
|             { | ||||
|               retval = TRUE; | ||||
|               meta_plugin_manager_kill_switch_workspace (plugin_mgr); | ||||
|  | ||||
|               _meta_plugin_effect_started (plugin); | ||||
|               klass->switch_workspace (plugin, from, to, direction); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|       l = l->next; | ||||
|       _meta_plugin_effect_started (plugin); | ||||
|       klass->switch_workspace (plugin, from, to, direction); | ||||
|     } | ||||
|  | ||||
|   return retval; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_plugin_manager_filter_keybinding (MetaPluginManager *plugin_mgr, | ||||
|                                        MetaKeyBinding    *binding) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   if (klass->keybinding_filter) | ||||
|     return klass->keybinding_filter (plugin, binding); | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * The public method that the compositor hooks into for desktop switching. | ||||
|  * | ||||
|  * Returns TRUE if at least one of the plugins handled the event type (i.e., | ||||
|  * Returns TRUE if the plugin handled the event type (i.e., | ||||
|  * if the return value is FALSE, there will be no subsequent call to the | ||||
|  * manager completed() callback, and the compositor must ensure that any | ||||
|  * appropriate post-effect cleanup is carried out. | ||||
| @@ -436,49 +306,17 @@ gboolean | ||||
| meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr, | ||||
|                                    XEvent            *xev) | ||||
| { | ||||
|   GList *l; | ||||
|   gboolean have_plugin_xevent_func; | ||||
|  | ||||
|   if (!plugin_mgr) | ||||
|     return FALSE; | ||||
|  | ||||
|   l = plugin_mgr->plugins; | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   /* We need to make sure that clutter gets certain events, like | ||||
|    * ConfigureNotify on the stage window. If there is a plugin that | ||||
|    * provides an xevent_filter function, then it's the responsibility | ||||
|    * of that plugin to pass events to Clutter. Otherwise, we send the | ||||
|    * event directly to Clutter ourselves. | ||||
|    * | ||||
|    * What happens if there are two plugins with xevent_filter functions | ||||
|    * is undefined; in general, multiple competing plugins are something | ||||
|    * we don't support well or care much about. | ||||
|    * | ||||
|    * FIXME: Really, we should just always handle sending the event to | ||||
|    *  clutter if a plugin doesn't report the event as handled by | ||||
|    *  returning TRUE, but it doesn't seem worth breaking compatibility | ||||
|    *  of the plugin interface right now to achieve this; the way it is | ||||
|    *  now works fine in practice. | ||||
|    */ | ||||
|   have_plugin_xevent_func = FALSE; | ||||
|  | ||||
|   while (l) | ||||
|     { | ||||
|       MetaPlugin      *plugin = l->data; | ||||
|       MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|       if (klass->xevent_filter) | ||||
|         { | ||||
|           have_plugin_xevent_func = TRUE; | ||||
|           if (klass->xevent_filter (plugin, xev) == TRUE) | ||||
|             return TRUE; | ||||
|         } | ||||
|  | ||||
|       l = l->next; | ||||
|     } | ||||
|  | ||||
|   if (!have_plugin_xevent_func) | ||||
|   if (klass->xevent_filter) | ||||
|     return klass->xevent_filter (plugin, xev); | ||||
|   else | ||||
|     return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE; | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|   | ||||
| @@ -46,14 +46,9 @@ | ||||
|  */ | ||||
| typedef struct MetaPluginManager MetaPluginManager; | ||||
|  | ||||
| MetaPluginManager * meta_plugin_manager_get         (MetaScreen *screen); | ||||
| MetaPluginManager * meta_plugin_manager_get_default (void); | ||||
| MetaPluginManager * meta_plugin_manager_new (MetaScreen *screen); | ||||
|  | ||||
| void     meta_plugin_manager_load         (MetaPluginManager *mgr, | ||||
|                                            const gchar       *plugin_name); | ||||
| void     meta_plugin_manager_register     (MetaPluginManager *mgr, | ||||
|                                            GType              plugin_type); | ||||
| void     meta_plugin_manager_initialize   (MetaPluginManager *mgr); | ||||
| void     meta_plugin_manager_load         (const gchar       *plugin_name); | ||||
|  | ||||
| gboolean meta_plugin_manager_event_simple (MetaPluginManager *mgr, | ||||
|                                            MetaWindowActor   *actor, | ||||
| @@ -66,16 +61,15 @@ gboolean meta_plugin_manager_event_maximize    (MetaPluginManager *mgr, | ||||
|                                                 gint               target_y, | ||||
|                                                 gint               target_width, | ||||
|                                                 gint               target_height); | ||||
| void     meta_plugin_manager_update_workspaces (MetaPluginManager *mgr); | ||||
|  | ||||
| void meta_plugin_manager_update_workspace (MetaPluginManager *mgr, | ||||
|                                            MetaWorkspace     *w); | ||||
|  | ||||
| gboolean meta_plugin_manager_switch_workspace (MetaPluginManager   *mgr, | ||||
|                                                gint                 from, | ||||
|                                                gint                 to, | ||||
|                                                MetaMotionDirection  direction); | ||||
|  | ||||
| gboolean meta_plugin_manager_filter_keybinding (MetaPluginManager  *mgr, | ||||
|                                                 MetaKeyBinding     *binding); | ||||
|  | ||||
| gboolean meta_plugin_manager_xevent_filter (MetaPluginManager *mgr, | ||||
|                                             XEvent            *xev); | ||||
|  | ||||
|   | ||||
| @@ -21,6 +21,13 @@ | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-plugin | ||||
|  * @title: MetaPlugin | ||||
|  * @short_description: Entry point for plugins | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include <meta/meta-plugin.h> | ||||
| #include "meta-plugin-manager.h" | ||||
| #include <meta/screen.h> | ||||
| @@ -44,74 +51,17 @@ enum | ||||
| { | ||||
|   PROP_0, | ||||
|   PROP_SCREEN, | ||||
|   PROP_FEATURES, | ||||
|   PROP_DISABLED, | ||||
|   PROP_DEBUG_MODE, | ||||
| }; | ||||
|  | ||||
| struct _MetaPluginPrivate | ||||
| { | ||||
|   MetaScreen   *screen; | ||||
|   gulong        features; | ||||
|  | ||||
|   gint          running; | ||||
|  | ||||
|   gboolean      disabled : 1; | ||||
|   gboolean      debug    : 1; | ||||
| }; | ||||
|  | ||||
| static void | ||||
| meta_plugin_set_features (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate  *priv     = plugin->priv; | ||||
|   MetaPluginClass    *klass    = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   priv->features = 0; | ||||
|  | ||||
|   /* | ||||
|    * Feature flags: identify events that the plugin can handle; a plugin can | ||||
|    * handle one or more events. | ||||
|    */ | ||||
|   if (klass->minimize) | ||||
|     priv->features |= META_PLUGIN_MINIMIZE; | ||||
|  | ||||
|   if (klass->maximize) | ||||
|     priv->features |= META_PLUGIN_MAXIMIZE; | ||||
|  | ||||
|   if (klass->unmaximize) | ||||
|     priv->features |= META_PLUGIN_UNMAXIMIZE; | ||||
|  | ||||
|   if (klass->map) | ||||
|     priv->features |= META_PLUGIN_MAP; | ||||
|  | ||||
|   if (klass->destroy) | ||||
|     priv->features |= META_PLUGIN_DESTROY; | ||||
|  | ||||
|   if (klass->switch_workspace) | ||||
|     priv->features |= META_PLUGIN_SWITCH_WORKSPACE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_constructed (GObject *object) | ||||
| { | ||||
|   meta_plugin_set_features (META_PLUGIN (object)); | ||||
|  | ||||
|   if (G_OBJECT_CLASS (meta_plugin_parent_class)->constructed) | ||||
|       G_OBJECT_CLASS (meta_plugin_parent_class)->constructed (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_dispose (GObject *object) | ||||
| { | ||||
|   G_OBJECT_CLASS (meta_plugin_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_finalize (GObject *object) | ||||
| { | ||||
|   G_OBJECT_CLASS (meta_plugin_parent_class)->finalize (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_plugin_set_property (GObject      *object, | ||||
|                           guint         prop_id, | ||||
| @@ -125,9 +75,6 @@ meta_plugin_set_property (GObject      *object, | ||||
|     case PROP_SCREEN: | ||||
|       priv->screen = g_value_get_object (value); | ||||
|       break; | ||||
|     case PROP_DISABLED: | ||||
|       priv->disabled = g_value_get_boolean (value); | ||||
|       break; | ||||
|     case PROP_DEBUG_MODE: | ||||
|       priv->debug = g_value_get_boolean (value); | ||||
|       break; | ||||
| @@ -150,15 +97,9 @@ meta_plugin_get_property (GObject    *object, | ||||
|     case PROP_SCREEN: | ||||
|       g_value_set_object (value, priv->screen); | ||||
|       break; | ||||
|     case PROP_DISABLED: | ||||
|       g_value_set_boolean (value, priv->disabled); | ||||
|       break; | ||||
|     case PROP_DEBUG_MODE: | ||||
|       g_value_set_boolean (value, priv->debug); | ||||
|       break; | ||||
|     case PROP_FEATURES: | ||||
|       g_value_set_ulong (value, priv->features); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
| @@ -171,9 +112,6 @@ meta_plugin_class_init (MetaPluginClass *klass) | ||||
| { | ||||
|   GObjectClass      *gobject_class = G_OBJECT_CLASS (klass); | ||||
|  | ||||
|   gobject_class->constructed     = meta_plugin_constructed; | ||||
|   gobject_class->finalize        = meta_plugin_finalize; | ||||
|   gobject_class->dispose         = meta_plugin_dispose; | ||||
|   gobject_class->set_property    = meta_plugin_set_property; | ||||
|   gobject_class->get_property    = meta_plugin_get_property; | ||||
|  | ||||
| @@ -185,22 +123,6 @@ meta_plugin_class_init (MetaPluginClass *klass) | ||||
|                                                         META_TYPE_SCREEN, | ||||
|                                                         G_PARAM_READWRITE)); | ||||
|  | ||||
|   g_object_class_install_property (gobject_class, | ||||
| 				   PROP_FEATURES, | ||||
| 				   g_param_spec_ulong ("features", | ||||
|                                                        "Features", | ||||
|                                                        "Plugin Features", | ||||
|                                                        0 , G_MAXULONG, 0, | ||||
|                                                        G_PARAM_READABLE)); | ||||
|  | ||||
|   g_object_class_install_property (gobject_class, | ||||
| 				   PROP_DISABLED, | ||||
| 				   g_param_spec_boolean ("disabled", | ||||
|                                                       "Plugin disabled", | ||||
|                                                       "Plugin disabled", | ||||
|                                                       FALSE, | ||||
|                                                       G_PARAM_READWRITE)); | ||||
|  | ||||
|   g_object_class_install_property (gobject_class, | ||||
| 				   PROP_DEBUG_MODE, | ||||
| 				   g_param_spec_boolean ("debug-mode", | ||||
| @@ -220,22 +142,6 @@ meta_plugin_init (MetaPlugin *self) | ||||
|   self->priv = priv = META_PLUGIN_GET_PRIVATE (self); | ||||
| } | ||||
|  | ||||
| gulong | ||||
| meta_plugin_features (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return priv->features; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_plugin_disabled (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return priv->disabled; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_plugin_running  (MetaPlugin *plugin) | ||||
| { | ||||
| @@ -263,38 +169,6 @@ meta_plugin_get_info (MetaPlugin *plugin) | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_plugin_get_overlay_group (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_overlay_group_for_screen (priv->screen); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_plugin_get_stage (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_stage_for_screen (priv->screen); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_plugin_get_window_group (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_window_group_for_screen (priv->screen); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_plugin_get_background_actor (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_background_actor_for_screen (priv->screen); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * _meta_plugin_effect_started: | ||||
|  * @plugin: the plugin | ||||
| @@ -315,7 +189,7 @@ meta_plugin_switch_workspace_completed (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   MetaScreen *screen = meta_plugin_get_screen (plugin); | ||||
|   MetaScreen *screen = priv->screen; | ||||
|  | ||||
|   if (priv->running-- < 0) | ||||
|     { | ||||
| @@ -389,80 +263,6 @@ meta_plugin_destroy_completed (MetaPlugin      *plugin, | ||||
|   meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_DESTROY); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_query_screen_size (MetaPlugin *plugin, | ||||
|                                int        *width, | ||||
|                                int        *height) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   meta_screen_get_size (priv->screen, width, height); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_set_stage_reactive (MetaPlugin *plugin, | ||||
|                                 gboolean    reactive) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|   MetaScreen  *screen  = priv->screen; | ||||
|  | ||||
|   if (reactive) | ||||
|     meta_set_stage_input_region (screen, None); | ||||
|   else | ||||
|     meta_empty_stage_input_region (screen); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_set_stage_input_area (MetaPlugin *plugin, | ||||
|                                   gint x, gint y, gint width, gint height) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|   MetaScreen   *screen  = priv->screen; | ||||
|   MetaDisplay  *display = meta_screen_get_display (screen); | ||||
|   Display      *xdpy    = meta_display_get_xdisplay (display); | ||||
|   XRectangle    rect; | ||||
|   XserverRegion region; | ||||
|  | ||||
|   rect.x = x; | ||||
|   rect.y = y; | ||||
|   rect.width = width; | ||||
|   rect.height = height; | ||||
|  | ||||
|   region = XFixesCreateRegion (xdpy, &rect, 1); | ||||
|   meta_set_stage_input_region (screen, region); | ||||
|   XFixesDestroyRegion (xdpy, region); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_set_stage_input_region (MetaPlugin   *plugin, | ||||
|                                     XserverRegion region) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|   MetaScreen  *screen  = priv->screen; | ||||
|  | ||||
|   meta_set_stage_input_region (screen, region); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_get_window_actors: | ||||
|  * @plugin: A #MetaPlugin | ||||
|  * | ||||
|  * This function returns all of the #MetaWindowActor objects referenced by Mutter, including | ||||
|  * override-redirect windows.  The returned list is a snapshot of Mutter's current | ||||
|  * stacking order, with the topmost window last. | ||||
|  * | ||||
|  * The 'restacked' signal of #MetaScreen signals when this value has changed. | ||||
|  * | ||||
|  * Returns: (transfer none) (element-type MetaWindowActor): Windows in stacking order, topmost last | ||||
|  */ | ||||
| GList * | ||||
| meta_plugin_get_window_actors (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_get_window_actors (priv->screen); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_begin_modal: | ||||
|  * @plugin: a #MetaPlugin | ||||
| @@ -502,7 +302,7 @@ meta_plugin_begin_modal (MetaPlugin       *plugin, | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_end_modal | ||||
|  * meta_plugin_end_modal: | ||||
|  * @plugin: a #MetaPlugin | ||||
|  * @timestamp: the time used for releasing grabs | ||||
|  * | ||||
| @@ -521,16 +321,6 @@ meta_plugin_end_modal (MetaPlugin *plugin, | ||||
|   meta_end_modal_for_plugin (priv->screen, plugin, timestamp); | ||||
| } | ||||
|  | ||||
| Display * | ||||
| meta_plugin_get_xdisplay (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaPluginPrivate *priv    = META_PLUGIN (plugin)->priv; | ||||
|   MetaDisplay       *display = meta_screen_get_display (priv->screen); | ||||
|   Display           *xdpy    = meta_display_get_xdisplay (display); | ||||
|  | ||||
|   return xdpy; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_get_screen: | ||||
|  * @plugin: a #MetaPlugin | ||||
| @@ -548,19 +338,3 @@ meta_plugin_get_screen (MetaPlugin *plugin) | ||||
|  | ||||
|   return priv->screen; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_plugin_type_register: | ||||
|  * @plugin_type: a #MetaPlugin type | ||||
|  * | ||||
|  * Register @plugin_type as a compositor plugin type to be used. | ||||
|  * You must call this before calling meta_init(). | ||||
|  */ | ||||
| void | ||||
| meta_plugin_type_register (GType plugin_type) | ||||
| { | ||||
|   MetaPluginManager *plugin_manager; | ||||
|  | ||||
|   plugin_manager = meta_plugin_manager_get_default (); | ||||
|   meta_plugin_manager_register (plugin_manager, plugin_type); | ||||
| } | ||||
|   | ||||
| @@ -40,7 +40,7 @@ typedef struct _MetaShadow MetaShadow; | ||||
|  | ||||
| MetaShadow *meta_shadow_ref         (MetaShadow            *shadow); | ||||
| void        meta_shadow_unref       (MetaShadow            *shadow); | ||||
| CoglHandle  meta_shadow_get_texture (MetaShadow            *shadow); | ||||
| CoglTexture*meta_shadow_get_texture (MetaShadow            *shadow); | ||||
| void        meta_shadow_paint       (MetaShadow            *shadow, | ||||
|                                      int                    window_x, | ||||
|                                      int                    window_y, | ||||
|   | ||||
| @@ -1,9 +1,5 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| /* | ||||
|  * MetaShadowFactory: | ||||
|  * | ||||
|  * Create and cache shadow textures for abritrary window shapes | ||||
|  * | ||||
|  * Copyright 2010 Red Hat, Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
| @@ -21,6 +17,13 @@ | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-shadow-factory | ||||
|  * @title: MetaShadowFactory | ||||
|  * @short_description: Create and cache shadow textures for abritrary window shapes | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
| #include <math.h> | ||||
| #include <string.h> | ||||
| @@ -65,8 +68,8 @@ struct _MetaShadow | ||||
|  | ||||
|   MetaShadowFactory *factory; | ||||
|   MetaShadowCacheKey key; | ||||
|   CoglHandle texture; | ||||
|   CoglHandle material; | ||||
|   CoglTexture *texture; | ||||
|   CoglPipeline *pipeline; | ||||
|  | ||||
|   /* The outer order is the distance the shadow extends outside the window | ||||
|    * shape; the inner border is the unscaled portion inside the window | ||||
| @@ -130,7 +133,7 @@ MetaShadowClassInfo default_shadow_classes[] = { | ||||
|   { "popup-menu",    { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } }, | ||||
|  | ||||
|   { "dropdown-menu", { 1, 10, 0, 1, 128 }, { 1, 10, 0, 1, 128 } }, | ||||
|   { "attached",      { 2, 50, 0, 1, 255 }, { 1, 50, 0, 1, 128 } } | ||||
|   { "attached",      { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } } | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaShadowFactory, meta_shadow_factory, G_TYPE_OBJECT); | ||||
| @@ -175,8 +178,8 @@ meta_shadow_unref (MetaShadow *shadow) | ||||
|         } | ||||
|  | ||||
|       meta_window_shape_unref (shadow->key.shape); | ||||
|       cogl_handle_unref (shadow->texture); | ||||
|       cogl_handle_unref (shadow->material); | ||||
|       cogl_object_unref (shadow->texture); | ||||
|       cogl_object_unref (shadow->pipeline); | ||||
|  | ||||
|       g_slice_free (MetaShadow, shadow); | ||||
|     } | ||||
| @@ -218,10 +221,10 @@ meta_shadow_paint (MetaShadow     *shadow, | ||||
|   int dest_y[4]; | ||||
|   int n_x, n_y; | ||||
|  | ||||
|   cogl_material_set_color4ub (shadow->material, | ||||
|   cogl_pipeline_set_color4ub (shadow->pipeline, | ||||
|                               opacity, opacity, opacity, opacity); | ||||
|  | ||||
|   cogl_set_source (shadow->material); | ||||
|   cogl_set_source (shadow->pipeline); | ||||
|  | ||||
|   if (shadow->scale_width) | ||||
|     { | ||||
| @@ -801,7 +804,7 @@ make_shadow (MetaShadow     *shadow, | ||||
|   cairo_region_destroy (column_convolve_region); | ||||
|   g_free (buffer); | ||||
|  | ||||
|   shadow->material = meta_create_texture_material (shadow->texture); | ||||
|   shadow->pipeline = meta_create_texture_pipeline (shadow->texture); | ||||
| } | ||||
|  | ||||
| static MetaShadowParams * | ||||
|   | ||||
| @@ -1,11 +1,9 @@ | ||||
| /* | ||||
|  * shaped texture | ||||
|  * | ||||
|  * An actor to draw a texture clipped to a list of rectangles | ||||
|  * | ||||
|  * Authored By Neil Roberts  <neil@linux.intel.com> | ||||
|  * and Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  * | ||||
|  * Copyright (C) 2008 Intel Corporation | ||||
|  * Copyright (C) 2012 Red Hat, Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
| @@ -23,34 +21,42 @@ | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-shaped-texture | ||||
|  * @title: MetaShapedTexture | ||||
|  * @short_description: An actor to draw a masked texture. | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include "meta-shaped-texture.h" | ||||
| #include <meta/meta-shaped-texture.h> | ||||
| #include "meta-texture-tower.h" | ||||
| #include "meta-texture-rectangle.h" | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| #include <cogl/cogl.h> | ||||
| #include <string.h> | ||||
| #include <cogl/cogl-texture-pixmap-x11.h> | ||||
| #include <gdk/gdk.h> /* for gdk_rectangle_intersect() */ | ||||
|  | ||||
| static void meta_shaped_texture_dispose  (GObject    *object); | ||||
| static void meta_shaped_texture_notify   (GObject    *object, | ||||
| 					  GParamSpec *pspec); | ||||
|  | ||||
| static void meta_shaped_texture_paint (ClutterActor       *actor); | ||||
| static void meta_shaped_texture_pick  (ClutterActor       *actor, | ||||
| 				       const ClutterColor *color); | ||||
|  | ||||
| static void meta_shaped_texture_update_area (ClutterX11TexturePixmap *texture, | ||||
| 					     int                      x, | ||||
| 					     int                      y, | ||||
| 					     int                      width, | ||||
| 					     int                      height); | ||||
| static void meta_shaped_texture_get_preferred_width (ClutterActor *self, | ||||
|                                                      gfloat        for_height, | ||||
|                                                      gfloat       *min_width_p, | ||||
|                                                      gfloat       *natural_width_p); | ||||
|  | ||||
| static void meta_shaped_texture_dirty_mask (MetaShapedTexture *stex); | ||||
| static void meta_shaped_texture_get_preferred_height (ClutterActor *self, | ||||
|                                                       gfloat        for_width, | ||||
|                                                       gfloat       *min_height_p, | ||||
|                                                       gfloat       *natural_height_p); | ||||
|  | ||||
| static gboolean meta_shaped_texture_get_paint_volume (ClutterActor *self, ClutterPaintVolume *volume); | ||||
|  | ||||
| G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture, | ||||
|                CLUTTER_X11_TYPE_TEXTURE_PIXMAP); | ||||
|                CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define META_SHAPED_TEXTURE_GET_PRIVATE(obj) \ | ||||
|   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_SHAPED_TEXTURE, \ | ||||
| @@ -59,19 +65,15 @@ G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture, | ||||
| struct _MetaShapedTexturePrivate | ||||
| { | ||||
|   MetaTextureTower *paint_tower; | ||||
|   CoglHandle mask_texture; | ||||
|   CoglHandle material; | ||||
|   CoglHandle material_unshaped; | ||||
|   Pixmap pixmap; | ||||
|   CoglTexturePixmapX11 *texture; | ||||
|   CoglTexture *mask_texture; | ||||
|   CoglPipeline *pipeline; | ||||
|   CoglPipeline *pipeline_unshaped; | ||||
|  | ||||
|   cairo_region_t *clip_region; | ||||
|   cairo_region_t *shape_region; | ||||
|  | ||||
|   cairo_region_t *overlay_region; | ||||
|   cairo_path_t *overlay_path; | ||||
|  | ||||
|   cairo_region_t *visible_pixels_region; | ||||
|  | ||||
|   guint mask_width, mask_height; | ||||
|   guint tex_width, tex_height; | ||||
|  | ||||
|   guint create_mipmaps : 1; | ||||
| }; | ||||
| @@ -81,15 +83,14 @@ meta_shaped_texture_class_init (MetaShapedTextureClass *klass) | ||||
| { | ||||
|   GObjectClass *gobject_class = (GObjectClass *) klass; | ||||
|   ClutterActorClass *actor_class = (ClutterActorClass *) klass; | ||||
|   ClutterX11TexturePixmapClass *x11_texture_class = (ClutterX11TexturePixmapClass *) klass; | ||||
|  | ||||
|   gobject_class->dispose = meta_shaped_texture_dispose; | ||||
|   gobject_class->notify = meta_shaped_texture_notify; | ||||
|  | ||||
|   actor_class->get_preferred_width = meta_shaped_texture_get_preferred_width; | ||||
|   actor_class->get_preferred_height = meta_shaped_texture_get_preferred_height; | ||||
|   actor_class->paint = meta_shaped_texture_paint; | ||||
|   actor_class->pick = meta_shaped_texture_pick; | ||||
|  | ||||
|   x11_texture_class->update_area = meta_shaped_texture_update_area; | ||||
|   actor_class->get_paint_volume = meta_shaped_texture_get_paint_volume; | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaShapedTexturePrivate)); | ||||
| } | ||||
| @@ -101,12 +102,9 @@ meta_shaped_texture_init (MetaShapedTexture *self) | ||||
|  | ||||
|   priv = self->priv = META_SHAPED_TEXTURE_GET_PRIVATE (self); | ||||
|  | ||||
|   priv->shape_region = NULL; | ||||
|   priv->overlay_path = NULL; | ||||
|   priv->overlay_region = NULL; | ||||
|   priv->visible_pixels_region = NULL; | ||||
|   priv->paint_tower = meta_texture_tower_new (); | ||||
|   priv->mask_texture = COGL_INVALID_HANDLE; | ||||
|   priv->texture = NULL; | ||||
|   priv->mask_texture = NULL; | ||||
|   priv->create_mipmaps = TRUE; | ||||
| } | ||||
|  | ||||
| @@ -120,312 +118,29 @@ meta_shaped_texture_dispose (GObject *object) | ||||
|     meta_texture_tower_free (priv->paint_tower); | ||||
|   priv->paint_tower = NULL; | ||||
|  | ||||
|   meta_shaped_texture_dirty_mask (self); | ||||
|   g_clear_pointer (&priv->pipeline, cogl_object_unref); | ||||
|   g_clear_pointer (&priv->pipeline_unshaped, cogl_object_unref); | ||||
|   g_clear_pointer (&priv->texture, cogl_object_unref); | ||||
|  | ||||
|   if (priv->material != COGL_INVALID_HANDLE) | ||||
|     { | ||||
|       cogl_handle_unref (priv->material); | ||||
|       priv->material = COGL_INVALID_HANDLE; | ||||
|     } | ||||
|   if (priv->material_unshaped != COGL_INVALID_HANDLE) | ||||
|     { | ||||
|       cogl_handle_unref (priv->material_unshaped); | ||||
|       priv->material_unshaped = COGL_INVALID_HANDLE; | ||||
|     } | ||||
|  | ||||
|   meta_shaped_texture_set_shape_region (self, NULL); | ||||
|   meta_shaped_texture_set_mask_texture (self, NULL); | ||||
|   meta_shaped_texture_set_clip_region (self, NULL); | ||||
|   meta_shaped_texture_set_overlay_path (self, NULL, NULL); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_notify (GObject    *object, | ||||
| 			    GParamSpec *pspec) | ||||
| { | ||||
|   if (G_OBJECT_CLASS (meta_shaped_texture_parent_class)->notify) | ||||
|     G_OBJECT_CLASS (meta_shaped_texture_parent_class)->notify (object, pspec); | ||||
|  | ||||
|   /* It seems like we could just do this out of update_area(), but unfortunately, | ||||
|    * clutter_glx_texture_pixmap() doesn't call through the vtable on the | ||||
|    * initial update_area, so we need to look for changes to the texture | ||||
|    * explicitly. | ||||
|    */ | ||||
|   if (strcmp (pspec->name, "cogl-texture") == 0) | ||||
|     { | ||||
|       MetaShapedTexture *stex = (MetaShapedTexture *) object; | ||||
|       MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|       meta_shaped_texture_clear (stex); | ||||
|  | ||||
|       if (priv->create_mipmaps) | ||||
| 	meta_texture_tower_set_base_texture (priv->paint_tower, | ||||
| 					       clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex))); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_dirty_mask (MetaShapedTexture *stex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|   if (priv->visible_pixels_region != NULL) | ||||
|     { | ||||
|       cairo_region_destroy (priv->visible_pixels_region); | ||||
|       priv->visible_pixels_region = NULL; | ||||
|  | ||||
|       if (priv->mask_texture != COGL_INVALID_HANDLE) | ||||
|         { | ||||
|           cogl_handle_unref (priv->mask_texture); | ||||
|           priv->mask_texture = COGL_INVALID_HANDLE; | ||||
|         } | ||||
|  | ||||
|       if (priv->material != COGL_INVALID_HANDLE) | ||||
|         cogl_material_set_layer (priv->material, 1, COGL_INVALID_HANDLE); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| scan_visible_region (MetaShapedTexture *stex, | ||||
|                      guchar            *mask_data, | ||||
|                      int                stride) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   cairo_region_t *visible_pixels_region; | ||||
|   cairo_region_t *overlay_region; | ||||
|   int i, n_rects; | ||||
|  | ||||
|   /* The visible pixels region contains all pixel values above 0. | ||||
|    * This is somewhat complicated when there's an overlay: we | ||||
|    * need to scan all regions potentially modified by it. | ||||
|    */ | ||||
|  | ||||
|   if (priv->visible_pixels_region) | ||||
|     cairo_region_destroy (priv->visible_pixels_region); | ||||
|  | ||||
|   priv->visible_pixels_region = cairo_region_copy (priv->shape_region); | ||||
|  | ||||
|   visible_pixels_region = priv->visible_pixels_region; | ||||
|   overlay_region = priv->overlay_region; | ||||
|  | ||||
|   /* With no overlay region, the visible region is defined | ||||
|    * by the mask region, so we don't need to scan anything. */ | ||||
|   if (overlay_region == NULL) | ||||
|       return; | ||||
|  | ||||
|   /* Subtract all the rectangles in the overlay region so that we can | ||||
|    * scan all the pixels potentially added by the overlay path. */ | ||||
|   cairo_region_subtract (visible_pixels_region, overlay_region); | ||||
|  | ||||
|   n_rects = cairo_region_num_rectangles (overlay_region); | ||||
|  | ||||
|   for (i = 0; i < n_rects; i++) | ||||
|     { | ||||
|       int x, y; | ||||
|       cairo_rectangle_int_t rect; | ||||
|  | ||||
|       cairo_region_get_rectangle (overlay_region, i, &rect); | ||||
|  | ||||
|       for (y = rect.y; y < (rect.y + rect.height); y++) | ||||
|         { | ||||
|           for (x = rect.x; x < (rect.x + rect.width); x++) | ||||
|             { | ||||
|               int w = x; | ||||
|               while (mask_data[y * stride + w] > 0 && w < (rect.x + rect.width)) | ||||
|                 w++; | ||||
|  | ||||
|               if (w > 0) | ||||
|                 { | ||||
|                   cairo_rectangle_int_t tmp; | ||||
|                   tmp.x = x; | ||||
|                   tmp.y = y; | ||||
|                   tmp.width = w - x; | ||||
|                   tmp.height = 1; | ||||
|                   cairo_region_union_rectangle (visible_pixels_region, &tmp); | ||||
|                   x = w; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| install_overlay_path (MetaShapedTexture *stex, | ||||
|                       guchar            *mask_data, | ||||
|                       int                tex_width, | ||||
|                       int                tex_height, | ||||
|                       int                stride) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   int i, n_rects; | ||||
|   cairo_t *cr; | ||||
|   cairo_rectangle_int_t rect; | ||||
|   cairo_surface_t *surface; | ||||
|  | ||||
|   if (priv->overlay_region == NULL) | ||||
|     return; | ||||
|  | ||||
|   surface = cairo_image_surface_create_for_data (mask_data, | ||||
|                                                  CAIRO_FORMAT_A8, | ||||
|                                                  tex_width, | ||||
|                                                  tex_height, | ||||
|                                                  stride); | ||||
|  | ||||
|   cr = cairo_create (surface); | ||||
|   cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); | ||||
|  | ||||
|   n_rects = cairo_region_num_rectangles (priv->overlay_region); | ||||
|   for (i = 0; i < n_rects; i++) | ||||
|     { | ||||
|       cairo_region_get_rectangle (priv->overlay_region, i, &rect); | ||||
|       cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height); | ||||
|     } | ||||
|  | ||||
|   cairo_fill_preserve (cr); | ||||
|   if (priv->overlay_path == NULL) | ||||
|     { | ||||
|       /* If we have an overlay region but not an overlay path, then we | ||||
|        * just need to clear the rectangles in the overlay region. */ | ||||
|       goto out; | ||||
|     } | ||||
|  | ||||
|   cairo_clip (cr); | ||||
|  | ||||
|   cairo_set_operator (cr, CAIRO_OPERATOR_OVER); | ||||
|   cairo_set_source_rgba (cr, 1, 1, 1, 1); | ||||
|  | ||||
|   cairo_append_path (cr, priv->overlay_path); | ||||
|   cairo_fill (cr); | ||||
|  | ||||
|  out: | ||||
|   cairo_destroy (cr); | ||||
|   cairo_surface_destroy (surface); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_ensure_mask (MetaShapedTexture *stex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   CoglHandle paint_tex; | ||||
|   guint tex_width, tex_height; | ||||
|  | ||||
|   paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)); | ||||
|  | ||||
|   if (paint_tex == COGL_INVALID_HANDLE) | ||||
|     return; | ||||
|  | ||||
|   tex_width = cogl_texture_get_width (paint_tex); | ||||
|   tex_height = cogl_texture_get_height (paint_tex); | ||||
|  | ||||
|   /* If the mask texture we have was created for a different size then | ||||
|      recreate it */ | ||||
|   if (priv->mask_texture != COGL_INVALID_HANDLE | ||||
|       && (priv->mask_width != tex_width || priv->mask_height != tex_height)) | ||||
|     meta_shaped_texture_dirty_mask (stex); | ||||
|  | ||||
|   /* If we don't have a mask texture yet then create one */ | ||||
|   if (priv->visible_pixels_region == NULL) | ||||
|     { | ||||
|       guchar *mask_data; | ||||
|       int i; | ||||
|       int n_rects; | ||||
|       int stride; | ||||
|       GLenum paint_gl_target; | ||||
|  | ||||
|       /* If we have no shape region and no (or an empty) overlay region, we | ||||
|        * don't need to create a full mask texture, so quit early. */ | ||||
|       if (priv->shape_region == NULL && | ||||
|           (priv->overlay_region == NULL || | ||||
|            cairo_region_num_rectangles (priv->overlay_region) == 0)) | ||||
|         { | ||||
|           /* With no mask, the visible region is just | ||||
|            * {0, 0, tex_width, tex_height}. */ | ||||
|           cairo_rectangle_int_t rect = { 0, 0, tex_width, tex_height }; | ||||
|           priv->visible_pixels_region = cairo_region_create_rectangle (&rect); | ||||
|           return; | ||||
|         } | ||||
|  | ||||
|       stride = cairo_format_stride_for_width (CAIRO_FORMAT_A8, tex_width); | ||||
|  | ||||
|       /* Create data for an empty image */ | ||||
|       mask_data = g_malloc0 (stride * tex_height); | ||||
|  | ||||
|       n_rects = cairo_region_num_rectangles (priv->shape_region); | ||||
|  | ||||
|       /* Fill in each rectangle. */ | ||||
|       for (i = 0; i < n_rects; i ++) | ||||
|         { | ||||
|           cairo_rectangle_int_t rect; | ||||
|           cairo_region_get_rectangle (priv->shape_region, i, &rect); | ||||
|  | ||||
|           gint x1 = rect.x, x2 = x1 + rect.width; | ||||
|           gint y1 = rect.y, y2 = y1 + rect.height; | ||||
|           guchar *p; | ||||
|  | ||||
|           /* Clip the rectangle to the size of the texture */ | ||||
|           x1 = CLAMP (x1, 0, (gint) tex_width - 1); | ||||
|           x2 = CLAMP (x2, x1, (gint) tex_width); | ||||
|           y1 = CLAMP (y1, 0, (gint) tex_height - 1); | ||||
|           y2 = CLAMP (y2, y1, (gint) tex_height); | ||||
|  | ||||
|           /* Fill the rectangle */ | ||||
|           for (p = mask_data + y1 * stride + x1; | ||||
|                y1 < y2; | ||||
|                y1++, p += stride) | ||||
|             memset (p, 255, x2 - x1); | ||||
|         } | ||||
|  | ||||
|       install_overlay_path (stex, mask_data, tex_width, tex_height, stride); | ||||
|       scan_visible_region (stex, mask_data, stride); | ||||
|  | ||||
|       cogl_texture_get_gl_texture (paint_tex, NULL, &paint_gl_target); | ||||
|  | ||||
| #ifdef GL_TEXTURE_RECTANGLE_ARB | ||||
|       if (paint_gl_target == GL_TEXTURE_RECTANGLE_ARB) | ||||
|         { | ||||
|           priv->mask_texture | ||||
|             = meta_texture_rectangle_new (tex_width, tex_height, | ||||
|                                           0, /* flags */ | ||||
|                                           /* data format */ | ||||
|                                           COGL_PIXEL_FORMAT_A_8, | ||||
|                                           /* internal GL format */ | ||||
|                                           GL_ALPHA, | ||||
|                                           /* internal cogl format */ | ||||
|                                           COGL_PIXEL_FORMAT_A_8, | ||||
|                                           /* rowstride */ | ||||
|                                           stride, | ||||
|                                           mask_data); | ||||
|         } | ||||
|       else | ||||
| #endif /* GL_TEXTURE_RECTANGLE_ARB */ | ||||
|         priv->mask_texture = cogl_texture_new_from_data (tex_width, tex_height, | ||||
|                                                          COGL_TEXTURE_NONE, | ||||
|                                                          COGL_PIXEL_FORMAT_A_8, | ||||
|                                                          COGL_PIXEL_FORMAT_ANY, | ||||
|                                                          stride, | ||||
|                                                          mask_data); | ||||
|  | ||||
|       g_free (mask_data); | ||||
|  | ||||
|       priv->mask_width = tex_width; | ||||
|       priv->mask_height = tex_height; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_paint (ClutterActor *actor) | ||||
| { | ||||
|   MetaShapedTexture *stex = (MetaShapedTexture *) actor; | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   CoglHandle paint_tex; | ||||
|   CoglTexture *paint_tex; | ||||
|   guint tex_width, tex_height; | ||||
|   ClutterActorBox alloc; | ||||
|  | ||||
|   static CoglHandle material_template = COGL_INVALID_HANDLE; | ||||
|   static CoglHandle material_unshaped_template = COGL_INVALID_HANDLE; | ||||
|   static CoglPipeline *pipeline_template = NULL; | ||||
|   static CoglPipeline *pipeline_unshaped_template = NULL; | ||||
|  | ||||
|   CoglHandle material; | ||||
|   CoglPipeline *pipeline; | ||||
|  | ||||
|   if (priv->clip_region && cairo_region_is_empty (priv->clip_region)) | ||||
|     return; | ||||
| @@ -451,60 +166,62 @@ meta_shaped_texture_paint (ClutterActor *actor) | ||||
|   if (priv->create_mipmaps) | ||||
|     paint_tex = meta_texture_tower_get_paint_texture (priv->paint_tower); | ||||
|   else | ||||
|     paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)); | ||||
|     paint_tex = COGL_TEXTURE (priv->texture); | ||||
|  | ||||
|   if (paint_tex == COGL_INVALID_HANDLE) | ||||
|   if (paint_tex == NULL) | ||||
|     return; | ||||
|  | ||||
|   tex_width = cogl_texture_get_width (paint_tex); | ||||
|   tex_height = cogl_texture_get_height (paint_tex); | ||||
|   tex_width = priv->tex_width; | ||||
|   tex_height = priv->tex_height; | ||||
|  | ||||
|   if (tex_width == 0 || tex_height == 0) /* no contents yet */ | ||||
|     return; | ||||
|  | ||||
|   if (priv->shape_region == NULL) | ||||
|   if (priv->mask_texture == NULL) | ||||
|     { | ||||
|       /* No region means an unclipped shape. Use a single-layer texture. */ | ||||
|       /* Use a single-layer texture if we don't have a mask. */ | ||||
|  | ||||
|       if (priv->material_unshaped == COGL_INVALID_HANDLE)  | ||||
|       if (priv->pipeline_unshaped == NULL) | ||||
|         { | ||||
|           if (G_UNLIKELY (material_unshaped_template == COGL_INVALID_HANDLE)) | ||||
|             material_unshaped_template = cogl_material_new (); | ||||
|           if (G_UNLIKELY (pipeline_unshaped_template == NULL)) | ||||
|             { | ||||
|               CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|               pipeline_unshaped_template = cogl_pipeline_new (ctx); | ||||
|             } | ||||
|  | ||||
|           priv->material_unshaped = cogl_material_copy (material_unshaped_template); | ||||
|           priv->pipeline_unshaped = cogl_pipeline_copy (pipeline_unshaped_template); | ||||
|         } | ||||
|         material = priv->material_unshaped; | ||||
|         pipeline = priv->pipeline_unshaped; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       meta_shaped_texture_ensure_mask (stex); | ||||
|  | ||||
|       if (priv->material == COGL_INVALID_HANDLE) | ||||
|       if (priv->pipeline == NULL) | ||||
| 	{ | ||||
| 	   if (G_UNLIKELY (material_template == COGL_INVALID_HANDLE)) | ||||
| 	   if (G_UNLIKELY (pipeline_template == NULL)) | ||||
| 	    { | ||||
| 	      material_template =  cogl_material_new (); | ||||
| 	      cogl_material_set_layer_combine (material_template, 1, | ||||
|               CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
| 	      pipeline_template =  cogl_pipeline_new (ctx); | ||||
| 	      cogl_pipeline_set_layer_combine (pipeline_template, 1, | ||||
| 					   "RGBA = MODULATE (PREVIOUS, TEXTURE[A])", | ||||
| 					   NULL); | ||||
| 	    } | ||||
| 	  priv->material = cogl_material_copy (material_template); | ||||
| 	  priv->pipeline = cogl_pipeline_copy (pipeline_template); | ||||
| 	} | ||||
|       material = priv->material; | ||||
|       pipeline = priv->pipeline; | ||||
|  | ||||
|       cogl_material_set_layer (material, 1, priv->mask_texture); | ||||
|       cogl_pipeline_set_layer_texture (pipeline, 1, priv->mask_texture); | ||||
|     } | ||||
|  | ||||
|   cogl_material_set_layer (material, 0, paint_tex); | ||||
|   cogl_pipeline_set_layer_texture (pipeline, 0, paint_tex); | ||||
|  | ||||
|   { | ||||
|     CoglColor color; | ||||
|     guchar opacity = clutter_actor_get_paint_opacity (actor); | ||||
|     cogl_color_set_from_4ub (&color, opacity, opacity, opacity, opacity); | ||||
|     cogl_material_set_color (material, &color); | ||||
|     cogl_pipeline_set_color (pipeline, &color); | ||||
|   } | ||||
|  | ||||
|   cogl_set_source (material); | ||||
|   cogl_set_source (pipeline); | ||||
|  | ||||
|   clutter_actor_get_allocation_box (actor, &alloc); | ||||
|  | ||||
| @@ -512,6 +229,7 @@ meta_shaped_texture_paint (ClutterActor *actor) | ||||
|     { | ||||
|       int n_rects; | ||||
|       int i; | ||||
|       cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height }; | ||||
|  | ||||
|       /* Limit to how many separate rectangles we'll draw; beyond this just | ||||
|        * fall back and draw the whole thing */ | ||||
| @@ -529,6 +247,9 @@ meta_shaped_texture_paint (ClutterActor *actor) | ||||
|  | ||||
| 	      cairo_region_get_rectangle (priv->clip_region, i, &rect); | ||||
|  | ||||
| 	      if (!gdk_rectangle_intersect (&tex_rect, &rect, &rect)) | ||||
| 		continue; | ||||
|  | ||||
| 	      x1 = rect.x; | ||||
| 	      y1 = rect.y; | ||||
| 	      x2 = rect.x + rect.width; | ||||
| @@ -565,18 +286,18 @@ meta_shaped_texture_pick (ClutterActor       *actor, | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|   /* If there is no region then use the regular pick */ | ||||
|   if (priv->shape_region == NULL) | ||||
|   if (priv->mask_texture == NULL) | ||||
|     CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class) | ||||
|       ->pick (actor, color); | ||||
|   else if (clutter_actor_should_pick_paint (actor)) | ||||
|     { | ||||
|       CoglHandle paint_tex; | ||||
|       CoglTexture *paint_tex; | ||||
|       ClutterActorBox alloc; | ||||
|       guint tex_width, tex_height; | ||||
|  | ||||
|       paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)); | ||||
|       paint_tex = COGL_TEXTURE (priv->texture); | ||||
|  | ||||
|       if (paint_tex == COGL_INVALID_HANDLE) | ||||
|       if (paint_tex == NULL) | ||||
|         return; | ||||
|  | ||||
|       tex_width = cogl_texture_get_width (paint_tex); | ||||
| @@ -585,8 +306,6 @@ meta_shaped_texture_pick (ClutterActor       *actor, | ||||
|       if (tex_width == 0 || tex_height == 0) /* no contents yet */ | ||||
|         return; | ||||
|  | ||||
|       meta_shaped_texture_ensure_mask (stex); | ||||
|  | ||||
|       cogl_set_source_color4ub (color->red, color->green, color->blue, | ||||
|                                  color->alpha); | ||||
|  | ||||
| @@ -602,19 +321,48 @@ meta_shaped_texture_pick (ClutterActor       *actor, | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_update_area (ClutterX11TexturePixmap *texture, | ||||
| 				 int                      x, | ||||
| 				 int                      y, | ||||
| 				 int                      width, | ||||
| 				 int                      height) | ||||
| meta_shaped_texture_get_preferred_width (ClutterActor *self, | ||||
|                                          gfloat        for_height, | ||||
|                                          gfloat       *min_width_p, | ||||
|                                          gfloat       *natural_width_p) | ||||
| { | ||||
|   MetaShapedTexture *stex = (MetaShapedTexture *) texture; | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   CLUTTER_X11_TEXTURE_PIXMAP_CLASS (meta_shaped_texture_parent_class)->update_area (texture, | ||||
|                                                                                       x, y, width, height); | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (self)); | ||||
|  | ||||
|   meta_texture_tower_update_area (priv->paint_tower, x, y, width, height); | ||||
|   priv = META_SHAPED_TEXTURE (self)->priv; | ||||
|  | ||||
|   if (min_width_p) | ||||
|     *min_width_p = 0; | ||||
|  | ||||
|   if (natural_width_p) | ||||
|     *natural_width_p = priv->tex_width; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_get_preferred_height (ClutterActor *self, | ||||
|                                           gfloat        for_width, | ||||
|                                           gfloat       *min_height_p, | ||||
|                                           gfloat       *natural_height_p) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (self)); | ||||
|  | ||||
|   priv = META_SHAPED_TEXTURE (self)->priv; | ||||
|  | ||||
|   if (min_height_p) | ||||
|     *min_height_p = 0; | ||||
|  | ||||
|   if (natural_height_p) | ||||
|     *natural_height_p = priv->tex_height; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_shaped_texture_get_paint_volume (ClutterActor *self, | ||||
|                                       ClutterPaintVolume *volume) | ||||
| { | ||||
|   return clutter_paint_volume_set_from_allocation (volume, self); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| @@ -639,35 +387,17 @@ meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex, | ||||
|  | ||||
|   if (create_mipmaps != priv->create_mipmaps) | ||||
|     { | ||||
|       CoglHandle base_texture; | ||||
|  | ||||
|       CoglTexture *base_texture; | ||||
|       priv->create_mipmaps = create_mipmaps; | ||||
|  | ||||
|       base_texture = create_mipmaps ? | ||||
| 	clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)) : COGL_INVALID_HANDLE; | ||||
|  | ||||
|         COGL_TEXTURE (priv->texture) : NULL; | ||||
|       meta_texture_tower_set_base_texture (priv->paint_tower, base_texture); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* This is a workaround for deficiencies in the hack tower: | ||||
|  * | ||||
|  * When we call clutter_x11_texture_pixmap_set_pixmap(tp, None), | ||||
|  * ClutterX11TexturePixmap knows that it has to get rid of the old texture, but | ||||
|  * clutter_texture_set_cogl_texture(texture, COGL_INVALID_HANDLE) isn't allowed, so | ||||
|  * it grabs the material for the texture and manually sets the texture in it. This means | ||||
|  * that the "cogl-texture" property isn't notified, so we don't find out about it. | ||||
|  * | ||||
|  * And if we keep the CoglX11TexturePixmap around after the X pixmap is freed, then | ||||
|  * we'll trigger X errors when we actually try to free it. | ||||
|  * | ||||
|  * The only correct thing to do here is to change our code to derive | ||||
|  * from ClutterActor and get rid of the inheritance hack tower.  Once | ||||
|  * we want to depend on Clutter-1.4 (which has CoglTexturePixmapX11), | ||||
|  * that will be very easy to do. | ||||
|  */ | ||||
| void | ||||
| meta_shaped_texture_clear (MetaShapedTexture *stex) | ||||
| meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex, | ||||
|                                       CoglTexture       *mask_texture) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
| @@ -675,73 +405,95 @@ meta_shaped_texture_clear (MetaShapedTexture *stex) | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   meta_texture_tower_set_base_texture (priv->paint_tower, COGL_INVALID_HANDLE); | ||||
|   g_clear_pointer (&priv->mask_texture, cogl_object_unref); | ||||
|  | ||||
|   if (priv->material != COGL_INVALID_HANDLE) | ||||
|     cogl_material_set_layer (priv->material, 0, COGL_INVALID_HANDLE); | ||||
|   if (mask_texture != NULL) | ||||
|     { | ||||
|       priv->mask_texture = mask_texture; | ||||
|       cogl_object_ref (priv->mask_texture); | ||||
|     } | ||||
|  | ||||
|   if (priv->material_unshaped != COGL_INVALID_HANDLE) | ||||
|     cogl_material_set_layer (priv->material_unshaped, 0, COGL_INVALID_HANDLE); | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_shaped_texture_set_shape_region (MetaShapedTexture *stex, | ||||
|                                       cairo_region_t    *region) | ||||
| meta_shaped_texture_update_area (MetaShapedTexture *stex, | ||||
| 				 int                x, | ||||
| 				 int                y, | ||||
| 				 int                width, | ||||
| 				 int                height) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   const cairo_rectangle_int_t clip = { x, y, width, height }; | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->texture == NULL) | ||||
|     return; | ||||
|  | ||||
|   cogl_texture_pixmap_x11_update_area (priv->texture, | ||||
|                                        x, y, width, height); | ||||
|  | ||||
|   meta_texture_tower_update_area (priv->paint_tower, x, y, width, height); | ||||
|  | ||||
|   clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &clip); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_cogl_texture (MetaShapedTexture    *stex, | ||||
|                   CoglTexturePixmapX11 *cogl_tex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   guint width, height; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->shape_region != NULL) | ||||
|   if (priv->texture != NULL) | ||||
|     cogl_object_unref (priv->texture); | ||||
|  | ||||
|   priv->texture = cogl_tex; | ||||
|  | ||||
|   if (priv->pipeline != NULL) | ||||
|     cogl_pipeline_set_layer_texture (priv->pipeline, 0, COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|   if (priv->pipeline_unshaped != NULL) | ||||
|     cogl_pipeline_set_layer_texture (priv->pipeline_unshaped, 0, COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|   if (cogl_tex != NULL) | ||||
|     { | ||||
|       cairo_region_destroy (priv->shape_region); | ||||
|       priv->shape_region = NULL; | ||||
|       width = cogl_texture_get_width (COGL_TEXTURE (cogl_tex)); | ||||
|       height = cogl_texture_get_height (COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|       if (width != priv->tex_width || | ||||
|           height != priv->tex_height) | ||||
|         { | ||||
|           priv->tex_width = width; | ||||
|           priv->tex_height = height; | ||||
|  | ||||
|           clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|         } | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       /* size changed to 0 going to an inavlid texture */ | ||||
|       priv->tex_width = 0; | ||||
|       priv->tex_height = 0; | ||||
|       clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|     } | ||||
|  | ||||
|   if (region != NULL) | ||||
|     { | ||||
|       cairo_region_reference (region); | ||||
|       priv->shape_region = region; | ||||
|     } | ||||
|  | ||||
|   meta_shaped_texture_dirty_mask (stex); | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_get_visible_pixels_region: | ||||
|  * @stex: a #MetaShapedTexture | ||||
|  * | ||||
|  * Return a region enclosing only visible pixels: those with | ||||
|  * alpha values above 0. | ||||
|  * | ||||
|  * Returns: a #cairo_region_t | ||||
|  */ | ||||
| cairo_region_t * | ||||
| meta_shaped_texture_get_visible_pixels_region (MetaShapedTexture *stex) | ||||
| { | ||||
|   g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL); | ||||
|  | ||||
|   meta_shaped_texture_ensure_mask (stex); | ||||
|   return stex->priv->visible_pixels_region; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_set_overlay_path: | ||||
|  * @stex: a #MetaShapedTexture | ||||
|  * @overlay_region: A region containing the parts of the mask to overlay. | ||||
|  *   All rectangles in this region are wiped clear to full transparency, | ||||
|  *   and the overlay path is clipped to this region. | ||||
|  * @overlay_path (transfer full): This path will be painted onto the mask | ||||
|  *   texture with a fully opaque source. Due to the lack of refcounting | ||||
|  *   in #cairo_path_t, ownership of the path is assumed. | ||||
|  * meta_shaped_texture_set_pixmap: | ||||
|  * @stex: The #MetaShapedTexture | ||||
|  * @pixmap: The pixmap you want the stex to assume | ||||
|  */ | ||||
| void | ||||
| meta_shaped_texture_set_overlay_path (MetaShapedTexture *stex, | ||||
|                                       cairo_region_t    *overlay_region, | ||||
|                                       cairo_path_t      *overlay_path) | ||||
| meta_shaped_texture_set_pixmap (MetaShapedTexture *stex, | ||||
|                                 Pixmap             pixmap) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
| @@ -749,33 +501,43 @@ meta_shaped_texture_set_overlay_path (MetaShapedTexture *stex, | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->overlay_region != NULL) | ||||
|   if (priv->pixmap == pixmap) | ||||
|     return; | ||||
|  | ||||
|   priv->pixmap = pixmap; | ||||
|  | ||||
|   if (pixmap != None) | ||||
|     { | ||||
|       cairo_region_destroy (priv->overlay_region); | ||||
|       priv->overlay_region = NULL; | ||||
|       CoglContext *ctx = | ||||
|         clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|       set_cogl_texture (stex, cogl_texture_pixmap_x11_new (ctx, pixmap, FALSE, NULL)); | ||||
|     } | ||||
|   else | ||||
|     set_cogl_texture (stex, NULL); | ||||
|  | ||||
|   if (priv->overlay_path != NULL) | ||||
|     { | ||||
|       cairo_path_destroy (priv->overlay_path); | ||||
|       priv->overlay_path = NULL; | ||||
|     } | ||||
|   if (priv->create_mipmaps) | ||||
|     meta_texture_tower_set_base_texture (priv->paint_tower, | ||||
|                                          COGL_TEXTURE (priv->texture)); | ||||
| } | ||||
|  | ||||
|   cairo_region_reference (overlay_region); | ||||
|   priv->overlay_region = overlay_region; | ||||
|  | ||||
|   /* cairo_path_t does not have refcounting. */ | ||||
|   priv->overlay_path = overlay_path; | ||||
|  | ||||
|   meta_shaped_texture_dirty_mask (stex); | ||||
| /** | ||||
|  * meta_shaped_texture_get_texture: | ||||
|  * @stex: The #MetaShapedTexture | ||||
|  * | ||||
|  * Returns: (transfer none): the unshaped texture | ||||
|  */ | ||||
| CoglTexture * | ||||
| meta_shaped_texture_get_texture (MetaShapedTexture *stex) | ||||
| { | ||||
|   g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL); | ||||
|   return COGL_TEXTURE (stex->priv->texture); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_set_clip_region: | ||||
|  * @frame: a #MetaShapedTexture | ||||
|  * @stex: a #MetaShapedTexture | ||||
|  * @clip_region: (transfer full): the region of the texture that | ||||
|  *   is visible and should be painted. OWNERSHIP IS ASSUMED BY | ||||
|  *   THE FUNCTION (for efficiency to avoid a copy.) | ||||
|  *   is visible and should be painted. | ||||
|  * | ||||
|  * Provides a hint to the texture about what areas of the texture | ||||
|  * are not completely obscured and thus need to be painted. This | ||||
| @@ -801,5 +563,106 @@ meta_shaped_texture_set_clip_region (MetaShapedTexture *stex, | ||||
|       priv->clip_region = NULL; | ||||
|     } | ||||
|  | ||||
|   priv->clip_region = clip_region; | ||||
|   if (clip_region) | ||||
|     priv->clip_region = cairo_region_copy (clip_region); | ||||
|   else | ||||
|     priv->clip_region = NULL; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_get_image: | ||||
|  * @stex: A #MetaShapedTexture | ||||
|  * @clip: A clipping rectangle, to help prevent extra processing. | ||||
|  * In the case that the clipping rectangle is partially or fully | ||||
|  * outside the bounds of the texture, the rectangle will be clipped. | ||||
|  * | ||||
|  * Flattens the two layers of the shaped texture into one ARGB32 | ||||
|  * image by alpha blending the two images, and returns the flattened | ||||
|  * image. | ||||
|  * | ||||
|  * Returns: (transfer full): a new cairo surface to be freed with | ||||
|  * cairo_surface_destroy(). | ||||
|  */ | ||||
| cairo_surface_t * | ||||
| meta_shaped_texture_get_image (MetaShapedTexture     *stex, | ||||
|                                cairo_rectangle_int_t *clip) | ||||
| { | ||||
|   CoglTexture *texture, *mask_texture; | ||||
|   cairo_rectangle_int_t texture_rect = { 0, 0, 0, 0 }; | ||||
|   cairo_surface_t *surface; | ||||
|  | ||||
|   g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL); | ||||
|  | ||||
|   texture = COGL_TEXTURE (stex->priv->texture); | ||||
|  | ||||
|   if (texture == NULL) | ||||
|     return NULL; | ||||
|  | ||||
|   texture_rect.width = cogl_texture_get_width (texture); | ||||
|   texture_rect.height = cogl_texture_get_height (texture); | ||||
|  | ||||
|   if (clip != NULL) | ||||
|     { | ||||
|       /* GdkRectangle is just a typedef of cairo_rectangle_int_t, | ||||
|        * so we can use the gdk_rectangle_* APIs on these. */ | ||||
|       if (!gdk_rectangle_intersect (&texture_rect, clip, clip)) | ||||
|         return NULL; | ||||
|     } | ||||
|  | ||||
|   if (clip != NULL) | ||||
|     texture = cogl_texture_new_from_sub_texture (texture, | ||||
|                                                  clip->x, | ||||
|                                                  clip->y, | ||||
|                                                  clip->width, | ||||
|                                                  clip->height); | ||||
|  | ||||
|   surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, | ||||
|                                         cogl_texture_get_width (texture), | ||||
|                                         cogl_texture_get_height (texture)); | ||||
|  | ||||
|   cogl_texture_get_data (texture, CLUTTER_CAIRO_FORMAT_ARGB32, | ||||
|                          cairo_image_surface_get_stride (surface), | ||||
|                          cairo_image_surface_get_data (surface)); | ||||
|  | ||||
|   cairo_surface_mark_dirty (surface); | ||||
|  | ||||
|   if (clip != NULL) | ||||
|     cogl_object_unref (texture); | ||||
|  | ||||
|   mask_texture = stex->priv->mask_texture; | ||||
|   if (mask_texture != NULL) | ||||
|     { | ||||
|       cairo_t *cr; | ||||
|       cairo_surface_t *mask_surface; | ||||
|  | ||||
|       if (clip != NULL) | ||||
|         mask_texture = cogl_texture_new_from_sub_texture (mask_texture, | ||||
|                                                           clip->x, | ||||
|                                                           clip->y, | ||||
|                                                           clip->width, | ||||
|                                                           clip->height); | ||||
|  | ||||
|       mask_surface = cairo_image_surface_create (CAIRO_FORMAT_A8, | ||||
|                                                  cogl_texture_get_width (mask_texture), | ||||
|                                                  cogl_texture_get_height (mask_texture)); | ||||
|  | ||||
|       cogl_texture_get_data (mask_texture, COGL_PIXEL_FORMAT_A_8, | ||||
|                              cairo_image_surface_get_stride (mask_surface), | ||||
|                              cairo_image_surface_get_data (mask_surface)); | ||||
|  | ||||
|       cairo_surface_mark_dirty (mask_surface); | ||||
|  | ||||
|       cr = cairo_create (surface); | ||||
|       cairo_set_source_surface (cr, mask_surface, 0, 0); | ||||
|       cairo_set_operator (cr, CAIRO_OPERATOR_DEST_IN); | ||||
|       cairo_paint (cr); | ||||
|       cairo_destroy (cr); | ||||
|  | ||||
|       cairo_surface_destroy (mask_surface); | ||||
|  | ||||
|       if (clip != NULL) | ||||
|         cogl_object_unref (mask_texture); | ||||
|     } | ||||
|  | ||||
|   return surface; | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  * | ||||
|  * Authored By Neil Roberts  <neil@linux.intel.com> | ||||
|  * | ||||
|  * Copyright (C) 2011 Intel Corporation | ||||
|  * Copyright (C) 2011, 2012 Intel Corporation | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
| @@ -25,94 +25,74 @@ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| #include "meta-texture-rectangle.h" | ||||
|  | ||||
| #ifdef GL_TEXTURE_RECTANGLE_ARB | ||||
|  | ||||
| static void (* pf_glGetIntegerv) (GLenum pname, GLint *params); | ||||
| static void (* pf_glTexImage2D) (GLenum target, GLint level, | ||||
|                                  GLint internalFormat, | ||||
|                                  GLsizei width, GLsizei height, | ||||
|                                  GLint border, GLenum format, GLenum type, | ||||
|                                  const GLvoid *pixels); | ||||
| static void (* pf_glGenTextures) (GLsizei n, GLuint *textures); | ||||
| static void (* pf_glDeleteTextures) (GLsizei n, const GLuint *texture); | ||||
| static void (* pf_glBindTexture) (GLenum target, GLuint texture); | ||||
|  | ||||
| static void | ||||
| rectangle_texture_destroy_cb (void *user_data) | ||||
| { | ||||
|   GLuint tex = GPOINTER_TO_UINT (user_data); | ||||
|  | ||||
|   pf_glDeleteTextures (1, &tex); | ||||
| } | ||||
|  | ||||
| #endif /* GL_TEXTURE_RECTANGLE_ARB */ | ||||
|  | ||||
| CoglHandle | ||||
| CoglTexture * | ||||
| meta_texture_rectangle_new (unsigned int width, | ||||
|                             unsigned int height, | ||||
|                             CoglTextureFlags flags, | ||||
|                             CoglPixelFormat format, | ||||
|                             GLenum internal_gl_format, | ||||
|                             GLenum internal_format, | ||||
|                             CoglPixelFormat internal_format, | ||||
|                             unsigned int rowstride, | ||||
|                             const guint8 *data) | ||||
|                             const guint8 *data, | ||||
|                             GError **error) | ||||
| { | ||||
|   CoglHandle cogl_tex = COGL_INVALID_HANDLE; | ||||
|   ClutterBackend *backend = | ||||
|     clutter_get_default_backend (); | ||||
|   CoglContext *context = | ||||
|     clutter_backend_get_cogl_context (backend); | ||||
|   CoglTextureRectangle *tex_rect; | ||||
|  | ||||
| #ifdef GL_TEXTURE_RECTANGLE_ARB | ||||
|   tex_rect = cogl_texture_rectangle_new_with_size (context, | ||||
|                                                    width, height, | ||||
|                                                    internal_format, | ||||
|                                                    error); | ||||
|   if (tex_rect == NULL) | ||||
|     return NULL; | ||||
|  | ||||
|   static CoglUserDataKey user_data_key; | ||||
|   GLint old_binding; | ||||
|   GLuint tex; | ||||
|  | ||||
|   if (pf_glGenTextures == NULL) | ||||
|     { | ||||
|       pf_glGetIntegerv = (void *) cogl_get_proc_address ("glGetIntegerv"); | ||||
|       pf_glTexImage2D = (void *) cogl_get_proc_address ("glTexImage2D"); | ||||
|       pf_glGenTextures = (void *) cogl_get_proc_address ("glGenTextures"); | ||||
|       pf_glDeleteTextures = (void *) cogl_get_proc_address ("glDeleteTextures"); | ||||
|       pf_glBindTexture = (void *) cogl_get_proc_address ("glBindTexture"); | ||||
|     } | ||||
|  | ||||
|   pf_glGenTextures (1, &tex); | ||||
|   pf_glGetIntegerv (GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_binding); | ||||
|   pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex); | ||||
|   pf_glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, | ||||
|                    internal_gl_format, width, height, | ||||
|                    0, internal_gl_format, | ||||
|                    GL_UNSIGNED_BYTE, NULL); | ||||
|   pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, old_binding); | ||||
|  | ||||
|   cogl_tex = cogl_texture_new_from_foreign (tex, | ||||
|                                             GL_TEXTURE_RECTANGLE_ARB, | ||||
|                                             width, height, | ||||
|                                             0, 0, /* no waste */ | ||||
|                                             internal_format); | ||||
|  | ||||
|   /* Cogl won't destroy the GL texture when a foreign texture is used | ||||
|      so we need to destroy it manually. We can set a destroy | ||||
|      notification callback to do this transparently */ | ||||
|   cogl_object_set_user_data (cogl_tex, | ||||
|                              &user_data_key, | ||||
|                              GUINT_TO_POINTER (tex), | ||||
|                              rectangle_texture_destroy_cb); | ||||
|  | ||||
|   /* Use cogl_texture_set_region instead of uploading the data | ||||
|      directly with GL calls so that we can let Cogl deal with setting | ||||
|      the pixel store parameters and handling format conversion */ | ||||
|   if (data) | ||||
|     cogl_texture_set_region (cogl_tex, | ||||
|                              0, 0, /* src x/y */ | ||||
|                              0, 0, /* dst x/y */ | ||||
|                              width, height, /* dst width/height */ | ||||
|                              width, height, /* src width/height */ | ||||
|     cogl_texture_set_region (COGL_TEXTURE (tex_rect), | ||||
|                              0, 0, /* src_x/y */ | ||||
|                              0, 0, /* dst_x/y */ | ||||
|                              width, height, /* dst_width/height */ | ||||
|                              width, height, /* width/height */ | ||||
|                              format, | ||||
|                              rowstride, | ||||
|                              data); | ||||
|  | ||||
| #endif /* GL_TEXTURE_RECTANGLE_ARB */ | ||||
|  | ||||
|   return cogl_tex; | ||||
|   return COGL_TEXTURE (tex_rect); | ||||
| } | ||||
|  | ||||
| static void | ||||
| texture_rectangle_check_cb (CoglTexture *sub_texture, | ||||
|                             const float *sub_texture_coords, | ||||
|                             const float *meta_coords, | ||||
|                             void *user_data) | ||||
| { | ||||
|   gboolean *result = user_data; | ||||
|  | ||||
|   if (cogl_is_texture_rectangle (sub_texture)) | ||||
|     *result = TRUE; | ||||
| } | ||||
|  | ||||
| /* Determines if the given texture is using a rectangle texture as its | ||||
|  * primitive texture type. Eventually this function could be replaced | ||||
|  * with cogl_texture_get_type if Cogl makes that public. | ||||
|  * | ||||
|  * http://git.gnome.org/browse/cogl/commit/?h=8012eee31 | ||||
|  */ | ||||
| gboolean | ||||
| meta_texture_rectangle_check (CoglTexture *texture) | ||||
| { | ||||
|   gboolean result = FALSE; | ||||
|  | ||||
|   cogl_meta_texture_foreach_in_region (COGL_META_TEXTURE (texture), | ||||
|                                        0.0f, 0.0f, /* tx_1 / ty_1 */ | ||||
|                                        1.0f, 1.0f, /* tx_2 / ty_2 */ | ||||
|                                        COGL_PIPELINE_WRAP_MODE_REPEAT, | ||||
|                                        COGL_PIPELINE_WRAP_MODE_REPEAT, | ||||
|                                        texture_rectangle_check_cb, | ||||
|                                        &result); | ||||
|  | ||||
|   return result; | ||||
| } | ||||
|   | ||||
| @@ -30,15 +30,17 @@ | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| CoglHandle | ||||
| CoglTexture * | ||||
| meta_texture_rectangle_new (unsigned int width, | ||||
|                             unsigned int height, | ||||
|                             CoglTextureFlags flags, | ||||
|                             CoglPixelFormat format, | ||||
|                             GLenum internal_gl_format, | ||||
|                             GLenum internal_format, | ||||
|                             CoglPixelFormat internal_format, | ||||
|                             unsigned int rowstride, | ||||
|                             const guint8 *data); | ||||
|                             const guint8 *data, | ||||
|                             GError **error); | ||||
|  | ||||
| gboolean | ||||
| meta_texture_rectangle_check (CoglTexture *texture); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -59,8 +59,8 @@ typedef struct | ||||
| struct _MetaTextureTower | ||||
| { | ||||
|   int n_levels; | ||||
|   CoglHandle textures[MAX_TEXTURE_LEVELS]; | ||||
|   CoglHandle fbos[MAX_TEXTURE_LEVELS]; | ||||
|   CoglTexture *textures[MAX_TEXTURE_LEVELS]; | ||||
|   CoglOffscreen *fbos[MAX_TEXTURE_LEVELS]; | ||||
|   Box invalid[MAX_TEXTURE_LEVELS]; | ||||
| }; | ||||
|  | ||||
| @@ -93,23 +93,11 @@ meta_texture_tower_free (MetaTextureTower *tower) | ||||
| { | ||||
|   g_return_if_fail (tower != NULL); | ||||
|  | ||||
|   meta_texture_tower_set_base_texture (tower, COGL_INVALID_HANDLE); | ||||
|   meta_texture_tower_set_base_texture (tower, NULL); | ||||
|  | ||||
|   g_slice_free (MetaTextureTower, tower); | ||||
| } | ||||
|  | ||||
| #ifdef GL_TEXTURE_RECTANGLE_ARB | ||||
| static gboolean | ||||
| texture_is_rectangle (CoglHandle texture) | ||||
| { | ||||
|   GLuint gl_tex; | ||||
|   GLenum gl_target; | ||||
|  | ||||
|   cogl_texture_get_gl_texture (texture, &gl_tex, &gl_target); | ||||
|   return gl_target == GL_TEXTURE_RECTANGLE_ARB; | ||||
| } | ||||
| #endif /* GL_TEXTURE_RECTANGLE_ARB */ | ||||
|  | ||||
| /** | ||||
|  * meta_texture_tower_set_base_texture: | ||||
|  * @tower: a #MetaTextureTower | ||||
| @@ -122,7 +110,7 @@ texture_is_rectangle (CoglHandle texture) | ||||
|  */ | ||||
| void | ||||
| meta_texture_tower_set_base_texture (MetaTextureTower *tower, | ||||
|                                      CoglHandle        texture) | ||||
|                                      CoglTexture      *texture) | ||||
| { | ||||
|   int i; | ||||
|  | ||||
| @@ -131,33 +119,33 @@ meta_texture_tower_set_base_texture (MetaTextureTower *tower, | ||||
|   if (texture == tower->textures[0]) | ||||
|     return; | ||||
|  | ||||
|   if (tower->textures[0] != COGL_INVALID_HANDLE) | ||||
|   if (tower->textures[0] != NULL) | ||||
|     { | ||||
|       for (i = 1; i < tower->n_levels; i++) | ||||
|         { | ||||
|           if (tower->textures[i] != COGL_INVALID_HANDLE) | ||||
|           if (tower->textures[i] != NULL) | ||||
|             { | ||||
|               cogl_handle_unref (tower->textures[i]); | ||||
|               tower->textures[i] = COGL_INVALID_HANDLE; | ||||
|               cogl_object_unref (tower->textures[i]); | ||||
|               tower->textures[i] = NULL; | ||||
|             } | ||||
|  | ||||
|           if (tower->fbos[i] != COGL_INVALID_HANDLE) | ||||
|           if (tower->fbos[i] != NULL) | ||||
|             { | ||||
|               cogl_handle_unref (tower->fbos[i]); | ||||
|               tower->fbos[i] = COGL_INVALID_HANDLE; | ||||
|               cogl_object_unref (tower->fbos[i]); | ||||
|               tower->fbos[i] = NULL; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|       cogl_handle_unref (tower->textures[0]); | ||||
|       cogl_object_unref (tower->textures[0]); | ||||
|     } | ||||
|  | ||||
|   tower->textures[0] = texture; | ||||
|  | ||||
|   if (tower->textures[0] != COGL_INVALID_HANDLE) | ||||
|   if (tower->textures[0] != NULL) | ||||
|     { | ||||
|       int width, height; | ||||
|  | ||||
|       cogl_handle_ref (tower->textures[0]); | ||||
|       cogl_object_ref (tower->textures[0]); | ||||
|  | ||||
|       width = cogl_texture_get_width (tower->textures[0]); | ||||
|       height = cogl_texture_get_height (tower->textures[0]); | ||||
| @@ -198,7 +186,7 @@ meta_texture_tower_update_area (MetaTextureTower *tower, | ||||
|  | ||||
|   g_return_if_fail (tower != NULL); | ||||
|  | ||||
|   if (tower->textures[0] == COGL_INVALID_HANDLE) | ||||
|   if (tower->textures[0] == NULL) | ||||
|     return; | ||||
|  | ||||
|   texture_width = cogl_texture_get_width (tower->textures[0]); | ||||
| @@ -354,13 +342,11 @@ get_paint_level (int width, int height) | ||||
|     return (int)(0.5 + lambda); | ||||
| } | ||||
|  | ||||
| #ifdef GL_TEXTURE_RECTANGLE_ARB | ||||
| static gboolean | ||||
| is_power_of_two (int x) | ||||
| { | ||||
|   return (x & (x - 1)) == 0; | ||||
| } | ||||
| #endif /* GL_TEXTURE_RECTANGLE_ARB */ | ||||
|  | ||||
| static void | ||||
| texture_tower_create_texture (MetaTextureTower *tower, | ||||
| @@ -368,25 +354,23 @@ texture_tower_create_texture (MetaTextureTower *tower, | ||||
|                               int               width, | ||||
|                               int               height) | ||||
| { | ||||
| #ifdef GL_TEXTURE_RECTANGLE_ARB | ||||
|   if ((!is_power_of_two (width) || !is_power_of_two (height)) && | ||||
|       texture_is_rectangle (tower->textures[level - 1])) | ||||
|       meta_texture_rectangle_check (tower->textures[level - 1])) | ||||
|     { | ||||
|       tower->textures[level] = | ||||
|         meta_texture_rectangle_new (width, height, | ||||
|                                     0, /* flags */ | ||||
|                                     /* data format */ | ||||
|                                     TEXTURE_FORMAT, | ||||
|                                     /* internal GL format */ | ||||
|                                     GL_RGBA, | ||||
|                                     /* internal cogl format */ | ||||
|                                     TEXTURE_FORMAT, | ||||
|                                     /* rowstride */ | ||||
|                                     width * 4, | ||||
|                                     /* data */ | ||||
|                                     NULL, | ||||
|                                     /* error */ | ||||
|                                     NULL); | ||||
|     } | ||||
|   else | ||||
| #endif /* GL_TEXTURE_RECTANGLE_ARB */ | ||||
|     { | ||||
|       tower->textures[level] = cogl_texture_new_with_size (width, height, | ||||
|                                                            COGL_TEXTURE_NO_AUTO_MIPMAP, | ||||
| @@ -403,22 +387,22 @@ static gboolean | ||||
| texture_tower_revalidate_fbo (MetaTextureTower *tower, | ||||
|                               int               level) | ||||
| { | ||||
|   CoglHandle source_texture = tower->textures[level - 1]; | ||||
|   CoglTexture *source_texture = tower->textures[level - 1]; | ||||
|   int source_texture_width = cogl_texture_get_width (source_texture); | ||||
|   int source_texture_height = cogl_texture_get_height (source_texture); | ||||
|   CoglHandle dest_texture = tower->textures[level]; | ||||
|   CoglTexture *dest_texture = tower->textures[level]; | ||||
|   int dest_texture_width = cogl_texture_get_width (dest_texture); | ||||
|   int dest_texture_height = cogl_texture_get_height (dest_texture); | ||||
|   Box *invalid = &tower->invalid[level]; | ||||
|   CoglMatrix modelview; | ||||
|  | ||||
|   if (tower->fbos[level] == COGL_INVALID_HANDLE) | ||||
|   if (tower->fbos[level] == NULL) | ||||
|     tower->fbos[level] = cogl_offscreen_new_to_texture (dest_texture); | ||||
|  | ||||
|   if (tower->fbos[level] == COGL_INVALID_HANDLE) | ||||
|   if (tower->fbos[level] == NULL) | ||||
|     return FALSE; | ||||
|  | ||||
|   cogl_push_framebuffer (tower->fbos[level]); | ||||
|   cogl_push_framebuffer (COGL_FRAMEBUFFER (tower->fbos[level])); | ||||
|  | ||||
|   cogl_ortho (0, dest_texture_width, dest_texture_height, 0, -1., 1.); | ||||
|  | ||||
| @@ -476,12 +460,12 @@ static void | ||||
| texture_tower_revalidate_client (MetaTextureTower *tower, | ||||
|                                  int               level) | ||||
| { | ||||
|   CoglHandle source_texture = tower->textures[level - 1]; | ||||
|   CoglTexture *source_texture = tower->textures[level - 1]; | ||||
|   int source_texture_width = cogl_texture_get_width (source_texture); | ||||
|   int source_texture_height = cogl_texture_get_height (source_texture); | ||||
|   guint source_rowstride; | ||||
|   guchar *source_data; | ||||
|   CoglHandle dest_texture = tower->textures[level]; | ||||
|   CoglTexture *dest_texture = tower->textures[level]; | ||||
|   int dest_texture_width = cogl_texture_get_width (dest_texture); | ||||
|   int dest_texture_height = cogl_texture_get_height (dest_texture); | ||||
|   int dest_x = tower->invalid[level].x1; | ||||
| @@ -562,7 +546,7 @@ texture_tower_revalidate_client (MetaTextureTower *tower, | ||||
|                            4 * dest_width, | ||||
|                            dest_data); | ||||
|  | ||||
|   if (dest_height < source_texture_height) | ||||
|   if (dest_texture_height < source_texture_height) | ||||
|     { | ||||
|       g_free (source_tmp1); | ||||
|       g_free (source_tmp2); | ||||
| @@ -591,28 +575,28 @@ texture_tower_revalidate (MetaTextureTower *tower, | ||||
|  * rectangle (0, 0, 200, 200). | ||||
|  * | ||||
|  * Return value: the COGL texture handle to use for painting, or | ||||
|  *  %COGL_INVALID_HANDLE if no base texture has yet been set. | ||||
|  *  %NULL if no base texture has yet been set. | ||||
|  */ | ||||
| CoglHandle | ||||
| CoglTexture * | ||||
| meta_texture_tower_get_paint_texture (MetaTextureTower *tower) | ||||
| { | ||||
|   int texture_width, texture_height; | ||||
|   int level; | ||||
|  | ||||
|   g_return_val_if_fail (tower != NULL, COGL_INVALID_HANDLE); | ||||
|   g_return_val_if_fail (tower != NULL, NULL); | ||||
|  | ||||
|   if (tower->textures[0] == COGL_INVALID_HANDLE) | ||||
|     return COGL_INVALID_HANDLE; | ||||
|   if (tower->textures[0] == NULL) | ||||
|     return NULL; | ||||
|  | ||||
|   texture_width = cogl_texture_get_width (tower->textures[0]); | ||||
|   texture_height = cogl_texture_get_height (tower->textures[0]); | ||||
|  | ||||
|   level = get_paint_level(texture_width, texture_height); | ||||
|   if (level < 0) /* singular paint matrix, scaled to nothing */ | ||||
|     return COGL_INVALID_HANDLE; | ||||
|     return NULL; | ||||
|   level = MIN (level, tower->n_levels - 1); | ||||
|  | ||||
|   if (tower->textures[level] == COGL_INVALID_HANDLE || | ||||
|   if (tower->textures[level] == NULL || | ||||
|       (tower->invalid[level].x2 != tower->invalid[level].x1 && | ||||
|        tower->invalid[level].y2 != tower->invalid[level].y1)) | ||||
|     { | ||||
| @@ -624,7 +608,7 @@ meta_texture_tower_get_paint_texture (MetaTextureTower *tower) | ||||
|          texture_width = MAX (1, texture_width / 2); | ||||
|          texture_height = MAX (1, texture_height / 2); | ||||
|  | ||||
|          if (tower->textures[i] == COGL_INVALID_HANDLE) | ||||
|          if (tower->textures[i] == NULL) | ||||
|            texture_tower_create_texture (tower, i, texture_width, texture_height); | ||||
|        } | ||||
|  | ||||
|   | ||||
| @@ -56,13 +56,13 @@ typedef struct _MetaTextureTower MetaTextureTower; | ||||
| MetaTextureTower *meta_texture_tower_new               (void); | ||||
| void              meta_texture_tower_free              (MetaTextureTower *tower); | ||||
| void              meta_texture_tower_set_base_texture  (MetaTextureTower *tower, | ||||
|                                                         CoglHandle        texture); | ||||
|                                                         CoglTexture      *texture); | ||||
| void              meta_texture_tower_update_area       (MetaTextureTower *tower, | ||||
|                                                         int               x, | ||||
|                                                         int               y, | ||||
|                                                         int               width, | ||||
|                                                         int               height); | ||||
| CoglHandle        meta_texture_tower_get_paint_texture (MetaTextureTower *tower); | ||||
| CoglTexture      *meta_texture_tower_get_paint_texture (MetaTextureTower *tower); | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user