Compare commits
	
		
			750 Commits
		
	
	
		
			3.7.92
			...
			3.11.91-wa
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 54df7934ea | ||
|   | 9052efb0d9 | ||
|   | b346f98eb0 | ||
|   | 365af53797 | ||
|   | bee59ec0e1 | ||
|   | 91384a32b4 | ||
|   | 72bd5fb814 | ||
|   | 46af3ef9f6 | ||
|   | d417c615d5 | ||
|   | 46cbd0bf48 | ||
|   | f3b6fead4d | ||
|   | 80de8ec643 | ||
|   | 4f7e2a9f3f | ||
|   | 701e06d55d | ||
|   | 94f39a493f | ||
|   | ddc171220a | ||
|   | 0313b38dd6 | ||
|   | d41fba6558 | ||
|   | 770b58b367 | ||
|   | 77838c2ca3 | ||
|   | e56cbfbd0f | ||
|   | a27fb19473 | ||
|   | 674bcef6da | ||
|   | 86c1c30245 | ||
|   | 283546b379 | ||
|   | 98e3e5e50f | ||
|   | b6a0d4d368 | ||
|   | 28859c604f | ||
|   | 9e51d98f4a | ||
|   | 268a4c92ba | ||
|   | 71367e14d5 | ||
|   | 5c99eae8a9 | ||
|   | 89aa5df711 | ||
|   | b9a5d710b7 | ||
|   | 65dd54a4db | ||
|   | b00fa70d91 | ||
|   | 360d423faa | ||
|   | 394b44a2c2 | ||
|   | ed6821a819 | ||
|   | 23b0f7be43 | ||
|   | 7f195aec7a | ||
|   | da13e3d237 | ||
|   | 75184d4c55 | ||
|   | eb75306f8a | ||
|   | 98c4b82907 | ||
|   | 640102c03b | ||
|   | c0d791cd6e | ||
|   | 41d5e69de5 | ||
|   | 2dc7371944 | ||
|   | ec2c3e1438 | ||
|   | c5c3806a04 | ||
|   | ac0c7df4a3 | ||
|   | d85845426c | ||
|   | 060e60f2a0 | ||
|   | 26cf75d5a4 | ||
|   | 9f5087e97d | ||
|   | 45624f2edf | ||
|   | 153f843ea6 | ||
|   | f0cd9b0687 | ||
|   | 1783bf20ec | ||
|   | 9b24ae2033 | ||
|   | 0be4622e14 | ||
|   | bcd5446cdc | ||
|   | 04b5232960 | ||
|   | f860df4b2d | ||
|   | ff8c4b1bcf | ||
|   | 337c69e223 | ||
|   | 14841475b5 | ||
|   | 7283fb320f | ||
|   | 020cfa7283 | ||
|   | 83aca0b53d | ||
|   | 0b055fae2e | ||
|   | bc79259398 | ||
|   | 7ebf5aa69a | ||
|   | 7499621ecb | ||
|   | 4de3f7ca29 | ||
|   | 17462c21e8 | ||
|   | c964ef4e01 | ||
|   | 0dccc440b6 | ||
|   | 48f7232492 | ||
|   | ff5867e4d3 | ||
|   | a5d950f453 | ||
|   | 7615d17293 | ||
|   | 374e30043b | ||
|   | f771bb88d6 | ||
|   | 7ef8d21e48 | ||
|   | c251eb8ec0 | ||
|   | 1e6b3faa83 | ||
|   | e62fe956fd | ||
|   | 24c5290d7f | ||
|   | 00c8d3c897 | ||
|   | cc13f8f65e | ||
|   | 47f4c9db7b | ||
|   | 4c621cc30f | ||
|   | 756a412436 | ||
|   | be16c2fe71 | ||
|   | a364c2a96b | ||
|   | 414259a7f8 | ||
|   | 283a81eac0 | ||
|   | 2a145262c7 | ||
|   | 57728b4322 | ||
|   | ef24fb6296 | ||
|   | 86f057a712 | ||
|   | dcd628d289 | ||
|   | 6038877c4c | ||
|   | 4e6321c239 | ||
|   | 304a525744 | ||
|   | f26de405dd | ||
|   | ed18580118 | ||
|   | b65649186d | ||
|   | 515dc08a97 | ||
|   | 2e7a56a28f | ||
|   | c485637a61 | ||
|   | f9f2a82e18 | ||
|   | 2f4563132a | ||
|   | e3a0f2c546 | ||
|   | d39baeb8ad | ||
|   | f27f6aab78 | ||
|   | a66060e21a | ||
|   | 11aa3c030b | ||
|   | bd1bec5617 | ||
|   | d9659d4b36 | ||
|   | d043d9943b | ||
|   | a0ef7c7142 | ||
|   | 4efe4483fb | ||
|   | aec3edb1cc | ||
|   | 0c5a6ad775 | ||
|   | 2be5401b1e | ||
|   | f16e9b2ee7 | ||
|   | 06380938d4 | ||
|   | 87b20d7f2a | ||
|   | 593db0baee | ||
|   | 6b66553493 | ||
|   | ddaae9c923 | ||
|   | 0c7a7d7527 | ||
|   | 6561b53346 | ||
|   | def5e86673 | ||
|   | 0c213c8fee | ||
|   | 912a0abd26 | ||
|   | d694260ad2 | ||
|   | 8566566451 | ||
|   | 0ce64e46e8 | ||
|   | a8336669a3 | ||
|   | f6db756326 | ||
|   | 27ab516f41 | ||
|   | 9542b464bf | ||
|   | 1ebaaa1950 | ||
|   | 71efbf0330 | ||
|   | a6539463be | ||
|   | b8e096db82 | ||
|   | 3e98ffaf99 | ||
|   | 0a9754f305 | ||
|   | 965a784c8a | ||
|   | 2db9f55669 | ||
|   | 3e73babaf7 | ||
|   | 66c4555dc7 | ||
|   | 183ad75603 | ||
|   | 66fc32ee14 | ||
|   | d6396cf2c4 | ||
|   | c9b7104117 | ||
|   | 6bf1a66b7c | ||
|   | 7e7b671b8e | ||
|   | e04a55d1a2 | ||
|   | 8905bd2280 | ||
|   | b09e1399c0 | ||
|   | 59c8b949ad | ||
|   | 6dbb3fddce | ||
|   | f166240225 | ||
|   | 91b789c707 | ||
|   | 14db280fab | ||
|   | f7097e6f66 | ||
|   | ff89f1e271 | ||
|   | 6a8a4bfdcd | ||
|   | cd35982d4e | ||
|   | 2f6f0f252c | ||
|   | 13651949ed | ||
|   | fdeb72224c | ||
|   | 92e36e7076 | ||
|   | d74796ee80 | ||
|   | 3e35cac67a | ||
|   | 1f7a6bf845 | ||
|   | 365442c1ff | ||
|   | c8d185fc74 | ||
|   | 9567fa9c6a | ||
|   | 7a8de0c0af | ||
|   | 10fead9ba1 | ||
|   | d5d5c2167a | ||
|   | b9755ea725 | ||
|   | 39fee9f5a2 | ||
|   | d6282716b2 | ||
|   | 60d9bee3bf | ||
|   | a09fa3b0e4 | ||
|   | 9edff6f250 | ||
|   | 7d3012fd67 | ||
|   | 225e20a898 | ||
|   | 1a62ac9276 | ||
|   | 45cb151443 | ||
|   | 55b18f9671 | ||
|   | 4f4b1bfc37 | ||
|   | 9348c9bd4b | ||
|   | 16de7f66fb | ||
|   | 799c27484d | ||
|   | c3b0faec82 | ||
|   | 9c876722a0 | ||
|   | 96fc93d744 | ||
|   | 20545941fa | ||
|   | 59f79e8294 | ||
|   | ac32b9ef95 | ||
|   | ba484be754 | ||
|   | a318198ab4 | ||
|   | e6391c2896 | ||
|   | 7ea537fad7 | ||
|   | 03146c2967 | ||
|   | 0a81314337 | ||
|   | fa7a5782c6 | ||
|   | e3b64912b6 | ||
|   | a0fe392665 | ||
|   | 0e5f365d55 | ||
|   | bfc906cbc4 | ||
|   | 8e6f8087e8 | ||
|   | 56207ddb6a | ||
|   | 8cb9cfb7b8 | ||
|   | be698b597b | ||
|   | 1d61a0f9b5 | ||
|   | 788bd59857 | ||
|   | 2391606cc5 | ||
|   | 7155d7e043 | ||
|   | 419dfd333a | ||
|   | b4535f2622 | ||
|   | 9b21346427 | ||
|   | 7b15d21e40 | ||
|   | 7b597b8c62 | ||
|   | 7a4adce44f | ||
|   | a5f0db5ecb | ||
|   | 577624adef | ||
|   | af46ef3b96 | ||
|   | 39d26be941 | ||
|   | 7bfc9109f7 | ||
|   | becbad56ef | ||
|   | 384a34c27d | ||
|   | 002c5b8f87 | ||
|   | 1d3dbea20c | ||
|   | ebe6e3180e | ||
|   | a3de799939 | ||
|   | 0caf7381bb | ||
|   | a42305edab | ||
|   | 732c059235 | ||
|   | ef2b6e7d00 | ||
|   | 9c1b972ca1 | ||
|   | cb33e1942a | ||
|   | 7009d1e470 | ||
|   | c54a19825b | ||
|   | 8131f34eb6 | ||
|   | f29241d90e | ||
|   | bad48ea815 | ||
|   | 66af41f4a9 | ||
|   | e30be380dd | ||
|   | 65f2e29375 | ||
|   | 98dbba1e17 | ||
|   | 422648e2eb | ||
|   | f0fa4d831a | ||
|   | 1b600f5867 | ||
|   | fd8cc9b7a8 | ||
|   | ca5b5e6bc4 | ||
|   | ee683ff187 | ||
|   | 57602adfe7 | ||
|   | 1481836ed6 | ||
|   | 309f78ff52 | ||
|   | 6436459381 | ||
|   | 65b39212d5 | ||
|   | 283649b8d7 | ||
|   | fa65c380db | ||
|   | 58b39233f5 | ||
|   | 82066e02c5 | ||
|   | c36aa5e696 | ||
|   | 29197d40c6 | ||
|   | 8d5ab6b5b3 | ||
|   | a796938b39 | ||
|   | 3813113f1a | ||
|   | 1be117e430 | ||
|   | 622c7a021b | ||
|   | 4d2d2f285b | ||
|   | 0924c7d61b | ||
|   | 2746608eb2 | ||
|   | fe26cb5989 | ||
|   | 602307e694 | ||
|   | b2c18c4a78 | ||
|   | 1e211722c7 | ||
|   | 461f74ef18 | ||
|   | 3f022ca963 | ||
|   | 20e92c5a72 | ||
|   | 0850da44d7 | ||
|   | 37ba264190 | ||
|   | 6c12c928df | ||
|   | 9c5733caf0 | ||
|   | 21d8b8310a | ||
|   | c46af91d54 | ||
|   | d44574f738 | ||
|   | a9424255a5 | ||
|   | 5089a63d76 | ||
|   | f9a2c64460 | ||
|   | 7841042a85 | ||
|   | ea1b8cdc22 | ||
|   | 52b48cfbef | ||
|   | 644f3e1275 | ||
|   | 304005e04f | ||
|   | 025ab35af7 | ||
|   | a27744503b | ||
|   | 1011331caf | ||
|   | 0ccef81789 | ||
|   | 4780f74a40 | ||
|   | 57866fb267 | ||
|   | d3bc7570d0 | ||
|   | 74e43a4702 | ||
|   | 0764b2058a | ||
|   | 7a787d7946 | ||
|   | eec0f5df47 | ||
|   | ba3968a822 | ||
|   | 762fa0e116 | ||
|   | 0be57b621b | ||
|   | 7d88b3593b | ||
|   | 858db7081a | ||
|   | 5af7f619c8 | ||
|   | e5e35e5a7f | ||
|   | 6d639ac528 | ||
|   | aa3643cdde | ||
|   | 8a3501ffe1 | ||
|   | 5ea443eb4b | ||
|   | a37a8c6497 | ||
|   | ebf6862a10 | ||
|   | 6c0e16c482 | ||
|   | 40b1e7312d | ||
|   | 1c0e6f26e2 | ||
|   | f4fc498e65 | ||
|   | a8632c2546 | ||
|   | 600a0f836f | ||
|   | 0ac142d39e | ||
|   | abd368be00 | ||
|   | a8ac2cc275 | ||
|   | 2f14b5cc3f | ||
|   | 2930612e64 | ||
|   | 2952d3671d | ||
|   | 1b5ace8256 | ||
|   | 2ebecc5370 | ||
|   | 02144d17e9 | ||
|   | 71496c8909 | ||
|   | 594b15abf1 | ||
|   | bbe3641844 | ||
|   | 0cc5cf940b | ||
|   | 153d8efcf5 | ||
|   | be744775c1 | ||
|   | 5959457c73 | ||
|   | 0824eb7c96 | ||
|   | d945501be6 | ||
|   | ca342c4573 | ||
|   | 4326d0bf3a | ||
|   | a6ebc70170 | ||
|   | 3025cb7c48 | ||
|   | 17f48baf3a | ||
|   | 333661a9d8 | ||
|   | b9da43b753 | ||
|   | 097ee776c7 | ||
|   | a4a8f1f863 | ||
|   | f36a627330 | ||
|   | a1087c3f30 | ||
|   | aad275b9a2 | ||
|   | f0397eab94 | ||
|   | 392e224831 | ||
|   | 6867d44573 | ||
|   | a841fff2ac | ||
|   | 26aa10a974 | ||
|   | f6144082b1 | ||
|   | 957513242c | ||
|   | 17fd25e216 | ||
|   | e91268a250 | ||
|   | 82cb4e8267 | ||
|   | 68eb87cc58 | ||
|   | f3e52d5b18 | ||
|   | 2b2b2d3191 | ||
|   | 9461c612de | ||
|   | f0280a8868 | ||
|   | c749f7b6fb | ||
|   | 74462133ca | ||
|   | 7c45d6594c | ||
|   | ea916b6c49 | ||
|   | a02d734243 | ||
|   | 735b736110 | ||
|   | bbbb9ac53c | ||
|   | 8dd97b4998 | ||
|   | 73a9082062 | ||
|   | 4091f5493d | ||
|   | d96b053c9d | ||
|   | 1f569bef76 | ||
|   | 1a88176cc0 | ||
|   | 662c9729bc | ||
|   | 56a0dd6b2c | ||
|   | 9dc6028b3d | ||
|   | 932e913d88 | ||
|   | b72315e27a | ||
|   | 3c7cd1f38c | ||
|   | 1946c548bf | ||
|   | cf181fe109 | ||
|   | 63b9110f93 | ||
|   | ae44bff0b1 | ||
|   | 23ba3e527f | ||
|   | 08df9bf559 | ||
|   | 648639fffe | ||
|   | 6cc014a941 | ||
|   | b7b95123ed | ||
|   | 153463790a | ||
|   | 875bbec949 | ||
|   | 666e5f1f98 | ||
|   | e6790038dd | ||
|   | e86c53230f | ||
|   | 4ea4658abf | ||
|   | 58f6ab0a27 | ||
|   | 9c0cc664d1 | ||
|   | 84d26e31f1 | ||
|   | 64a848fcb7 | ||
|   | 429583ae8b | ||
|   | 93ae868987 | ||
|   | 72a900787f | ||
|   | 7186841db0 | ||
|   | ab080e3e6b | ||
|   | ad84aef766 | ||
|   | 7908eca579 | ||
|   | 237d990dea | ||
|   | 78fcfec5c1 | ||
|   | 1bd3a162f8 | ||
|   | 918cfdcbda | ||
|   | cd76313297 | ||
|   | dc8231c2cf | ||
|   | 4d01eb3a23 | ||
|   | 35f47b211d | ||
|   | 77046edf21 | ||
|   | 488df061c7 | ||
|   | 21d511e50f | ||
|   | 15e83f0c2f | ||
|   | a23830fd13 | ||
|   | c8bf8c17be | ||
|   | d82e24981b | ||
|   | 01b8ffac5d | ||
|   | 1fa56bd7e0 | ||
|   | c3f28b9cdb | ||
|   | dc4e1d4cd1 | ||
|   | d69553e8f5 | ||
|   | 0ead0d945a | ||
|   | c24d9bf142 | ||
|   | a6bf340ff8 | ||
|   | 35ef7c95b2 | ||
|   | 348f3007d9 | ||
|   | 52e2a1226e | ||
|   | 58622c0515 | ||
|   | cb5e1e2776 | ||
|   | e965cf32d4 | ||
|   | ce5e0b20b5 | ||
|   | 90854a0f80 | ||
|   | 2d9dc143fc | ||
|   | 1e52d2aa9c | ||
|   | 2734c8547f | ||
|   | cc0b093f7a | ||
|   | d25275fa8d | ||
|   | 389e04c715 | ||
|   | 24074a81d0 | ||
|   | c0e7f6d9bf | ||
|   | 9a13b857f4 | ||
|   | 776a86a65f | ||
|   | 76e2455d1b | ||
|   | 81d9797544 | ||
|   | 12d6c70000 | ||
|   | a7eaf43e18 | ||
|   | 514fec7275 | ||
|   | 42a5f4f479 | ||
|   | 6c1feedbdf | ||
|   | 2d21fbbd35 | ||
|   | 7baf687499 | ||
|   | a3e44d13d1 | ||
|   | 65db8efbe8 | ||
|   | e48a5cd5f2 | ||
|   | 698bb24848 | ||
|   | 67fff237e6 | ||
|   | b9247b4b2f | ||
|   | 0394b4a82b | ||
|   | ff7c85c599 | ||
|   | c316ad17a4 | ||
|   | fc108d5052 | ||
|   | 8c0d38a1a1 | ||
|   | 2f9c6c4146 | ||
|   | 72ca2b218d | ||
|   | 7360aece74 | ||
|   | b5f3238f6f | ||
|   | 227fb56103 | ||
|   | 5ae52473c9 | ||
|   | 7b537d6b8f | ||
|   | 4494888b82 | ||
|   | 004ee2d3b5 | ||
|   | 168ea64a45 | ||
|   | 73ee491281 | ||
|   | 95a9655412 | ||
|   | 72b6699efb | ||
|   | 3e341e83d9 | ||
|   | 5b3340e585 | ||
|   | 6f4f611ba8 | ||
|   | 450afbaf51 | ||
|   | 28708e4317 | ||
|   | 9f64f2cf4f | ||
|   | 2b1eb206d3 | ||
|   | a6dc454c49 | ||
|   | c2bf44fa19 | ||
|   | 2d67b01c3a | ||
|   | 6014d31dea | ||
|   | bf78f067a2 | ||
|   | ddb9929dad | ||
|   | 2098ec2d16 | ||
|   | 97eece6607 | ||
|   | 7ac9a6e241 | ||
|   | b53bf0e8c2 | ||
|   | a26ded47d9 | ||
|   | cad9e14463 | ||
|   | 806d5939e3 | ||
|   | 0f0c23fbab | ||
|   | 5d1fcc26c0 | ||
|   | cbe5b6b3bc | ||
|   | 590cf4e832 | ||
|   | 22ca820c44 | ||
|   | b1206ceb66 | ||
|   | ad4053ab84 | ||
|   | 7bd4e6ecb0 | ||
|   | deeb1db1ac | ||
|   | 7eb4bfbea3 | ||
|   | 59b274f12f | ||
|   | e311cef013 | ||
|   | e72f81c24f | ||
|   | 96fa518576 | ||
|   | e263b3624c | ||
|   | 1c34f0b342 | ||
|   | 2d27873f98 | ||
|   | fd40a12213 | ||
|   | 57406e0a9e | ||
|   | 1987cbb764 | ||
|   | 705978405b | ||
|   | daba05f6a7 | ||
|   | 1a7984be43 | ||
|   | 1b3c77d53a | ||
|   | 5b0f0d9e5b | ||
|   | 9816659fa9 | ||
|   | 3b1b611634 | ||
|   | f08921bd0c | ||
|   | 0089b5769c | ||
|   | 452be05ea0 | ||
|   | 69f038f7c7 | ||
|   | 2d35e07fae | ||
|   | 95e2d26d03 | ||
|   | f506e090ea | ||
|   | 0697b53826 | ||
|   | 7d9141c56f | ||
|   | 519a06b93d | ||
|   | 0cceddab75 | ||
|   | c9830c13b4 | ||
|   | 9a4783e364 | ||
|   | aa15c09d54 | ||
|   | 62d908be42 | ||
|   | 6526e9882b | ||
|   | ab72352c47 | ||
|   | f09b9573f0 | ||
|   | 3d3ae40f79 | ||
|   | ea3d2b4759 | ||
|   | 542a0886cf | ||
|   | bd3d5df9ce | ||
|   | 91cdfab495 | ||
|   | 1617323dca | ||
|   | bbf9358eba | ||
|   | 9682a2aea4 | ||
|   | c9fbb51775 | ||
|   | aa6d887214 | ||
|   | 13312527de | ||
|   | 9bd366f2a6 | ||
|   | 5de346bfef | ||
|   | 2af20b77b6 | ||
|   | 9affbf10a6 | ||
|   | c0acf3ae6d | ||
|   | 2c1b20e15f | ||
|   | 77290b6736 | ||
|   | 876f81db12 | ||
|   | 75f3ae14b5 | ||
|   | d26f248b0f | ||
|   | eeb3dfc991 | ||
|   | e66db2eab3 | ||
|   | 2ae7454f36 | ||
|   | 4fd3c63da9 | ||
|   | 909a6607c5 | ||
|   | 1bde397edf | ||
|   | 015c05fbf6 | ||
|   | 8ad5ccd2f8 | ||
|   | 115cc870c7 | ||
|   | 3112794d83 | ||
|   | 3528b067d0 | ||
|   | 0986b660be | ||
|   | 3bb5086173 | ||
|   | 69467842ab | ||
|   | 57077435ed | ||
|   | 46de0ed462 | ||
|   | 5086626805 | ||
|   | bbbcd8c631 | ||
|   | 3b61b85f2c | ||
|   | cd20f1bc0b | ||
|   | 8b52782ed4 | ||
|   | 849050be95 | ||
|   | 5c27a91684 | ||
|   | 764c472edb | ||
|   | d0529b7482 | ||
|   | 8f4621240a | ||
|   | e039add240 | ||
|   | dbd8d4d598 | ||
|   | 522542c486 | ||
|   | fc67c707e4 | ||
|   | c354e7e81b | ||
|   | bf40409d97 | ||
|   | 57d083730e | ||
|   | dc242e46c2 | ||
|   | 7e1d1003c9 | ||
|   | 3bb33d384f | ||
|   | 214f31257b | ||
|   | bfc87d13cb | ||
|   | 506ddc3d6c | ||
|   | 24564c77d6 | ||
|   | 18a21b67c2 | ||
|   | 3803fd9511 | ||
|   | 152d896f75 | ||
|   | 2f3a5f2001 | ||
|   | c3e8646af3 | ||
|   | 8c17b670fb | ||
|   | 0e098249b1 | ||
|   | 12d2e1f600 | ||
|   | c20b007985 | ||
|   | ef480e9120 | ||
|   | 8c1c77482d | ||
|   | e633606ca9 | ||
|   | 9a5f243f73 | ||
|   | 03f55b9485 | ||
|   | ef9ef87d91 | ||
|   | 0ee2c21da7 | ||
|   | 9b966561c4 | ||
|   | 8c0779a9db | ||
|   | 2c901cc015 | ||
|   | 85e66f69fa | ||
|   | a5585327dc | ||
|   | 268ebb1b18 | ||
|   | 40e820f551 | ||
|   | f9a11b3b18 | ||
|   | bd3c357212 | ||
|   | b4d108dac6 | ||
|   | 6585a5760b | ||
|   | 531be6c413 | ||
|   | f0c503b5a9 | ||
|   | 6fdc23d0b7 | ||
|   | 4862872c78 | ||
|   | ae2e4c5114 | ||
|   | 06b5be2d13 | ||
|   | 56fb8a81b3 | ||
|   | 90a3d613ca | ||
|   | c2af13cf31 | ||
|   | b0cf0b2442 | ||
|   | 1c569c2d0e | ||
|   | e3855c77af | ||
|   | 21fe5be026 | ||
|   | 57bc974a57 | ||
|   | 3b51405255 | ||
|   | 73dbb4b9a5 | ||
|   | 51acc3ee31 | ||
|   | a6f206f07c | ||
|   | 9504fdd2cb | ||
|   | b76c3312e9 | ||
|   | fd7db8e6b3 | ||
|   | b7840bec7d | ||
|   | f743539886 | ||
|   | 15e01152da | ||
|   | 2103ff6a5c | ||
|   | 8ab136b7ea | ||
|   | 5205821fb9 | ||
|   | 7187206ef5 | ||
|   | 96221e6c04 | ||
|   | 7fdfbad6d4 | ||
|   | 2a5b068863 | ||
|   | 0c505faded | ||
|   | b2dd4f33f7 | ||
|   | 47b21b3547 | ||
|   | c119f98bac | ||
|   | 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 | 
							
								
								
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -23,7 +23,7 @@ src/50-mutter-navigation.xml | ||||
| src/50-mutter-system.xml | ||||
| src/50-mutter-windows.xml | ||||
| src/mutter-wm.desktop | ||||
| src/mutter.desktop | ||||
| src/mutter-wayland.desktop | ||||
| *.o | ||||
| *.a | ||||
| *.lo | ||||
| @@ -46,13 +46,13 @@ POTFILES | ||||
| po/*.pot | ||||
| 50-metacity-desktop-key.xml | ||||
| 50-metacity-key.xml | ||||
| inlinepixbufs.h | ||||
| libmutter.pc | ||||
| mutter | ||||
| mutter-theme-viewer | ||||
| mutter.desktop | ||||
| libmutter-wayland.pc | ||||
| mutter-wayland | ||||
| mutter-launch | ||||
| org.gnome.mutter.gschema.valid | ||||
| org.gnome.mutter.gschema.xml | ||||
| org.gnome.mutter.wayland.gschema.valid | ||||
| org.gnome.mutter.wayland.gschema.xml | ||||
| testasyncgetprop | ||||
| testboxes | ||||
| testgradient | ||||
| @@ -62,6 +62,7 @@ mutter-message | ||||
| mutter-window-demo | ||||
| focus-window | ||||
| test-attached | ||||
| test-focus | ||||
| test-gravity | ||||
| test-resizing | ||||
| test-size-hints | ||||
| @@ -74,7 +75,15 @@ src/mutter-enum-types.[ch] | ||||
| src/stamp-mutter-enum-types.h | ||||
| src/mutter-marshal.[ch] | ||||
| src/stamp-mutter-marshal.h | ||||
| src/meta-dbus-xrandr.[ch] | ||||
| src/meta-dbus-idle-monitor.[ch] | ||||
| src/mutter-plugins.pc | ||||
| src/wayland/gtk-shell-protocol.c | ||||
| src/wayland/gtk-shell-server-protocol.h | ||||
| src/wayland/xdg-shell-protocol.c | ||||
| src/wayland/xdg-shell-server-protocol.h | ||||
| src/wayland/xserver-protocol.c | ||||
| src/wayland/xserver-server-protocol.h | ||||
| doc/reference/*.args | ||||
| doc/reference/*.bak | ||||
| doc/reference/*.hierarchy | ||||
|   | ||||
							
								
								
									
										41
									
								
								COPYING
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								COPYING
									
									
									
									
									
								
							| @@ -1,12 +1,12 @@ | ||||
| 		    GNU GENERAL PUBLIC LICENSE | ||||
| 		       Version 2, June 1991 | ||||
|                     GNU GENERAL PUBLIC LICENSE | ||||
|                        Version 2, June 1991 | ||||
|  | ||||
|  Copyright (C) 1989, 1991 Free Software Foundation, Inc. | ||||
|      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  Copyright (C) 1989, 1991 Free Software Foundation, Inc., | ||||
|  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
|  Everyone is permitted to copy and distribute verbatim copies | ||||
|  of this license document, but changing it is not allowed. | ||||
|  | ||||
| 			    Preamble | ||||
|                             Preamble | ||||
|  | ||||
|   The licenses for most software are designed to take away your | ||||
| freedom to share and change it.  By contrast, the GNU General Public | ||||
| @@ -15,7 +15,7 @@ software--to make sure the software is free for all its users.  This | ||||
| General Public License applies to most of the Free Software | ||||
| Foundation's software and to any other program whose authors commit to | ||||
| using it.  (Some other Free Software Foundation software is covered by | ||||
| the GNU Library General Public License instead.)  You can apply it to | ||||
| the GNU Lesser General Public License instead.)  You can apply it to | ||||
| your programs, too. | ||||
|  | ||||
|   When we speak of free software, we are referring to freedom, not | ||||
| @@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all. | ||||
|  | ||||
|   The precise terms and conditions for copying, distribution and | ||||
| modification follow. | ||||
|  | ||||
| 		    GNU GENERAL PUBLIC LICENSE | ||||
|  | ||||
|                     GNU GENERAL PUBLIC LICENSE | ||||
|    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||||
|  | ||||
|   0. This License applies to any program or other work which contains | ||||
| @@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions: | ||||
|     License.  (Exception: if the Program itself is interactive but | ||||
|     does not normally print such an announcement, your work based on | ||||
|     the Program is not required to print an announcement.) | ||||
|  | ||||
|  | ||||
| These requirements apply to the modified work as a whole.  If | ||||
| identifiable sections of that work are not derived from the Program, | ||||
| and can be reasonably considered independent and separate works in | ||||
| @@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent | ||||
| access to copy the source code from the same place counts as | ||||
| distribution of the source code, even though third parties are not | ||||
| compelled to copy the source along with the object code. | ||||
|  | ||||
|  | ||||
|   4. You may not copy, modify, sublicense, or distribute the Program | ||||
| except as expressly provided under this License.  Any attempt | ||||
| otherwise to copy, modify, sublicense or distribute the Program is | ||||
| @@ -225,7 +225,7 @@ impose that choice. | ||||
|  | ||||
| This section is intended to make thoroughly clear what is believed to | ||||
| be a consequence of the rest of this License. | ||||
|  | ||||
|  | ||||
|   8. If the distribution and/or use of the Program is restricted in | ||||
| certain countries either by patents or by copyrighted interfaces, the | ||||
| original copyright holder who places the Program under this License | ||||
| @@ -255,7 +255,7 @@ make exceptions for this.  Our decision will be guided by the two goals | ||||
| of preserving the free status of all derivatives of our free software and | ||||
| of promoting the sharing and reuse of software generally. | ||||
|  | ||||
| 			    NO WARRANTY | ||||
|                             NO WARRANTY | ||||
|  | ||||
|   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | ||||
| FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN | ||||
| @@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | ||||
| PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | ||||
| POSSIBILITY OF SUCH DAMAGES. | ||||
|  | ||||
| 		     END OF TERMS AND CONDITIONS | ||||
|  | ||||
| 	    How to Apply These Terms to Your New Programs | ||||
|                      END OF TERMS AND CONDITIONS | ||||
|  | ||||
|             How to Apply These Terms to Your New Programs | ||||
|  | ||||
|   If you develop a new program, and you want it to be of the greatest | ||||
| possible use to the public, the best way to achieve this is to make it | ||||
| @@ -303,17 +303,16 @@ the "copyright" line and a pointer to where the full notice is found. | ||||
|     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 | ||||
|  | ||||
|     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., | ||||
|     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
|  | ||||
| Also add information on how to contact you by electronic and paper mail. | ||||
|  | ||||
| If the program is interactive, make it output a short notice like this | ||||
| when it starts in an interactive mode: | ||||
|  | ||||
|     Gnomovision version 69, Copyright (C) year  name of author | ||||
|     Gnomovision version 69, Copyright (C) year name of author | ||||
|     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | ||||
|     This is free software, and you are welcome to redistribute it | ||||
|     under certain conditions; type `show c' for details. | ||||
| @@ -336,5 +335,5 @@ necessary.  Here is a sample; alter the names: | ||||
| This General Public License does not permit incorporating your program into | ||||
| proprietary programs.  If your program is a subroutine library, you may | ||||
| consider it more useful to permit linking proprietary applications with the | ||||
| library.  If this is what you want to do, use the GNU Library General | ||||
| library.  If this is what you want to do, use the GNU Lesser General | ||||
| Public License instead of this License. | ||||
|   | ||||
| @@ -1,8 +1,10 @@ | ||||
|  | ||||
| SUBDIRS=src po doc | ||||
| SUBDIRS=src protocol 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 | ||||
|  | ||||
| ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} | ||||
|   | ||||
							
								
								
									
										296
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										296
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,3 +1,299 @@ | ||||
| 3.11.91 | ||||
| ======= | ||||
| * Don't use keysym to match keybindings [Rui; #678001] | ||||
| * Fix message tray icons showing up blank (again) [Adel; #725180] | ||||
| * Improve keybinding lookups [Rui; #725588] | ||||
| * Fix dynamic updates of titlebar style properties [Owen; #725751] | ||||
| * Fix positioning of manually positioned windows [Owen; #724049] | ||||
| * Misc bug fixes and cleanups [Jasper, Carlos, Adel, Giovanni, Florian; #720631, | ||||
|   #724969, #725216, #724402, #722266, #725338, #725525] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Adel Gadllah, Carlos Garnacho, Rui Matos, Florian Müllner, | ||||
|   Jasper St. Pierre, Owen W. Taylor | ||||
|  | ||||
| 3.11.90 | ||||
| ======= | ||||
| * Fix double-scaling on high DPI resolutions [Adel; #723931] | ||||
| * Make tile previews a compositor effect [Stefano, Florian; #665758] | ||||
| * Misc. bug fixes and cleanups [Ryan, Giovanni, Jasper, Adel; #722530, #724257, | ||||
|   #724258, #720631, #724364, #724472] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Marek Chalupa, Stefano Facchini, Adel Gadllah, | ||||
|   Ryan Lortie, Florian Müllner, Jasper St. Pierre, Rico Tzschichholz | ||||
|  | ||||
| 3.11.5 | ||||
| ====== | ||||
| * Fix CSD titlebars being placed off-screen [Jasper; #719772] | ||||
| * Add support for subsurfaces [Jonas; #705502] | ||||
| * Expose MetaWindow:skip-taskbar property [Florian; #723307] | ||||
| * Fix legacy tray icons showing up blank [Adel; #721596] | ||||
| * Fix configuration of cloned monitors [Adel; #710610] | ||||
| * Misc bug fixes and cleanups [Jasper, Adel, Marek, Jonas; #720631, #723468, | ||||
|   #720818, #723563, #723564] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Marek Ch, Adel Gadllah, Florian Müllner, Jasper St. Pierre | ||||
|  | ||||
| 3.11.4 | ||||
| ====== | ||||
| * Don't leave focus on windows that are being unmanaged [Owen; #711618] | ||||
| * Reduce server grabs [Daniel Drake; #721345, #721709] | ||||
| * Improve heuristic to determine display output name [Cosimo Cecchi; #721674] | ||||
| * Atomically unmaximize both directions [Jasper; #722108] | ||||
| * Misc bug fixes [Debarshi, Andika, Florian; #721517, #721674, #722347] | ||||
|  | ||||
| Contributors: | ||||
|   Cosimo Cecchi, Daniel Drake, Florian Müllner, Debarshi Ray, Jasper St. Pierre, | ||||
|   Andika Triwidada, Owen W. Taylor | ||||
|  | ||||
| 3.11.3 | ||||
| ====== | ||||
| * Fix focus issues with external OSKs[Jasper; #715030] | ||||
| * Add a MetaCullable interface [Jasper; #714706] | ||||
| * Fix window keybindings [Rui; #719724] | ||||
| * Fix settings keyboard/pointer focus for new clients [Rui; #719725] | ||||
| * Fix window group paint volume [Owen; #719669] | ||||
| * Fix frame extents problems [Owen; #714707] | ||||
| * Add shortcut to move windows between monitors [Florian; #671054] | ||||
| * Fix problems with focus tracking [Owen; #720558] | ||||
| * Misc. bug fixes and cleanups: [Rui, Colin, Lionel, Jasper, Owen; #712833, | ||||
|   #719557, #719695, #719833, #678989, #720417, #720630] | ||||
|  | ||||
| Contributors: | ||||
|   Lionel Landwerlin, Rui Matos, Alberto Milone, Florian Müllner, | ||||
|   Jasper St. Pierre, Rico Tzschichholz, Owen W. Taylor, Colin Walters | ||||
|  | ||||
| 3.11.2 | ||||
| ====== | ||||
| * Support setting a NULL opaque region [Andreas; #711518] | ||||
| * Sync keymap from X to wayland [Giovanni; #707446] | ||||
| * Implement support for subsurfaces [Jonas; #705502] | ||||
| * Don't focus the no-focus-window for globally active windows [Jasper; #710296] | ||||
| * Support "hotplug_mode_update" property [Marc-André; #711216] | ||||
| * Fix resize operations using mouse-button-modifier [Lionel; #710251] | ||||
| * Fix position of attached modals for CSD windows [Giovanni, Owen; #707194] | ||||
| * Misc. bug fixes [Rui, Jasper, Neil, Florian; #712247, #711731] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Andreas Heider, Lionel Landwerlin, Marc-André Lureau, | ||||
|   Rui Matos, Florian Müllner, Neil Roberts, Sindhu S, Jasper St. Pierre, | ||||
|   Rico Tzschichholz, Owen W. Taylor, Jonas Ådahl | ||||
|  | ||||
| 3.11.1 | ||||
| ====== | ||||
| * Fix tile previews getting stuck on right click during drags [Lionel; #704759] | ||||
| * Use new UPower API [Bastien] | ||||
| * Set hot spot when cursor set from wl_buffer [Jonas; #709593] | ||||
| * Expose min-backlight-step [Asad; #710380] | ||||
| * Misc. bug fixes and cleanups [Jasper, Olav, Magdalen; #709776] | ||||
|  | ||||
| Contributors: | ||||
|   Magdalen Berns, Lionel Landwerlin, Asad Mehmood, Bastien Nocera, | ||||
|   Jasper St. Pierre, Olav Vitters, Jonas Ådahl | ||||
|  | ||||
| 3.10.1 | ||||
| ====== | ||||
| * Don't apply fullscreen workarounds to CSD windows [Giovanni; #708718] | ||||
| * Fix hangs during DND operations [Adel; #709340] | ||||
| * Misc bug fixes [Dan, Giovanni, Jasper; #708813, #708420] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Adel Gadllah, Dan Horák, Hans Petter Jansson, | ||||
|   Jasper St. Pierre | ||||
|  | ||||
| 3.10.0.1 | ||||
| ======== | ||||
| * Fix bug when a window changed size twice in a single frame - this | ||||
|   can happen with GTK+ client-side decorations [Giovanni, Owen; #708367] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Owen Taylor | ||||
|  | ||||
| 3.10.0 | ||||
| ====== | ||||
| * Update dependencies [Giovanni; #708210] | ||||
|  | ||||
| 3.9.92 | ||||
| ====== | ||||
| * Constrain the pointer position onto visible monitors [Giovanni; #706655] | ||||
| * Fix keyboard state handling in face of event compression [Giovanni; #706963] | ||||
| * Extend the MetaCursorTracker API with query pointer and cursor visibility [Giovanni; #707474] | ||||
| * Be stricter in checking and exposing the wayland protocol version [#707851] | ||||
| * Don't require plugins to pass event to Clutter [Giovanni; #707482] | ||||
| * Move the --wayland option from the binary to the library [Giovanni; #707897] | ||||
| * Implement running from gnome-session (environment variable setting, process group | ||||
|   handling, Clutter backend variables) [Giovanni; #706421] | ||||
| * Add support for more cursor types [Giovanni; #707919] | ||||
| * Drop man pages for removed utilities [Kalev; #706579] | ||||
| * Implement monitor configuration on KMS [Giovanni; #706308] | ||||
| * Implement HW cursors [Giovanni; #707573] | ||||
| * Implement minimal support for resizing and maximizing wayland clients [Giovanni; #707401] | ||||
| * Implement transient hints for wayland clients [Giovanni; #707401] | ||||
| * Implement popup menu surfaces and grabs [Giovanni; #707863] | ||||
| * Immediately fire idle watches that are already expired [Giovanni; #707302] | ||||
| * Remove holes generated by disabling the laptop lid [Giovanni; #707473] | ||||
| * Misc bug fixes [Giovanni, Pavel, Adel; #707649, #706124, #707584, #707851, #707929, | ||||
|   #708070] | ||||
|  | ||||
| Contributors: | ||||
|   Adel Gadllah, Giovanni Campagna, Kalev Lember, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|   Мирослав Николић po/sr, sr@latin.po, Мирослав Николић [sr, sr@latin], | ||||
|   Chao-Hsiung Liao [zh_HK, zh_TW], Yuri Myasoedov [ru], | ||||
|   Ville-Pekka Vainio [fi], Changwoo Ryu [ko], A S Alam [pa], | ||||
|   Mattias Põldaru [et], Rūdolfs Mazurs [lv], Ihar Hrachyshka [be], | ||||
|   Nilamdyuti Goswami [as], Andika Triwidada [id], Baurzhan Muftakhidinov [kk], | ||||
|   Benjamin Steinwender [de] | ||||
|  | ||||
| 3.9.91 | ||||
| ====== | ||||
| * Drop man pages for removed utilities [Kalev; #706579] | ||||
| * Add support for idle tracking [Giovanni, Cosimo; #706005, #707250] | ||||
| * Skip CRTC reconfigurations that have no effect [Giovanni; #706672] | ||||
| * Ignore skip-taskbar hints on parentless dialogs [Giovanni; #673399] | ||||
| * Don't save pixbuf data in user data [Tim; #706777] | ||||
| * Don't queue redraws for obscured regions [Adel; #703332] | ||||
| * Suppor the opaque region hints for wayland clients [Jasper; #707019] | ||||
| * Turn blending off when drawing entirely opaque regions [Jasper; #707019] | ||||
| * Check event timestamps before reconfiguring [Giovanni; #706735] | ||||
| * Merge the DBus API for display configuration in the wayland branch [Giovanni] | ||||
| * Install an X IO error handler for XWayland [Giovanni; #706962] | ||||
| * Use the clutter xkbcommon integration for the wayland keyboard [Giovanni; #705862] | ||||
| * Add a setuid helper for running on KMS+evdev [Giovanni, Colin; #705861] | ||||
| * Add keybindings for switching VT [Giovanni; #705861] | ||||
| * Implement plugin modality when running as a wayland compositor [Giovanni; #705917] | ||||
| * Add support for the application menu for wayland clients [Giovanni; #707128] | ||||
| * Several Coverity spotted fixes [Jasper] | ||||
| * Don't create a dummy texture for the texture template [Neil; #707458] | ||||
| * Use a more conservative paint volume for obscured windows [Adel] | ||||
| * Misc bug fixes [Giovanni, Colin, Seán, Jasper, Cosimo; #706582, #706598, | ||||
|   #706787, #706729, #706825, #707081, #707090, #707267, #706982, #706289] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Cosimo Cecchi, Adel Gadllah, Colin Guthrie, Kalev Lember, | ||||
|   Tim Lunn, Jasper St. Pierre, Neil Roberts, Rico Tzschichholz, Seán de Búrca | ||||
|  | ||||
| Translations: | ||||
|   Piotr Drąg [pl], Alexandre Franke [fr], Kjartan Maraas [nb], | ||||
|   Milo Casagrande [it], Balázs Úr [hu], Seán de Búrca [ga], Fran Diéguez [gl], | ||||
|   Daniel Mustieles [es], Aurimas Černius [lt], Gil Forcada [ca] | ||||
|  | ||||
| 3.9.90 | ||||
| ====== | ||||
| * First release from the wayland branch, includes basic support for running | ||||
|   as a wayland compositor [Robert, Neil, Giovanni] | ||||
| * Add support for _GTK_FRAME_EXTENTS [Jasper; #705766] | ||||
| * Fix quick consecutive <super> presses breaking keyboard input [Alban; #666101] | ||||
| * Work towards running as wayland compositor [Giovanni] | ||||
|  - Add DBus API for display configuration | ||||
|    [#705670, #706231, #706233, #706322, #706382] | ||||
|  - Add abstraction layer for cursor tracking [#705911] | ||||
|  - Add support for plugin modality under wayland [#705917] | ||||
| * Disable GTK+ scaling [Alexander; #706388] | ||||
| * Disable blending while updating tower [Robert] | ||||
| * Misc bug fixes and cleanups [Adel, Jasper, Giovanni, Colin, Rico, Florian; | ||||
|   #703332, #704437, #706207] | ||||
|  | ||||
| Contributors: | ||||
|   Robert Bragg, Giovanni Campagna, Alban Crequy, Adel Gadllah, | ||||
|   Alexander Larsson, Florian Müllner, Jasper St. Pierre, Neil Roberts, | ||||
|   Rico Tzschichholz, Colin Walters | ||||
|  | ||||
| Translations: | ||||
|   Jiro Matsuzawa [ja], Kjartan Maraas [nb], Matej Urbančič [sl], | ||||
|   Marek Černocký [cs], Daniel Mustieles [es], Rafael Ferreira [pt_BR], | ||||
|   Yaron Shahrabani [he], Ján Kyselica [sk] | ||||
|  | ||||
| 3.9.5 | ||||
| ===== | ||||
| * Don't select for touch events on the stage [Jasper; #697192] | ||||
| * Don't queue redraws for obscured regions [Adel; #703332] | ||||
| * Export timestamp of global keybinding events [Bastien; #704858] | ||||
| * Misc bug fixes and cleanups [Jasper, Rico; #703970] | ||||
|  | ||||
| Contributors: | ||||
|   Adel Gadllah, Bastien Nocera, Jasper St. Pierre, Rico Tzschichholz | ||||
|  | ||||
| 3.9.4 | ||||
| ===== | ||||
| * Tweak window shadows [Allan; #702141] | ||||
| * Ignore our own focus events for focus prediction [Jasper; #701017] | ||||
| * Add API to query if the stage is focused [Jasper; #700735] | ||||
| * Add API to query the monitor for a given position [Adel] | ||||
| * Don't force attached dialogs to be border-only [Florian; #702764] | ||||
| * Allow slicing of backgrounds to avoid texture size limits [Ray; #702283] | ||||
| * Miscellaneous bug fixes and cleanups [Adel; #701224, #702564] | ||||
|  | ||||
| Contributors: | ||||
|   Allan Day, Adel Gadllah, Florian Müllner, Jasper St. Pierre, Ray Strode | ||||
|  | ||||
| 3.9.3 | ||||
| ===== | ||||
| * Ensure events are always reported to the grab window [Rui; #701219] | ||||
| * Use new clutter_stage_set_paint_callback() function to prevent dropping | ||||
|   frames with frame synced toolkits [Owen; #698794] | ||||
|  | ||||
| Contributors: | ||||
|   Rui Matos, Owen W. Taylor | ||||
|  | ||||
| 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] | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| #!/bin/bash | ||||
| #!/bin/sh | ||||
| # Run this to generate all the initial makefiles, etc. | ||||
|  | ||||
| srcdir=`dirname $0` | ||||
| test -z "$srcdir" && srcdir=. | ||||
|  | ||||
| PKG_NAME="mutter" | ||||
| REQUIRED_AUTOMAKE_VERSION=1.10 | ||||
| REQUIRED_AUTOMAKE_VERSION=1.13 | ||||
|  | ||||
| (test -f $srcdir/configure.ac \ | ||||
|   && test -d $srcdir/src) || { | ||||
|   | ||||
							
								
								
									
										73
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -1,8 +1,9 @@ | ||||
| AC_PREREQ(2.50) | ||||
| AC_CONFIG_MACRO_DIR([m4]) | ||||
|  | ||||
| m4_define([mutter_major_version], [3]) | ||||
| m4_define([mutter_minor_version], [7]) | ||||
| m4_define([mutter_micro_version], [92]) | ||||
| m4_define([mutter_minor_version], [11]) | ||||
| m4_define([mutter_micro_version], [91]) | ||||
|  | ||||
| m4_define([mutter_version], | ||||
|           [mutter_major_version.mutter_minor_version.mutter_micro_version]) | ||||
| @@ -15,10 +16,14 @@ AC_INIT([mutter], [mutter_version], | ||||
| AC_CONFIG_SRCDIR(src/core/display.c) | ||||
| AC_CONFIG_HEADERS(config.h) | ||||
|  | ||||
| AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar]) | ||||
| AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz tar-ustar]) | ||||
| m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],) | ||||
| AM_MAINTAINER_MODE([enable]) | ||||
|  | ||||
| # Change pkglibdir and pkgdatadir to mutter-wayland instead of mutter | ||||
| PACKAGE="mutter-wayland" | ||||
| AC_SUBST([PACKAGE], [$PACKAGE]) | ||||
|  | ||||
| MUTTER_MAJOR_VERSION=mutter_major_version | ||||
| MUTTER_MINOR_VERSION=mutter_minor_version | ||||
| MUTTER_MICRO_VERSION=mutter_micro_version | ||||
| @@ -34,7 +39,7 @@ AC_SUBST(MUTTER_PLUGIN_DIR) | ||||
| # Honor aclocal flags | ||||
| AC_SUBST(ACLOCAL_AMFLAGS, "\${ACLOCAL_FLAGS}") | ||||
|  | ||||
| GETTEXT_PACKAGE=mutter | ||||
| GETTEXT_PACKAGE=mutter-wayland | ||||
| AC_SUBST(GETTEXT_PACKAGE) | ||||
| AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Name of default gettext domain]) | ||||
|  | ||||
| @@ -73,8 +78,10 @@ MUTTER_PC_MODULES=" | ||||
|    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 | ||||
|    $CLUTTER_PACKAGE >= 1.17.5 | ||||
|    cogl-1.0 >= 1.17.1 | ||||
|    upower-glib >= 0.99.0 | ||||
|    gnome-desktop-3.0 | ||||
| " | ||||
|  | ||||
| GLIB_GSETTINGS | ||||
| @@ -113,14 +120,32 @@ AC_ARG_ENABLE(shape, | ||||
|                  [disable mutter's use of the shaped window extension]),, | ||||
|   enable_shape=auto) | ||||
|  | ||||
| ## Wayland support requires the xserver.xml protocol extension found in the weston | ||||
| ## repository but since there aren't currently established conventions for | ||||
| ## installing and discovering these we simply require a location to be given | ||||
| ## explicitly... | ||||
| AC_ARG_WITH([wayland-protocols], | ||||
|             [AS_HELP_STRING([--with-wayland-protocols], [Location for wayland extension protocol specs])], | ||||
|             [ | ||||
|             ], | ||||
|             []) | ||||
|  | ||||
| AC_ARG_WITH([xwayland-path], | ||||
|             [AS_HELP_STRING([--with-xwayland-path], [Absolute path for an X Wayland server])], | ||||
|             [XWAYLAND_PATH="$withval"], | ||||
|             [XWAYLAND_PATH="$bindir/Xorg"]) | ||||
|  | ||||
| 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) | ||||
| PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0) | ||||
| PKG_CHECK_MODULES(MUTTER_LAUNCH, libdrm libsystemd-login) | ||||
|  | ||||
| saved_LIBS="$LIBS" | ||||
| LIBS="$LIBS $MUTTER_LAUNCH" | ||||
| AC_CHECK_FUNCS([sd_session_get_vt]) | ||||
| LIBS="$saved_LIBS" | ||||
|  | ||||
| # Unconditionally use this dir to avoid a circular dep with gnomecc | ||||
| GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings" | ||||
| @@ -185,20 +210,15 @@ if test x$found_introspection != xno; then | ||||
|   AC_SUBST(META_GIR) | ||||
| fi | ||||
|  | ||||
| AC_MSG_CHECKING([Xcursor]) | ||||
| if $PKG_CONFIG xcursor; then | ||||
|      have_xcursor=yes | ||||
|   else | ||||
|      have_xcursor=no | ||||
|   fi | ||||
|   AC_MSG_RESULT($have_xcursor) | ||||
| MUTTER_PC_MODULES="$MUTTER_PC_MODULES xcursor" | ||||
|  | ||||
| if test x$have_xcursor = xyes; then | ||||
|   echo "Building with Xcursor" | ||||
|   MUTTER_PC_MODULES="$MUTTER_PC_MODULES xcursor" | ||||
|   AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support]) | ||||
| fi | ||||
| AC_PATH_PROG([WAYLAND_SCANNER],[wayland-scanner],[no]) | ||||
| AS_IF([test "x$WAYLAND_SCANNER" = "xno"], | ||||
|   AC_MSG_ERROR([Could not find wayland-scanner in your PATH, required for parsing wayland extension protocols])) | ||||
| AC_SUBST([WAYLAND_SCANNER]) | ||||
| AC_SUBST(XWAYLAND_PATH) | ||||
|  | ||||
| MUTTER_PC_MODULES="$MUTTER_PC_MODULES clutter-wayland-1.0 clutter-wayland-compositor-1.0 clutter-egl-1.0 wayland-server libdrm" | ||||
| PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES) | ||||
|  | ||||
| PKG_CHECK_EXISTS([xi >= 1.6.99.1], | ||||
| @@ -307,9 +327,6 @@ if test "x$found_xsync" = "xyes"; then | ||||
| fi | ||||
|  | ||||
| MUTTER_LIBS="$MUTTER_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm" | ||||
| MUTTER_MESSAGE_LIBS="$MUTTER_MESSAGE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" | ||||
| MUTTER_WINDOW_DEMO_LIBS="$MUTTER_WINDOW_DEMO_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm" | ||||
| MUTTER_PROPS_LIBS="$MUTTER_PROPS_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" | ||||
|  | ||||
| found_sm=no | ||||
| case "$MUTTER_LIBS" in | ||||
| @@ -439,11 +456,9 @@ doc/man/Makefile | ||||
| doc/reference/Makefile | ||||
| doc/reference/meta-docs.sgml | ||||
| src/Makefile | ||||
| src/wm-tester/Makefile | ||||
| src/libmutter.pc | ||||
| src/mutter-plugins.pc | ||||
| src/tools/Makefile | ||||
| src/libmutter-wayland.pc | ||||
| src/compositor/plugins/Makefile | ||||
| protocol/Makefile | ||||
| po/Makefile.in | ||||
| ]) | ||||
|  | ||||
| @@ -459,7 +474,7 @@ fi | ||||
|  | ||||
| dnl ========================================================================== | ||||
| echo " | ||||
| mutter-$VERSION | ||||
| mutter-wayland-$VERSION | ||||
|  | ||||
| 	prefix:                   ${prefix} | ||||
| 	source code location:	  ${srcdir} | ||||
|   | ||||
| @@ -1,4 +1,3 @@ | ||||
| man_MANS = mutter.1 mutter-theme-viewer.1 \ | ||||
| 	   mutter-window-demo.1 mutter-message.1 | ||||
| man_MANS = mutter.1 | ||||
|  | ||||
| EXTRA_DIST = $(man_MANS) | ||||
|   | ||||
| @@ -1,60 +0,0 @@ | ||||
| .\"                                      Hey, EMACS: -*- nroff -*- | ||||
| .\" First parameter, NAME, should be all caps | ||||
| .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection | ||||
| .\" other parameters are allowed: see man(7), man(1) | ||||
| .\" ----- | ||||
| .\" This file was confirmed to be licenced under the GPL | ||||
| .\" by its author and copyright holder, Akira TAGOH, on June 1st 2008: | ||||
| .\" | ||||
| .\" > I'm comfortable with DFSG-free. that sounds great if you think it's | ||||
| .\" > useful and worth containing it in upstream. | ||||
| .\" ... | ||||
| .\" > Right I know. any licenses that is DFSG-free, I'm ok with whatever, | ||||
| .\" > since I have contributed that for Debian. so GPL is no problem for me. | ||||
| .\" ----- | ||||
| .TH MUTTER\-MESSAGE 1 "28 August 2002" | ||||
| .\" Please adjust this date whenever revising the manpage. | ||||
| .\" | ||||
| .\" Some roff macros, for reference: | ||||
| .\" .nh        disable hyphenation | ||||
| .\" .hy        enable hyphenation | ||||
| .\" .ad l      left justify | ||||
| .\" .ad b      justify to both left and right margins | ||||
| .\" .nf        disable filling | ||||
| .\" .fi        enable filling | ||||
| .\" .br        insert line break | ||||
| .\" .sp <n>    insert n+1 empty lines | ||||
| .\" for manpage-specific macros, see man(7) | ||||
| .SH NAME | ||||
| MUTTER\-MESSAGE \- a command to send a message to Mutter | ||||
| .SH SYNOPSIS | ||||
| .B MUTTER\-MESSAGE | ||||
| [restart|reload\-theme|enable\-keybindings|disable\-keybindings] | ||||
| .SH DESCRIPTION | ||||
| This manual page documents briefly the | ||||
| .B mutter\-message\fP. | ||||
| This manual page was written for the Debian distribution | ||||
| because the original program does not have a manual page. | ||||
| .PP | ||||
| .\" TeX users may be more comfortable with the \fB<whatever>\fP and | ||||
| .\" \fI<whatever>\fP escape sequences to invode bold face and italics,  | ||||
| .\" respectively. | ||||
| \fBmutter\-message\fP send a specified message to \fBmutter\fP(1). | ||||
| .SH OPTIONS | ||||
| .TP | ||||
| .B restart | ||||
| Restart \fBmutter\fP(1) which is running. | ||||
| .TP | ||||
| .B reload-theme | ||||
| Reload a theme which is specified on gsettings database. | ||||
| .TP | ||||
| .B enable-keybindings | ||||
| Enable all of keybindings which is specified on gsettings database. | ||||
| .TP | ||||
| .B disable-keybindings | ||||
| Disable all of keybindings which is specified on gsettings database. | ||||
| .SH SEE ALSO | ||||
| .BR mutter (1) | ||||
| .SH AUTHOR | ||||
| This manual page was written by Akira TAGOH <tagoh@debian.org>, | ||||
| for the Debian GNU/Linux system (but may be used by others). | ||||
| @@ -1,43 +0,0 @@ | ||||
| .\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection | ||||
| .\" other parms are allowed: see man(7), man(1) | ||||
| .\" | ||||
| .\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>. | ||||
| .\"  | ||||
| .TH MUTTER-THEME-VIEWER 1 "1 June 2004"  | ||||
| .SH NAME | ||||
| mutter-theme-viewer \- view mutter themes | ||||
| .SH SYNOPSIS | ||||
| .B mutter-theme-viewer | ||||
| [ | ||||
| .I THEMENAME | ||||
| ] | ||||
| .SH DESCRIPTION | ||||
| .\" Putting a newline after each sentence can generate better output. | ||||
| .B mutter-theme-viewer | ||||
| allows you to preview any installed Mutter theme. | ||||
| .PP | ||||
| When designing a new Mutter theme, you can use | ||||
| .B mutter-theme-viewer | ||||
| to measure the performance of a window frame option, and to preview | ||||
| the option. | ||||
| .SH OPTIONS | ||||
| .TP | ||||
| .I THEMENAME | ||||
| Name of the theme to be shown (\fIAtlanta\fR by default). | ||||
| It is case-sensitive. | ||||
| .SH FILES | ||||
| .br | ||||
| .nf | ||||
| .TP | ||||
| .I /usr/share/themes | ||||
| system themes directory | ||||
| .TP | ||||
| .I /usr/share/themes/*/mutter-1/mutter-theme-1.xml | ||||
| theme specification file | ||||
| .SH AUTHOR | ||||
| This manual page was written by Jose M. Moya <josem@die.upm.es>, for | ||||
| the Debian  GNU/Linux system (but may be used by others). | ||||
| .SH "SEE ALSO" | ||||
| .\" Always quote multiple words for .SH | ||||
| .BR mutter (1), | ||||
| .BR mutter-window-demo (1). | ||||
| @@ -1,25 +0,0 @@ | ||||
| .\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection | ||||
| .\" other parms are allowed: see man(7), man(1) | ||||
| .\" | ||||
| .\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>. | ||||
| .\"  | ||||
| .TH MUTTER-WINDOW-DEMO 1 "1 June 2004"  | ||||
| .SH NAME | ||||
| mutter-window-demo \- demo of window features | ||||
| .SH SYNOPSIS | ||||
| .B mutter-window-demo | ||||
| .SH DESCRIPTION | ||||
| .\" Putting a newline after each sentence can generate better output. | ||||
| This program demonstrates various kinds of windows that window | ||||
| managers and window manager themes should handle. | ||||
| .PP | ||||
| Be sure to tear off the menu and toolbar, those are also a special | ||||
| kind of window. | ||||
| .SH AUTHOR | ||||
| This manual page was written by Jose M. Moya <josem@die.upm.es>, for | ||||
| the Debian  GNU/Linux system (but may be used by others). | ||||
| .SH "SEE ALSO" | ||||
| .\" Always quote multiple words for .SH | ||||
| .BR x-window-manager (1), | ||||
| .BR mutter (1), | ||||
| .BR mutter-theme-viewer (1). | ||||
| @@ -49,8 +49,8 @@ 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 | ||||
| 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 | ||||
| @@ -140,7 +140,7 @@ expand_content_files= \ | ||||
| # 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 | ||||
| GTKDOC_LIBS=$(MUTTER_LIBS) $(top_builddir)/src/libmutter-wayland.la | ||||
|  | ||||
| # This includes the standard gtk-doc make rules, copied by gtkdocize. | ||||
| include $(top_srcdir)/gtk-doc.make | ||||
|   | ||||
| @@ -96,8 +96,6 @@ 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 | ||||
| @@ -207,7 +205,6 @@ 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> | ||||
| @@ -389,6 +386,23 @@ MetaWindowActorPrivate | ||||
| meta_window_actor_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-cullable</FILE> | ||||
| <TITLE>MetaCullable</TITLE> | ||||
| MetaCullable | ||||
| MetaCullableInterface | ||||
| meta_cullable_cull_out | ||||
| meta_cullable_reset_culling | ||||
| meta_cullable_cull_out_children | ||||
| meta_cullable_reset_culling_children | ||||
| <SUBSECTION Standard> | ||||
| META_TYPE_CULLABLE | ||||
| META_CULLABLE | ||||
| META_IS_CULLABLE | ||||
| META_CULLABLE_GET_IFACE | ||||
| meta_cullable_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>prefs</FILE> | ||||
| MetaPreference | ||||
| @@ -409,7 +423,6 @@ 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 | ||||
| @@ -543,7 +556,10 @@ meta_window_is_override_redirect | ||||
| meta_window_is_skip_taskbar | ||||
| meta_window_get_rect | ||||
| meta_window_get_input_rect | ||||
| meta_window_get_frame_rect | ||||
| meta_window_get_outer_rect | ||||
| meta_window_client_rect_to_frame_rect | ||||
| meta_window_frame_rect_to_client_rect | ||||
| meta_window_get_screen | ||||
| meta_window_get_display | ||||
| meta_window_get_xwindow | ||||
|   | ||||
| @@ -21,6 +21,7 @@ environment.</description> | ||||
|   --> | ||||
|   <mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-shell-list" /> | ||||
|   <download-page rdf:resource="http://download.gnome.org/sources/mutter/" /> | ||||
|   <download-page rdf:resource="http://download.gnome.org/sources/mutter-wayland/" /> | ||||
|   <bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=mutter" /> | ||||
|  | ||||
|   <category rdf:resource="http://api.gnome.org/doap-extensions#desktop" /> | ||||
|   | ||||
| @@ -44,6 +44,7 @@ is | ||||
| it | ||||
| ja | ||||
| ka | ||||
| kk | ||||
| kn | ||||
| ko | ||||
| ku | ||||
| @@ -80,6 +81,7 @@ sr@latin | ||||
| sv | ||||
| ta | ||||
| te | ||||
| tg | ||||
| th | ||||
| tk | ||||
| tr | ||||
|   | ||||
| @@ -12,6 +12,7 @@ src/core/display.c | ||||
| src/core/errors.c | ||||
| src/core/keybindings.c | ||||
| src/core/main.c | ||||
| src/core/monitor.c | ||||
| src/core/mutter.c | ||||
| src/core/prefs.c | ||||
| src/core/screen.c | ||||
| @@ -20,15 +21,12 @@ src/core/util.c | ||||
| src/core/window.c | ||||
| src/core/window-props.c | ||||
| src/core/xprops.c | ||||
| src/mutter.desktop.in | ||||
| src/mutter-wm.desktop.in | ||||
| src/mutter-wayland.desktop.in | ||||
| src/org.gnome.mutter.gschema.xml.in | ||||
| src/tools/mutter-message.c | ||||
| src/org.gnome.mutter.wayland.gschema.xml.in | ||||
| src/ui/frames.c | ||||
| src/ui/menu.c | ||||
| src/ui/metaaccellabel.c | ||||
| src/ui/resizepopup.c | ||||
| src/ui/theme.c | ||||
| src/ui/theme-parser.c | ||||
| src/ui/theme-viewer.c | ||||
|  | ||||
|   | ||||
							
								
								
									
										441
									
								
								po/be.po
									
									
									
									
									
								
							
							
						
						
									
										441
									
								
								po/be.po
									
									
									
									
									
								
							| @@ -1,10 +1,10 @@ | ||||
| # Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2011. | ||||
| # Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2011, 2013. | ||||
| 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: 2013-03-01 15:50+0000\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2012-10-13 17:44+0300\n" | ||||
| "Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n" | ||||
| "Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n" | ||||
| @@ -206,7 +206,7 @@ msgstr "Падзяліць прагляд справа" | ||||
|  | ||||
| #. 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:507 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -214,11 +214,11 @@ msgid "" | ||||
| msgstr "" | ||||
| "Іншы кампазітны кіраўнік вокнаў ужо абслугоўвае экран %i дысплея \"%s\"." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1111 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "не ўдалося стварыць фонавую тэкстуру з файла" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "Падзея з сігналам" | ||||
|  | ||||
| @@ -251,18 +251,18 @@ msgstr "_Пачакаць" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Змусіць да выхаду" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "" | ||||
| "Адсутнічае пашырэнне \"%s\", патрэбнае для ажыццяўлення кампазітнага вываду" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Не ўдалося адкрыць X-дысплей аконнай сістэмы \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -271,41 +271,41 @@ msgstr "" | ||||
| "Нейкая іншая праграма ўжо выкарыстоўвае як скарот клавішу %s з " | ||||
| "мадыфікатарамі %x\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\" - гэта хібны клавіятурны скарот\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Выключыць злучэнне з кіраўніком сеансаў" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Замяніць дзейнага кіраўніка вокнаў" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Вызначыць ідэнтыфікатар для кіравання сеансам" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "Патрэбны X-дысплей" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Ініцыяваць сеанс з файла" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Сінхронна выконваць выклікі X-сістэмы" | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Не ўдалося праглядзець каталог з матывамі аздаблення: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -313,6 +313,19 @@ msgstr "" | ||||
| "Не ўдалося адшукаць матыў аздаблення! Праверце, каб каталог %s існаваў і " | ||||
| "змяшчаў звычайныя матывы.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Убудаваны дысплей" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "Невядомы %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -337,7 +350,7 @@ msgstr "Вывесці нумар версіі праграмы" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Патрэбны плугін Mutter" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -345,12 +358,12 @@ msgstr "" | ||||
| "Асаблівыя паводзіны для некаторых хібных праграм выключаныя. Некаторыя " | ||||
| "праграмы могуць перастаць працаваць, як мае быць.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Не ўдалося разабраць азначэнне шрыфту \"%s\" з GSettings-ключа %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -359,7 +372,7 @@ msgstr "" | ||||
| "Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае " | ||||
| "мадыфікатар мышынай кнопкі\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -368,17 +381,17 @@ msgstr "" | ||||
| "Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае " | ||||
| "клавіятурны скарот \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Прастора працы %d" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Экран %d на дысплеі \"%s\" хібны\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -387,19 +400,19 @@ msgstr "" | ||||
| "Экран %d на дысплеі \"%s\" ужо мае аконнага кіраўніка. Каб замяніць яго " | ||||
| "новым, дадайце опцыю --replace.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "" | ||||
| "Не ўдалося пераняць вылучэнне кіраўніка вокнаў для экрана %d дысплея \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Экран %d на дысплеі \"%s\" ужо мае кіраўніка вокнаў\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Не ўдалося вызваліць экран %d на дысплеі \"%s\"\n" | ||||
| @@ -460,46 +473,45 @@ msgstr "" | ||||
| "Гэтыя вокны не падтрымліваюць функцыі захавання дзейнага ладу працы, і таму " | ||||
| "іх прыйдзецца запусціць уручную пасля наступнага ўваходу ў сістэму." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Не ўдалося адкрыць адладачны журнал: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "Не ўдалося выканаць fdopen() для журнальнага файла %s: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Журнальны файл %s адкрыты\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "" | ||||
| "Праграма \"Mutter\" была скампіляваная без падтрымкі падрабязнага " | ||||
| "пратакаліравання\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "Кіраўнік вокнаў: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Хіба ў кіраўніку вокнаў: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Перасцярога ад кіраўніка вокнаў: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Памылка кіраўніка вокнаў: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7539 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -515,7 +527,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8263 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -525,22 +537,22 @@ msgstr "" | ||||
| "памеру, але разам з гэтым прызначыла для сябе мінімальны памер %d x %d і " | ||||
| "максімальны памер %d x %d. Такія паводзіны не маюць сэнсу.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Праграма прызначыла памылковае значэнне _NET_WM_PID %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (на %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Для %2$s вызначана хібнае акно WM_TRANSIENT_FOR 0x%1$lx.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR акно 0x%lx для %s стварыла б цыкл.\n" | ||||
| @@ -689,7 +701,8 @@ msgstr "" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:17 | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "Аўтаматычна максімалізаваць вокны, якія расцягнутыя амаль на ўвесь экран" | ||||
| msgstr "" | ||||
| "Аўтаматычна максімалізаваць вокны, якія расцягнутыя амаль на ўвесь экран" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:18 | ||||
| msgid "" | ||||
| @@ -707,109 +720,104 @@ msgstr "Выбраць акно з выплыўнога акенца" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Закрыць выплыўное акенца" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Правілы выкарыстання: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "_Мінімалізаваць" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Ма_ксімалізаваць" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "Скасаваць ма_ксімалізацыю" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "_Скруціць акно ў загаловак" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "Рас_круціць акно з загалоўка" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "_Перамясціць акно" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "_Змяніць памер акна" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Перамясціць загаловак акна па _экране" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "Заўсёды _наверсе" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "Заўсёды на _бачнай прасторы працы" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "_Толькі на гэтай прасторы працы" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Перамясціць на прастору працы з_лева" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Перамясціць на прастору працы с_права" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Перамясціць на прастору працы з_верху" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Перамясціць на прастору працы з_нізу" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Закрыць акно" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Прастора працы %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Прастора працы 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Прастора працы %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "П_ерамясціць на іншую прастору працы" | ||||
|  | ||||
| @@ -911,49 +919,49 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "верхнюю" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "ніжнюю" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "левую" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "правую" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "апісанне геаметрыі рамкі акна не вызначае %s граніцу" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "" | ||||
| "апісанне геаметрыі рамкі акна не вызначае %s граніцу для аблямоўкі \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "Прапорцыі кнопкі %g не маюць сэнсу" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "Апісанне геаметрыі рамкі акна не вызначае памер кнопак" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Градыент мусіць мець прынамсі два колеры" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -962,7 +970,7 @@ msgstr "" | ||||
| "Уласная спецыфікацыя колеру GTK мусіць змяшчаць назвы асноўнага і запаснога " | ||||
| "колераў у дужках, напрыклад, gtk:custom(foo,bar). Не ўдалося разабраць \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -971,7 +979,7 @@ msgstr "" | ||||
| "Хібны знак \"%c\" у параметры color_name спецыфікацыі gtk:custom, дазволеныя " | ||||
| "толькі A-Za-z0-9-_" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -980,7 +988,7 @@ msgstr "" | ||||
| "Фармат gtk:custom: \"gtk:custom(назва_колеру,запасны_колер)\"; \"%s\" не " | ||||
| "адпавядае фармату" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -989,7 +997,7 @@ msgstr "" | ||||
| "Спецыфікацыя колеру GTK мусіць мець стан у квадратных дужках, напрыклад, gtk:" | ||||
| "fg[NORMAL], дзе NORMAL - гэта стан. Не ўдалося разабраць \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -999,17 +1007,17 @@ msgstr "" | ||||
| "напрыклад, gtk:fg[NORMAL], дзе NORMAL - гэта стан. Не ўдалося разабраць \"%s" | ||||
| "\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Незразумелы стан \"%s\" у спецыфікацыі колеру" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "Незразумелы складнік колеру \"%s\" у спецыфікацыі колеру" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1018,58 +1026,58 @@ msgstr "" | ||||
| "Фармат змяшанага колеру - \"blend/bg_color/fg_color/alpha\". \"%s\" не " | ||||
| "адпавядае фармату." | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Не ўдалося разабраць значэнне альфа \"%s\" ў змяшаным колеры" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "" | ||||
| "Значэнне альфа \"%s\" у змяшаным колеры не ўваходзіць у дыяпазон ад 0.0 да " | ||||
| "1.0" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| msgstr "" | ||||
| "Фармат ценю - \"shade/base_color/factor\". \"%s\" не адпавядае фармату." | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "Не ўдалося разабраць каэфіцыент ценю \"%s\" у зацененым колеры" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Каэфіцыент ценю \"%s\" у зацененым колеры адмоўны" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Не ўдалося разабраць колер \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Каардынатны выраз змяшчае забаронены знак \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "Каардынатны выраз змяшчае незразумелы лік з нефіксаванай коскай \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "Каардынатны выраз змяшчае незразумелы цэлы лік \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -1077,17 +1085,17 @@ msgid "" | ||||
| msgstr "" | ||||
| "Каардынатны выраз змяшчае невядомы аператар у пачатку гэтага тэксту: \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "Каардынатны выраз пусты ці незразумелы" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "Каардынатны выраз вымагае дзялення на нуль" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| @@ -1095,24 +1103,24 @@ msgstr "" | ||||
| "Каардынатны выраз спрабуе ўжыць аператар дзялення па модулі для ліку з " | ||||
| "нефіксаванай коскай" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "" | ||||
| "У каардынатным выразе ўжыты аператар \"%s\" там, дзе мусіў быць аперанд" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "У каардынатным выразе ўжыты аперанд там, дзе мусіў быць аператар" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "Каардынатны выраз заканчваецца аператарам, а не аперандам" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1121,41 +1129,41 @@ msgstr "" | ||||
| "У каардынатным выразе за аператарам \"%c\" ідзе аператар \"%c\", але паміж " | ||||
| "імі няма аперанда" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "У каардынатным выразе невядомая зменная альбо канстанта \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "Прылада для разбору каардынатных выразаў перапоўніла свой буфер." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "" | ||||
| "У каардынатным выразе ўжытыя дужкі, якія закрываюцца, але няма тых, якія б " | ||||
| "адкрываліся" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "" | ||||
| "У каардынатным выразе ўжытыя дужкі, якія адкрываюцца, але няма тых, якія б " | ||||
| "закрываліся" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "У каардынатным выразе няма ні аператараў, ні аперандаў" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Матыў аздаблення змяшчае выраз, які стаў прычынай памылкі: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1164,25 +1172,25 @@ msgstr "" | ||||
| "Для гэтага стылю рамкі трэба вызначыць <button function=\"%s\" state=\"%s\" " | ||||
| "draw_ops=\"whatever\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "" | ||||
| "Няма <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"што-небудзь\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Не ўдалося загрузіць матыў аздаблення \"%s\": %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../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\" не прызначана <%1$s>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1191,7 +1199,7 @@ msgstr "" | ||||
| "Стыль рамкі не вызначаны для вокнаў тыпу \"%s\" для матыву аздаблення \"%s" | ||||
| "\". Дадайце <window type=\"%s\" style_set=\"штосьці\"/>." | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| @@ -1199,7 +1207,7 @@ msgstr "" | ||||
| "Назвы канстантаў, вызначаных карыстальнікам, мусяць пачынацца з вялікай " | ||||
| "літары. \"%s\" не адпавядае гэтаму патрабаванню." | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Канстанта \"%s\" ужо азначана" | ||||
| @@ -1585,207 +1593,8 @@ msgstr "Выкарыстанне тэксту ўнутры элемента <%s> | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> двойчы вызначаны для гэтага матыву аздаблення" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Памылка пошуку правільнага файла для матыву аздаблення %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Вокны" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Мадальнае дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Дапаможная праграма" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Экранная застаўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Верхняя ўбудова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Ніжняя ўбудова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "_Левая ўбудова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "_Правая ўбудова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "_Усе ўбудовы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "_Стол" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Адкрыць чарговае з гэтых вокнаў" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Гэта дэманстрацыйная кнопка са значком \"Адкрыць\"" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Гэта дэманстрацыйная кнопка са значком \"Выйсці\"" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Гэта ўзорнае паведамленне ва ўзорным дыялогавым акенцы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Несапраўдны пункт меню %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Акно толькі з аблямоўкай" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Стужка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Звычайнае акно праграмы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Мадальнае дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Дапаможная палітра" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Адчэпленае меню" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Аблямоўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Прычапленае мадальнае дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Выпрабаванне размяшчэння кнопак %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g мілісекунд, каб намаляваць адну рамку акна" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Правілы карыстання: metacity-theme-viewer [НАЗВА_МАТЫВУ]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Памылка загрузкі матыву аздаблення: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Матыў аздаблення \"%s\" загружаны за %g секунд\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Звычайны шрыфт загалоўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Маленькі шрыфт загалоўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Вялікі шрыфт загалоўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Размяшчэнне кнопак" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Выпрабаванне" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Месца для загалоўка акна" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Намалявана %d рамак цягам %g секунд кліенцкага часу (%g мілісекунд на рамку) " | ||||
| "і %g секунд каляндарнага часу, уключна з рэсурсамі X-сервера (%g мілісекунд " | ||||
| "на рамку)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "выпрабаванне выразу пазіцыі вярнула TRUE, але паведаміла аб памылцы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "" | ||||
| "выпрабаванне выразу пазіцыі вярнула FALSE, але не паведаміла аб памылцы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Чакалася памылка, але звесткі не атрыманыя" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Чакалася памылка %d, але атрымана %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Атрымана нечаканая памылка: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "X-значэнне было %d, а чакалася %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "Y-значэнне было %d, а чакалася %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "%d каардынатных выразаў разабраныя за %g секунд (у сярэднім %g секунд)\n" | ||||
|   | ||||
							
								
								
									
										664
									
								
								po/en_GB.po
									
									
									
									
									
								
							
							
						
						
									
										664
									
								
								po/en_GB.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										231
									
								
								po/et.po
									
									
									
									
									
								
							
							
						
						
									
										231
									
								
								po/et.po
									
									
									
									
									
								
							| @@ -14,8 +14,8 @@ 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: 2013-03-12 18:53+0000\n" | ||||
| "PO-Revision-Date: 2013-03-12 20:55+0300\n" | ||||
| "POT-Creation-Date: 2013-09-10 15:25+0000\n" | ||||
| "PO-Revision-Date: 2013-09-11 23:20+0300\n" | ||||
| "Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n" | ||||
| "Language-Team: Estonian <>\n" | ||||
| "Language: et\n" | ||||
| @@ -23,6 +23,7 @@ msgstr "" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n!=1);\n" | ||||
| "X-Generator: Poedit 1.5.4\n" | ||||
|  | ||||
| msgid "Navigation" | ||||
| msgstr "Navigeerimine" | ||||
| @@ -249,6 +250,17 @@ msgid "" | ||||
| msgstr "" | ||||
| "Teemat ei leitud! Veendu, et %s on olemas ja sisaldab harilikke teemasid.\n" | ||||
|  | ||||
| msgid "Built-in display" | ||||
| msgstr "Sisseehitatud kuva" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "Tundmatu %s" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| @@ -381,7 +393,6 @@ msgstr "Tõrge logifaili %s avamisel funktsiooniga fdopen(): %s\n" | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Avati logifail %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter kompileeriti ilma jutuka režiimi toeta\n" | ||||
|  | ||||
| @@ -572,10 +583,6 @@ 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" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| msgid "Mi_nimize" | ||||
| msgstr "_Minimeeri" | ||||
| @@ -1281,159 +1288,151 @@ msgstr "Selle teema jaoks on <%s> määratud kaks korda" | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Tõrge %s teema jaoks korrektse faili leidmisel\n" | ||||
|  | ||||
| msgid "_Windows" | ||||
| msgstr "_Aknad" | ||||
| #~ msgid "Usage: %s\n" | ||||
| #~ msgstr "Kasutamine: %s\n" | ||||
|  | ||||
| msgid "_Dialog" | ||||
| msgstr "_Dialoog" | ||||
| #~ msgid "_Windows" | ||||
| #~ msgstr "_Aknad" | ||||
|  | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Modaaldialoog" | ||||
| #~ msgid "_Dialog" | ||||
| #~ msgstr "_Dialoog" | ||||
|  | ||||
| msgid "_Utility" | ||||
| msgstr "_Utiliit" | ||||
| #~ msgid "_Modal dialog" | ||||
| #~ msgstr "_Modaaldialoog" | ||||
|  | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Käivitusekraan" | ||||
| #~ msgid "_Utility" | ||||
| #~ msgstr "_Utiliit" | ||||
|  | ||||
| msgid "_Top dock" | ||||
| msgstr "Ü_lemine dokk" | ||||
| #~ msgid "_Splashscreen" | ||||
| #~ msgstr "_Käivitusekraan" | ||||
|  | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Alumine dokk" | ||||
| #~ msgid "_Top dock" | ||||
| #~ msgstr "Ü_lemine dokk" | ||||
|  | ||||
| msgid "_Left dock" | ||||
| msgstr "_Vasak dokk" | ||||
| #~ msgid "_Bottom dock" | ||||
| #~ msgstr "_Alumine dokk" | ||||
|  | ||||
| msgid "_Right dock" | ||||
| msgstr "_Parem dokk" | ||||
| #~ msgid "_Left dock" | ||||
| #~ msgstr "_Vasak dokk" | ||||
|  | ||||
| msgid "_All docks" | ||||
| msgstr "_Kõik dokid" | ||||
| #~ msgid "_Right dock" | ||||
| #~ msgstr "_Parem dokk" | ||||
|  | ||||
| msgid "Des_ktop" | ||||
| msgstr "_Töölaud" | ||||
| #~ msgid "_All docks" | ||||
| #~ msgstr "_Kõik dokid" | ||||
|  | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Ava neist akendest järgmine" | ||||
| #~ msgid "Des_ktop" | ||||
| #~ msgstr "_Töölaud" | ||||
|  | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "See on näidisnupp koos 'ava' ikooniga" | ||||
| #~ msgid "Open another one of these windows" | ||||
| #~ msgstr "Ava neist akendest järgmine" | ||||
|  | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "See on näidisnupp koos 'lõpeta' ikooniga" | ||||
| #~ msgid "This is a demo button with an 'open' icon" | ||||
| #~ msgstr "See on näidisnupp koos 'ava' ikooniga" | ||||
|  | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "See on näidisteade näidisdialoogis" | ||||
| #~ msgid "This is a demo button with a 'quit' icon" | ||||
| #~ msgstr "See on näidisnupp koos 'lõpeta' ikooniga" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Võltsitud menüüpunkt %d\n" | ||||
| #~ msgid "This is a sample message in a sample dialog" | ||||
| #~ msgstr "See on näidisteade näidisdialoogis" | ||||
|  | ||||
| msgid "Border-only window" | ||||
| msgstr "Ainult raamiga aken" | ||||
| #~ msgid "Fake menu item %d\n" | ||||
| #~ msgstr "Võltsitud menüüpunkt %d\n" | ||||
|  | ||||
| msgid "Bar" | ||||
| msgstr "Riba" | ||||
| #~ msgid "Border-only window" | ||||
| #~ msgstr "Ainult raamiga aken" | ||||
|  | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Tavaline rakenduseaken" | ||||
| #~ msgid "Bar" | ||||
| #~ msgstr "Riba" | ||||
|  | ||||
| msgid "Dialog Box" | ||||
| msgstr "Dialoogikast" | ||||
| #~ msgid "Normal Application Window" | ||||
| #~ msgstr "Tavaline rakenduseaken" | ||||
|  | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Modaalne dialoogikast" | ||||
| #~ msgid "Dialog Box" | ||||
| #~ msgstr "Dialoogikast" | ||||
|  | ||||
| msgid "Utility Palette" | ||||
| msgstr "Rakendite palett" | ||||
| #~ msgid "Modal Dialog Box" | ||||
| #~ msgstr "Modaalne dialoogikast" | ||||
|  | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Ärarebitav menüü" | ||||
| #~ msgid "Utility Palette" | ||||
| #~ msgstr "Rakendite palett" | ||||
|  | ||||
| msgid "Border" | ||||
| msgstr "Raam" | ||||
| #~ msgid "Torn-off Menu" | ||||
| #~ msgstr "Ärarebitav menüü" | ||||
|  | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Kinnistatud modaaldialoog" | ||||
| #~ msgid "Border" | ||||
| #~ msgstr "Raam" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Nuppude paigutuse test %d" | ||||
| #~ msgid "Attached Modal Dialog" | ||||
| #~ msgstr "Kinnistatud modaaldialoog" | ||||
|  | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g millisekundit kulub ühe akna raami joonistamiseks" | ||||
| #~ msgid "Button layout test %d" | ||||
| #~ msgstr "Nuppude paigutuse test %d" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Kasutamine: metacity-theme-viewer [TEEMANIMI]\n" | ||||
| #~ msgid "%g milliseconds to draw one window frame" | ||||
| #~ msgstr "%g millisekundit kulub ühe akna raami joonistamiseks" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Viga teema laadimisel: %s\n" | ||||
| #~ msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| #~ msgstr "Kasutamine: metacity-theme-viewer [TEEMANIMI]\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Teema \"%s\" laaditi %g sekundiga\n" | ||||
| #~ msgid "Error loading theme: %s\n" | ||||
| #~ msgstr "Viga teema laadimisel: %s\n" | ||||
|  | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Tiitli tavasuurusega kirjatüüp" | ||||
| #~ msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| #~ msgstr "Teema \"%s\" laaditi %g sekundiga\n" | ||||
|  | ||||
| msgid "Small Title Font" | ||||
| msgstr "Tiitli väike kirjatüüp" | ||||
| #~ msgid "Normal Title Font" | ||||
| #~ msgstr "Tiitli tavasuurusega kirjatüüp" | ||||
|  | ||||
| msgid "Large Title Font" | ||||
| msgstr "Tiitli suur kirjatüüp" | ||||
| #~ msgid "Small Title Font" | ||||
| #~ msgstr "Tiitli väike kirjatüüp" | ||||
|  | ||||
| msgid "Button Layouts" | ||||
| msgstr "Nuppude paigutus" | ||||
| #~ msgid "Large Title Font" | ||||
| #~ msgstr "Tiitli suur kirjatüüp" | ||||
|  | ||||
| msgid "Benchmark" | ||||
| msgstr "Jõudlus" | ||||
| #~ msgid "Button Layouts" | ||||
| #~ msgstr "Nuppude paigutus" | ||||
|  | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Siia tuleb akna pealkiri" | ||||
| #~ msgid "Benchmark" | ||||
| #~ msgstr "Jõudlus" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Joonistati %d kaadrit %g kliendi-kella sekundiga (%g millisekundit kaadrile) " | ||||
| "ja %g sekundiga seinakella järgi, millesse on kaasatud X-serveri " | ||||
| "ressursikasutus (%g millisekundit kaadrile)\n" | ||||
| #~ msgid "Window Title Goes Here" | ||||
| #~ msgstr "Siia tuleb akna pealkiri" | ||||
|  | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "asukoha avaldise kontroll tagastas TÕENE, aga määras vea" | ||||
| #~ msgid "" | ||||
| #~ "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and " | ||||
| #~ "%g seconds wall clock time including X server resources (%g milliseconds " | ||||
| #~ "per frame)\n" | ||||
| #~ msgstr "" | ||||
| #~ "Joonistati %d kaadrit %g kliendi-kella sekundiga (%g millisekundit " | ||||
| #~ "kaadrile) ja %g sekundiga seinakella järgi, millesse on kaasatud X-" | ||||
| #~ "serveri ressursikasutus (%g millisekundit kaadrile)\n" | ||||
|  | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "asukoha avaldise kontroll tagastas VÄÄR, aga ei määranud viga" | ||||
| #~ msgid "position expression test returned TRUE but set error" | ||||
| #~ msgstr "asukoha avaldise kontroll tagastas TÕENE, aga määras vea" | ||||
|  | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Oodati viga, aga ühtegi ei edastatud" | ||||
| #~ msgid "position expression test returned FALSE but didn't set error" | ||||
| #~ msgstr "asukoha avaldise kontroll tagastas VÄÄR, aga ei määranud viga" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Oodati viga %d, aga edastati viga %d" | ||||
| #~ msgid "Error was expected but none given" | ||||
| #~ msgstr "Oodati viga, aga ühtegi ei edastatud" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Viga ei oodatud, aga üks edastati: %s" | ||||
| #~ msgid "Error %d was expected but %d given" | ||||
| #~ msgstr "Oodati viga %d, aga edastati viga %d" | ||||
|  | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "x väärtus oli %d, oodati väärtust %d" | ||||
| #~ msgid "Error not expected but one was returned: %s" | ||||
| #~ msgstr "Viga ei oodatud, aga üks edastati: %s" | ||||
|  | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "y väärtus oli %d, oodati väärtust %d" | ||||
| #~ msgid "x value was %d, %d was expected" | ||||
| #~ msgstr "x väärtus oli %d, oodati väärtust %d" | ||||
|  | ||||
| #, c-format | ||||
| 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 "y value was %d, %d was expected" | ||||
| #~ msgstr "y väärtus oli %d, oodati väärtust %d" | ||||
|  | ||||
| #~ 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 "Minimize window" | ||||
| #~ msgstr "Akna minimeerimine" | ||||
|   | ||||
							
								
								
									
										2
									
								
								po/fr.po
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								po/fr.po
									
									
									
									
									
								
							| @@ -1352,7 +1352,7 @@ msgstr "<%s> doit indiquer une géométrie ou un parent qui en possède une" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1196 | ||||
| msgid "You must specify a background for an alpha value to be meaningful" | ||||
| msgstr "Vous devez indiquer une valeur pour le paramètre alpha." | ||||
| msgstr "Vous devez indiquer un arrière-plan pour qu'une valeur alpha ait du sens." | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1264 | ||||
| #, c-format | ||||
|   | ||||
							
								
								
									
										201
									
								
								po/he.po
									
									
									
									
									
								
							
							
						
						
									
										201
									
								
								po/he.po
									
									
									
									
									
								
							| @@ -9,8 +9,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: metacity.HEAD.he\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-02-21 19:11+0200\n" | ||||
| "PO-Revision-Date: 2013-02-21 19:14+0200\n" | ||||
| "POT-Creation-Date: 2013-04-03 08:27+0300\n" | ||||
| "PO-Revision-Date: 2013-04-03 08:28+0200\n" | ||||
| "Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n" | ||||
| "Language-Team: Hebrew <he@li.org>\n" | ||||
| "Language: he\n" | ||||
| @@ -209,16 +209,16 @@ msgstr "פיצול הצפייה מימין" | ||||
|  | ||||
| #. 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:507 | ||||
| #: ../src/compositor/compositor.c:568 | ||||
| #, c-format | ||||
| msgid "Another compositing manager is already running on screen %i on display \"%s\"." | ||||
| msgstr "מנהל תצוגת חלונות אחר כבר פועל במסך %i בתצוגה „%s“." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1116 | ||||
| #: ../src/compositor/meta-background.c:1064 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "לא ניתן ליצור מרקם רקע מקובץ" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "אירוע פעמון" | ||||
|  | ||||
| @@ -248,51 +248,56 @@ msgstr "ה_מתנה" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_אילוץ סגירה" | ||||
|  | ||||
| #: ../src/core/display.c:392 | ||||
| #: ../src/core/display.c:401 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Missing %s extension required for compositing" | ||||
|  | ||||
| #: ../src/core/display.c:484 | ||||
| #: ../src/core/display.c:493 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Failed to open X Window System display '%s'\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:876 | ||||
| #: ../src/core/keybindings.c:935 | ||||
| #, c-format | ||||
| msgid "Some other program is already using the key %s with modifiers %x as a binding\n" | ||||
| msgstr "תכנית אחרת כבר משתמשת במקש %s עם המקש %x כצירוף\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/keybindings.c:1135 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\" אינו מקש האצה תקני\n" | ||||
|  | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Disable connection to session manager" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Replace the running window manager" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Specify session management ID" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "X Display to use" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Initialize session from savefile" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Make X calls synchronous" | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Failed to scan themes directory: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| msgstr "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -318,51 +323,51 @@ msgstr "Print version" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "תוסף ה־mutter לשימוש" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1095 | ||||
| msgid "Workarounds for broken applications disabled. Some applications may not behave properly.\n" | ||||
| msgstr "Workarounds for broken applications disabled. Some applications may not behave properly.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1170 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1236 | ||||
| #, c-format | ||||
| msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n" | ||||
| msgstr "\"%s\" found in configuration database is not a valid value for mouse button modifier\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1788 | ||||
| #, c-format | ||||
| msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n" | ||||
| msgstr "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1887 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "סביבת עבודה %d" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:691 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Screen %d on display '%s' is invalid\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:707 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager; try using the --replace option to replace the current window manager.\n" | ||||
| msgstr "Screen %d on display \"%s\" already has a window manager; try using the --replace option to replace the current window manager.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:734 | ||||
| #, c-format | ||||
| msgid "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:812 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Screen %d on display \"%s\" already has a window manager\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:998 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Could not release screen %d on display \"%s\"\n" | ||||
| @@ -421,45 +426,45 @@ msgstr "Unknown element %s" | ||||
| msgid "These windows do not support "save current setup" and will have to be restarted manually next time you log in." | ||||
| msgstr "חלונות אלו אינם תומכים ב"שמירת ההגדרות הנוכחיות", ויהיה צורך באתחול ידני בכניסה הבאה שלך." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Failed to open debug log: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "Failed to fdopen() log file %s: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Opened log file %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 | ||||
| #: ../src/core/util.c:119 | ||||
| #: ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter הודר ללא תמיכה במצב פירוט\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "Window manager: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:412 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Bug in window manager: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:443 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Window manager warning: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:471 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Window manager error: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7504 | ||||
| #: ../src/core/window.c:7596 | ||||
| #, c-format | ||||
| msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n" | ||||
| msgstr "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n" | ||||
| @@ -471,7 +476,7 @@ msgstr "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADE | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8228 | ||||
| #: ../src/core/window.c:8320 | ||||
| #, 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" | ||||
| msgstr "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" | ||||
| @@ -811,247 +816,247 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "top" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "bottom" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "left" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "right" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "frame geometry does not specify \"%s\" dimension" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "Button aspect ratio %g is not reasonable" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "Frame geometry does not specify size of buttons" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Gradients should have at least two colors" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, 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 custom color specification must have color name and fallback in parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid" | ||||
| msgstr "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format" | ||||
| msgstr "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Did not understand state \"%s\" in color specification" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "Did not understand color component \"%s\" in color specification" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format" | ||||
| msgstr "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Could not parse alpha value \"%s\" in blended color" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| msgstr "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "Could not parse shade factor \"%s\" in shaded color" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Shade factor \"%s\" in shaded color is negative" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Could not parse color \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Coordinate expression contains character '%s' which is not allowed" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains floating point number '%s' which could not be parsed" | ||||
| msgstr "Coordinate expression contains floating point number '%s' which could not be parsed" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "Coordinate expression contains integer '%s' which could not be parsed" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contained unknown operator at the start of this text: \"%s\"" | ||||
| msgstr "Coordinate expression contained unknown operator at the start of this text: \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "Coordinate expression was empty or not understood" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 | ||||
| #: ../src/ui/theme.c:2121 | ||||
| #: ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 | ||||
| #: ../src/ui/theme.c:2122 | ||||
| #: ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "Coordinate expression results in division by zero" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| msgstr "Coordinate expression tries to use mod operator on a floating-point number" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "Coordinate expression had an operand where an operator was expected" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "Coordinate expression ended with an operator instead of an operand" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between" | ||||
| msgstr "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 | ||||
| #: ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 | ||||
| #: ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "Coordinate expression had unknown variable or constant \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "Coordinate expression parser overflowed its buffer." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "Coordinate expression doesn't seem to have any operators or operands" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 | ||||
| #: ../src/ui/theme.c:2833 | ||||
| #: ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 | ||||
| #: ../src/ui/theme.c:2834 | ||||
| #: ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Theme contained an expression that resulted in an error: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style" | ||||
| msgstr "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 | ||||
| #: ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 | ||||
| #: ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5084 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Failed to load theme \"%s\": %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 | ||||
| #: ../src/ui/theme.c:5226 | ||||
| #: ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 | ||||
| #: ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5220 | ||||
| #: ../src/ui/theme.c:5227 | ||||
| #: ../src/ui/theme.c:5234 | ||||
| #: ../src/ui/theme.c:5241 | ||||
| #: ../src/ui/theme.c:5248 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "No <%s> set for theme \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5256 | ||||
| #, c-format | ||||
| msgid "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element" | ||||
| msgstr "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 | ||||
| #: ../src/ui/theme.c:5724 | ||||
| #: ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5663 | ||||
| #: ../src/ui/theme.c:5725 | ||||
| #: ../src/ui/theme.c:5788 | ||||
| #, c-format | ||||
| msgid "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 | ||||
| #: ../src/ui/theme.c:5732 | ||||
| #: ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5671 | ||||
| #: ../src/ui/theme.c:5733 | ||||
| #: ../src/ui/theme.c:5796 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Constant \"%s\" has already been defined" | ||||
| @@ -1423,7 +1428,7 @@ msgstr "מלל לא מורשה בתג <%s>" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> צוין פעמיים עבור ערכת נושא זו" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Failed to find a valid file for theme %s\n" | ||||
|   | ||||
							
								
								
									
										458
									
								
								po/ko.po
									
									
									
									
									
								
							
							
						
						
									
										458
									
								
								po/ko.po
									
									
									
									
									
								
							| @@ -18,8 +18,8 @@ msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-01 15:50+0000\n" | ||||
| "PO-Revision-Date: 2013-03-13 03:52+0900\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-09-09 04:46+0900\n" | ||||
| "Last-Translator: Changwoo Ryu <cwryu@debian.org>\n" | ||||
| "Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n" | ||||
| "Language: Korean\n" | ||||
| @@ -218,7 +218,7 @@ msgstr "오른쪽 절반 뷰" | ||||
|  | ||||
| #. 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:507 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -227,11 +227,11 @@ msgstr "" | ||||
| "다른 창 구성 관리 프로그램이 이미 디스플레이 \"%2$s\" 화면 %1$i번에서 실행 중" | ||||
| "입니다." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1111 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "파일에서 배경 텍스처를 만들 수 없습니다" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "삑소리 이벤트" | ||||
|  | ||||
| @@ -263,17 +263,17 @@ msgstr "기다리기(_W)" | ||||
| msgid "_Force Quit" | ||||
| msgstr "강제로 끝내기(_F)" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "콤포짓에 필요한 %s 확장 기능이 없습니다" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "X 윈도 시스템 디스플레이 '%s'을(를) 여는데 실패하였습니다\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -282,41 +282,41 @@ msgstr "" | ||||
| "다른 프로그램에서 이미 단축키로 변경 키 %2$x와(과) 키 %1$s을(를) 사용하고 있" | ||||
| "습니다\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\"은(는) 올바른 단축키가 아닙니다\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "세션 관리자와 연결 하지 않습니다" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "실행 중인 창 관리자를 바꿉니다" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "세션 관리 ID를 지정합니다" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "사용할 X 디스플레이" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "저장 파일에서 세션을 초기화 합니다" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "동기 X 호출을 합니다" | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "테마 디렉터리를 읽는 데 실패했습니다: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -324,6 +324,19 @@ msgstr "" | ||||
| "테마를 찾을 수 없습니다! %s이(가) 있고 올바른 테마가 들어 있는지 확인하십시" | ||||
| "오.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "내장 디스플레이" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "알 수 없는 %s인치" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -347,18 +360,20 @@ msgstr "버전을 출력합니다" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "사용할 머터 플러그인" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| msgstr "응용 프로그램에 대한 임시 방편을 막았습니다. 몇몇 응용 프로그램이 제대로 동작하지 않을것입니다.\n" | ||||
| msgstr "" | ||||
| "응용 프로그램에 대한 임시 방편을 막았습니다. 몇몇 응용 프로그램이 제대로 동작" | ||||
| "하지 않을것입니다.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "GSettings 키 %2$s에서 글꼴 지정 \"%1$s\"을(를) 분석할 수 없습니다\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -367,7 +382,7 @@ msgstr "" | ||||
| "설정 데이터베이스에서 찾은 \"%s\"이(가) 마우스 단추 변경 키의 올바른 값이 아" | ||||
| "닙니다\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -376,17 +391,17 @@ msgstr "" | ||||
| "설정 데이터베이스에서 찾은 \"%s\"이(가) 단축키 \"%s\"에 대한 올바른 값이 아닙" | ||||
| "니다\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "작업 공간 %d" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "디스플레이 '%2$s'의 화면 %1$d은(는) 잘못되었습니다\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -395,19 +410,19 @@ msgstr "" | ||||
| "디스플레이 \"%2$s\"의 화면 %1$d에 이미 창 관리자가 실행되고 있습니다. 현재 " | ||||
| "창 관리자를 무시하는 --replace 옵션을 써보십시오.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "디스플레이 \"%2$s\"의 화면 %1$d에 창 관리 선택을 가질 수 없습니다\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "" | ||||
| "디스플레이 \"%2$s\"의 화면 %1$d은(는) 이미 창 관리자가 실행되고 있습니다\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "디스플레이 \"%2$s\"의 화면 %1$d을(를) 떼어 놓을수 없습니다\n" | ||||
| @@ -467,44 +482,43 @@ msgstr "" | ||||
| "이 창은 "현재 설정 저장"을 지원하지 않기 때문에 다음 번에 로그인 " | ||||
| "할 때 수동으로 다시 시작해야 합니다." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "디버그 로그 열기 실패: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "로그 파일 %s을(를) fdopen()하기 실패: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "로그 파일 %s을(를) 엽니다\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "머터가 자세한 모드 지원 없이 컴파일 되었습니다\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "창 관리자: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "창 관리자의 벌레: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "창 관리자 주의: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "장 관리자 오류: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7539 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -520,7 +534,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8263 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -529,23 +543,23 @@ msgstr "" | ||||
| "%s 창에서 크기 변경이 불가능하다는 MWM 힌트를 설정했지만, 최소 크기 %d x %d " | ||||
| "및 최대 크기 %d x %d(으)로 설정했습니다. 앞뒤가 맞지 않습니다.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "응용 프로그램이 가짜 _NET_WM_PID %lu을(를) 설정하였습니다\n" | ||||
|  | ||||
| # <창제목> (on <기계>) | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (%s에서)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "%2$s에 대해 WM_TRANSIENT_FOR 0x%1$lx 창이 잘못되었습니다.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "%2$s에 대해 WM_TRANSIENT_FOR 0x%1$lx 창은 무한 반복입니다.\n" | ||||
| @@ -574,9 +588,7 @@ msgstr "창 0x%2$lx의 등록 정보 %1$s은(는) 잘못된 UTF-8이 들어 있 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n" | ||||
| msgstr "" | ||||
| "창 0x%2$lx의 등록 정보 %1$s은(는) 목록안의 항목 %3$d에 잘못된 UTF-8을 포함하" | ||||
| "고 있습니다\n" | ||||
| msgstr "창 0x%2$lx의 등록 정보 %1$s은(는) 목록안의 항목 %3$d에 잘못된 UTF-8 문자가 들어 있습니다\n" | ||||
|  | ||||
| #: ../src/mutter.desktop.in.h:1 ../src/mutter-wm.desktop.in.h:1 | ||||
| msgid "Mutter" | ||||
| @@ -705,109 +717,104 @@ msgstr "탭 팝업에서 창 선택" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "탭 팝업 취소" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "사용법: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "최소화(_N)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "최대화(_X)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "최대화 취소(_X)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "말아올리기(_U)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "펼치기(_U)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "옮기기(_M)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "크기 조정(_R)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "창 제목막대 화면에 표시(_S)" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "항상 위(_T)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "항상 현재 작업 공간에 놓기(_A)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "이 작업 공간에만 놓기(_O)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "왼쪽 작업 공간으로 옮기기(_L)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "오른쪽 작업 공간으로 옮기기(_I)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "위쪽 작업 공간으로 옮기기(_U)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "아래쪽 작업 공간으로 옮기기(_D)" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "닫기(_C)" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "작업 공간 %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "작업 공간 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "작업 공간 %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "다른 작업 공간으로 옮기기(_W)" | ||||
|  | ||||
| @@ -909,50 +916,50 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "맨 위" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "맨 아래" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "왼쪽" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "오른쪽" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "프레임 위치가 \"%s\"차원으로 지정되지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "" | ||||
| "프레임 위치가 가장자리 \"%2$s\" 가장자리의 \"%1$s\"차원으로 지정되지 않았습니" | ||||
| "다." | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "단추의 가로세로 비 %g이(가) 적당하지 않습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "프레임 위치가 단추의 크기로 지정되지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "서서히 변하는 색으로 지정하려면 최소 2색이 필요합니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -961,7 +968,7 @@ msgstr "" | ||||
| "GTK 사용자 지정 색상 지정은 색 이름과 대체할 색을 괄호 안에 써야 합니다. 예" | ||||
| "를 들어: gtk:custom(foo,bar). \"%s\"을(를) 분석할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -970,7 +977,7 @@ msgstr "" | ||||
| "gtk:custom의 color_name 파라미터 안에 잘못된 문자 '%c'. A-Za-z0-9-_ 문자만 허" | ||||
| "용합니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -979,7 +986,7 @@ msgstr "" | ||||
| "gtk:custom 형식은 \"gtk:custom(색이름,대체색)\"입니다, \"%s\"(은)는 형식에 맞" | ||||
| "지 않습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -988,7 +995,7 @@ msgstr "" | ||||
| "GTK 색상 지정은 중괄호안에 있어야 합니다. 예를 들어: gtk:fg[NORMAL], 여기서 " | ||||
| "NORMAL이 값입니다. \"%s\"을(를) 분석할 수 없습니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -997,17 +1004,17 @@ msgstr "" | ||||
| "GTK 색상 지정은 값 뒤에 중괄호로 닫혀 있어야 합니다. 예를 들어: gtk:fg" | ||||
| "[NORMAL], 여기서 NORMAL은 값입니다. \"%s\"을(를) 분석할 수 없습니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "색상 지정의 \"%s\" 값을 이해할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "색상 지정의 색상 구성요소 \"%s\"을(를) 이해할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1016,17 +1023,17 @@ msgstr "" | ||||
| "섞기 형식은 \"blend/bg_color/fg_color/alpha\"입니다, \"%s\"은(는) 형식에 맞" | ||||
| "지 않습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "색상 섞기에서 알파 값 \"%s\"을(를) 분석할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "색상 섞기에서 알파 값 \"%s\"은(는) 0.0 과 1.0사이의 값이 아닙니다" | ||||
| msgstr "색상 섞기에서 알파 값 \"%s\"은(는) 0.0과 1.0 사이의 값이 아닙니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| @@ -1034,79 +1041,78 @@ msgstr "" | ||||
| "그림자 형식은 \"shade/base_color/format\"입니다, \"%s\"(은)는 형식에 맞지 않" | ||||
| "습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "그림자색에서 그림자 인자 \"%s\"(을)를 해석할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "그림자색에서 그림자 인자 \"%s\"(은)는 음수입니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "색상 \"%s\"을(를) 해석할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "좌표식에 허용되지 않는 문자 '%s'(이)가 포함되어 있습니다" | ||||
| msgstr "좌표식에 허용되지 않는 문자 '%s'(이)가 들어 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "좌표식에 분석할 수 없는 부동소수점 숫자 '%s'이(가) 포함되어 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "좌표식에 분석할 수 없는 정수 '%s'이(가) 포함되어 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| "\"%s\"" | ||||
| msgstr "" | ||||
| "좌표식에 이 글자 시작부분에 알 수 없는 연산자가 포함되어 있습니다: \"%s\"" | ||||
| msgstr "좌표식에 이 글자 시작부분에 알 수 없는 연산자가 들어 있습니다: \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "좌표식이 비어있거나 이해할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "좌표식의 결과 값이 0로 나누었습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| msgstr "좌표식에서 부동소수점 수에 나머지 연산을 하려 합니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "좌표식에서 피연산자가 들어갈 곳에 연산자 \"%s\"이(가) 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "좌표식에서 연산자가 들어갈 곳에 피연산자가 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "좌표식에서 피연산자 대신에 연산자로 끝나있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1115,37 +1121,37 @@ msgstr "" | ||||
| "좌표식에서 피연산자가 없는 연산자 \"%2$c\"다음에 연산자 \"%1$c\"이(가) 있습니" | ||||
| "다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "좌표식에 알 수 없는 변수나 상수 \"%s\"이(가) 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "좌표 계산 파서의 버퍼가 크기를 넘어갔습니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "좌표식에 닫는 괄호는 있지만 여는 괄호가 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "좌표식에 여는 괄호는 있지만 닫는 괄호가 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "좌표식에 어떠한 연산자나 피연산자가 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "테마가 오류 값을 내는 표현식이 들어 있습니다: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1154,7 +1160,7 @@ msgstr "" | ||||
| "이 프레임 스타일에는 <button function=\"%s\" style=\"%s\" draw_ops=\"whatever" | ||||
| "\"/>가 지정되어야 합니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| @@ -1162,18 +1168,18 @@ msgstr "" | ||||
| "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" state=\"whatever\"/> 가 없습니" | ||||
| "다" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "테마 \"%s\"을(를) 읽을 수 없습니다: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../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\"의 <%1$s>(이)가 설정되지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1182,14 +1188,14 @@ msgstr "" | ||||
| "테마 \"%2$s\"의 창 형식 \"%1$s\"에 대한 프레임 스타일이 없습니다,<window " | ||||
| "type=\"%3$s\" style_set=\"whatever\"/> 엘리먼트를 추가하십시오" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "" | ||||
| "사용자 정의 상수는 대문자로 시작되어야 합니다. \"%s\"은(는) 그렇지 않습니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "상수 \"%s\"은(는) 이미 지정되어 있습니다" | ||||
| @@ -1324,9 +1330,7 @@ msgstr "<%s> 엘리먼트는 <%s> 아래에 허용되지 않습니다" | ||||
| msgid "" | ||||
| "Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio\" " | ||||
| "for buttons" | ||||
| msgstr "" | ||||
| "단추의 button_width/button_height 와 \"aspect_ratio\"를 한꺼번에 지정할 수 없" | ||||
| "습니다" | ||||
| msgstr "단추의 \"button_width\"/\"button_height\"와 \"aspect_ratio\"를 한꺼번에 지정할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1450 | ||||
| #, c-format | ||||
| @@ -1387,7 +1391,7 @@ msgstr "\"%s\"라 불리는 <draw_ops>는 정의되지 않았습니다" | ||||
| #: ../src/ui/theme-parser.c:2706 ../src/ui/theme-parser.c:2802 | ||||
| #, c-format | ||||
| msgid "Including draw_ops \"%s\" here would create a circular reference" | ||||
| msgstr "draw_ops를 포함하는 \"%s\"이(가) 자기 자신을 참조하고 있습니다" | ||||
| msgstr "여기서 draw_ops \"%s\"을(를) 포함하면 순환 참조가 됩니다." | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2917 | ||||
| #, c-format | ||||
| @@ -1569,205 +1573,7 @@ msgstr "<%s> 엘리먼트 안에 텍스트가 허용되지 않습니다" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "이 테마에서 <%s> 태그가 두 번 지정되었습니다" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "%s 테마의 올바른 파일을 찾는 데 실패했습니다\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "창(_W)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "대화 상자(_D)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "모달 대화 상자(_M)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "도구(_U)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "스플래시 화면(_S)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "위 도크(_T)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "아래 도크(_B)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "왼쪽 도크(_L)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "오른쪽 도크(_R)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "모든 도크(_A)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "데스크톱(_K)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "이 창을 하나 더 엽니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "'열기' 아이콘이 들어 있는 데모 단추입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "'끝내기' 아이콘이 들어 있는 데모 단추입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "예제 대화 상자의 예제 메시지입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "가짜 메뉴 항목 %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "테두리만 있는 창" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "모음" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "보통 프로그램 창" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "대화 상자" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "모달 대화 상자" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "도구 팔레트" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "떼어내기 메뉴" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "테두리" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "부착한 모달 대화 상자" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "단추 배치 테스트 %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "창 프레임 하나를 그리는 데 %g ms" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "사용법: metacity-theme-viewer [테마이름]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "테마를 읽어들이는 데 오류가 발생했습니다: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "\"%s\" 테마를 읽어들이는 데 %g초\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "보통 제목 글꼴" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "작은 제목 글꼴" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "큰 제목 글꼴" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "단추 배치" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "벤치마크" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "창 제목이 여기에 들어갑니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "%d개 프레임을 그리는 데 클라이언트 입장에서 %g초가 걸렸습니다(한 프레임에 %g " | ||||
| "ms). 그리고 X 서버 리소스까지 포함해 실제 시간으로 %g 초가 걸렸습니다(한 프레" | ||||
| "임에 %g ms).\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "위치 표현식 테스트가 참을 리턴했지만 오류가 발생했습니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "위치 표현식 테스트가 거짓을 리턴했지만 오류가 발생하지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "오류가 발생해야 하지만 발생하지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "오류 %d번이 발생해야 하지만 오류 %d번이 발생했습니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "오류가 발생하면 안 되지만 오류 한 개가 발생했습니다: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "가로값이 %d입니다. 와야 하는 값은 %d입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "세로값이 %d입니다. 와야 하는 값은 %d입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "좌표 표현식 %d개를 %g초에 파싱했습니다(평균 %g초)\n" | ||||
|   | ||||
							
								
								
									
										176
									
								
								po/nb.po
									
									
									
									
									
								
							
							
						
						
									
										176
									
								
								po/nb.po
									
									
									
									
									
								
							| @@ -4,10 +4,10 @@ | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter 3.7.x\n" | ||||
| "Project-Id-Version: mutter 3.9.x\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-03-04 14:57+0100\n" | ||||
| "PO-Revision-Date: 2013-03-04 14:57+0100\n" | ||||
| "POT-Creation-Date: 2013-08-08 22:14+0200\n" | ||||
| "PO-Revision-Date: 2013-05-28 09:48+0200\n" | ||||
| "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" | ||||
| "Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n" | ||||
| "Language: \n" | ||||
| @@ -205,18 +205,18 @@ msgstr "Visning delt til høyre" | ||||
|  | ||||
| #. 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:509 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "En annen compositing manager kjører skjerm %i på display «%s»." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1180 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "bakgrunnstekstur kunne ikke lages fra fil" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "Klokkehendelse" | ||||
|  | ||||
| @@ -250,17 +250,17 @@ msgstr "_Vent" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Tvungen nedstenging" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Feil under åpning av X Window System skjerm «%s»\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1138 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -269,41 +269,41 @@ msgstr "" | ||||
| "Et annet program bruker allerede nøkkelen %s med modifikatorer %x som " | ||||
| "binding\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1335 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "«%s» er ikke en gyldig aksellerator\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Deaktiver tilkobling til sesjonshåndtereren" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Erstatt kjørende vindushåndterer" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Oppgi sesjonshåndterings-ID" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "X-skjerm som skal brukes" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Initier sesjonen fra en lagret fil" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Gjør X-kall synkrone" | ||||
|  | ||||
| #: ../src/core/main.c:533 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Feil under søk i temakatalog: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:549 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -333,7 +333,7 @@ msgstr "Skriv versjonsnummer" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Mutter-tillegg som skal brukes" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -341,12 +341,12 @@ msgstr "" | ||||
| "Funksjonalitet for å gå rundt ødelagte programmer er deaktivert. Noen " | ||||
| "programmer vil kanskje ikke oppføre seg korrekt.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Kunne ikke tolke skriftbeskrivelsen «%s» fra GSettings-nøkkel %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -355,7 +355,7 @@ msgstr "" | ||||
| "«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for endring av " | ||||
| "musknapp\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -364,17 +364,17 @@ msgstr "" | ||||
| "«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for " | ||||
| "tastaturbinding «%s»\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Arbeidsområde %d" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:691 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Skjerm %d på display «%s» er ugyldig\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:707 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -383,19 +383,19 @@ msgstr "" | ||||
| "Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke " | ||||
| "flagget --replace for å erstatte aktiv vindushåndterer.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:734 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "" | ||||
| "Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:812 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:998 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Kunne ikke slippe skjerm %d på display «%s»\n" | ||||
| @@ -455,44 +455,44 @@ msgstr "" | ||||
| "Disse vinduene støtter ikke "lagre aktiv konfigurasjon"og vil " | ||||
| "måtte startes på nytt manuelt neste gang du logger inn." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Feil under åpning av feilsøkingslogg: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "Feil under fdopen() av loggfil %s: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Åpnet loggfil %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #: ../src/core/util.c:119 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter er kompilert uten støtte for «verbose» modus\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "Vindushåndterer: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:412 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Feil i vindushåndterer: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:443 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Advarsel fra vindushåndterer: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:471 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Feil i vindushåndterer: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7539 | ||||
| #: ../src/core/window.c:7513 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -508,7 +508,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8263 | ||||
| #: ../src/core/window.c:8237 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -685,6 +685,8 @@ msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "" | ||||
| "Nye vinduer som i utgangspunktet er samme størrelse som skjermen vil " | ||||
| "automatisk bli maksimert hvis denne slås på." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:19 | ||||
| msgid "Select window from tab popup" | ||||
| @@ -898,48 +900,48 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "topp" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "bunn" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "venstre" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "høyre" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "rammegeometrien spesifiserer ikke «%s»-dimensjon" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "rammegeometri spesifiserer ikke dimensjon «%s» for kant «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "Aspektrate %g for knapp er ikke fornuftig" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "Rammegeometrien spesifiserer ikke størrelse på knapper" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Gradienter må ha minst to farger" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -948,7 +950,7 @@ msgstr "" | ||||
| "Egendefinert GTK-fargespesifikasjon må ha fargenavn og reserve i parantes, f." | ||||
| "eks gtk:custom(foo,bar); kunne ikke lese «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -957,7 +959,7 @@ msgstr "" | ||||
| "Ugyldig tegn «%c» i parameter color_name for gtk:custom, kun A-Za-z0-9-_ er " | ||||
| "gyldig" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -966,7 +968,7 @@ msgstr "" | ||||
| "Gtk:custom-format er «gtk:custom(color_name,fallback)», «%s» passer ikke i " | ||||
| "formatet" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -975,7 +977,7 @@ msgstr "" | ||||
| "GTK-fargespesifikasjon må ha tilstand i klammer, f.eks. gtk:fg[NORMAL], hvor " | ||||
| "NORMAL er tilstanden; kunne ikke lese «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -984,17 +986,17 @@ msgstr "" | ||||
| "GTK-fargespesifikasjon må ha en avsluttende klamme etter tilstanden, f.eks. " | ||||
| "gtk:fg[NORMAL], hvor NORMAL er tilstanden; kunne ikke lese «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Forsto ikke tilstand «%s» i fargespesifikasjonen" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "Forsto ikke fargekomponent «%s» i fargespesifikasjonen" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1003,56 +1005,56 @@ msgstr "" | ||||
| "Blandingsformat er «blend/bg_color/fg_color/alpha», «%s» passer ikke i " | ||||
| "formatet" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Kunne ikke lese alpha-verdi «%s» i blandet farge" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "Alpha-verdi «%s» i blandet farge er ikke mellom 0.0 og 1.0" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| msgstr "" | ||||
| "Skyggeformatet er «shade/base_color/factor», «%s» passer ikke i formatet" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "Kunne ikke lese skyggefaktor «%s» i skyggelagt farge" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Skyggefaktor «%s» i skyggelagt farge er negativ" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Kunne ikke lese farge «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Koordinatuttrykk inneholder tegn «%s» som ikke er tillatt" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "Koordinatuttrykk inneholder flyttall «%s» som ikke kunne tolkes" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "Koordinatuttrykk inneholder heltall «%s» som ikke kunne tolkes" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -1061,39 +1063,39 @@ msgstr "" | ||||
| "Koordinatuttrykket inneholdt en ukjent operator ved begynnelsen av denne " | ||||
| "teksten: «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "Koordinatuttrykket var tomt eller ble ikke forstått" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "Koordinatuttrykket resulterer i divisjon med null" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| msgstr "Koordinatuttrykket prøver å bruke mod-operator på et flyttall" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "Koordinatuttrykket har en operator «%s» hvor en operand var ventet" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "Koordinatuttrykket hadde en operand hvor en operator var ventet" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "Koordinatuttrykket sluttet med en operator i stedet for en operand" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1102,38 +1104,38 @@ msgstr "" | ||||
| "Koordinatuttrykket har en operator «%c» etter en operator «%c» og ingen " | ||||
| "operand mellom dem." | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "Koordinatuttrykket haddeen ukjent variabel eller konstant «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "Tolkeren for koordinatuttrykk oversteg buffergrensen." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "Koordinatuttrykket hadde en parantes slutt uten parantes start" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "Koordinatuttrykket hadde en åpen parantes uten en avsluttende parantes" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "" | ||||
| "Koordinatuttrykket ser ikke ut til å ha noen operatorer eller operander" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Tema inneholdt et uttrykk som resulterte i en feil: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1142,25 +1144,25 @@ msgstr "" | ||||
| "<button function=«%s» state=«%s» draw_ops=«ett-eller-annet»/> må " | ||||
| "spesifiseres for denne rammestilen" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "" | ||||
| "Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5084 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Klarte ikke å laste tema «%s»: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5220 ../src/ui/theme.c:5227 ../src/ui/theme.c:5234 | ||||
| #: ../src/ui/theme.c:5241 ../src/ui/theme.c:5248 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "<%s> er ikke satt for tema «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5256 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1169,14 +1171,14 @@ msgstr "" | ||||
| "Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window " | ||||
| "type=«%s» style_set=«ett-eller-annet»/>-element" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5663 ../src/ui/theme.c:5725 ../src/ui/theme.c:5788 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "" | ||||
| "Brukerdefinerte konstanter må begynne med stor bokstav; «%s» gjør ikke det" | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5671 ../src/ui/theme.c:5733 ../src/ui/theme.c:5796 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Konstant «%s» er allerede definert" | ||||
| @@ -1557,7 +1559,7 @@ msgstr "Ingen tekst er tillatt inne i element <%s>" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> spesifisert to ganger for dette temaet" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Fant ikke en gyldig fil for tema %s\n" | ||||
|   | ||||
							
								
								
									
										18
									
								
								po/sr.po
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								po/sr.po
									
									
									
									
									
								
							| @@ -10,8 +10,8 @@ msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter" | ||||
| "&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-01 15:50+0000\n" | ||||
| "PO-Revision-Date: 2013-03-11 11:40+0200\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-09-06 09:19+0200\n" | ||||
| "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" | ||||
| "Language-Team: Serbian <gnom@prevod.org>\n" | ||||
| "Language: sr\n" | ||||
| @@ -320,6 +320,20 @@ msgstr "" | ||||
| "Не могу да пронађем тему! Проверите да „%s“ постоји и да садржи уобичајене " | ||||
| "теме.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Уграђени дисплеј" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| #| msgid "Unknown element %s" | ||||
| msgid "Unknown %s" | ||||
| msgstr "Непознат %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
|   | ||||
| @@ -10,8 +10,8 @@ msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter" | ||||
| "&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-01 15:50+0000\n" | ||||
| "PO-Revision-Date: 2013-03-11 11:40+0200\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-09-06 09:19+0200\n" | ||||
| "Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n" | ||||
| "Language-Team: Serbian <gnom@prevod.org>\n" | ||||
| "Language: sr\n" | ||||
| @@ -320,6 +320,20 @@ msgstr "" | ||||
| "Ne mogu da pronađem temu! Proverite da „%s“ postoji i da sadrži uobičajene " | ||||
| "teme.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Ugrađeni displej" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| #| msgid "Unknown element %s" | ||||
| msgid "Unknown %s" | ||||
| msgstr "Nepoznat %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
|   | ||||
							
								
								
									
										282
									
								
								po/ta.po
									
									
									
									
									
								
							
							
						
						
									
										282
									
								
								po/ta.po
									
									
									
									
									
								
							| @@ -7,17 +7,17 @@ | ||||
| # Dinesh Nadarajah <n_dinesh@yahoo.com>, 2003. | ||||
| # Jayaradha N <jaya@pune.redhat.com>, 2004. | ||||
| # Felix <ifelix@redhat.com>, 2006. | ||||
| # Dr.T.Vasudevan <agnihot3@gmail.com>, 2007, 2010, 2011, 2012. | ||||
| # Dr.T.Vasudevan <agnihot3@gmail.com>, 2007, 2010, 2011, 2012, 2013. | ||||
| # Dr.T.vasudevan <agnihot3@gmail.com>, 2009. | ||||
| # I. Felix <ifelix@redhat.com>, 2009, 2011. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: metacity.gnome-2-26.ta\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2012-12-02 17:25+0530\n" | ||||
| "PO-Revision-Date: 2012-12-02 18:58+0530\n" | ||||
| "POT-Creation-Date: 2013-03-23 14:03+0530\n" | ||||
| "PO-Revision-Date: 2013-03-23 14:11+0530\n" | ||||
| "Last-Translator: Dr.T.Vasudevan <drtvasudevan@gmail.com>\n" | ||||
| "Language-Team: American English <gnome-tamil-translation@googlegroups.com>\n" | ||||
| "Language-Team: American English <<gnome-tamil-translation@googlegroups.com>>\n" | ||||
| "Language: en_US\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| @@ -70,58 +70,62 @@ msgid "Switch applications" | ||||
| msgstr "பயன்பாடுகளுக்கிடையே மாறவும்" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:11 | ||||
| msgid "Switch windows" | ||||
| msgstr "சாளரத்தை மாற்றுக" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:12 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "ஒரு பயன்பாட்டின் சாளரங்களிடையே மாறவும்" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:12 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:13 | ||||
| msgid "Switch system controls" | ||||
| msgstr "கணினி கட்டுப்பாடுகளை மாற்றவும்" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:13 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:14 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "சாளரங்களிடையே உடனடியாக நகரவும்" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:14 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:15 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "ஒரு பயன்பாட்டின் சாளரங்களிடையே நேரடியாக நகரவும்" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:15 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:16 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "கணினி கட்டுப்பாடுகளை நேரடியாக மாற்றவும்" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:16 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:17 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "எல்லா வழக்கமான சாளரங்களையும் மறை" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:17 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:18 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "பணியிடம் 1க்கு மாறு" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:18 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:19 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "பணியிடம் 2 க்கு மாறு" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:19 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:20 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "பணியிடம் 3 க்கு மாறு" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:20 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:21 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "பணியிடம் 4 க்கு மாறு" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:21 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:22 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "வேலையிடத்தை இடப்பக்கத்திற்கு நகர்த்தவும்" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:22 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:23 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "வேலையிடத்தை வலப்பக்கத்திற்கு நகர்த்தவும்" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:23 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:24 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "வேலையிடத்தை மேல்பக்கத்திற்கு நகர்த்தவும்" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:24 | ||||
| #: ../src/50-mutter-navigation.xml.in.h:25 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "வேலையிடத்தை கீழே நகர்த்தவும் " | ||||
|  | ||||
| @@ -170,8 +174,8 @@ msgid "Close window" | ||||
| msgstr "சாளரம் மூடவும்" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:9 | ||||
| msgid "Minimize window" | ||||
| msgstr "சாளரத்தை சிறிதாக்கு" | ||||
| msgid "Hide window" | ||||
| msgstr "சாளரத்தை மறை " | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:10 | ||||
| msgid "Move window" | ||||
| @@ -217,7 +221,7 @@ msgstr "வலது பக்கத்தில் பிளந்து பா | ||||
|  | ||||
| #. 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 | ||||
| #: ../src/compositor/compositor.c:568 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -225,7 +229,11 @@ msgid "" | ||||
| msgstr "" | ||||
| " %i திரையில் காட்சி \"%s\" இல் இன்னொரு சாளர மேலாளர் இயங்கிக்கொண்டு இருக்கிறது." | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/compositor/meta-background.c:1191 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "கோப்பிலிருந்து பின் புல இழை நய அமைப்பை உருவாக்க முடியவில்லை." | ||||
|  | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "மணி நிகழ்ச்சி" | ||||
|  | ||||
| @@ -260,17 +268,17 @@ msgstr "_காத்திரு" | ||||
| msgid "_Force Quit" | ||||
| msgstr "கட்டாய வெளியேற்றம் (_F)" | ||||
|  | ||||
| #: ../src/core/display.c:397 | ||||
| #: ../src/core/display.c:401 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "நீட்சி  %s  காணப்படவில்லை பவின் ஆக்கத்துக்கு அது அவசியம்" | ||||
|  | ||||
| #: ../src/core/display.c:494 | ||||
| #: ../src/core/display.c:493 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "X சாளர காட்சியை திறப்பதில் தோல்வி '%s'\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:860 | ||||
| #: ../src/core/keybindings.c:935 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -278,36 +286,41 @@ msgid "" | ||||
| msgstr "" | ||||
| "விசை %s ஐ மாற்றி  %x ஓடு இணைத்து வேறு நிரல் பயன்படுத்திக்கொண்டிருக்கிறது\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/keybindings.c:1135 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\" செல்லாத முடுக்கி\n" | ||||
|  | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "அமர்வு மேலாளருடன் இருக்கும் இணைப்பை முடக்கு" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "இயங்கும் சாளர மேலாளரை  மாற்றுக" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "அமர்வு மேலாண் எண்ணை குறிப்பிடு" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "பயன்படுத்த வேண்டிய X காட்சி" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "அமர்வை சேவ்பைல் இலிருந்து துவக்கு " | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "எக்ஸ் அழைப்புகளை ஒத்திசை." | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "கருப்பொருள் அடைவை வருடுவதில் தோல்வி: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -341,7 +354,7 @@ msgstr "அச்சு பதிப்பு" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "பயன்படுத்த க்ளட்டர் செருகிகள்" | ||||
|  | ||||
| #: ../src/core/prefs.c:1079 | ||||
| #: ../src/core/prefs.c:1095 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -349,14 +362,14 @@ msgstr "" | ||||
| "உடைந்த பயன்பாடுகளின் செயல்பாடு தடைசெய்யப்பட்டது, சில பயன்பாடுகள் சரியாக வேலை " | ||||
| "செய்யாது.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1154 | ||||
| #: ../src/core/prefs.c:1170 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "" | ||||
| "எழுத்துரு விளக்கம் \"%s\" ஐ ஜிசெட்டிங்க்ஸ் விசையிலிருந்து பகுக்க முடியவில்லை %" | ||||
| "s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1220 | ||||
| #: ../src/core/prefs.c:1236 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -364,24 +377,24 @@ msgid "" | ||||
| msgstr "" | ||||
| "அமைப்பு பாங்கில் உள்ள \"%s\" சுட்டி பட்டன் மாற்றியில் செல்லாத மதிப்பு\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1757 | ||||
| #: ../src/core/prefs.c:1788 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| "\"%s\"\n" | ||||
| msgstr "\"%s\" அமைப்பு தரவுத்தளத்தில் உள்ள மதிப்பு செல்லாத கீபைன்டிங்\"%s\"\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1854 | ||||
| #: ../src/core/prefs.c:1887 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "வேலையிடம் %d" | ||||
|  | ||||
| #: ../src/core/screen.c:652 | ||||
| #: ../src/core/screen.c:691 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "திரை %d காட்சி '%s' இல் செல்லாது\n" | ||||
|  | ||||
| #: ../src/core/screen.c:668 | ||||
| #: ../src/core/screen.c:707 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -390,18 +403,18 @@ msgstr "" | ||||
| "திரை %d காட்சி \"%s\" க்கு சாளர மேலாளர் உள்ளது; --replace தேர்வை பயன்படுத்தி " | ||||
| "தற்போதைய சாளரத்தை மாற்றவும்.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:695 | ||||
| #: ../src/core/screen.c:734 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "திரையில் சாளர மேலாளர் தேர்வை பெறமுடியவில்லை %d காட்சி \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/screen.c:750 | ||||
| #: ../src/core/screen.c:812 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "திரை %d யின் காட்சி \"%s\" க்கு சாளர மேலாளர் ஏற்கெனவே உள்ளது\n" | ||||
|  | ||||
| #: ../src/core/screen.c:935 | ||||
| #: ../src/core/screen.c:998 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "திரை %d ஐ விடுவிக்க முடியவில்லை \"%s\"\n" | ||||
| @@ -462,44 +475,44 @@ msgstr "" | ||||
| " "தற்போதைய அமைப்பை சேமி" செயலுக்கு ஆதரவு இல்லை மேலும் அடுத்த முறை " | ||||
| "உள்நுழையும் போது நீங்களாக துவக்க வேண்டும்" | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "பிழைதிருத்த பட்டியலை திறப்பதில் தோல்வி: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "fdopen() பதிவுக்கோப்பு தோல்வி %s: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "பதிவுக்கோப்பு திறக்கப்பட்டது %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #: ../src/core/util.c:119 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "வெர்போஸ் ஆதரவு இல்லாமல் மட்டர் அமைக்கப்பட்டது\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "சாளர மேலாளர்:" | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:412 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "சாளர மேலாளரில் பிழை" | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:443 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "சாளர மேலாளர் எச்சரிக்கை:" | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:471 | ||||
| msgid "Window manager error: " | ||||
| msgstr "சாளர மேலாளர் பிழை" | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7240 | ||||
| #: ../src/core/window.c:7596 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -516,7 +529,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:7905 | ||||
| #: ../src/core/window.c:8320 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -526,22 +539,22 @@ msgstr "" | ||||
| "அதிக " | ||||
| "பட்ச அளவு %d x %d; பொருள் தரும்படி இல்லை.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:274 | ||||
| #: ../src/core/window-props.c:318 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "பயன்பாடு பொய்யான ஒரு _NET_WM_PID %lu ஐ அமைத்தது\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:393 | ||||
| #: ../src/core/window-props.c:434 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (%s மீது)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1448 | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "செல்லாத WM_TRANSIENT_FOR சாளரம் 0x%lx இதற்கு குறிக்கப்பட்டது: %s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1459 | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR சாளரம் 0x%lx %s க்கு சுழல் நிகழ்வை உருவாக்கும்.\n" | ||||
| @@ -693,10 +706,22 @@ msgstr "" | ||||
| "இந்த மதிப்பை அடைய மறை விளிம்பு சேர்க்கப்படும்." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:17 | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "ஏறத்தாழ திரை அளவுள்ள சாளரங்களை தானியங்கியாக அதிக பட்ச அளவாக்கு" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:18 | ||||
| msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "" | ||||
| "செயலாக்கினால், துவக்கத்தில் ஏறத்தாழ திரை அளவுள்ள புதிய சாளரங்கள் தானியங்கியாக " | ||||
| "அதிக பட்ச அளவாக்கப்படும்" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:19 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "கீற்றுத்துள்ளலிருந்து சாளரத்தை தேர்ந்தெடுக்கவும்." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:18 | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:20 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "கீற்று துள்ளுவதை இரத்து செய்" | ||||
|  | ||||
| @@ -899,53 +924,53 @@ msgstr "Mod5" | ||||
| #. Translators: This represents the size of a window.  The first number is | ||||
| #. * the width of the window and the second is the height. | ||||
| #. | ||||
| #: ../src/ui/resizepopup.c:113 | ||||
| #: ../src/ui/resizepopup.c:136 | ||||
| #, c-format | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:234 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "மேல்" | ||||
|  | ||||
| #: ../src/ui/theme.c:236 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "கீழ்" | ||||
|  | ||||
| #: ../src/ui/theme.c:238 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "இடது" | ||||
|  | ||||
| #: ../src/ui/theme.c:240 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "வலது" | ||||
|  | ||||
| #: ../src/ui/theme.c:268 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "சட்ட வடிவியல் \"%s\" அளவை குறிப்பிடவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:287 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "\"%s\" ஓரத்திற்கு வடிவியல் \"%s\" அளவை குறிப்பிடவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:324 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "பட்டன் அளவு விகிதம் %g சரியில்ல" | ||||
|  | ||||
| #: ../src/ui/theme.c:336 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "சட்ட அளவு பட்டன் அளவை குறிப்பிடவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:1049 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "க்ரேடியன்டில் இரண்டு நிறங்களாவது இருக்க வேண்டும்" | ||||
|  | ||||
| #: ../src/ui/theme.c:1201 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -955,7 +980,7 @@ msgstr "" | ||||
| "அடைப்புக்குறிகளுக்குள்ளும்  " | ||||
| "கொண்டிருக்க வேண்டும் உம்  gtk:custom(foo,bar); \"%s\" ஐ பகுக்க முடியவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:1217 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -965,7 +990,7 @@ msgstr "" | ||||
| "A-Za-z0-9-" | ||||
| "_ ஆகியன மட்டுமே செல்லுபடியாகும்." | ||||
|  | ||||
| #: ../src/ui/theme.c:1231 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -974,7 +999,7 @@ msgstr "" | ||||
| "ஜிடிகே:தனிப்பயன் ஒழுங்கு \"gtk:custom(color_name,fallback)\", \"%s\" இந்த " | ||||
| "ஒழுங்குக்கு பொருந்தாது" | ||||
|  | ||||
| #: ../src/ui/theme.c:1276 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -984,7 +1009,7 @@ msgstr "" | ||||
| "நிலையை " | ||||
| "குறிக்கும் பகுக்க முடியாது \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1290 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -994,17 +1019,17 @@ msgstr "" | ||||
| "NORMAL " | ||||
| "நிலையை குறிக்கும் பகுக்க முடியாது \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1301 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "நிலை \"%s\" வண்ண குறிப்பில் புரிந்துகொள்ள முடியவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:1314 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "நிலை \"%s\" வண்ண குறிப்பு பொருளில் புரிந்துகொள்ள முடியவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:1343 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1013,18 +1038,18 @@ msgstr "" | ||||
| "வளைந்த அமைப்பு \"blend/bg_color/fg_color/alpha\", \"%s\" இந்த வடிவமைப்பிற்கு " | ||||
| "பொருந்தாது" | ||||
|  | ||||
| #: ../src/ui/theme.c:1354 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "ஆம்ஃபா மதிப்பை \"%s\" வளைந்த நிறத்தில் பகுக்க முடியவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:1364 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "" | ||||
| "ஆல்ஃபா மதுப்பு \"%s\"வளைவு நிறத்தில் 0.0 க்கும் 1.0 க்கும் இடையில் இல்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:1411 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| @@ -1032,39 +1057,39 @@ msgstr "" | ||||
| "நிழல் வடிவமைப்பு \"shade/base_color/factor\", \"%s\" இந்த அமைப்பிற்கு " | ||||
| "பொருந்தாது" | ||||
|  | ||||
| #: ../src/ui/theme.c:1422 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "நிழல்விகிதத்தை \"%s\" நிறத்தோடு பகுக்க முடியாது" | ||||
|  | ||||
| #: ../src/ui/theme.c:1432 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "நிழல் விகிதம் \"%s\" முழுக்களாக உள்ளது " | ||||
|  | ||||
| #: ../src/ui/theme.c:1461 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "\"%s\" நிறத்தை பகுக்க முடியவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:1778 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "அச்சுக்கள் எழுத்தால் குறிக்கப்பட்டுள்ளது '%s' க்கு அனுமதி இல்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:1805 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "அச்சுக்கள் பின்ன எண்ணால் குறிக்கப்பட்டுள்ளது '%s' ஐ பகுக்க முடியாது" | ||||
|  | ||||
| #: ../src/ui/theme.c:1819 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "அச்சுக்கள் இயல் எண்ணால் குறிக்கப்பட்டுள்ளது '%s' ஐ பகுக்க முடியாது" | ||||
|  | ||||
| #: ../src/ui/theme.c:1940 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -1072,41 +1097,41 @@ msgid "" | ||||
| msgstr "" | ||||
| "உரையின் துவக்கத்தில் அச்சின் கூற்றில் தெரியாத செயல் இடம்பெற்றுள்ளது \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1997 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "அச்சு கூற்று காலியாக உள்ளது அல்லது புரியவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "அச்சு கூற்று பூஜ்ஜியத்தால் வகுத்தல் பிழையை தந்தது" | ||||
|  | ||||
| #: ../src/ui/theme.c:2162 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| msgstr "அச்சு கூற்று mod ஆப்பரேட்டரை பின்ன எண்ணில் பயன்படுத்த முயல்கிறது" | ||||
|  | ||||
| #: ../src/ui/theme.c:2218 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "" | ||||
| "அச்சு கூற்றில் ஆப்பரேட்டர் உள்ளது \"%s\" ஆப்பரன் எதிர்பார்க்கப்படுகிறது" | ||||
|  | ||||
| #: ../src/ui/theme.c:2227 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "" | ||||
| "அச்சு கூற்றில் ஆப்பரன்ட் உள்ளது ஆனால் ஆப்பரேட்டர் எதிர்பார்க்கப்படுகிறது" | ||||
|  | ||||
| #: ../src/ui/theme.c:2235 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "அச்சு கூற்றில் ஆப்பரன்ட்டுக்கு பதில் ஆப்பரேட்டரால் முடிந்தது" | ||||
|  | ||||
| #: ../src/ui/theme.c:2245 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1115,39 +1140,39 @@ msgstr "" | ||||
| "அச்சு கூற்றில்  \"%c\" ஆப்பரேட்டர் உள்ளது \"%c\" ஆப்பரேட்டருக்கு ஆப்பரன்ட் " | ||||
| "இல்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "அச்சு கூற்றில் செல்லாத மாற்றி மற்றும் கான்ஸ்ட்டன் உள்ளது \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:2495 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "ஆயத்தொலைவு தெரிவிப்பு பகுப்பி அதன் இடையகத்தை நிரப்பியது" | ||||
|  | ||||
| #: ../src/ui/theme.c:2524 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "" | ||||
| "அச்சு கூற்றில் மூடிய அடைப்புக்குறி உள்ளது ஆனால் திறந்த அடைப்புகுறி இல்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:2588 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "" | ||||
| "அச்சு கூற்றில் திறந்த அடைப்புக்குறி உள்ளது ஆனால் மூடிய அடைப்புகுறி இல்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:2599 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "அச்சுக்கூற்றில் ஆப்பரன்ட் மற்றும் ஆப்பரேட்டர் காணப்படவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "கருப்பொருளில் ஒரு கூற்று இருந்தது. அது பிழையை ஏற்படுத்தியது : %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4498 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1157,25 +1182,25 @@ msgstr "" | ||||
| "பாணிக்கு " | ||||
| "குறிப்பிடப்பட வேண்டும்" | ||||
|  | ||||
| #: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "" | ||||
| "காணவில்லை <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #: ../src/ui/theme.c:5084 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "கருப்பொருளை ஏற்றுவதில் தோல்வி \"%s\": %s\n" | ||||
|  | ||||
| #: ../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 | ||||
| #: ../src/ui/theme.c:5220 ../src/ui/theme.c:5227 ../src/ui/theme.c:5234 | ||||
| #: ../src/ui/theme.c:5241 ../src/ui/theme.c:5248 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "இல்லை<%s> கருப்பொருளுக்காக அமைக்கப்பட்டது \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #: ../src/ui/theme.c:5256 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1184,7 +1209,7 @@ msgstr "" | ||||
| "சட்ட பாணி சாளர வகை இல்லை\"%s\" கருப்பொருளில் \"%s\", <window type=\"%s\" " | ||||
| "style_set=\"whatever\"/> உறுப்பை சேர்க்கவும்" | ||||
|  | ||||
| #: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775 | ||||
| #: ../src/ui/theme.c:5663 ../src/ui/theme.c:5725 ../src/ui/theme.c:5788 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| @@ -1192,7 +1217,7 @@ msgstr "" | ||||
| "பயனீட்டாளர்-குறிப்பிட்ட கான்ஸ்டன் பெரிய எழுத்தில் துவங்க வேண்டும்; \"%s\" " | ||||
| "இல்லை" | ||||
|  | ||||
| #: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783 | ||||
| #: ../src/ui/theme.c:5671 ../src/ui/theme.c:5733 ../src/ui/theme.c:5796 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "கான்ஸ்டன் \"%s\" ஏற்கெனவே குறிப்பிடப்பட்டது" | ||||
| @@ -1575,7 +1600,7 @@ msgstr "உறுப்பிற்குள் உரை அனுமதி இ | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> இந்த கருப்பொருளுக்கு இரண்டுமுறை குறிப்பிட்டுள்ளது" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "%s கருத்துக்கு செல்லுபடியாகும் கோப்பு கண்டுபிடித்தல் தோல்வியுற்றது \n" | ||||
| @@ -1681,56 +1706,56 @@ msgstr "ஓரம்" | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "இணைத்த மாதிரி உரையாடல்" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:739 | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "பட்டன் உருவரை சோதனை %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:768 | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g சாளரத்தை வரைய மில்லிசெக்கண்டு" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:813 | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "பயன்பாடு: metacity-theme-viewer [THEMENAME]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:820 | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "கருப்பொருளை ஏற்றுவதில் பிழை: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:826 | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "கருப்பொருள்  \"%s\" %g செகண்டில்\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:870 | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "இயல்பான தலைப்பு எழுத்துரு" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:876 | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "சிறிய தலைப்பு எழுத்துரு" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:882 | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "பெரிய தலைப்பு எழுத்துரு" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:887 | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "பட்டன் உருவரை" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:892 | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "நிர்ணயம்" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:944 | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "சாளர தலைப்பு இங்கே" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1047 | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| @@ -1741,43 +1766,46 @@ msgstr "" | ||||
| "சேவகனின் " | ||||
| "மூலத்தில் (%g மில்லி செகண்ட் சட்டத்திற்கு)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1266 | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "நிலை கூற்று சோதனை உண்மையை தந்தது ஆனால் பிழை" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1268 | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "நிலை கூற்று சோதனை பொய்யை தந்தது ஆனால் பிழை" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1272 | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "பிழை எதிர்பார்க்கப்பட்டடு ஆனால் தரப்படவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1274 | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "பிழை %d எதிர்பார்க்கப்பட்டது %d தரப்படவில்லை" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1280 | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "பிழை எதிர்பார்க்கப்பட்டடு ஆனால் தரப்படவில்லை: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1284 | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "x மதிப்பு %d, %d எதிர்பார்க்கப்பட்டது" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "y மதிப்பு %d, %d எதிர்பார்க்கப்பட்டது" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1352 | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "%d அச்சு கூற்று பகுக்கப்பட்டது %g செகண்டில் (%g சராசரி செகண்ட்)\n" | ||||
|  | ||||
| #~ msgid "Minimize window" | ||||
| #~ msgstr "சாளரத்தை சிறிதாக்கு" | ||||
|  | ||||
| #~ msgid "Comma-separated list of compositor plugins" | ||||
| #~ msgstr "பல்வினையாக்கியின் சொருகிகளின் கமாவால் பிரித்த பட்டியல்." | ||||
|  | ||||
|   | ||||
							
								
								
									
										186
									
								
								po/ug.po
									
									
									
									
									
								
							
							
						
						
									
										186
									
								
								po/ug.po
									
									
									
									
									
								
							| @@ -9,8 +9,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-02-20 15:50+0000\n" | ||||
| "PO-Revision-Date: 2013-02-25 18:42+0900\n" | ||||
| "POT-Creation-Date: 2013-03-31 13:47+0000\n" | ||||
| "PO-Revision-Date: 2013-04-06 18:40+0900\n" | ||||
| "Last-Translator: Gheyret Kenji <gheyret@gmail.com>\n" | ||||
| "Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n" | ||||
| "Language: \n" | ||||
| @@ -208,18 +208,18 @@ msgstr "كۆزنەكنىڭ ئوڭ تەرىپىدە كۆرسەتسۇن" | ||||
|  | ||||
| #. 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:507 | ||||
| #: ../src/compositor/compositor.c:568 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "كۆرسەتكۈچ «%2$s» نىڭدىكى ئېكران %1$i دا بۆلەك باشقۇرغۇچ ئىجرا قىلىنىۋاتىدۇ." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1116 | ||||
| #: ../src/compositor/meta-background.c:1064 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "ھۆججەتتىن تەگلىك texture نى قۇرغىلى بولمايدۇ" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "قوڭغۇراق ھادىسىسى" | ||||
|  | ||||
| @@ -251,53 +251,59 @@ msgstr "كۈت(_W)" | ||||
| msgid "_Force Quit" | ||||
| msgstr "مەجبۇرى ئاخىرلاشتۇر(_F)" | ||||
|  | ||||
| #: ../src/core/display.c:392 | ||||
| #: ../src/core/display.c:401 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "بىرىكتۈرۈش ئۈچۈن زۆرۈر بولغان كېڭەيتىلمە %s يوق" | ||||
|  | ||||
| #: ../src/core/display.c:485 | ||||
| #: ../src/core/display.c:493 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "X كۆزنەك سىستېمىسى كۆرسەتكۈچى ‹%s› نى ئېچىش مەغلۇپ بولدى\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:876 | ||||
| #: ../src/core/keybindings.c:935 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| "binding\n" | ||||
| msgstr "باشقا پروگرامما %s كۇنۇپكىسى بىلەن سۈپەتلىگۈچى كۇنۇپكا %x نىڭ بىرىكمىسىنى ئىشلىتىۋاتىدۇ\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/keybindings.c:1135 | ||||
| #, c-format | ||||
| #| msgid "\"%s\" is not a valid value for focus attribute" | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "«%s» ئىناۋەتلىك  تېزلەتكۈچ ئەمەس\n" | ||||
|  | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "ئەڭگىمە باشقۇرغۇچقا باغلىنىشنى ئىناۋەتسىز قىل" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "ئىجرا قىلىنىۋاتقان كۆزنەك باشقۇرغۇچنى ئالماشتۇر" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "ئەڭگىمە باشقۇرغۇ ID سېنى بەلگىلە" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "ئىشلىتىدىغان X كۆرسەتكۈچى" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "ساقلانغان ھۆججەتتىن ئەڭگىمەنى دەسلەپلەشتۈرۈش" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "X نى قەدەمداش قىلىپ ئىشلەت" | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "ئۆرنەكلەر مۇندەرىجىسىنى ئىزدەش مەغلۇپ بولدى: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -324,60 +330,60 @@ msgstr "نەشرىنى باس" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "ئىشلىتىدىغان Mutter قىستۇرمىسى" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1095 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| msgstr "بۇزۇلغان پروگراممىلارنى تۈزىتىش-ياخشىلاش ئىناۋەتسىز قىلىنغان. بەزى پروگراممىلار نورمال ئىشلىمەسلىكى مۇمكىن.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1170 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "GSettings ئاچقۇچى %s نىڭ تەركىبىدىكى فونت چۈشەندۈرۈشى «%s»نى تەھلىل قىلغىنى بولمىدى\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1236 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| "modifier\n" | ||||
| msgstr "سەپلىمە سانداندىن تېپىلغان «%s» چاشقىنەك توپچىسىنىڭ سۈپەتلىگۈچىسى ئۈچۈن ئىناۋەتسىز\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1788 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| "\"%s\"\n" | ||||
| msgstr "سەپلىمە ساندىنىدىن تېپىلغان «%s»، «%s» كۇنۇپكا باغلانمىسىنىڭ ئىناۋەتلىك قىممىتى ئەمەس\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1887 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "خىزمەت بوشلۇقى %d" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:691 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "كۆرسەتكۈچ ‹%2$s› دىكى ئېكران %1$d ئىناۋەتسىز\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:707 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| "replace option to replace the current window manager.\n" | ||||
| msgstr "كۆرسەتكۈچ «%2$s» دىكى ئېكران %1$d نىڭ كۆزنەك باشقۇرغۇسى بار؛ ھازىرقى كۆزنەك باشقۇرغۇنى ئالماشتۇرۇش ئۈچۈن --replace تاللانمىسىنى ئىشلىتىپ كۆرۈپ بېقىڭ.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:734 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "كۆرسەتكۈچ «%2$s» نىڭدىكى ئېكران %1$d دا كۆزنەك باشقۇرغۇنىڭ تاللانمىسىنى ئالغىلى بولمىدى\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:812 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "«%2$s» دىكى %1$d ئېكراندا بىر كۆزنەك باشقۇرغۇ  بار\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:998 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "«%2$s» دىكى %1$d  ئېكراننى بوشاتقىلى بولمىدى\n" | ||||
| @@ -435,49 +441,49 @@ msgid "" | ||||
| "be restarted manually next time you log in." | ||||
| msgstr "بۇ كۆزنەكلەردە «ھازىرقى تەڭشەكنى ساقلاش» ئىقتىدارىنى ئىشلەتكىلى بولمايدۇ. كېيىن كىرگەندە يەنە قوزغىتىڭ." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "سازلاش خاتىرىسىنى ئېچىش مەغلۇپ بولدى:%s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "خاتىرە ھۆججىتى %s غا  fdopen()  مەشغۇلاتى قىلغىلى بولمىدى:%s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "ئاچقان خاتىرە ھۆججەت %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #: ../src/core/util.c:119 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter تەرجىمە-تەھرىرلىگەندە تەپسىلات قوللاش ھالىتى قوشۇلمىغان\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "كۆزنەك باشقۇرغۇ: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:412 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "كۆزنەك باشقۇرغۇدىكى كەمتۈك: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:443 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "كۆزنەك باشقۇرغۇ ئاگاھلاندۇرۇشى: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:471 | ||||
| msgid "Window manager error: " | ||||
| msgstr "كۆزنەك باشقۇرغۇ خاتالىقى: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7503 | ||||
| #: ../src/core/window.c:7596 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| "window as specified in the ICCCM.\n" | ||||
| msgstr "كۆزنەك %s  بەلگىلىمە ICCCM دا بەلگىلەنگەن WM_CLIENT_LEADER كۆزنەكنى ئەمەس SM_CLIENT_ID نى ئۆزى بەلگىلىۋېپتۇ.\n" | ||||
| msgstr "كۆزنەك %s  بەلگىلىمە ICCCM دا بەلگىلەنگەن WM_CLIENT_LEADER كۆزنەكنى ئەمەس SM_CLIENT_ID نى ئۆزى بەلگىلىۋېلىپتۇ.\n" | ||||
|  | ||||
| #. We ignore mwm_has_resize_func because WM_NORMAL_HINTS is the | ||||
| #. * authoritative source for that info. Some apps such as mplayer or | ||||
| @@ -486,29 +492,29 @@ msgstr "كۆزنەك %s  بەلگىلىمە ICCCM دا بەلگىلەنگەن WM | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8227 | ||||
| #: ../src/core/window.c:8320 | ||||
| #, 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" | ||||
| msgstr "كۆزنەك %s نىڭدا MWM بەلگىلەنگەن بولۇپ، بۇ كۆزنەك چوڭلۇقىنى ئۆزگەرتكىلى بولمايدۇ دېگەن مەنىدە. بىراق ئەڭ كىچىك چوڭلۇقى%d x %d، ۋە ئەڭ كىچىك چوڭلۇقى %d x %d قىلىپ بەلگىلىنىپتۇ. بۇنىڭ ھېچقانداق ئەھمىيىتى يوق.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:304 | ||||
| #: ../src/core/window-props.c:318 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "پروگرامما بىر ساختا _NET_WM_PID نى بەلگىلىدى%lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:423 | ||||
| #: ../src/core/window-props.c:434 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (ھازىر %s نىڭ ئۈستىدە)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1506 | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "%2$s  گە بەلگىلەنگەن ئۈنۈمسىز WM_TRANSIENT_FOR كۆزنەك 0x%1$lx بولىدۇ.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "%2$s نىڭ WM_TRANSIENT_FOR كۆزنەك0x%1$lx دەۋرىيلىك قۇرۇشى مۇمكىن.\n" | ||||
| @@ -850,261 +856,261 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "چوققا" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "ئاستى" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "سول" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "ئوڭ" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "كاندۇكنىڭ گېئومېتىرىيىلىك شەكلى «%s» ئۆلچەمنى ئىپادىلىمەيدۇ" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "كاندۇكنىڭ گېئومېتىرىيىلىك شەكلى گىرۋەك «%2$s» نىڭ ئۆلچىمى «%1$s» ئىپادىلىمەيدۇ" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "توپچىنىڭ ئېگىزلىك ۋە كەڭلىك نىسبىتى %g مۇۋاپىق ئەمەس" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "كاندۇكنىڭ گېئومېتىرىيىلىك شەكلى توپچىلارنىڭ چوڭلۇقىنى ئىپادىلىمەيدۇ" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "تەدرىجىي ئۆزگىرىشتە ئاز دېگەندە ئىككى خىل رەڭ بولۇش كېرەك" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, 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 رەڭ ئۆلچىمىدە ھالەتتىن كېيىن چوقۇم رەڭ ئاتى ۋە زاپاس بولۇشى لازىم، مەسىلەن، gtk:custom(foo,bar) ھالەت؛ «%s» نى تەھلىل قىلالمايدۇ" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, 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 پارامېتىرىدىكى ئىناۋەتسىز ھەرپ '%c'، پەقەت A-Za-z0-9-_  نىلا ئىشلەتكىلى بولىدۇ" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| "fit the format" | ||||
| msgstr "Gtk:custom نىڭ پىچىمى \"gtk:custom(color_name,fallback)\" بولۇپ، «%s» پىچىمغا توغرا كەلمەيدۇ" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| "where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "GTK رەڭ بەلگىلىمىسىنىڭ ھالىتى چوقۇم gtk:fg[NORMAL] نىڭدەك تىرناق ئىچىگە ئېلىنىشى كېرەك؛ «%s» نى تەھلىل قىلغىلى بولمىدى." | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| "fg[NORMAL] where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "GTK رەڭ بەلگىلىمىسىنىڭ ھالىتىنىڭ ئارقىسىغا سول تىرناق يېزىلىشى كېرەك.  مەسىلەن gtk:fg[NORMAL] نىڭدەك بۇ يەردىكى «NORMAL» ھالەتنى بىلدۈرىدۇ؛ «%s» نى تەھلىل قىلغىلى بولمىدى." | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "رەڭ بەلگىلىمىسىدىكى «%s» ھالەتنى چۈشەنگىلى بولمىدى" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "رەڭ بەلگىلىمىسىدىكى «%s» رەڭ بۆلىكىنى چۈشەنگىلى بولمىدى" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| "format" | ||||
| msgstr "بىرىكمە رەڭنىڭ فورماتى \"blend/bg_color/fg_color/alpha\"،  «%s» بۇ پىچىمغا ماس كەلمىدى" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "بىرىكمە رەڭدىكى ئالفا قىممىتى «%s» نى تەھلىل قىلغىلى بولمىدى" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "بىرىكمە رەڭنىڭ ئالفا قىممىتى «%s» نىڭ دائىرىسى  0.0 ~1.0 ئىچىدە ئەمەس" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| msgstr "سايە پىچىمى «shade/base_color/factor»، «%s» بۇ پىچىمغا ماسلاشمىدى" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "سايە رەڭگىدىكى سايە فاكتور «%s» نى تەھلىل قىلغىلى بولمىدى" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "سايە رەڭگىدىكى سايە فاكتورى «%s» مەنپىي سان" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "رەڭ «%s» نى ئانالىز قىلغىلى بولمىدى" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە رۇخسەت قىلىنمىغان ھەرپ '‹%s› بار" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە تەھلىل قىلغىلى بولمايدىغان كەسىر سان ‹%s› بار" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە تەھلىل قىلغىلى بولمايدىغان پۈتۈن سان ‹%s› بار" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| "\"%s\"" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ بېشىدا نامەلۇم ئەمەل بار: «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "كوئوردېنات ئىپادىسى قۇرۇق ياكى چۈشىنىكسىز" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "كوئوردېنات ئىپادىسى 0 نى بۆلگۈچى قىلغان" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| msgstr "كوئوردېنات ئىپادىسى كەسىر سانغا mod ئەمىلىنى ئىشلەتمەكچى" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە سان كېلىدىغان يەردە ئەمەل «%s» بار ئىكەن" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل كېلىدىغان يەردە سان بار ئىكەن" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "كوئوردېنات ئىپادىسى سان بىلەن ئاياغلاشماي ئەمەل بىلەن ئاياغلاشقان" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| "operand in between" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل «%2$c» نىڭ ئارقىسىدىن ئەمەل «%1$c» كېلىپتۇ، ئارىلىقتا سان يوق ئىكەن" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە نامەلۇم ئۆزگەرگۈچى ياكى تۇراقلىق سان «%s» بار ئىكەن" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "كوئوردېنات ئىپادىسىنى تەھلىل قىلىۋاتقاندا يىغلەك تېشىپ كەتتى." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدىكى يېپىلغان تىرناققا ماس كېلىدىغان ئېچىلغان تىرناق يوق" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدىكى ئېچىلغان تىرناققا ماس كېلىدىغان يېپىلغان تىرناق يوق" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل(قوشۇش، ئېلىش...) ياكى سان يوق" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "ئۆرنەك تەركىبىدە خاتالىق چىقىرىدىغان ئىپادە بار: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| "specified for this frame style" | ||||
| msgstr "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/>بۇ كۆزنەكنىڭ ئۇسلۇبى ئۈچۈن بەلگىلىنىشى زۆرۈر" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> يوق" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5084 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "ئۆرنەك «%s»  نى ئوقۇش مەغلۇپ بولدى: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5220 ../src/ui/theme.c:5227 ../src/ui/theme.c:5234 | ||||
| #: ../src/ui/theme.c:5241 ../src/ui/theme.c:5248 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "ئۆرنەك «%2$s» نىڭ <%1$s> ئى بەلگىلەنمىگەن" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5256 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| "type=\"%s\" style_set=\"whatever\"/> element" | ||||
| msgstr "ئۆرنەك «%2$s» نىڭ ئىچىدىكى كۆزنەك تىپى <%1$s> نىڭ كاندۇك ئۇسلۇبى بەلگىلەنمىگەن. بىر <window type=\"%3$s\" style_set=\"whatever\"/> ئېلېمېنتى قوشۇڭ" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5663 ../src/ui/theme.c:5725 ../src/ui/theme.c:5788 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "ئىشلەتكۈچى بەلگىلىگەن تۇراقلىق مىقدار چوقۇم چوڭ ھەرپ بىلەن باشلانسۇن؛ «%s» بولمايدۇ" | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5671 ../src/ui/theme.c:5733 ../src/ui/theme.c:5796 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "تۇراقلىق سان «%s» غا ئېنىقلىما بېرىلگەن" | ||||
| @@ -1464,7 +1470,7 @@ msgstr "ئېلېمېنت <%s> نىڭ ئىچىدە تېكىست بولسا بول | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "بۇ ئۆرنەك ئۈچۈن <%s> ئىككى قېتىم بەلگىلەنگەن" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "ئۆرنەك %s  ئۈچۈن ئىناۋەتلىك ھۆججەتنى تېپىش مەغلۇپ بولدى\n" | ||||
|   | ||||
							
								
								
									
										648
									
								
								po/zh_HK.po
									
									
									
									
									
								
							
							
						
						
									
										648
									
								
								po/zh_HK.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										648
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
							
						
						
									
										648
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										7
									
								
								protocol/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								protocol/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| NULL = | ||||
|  | ||||
| EXTRA_DIST = \ | ||||
| 	gtk-shell.xml \ | ||||
| 	xdg-shell.xml \ | ||||
| 	xserver.xml \ | ||||
| 	$(NULL) | ||||
							
								
								
									
										30
									
								
								protocol/gtk-shell.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								protocol/gtk-shell.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| <protocol name="gtk"> | ||||
|  | ||||
|   <interface name="gtk_shell" version="1"> | ||||
|     <enum name="capability"> | ||||
|       <entry name="global_app_menu" value="1"/> | ||||
|       <entry name="global_menu_bar" value="2"/> | ||||
|     </enum> | ||||
|  | ||||
|     <event name="capabilities"> | ||||
|       <arg name="capabilities" type="uint"/> | ||||
|     </event> | ||||
|  | ||||
|     <request name="get_gtk_surface"> | ||||
|       <arg name="gtk_surface" type="new_id" interface="gtk_surface"/> | ||||
|       <arg name="surface" type="object" interface="wl_surface"/> | ||||
|     </request> | ||||
|   </interface> | ||||
|  | ||||
|   <interface name="gtk_surface" version="1"> | ||||
|     <request name="set_dbus_properties"> | ||||
|       <arg name="application_id" type="string" allow-null="true"/> | ||||
|       <arg name="app_menu_path" type="string" allow-null="true"/> | ||||
|       <arg name="menubar_path" type="string" allow-null="true"/> | ||||
|       <arg name="window_object_path" type="string" allow-null="true"/> | ||||
|       <arg name="application_object_path" type="string" allow-null="true"/> | ||||
|       <arg name="unique_bus_name" type="string" allow-null="true"/> | ||||
|     </request> | ||||
|   </interface> | ||||
|  | ||||
| </protocol> | ||||
							
								
								
									
										467
									
								
								protocol/xdg-shell.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										467
									
								
								protocol/xdg-shell.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,467 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <protocol name="xdg_shell"> | ||||
|  | ||||
|   <copyright> | ||||
|     Copyright © 2008-2013 Kristian Høgsberg | ||||
|     Copyright © 2013      Rafael Antognolli | ||||
|     Copyright © 2013      Jasper St. Pierre | ||||
|     Copyright © 2010-2013 Intel Corporation | ||||
|  | ||||
|     Permission to use, copy, modify, distribute, and sell this | ||||
|     software and its documentation for any purpose is hereby granted | ||||
|     without fee, provided that the above copyright notice appear in | ||||
|     all copies and that both that copyright notice and this permission | ||||
|     notice appear in supporting documentation, and that the name of | ||||
|     the copyright holders not be used in advertising or publicity | ||||
|     pertaining to distribution of the software without specific, | ||||
|     written prior permission.  The copyright holders make no | ||||
|     representations about the suitability of this software for any | ||||
|     purpose.  It is provided "as is" without express or implied | ||||
|     warranty. | ||||
|  | ||||
|     THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS | ||||
|     SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND | ||||
|     FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||||
|     SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||||
|     WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN | ||||
|     AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | ||||
|     ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF | ||||
|     THIS SOFTWARE. | ||||
|   </copyright> | ||||
|  | ||||
|   <interface name="xdg_shell" version="1"> | ||||
|     <description summary="create desktop-style surfaces"> | ||||
|       This interface is implemented by servers that provide | ||||
|       desktop-style user interfaces. | ||||
|  | ||||
|       It allows clients to associate a xdg_surface with | ||||
|       a basic surface. | ||||
|     </description> | ||||
|  | ||||
|     <enum name="version"> | ||||
|       <description summary="latest protocol version"> | ||||
| 	Use this enum to check the protocol version, and it will be updated | ||||
| 	automatically. | ||||
|       </description> | ||||
|       <entry name="current" value="2" summary="Always the latest version"/> | ||||
|     </enum> | ||||
|  | ||||
|  | ||||
|     <request name="use_unstable_version"> | ||||
|       <description summary="enable use of this unstable version"> | ||||
| 	Use this request in order to enable use of this interface. | ||||
|  | ||||
| 	Understand and agree that one is using an unstable interface, | ||||
| 	that will likely change in the future, breaking the API. | ||||
|       </description> | ||||
|       <arg name="version" type="int"/> | ||||
|     </request> | ||||
|  | ||||
|     <request name="get_xdg_surface"> | ||||
|       <description summary="create a shell surface from a surface"> | ||||
| 	Create a shell surface for an existing surface. | ||||
|  | ||||
| 	Only one shell or popup surface can be associated with a given | ||||
| 	surface. | ||||
|       </description> | ||||
|       <arg name="id" type="new_id" interface="xdg_surface"/> | ||||
|       <arg name="surface" type="object" interface="wl_surface"/> | ||||
|     </request> | ||||
|  | ||||
|     <request name="get_xdg_popup"> | ||||
|       <description summary="create a shell surface from a surface"> | ||||
| 	Create a popup surface for an existing surface. | ||||
|  | ||||
| 	Only one shell or popup surface can be associated with a given | ||||
| 	surface. | ||||
|       </description> | ||||
|       <arg name="id" type="new_id" interface="xdg_popup"/> | ||||
|       <arg name="surface" type="object" interface="wl_surface"/> | ||||
|       <arg name="parent" type="object" interface="wl_surface"/> | ||||
|       <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/> | ||||
|       <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/> | ||||
|       <arg name="x" type="int"/> | ||||
|       <arg name="y" type="int"/> | ||||
|       <arg name="flags" type="uint"/> | ||||
|     </request> | ||||
|  | ||||
|     <event name="ping"> | ||||
|       <description summary="check if the client is alive"> | ||||
|         The ping event asks the client if it's still alive. Pass the | ||||
|         serial specified in the event back to the compositor by sending | ||||
|         a "pong" request back with the specified serial. | ||||
|  | ||||
|         Compositors can use this to determine if the client is still | ||||
|         alive. It's unspecified what will happen if the client doesn't | ||||
|         respond to the ping request, or in what timeframe. Clients should | ||||
|         try to respond in a reasonable amount of time. | ||||
|       </description> | ||||
|       <arg name="serial" type="uint" summary="pass this to the callback"/> | ||||
|     </event> | ||||
|  | ||||
|     <request name="pong"> | ||||
|       <description summary="respond to a ping event"> | ||||
| 	A client must respond to a ping event with a pong request or | ||||
| 	the client may be deemed unresponsive. | ||||
|       </description> | ||||
|       <arg name="serial" type="uint" summary="serial of the ping event"/> | ||||
|     </request> | ||||
|   </interface> | ||||
|  | ||||
|   <interface name="xdg_surface" version="1"> | ||||
|  | ||||
|     <description summary="desktop-style metadata interface"> | ||||
|       An interface that may be implemented by a wl_surface, for | ||||
|       implementations that provide a desktop-style user interface. | ||||
|  | ||||
|       It provides requests to treat surfaces like windows, allowing to set | ||||
|       properties like maximized, fullscreen, minimized, and to move and resize | ||||
|       them, and associate metadata like title and app id. | ||||
|  | ||||
|       On the server side the object is automatically destroyed when | ||||
|       the related wl_surface is destroyed.  On client side, | ||||
|       xdg_surface.destroy() must be called before destroying | ||||
|       the wl_surface object. | ||||
|     </description> | ||||
|  | ||||
|     <request name="destroy" type="destructor"> | ||||
|       <description summary="remove xdg_surface interface"> | ||||
| 	The xdg_surface interface is removed from the wl_surface object | ||||
| 	that was turned into a xdg_surface with | ||||
| 	xdg_shell.get_xdg_surface request. The xdg_surface properties, | ||||
| 	like maximized and fullscreen, are lost. The wl_surface loses | ||||
| 	its role as a xdg_surface. The wl_surface is unmapped. | ||||
|       </description> | ||||
|     </request> | ||||
|  | ||||
|     <request name="set_transient_for"> | ||||
|       <description summary="surface is a child of another surface"> | ||||
| 	Setting a surface as transient of another means that it is child | ||||
| 	of another surface. | ||||
|  | ||||
| 	Child surfaces are stacked above their parents, and will be | ||||
| 	unmapped if the parent is unmapped too. They should not appear | ||||
| 	on task bars and alt+tab. | ||||
|       </description> | ||||
|       <arg name="parent" type="object" interface="wl_surface" allow-null="true"/> | ||||
|     </request> | ||||
|  | ||||
|     <request name="set_margin"> | ||||
|       <description summary="set the visible frame boundaries"> | ||||
|         This tells the compositor what the visible size of the window | ||||
|         should be, so it can use it to determine what borders to use for | ||||
|         constrainment and alignment. | ||||
|  | ||||
|         CSD often has invisible areas for decoration purposes, like drop | ||||
|         shadows. These "shadow" drawings need to be subtracted out of the | ||||
|         normal boundaries of the window when computing where to place | ||||
|         windows (e.g. to set this window so it's centered on top of another, | ||||
|         or to put it to the left or right of the screen.) | ||||
|  | ||||
|         This value should change as little as possible at runtime, to | ||||
|         prevent flicker. | ||||
|  | ||||
|         This value is also ignored when the window is maximized or | ||||
|         fullscreen, and assumed to be 0. | ||||
|  | ||||
|         If never called, this value is assumed to be 0. | ||||
|       </description> | ||||
|       <arg name="left_margin" type="int"/> | ||||
|       <arg name="right_margin" type="int"/> | ||||
|       <arg name="top_margin" type="int"/> | ||||
|       <arg name="bottom_margin" type="int"/> | ||||
|     </request> | ||||
|  | ||||
|     <request name="set_title"> | ||||
|       <description summary="set surface title"> | ||||
| 	Set a short title for the surface. | ||||
|  | ||||
| 	This string may be used to identify the surface in a task bar, | ||||
| 	window list, or other user interface elements provided by the | ||||
| 	compositor. | ||||
|  | ||||
| 	The string must be encoded in UTF-8. | ||||
|       </description> | ||||
|       <arg name="title" type="string"/> | ||||
|     </request> | ||||
|  | ||||
|     <request name="set_app_id"> | ||||
|       <description summary="set surface class"> | ||||
| 	Set an id for the surface. | ||||
|  | ||||
| 	The app id identifies the general class of applications to which | ||||
| 	the surface belongs. | ||||
|  | ||||
| 	It should be the ID that appears in the new desktop entry | ||||
| 	specification, the interface name. | ||||
|       </description> | ||||
|       <arg name="app_id" type="string"/> | ||||
|     </request> | ||||
|  | ||||
|     <request name="move"> | ||||
|       <description summary="start an interactive move"> | ||||
| 	Start a pointer-driven move of the surface. | ||||
|  | ||||
| 	This request must be used in response to a button press event. | ||||
| 	The server may ignore move requests depending on the state of | ||||
| 	the surface (e.g. fullscreen or maximized). | ||||
|       </description> | ||||
|       <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/> | ||||
|       <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/> | ||||
|     </request> | ||||
|  | ||||
|     <enum name="resize_edge"> | ||||
|       <description summary="edge values for resizing"> | ||||
| 	These values are used to indicate which edge of a surface | ||||
| 	is being dragged in a resize operation. The server may | ||||
| 	use this information to adapt its behavior, e.g. choose | ||||
| 	an appropriate cursor image. | ||||
|       </description> | ||||
|       <entry name="none" value="0"/> | ||||
|       <entry name="top" value="1"/> | ||||
|       <entry name="bottom" value="2"/> | ||||
|       <entry name="left" value="4"/> | ||||
|       <entry name="top_left" value="5"/> | ||||
|       <entry name="bottom_left" value="6"/> | ||||
|       <entry name="right" value="8"/> | ||||
|       <entry name="top_right" value="9"/> | ||||
|       <entry name="bottom_right" value="10"/> | ||||
|     </enum> | ||||
|  | ||||
|     <request name="resize"> | ||||
|       <description summary="start an interactive resize"> | ||||
| 	Start a pointer-driven resizing of the surface. | ||||
|  | ||||
| 	This request must be used in response to a button press event. | ||||
| 	The server may ignore resize requests depending on the state of | ||||
| 	the surface (e.g. fullscreen or maximized). | ||||
|       </description> | ||||
|       <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/> | ||||
|       <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/> | ||||
|       <arg name="edges" type="uint" summary="which edge or corner is being dragged"/> | ||||
|     </request> | ||||
|  | ||||
|     <event name="configure"> | ||||
|       <description summary="suggest resize"> | ||||
| 	The configure event asks the client to resize its surface. | ||||
|  | ||||
| 	The size is a hint, in the sense that the client is free to | ||||
| 	ignore it if it doesn't resize, pick a smaller size (to | ||||
| 	satisfy aspect ratio or resize in steps of NxM pixels). | ||||
|  | ||||
| 	The client is free to dismiss all but the last configure | ||||
| 	event it received. | ||||
|  | ||||
| 	The width and height arguments specify the size of the window | ||||
| 	in surface local coordinates. | ||||
|       </description> | ||||
|  | ||||
|       <arg name="width" type="int"/> | ||||
|       <arg name="height" type="int"/> | ||||
|     </event> | ||||
|  | ||||
|     <request name="set_output"> | ||||
|       <description summary="set the default output used by this surface"> | ||||
| 	Set the default output used by this surface when it is first mapped. | ||||
|  | ||||
| 	If this value is NULL (default), it's up to the compositor to choose | ||||
| 	which display will be used to map this surface. | ||||
|  | ||||
| 	When fullscreen or maximized state are set on this surface, and it | ||||
| 	wasn't mapped yet, the output set with this method will be used. | ||||
| 	Otherwise, the output where the surface is currently mapped will be | ||||
| 	used. | ||||
|       </description> | ||||
|       <arg name="output" type="object" interface="wl_output" allow-null="true"/> | ||||
|     </request> | ||||
|  | ||||
|     <event name="request_set_fullscreen"> | ||||
|       <description summary="server requests that the client set fullscreen"> | ||||
| 	Event sent from the compositor to the client requesting that the client | ||||
| 	goes to a fullscreen state. It's the client job to call set_fullscreen | ||||
| 	and really trigger the fullscreen state. | ||||
|       </description> | ||||
|     </event> | ||||
|  | ||||
|     <event name="request_unset_fullscreen"> | ||||
|       <description summary="server requests that the client unset fullscreen"> | ||||
| 	Event sent from the compositor to the client requesting that the client | ||||
| 	leaves the fullscreen state. It's the client job to call | ||||
| 	unset_fullscreen and really leave the fullscreen state. | ||||
|       </description> | ||||
|     </event> | ||||
|  | ||||
|     <request name="set_fullscreen"> | ||||
|       <description summary="set the surface state as fullscreen"> | ||||
| 	Set the surface as fullscreen. | ||||
|  | ||||
| 	After this request, the compositor should send a configure event | ||||
| 	informing the output size. | ||||
|  | ||||
| 	This request informs the compositor that the next attached buffer | ||||
| 	committed will be in a fullscreen state. The buffer size should be the | ||||
| 	same size as the size informed in the configure event, if the client | ||||
| 	doesn't want to leave any empty area. | ||||
|  | ||||
| 	In other words: the next attached buffer after set_maximized is the new | ||||
| 	maximized buffer. And the surface will be positioned at the maximized | ||||
| 	position on commit. | ||||
|  | ||||
| 	A simple way to synchronize and wait for the correct configure event is | ||||
| 	to use a wl_display.sync request right after the set_fullscreen | ||||
| 	request. When the sync callback returns, the last configure event | ||||
| 	received just before it will be the correct one, and should contain the | ||||
| 	right size for the surface to maximize. | ||||
|  | ||||
| 	Setting one state won't unset another state. Use | ||||
| 	xdg_surface.unset_fullscreen for unsetting it. | ||||
|       </description> | ||||
|     </request> | ||||
|  | ||||
|     <request name="unset_fullscreen"> | ||||
|       <description summary="unset the surface state as fullscreen"> | ||||
| 	Unset the surface fullscreen state. | ||||
|  | ||||
| 	Same negotiation as set_fullscreen must be used. | ||||
|       </description> | ||||
|     </request> | ||||
|  | ||||
|     <event name="request_set_maximized"> | ||||
|       <description summary="server requests that the client set maximized"> | ||||
| 	Event sent from the compositor to the client requesting that the client | ||||
| 	goes to a maximized state. It's the client job to call set_maximized | ||||
| 	and really trigger the maximized state. | ||||
|       </description> | ||||
|     </event> | ||||
|  | ||||
|     <event name="request_unset_maximized"> | ||||
|       <description summary="server requests that the client unset maximized"> | ||||
| 	Event sent from the compositor to the client requesting that the client | ||||
| 	leaves the maximized state. It's the client job to call unset_maximized | ||||
| 	and really leave the maximized state. | ||||
|       </description> | ||||
|     </event> | ||||
|  | ||||
|     <request name="set_maximized"> | ||||
|       <description summary="set the surface state as maximized"> | ||||
| 	Set the surface as maximized. | ||||
|  | ||||
| 	After this request, the compositor will send a configure event | ||||
| 	informing the output size minus panel and other MW decorations. | ||||
|  | ||||
| 	This request informs the compositor that the next attached buffer | ||||
| 	committed will be in a maximized state. The buffer size should be the | ||||
| 	same size as the size informed in the configure event, if the client | ||||
| 	doesn't want to leave any empty area. | ||||
|  | ||||
| 	In other words: the next attached buffer after set_maximized is the new | ||||
| 	maximized buffer. And the surface will be positioned at the maximized | ||||
| 	position on commit. | ||||
|  | ||||
| 	A simple way to synchronize and wait for the correct configure event is | ||||
| 	to use a wl_display.sync request right after the set_maximized request. | ||||
| 	When the sync callback returns, the last configure event received just | ||||
| 	before it will be the correct one, and should contain the right size | ||||
| 	for the surface to maximize. | ||||
|  | ||||
| 	Setting one state won't unset another state. Use | ||||
| 	xdg_surface.unset_maximized for unsetting it. | ||||
|       </description> | ||||
|     </request> | ||||
|  | ||||
|     <request name="unset_maximized"> | ||||
|       <description summary="unset the surface state as maximized"> | ||||
| 	Unset the surface maximized state. | ||||
|  | ||||
| 	Same negotiation as set_maximized must be used. | ||||
|       </description> | ||||
|     </request> | ||||
|  | ||||
|     <request name="set_minimized"> | ||||
|       <description summary="set the surface state as minimized"> | ||||
| 	Set the surface minimized state. | ||||
|  | ||||
| 	Setting one state won't unset another state. | ||||
|       </description> | ||||
|     </request> | ||||
|  | ||||
|     <event name="activated"> | ||||
|       <description summary="surface was activated"> | ||||
| 	The activated_set event is sent when this surface has been | ||||
| 	activated, which means that the surface has user attention. | ||||
|         Window decorations should be updated accordingly. You should | ||||
|         not use this event for anything but the style of decorations | ||||
|         you display, use wl_keyboard.enter and wl_keyboard.leave for | ||||
|         determining keyboard focus. | ||||
|       </description> | ||||
|     </event> | ||||
|  | ||||
|     <event name="deactivated"> | ||||
|       <description summary="surface was deactivated"> | ||||
| 	The deactivate event is sent when this surface has been | ||||
|         deactivated, which means that the surface lost user attention. | ||||
|         Window decorations should be updated accordingly. You should | ||||
|         not use this event for anything but the style of decorations | ||||
|         you display, use wl_keyboard.enter and wl_keyboard.leave for | ||||
|         determining keyboard focus. | ||||
|       </description> | ||||
|     </event> | ||||
|  | ||||
|     <event name="delete"> | ||||
|       <description summary="surface wants to be closed"> | ||||
|         The delete event is sent by the compositor when the user | ||||
|         wants the surface to be closed. This should be equivalent to | ||||
|         the user clicking the close button in client-side decorations, | ||||
|         if your application has any... | ||||
|  | ||||
|         This is only a request that the user intends to close your | ||||
|         window. The client may choose to ignore this request, or show | ||||
|         a dialog to ask the user to save their data... | ||||
|       </description> | ||||
|     </event> | ||||
|   </interface> | ||||
|  | ||||
|   <interface name="xdg_popup" version="1"> | ||||
|     <description summary="desktop-style metadata interface"> | ||||
|       An interface that may be implemented by a wl_surface, for | ||||
|       implementations that provide a desktop-style popups/menus. A popup | ||||
|       surface is a transient surface with an added pointer grab. | ||||
|  | ||||
|       An existing implicit grab will be changed to owner-events mode, | ||||
|       and the popup grab will continue after the implicit grab ends | ||||
|       (i.e. releasing the mouse button does not cause the popup to be | ||||
|       unmapped). | ||||
|  | ||||
|       The popup grab continues until the window is destroyed or a mouse | ||||
|       button is pressed in any other clients window. A click in any of | ||||
|       the clients surfaces is reported as normal, however, clicks in | ||||
|       other clients surfaces will be discarded and trigger the callback. | ||||
|  | ||||
|       The x and y arguments specify the locations of the upper left | ||||
|       corner of the surface relative to the upper left corner of the | ||||
|       parent surface, in surface local coordinates. | ||||
|  | ||||
|       xdg_popup surfaces are always transient for another surface. | ||||
|     </description> | ||||
|  | ||||
|     <request name="destroy" type="destructor"> | ||||
|       <description summary="remove xdg_surface interface"> | ||||
| 	The xdg_surface interface is removed from the wl_surface object | ||||
| 	that was turned into a xdg_surface with | ||||
| 	xdg_shell.get_xdg_surface request. The xdg_surface properties, | ||||
| 	like maximized and fullscreen, are lost. The wl_surface loses | ||||
| 	its role as a xdg_surface. The wl_surface is unmapped. | ||||
|       </description> | ||||
|     </request> | ||||
|  | ||||
|     <event name="popup_done"> | ||||
|       <description summary="popup interaction is done"> | ||||
| 	The popup_done event is sent out when a popup grab is broken, | ||||
| 	that is, when the users clicks a surface that doesn't belong | ||||
| 	to the client owning the popup surface. | ||||
|       </description> | ||||
|       <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/> | ||||
|     </event> | ||||
|  | ||||
|   </interface> | ||||
| </protocol> | ||||
							
								
								
									
										18
									
								
								protocol/xserver.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								protocol/xserver.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| <protocol name="xserver"> | ||||
|  | ||||
|   <interface name="xserver" version="1"> | ||||
|     <request name="set_window_id"> | ||||
|       <arg name="surface" type="object" interface="wl_surface"/> | ||||
|       <arg name="id" type="uint"/> | ||||
|     </request> | ||||
|  | ||||
|     <event name="client"> | ||||
|       <arg name="fd" type="fd"/> | ||||
|     </event> | ||||
|  | ||||
|     <event name="listen_socket"> | ||||
|       <arg name="fd" type="fd"/> | ||||
|     </event> | ||||
|   </interface> | ||||
|  | ||||
| </protocol> | ||||
| @@ -29,6 +29,18 @@ | ||||
| 	<KeyListEntry name="move-to-workspace-down" | ||||
| 	              _description="Move window one workspace down" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-monitor-left" | ||||
| 	              _description="Move window one monitor to the left" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-monitor-right" | ||||
| 	              _description="Move window one monitor to the right" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-monitor-up" | ||||
| 	              _description="Move window one monitor up" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-monitor-down" | ||||
| 	              _description="Move window one monitor down" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-applications" | ||||
| 	              _description="Switch applications"/> | ||||
|  | ||||
|   | ||||
							
								
								
									
										187
									
								
								src/Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										187
									
								
								src/Makefile.am
									
									
									
									
									
								
							| @@ -1,15 +1,17 @@ | ||||
| # Flag build for parallelism; see https://savannah.gnu.org/patch/?6905 | ||||
| .AUTOPARALLEL: | ||||
|  | ||||
| lib_LTLIBRARIES = libmutter.la | ||||
| lib_LTLIBRARIES = libmutter-wayland.la | ||||
|  | ||||
| SUBDIRS=wm-tester tools compositor/plugins | ||||
| SUBDIRS=compositor/plugins | ||||
|  | ||||
| INCLUDES=								\ | ||||
| 	-DCLUTTER_ENABLE_COMPOSITOR_API					\ | ||||
| 	-DCLUTTER_ENABLE_EXPERIMENTAL_API				\ | ||||
| 	-DCOGL_ENABLE_EXPERIMENTAL_API					\ | ||||
| 	-DCOGL_ENABLE_EXPERIMENTAL_2_0_API                              \ | ||||
| 	$(MUTTER_CFLAGS)						\ | ||||
| 	-I$(top_builddir)						\ | ||||
| 	-I$(srcdir)							\ | ||||
| 	-I$(srcdir)/core						\ | ||||
| 	-I$(srcdir)/ui							\ | ||||
| @@ -29,11 +31,24 @@ INCLUDES=								\ | ||||
| 	-DMUTTER_PLUGIN_DIR=\"@MUTTER_PLUGIN_DIR@\"			\ | ||||
| 	-DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\" | ||||
|  | ||||
| mutter_built_sources = \ | ||||
| 	mutter-enum-types.h \ | ||||
| 	mutter-enum-types.c | ||||
| INCLUDES += \ | ||||
| 	-I$(srcdir)/wayland						\ | ||||
| 	-I$(builddir)/wayland						\ | ||||
| 	-DXWAYLAND_PATH='"@XWAYLAND_PATH@"' | ||||
|  | ||||
| libmutter_la_SOURCES =				\ | ||||
| mutter_built_sources = \ | ||||
| 	$(dbus_idle_built_sources)		\ | ||||
| 	$(dbus_xrandr_built_sources)		\ | ||||
| 	mutter-enum-types.h 			\ | ||||
| 	mutter-enum-types.c			\ | ||||
| 	wayland/gtk-shell-protocol.c		\ | ||||
| 	wayland/gtk-shell-server-protocol.h	\ | ||||
| 	wayland/xdg-shell-protocol.c		\ | ||||
| 	wayland/xdg-shell-server-protocol.h	\ | ||||
| 	wayland/xserver-protocol.c		\ | ||||
| 	wayland/xserver-server-protocol.h | ||||
|  | ||||
| libmutter_wayland_la_SOURCES =			\ | ||||
| 	core/async-getprop.c			\ | ||||
| 	core/async-getprop.h			\ | ||||
| 	core/barrier.c				\ | ||||
| @@ -53,7 +68,8 @@ libmutter_la_SOURCES =				\ | ||||
| 	compositor/meta-background-actor.c	\ | ||||
| 	compositor/meta-background-actor-private.h	\ | ||||
| 	compositor/meta-background-group.c	\ | ||||
| 	compositor/meta-background-group-private.h	\ | ||||
| 	compositor/meta-cullable.c		\ | ||||
| 	compositor/meta-cullable.h		\ | ||||
| 	compositor/meta-module.c		\ | ||||
| 	compositor/meta-module.h		\ | ||||
| 	compositor/meta-plugin.c		\ | ||||
| @@ -62,6 +78,13 @@ libmutter_la_SOURCES =				\ | ||||
| 	compositor/meta-shadow-factory.c	\ | ||||
| 	compositor/meta-shadow-factory-private.h	\ | ||||
| 	compositor/meta-shaped-texture.c	\ | ||||
| 	compositor/meta-shaped-texture-private.h 	\ | ||||
| 	compositor/meta-surface-actor.c		\ | ||||
| 	compositor/meta-surface-actor.h		\ | ||||
| 	compositor/meta-surface-actor-x11.c	\ | ||||
| 	compositor/meta-surface-actor-x11.h	\ | ||||
| 	compositor/meta-surface-actor-wayland.c	\ | ||||
| 	compositor/meta-surface-actor-wayland.h	\ | ||||
| 	compositor/meta-texture-rectangle.c	\ | ||||
| 	compositor/meta-texture-rectangle.h	\ | ||||
| 	compositor/meta-texture-tower.c		\ | ||||
| @@ -90,10 +113,10 @@ libmutter_la_SOURCES =				\ | ||||
| 	core/display.c				\ | ||||
| 	core/display-private.h			\ | ||||
| 	meta/display.h				\ | ||||
| 	ui/draw-workspace.c			\ | ||||
| 	ui/draw-workspace.h			\ | ||||
| 	core/edge-resistance.c			\ | ||||
| 	core/edge-resistance.h			\ | ||||
| 	core/edid-parse.c			\ | ||||
| 	core/edid.h				\ | ||||
| 	core/errors.c				\ | ||||
| 	meta/errors.h				\ | ||||
| 	core/frame.c				\ | ||||
| @@ -110,6 +133,16 @@ libmutter_la_SOURCES =				\ | ||||
| 	core/keybindings.c			\ | ||||
| 	core/keybindings-private.h		\ | ||||
| 	core/main.c				\ | ||||
| 	core/meta-cursor-tracker.c		\ | ||||
| 	core/meta-cursor-tracker-private.h	\ | ||||
| 	core/meta-idle-monitor.c		\ | ||||
| 	core/meta-idle-monitor-private.h	\ | ||||
| 	core/meta-xrandr-shared.h		\ | ||||
| 	core/monitor.c				\ | ||||
| 	core/monitor-config.c			\ | ||||
| 	core/monitor-kms.c			\ | ||||
| 	core/monitor-private.h			\ | ||||
| 	core/monitor-xrandr.c			\ | ||||
| 	core/mutter-Xatomtype.h			\ | ||||
| 	core/place.c				\ | ||||
| 	core/place.h				\ | ||||
| @@ -127,8 +160,11 @@ libmutter_la_SOURCES =				\ | ||||
| 	core/stack-tracker.h			\ | ||||
| 	core/util.c				\ | ||||
| 	meta/util.h				\ | ||||
| 	core/util-private.h			\ | ||||
| 	core/window-props.c			\ | ||||
| 	core/window-props.h			\ | ||||
| 	core/window-x11.c			\ | ||||
| 	core/window-x11.h			\ | ||||
| 	core/window.c				\ | ||||
| 	core/window-private.h			\ | ||||
| 	meta/window.h				\ | ||||
| @@ -139,7 +175,6 @@ libmutter_la_SOURCES =				\ | ||||
| 	meta/common.h				\ | ||||
| 	core/core.h				\ | ||||
| 	ui/ui.h					\ | ||||
| 	inlinepixbufs.h				\ | ||||
| 	ui/frames.c				\ | ||||
| 	ui/frames.h				\ | ||||
| 	ui/menu.c				\ | ||||
| @@ -148,21 +183,38 @@ libmutter_la_SOURCES =				\ | ||||
| 	ui/metaaccellabel.h			\ | ||||
| 	ui/resizepopup.c			\ | ||||
| 	ui/resizepopup.h			\ | ||||
| 	ui/tabpopup.c				\ | ||||
| 	ui/tabpopup.h				\ | ||||
| 	ui/tile-preview.c			\ | ||||
| 	ui/tile-preview.h			\ | ||||
| 	ui/theme-parser.c			\ | ||||
| 	ui/theme.c				\ | ||||
| 	meta/theme.h				\ | ||||
| 	ui/theme-private.h			\ | ||||
| 	ui/ui.c					\ | ||||
| 	meta/preview-widget.h			\ | ||||
| 	ui/preview-widget.c			\ | ||||
| 	wayland/meta-wayland.c			\ | ||||
| 	wayland/meta-wayland.h			\ | ||||
| 	wayland/meta-wayland-private.h		\ | ||||
| 	wayland/meta-xwayland-private.h		\ | ||||
| 	wayland/meta-xwayland.c			\ | ||||
| 	wayland/meta-wayland-data-device.c      \ | ||||
| 	wayland/meta-wayland-data-device.h      \ | ||||
| 	wayland/meta-wayland-keyboard.c		\ | ||||
| 	wayland/meta-wayland-keyboard.h		\ | ||||
| 	wayland/meta-wayland-pointer.c		\ | ||||
| 	wayland/meta-wayland-pointer.h		\ | ||||
| 	wayland/meta-wayland-seat.c		\ | ||||
| 	wayland/meta-wayland-seat.h		\ | ||||
| 	wayland/meta-wayland-stage.h		\ | ||||
| 	wayland/meta-wayland-stage.c		\ | ||||
| 	wayland/meta-wayland-surface.c		\ | ||||
| 	wayland/meta-wayland-surface.h		\ | ||||
| 	wayland/meta-wayland-types.h		\ | ||||
| 	wayland/meta-wayland-versions.h		\ | ||||
| 	wayland/meta-weston-launch.c		\ | ||||
| 	wayland/meta-weston-launch.h | ||||
|  | ||||
| nodist_libmutter_wayland_la_SOURCES =		\ | ||||
| 	$(mutter_built_sources) | ||||
|  | ||||
| libmutter_la_LDFLAGS = -no-undefined | ||||
| libmutter_la_LIBADD  = $(MUTTER_LIBS) | ||||
| libmutter_wayland_la_LDFLAGS = -no-undefined | ||||
| libmutter_wayland_la_LIBADD  = $(MUTTER_LIBS) | ||||
|  | ||||
| # Headers installed for plugins; introspected information will | ||||
| # be extracted into Mutter-<version>.gir | ||||
| @@ -181,6 +233,8 @@ libmutterinclude_base_headers =		\ | ||||
| 	meta/meta-background-actor.h		\ | ||||
| 	meta/meta-background-group.h		\ | ||||
| 	meta/meta-background.h			\ | ||||
| 	meta/meta-cursor-tracker.h		\ | ||||
| 	meta/meta-idle-monitor.h		\ | ||||
| 	meta/meta-plugin.h			\ | ||||
| 	meta/meta-shaped-texture.h		\ | ||||
| 	meta/meta-shadow-factory.h		\ | ||||
| @@ -196,22 +250,29 @@ libmutterinclude_base_headers =		\ | ||||
| # Excluded from scanning for introspection but installed | ||||
| # atomnames.h: macros cause problems for scanning process | ||||
| libmutterinclude_extra_headers =		\ | ||||
| 	meta/preview-widget.h			\ | ||||
| 	meta/atomnames.h | ||||
|  | ||||
| libmutterincludedir = $(includedir)/mutter/meta | ||||
| libmutterincludedir = $(includedir)/mutter-wayland/meta | ||||
|  | ||||
| libmutterinclude_HEADERS =			\ | ||||
| 	$(libmutterinclude_base_headers)	\ | ||||
| 	$(libmutterinclude_extra_headers) | ||||
|  | ||||
| mutter_theme_viewer_SOURCES=  \ | ||||
| 	ui/theme-viewer.c | ||||
| bin_PROGRAMS=mutter-wayland | ||||
|  | ||||
| bin_PROGRAMS=mutter mutter-theme-viewer | ||||
| mutter_wayland_SOURCES = core/mutter.c | ||||
| mutter_wayland_LDADD = $(MUTTER_LIBS) libmutter-wayland.la | ||||
|  | ||||
| mutter_SOURCES = core/mutter.c | ||||
| mutter_LDADD = $(MUTTER_LIBS) libmutter.la | ||||
| bin_PROGRAMS+=mutter-launch | ||||
|  | ||||
| mutter_launch_SOURCES = wayland/weston-launch.c wayland/weston-launch.h | ||||
|  | ||||
| mutter_launch_CFLAGS = $(MUTTER_LAUNCH_CFLAGS) -DLIBDIR=\"$(libdir)\" | ||||
| mutter_launch_LDFLAGS = $(MUTTER_LAUNCH_LIBS) -lpam | ||||
|  | ||||
| install-exec-hook: | ||||
| 	-chown root $(DESTDIR)$(bindir)/mutter-launch | ||||
| 	-chmod u+s $(DESTDIR)$(bindir)/mutter-launch | ||||
|  | ||||
| if HAVE_INTROSPECTION | ||||
| include $(INTROSPECTION_MAKEFILE) | ||||
| @@ -233,43 +294,36 @@ typelib_DATA = Meta-$(api_version).typelib | ||||
|  | ||||
| INTROSPECTION_GIRS = Meta-$(api_version).gir | ||||
|  | ||||
| Meta-$(api_version).gir: libmutter.la | ||||
| Meta-$(api_version).gir: libmutter-wayland.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 Cogl-1.0 | ||||
| @META_GIR@_EXPORT_PACKAGES = libmutter | ||||
| @META_GIR@_EXPORT_PACKAGES = libmutter-wayland | ||||
| @META_GIR@_CFLAGS = $(INCLUDES) | ||||
| @META_GIR@_LIBS = libmutter.la | ||||
| @META_GIR@_LIBS = libmutter-wayland.la | ||||
| @META_GIR@_FILES =				\ | ||||
| 	mutter-enum-types.h			\ | ||||
| 	$(libmutterinclude_base_headers)	\ | ||||
| 	$(filter %.c,$(libmutter_la_SOURCES)) | ||||
| 	$(filter %.c,$(libmutter_wayland_la_SOURCES) $(nodist_libmutter_wayland_la_SOURCES)) | ||||
| @META_GIR@_SCANNERFLAGS = --warn-all --warn-error | ||||
|  | ||||
| endif | ||||
|  | ||||
| mutter_theme_viewer_LDADD= $(MUTTER_LIBS) libmutter.la | ||||
|  | ||||
| testboxes_SOURCES = core/testboxes.c | ||||
| testgradient_SOURCES = ui/testgradient.c | ||||
| testasyncgetprop_SOURCES = core/testasyncgetprop.c | ||||
|  | ||||
| noinst_PROGRAMS=testboxes testgradient testasyncgetprop | ||||
|  | ||||
| testboxes_LDADD = $(MUTTER_LIBS) libmutter.la | ||||
| testgradient_LDADD = $(MUTTER_LIBS) libmutter.la | ||||
| testasyncgetprop_LDADD = $(MUTTER_LIBS) libmutter.la | ||||
| testboxes_LDADD = $(MUTTER_LIBS) libmutter-wayland.la | ||||
| testgradient_LDADD = $(MUTTER_LIBS) libmutter-wayland.la | ||||
| testasyncgetprop_LDADD = $(MUTTER_LIBS) libmutter-wayland.la | ||||
|  | ||||
| @INTLTOOL_DESKTOP_RULE@ | ||||
|  | ||||
| desktopfilesdir=$(datadir)/applications | ||||
| desktopfiles_in_files=mutter.desktop.in | ||||
| desktopfiles_in_files=mutter-wayland.desktop.in | ||||
| desktopfiles_files=$(desktopfiles_in_files:.desktop.in=.desktop) | ||||
| desktopfiles_DATA = $(desktopfiles_files) | ||||
|  | ||||
| wmpropertiesdir=$(datadir)/gnome/wm-properties | ||||
| wmproperties_in_files=mutter-wm.desktop.in | ||||
| wmproperties_files=$(wmproperties_in_files:.desktop.in=.desktop) | ||||
| wmproperties_DATA = $(wmproperties_files) | ||||
|  | ||||
| xmldir       = @GNOME_KEYBINDINGS_KEYSDIR@ | ||||
| xml_in_files = \ | ||||
|         50-mutter-navigation.xml.in	\ | ||||
| @@ -277,35 +331,28 @@ xml_in_files = \ | ||||
|         50-mutter-windows.xml.in | ||||
| xml_DATA     = $(xml_in_files:.xml.in=.xml) | ||||
|  | ||||
| gsettings_SCHEMAS = org.gnome.mutter.gschema.xml | ||||
| dbus_idle_built_sources = meta-dbus-idle-monitor.c meta-dbus-idle-monitor.h | ||||
|  | ||||
| gsettings_SCHEMAS = org.gnome.mutter.gschema.xml org.gnome.mutter.wayland.gschema.xml | ||||
| @INTLTOOL_XML_NOMERGE_RULE@ | ||||
| @GSETTINGS_RULES@ | ||||
|  | ||||
| convertdir = $(datadir)/GConf/gsettings | ||||
| convert_DATA = mutter-schemas.convert | ||||
|  | ||||
| IMAGES=stock_maximize.png stock_minimize.png stock_delete.png | ||||
| VARIABLES=stock_maximize_data $(srcdir)/stock_maximize.png \ | ||||
|           stock_minimize_data $(srcdir)/stock_minimize.png \ | ||||
|           stock_delete_data $(srcdir)/stock_delete.png | ||||
|  | ||||
| BUILT_SOURCES = inlinepixbufs.h | ||||
| CLEANFILES =					\ | ||||
| 	inlinepixbufs.h				\ | ||||
| 	mutter.desktop				\ | ||||
| 	mutter-wayland.desktop			\ | ||||
| 	mutter-wm.desktop			\ | ||||
| 	org.gnome.mutter.gschema.xml		\ | ||||
| 	org.gnome.mutter.wayland.gschema.xml	\ | ||||
| 	$(xml_DATA)				\ | ||||
| 	$(mutter_built_sources)			\ | ||||
| 	$(typelib_DATA)				\ | ||||
| 	$(gir_DATA) | ||||
|  | ||||
| inlinepixbufs.h: $(IMAGES) | ||||
| 	$(GDK_PIXBUF_CSOURCE) --raw --build-list $(VARIABLES) >$(srcdir)/inlinepixbufs.h | ||||
|  | ||||
| pkgconfigdir = $(libdir)/pkgconfig | ||||
|  | ||||
| pkgconfig_DATA = libmutter.pc mutter-plugins.pc | ||||
| pkgconfig_DATA = libmutter-wayland.pc | ||||
|  | ||||
| EXTRA_DIST=$(desktopfiles_files) 	\ | ||||
| 	$(wmproperties_files)		\ | ||||
| @@ -314,13 +361,14 @@ EXTRA_DIST=$(desktopfiles_files) 	\ | ||||
| 	$(wmproperties_in_files)	\ | ||||
| 	$(xml_in_files)			\ | ||||
| 	org.gnome.mutter.gschema.xml.in \ | ||||
| 	org.gnome.mutter.wayland.gschema.xml.in \ | ||||
| 	mutter-schemas.convert \ | ||||
| 	libmutter.pc.in \ | ||||
| 	mutter-plugins.pc.in  \ | ||||
| 	libmutter-wayland.pc.in \ | ||||
| 	mutter-enum-types.h.in \ | ||||
| 	mutter-enum-types.c.in | ||||
| 	mutter-enum-types.c.in \ | ||||
| 	xrandr.xml idle-monitor.xml | ||||
|  | ||||
| BUILT_SOURCES += $(mutter_built_sources) | ||||
| BUILT_SOURCES = $(mutter_built_sources) | ||||
| MUTTER_STAMP_FILES = stamp-mutter-enum-types.h | ||||
| CLEANFILES += $(MUTTER_STAMP_FILES) | ||||
|  | ||||
| @@ -342,3 +390,28 @@ mutter-enum-types.c: stamp-mutter-enum-types.h mutter-enum-types.c.in | ||||
| 	  $(libmutterinclude_base_headers) ) >> xgen-tetc && \ | ||||
| 	cp xgen-tetc mutter-enum-types.c && \ | ||||
| 	rm -f xgen-tetc | ||||
|  | ||||
| dbus_xrandr_built_sources = meta-dbus-xrandr.c meta-dbus-xrandr.h | ||||
|  | ||||
| $(dbus_xrandr_built_sources) : Makefile.am xrandr.xml | ||||
| 	$(AM_V_GEN)gdbus-codegen							\ | ||||
| 		--interface-prefix org.gnome.Mutter					\ | ||||
| 		--c-namespace MetaDBus							\ | ||||
| 		--generate-c-code meta-dbus-xrandr					\ | ||||
| 		$(srcdir)/xrandr.xml | ||||
|  | ||||
|  | ||||
| $(dbus_idle_built_sources) : Makefile.am idle-monitor.xml | ||||
| 	$(AM_V_GEN)gdbus-codegen							\ | ||||
| 		--interface-prefix org.gnome.Mutter					\ | ||||
| 		--c-namespace MetaDBus							\ | ||||
| 		--generate-c-code meta-dbus-idle-monitor				\ | ||||
| 		--c-generate-object-manager						\ | ||||
| 		$(srcdir)/idle-monitor.xml | ||||
|  | ||||
| wayland/%-protocol.c : $(top_builddir)/protocol/%.xml | ||||
| 	mkdir -p wayland | ||||
| 	$(AM_V_GEN)$(WAYLAND_SCANNER) code < $< > $@ | ||||
| wayland/%-server-protocol.h : $(top_builddir)/protocol/%.xml | ||||
| 	mkdir -p wayland | ||||
| 	$(AM_V_GEN)$(WAYLAND_SCANNER) server-header < $< > $@ | ||||
|   | ||||
| @@ -16,9 +16,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include "clutter-utils.h" | ||||
| @@ -95,8 +93,10 @@ meta_actor_vertices_are_untransformed (ClutterVertex *verts, | ||||
|       v3x != v1x || v3y != v2y) | ||||
|     return FALSE; | ||||
|  | ||||
|   *x_origin = x; | ||||
|   *y_origin = y; | ||||
|   if (x_origin) | ||||
|     *x_origin = x; | ||||
|   if (y_origin) | ||||
|     *y_origin = y; | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|   | ||||
| @@ -15,9 +15,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_CLUTTER_UTILS_H__ | ||||
|   | ||||
| @@ -16,9 +16,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| @@ -50,7 +48,7 @@ meta_create_color_texture_4ub (guint8           red, | ||||
|   CoglColor color; | ||||
|   guint8 pixel[4]; | ||||
|  | ||||
|   cogl_color_set_from_4ub (&color, red, green, blue, alpha); | ||||
|   cogl_color_init_from_4ub (&color, red, green, blue, alpha); | ||||
|   cogl_color_premultiply (&color); | ||||
|  | ||||
|   pixel[0] = cogl_color_get_red_byte (&color); | ||||
| @@ -73,10 +71,8 @@ meta_create_color_texture_4ub (guint8           red, | ||||
|  * @src_texture: (allow-none): texture to use initially for the layer | ||||
|  * | ||||
|  * 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 pipelines that are just texture plus opacity | ||||
|  * would require Cogl fixes. | ||||
|  * (See http://bugzilla.clutter-project.org/show_bug.cgi?id=2425) | ||||
|  * makes it easier for Cogl to share a shader for different uses in | ||||
|  * Mutter. | ||||
|  * | ||||
|  * Return value: (transfer full): a newly created #CoglPipeline | ||||
|  */ | ||||
| @@ -86,22 +82,21 @@ meta_create_texture_pipeline (CoglTexture *src_texture) | ||||
|   static CoglPipeline *texture_pipeline_template = NULL; | ||||
|   CoglPipeline *pipeline; | ||||
|  | ||||
|   /* 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. */ | ||||
|   /* The only state used in the pipeline that would affect the shader | ||||
|      generation is the texture type on the layer. Therefore we create | ||||
|      a template pipeline which sets this state and all texture | ||||
|      pipelines are created as a copy of this. That way Cogl can find | ||||
|      the shader state for the pipeline more quickly by looking at the | ||||
|      pipeline ancestry instead of resorting to the shader cache. */ | ||||
|   if (G_UNLIKELY (texture_pipeline_template == NULL)) | ||||
|     { | ||||
|       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); | ||||
|  | ||||
|       CoglContext *ctx = | ||||
|         clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|  | ||||
|       texture_pipeline_template = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_layer_texture (texture_pipeline_template, 0, dummy_texture); | ||||
|       cogl_object_unref (dummy_texture); | ||||
|       cogl_pipeline_set_layer_null_texture (texture_pipeline_template, | ||||
|                                             0, /* layer */ | ||||
|                                             COGL_TEXTURE_TYPE_2D); | ||||
|     } | ||||
|  | ||||
|   pipeline = cogl_pipeline_copy (texture_pipeline_template); | ||||
|   | ||||
| @@ -15,9 +15,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_COGL_UTILS_H__ | ||||
|   | ||||
| @@ -17,8 +17,6 @@ struct _MetaCompositor | ||||
| { | ||||
|   MetaDisplay    *display; | ||||
|  | ||||
|   Atom            atom_x_root_pixmap; | ||||
|   Atom            atom_net_wm_window_opacity; | ||||
|   guint           repaint_func_id; | ||||
|  | ||||
|   ClutterActor   *shadow_src; | ||||
| @@ -48,11 +46,8 @@ struct _MetaCompScreen | ||||
|   CoglFrameClosure      *frame_closure; | ||||
|  | ||||
|   /* Used for unredirecting fullscreen windows */ | ||||
|   guint                   disable_unredirect_count; | ||||
|   MetaWindowActor             *unredirected_window; | ||||
|  | ||||
|   /* Before we create the output window */ | ||||
|   XserverRegion     pending_input_region; | ||||
|   guint                  disable_unredirect_count; | ||||
|   MetaWindow            *unredirected_window; | ||||
|  | ||||
|   gint                   switch_workspace_in_progress; | ||||
|  | ||||
| @@ -66,8 +61,6 @@ void meta_switch_workspace_completed (MetaScreen    *screen); | ||||
|  | ||||
| gboolean meta_begin_modal_for_plugin (MetaScreen       *screen, | ||||
|                                       MetaPlugin       *plugin, | ||||
|                                       Window            grab_window, | ||||
|                                       Cursor            cursor, | ||||
|                                       MetaModalOptions  options, | ||||
|                                       guint32           timestamp); | ||||
| void     meta_end_modal_for_plugin   (MetaScreen       *screen, | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -6,9 +6,6 @@ | ||||
| #include <meta/screen.h> | ||||
| #include <meta/meta-background-actor.h> | ||||
|  | ||||
| void meta_background_actor_set_visible_region  (MetaBackgroundActor *self, | ||||
|                                                 cairo_region_t      *visible_region); | ||||
|  | ||||
| cairo_region_t *meta_background_actor_get_visible_region (MetaBackgroundActor *self); | ||||
| cairo_region_t *meta_background_actor_get_clip_region (MetaBackgroundActor *self); | ||||
|  | ||||
| #endif /* META_BACKGROUND_ACTOR_PRIVATE_H */ | ||||
|   | ||||
| @@ -14,9 +14,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  * Portions adapted from gnome-shell/src/shell-global.c | ||||
|  */ | ||||
| @@ -41,20 +39,35 @@ | ||||
| #include <meta/errors.h> | ||||
| #include <meta/meta-background.h> | ||||
| #include "meta-background-actor-private.h" | ||||
| #include "meta-cullable.h" | ||||
|  | ||||
| struct _MetaBackgroundActorPrivate | ||||
| { | ||||
|   cairo_region_t *visible_region; | ||||
|   cairo_region_t *clip_region; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR); | ||||
| static void cullable_iface_init (MetaCullableInterface *iface); | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_CODE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR, | ||||
|                          G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); | ||||
|  | ||||
| static void | ||||
| set_clip_region (MetaBackgroundActor *self, | ||||
|                  cairo_region_t      *clip_region) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|  | ||||
|   g_clear_pointer (&priv->clip_region, (GDestroyNotify) cairo_region_destroy); | ||||
|   if (clip_region) | ||||
|     priv->clip_region = cairo_region_copy (clip_region); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_dispose (GObject *object) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object); | ||||
|  | ||||
|   meta_background_actor_set_visible_region (self, NULL); | ||||
|   set_clip_region (self, NULL); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_background_actor_parent_class)->dispose (object); | ||||
| } | ||||
| @@ -104,26 +117,6 @@ meta_background_actor_get_preferred_height (ClutterActor *actor, | ||||
|     *natural_height_p = height; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_background_actor_get_paint_volume (ClutterActor       *actor, | ||||
|                                         ClutterPaintVolume *volume) | ||||
| { | ||||
|   ClutterContent *content; | ||||
|   gfloat 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); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_class_init (MetaBackgroundActorClass *klass) | ||||
| { | ||||
| @@ -136,7 +129,6 @@ meta_background_actor_class_init (MetaBackgroundActorClass *klass) | ||||
|  | ||||
|   actor_class->get_preferred_width = meta_background_actor_get_preferred_width; | ||||
|   actor_class->get_preferred_height = meta_background_actor_get_preferred_height; | ||||
|   actor_class->get_paint_volume = meta_background_actor_get_paint_volume; | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -166,35 +158,31 @@ meta_background_actor_new (void) | ||||
|   return CLUTTER_ACTOR (self); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_set_visible_region: | ||||
|  * @self: a #MetaBackgroundActor | ||||
|  * @visible_region: (allow-none): the area of the actor (in allocate-relative | ||||
|  *   coordinates) that is visible. | ||||
|  * | ||||
|  * Sets the area of the background that is unobscured by overlapping windows. | ||||
|  * This is used to optimize and only paint the visible portions. | ||||
|  */ | ||||
| void | ||||
| meta_background_actor_set_visible_region (MetaBackgroundActor *self, | ||||
|                                           cairo_region_t      *visible_region) | ||||
| static void | ||||
| meta_background_actor_cull_out (MetaCullable   *cullable, | ||||
|                                 cairo_region_t *unobscured_region, | ||||
|                                 cairo_region_t *clip_region) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv; | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (cullable); | ||||
|   set_clip_region (self, clip_region); | ||||
| } | ||||
|  | ||||
|   g_return_if_fail (META_IS_BACKGROUND_ACTOR (self)); | ||||
| static void | ||||
| meta_background_actor_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (cullable); | ||||
|   set_clip_region (self, NULL); | ||||
| } | ||||
|  | ||||
|   priv = self->priv; | ||||
|  | ||||
|   g_clear_pointer (&priv->visible_region, | ||||
|                    (GDestroyNotify) | ||||
|                    cairo_region_destroy); | ||||
|  | ||||
|   if (visible_region) | ||||
|     priv->visible_region = cairo_region_copy (visible_region); | ||||
| static void | ||||
| cullable_iface_init (MetaCullableInterface *iface) | ||||
| { | ||||
|   iface->cull_out = meta_background_actor_cull_out; | ||||
|   iface->reset_culling = meta_background_actor_reset_culling; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_get_visible_region: | ||||
|  * meta_background_actor_get_clip_region: | ||||
|  * @self: a #MetaBackgroundActor | ||||
|  * | ||||
|  * Return value (transfer full): a #cairo_region_t that represents the part of | ||||
| @@ -202,16 +190,16 @@ meta_background_actor_set_visible_region (MetaBackgroundActor *self, | ||||
|  * #MetaWindowActor objects. | ||||
|  */ | ||||
| cairo_region_t * | ||||
| meta_background_actor_get_visible_region (MetaBackgroundActor *self) | ||||
| meta_background_actor_get_clip_region (MetaBackgroundActor *self) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|   ClutterActorBox content_box; | ||||
|   cairo_rectangle_int_t content_area = { 0 }; | ||||
|   cairo_region_t *visible_region; | ||||
|   cairo_region_t *clip_region; | ||||
|  | ||||
|   g_return_val_if_fail (META_IS_BACKGROUND_ACTOR (self), NULL); | ||||
|  | ||||
|   if (!priv->visible_region) | ||||
|   if (!priv->clip_region) | ||||
|       return NULL; | ||||
|  | ||||
|   clutter_actor_get_content_box (CLUTTER_ACTOR (self), &content_box); | ||||
| @@ -221,8 +209,8 @@ meta_background_actor_get_visible_region (MetaBackgroundActor *self) | ||||
|   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); | ||||
|   clip_region = cairo_region_create_rectangle (&content_area); | ||||
|   cairo_region_intersect (clip_region, priv->clip_region); | ||||
|  | ||||
|   return visible_region; | ||||
|   return clip_region; | ||||
| } | ||||
|   | ||||
| @@ -1,11 +0,0 @@ | ||||
| /* -*- 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 */ | ||||
| @@ -16,87 +16,43 @@ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include "compositor-private.h" | ||||
| #include "clutter-utils.h" | ||||
| #include "meta-background-actor-private.h" | ||||
| #include "meta-background-group-private.h" | ||||
| #include <meta/meta-background-group.h> | ||||
| #include "meta-cullable.h" | ||||
|  | ||||
| G_DEFINE_TYPE (MetaBackgroundGroup, meta_background_group, CLUTTER_TYPE_ACTOR); | ||||
| static void cullable_iface_init (MetaCullableInterface *iface); | ||||
|  | ||||
| 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); | ||||
| } | ||||
| G_DEFINE_TYPE_WITH_CODE (MetaBackgroundGroup, meta_background_group, CLUTTER_TYPE_ACTOR, | ||||
|                          G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); | ||||
|  | ||||
| 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; | ||||
| static void | ||||
| meta_background_group_cull_out (MetaCullable   *cullable, | ||||
|                                 cairo_region_t *unobscured_region, | ||||
|                                 cairo_region_t *clip_region) | ||||
| { | ||||
|   meta_cullable_cull_out_children (cullable, unobscured_region, clip_region); | ||||
| } | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaBackgroundGroupPrivate)); | ||||
| static void | ||||
| meta_background_group_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   meta_cullable_reset_culling_children (cullable); | ||||
| } | ||||
|  | ||||
| static void | ||||
| cullable_iface_init (MetaCullableInterface *iface) | ||||
| { | ||||
|   iface->cull_out = meta_background_group_cull_out; | ||||
|   iface->reset_culling = meta_background_group_reset_culling; | ||||
| } | ||||
|  | ||||
| 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 * | ||||
|   | ||||
| @@ -14,9 +14,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
| @@ -37,43 +35,9 @@ | ||||
| #include "mutter-enum-types.h" | ||||
| #include <meta/errors.h> | ||||
| #include <meta/meta-background.h> | ||||
| #include "util-private.h" | ||||
| #include "meta-background-actor-private.h" | ||||
|  | ||||
| #define TEXTURE_LOOKUP_SHADER_DECLARATIONS                                     \ | ||||
| "uniform vec2 pixel_step;\n"                                                   \ | ||||
| "vec4 apply_blur(in sampler2D texture, in vec2 coordinates) {\n"               \ | ||||
| " vec4 texel;\n"                                                               \ | ||||
| " texel  = texture2D(texture, coordinates.st);\n"                                \ | ||||
| " texel += texture2D(texture, coordinates.st + pixel_step * vec2(-1.0, -1.0));\n"\ | ||||
| " texel += texture2D(texture, coordinates.st + pixel_step * vec2( 0.0, -1.0));\n"\ | ||||
| " texel += texture2D(texture, coordinates.st + pixel_step * vec2(+1.0, -1.0));\n"\ | ||||
| " texel += texture2D(texture, coordinates.st + pixel_step * vec2(-1.0,  0.0));\n"\ | ||||
| " texel += texture2D(texture, coordinates.st + pixel_step * vec2(+1.0,  0.0));\n"\ | ||||
| " texel += texture2D(texture, coordinates.st + pixel_step * vec2(-1.0, +1.0));\n"\ | ||||
| " texel += texture2D(texture, coordinates.st + pixel_step * vec2( 0.0, +1.0));\n"\ | ||||
| " texel += texture2D(texture, coordinates.st + pixel_step * vec2(+1.0, +1.0));\n"\ | ||||
| " texel /= 9.0;\n"                                                             \ | ||||
| " return texel;\n"                                                             \ | ||||
| "}\n"                                                                          \ | ||||
| "uniform float saturation;\n"                                                  \ | ||||
| "vec3 desaturate(const vec3 color)\n"                                          \ | ||||
| "{\n"                                                                          \ | ||||
| "   const vec3 gray_conv = vec3(0.299, 0.587, 0.114);\n"                       \ | ||||
| "   vec3 gray = vec3(dot(gray_conv, color));\n"                                \ | ||||
| "   return vec3(mix(color.rgb, gray, 1.0 - saturation));\n"                    \ | ||||
| "}\n"                                                                          \ | ||||
|  | ||||
| /* Used when we don't have a blur, as the texel is going to be junk | ||||
|  * unless we set something to it. */ | ||||
| #define DESATURATE_PRELUDE                                                     \ | ||||
| "cogl_texel = texture2D(cogl_sampler, cogl_tex_coord.st);\n" | ||||
|  | ||||
| #define DESATURATE_CODE                                                        \ | ||||
| "cogl_texel.rgb = desaturate(cogl_texel.rgb);\n" | ||||
|  | ||||
| #define BLUR_CODE                                                              \ | ||||
| "cogl_texel = apply_blur(cogl_sampler, cogl_tex_coord.st);\n" | ||||
|  | ||||
| #define FRAGMENT_SHADER_DECLARATIONS                                           \ | ||||
| "uniform vec2 texture_scale;\n"                                                \ | ||||
| "uniform vec2 actor_size;\n"                                                   \ | ||||
| @@ -96,7 +60,6 @@ | ||||
|  * | ||||
|  * This object provides a ClutterContent object to assist in sharing between actors. | ||||
|  */ | ||||
| typedef struct _MetaBackgroundPrivate MetaBackgroundPrivate; | ||||
|  | ||||
| struct _MetaBackgroundPrivate | ||||
| { | ||||
| @@ -116,7 +79,6 @@ struct _MetaBackgroundPrivate | ||||
|  | ||||
|   float brightness; | ||||
|   float vignette_sharpness; | ||||
|   float saturation; | ||||
| }; | ||||
|  | ||||
| enum | ||||
| @@ -126,7 +88,6 @@ enum | ||||
|   PROP_EFFECTS, | ||||
|   PROP_BRIGHTNESS, | ||||
|   PROP_VIGNETTE_SHARPNESS, | ||||
|   PROP_SATURATION | ||||
| }; | ||||
|  | ||||
| static void clutter_content_iface_init (ClutterContentIface *iface); | ||||
| @@ -136,7 +97,6 @@ G_DEFINE_TYPE_WITH_CODE (MetaBackground, meta_background, G_TYPE_OBJECT, | ||||
|                          G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT, | ||||
|                                                 clutter_content_iface_init)) | ||||
|  | ||||
|  | ||||
| static gboolean | ||||
| meta_background_get_preferred_size (ClutterContent *content, | ||||
|                                     gfloat         *width, | ||||
| @@ -367,25 +327,6 @@ clip_region_to_actor_box (cairo_region_t  *region, | ||||
|   cairo_region_intersect_rectangle (region, &clip_rect); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_blur_parameters (MetaBackground  *self, | ||||
|                      ClutterActorBox *actor_box) | ||||
| { | ||||
|   MetaBackgroundPrivate *priv = self->priv; | ||||
|   float pixel_step[2]; | ||||
|  | ||||
|   if (!(priv->effects & META_BACKGROUND_EFFECTS_BLUR)) | ||||
|     return; | ||||
|  | ||||
|   pixel_step[0] = 1.0 / (actor_box->x2 - actor_box->x1); | ||||
|   pixel_step[1] = 1.0 / (actor_box->y2 - actor_box->y1); | ||||
|  | ||||
|   cogl_pipeline_set_uniform_float (priv->pipeline, | ||||
|                                    cogl_pipeline_get_uniform_location (priv->pipeline, | ||||
|                                                                        "pixel_step"), | ||||
|                                    2, 1, pixel_step); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_vignette_parameters (MetaBackground        *self, | ||||
|                          ClutterActorBox       *actor_box, | ||||
| @@ -447,8 +388,6 @@ meta_background_paint_content (ClutterContent   *content, | ||||
|  | ||||
|   clutter_actor_get_content_box (actor, &actor_box); | ||||
|  | ||||
|   set_blur_parameters (self, &actor_box); | ||||
|  | ||||
|   /* First figure out where on the monitor the texture is supposed to be painted. | ||||
|    * If the actor is not the size of the monitor, this function makes sure to scale | ||||
|    * everything down to fit in the actor. | ||||
| @@ -472,13 +411,13 @@ meta_background_paint_content (ClutterContent   *content, | ||||
|    */ | ||||
|   if (META_IS_BACKGROUND_ACTOR (actor)) | ||||
|     { | ||||
|       cairo_region_t *visible_region; | ||||
|       visible_region = meta_background_actor_get_visible_region (META_BACKGROUND_ACTOR (actor)); | ||||
|       cairo_region_t *clip_region; | ||||
|       clip_region = meta_background_actor_get_clip_region (META_BACKGROUND_ACTOR (actor)); | ||||
|  | ||||
|       if (visible_region != NULL) | ||||
|       if (clip_region != NULL) | ||||
|         { | ||||
|           cairo_region_intersect (paintable_region, visible_region); | ||||
|           cairo_region_destroy (visible_region); | ||||
|           cairo_region_intersect (paintable_region, clip_region); | ||||
|           cairo_region_destroy (clip_region); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -532,6 +471,17 @@ meta_background_dispose (GObject *object) | ||||
|   G_OBJECT_CLASS (meta_background_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_finalize (GObject *object) | ||||
| { | ||||
|   MetaBackground        *self = META_BACKGROUND (object); | ||||
|   MetaBackgroundPrivate *priv = self->priv; | ||||
|  | ||||
|   g_free (priv->filename); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_background_parent_class)->finalize (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ensure_pipeline (MetaBackground *self) | ||||
| { | ||||
| @@ -589,74 +539,22 @@ set_vignette_sharpness (MetaBackground *self, | ||||
|   g_object_notify (G_OBJECT (self), "vignette-sharpness"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_saturation (MetaBackground *self, | ||||
|                 gfloat          saturation) | ||||
| { | ||||
|   MetaBackgroundPrivate *priv = self->priv; | ||||
|  | ||||
|   if (priv->saturation == saturation) | ||||
|     return; | ||||
|  | ||||
|   priv->saturation = saturation; | ||||
|  | ||||
|   ensure_pipeline (self); | ||||
|  | ||||
|   cogl_pipeline_set_uniform_1f (priv->pipeline, | ||||
| 				cogl_pipeline_get_uniform_location (priv->pipeline, | ||||
| 								    "saturation"), | ||||
| 				priv->saturation); | ||||
|  | ||||
|  | ||||
|   clutter_content_invalidate (CLUTTER_CONTENT (self)); | ||||
|  | ||||
|   g_object_notify (G_OBJECT (self), "saturation"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| add_texture_lookup_shader (MetaBackground *self) | ||||
| { | ||||
|   MetaBackgroundPrivate *priv = self->priv; | ||||
|   CoglSnippet *snippet; | ||||
|   const char *code = NULL; | ||||
|  | ||||
|   if ((priv->effects & META_BACKGROUND_EFFECTS_BLUR) && | ||||
|       (priv->effects & META_BACKGROUND_EFFECTS_DESATURATE)) | ||||
|     code = BLUR_CODE "\n" DESATURATE_CODE; | ||||
|   else if (priv->effects & META_BACKGROUND_EFFECTS_BLUR) | ||||
|     code = BLUR_CODE; | ||||
|   else if (priv->effects & META_BACKGROUND_EFFECTS_DESATURATE) | ||||
|     code = DESATURATE_PRELUDE "\n" DESATURATE_CODE; | ||||
|   else | ||||
|     return; | ||||
|  | ||||
|   ensure_pipeline (self); | ||||
|  | ||||
|   snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_TEXTURE_LOOKUP, | ||||
|                               TEXTURE_LOOKUP_SHADER_DECLARATIONS, | ||||
|                               NULL); | ||||
|   cogl_snippet_set_replace (snippet, code); | ||||
|   cogl_pipeline_add_layer_snippet (priv->pipeline, 0, snippet); | ||||
|   cogl_object_unref (snippet); | ||||
|  | ||||
|   if (priv->effects & META_BACKGROUND_EFFECTS_DESATURATE) | ||||
|       cogl_pipeline_set_uniform_1f (priv->pipeline, | ||||
|                                     cogl_pipeline_get_uniform_location (priv->pipeline, | ||||
|                                                                         "saturation"), | ||||
|                                     priv->saturation); | ||||
| } | ||||
|  | ||||
| static void | ||||
| add_vignette (MetaBackground *self) | ||||
| { | ||||
|   MetaBackgroundPrivate *priv = self->priv; | ||||
|   CoglSnippet *snippet; | ||||
|   static CoglSnippet *snippet = NULL; | ||||
|  | ||||
|   ensure_pipeline (self); | ||||
|  | ||||
|   snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_FRAGMENT, FRAGMENT_SHADER_DECLARATIONS, VIGNETTE_CODE); | ||||
|   /* Cogl automatically caches pipelines with no eviction policy, | ||||
|    * so we need to prevent identical pipelines from getting cached | ||||
|    * separately, by reusing the same fragement shader snippet. | ||||
|    */ | ||||
|   if (snippet == NULL) | ||||
|     snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_FRAGMENT, FRAGMENT_SHADER_DECLARATIONS, VIGNETTE_CODE); | ||||
|  | ||||
|   cogl_pipeline_add_snippet (priv->pipeline, snippet); | ||||
|   cogl_object_unref (snippet); | ||||
|  | ||||
|   cogl_pipeline_set_uniform_1f (priv->pipeline, | ||||
|                                 cogl_pipeline_get_uniform_location (priv->pipeline, | ||||
| @@ -677,10 +575,6 @@ set_effects (MetaBackground        *self, | ||||
|  | ||||
|   priv->effects = effects; | ||||
|  | ||||
|   if ((priv->effects & META_BACKGROUND_EFFECTS_BLUR) || | ||||
|       (priv->effects & META_BACKGROUND_EFFECTS_DESATURATE)) | ||||
|     add_texture_lookup_shader (self); | ||||
|  | ||||
|   if ((priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)) | ||||
|     add_vignette (self); | ||||
|  | ||||
| @@ -713,9 +607,6 @@ meta_background_set_property (GObject      *object, | ||||
|     case PROP_VIGNETTE_SHARPNESS: | ||||
|       set_vignette_sharpness (self, g_value_get_float (value)); | ||||
|       break; | ||||
|     case PROP_SATURATION: | ||||
|       set_saturation (self, g_value_get_float (value)); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
| @@ -747,9 +638,6 @@ meta_background_get_property (GObject      *object, | ||||
|     case PROP_VIGNETTE_SHARPNESS: | ||||
|       g_value_set_float (value, priv->vignette_sharpness); | ||||
|       break; | ||||
|     case PROP_SATURATION: | ||||
|       g_value_set_float (value, priv->saturation); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
| @@ -765,6 +653,7 @@ meta_background_class_init (MetaBackgroundClass *klass) | ||||
|   g_type_class_add_private (klass, sizeof (MetaBackgroundPrivate)); | ||||
|  | ||||
|   object_class->dispose = meta_background_dispose; | ||||
|   object_class->finalize = meta_background_finalize; | ||||
|   object_class->set_property = meta_background_set_property; | ||||
|   object_class->get_property = meta_background_get_property; | ||||
|  | ||||
| @@ -804,17 +693,9 @@ meta_background_class_init (MetaBackgroundClass *klass) | ||||
|                                    G_PARAM_READWRITE | G_PARAM_CONSTRUCT); | ||||
|   g_object_class_install_property (object_class, PROP_VIGNETTE_SHARPNESS, param_spec); | ||||
|  | ||||
|   param_spec = g_param_spec_float ("saturation", | ||||
|                                    "saturation", | ||||
|                                    "Values less than 1.0 grays background", | ||||
|                                    0.0, 1.0, | ||||
|                                    1.0, | ||||
|                                    G_PARAM_READWRITE | G_PARAM_CONSTRUCT); | ||||
|   g_object_class_install_property (object_class, PROP_SATURATION, param_spec); | ||||
|  | ||||
|   param_spec = g_param_spec_flags ("effects", | ||||
|                                    "Effects", | ||||
|                                    "Set to alter saturation, to blur, etc", | ||||
|                                    "Set to enable vignette", | ||||
| 				   meta_background_effects_get_type (), | ||||
|                                    META_BACKGROUND_EFFECTS_NONE, | ||||
|                                    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); | ||||
| @@ -833,7 +714,8 @@ static void | ||||
| unset_texture (MetaBackground *self) | ||||
| { | ||||
|   MetaBackgroundPrivate *priv = self->priv; | ||||
|   cogl_pipeline_set_layer_texture (priv->pipeline, 0, NULL); | ||||
|   if (priv->pipeline != NULL) | ||||
|     cogl_pipeline_set_layer_texture (priv->pipeline, 0, NULL); | ||||
|  | ||||
|   g_clear_pointer (&priv->texture, | ||||
|                    (GDestroyNotify) | ||||
| @@ -1129,6 +1011,7 @@ meta_background_load_file_async (MetaBackground          *self, | ||||
|     g_task_set_task_data (task, task_data, (GDestroyNotify) load_file_task_data_free); | ||||
|  | ||||
|     g_task_run_in_thread (task, (GTaskThreadFunc) load_file); | ||||
|     g_object_unref (task); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -1147,7 +1030,6 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|                                   GAsyncResult    *result, | ||||
|                                   GError         **error) | ||||
| { | ||||
|   static CoglUserDataKey key; | ||||
|   GTask *task; | ||||
|   LoadFileTaskData *task_data; | ||||
|   CoglTexture *texture; | ||||
| @@ -1155,6 +1037,7 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|   int width, height, row_stride; | ||||
|   guchar *pixels; | ||||
|   gboolean has_alpha; | ||||
|   gboolean loaded = FALSE; | ||||
|  | ||||
|   g_return_val_if_fail (g_task_is_valid (result, self), FALSE); | ||||
|  | ||||
| @@ -1163,7 +1046,7 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|   pixbuf = g_task_propagate_pointer (task, error); | ||||
|  | ||||
|   if (pixbuf == NULL) | ||||
|     return FALSE; | ||||
|     goto out; | ||||
|  | ||||
|   task_data = g_task_get_task_data (task); | ||||
|  | ||||
| @@ -1175,7 +1058,7 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|  | ||||
|   texture = cogl_texture_new_from_data (width, | ||||
|                                         height, | ||||
|                                         COGL_TEXTURE_NO_SLICING, | ||||
|                                         COGL_TEXTURE_NO_ATLAS, | ||||
|                                         has_alpha ? | ||||
|                                         COGL_PIXEL_FORMAT_RGBA_8888 : | ||||
|                                         COGL_PIXEL_FORMAT_RGB_888, | ||||
| @@ -1189,15 +1072,9 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|                            COGL_BITMAP_ERROR, | ||||
|                            COGL_BITMAP_ERROR_FAILED, | ||||
|                            _("background texture could not be created from file")); | ||||
|       return FALSE; | ||||
|       goto out; | ||||
|     } | ||||
|  | ||||
|   cogl_object_set_user_data (COGL_OBJECT (texture), | ||||
|                              &key, | ||||
|                              g_object_ref (pixbuf), | ||||
|                              (CoglUserDataDestroyCallback) | ||||
|                              g_object_unref); | ||||
|  | ||||
|   ensure_pipeline (self); | ||||
|   unset_texture (self); | ||||
|   set_style (self, task_data->style); | ||||
| @@ -1205,8 +1082,12 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|   set_texture (self, texture); | ||||
|  | ||||
|   clutter_content_invalidate (CLUTTER_CONTENT (self)); | ||||
|   loaded = TRUE; | ||||
|  | ||||
|   return TRUE; | ||||
| out: | ||||
|   if (pixbuf != NULL) | ||||
|     g_object_unref (pixbuf); | ||||
|   return loaded; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -1250,15 +1131,11 @@ meta_background_copy (MetaBackground        *self, | ||||
|       background->priv->pipeline = cogl_pipeline_copy (self->priv->pipeline); | ||||
|       background->priv->texture = cogl_object_ref (self->priv->texture); | ||||
|       background->priv->style = self->priv->style; | ||||
|       background->priv->saturation = self->priv->saturation; | ||||
|  | ||||
|       if (effects != self->priv->effects) | ||||
|         { | ||||
|           set_effects (background, effects); | ||||
|  | ||||
|           if (effects & META_BACKGROUND_EFFECTS_DESATURATE) | ||||
|             set_saturation (background, self->priv->saturation); | ||||
|  | ||||
|           if (effects & META_BACKGROUND_EFFECTS_VIGNETTE) | ||||
|             { | ||||
|               set_brightness (background, self->priv->brightness); | ||||
| @@ -1279,9 +1156,6 @@ meta_background_copy (MetaBackground        *self, | ||||
|       set_style (background, self->priv->style); | ||||
|       set_effects (background, effects); | ||||
|  | ||||
|       if (effects & META_BACKGROUND_EFFECTS_DESATURATE) | ||||
|         set_saturation (background, self->priv->saturation); | ||||
|  | ||||
|       if (effects & META_BACKGROUND_EFFECTS_VIGNETTE) | ||||
|         { | ||||
|           set_brightness (background, self->priv->brightness); | ||||
| @@ -1303,8 +1177,7 @@ meta_background_copy (MetaBackground        *self, | ||||
|  * The returned object should be set on a #MetaBackgroundActor with | ||||
|  * clutter_actor_set_content(). | ||||
|  * | ||||
|  * The background may be desaturated, blurred, or given a vignette depending | ||||
|  * on @effects. | ||||
|  * The background may be given a vignette by setting @effects | ||||
|  * | ||||
|  * Return value: the newly created background content | ||||
|  */ | ||||
|   | ||||
							
								
								
									
										201
									
								
								src/compositor/meta-cullable.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								src/compositor/meta-cullable.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,201 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| /* | ||||
|  * Copyright (C) 2013 Red Hat | ||||
|  * | ||||
|  * 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, see <http://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  * Written by: | ||||
|  *     Owen Taylor <otaylor@redhat.com> | ||||
|  *     Ray Strode <rstrode@redhat.com> | ||||
|  *     Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
| #include "meta-cullable.h" | ||||
| #include "clutter-utils.h" | ||||
|  | ||||
| G_DEFINE_INTERFACE (MetaCullable, meta_cullable, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-cullable | ||||
|  * @title: MetaCullable | ||||
|  * @short_description: CPU culling operations for efficient drawing | ||||
|  * | ||||
|  * When we are painting a stack of 5-10 large actors, the standard | ||||
|  * bottom-to-top method of drawing every actor results in a tremendous | ||||
|  * amount of overdraw. If these actors are painting textures like | ||||
|  * windows, it can easily max out the available memory bandwidth on a | ||||
|  * low-end graphics chipset. It's even worse if window textures are | ||||
|  * being accessed over the AGP bus. | ||||
|  * | ||||
|  * #MetaCullable is our solution. The basic technique applied here is to | ||||
|  * do a pre-pass before painting where we walk each actor from top to bottom | ||||
|  * and ask each actor to "cull itself out". We pass in a region it can copy | ||||
|  * to clip its drawing to, and the actor can subtract its fully opaque pixels | ||||
|  * so that actors underneath know not to draw there as well. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * meta_cullable_cull_out_children: | ||||
|  * @cullable: The #MetaCullable | ||||
|  * @unobscured_region: The unobscured region, as passed into cull_out() | ||||
|  * @clip_region: The clip region, as passed into cull_out() | ||||
|  * | ||||
|  * This is a helper method for actors that want to recurse over their | ||||
|  * child actors, and cull them out. | ||||
|  * | ||||
|  * See #MetaCullable and meta_cullable_cull_out() for more details. | ||||
|  */ | ||||
| void | ||||
| meta_cullable_cull_out_children (MetaCullable   *cullable, | ||||
|                                  cairo_region_t *unobscured_region, | ||||
|                                  cairo_region_t *clip_region) | ||||
| { | ||||
|   ClutterActor *actor = CLUTTER_ACTOR (cullable); | ||||
|   ClutterActor *child; | ||||
|   ClutterActorIter iter; | ||||
|  | ||||
|   clutter_actor_iter_init (&iter, actor); | ||||
|   while (clutter_actor_iter_prev (&iter, &child)) | ||||
|     { | ||||
|       float x, y; | ||||
|       gboolean needs_culling; | ||||
|  | ||||
|       if (!META_IS_CULLABLE (child)) | ||||
|         continue; | ||||
|  | ||||
|       needs_culling = (unobscured_region != NULL && clip_region != NULL); | ||||
|  | ||||
|       if (needs_culling && !CLUTTER_ACTOR_IS_VISIBLE (child)) | ||||
|         needs_culling = FALSE; | ||||
|  | ||||
|       /* If an actor has effects applied, then that can change the area | ||||
|        * it paints and the opacity, so we no longer can figure out what | ||||
|        * portion of the actor is obscured and what portion of the screen | ||||
|        * it obscures, so we skip the actor. | ||||
|        * | ||||
|        * This has a secondary beneficial effect: if a ClutterOffscreenEffect | ||||
|        * is applied to an actor, then our clipped redraws interfere with the | ||||
|        * caching of the FBO - even if we only need to draw a small portion | ||||
|        * of the window right now, ClutterOffscreenEffect may use other portions | ||||
|        * of the FBO later. So, skipping actors with effects applied also | ||||
|        * prevents these bugs. | ||||
|        * | ||||
|        * Theoretically, we should check clutter_actor_get_offscreen_redirect() | ||||
|        * as well for the same reason, but omitted for simplicity in the | ||||
|        * hopes that no-one will do that. | ||||
|        */ | ||||
|       if (needs_culling && clutter_actor_has_effects (child)) | ||||
|         needs_culling = FALSE; | ||||
|  | ||||
|       if (needs_culling && !meta_actor_is_untransformed (child, NULL, NULL)) | ||||
|         needs_culling = FALSE; | ||||
|  | ||||
|       if (needs_culling) | ||||
|         { | ||||
|           clutter_actor_get_position (child, &x, &y); | ||||
|  | ||||
|           /* Temporarily move to the coordinate system of the actor */ | ||||
|           cairo_region_translate (unobscured_region, - x, - y); | ||||
|           cairo_region_translate (clip_region, - x, - y); | ||||
|  | ||||
|           meta_cullable_cull_out (META_CULLABLE (child), unobscured_region, clip_region); | ||||
|  | ||||
|           cairo_region_translate (unobscured_region, x, y); | ||||
|           cairo_region_translate (clip_region, x, y); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           meta_cullable_cull_out (META_CULLABLE (child), NULL, NULL); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_cullable_reset_culling_children: | ||||
|  * @cullable: The #MetaCullable | ||||
|  * | ||||
|  * This is a helper method for actors that want to recurse over their | ||||
|  * child actors, and cull them out. | ||||
|  * | ||||
|  * See #MetaCullable and meta_cullable_reset_culling() for more details. | ||||
|  */ | ||||
| void | ||||
| meta_cullable_reset_culling_children (MetaCullable *cullable) | ||||
| { | ||||
|   ClutterActor *actor = CLUTTER_ACTOR (cullable); | ||||
|   ClutterActor *child; | ||||
|   ClutterActorIter iter; | ||||
|  | ||||
|   clutter_actor_iter_init (&iter, actor); | ||||
|   while (clutter_actor_iter_next (&iter, &child)) | ||||
|     { | ||||
|       if (!META_IS_CULLABLE (child)) | ||||
|         continue; | ||||
|  | ||||
|       meta_cullable_reset_culling (META_CULLABLE (child)); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_cullable_default_init (MetaCullableInterface *iface) | ||||
| { | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_cullable_cull_out: | ||||
|  * @cullable: The #MetaCullable | ||||
|  * @unobscured_region: The unobscured region, in @cullable's space. | ||||
|  * @clip_region: The clip region, in @cullable's space. | ||||
|  * | ||||
|  * When #MetaWindowGroup is painted, we walk over its direct cullable | ||||
|  * children from top to bottom and ask themselves to "cull out". Cullables | ||||
|  * can use @unobscured_region and @clip_region to clip their drawing. Actors | ||||
|  * interested in eliminating overdraw should copy the @clip_region and only | ||||
|  * paint those parts, as everything else has been obscured by actors above it. | ||||
|  * | ||||
|  * Actors that may have fully opaque parts should also subtract out a region | ||||
|  * that is fully opaque from @unobscured_region and @clip_region. | ||||
|  * | ||||
|  * @unobscured_region and @clip_region are extremely similar. The difference | ||||
|  * is that @clip_region starts off with the stage's clip, if Clutter detects | ||||
|  * that we're doing a clipped redraw. @unobscured_region, however, starts off | ||||
|  * with the full stage size, so actors that may want to record what parts of | ||||
|  * their window are unobscured for e.g. scheduling repaints can do so. | ||||
|  * | ||||
|  * Actors that have children can also use the meta_cullable_cull_out_children() | ||||
|  * helper method to do a simple cull across all their children. | ||||
|  */ | ||||
| void | ||||
| meta_cullable_cull_out (MetaCullable   *cullable, | ||||
|                         cairo_region_t *unobscured_region, | ||||
|                         cairo_region_t *clip_region) | ||||
| { | ||||
|   META_CULLABLE_GET_IFACE (cullable)->cull_out (cullable, unobscured_region, clip_region); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_cullable_reset_culling: | ||||
|  * @cullable: The #MetaCullable | ||||
|  * | ||||
|  * Actors that copied data in their cull_out() implementation can now | ||||
|  * reset their data, as the paint is now over. Additional paints may be | ||||
|  * done by #ClutterClone or similar, and they should not be affected by | ||||
|  * the culling operation. | ||||
|  */ | ||||
| void | ||||
| meta_cullable_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   META_CULLABLE_GET_IFACE (cullable)->reset_culling (cullable); | ||||
| } | ||||
							
								
								
									
										66
									
								
								src/compositor/meta-cullable.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/compositor/meta-cullable.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (C) 2013 Red Hat | ||||
|  * | ||||
|  * 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, see <http://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  * Written by: | ||||
|  *     Owen Taylor <otaylor@redhat.com> | ||||
|  *     Ray Strode <rstrode@redhat.com> | ||||
|  *     Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_CULLABLE_H__ | ||||
| #define __META_CULLABLE_H__ | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define META_TYPE_CULLABLE             (meta_cullable_get_type ()) | ||||
| #define META_CULLABLE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_CULLABLE, MetaCullable)) | ||||
| #define META_IS_CULLABLE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_CULLABLE)) | ||||
| #define META_CULLABLE_GET_IFACE(obj)   (G_TYPE_INSTANCE_GET_INTERFACE ((obj),  META_TYPE_CULLABLE, MetaCullableInterface)) | ||||
|  | ||||
| typedef struct _MetaCullable MetaCullable; | ||||
| typedef struct _MetaCullableInterface MetaCullableInterface; | ||||
|  | ||||
| struct _MetaCullableInterface | ||||
| { | ||||
|   GTypeInterface g_iface; | ||||
|  | ||||
|   void (* cull_out)      (MetaCullable   *cullable, | ||||
|                           cairo_region_t *unobscured_region, | ||||
|                           cairo_region_t *clip_region); | ||||
|   void (* reset_culling) (MetaCullable  *cullable); | ||||
| }; | ||||
|  | ||||
| GType meta_cullable_get_type (void); | ||||
|  | ||||
| void meta_cullable_cull_out (MetaCullable   *cullable, | ||||
|                              cairo_region_t *unobscured_region, | ||||
|                              cairo_region_t *clip_region); | ||||
| void meta_cullable_reset_culling (MetaCullable *cullable); | ||||
|  | ||||
| /* Utility methods for implementations */ | ||||
| void meta_cullable_cull_out_children (MetaCullable   *cullable, | ||||
|                                       cairo_region_t *unobscured_region, | ||||
|                                       cairo_region_t *clip_region); | ||||
| void meta_cullable_reset_culling_children (MetaCullable *cullable); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __META_CULLABLE_H__ */ | ||||
|  | ||||
| @@ -16,9 +16,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <meta/meta-plugin.h> | ||||
| @@ -192,10 +190,7 @@ meta_module_class_init (MetaModuleClass *klass) | ||||
| static void | ||||
| meta_module_init (MetaModule *self) | ||||
| { | ||||
|   MetaModulePrivate *priv; | ||||
|  | ||||
|   self->priv = priv = META_MODULE_GET_PRIVATE (self); | ||||
|  | ||||
|   self->priv = META_MODULE_GET_PRIVATE (self); | ||||
| } | ||||
|  | ||||
| GType | ||||
|   | ||||
| @@ -16,9 +16,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef META_MODULE_H_ | ||||
|   | ||||
| @@ -16,9 +16,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
| @@ -85,12 +83,20 @@ meta_plugin_manager_load (const gchar       *plugin_name) | ||||
|   g_free (path); | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_confirm_display_change (MetaMonitorManager *monitors, | ||||
|                            MetaPluginManager  *plugin_mgr) | ||||
| { | ||||
|   meta_plugin_manager_confirm_display_change (plugin_mgr); | ||||
| } | ||||
|  | ||||
| MetaPluginManager * | ||||
| meta_plugin_manager_new (MetaScreen *screen) | ||||
| { | ||||
|   MetaPluginManager *plugin_mgr; | ||||
|   MetaPluginClass *klass; | ||||
|   MetaPlugin *plugin; | ||||
|   MetaMonitorManager *monitors; | ||||
|  | ||||
|   plugin_mgr = g_new0 (MetaPluginManager, 1); | ||||
|   plugin_mgr->screen = screen; | ||||
| @@ -101,6 +107,10 @@ meta_plugin_manager_new (MetaScreen *screen) | ||||
|   if (klass->start) | ||||
|     klass->start (plugin); | ||||
|  | ||||
|   monitors = meta_monitor_manager_get (); | ||||
|   g_signal_connect (monitors, "confirm-display-change", | ||||
|                     G_CALLBACK (on_confirm_display_change), plugin_mgr); | ||||
|  | ||||
|   return plugin_mgr; | ||||
| } | ||||
|  | ||||
| @@ -294,29 +304,64 @@ meta_plugin_manager_filter_keybinding (MetaPluginManager *plugin_mgr, | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * The public method that the compositor hooks into for desktop switching. | ||||
|  * | ||||
|  * 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. | ||||
|  */ | ||||
| gboolean | ||||
| meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr, | ||||
|                                    XEvent            *xev) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|  | ||||
|   return _meta_plugin_xevent_filter (plugin, xev); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_manager_confirm_display_change (MetaPluginManager *plugin_mgr) | ||||
| { | ||||
|   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. | ||||
|    */ | ||||
|   if (klass->xevent_filter) | ||||
|     return klass->xevent_filter (plugin, xev); | ||||
|   if (klass->confirm_display_change) | ||||
|     return klass->confirm_display_change (plugin); | ||||
|   else | ||||
|     return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE; | ||||
|     return meta_plugin_complete_display_change (plugin, TRUE); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_plugin_manager_show_tile_preview (MetaPluginManager *plugin_mgr, | ||||
|                                        MetaWindow        *window, | ||||
|                                        MetaRectangle     *tile_rect, | ||||
|                                        int                tile_monitor_number) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   MetaDisplay *display  = meta_screen_get_display (plugin_mgr->screen); | ||||
|  | ||||
|   if (display->display_opening) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (klass->show_tile_preview) | ||||
|     { | ||||
|       klass->show_tile_preview (plugin, window, tile_rect, tile_monitor_number); | ||||
|       return TRUE; | ||||
|     } | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_plugin_manager_hide_tile_preview (MetaPluginManager *plugin_mgr) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   MetaDisplay *display  = meta_screen_get_display (plugin_mgr->screen); | ||||
|  | ||||
|   if (display->display_opening) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (klass->hide_tile_preview) | ||||
|     { | ||||
|       klass->hide_tile_preview (plugin); | ||||
|       return TRUE; | ||||
|     } | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|   | ||||
| @@ -16,9 +16,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef META_PLUGIN_MANAGER_H_ | ||||
| @@ -72,5 +70,14 @@ gboolean meta_plugin_manager_filter_keybinding (MetaPluginManager  *mgr, | ||||
|  | ||||
| gboolean meta_plugin_manager_xevent_filter (MetaPluginManager *mgr, | ||||
|                                             XEvent            *xev); | ||||
| gboolean _meta_plugin_xevent_filter (MetaPlugin *plugin, | ||||
|                                      XEvent     *xev); | ||||
|  | ||||
| void     meta_plugin_manager_confirm_display_change (MetaPluginManager *mgr); | ||||
|  | ||||
| gboolean meta_plugin_manager_show_tile_preview (MetaPluginManager *mgr, | ||||
|                                                 MetaWindow        *window, | ||||
|                                                 MetaRectangle     *tile_rect, | ||||
|                                                 int                tile_monitor_number); | ||||
| gboolean meta_plugin_manager_hide_tile_preview (MetaPluginManager *mgr); | ||||
| #endif | ||||
|   | ||||
| @@ -16,9 +16,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
| @@ -32,6 +30,7 @@ | ||||
| #include "meta-plugin-manager.h" | ||||
| #include <meta/screen.h> | ||||
| #include <meta/display.h> | ||||
| #include <meta/util.h> | ||||
|  | ||||
| #include <string.h> | ||||
| #include <X11/Xlib.h> | ||||
| @@ -41,6 +40,7 @@ | ||||
|  | ||||
| #include "compositor-private.h" | ||||
| #include "meta-window-actor-private.h" | ||||
| #include "monitor-private.h" | ||||
|  | ||||
| G_DEFINE_ABSTRACT_TYPE (MetaPlugin, meta_plugin, G_TYPE_OBJECT); | ||||
|  | ||||
| @@ -137,9 +137,7 @@ meta_plugin_class_init (MetaPluginClass *klass) | ||||
| static void | ||||
| meta_plugin_init (MetaPlugin *self) | ||||
| { | ||||
|   MetaPluginPrivate *priv; | ||||
|  | ||||
|   self->priv = priv = META_PLUGIN_GET_PRIVATE (self); | ||||
|   self->priv = META_PLUGIN_GET_PRIVATE (self); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| @@ -184,6 +182,28 @@ _meta_plugin_effect_started (MetaPlugin *plugin) | ||||
|   priv->running++; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| _meta_plugin_xevent_filter (MetaPlugin *plugin, | ||||
|                             XEvent     *xev) | ||||
| { | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   /* When mutter is running as a wayland compositor, things like input | ||||
|    * events just come directly from clutter so it won't have disabled | ||||
|    * clutter's event retrieval and won't need to forward it events (if | ||||
|    * it did it would lead to recursion). Also when running as a | ||||
|    * wayland compositor we shouldn't be assuming that we're running | ||||
|    * with the clutter x11 backend. | ||||
|    */ | ||||
|  | ||||
|   if (klass->xevent_filter && klass->xevent_filter (plugin, xev)) | ||||
|     return TRUE; | ||||
|   else if (!meta_is_wayland_compositor ()) | ||||
|     return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE; | ||||
|   else | ||||
|     return FALSE; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_switch_workspace_completed (MetaPlugin *plugin) | ||||
| { | ||||
| @@ -266,10 +286,6 @@ meta_plugin_destroy_completed (MetaPlugin      *plugin, | ||||
| /** | ||||
|  * meta_plugin_begin_modal: | ||||
|  * @plugin: a #MetaPlugin | ||||
|  * @grab_window: the X window to grab the keyboard and mouse on | ||||
|  * @cursor: the cursor to use for the pointer grab, or None, | ||||
|  *          to use the normal cursor for the grab window and | ||||
|  *          its descendants. | ||||
|  * @options: flags that modify the behavior of the modal grab | ||||
|  * @timestamp: the timestamp used for establishing grabs | ||||
|  * | ||||
| @@ -290,15 +306,13 @@ meta_plugin_destroy_completed (MetaPlugin      *plugin, | ||||
|  */ | ||||
| gboolean | ||||
| meta_plugin_begin_modal (MetaPlugin       *plugin, | ||||
|                          Window            grab_window, | ||||
|                          Cursor            cursor, | ||||
|                          MetaModalOptions  options, | ||||
|                          guint32           timestamp) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_begin_modal_for_plugin (priv->screen, plugin, | ||||
|                                       grab_window, cursor, options, timestamp); | ||||
|                                       options, timestamp); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -338,3 +352,13 @@ meta_plugin_get_screen (MetaPlugin *plugin) | ||||
|  | ||||
|   return priv->screen; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_complete_display_change (MetaPlugin *plugin, | ||||
|                                      gboolean    ok) | ||||
| { | ||||
|   MetaMonitorManager *manager; | ||||
|  | ||||
|   manager = meta_monitor_manager_get (); | ||||
|   meta_monitor_manager_confirm_configuration (manager, ok); | ||||
| } | ||||
|   | ||||
| @@ -17,9 +17,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_SHADOW_FACTORY_PRIVATE_H__ | ||||
|   | ||||
| @@ -13,9 +13,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
| @@ -123,12 +121,12 @@ static guint signals[LAST_SIGNAL] = { 0 }; | ||||
| /* The first element in this array also defines the default parameters | ||||
|  * for newly created classes */ | ||||
| MetaShadowClassInfo default_shadow_classes[] = { | ||||
|   { "normal",       { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } }, | ||||
|   { "dialog",       { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } }, | ||||
|   { "modal_dialog", { 6, -1, 0, 1, 255 }, { 3, -1, 0, 3, 128 } }, | ||||
|   { "utility",      { 3, -1, 0, 1, 255 }, { 3, -1, 0, 1, 128 } }, | ||||
|   { "border",       { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } }, | ||||
|   { "menu",         { 6, -1, 0, 3, 255 }, { 3, -1, 0, 0, 128 } }, | ||||
|   { "normal",       { 6, -1, 0, 3, 128 }, { 3, -1, 0, 3, 32 } }, | ||||
|   { "dialog",       { 6, -1, 0, 3, 128 }, { 3, -1, 0, 3, 32 } }, | ||||
|   { "modal_dialog", { 6, -1, 0, 1, 128 }, { 3, -1, 0, 3, 32 } }, | ||||
|   { "utility",      { 3, -1, 0, 1, 128 }, { 3, -1, 0, 1, 32 } }, | ||||
|   { "border",       { 6, -1, 0, 3, 128 }, { 3, -1, 0, 3, 32 } }, | ||||
|   { "menu",         { 6, -1, 0, 3, 128 }, { 3, -1, 0, 0, 32 } }, | ||||
|  | ||||
|   { "popup-menu",    { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } }, | ||||
|  | ||||
|   | ||||
							
								
								
									
										39
									
								
								src/compositor/meta-shaped-texture-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/compositor/meta-shaped-texture-private.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| /* | ||||
|  * shaped texture | ||||
|  * | ||||
|  * An actor to draw a texture clipped to a list of rectangles | ||||
|  * | ||||
|  * Authored By Neil Roberts  <neil@linux.intel.com> | ||||
|  * | ||||
|  * Copyright (C) 2008 Intel Corporation | ||||
|  *               2013 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 | ||||
|  * 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. | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_SHAPED_TEXTURE_PRIVATE_H__ | ||||
| #define __META_SHAPED_TEXTURE_PRIVATE_H__ | ||||
|  | ||||
| #include <meta/meta-shaped-texture.h> | ||||
|  | ||||
| ClutterActor *meta_shaped_texture_new (void); | ||||
| void meta_shaped_texture_set_texture (MetaShapedTexture *stex, | ||||
|                                       CoglTexture       *texture); | ||||
| gboolean meta_shaped_texture_get_unobscured_bounds (MetaShapedTexture     *stex, | ||||
|                                                     cairo_rectangle_int_t *unobscured_bounds); | ||||
| gboolean meta_shaped_texture_is_obscured (MetaShapedTexture *self); | ||||
|  | ||||
| #endif | ||||
| @@ -16,9 +16,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
| @@ -30,18 +28,21 @@ | ||||
| #include <config.h> | ||||
|  | ||||
| #include <meta/meta-shaped-texture.h> | ||||
| #include <meta/util.h> | ||||
| #include "clutter-utils.h" | ||||
| #include "meta-texture-tower.h" | ||||
|  | ||||
| #include "meta-shaped-texture-private.h" | ||||
| #include "meta-window-actor-private.h" | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| #include <cogl/cogl.h> | ||||
| #include <cogl/cogl-texture-pixmap-x11.h> | ||||
| #include <gdk/gdk.h> /* for gdk_rectangle_intersect() */ | ||||
| #include "meta-cullable.h" | ||||
|  | ||||
| static void meta_shaped_texture_dispose  (GObject    *object); | ||||
|  | ||||
| static void meta_shaped_texture_paint (ClutterActor       *actor); | ||||
| static void meta_shaped_texture_pick  (ClutterActor       *actor, | ||||
| 				       const ClutterColor *color); | ||||
|  | ||||
| static void meta_shaped_texture_get_preferred_width (ClutterActor *self, | ||||
|                                                      gfloat        for_height, | ||||
| @@ -55,8 +56,10 @@ static void meta_shaped_texture_get_preferred_height (ClutterActor *self, | ||||
|  | ||||
| static gboolean meta_shaped_texture_get_paint_volume (ClutterActor *self, ClutterPaintVolume *volume); | ||||
|  | ||||
| G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture, | ||||
|                CLUTTER_TYPE_ACTOR); | ||||
| static void cullable_iface_init (MetaCullableInterface *iface); | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_CODE (MetaShapedTexture, meta_shaped_texture, CLUTTER_TYPE_ACTOR, | ||||
|                          G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); | ||||
|  | ||||
| #define META_SHAPED_TEXTURE_GET_PRIVATE(obj) \ | ||||
|   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_SHAPED_TEXTURE, \ | ||||
| @@ -65,13 +68,16 @@ G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture, | ||||
| struct _MetaShapedTexturePrivate | ||||
| { | ||||
|   MetaTextureTower *paint_tower; | ||||
|   Pixmap pixmap; | ||||
|   CoglTexturePixmapX11 *texture; | ||||
|   CoglTexture *mask_texture; | ||||
|   CoglPipeline *pipeline; | ||||
|   CoglPipeline *pipeline_unshaped; | ||||
|  | ||||
|   CoglTexture *texture; | ||||
|   CoglTexture *mask_texture; | ||||
|  | ||||
|   /* The region containing only fully opaque pixels */ | ||||
|   cairo_region_t *opaque_region; | ||||
|  | ||||
|   /* MetaCullable regions, see that documentation for more details */ | ||||
|   cairo_region_t *clip_region; | ||||
|   cairo_region_t *unobscured_region; | ||||
|  | ||||
|   guint tex_width, tex_height; | ||||
|  | ||||
| @@ -89,7 +95,6 @@ meta_shaped_texture_class_init (MetaShapedTextureClass *klass) | ||||
|   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; | ||||
|   actor_class->get_paint_volume = meta_shaped_texture_get_paint_volume; | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaShapedTexturePrivate)); | ||||
| @@ -103,11 +108,38 @@ meta_shaped_texture_init (MetaShapedTexture *self) | ||||
|   priv = self->priv = META_SHAPED_TEXTURE_GET_PRIVATE (self); | ||||
|  | ||||
|   priv->paint_tower = meta_texture_tower_new (); | ||||
|  | ||||
|   priv->texture = NULL; | ||||
|   priv->mask_texture = NULL; | ||||
|   priv->create_mipmaps = TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_unobscured_region (MetaShapedTexture *self, | ||||
|                        cairo_region_t    *unobscured_region) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = self->priv; | ||||
|  | ||||
|   g_clear_pointer (&priv->unobscured_region, (GDestroyNotify) cairo_region_destroy); | ||||
|   if (unobscured_region) | ||||
|     { | ||||
|       cairo_rectangle_int_t bounds = { 0, 0, priv->tex_width, priv->tex_height }; | ||||
|       priv->unobscured_region = cairo_region_copy (unobscured_region); | ||||
|       cairo_region_intersect_rectangle (priv->unobscured_region, &bounds); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_clip_region (MetaShapedTexture *self, | ||||
|                  cairo_region_t    *clip_region) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = self->priv; | ||||
|  | ||||
|   g_clear_pointer (&priv->clip_region, (GDestroyNotify) cairo_region_destroy); | ||||
|   if (clip_region) | ||||
|     priv->clip_region = cairo_region_copy (clip_region); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_dispose (GObject *object) | ||||
| { | ||||
| @@ -118,29 +150,146 @@ meta_shaped_texture_dispose (GObject *object) | ||||
|     meta_texture_tower_free (priv->paint_tower); | ||||
|   priv->paint_tower = NULL; | ||||
|  | ||||
|   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); | ||||
|   g_clear_pointer (&priv->opaque_region, cairo_region_destroy); | ||||
|  | ||||
|   meta_shaped_texture_set_mask_texture (self, NULL); | ||||
|   meta_shaped_texture_set_clip_region (self, NULL); | ||||
|   set_unobscured_region (self, NULL); | ||||
|   set_clip_region (self, NULL); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static CoglPipeline * | ||||
| get_unmasked_pipeline (CoglContext *ctx) | ||||
| { | ||||
|   return cogl_pipeline_new (ctx); | ||||
| } | ||||
|  | ||||
| static CoglPipeline * | ||||
| get_masked_pipeline (CoglContext *ctx) | ||||
| { | ||||
|   static CoglPipeline *template = NULL; | ||||
|   if (G_UNLIKELY (template == NULL)) | ||||
|     { | ||||
|       template = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_layer_combine (template, 1, | ||||
|                                        "RGBA = MODULATE (PREVIOUS, TEXTURE[A])", | ||||
|                                        NULL); | ||||
|     } | ||||
|  | ||||
|   return cogl_pipeline_copy (template); | ||||
| } | ||||
|  | ||||
| static CoglPipeline * | ||||
| get_unblended_pipeline (CoglContext *ctx) | ||||
| { | ||||
|   static CoglPipeline *template = NULL; | ||||
|   if (G_UNLIKELY (template == NULL)) | ||||
|     { | ||||
|       CoglColor color; | ||||
|       template = cogl_pipeline_new (ctx); | ||||
|       cogl_color_init_from_4ub (&color, 255, 255, 255, 255); | ||||
|       cogl_pipeline_set_blend (template, | ||||
|                                "RGBA = ADD (SRC_COLOR, 0)", | ||||
|                                NULL); | ||||
|       cogl_pipeline_set_color (template, &color); | ||||
|     } | ||||
|  | ||||
|   return cogl_pipeline_copy (template); | ||||
| } | ||||
|  | ||||
| static void | ||||
| paint_clipped_rectangle (CoglFramebuffer       *fb, | ||||
|                          CoglPipeline          *pipeline, | ||||
|                          cairo_rectangle_int_t *rect, | ||||
|                          ClutterActorBox       *alloc) | ||||
| { | ||||
|   float coords[8]; | ||||
|   float x1, y1, x2, y2; | ||||
|  | ||||
|   x1 = rect->x; | ||||
|   y1 = rect->y; | ||||
|   x2 = rect->x + rect->width; | ||||
|   y2 = rect->y + rect->height; | ||||
|  | ||||
|   coords[0] = rect->x / (alloc->x2 - alloc->x1); | ||||
|   coords[1] = rect->y / (alloc->y2 - alloc->y1); | ||||
|   coords[2] = (rect->x + rect->width) / (alloc->x2 - alloc->x1); | ||||
|   coords[3] = (rect->y + rect->height) / (alloc->y2 - alloc->y1); | ||||
|  | ||||
|   coords[4] = coords[0]; | ||||
|   coords[5] = coords[1]; | ||||
|   coords[6] = coords[2]; | ||||
|   coords[7] = coords[3]; | ||||
|  | ||||
|   cogl_framebuffer_draw_multitextured_rectangle (fb, pipeline, | ||||
|                                                  x1, y1, x2, y2, | ||||
|                                                  &coords[0], 8); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_cogl_texture (MetaShapedTexture *stex, | ||||
|                   CoglTexture       *cogl_tex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   guint width, height; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->texture) | ||||
|     cogl_object_unref (priv->texture); | ||||
|  | ||||
|   priv->texture = cogl_tex; | ||||
|  | ||||
|   if (cogl_tex != NULL) | ||||
|     { | ||||
|       cogl_object_ref (cogl_tex); | ||||
|       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 invalid handle */ | ||||
|       priv->tex_width = 0; | ||||
|       priv->tex_height = 0; | ||||
|       clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|     } | ||||
|  | ||||
|   /* NB: We don't queue a redraw of the actor here because we don't | ||||
|    * know how much of the buffer has changed with respect to the | ||||
|    * previous buffer. We only queue a redraw in response to surface | ||||
|    * damage. */ | ||||
|  | ||||
|   if (priv->create_mipmaps) | ||||
|     meta_texture_tower_set_base_texture (priv->paint_tower, cogl_tex); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_paint (ClutterActor *actor) | ||||
| { | ||||
|   MetaShapedTexture *stex = (MetaShapedTexture *) actor; | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   CoglTexture *paint_tex; | ||||
|   guint tex_width, tex_height; | ||||
|   guchar opacity; | ||||
|   CoglContext *ctx; | ||||
|   CoglFramebuffer *fb; | ||||
|   CoglPipeline *pipeline = NULL; | ||||
|   CoglTexture *paint_tex; | ||||
|   ClutterActorBox alloc; | ||||
|  | ||||
|   static CoglPipeline *pipeline_template = NULL; | ||||
|   static CoglPipeline *pipeline_unshaped_template = NULL; | ||||
|  | ||||
|   CoglPipeline *pipeline; | ||||
|   cairo_region_t *blended_region = NULL; | ||||
|   CoglPipelineFilter filter; | ||||
|  | ||||
|   if (priv->clip_region && cairo_region_is_empty (priv->clip_region)) | ||||
|     return; | ||||
| @@ -177,147 +326,137 @@ meta_shaped_texture_paint (ClutterActor *actor) | ||||
|   if (tex_width == 0 || tex_height == 0) /* no contents yet */ | ||||
|     return; | ||||
|  | ||||
|   /* Use nearest-pixel interpolation if the texture is unscaled. This | ||||
|    * improves performance, especially with software rendering. | ||||
|    */ | ||||
|  | ||||
|   filter = COGL_PIPELINE_FILTER_LINEAR; | ||||
|  | ||||
|   if (!clutter_actor_is_in_clone_paint (actor) && meta_actor_is_untransformed (actor, NULL, NULL)) | ||||
|     filter = COGL_PIPELINE_FILTER_NEAREST; | ||||
|  | ||||
|   ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|   fb = cogl_get_draw_framebuffer (); | ||||
|  | ||||
|   opacity = clutter_actor_get_paint_opacity (actor); | ||||
|   clutter_actor_get_allocation_box (actor, &alloc); | ||||
|  | ||||
|   if (priv->opaque_region != NULL && opacity == 255) | ||||
|     { | ||||
|       CoglPipeline *opaque_pipeline; | ||||
|       cairo_region_t *region; | ||||
|       int n_rects; | ||||
|       int i; | ||||
|  | ||||
|       if (priv->clip_region != NULL) | ||||
|         { | ||||
|           region = cairo_region_copy (priv->clip_region); | ||||
|           cairo_region_intersect (region, priv->opaque_region); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           region = cairo_region_reference (priv->opaque_region); | ||||
|         } | ||||
|  | ||||
|       if (cairo_region_is_empty (region)) | ||||
|         goto paint_blended; | ||||
|  | ||||
|       opaque_pipeline = get_unblended_pipeline (ctx); | ||||
|       cogl_pipeline_set_layer_texture (opaque_pipeline, 0, paint_tex); | ||||
|       cogl_pipeline_set_layer_filters (opaque_pipeline, 0, filter, filter); | ||||
|  | ||||
|       n_rects = cairo_region_num_rectangles (region); | ||||
|       for (i = 0; i < n_rects; i++) | ||||
|         { | ||||
|           cairo_rectangle_int_t rect; | ||||
|           cairo_region_get_rectangle (region, i, &rect); | ||||
|           paint_clipped_rectangle (fb, opaque_pipeline, &rect, &alloc); | ||||
|         } | ||||
|  | ||||
|       cogl_object_unref (opaque_pipeline); | ||||
|  | ||||
|       if (priv->clip_region != NULL) | ||||
|         { | ||||
|           blended_region = cairo_region_copy (priv->clip_region); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           cairo_rectangle_int_t rect = { 0, 0, tex_width, tex_height }; | ||||
|           blended_region = cairo_region_create_rectangle (&rect); | ||||
|         } | ||||
|  | ||||
|       cairo_region_subtract (blended_region, priv->opaque_region); | ||||
|  | ||||
|     paint_blended: | ||||
|       cairo_region_destroy (region); | ||||
|     } | ||||
|  | ||||
|   if (blended_region == NULL && priv->clip_region != NULL) | ||||
|     blended_region = cairo_region_reference (priv->clip_region); | ||||
|  | ||||
|   if (blended_region != NULL && cairo_region_is_empty (blended_region)) | ||||
|     goto out; | ||||
|  | ||||
|   if (priv->mask_texture == NULL) | ||||
|     { | ||||
|       /* Use a single-layer texture if we don't have a mask. */ | ||||
|  | ||||
|       if (priv->pipeline_unshaped == NULL) | ||||
|         { | ||||
|           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->pipeline_unshaped = cogl_pipeline_copy (pipeline_unshaped_template); | ||||
|         } | ||||
|         pipeline = priv->pipeline_unshaped; | ||||
|       pipeline = get_unmasked_pipeline (ctx); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (priv->pipeline == NULL) | ||||
| 	{ | ||||
| 	   if (G_UNLIKELY (pipeline_template == NULL)) | ||||
| 	    { | ||||
|               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->pipeline = cogl_pipeline_copy (pipeline_template); | ||||
| 	} | ||||
|       pipeline = priv->pipeline; | ||||
|  | ||||
|       pipeline = get_masked_pipeline (ctx); | ||||
|       cogl_pipeline_set_layer_texture (pipeline, 1, priv->mask_texture); | ||||
|       cogl_pipeline_set_layer_filters (pipeline, 1, filter, filter); | ||||
|     } | ||||
|  | ||||
|   cogl_pipeline_set_layer_texture (pipeline, 0, paint_tex); | ||||
|   cogl_pipeline_set_layer_filters (pipeline, 0, filter, filter); | ||||
|  | ||||
|   { | ||||
|     CoglColor color; | ||||
|     guchar opacity = clutter_actor_get_paint_opacity (actor); | ||||
|     cogl_color_set_from_4ub (&color, opacity, opacity, opacity, opacity); | ||||
|     cogl_color_init_from_4ub (&color, opacity, opacity, opacity, opacity); | ||||
|     cogl_pipeline_set_color (pipeline, &color); | ||||
|   } | ||||
|  | ||||
|   cogl_set_source (pipeline); | ||||
|  | ||||
|   clutter_actor_get_allocation_box (actor, &alloc); | ||||
|  | ||||
|   if (priv->clip_region) | ||||
|   if (blended_region != NULL) | ||||
|     { | ||||
|       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 */ | ||||
| #     define MAX_RECTS 16 | ||||
|  | ||||
|       n_rects = cairo_region_num_rectangles (priv->clip_region); | ||||
|       n_rects = cairo_region_num_rectangles (blended_region); | ||||
|       if (n_rects <= MAX_RECTS) | ||||
| 	{ | ||||
| 	  float coords[8]; | ||||
|           float x1, y1, x2, y2; | ||||
|           int i; | ||||
|           cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height }; | ||||
|  | ||||
| 	  for (i = 0; i < n_rects; i++) | ||||
| 	    { | ||||
| 	      cairo_rectangle_int_t rect; | ||||
|  | ||||
| 	      cairo_region_get_rectangle (priv->clip_region, i, &rect); | ||||
| 	      cairo_region_get_rectangle (blended_region, i, &rect); | ||||
|  | ||||
| 	      if (!gdk_rectangle_intersect (&tex_rect, &rect, &rect)) | ||||
| 		continue; | ||||
|  | ||||
| 	      x1 = rect.x; | ||||
| 	      y1 = rect.y; | ||||
| 	      x2 = rect.x + rect.width; | ||||
| 	      y2 = rect.y + rect.height; | ||||
|  | ||||
| 	      coords[0] = rect.x / (alloc.x2 - alloc.x1); | ||||
| 	      coords[1] = rect.y / (alloc.y2 - alloc.y1); | ||||
| 	      coords[2] = (rect.x + rect.width) / (alloc.x2 - alloc.x1); | ||||
| 	      coords[3] = (rect.y + rect.height) / (alloc.y2 - alloc.y1); | ||||
|  | ||||
|               coords[4] = coords[0]; | ||||
|               coords[5] = coords[1]; | ||||
|               coords[6] = coords[2]; | ||||
|               coords[7] = coords[3]; | ||||
|  | ||||
|               cogl_rectangle_with_multitexture_coords (x1, y1, x2, y2, | ||||
|                                                        &coords[0], 8); | ||||
|               paint_clipped_rectangle (fb, pipeline, &rect, &alloc); | ||||
|             } | ||||
|  | ||||
| 	  return; | ||||
|           goto out; | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|   cogl_rectangle (0, 0, | ||||
| 		  alloc.x2 - alloc.x1, | ||||
| 		  alloc.y2 - alloc.y1); | ||||
| } | ||||
|   cogl_framebuffer_draw_rectangle (fb, pipeline, | ||||
|                                    0, 0, | ||||
|                                    alloc.x2 - alloc.x1, | ||||
|                                    alloc.y2 - alloc.y1); | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_pick (ClutterActor       *actor, | ||||
| 			  const ClutterColor *color) | ||||
| { | ||||
|   MetaShapedTexture *stex = (MetaShapedTexture *) actor; | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|   /* If there is no region then use the regular pick */ | ||||
|   if (priv->mask_texture == NULL) | ||||
|     CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class) | ||||
|       ->pick (actor, color); | ||||
|   else if (clutter_actor_should_pick_paint (actor)) | ||||
|     { | ||||
|       CoglTexture *paint_tex; | ||||
|       ClutterActorBox alloc; | ||||
|       guint tex_width, tex_height; | ||||
|  | ||||
|       paint_tex = COGL_TEXTURE (priv->texture); | ||||
|  | ||||
|       if (paint_tex == NULL) | ||||
|         return; | ||||
|  | ||||
|       tex_width = cogl_texture_get_width (paint_tex); | ||||
|       tex_height = cogl_texture_get_height (paint_tex); | ||||
|  | ||||
|       if (tex_width == 0 || tex_height == 0) /* no contents yet */ | ||||
|         return; | ||||
|  | ||||
|       cogl_set_source_color4ub (color->red, color->green, color->blue, | ||||
|                                  color->alpha); | ||||
|  | ||||
|       clutter_actor_get_allocation_box (actor, &alloc); | ||||
|  | ||||
|       /* Paint the mask rectangle in the given color */ | ||||
|       cogl_set_source_texture (priv->mask_texture); | ||||
|       cogl_rectangle_with_texture_coords (0, 0, | ||||
|                                           alloc.x2 - alloc.x1, | ||||
|                                           alloc.y2 - alloc.y1, | ||||
|                                           0, 0, 1, 1); | ||||
|     } | ||||
|  out: | ||||
|   if (pipeline != NULL) | ||||
|     cogl_object_unref (pipeline); | ||||
|   if (blended_region != NULL) | ||||
|     cairo_region_destroy (blended_region); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -359,18 +498,37 @@ meta_shaped_texture_get_preferred_height (ClutterActor *self, | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_shaped_texture_get_paint_volume (ClutterActor *self, | ||||
| meta_shaped_texture_get_paint_volume (ClutterActor *actor, | ||||
|                                       ClutterPaintVolume *volume) | ||||
| { | ||||
|   return clutter_paint_volume_set_from_allocation (volume, self); | ||||
| } | ||||
|   MetaShapedTexture *self = META_SHAPED_TEXTURE (actor); | ||||
|   cairo_rectangle_int_t unobscured_bounds; | ||||
|  | ||||
| ClutterActor * | ||||
| meta_shaped_texture_new (void) | ||||
| { | ||||
|   ClutterActor *self = g_object_new (META_TYPE_SHAPED_TEXTURE, NULL); | ||||
|   if (!clutter_paint_volume_set_from_allocation (volume, actor)) | ||||
|     return FALSE; | ||||
|  | ||||
|   return self; | ||||
|   if (meta_shaped_texture_get_unobscured_bounds (self, &unobscured_bounds)) | ||||
|     { | ||||
|       ClutterVertex origin; | ||||
|       cairo_rectangle_int_t bounds; | ||||
|  | ||||
|       /* I hate ClutterPaintVolume so much... */ | ||||
|       clutter_paint_volume_get_origin (volume, &origin); | ||||
|       bounds.x = origin.x; | ||||
|       bounds.y = origin.y; | ||||
|       bounds.width = clutter_paint_volume_get_width (volume); | ||||
|       bounds.height = clutter_paint_volume_get_height (volume); | ||||
|  | ||||
|       gdk_rectangle_intersect (&bounds, &unobscured_bounds, &bounds); | ||||
|  | ||||
|       origin.x = bounds.x; | ||||
|       origin.y = bounds.y; | ||||
|       clutter_paint_volume_set_origin (volume, &origin); | ||||
|       clutter_paint_volume_set_width (volume, bounds.width); | ||||
|       clutter_paint_volume_set_height (volume, bounds.height); | ||||
|     } | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| void | ||||
| @@ -389,8 +547,7 @@ meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex, | ||||
|     { | ||||
|       CoglTexture *base_texture; | ||||
|       priv->create_mipmaps = create_mipmaps; | ||||
|       base_texture = create_mipmaps ? | ||||
|         COGL_TEXTURE (priv->texture) : NULL; | ||||
|       base_texture = create_mipmaps ? priv->texture : NULL; | ||||
|       meta_texture_tower_set_base_texture (priv->paint_tower, base_texture); | ||||
|     } | ||||
| } | ||||
| @@ -416,7 +573,64 @@ meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex, | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| void | ||||
| static cairo_region_t * | ||||
| effective_unobscured_region (MetaShapedTexture *self) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = self->priv; | ||||
|   ClutterActor *parent = clutter_actor_get_parent (CLUTTER_ACTOR (self)); | ||||
|  | ||||
|   if (clutter_actor_has_mapped_clones (CLUTTER_ACTOR (self))) | ||||
|     return NULL; | ||||
|  | ||||
|   while (parent && !META_IS_WINDOW_ACTOR (parent)) | ||||
|     parent = clutter_actor_get_parent (parent); | ||||
|  | ||||
|   if (parent && clutter_actor_has_mapped_clones (parent)) | ||||
|     return NULL; | ||||
|  | ||||
|   return priv->unobscured_region; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_shaped_texture_get_unobscured_bounds (MetaShapedTexture     *self, | ||||
|                                            cairo_rectangle_int_t *unobscured_bounds) | ||||
| { | ||||
|   cairo_region_t *unobscured_region = effective_unobscured_region (self); | ||||
|  | ||||
|   if (unobscured_region) | ||||
|     { | ||||
|       cairo_region_get_extents (unobscured_region, unobscured_bounds); | ||||
|       return TRUE; | ||||
|     } | ||||
|   else | ||||
|     return FALSE; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_shaped_texture_is_obscured (MetaShapedTexture *self) | ||||
| { | ||||
|   cairo_region_t *unobscured_region = effective_unobscured_region (self); | ||||
|  | ||||
|   if (unobscured_region) | ||||
|     return cairo_region_is_empty (unobscured_region); | ||||
|   else | ||||
|     return FALSE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_update_area: | ||||
|  * @stex: #MetaShapedTexture | ||||
|  * @x: the x coordinate of the damaged area | ||||
|  * @y: the y coordinate of the damaged area | ||||
|  * @width: the width of the damaged area | ||||
|  * @height: the height of the damaged area | ||||
|  * | ||||
|  * Repairs the damaged area indicated by @x, @y, @width and @height | ||||
|  * and potentially queues a redraw. | ||||
|  * | ||||
|  * Return value: Whether a redraw have been queued or not | ||||
|  */ | ||||
| gboolean | ||||
| meta_shaped_texture_update_area (MetaShapedTexture *stex, | ||||
| 				 int                x, | ||||
| 				 int                y, | ||||
| @@ -424,100 +638,58 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex, | ||||
| 				 int                height) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   cairo_region_t *unobscured_region; | ||||
|   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); | ||||
|     return FALSE; | ||||
|  | ||||
|   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->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) | ||||
|   unobscured_region = effective_unobscured_region (stex); | ||||
|   if (unobscured_region) | ||||
|     { | ||||
|       width = cogl_texture_get_width (COGL_TEXTURE (cogl_tex)); | ||||
|       height = cogl_texture_get_height (COGL_TEXTURE (cogl_tex)); | ||||
|       cairo_region_t *intersection; | ||||
|  | ||||
|       if (width != priv->tex_width || | ||||
|           height != priv->tex_height) | ||||
|       if (cairo_region_is_empty (unobscured_region)) | ||||
|         return FALSE; | ||||
|  | ||||
|       intersection = cairo_region_copy (unobscured_region); | ||||
|       cairo_region_intersect_rectangle (intersection, &clip); | ||||
|  | ||||
|       if (!cairo_region_is_empty (intersection)) | ||||
|         { | ||||
|           priv->tex_width = width; | ||||
|           priv->tex_height = height; | ||||
|  | ||||
|           clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|           cairo_rectangle_int_t damage_rect; | ||||
|           cairo_region_get_extents (intersection, &damage_rect); | ||||
|           clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &damage_rect); | ||||
|           cairo_region_destroy (intersection); | ||||
|           return TRUE; | ||||
|         } | ||||
|  | ||||
|       cairo_region_destroy (intersection); | ||||
|       return FALSE; | ||||
|     } | ||||
|   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)); | ||||
|       clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &clip); | ||||
|       return TRUE; | ||||
|     } | ||||
|  | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_set_pixmap: | ||||
|  * meta_shaped_texture_set_texture: | ||||
|  * @stex: The #MetaShapedTexture | ||||
|  * @pixmap: The pixmap you want the stex to assume | ||||
|  * @pixmap: The #CoglTexture to display | ||||
|  */ | ||||
| void | ||||
| meta_shaped_texture_set_pixmap (MetaShapedTexture *stex, | ||||
|                                 Pixmap             pixmap) | ||||
| meta_shaped_texture_set_texture (MetaShapedTexture *stex, | ||||
|                                  CoglTexture       *texture) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->pixmap == pixmap) | ||||
|     return; | ||||
|  | ||||
|   priv->pixmap = pixmap; | ||||
|  | ||||
|   if (pixmap != None) | ||||
|     { | ||||
|       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->create_mipmaps) | ||||
|     meta_texture_tower_set_base_texture (priv->paint_tower, | ||||
|                                          COGL_TEXTURE (priv->texture)); | ||||
|   set_cogl_texture (stex, texture); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -534,22 +706,19 @@ meta_shaped_texture_get_texture (MetaShapedTexture *stex) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_set_clip_region: | ||||
|  * meta_shaped_texture_set_opaque_region: | ||||
|  * @stex: a #MetaShapedTexture | ||||
|  * @clip_region: (transfer full): the region of the texture that | ||||
|  *   is visible and should be painted. | ||||
|  * @opaque_region: (transfer full): the region of the texture that | ||||
|  *   can have blending turned off. | ||||
|  * | ||||
|  * Provides a hint to the texture about what areas of the texture | ||||
|  * are not completely obscured and thus need to be painted. This | ||||
|  * is an optimization and is not supposed to have any effect on | ||||
|  * the output. | ||||
|  * | ||||
|  * Typically a parent container will set the clip region before | ||||
|  * painting its children, and then unset it afterwards. | ||||
|  * As most windows have a large portion that does not require blending, | ||||
|  * we can easily turn off blending if we know the areas that do not | ||||
|  * require blending. This sets the region where we will not blend for | ||||
|  * optimization purposes. | ||||
|  */ | ||||
| void | ||||
| meta_shaped_texture_set_clip_region (MetaShapedTexture *stex, | ||||
| 				     cairo_region_t    *clip_region) | ||||
| meta_shaped_texture_set_opaque_region (MetaShapedTexture *stex, | ||||
|                                        cairo_region_t    *opaque_region) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
| @@ -557,16 +726,13 @@ meta_shaped_texture_set_clip_region (MetaShapedTexture *stex, | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->clip_region) | ||||
|     { | ||||
|       cairo_region_destroy (priv->clip_region); | ||||
|       priv->clip_region = NULL; | ||||
|     } | ||||
|   if (priv->opaque_region) | ||||
|     cairo_region_destroy (priv->opaque_region); | ||||
|  | ||||
|   if (clip_region) | ||||
|     priv->clip_region = cairo_region_copy (clip_region); | ||||
|   if (opaque_region) | ||||
|     priv->opaque_region = cairo_region_reference (opaque_region); | ||||
|   else | ||||
|     priv->clip_region = NULL; | ||||
|     priv->opaque_region = NULL; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -666,3 +832,46 @@ meta_shaped_texture_get_image (MetaShapedTexture     *stex, | ||||
|  | ||||
|   return surface; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_cull_out (MetaCullable   *cullable, | ||||
|                               cairo_region_t *unobscured_region, | ||||
|                               cairo_region_t *clip_region) | ||||
| { | ||||
|   MetaShapedTexture *self = META_SHAPED_TEXTURE (cullable); | ||||
|   MetaShapedTexturePrivate *priv = self->priv; | ||||
|  | ||||
|   set_unobscured_region (self, unobscured_region); | ||||
|   set_clip_region (self, clip_region); | ||||
|  | ||||
|   if (clutter_actor_get_paint_opacity (CLUTTER_ACTOR (self)) == 0xff) | ||||
|     { | ||||
|       if (priv->opaque_region) | ||||
|         { | ||||
|           if (unobscured_region) | ||||
|             cairo_region_subtract (unobscured_region, priv->opaque_region); | ||||
|           if (clip_region) | ||||
|             cairo_region_subtract (clip_region, priv->opaque_region); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   MetaShapedTexture *self = META_SHAPED_TEXTURE (cullable); | ||||
|   set_clip_region (self, NULL); | ||||
| } | ||||
|  | ||||
| static void | ||||
| cullable_iface_init (MetaCullableInterface *iface) | ||||
| { | ||||
|   iface->cull_out = meta_shaped_texture_cull_out; | ||||
|   iface->reset_culling = meta_shaped_texture_reset_culling; | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_shaped_texture_new (void) | ||||
| { | ||||
|   return g_object_new (META_TYPE_SHAPED_TEXTURE, NULL); | ||||
| } | ||||
|   | ||||
							
								
								
									
										164
									
								
								src/compositor/meta-surface-actor-wayland.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								src/compositor/meta-surface-actor-wayland.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (C) 2013 Red Hat | ||||
|  * | ||||
|  * 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. | ||||
|  * | ||||
|  * Written by: | ||||
|  *     Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
|  | ||||
| #include "meta-surface-actor-wayland.h" | ||||
|  | ||||
| #include <cogl/cogl-wayland-server.h> | ||||
| #include "meta-shaped-texture-private.h" | ||||
| #include "meta-wayland-private.h" | ||||
|  | ||||
| struct _MetaSurfaceActorWaylandPrivate | ||||
| { | ||||
|   MetaWaylandSurface *surface; | ||||
|   MetaWaylandBuffer *buffer; | ||||
| }; | ||||
| typedef struct _MetaSurfaceActorWaylandPrivate MetaSurfaceActorWaylandPrivate; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (MetaSurfaceActorWayland, meta_surface_actor_wayland, META_TYPE_SURFACE_ACTOR) | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_wayland_process_damage (MetaSurfaceActor *actor, | ||||
|                                            int x, int y, int width, int height) | ||||
| { | ||||
|   MetaSurfaceActorWayland *self = META_SURFACE_ACTOR_WAYLAND (actor); | ||||
|   MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self); | ||||
|  | ||||
|   struct wl_resource *resource = priv->buffer->resource; | ||||
|   struct wl_shm_buffer *shm_buffer = wl_shm_buffer_get (resource); | ||||
|  | ||||
|   if (shm_buffer) | ||||
|     { | ||||
|       CoglTexture2D *texture = COGL_TEXTURE_2D (priv->buffer->texture); | ||||
|       cogl_wayland_texture_set_region_from_shm_buffer (texture, x, y, width, height, shm_buffer, x, y, 0, NULL); | ||||
|     } | ||||
|  | ||||
|   meta_surface_actor_update_area (META_SURFACE_ACTOR (self), x, y, width, height); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_wayland_pre_paint (MetaSurfaceActor *actor) | ||||
| { | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_surface_actor_wayland_is_argb32 (MetaSurfaceActor *actor) | ||||
| { | ||||
|   /* XXX -- look at the SHM buffer format. */ | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_surface_actor_wayland_is_visible (MetaSurfaceActor *actor) | ||||
| { | ||||
|   /* TODO: ensure that the buffer isn't NULL, implement | ||||
|    * wayland mapping semantics */ | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_surface_actor_wayland_should_unredirect (MetaSurfaceActor *actor) | ||||
| { | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_wayland_set_unredirected (MetaSurfaceActor *actor, | ||||
|                                              gboolean          unredirected) | ||||
| { | ||||
|   /* Do nothing. In the future, we'll use KMS to set this | ||||
|    * up as a hardware overlay or something. */ | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_surface_actor_wayland_is_unredirected (MetaSurfaceActor *actor) | ||||
| { | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static MetaWindow * | ||||
| meta_surface_actor_wayland_get_window (MetaSurfaceActor *actor) | ||||
| { | ||||
|   MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (META_SURFACE_ACTOR_WAYLAND (actor)); | ||||
|  | ||||
|   return priv->surface->window; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_wayland_class_init (MetaSurfaceActorWaylandClass *klass) | ||||
| { | ||||
|   MetaSurfaceActorClass *surface_actor_class = META_SURFACE_ACTOR_CLASS (klass); | ||||
|  | ||||
|   surface_actor_class->process_damage = meta_surface_actor_wayland_process_damage; | ||||
|   surface_actor_class->pre_paint = meta_surface_actor_wayland_pre_paint; | ||||
|   surface_actor_class->is_argb32 = meta_surface_actor_wayland_is_argb32; | ||||
|   surface_actor_class->is_visible = meta_surface_actor_wayland_is_visible; | ||||
|  | ||||
|   surface_actor_class->should_unredirect = meta_surface_actor_wayland_should_unredirect; | ||||
|   surface_actor_class->set_unredirected = meta_surface_actor_wayland_set_unredirected; | ||||
|   surface_actor_class->is_unredirected = meta_surface_actor_wayland_is_unredirected; | ||||
|  | ||||
|   surface_actor_class->get_window = meta_surface_actor_wayland_get_window; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_wayland_init (MetaSurfaceActorWayland *self) | ||||
| { | ||||
| } | ||||
|  | ||||
| MetaSurfaceActor * | ||||
| meta_surface_actor_wayland_new (MetaWaylandSurface *surface) | ||||
| { | ||||
|   MetaSurfaceActorWayland *self = g_object_new (META_TYPE_SURFACE_ACTOR_WAYLAND, NULL); | ||||
|   MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self); | ||||
|  | ||||
|   g_assert (meta_is_wayland_compositor ()); | ||||
|  | ||||
|   priv->surface = surface; | ||||
|  | ||||
|   return META_SURFACE_ACTOR (self); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_surface_actor_wayland_set_buffer (MetaSurfaceActorWayland *self, | ||||
|                                        MetaWaylandBuffer       *buffer) | ||||
| { | ||||
|   MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self); | ||||
|   MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self)); | ||||
|  | ||||
|   priv->buffer = buffer; | ||||
|  | ||||
|   if (buffer) | ||||
|     meta_shaped_texture_set_texture (stex, buffer->texture); | ||||
|   else | ||||
|     meta_shaped_texture_set_texture (stex, NULL); | ||||
| } | ||||
|  | ||||
| MetaWaylandSurface * | ||||
| meta_surface_actor_wayland_get_surface (MetaSurfaceActorWayland *self) | ||||
| { | ||||
|   MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self); | ||||
|   return priv->surface; | ||||
| } | ||||
							
								
								
									
										66
									
								
								src/compositor/meta-surface-actor-wayland.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/compositor/meta-surface-actor-wayland.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (C) 2013 Red Hat | ||||
|  * | ||||
|  * 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. | ||||
|  * | ||||
|  * Written by: | ||||
|  *     Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_SURFACE_ACTOR_WAYLAND_H__ | ||||
| #define __META_SURFACE_ACTOR_WAYLAND_H__ | ||||
|  | ||||
| #include <glib-object.h> | ||||
|  | ||||
| #include "meta-surface-actor.h" | ||||
|  | ||||
| #include "meta-wayland.h" | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define META_TYPE_SURFACE_ACTOR_WAYLAND            (meta_surface_actor_wayland_get_type ()) | ||||
| #define META_SURFACE_ACTOR_WAYLAND(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_SURFACE_ACTOR_WAYLAND, MetaSurfaceActorWayland)) | ||||
| #define META_SURFACE_ACTOR_WAYLAND_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  META_TYPE_SURFACE_ACTOR_WAYLAND, MetaSurfaceActorWaylandClass)) | ||||
| #define META_IS_SURFACE_ACTOR_WAYLAND(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_SURFACE_ACTOR_WAYLAND)) | ||||
| #define META_IS_SURFACE_ACTOR_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  META_TYPE_SURFACE_ACTOR_WAYLAND)) | ||||
| #define META_SURFACE_ACTOR_WAYLAND_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  META_TYPE_SURFACE_ACTOR_WAYLAND, MetaSurfaceActorWaylandClass)) | ||||
|  | ||||
| typedef struct _MetaSurfaceActorWayland      MetaSurfaceActorWayland; | ||||
| typedef struct _MetaSurfaceActorWaylandClass MetaSurfaceActorWaylandClass; | ||||
|  | ||||
| struct _MetaSurfaceActorWayland | ||||
| { | ||||
|   MetaSurfaceActor parent; | ||||
| }; | ||||
|  | ||||
| struct _MetaSurfaceActorWaylandClass | ||||
| { | ||||
|   MetaSurfaceActorClass parent_class; | ||||
| }; | ||||
|  | ||||
| GType meta_surface_actor_wayland_get_type (void); | ||||
|  | ||||
| MetaSurfaceActor * meta_surface_actor_wayland_new (MetaWaylandSurface *surface); | ||||
| MetaWaylandSurface * meta_surface_actor_wayland_get_surface (MetaSurfaceActorWayland *self); | ||||
|  | ||||
| void meta_surface_actor_wayland_set_buffer (MetaSurfaceActorWayland *self, | ||||
|                                             MetaWaylandBuffer         *buffer); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __META_SURFACE_ACTOR_WAYLAND_H__ */ | ||||
							
								
								
									
										486
									
								
								src/compositor/meta-surface-actor-x11.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										486
									
								
								src/compositor/meta-surface-actor-x11.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,486 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (C) 2013 Red Hat | ||||
|  * | ||||
|  * 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. | ||||
|  * | ||||
|  * Written by: | ||||
|  *     Owen Taylor <otaylor@redhat.com> | ||||
|  *     Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
|  | ||||
| #include "meta-surface-actor-x11.h" | ||||
|  | ||||
| #include <X11/extensions/Xcomposite.h> | ||||
| #include <X11/extensions/Xrender.h> | ||||
| #include <cogl/cogl-texture-pixmap-x11.h> | ||||
|  | ||||
| #include <meta/errors.h> | ||||
| #include "window-private.h" | ||||
| #include "meta-shaped-texture-private.h" | ||||
| #include "meta-cullable.h" | ||||
|  | ||||
| struct _MetaSurfaceActorX11Private | ||||
| { | ||||
|   MetaWindow *window; | ||||
|  | ||||
|   MetaDisplay *display; | ||||
|  | ||||
|   CoglTexture *texture; | ||||
|   Pixmap pixmap; | ||||
|   Damage damage; | ||||
|  | ||||
|   int last_width; | ||||
|   int last_height; | ||||
|  | ||||
|   /* This is used to detect fullscreen windows that need to be unredirected */ | ||||
|   guint full_damage_frames_count; | ||||
|   guint does_full_damage  : 1; | ||||
|  | ||||
|   /* Other state... */ | ||||
|   guint argb32 : 1; | ||||
|   guint received_damage : 1; | ||||
|   guint size_changed : 1; | ||||
|  | ||||
|   guint unredirected   : 1; | ||||
| }; | ||||
| typedef struct _MetaSurfaceActorX11Private MetaSurfaceActorX11Private; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (MetaSurfaceActorX11, meta_surface_actor_x11, META_TYPE_SURFACE_ACTOR) | ||||
|  | ||||
| static void | ||||
| free_damage (MetaSurfaceActorX11 *self) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|   MetaDisplay *display = priv->display; | ||||
|   Display *xdisplay = meta_display_get_xdisplay (display); | ||||
|  | ||||
|   if (priv->damage == None) | ||||
|     return; | ||||
|  | ||||
|   meta_error_trap_push (display); | ||||
|   XDamageDestroy (xdisplay, priv->damage); | ||||
|   priv->damage = None; | ||||
|   meta_error_trap_pop (display); | ||||
| } | ||||
|  | ||||
| static void | ||||
| detach_pixmap (MetaSurfaceActorX11 *self) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|   MetaDisplay *display = priv->display; | ||||
|   Display *xdisplay = meta_display_get_xdisplay (display); | ||||
|   MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self)); | ||||
|  | ||||
|   if (priv->pixmap == None) | ||||
|     return; | ||||
|  | ||||
|   /* Get rid of all references to the pixmap before freeing it; it's unclear whether | ||||
|    * you are supposed to be able to free a GLXPixmap after freeing the underlying | ||||
|    * pixmap, but it certainly doesn't work with current DRI/Mesa | ||||
|    */ | ||||
|   meta_shaped_texture_set_texture (stex, NULL); | ||||
|   cogl_flush (); | ||||
|  | ||||
|   meta_error_trap_push (display); | ||||
|   XFreePixmap (xdisplay, priv->pixmap); | ||||
|   priv->pixmap = None; | ||||
|   meta_error_trap_pop (display); | ||||
|  | ||||
|   cogl_object_unref (priv->texture); | ||||
|   priv->texture = NULL; | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_pixmap (MetaSurfaceActorX11 *self, | ||||
|             Pixmap               pixmap) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|  | ||||
|   CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|   MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self)); | ||||
|   CoglTexture *texture; | ||||
|  | ||||
|   g_assert (priv->pixmap == None); | ||||
|   priv->pixmap = pixmap; | ||||
|  | ||||
|   texture = COGL_TEXTURE (cogl_texture_pixmap_x11_new (ctx, priv->pixmap, FALSE, NULL)); | ||||
|  | ||||
|   if (G_UNLIKELY (!cogl_texture_pixmap_x11_is_using_tfp_extension (COGL_TEXTURE_PIXMAP_X11 (texture)))) | ||||
|     g_warning ("NOTE: Not using GLX TFP!\n"); | ||||
|  | ||||
|   priv->texture = texture; | ||||
|   meta_shaped_texture_set_texture (stex, texture); | ||||
| } | ||||
|  | ||||
| static void | ||||
| update_pixmap (MetaSurfaceActorX11 *self) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|   MetaDisplay *display = priv->display; | ||||
|   Display *xdisplay = meta_display_get_xdisplay (display); | ||||
|  | ||||
|   if (priv->size_changed) | ||||
|     { | ||||
|       detach_pixmap (self); | ||||
|       priv->size_changed = FALSE; | ||||
|     } | ||||
|  | ||||
|   if (priv->pixmap == None) | ||||
|     { | ||||
|       Pixmap new_pixmap; | ||||
|       Window xwindow = meta_window_get_toplevel_xwindow (priv->window); | ||||
|  | ||||
|       meta_error_trap_push (display); | ||||
|       new_pixmap = XCompositeNameWindowPixmap (xdisplay, xwindow); | ||||
|  | ||||
|       if (meta_error_trap_pop_with_return (display) != Success) | ||||
|         { | ||||
|           /* Probably a BadMatch if the window isn't viewable; we could | ||||
|            * GrabServer/GetWindowAttributes/NameWindowPixmap/UngrabServer/Sync | ||||
|            * to avoid this, but there's no reason to take two round trips | ||||
|            * when one will do. (We need that Sync if we want to handle failures | ||||
|            * for any reason other than !viewable. That's unlikely, but maybe | ||||
|            * we'll BadAlloc or something.) | ||||
|            */ | ||||
|           new_pixmap = None; | ||||
|         } | ||||
|  | ||||
|       if (new_pixmap == None) | ||||
|         { | ||||
|           meta_verbose ("Unable to get named pixmap for %s\n", | ||||
|                         meta_window_get_description (priv->window)); | ||||
|           return; | ||||
|         } | ||||
|  | ||||
|       set_pixmap (self, new_pixmap); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| is_visible (MetaSurfaceActorX11 *self) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|   return (priv->pixmap != None) && !priv->unredirected; | ||||
| } | ||||
|  | ||||
| static void | ||||
| damage_area (MetaSurfaceActorX11 *self, | ||||
|              int x, int y, int width, int height) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|  | ||||
|   if (!is_visible (self)) | ||||
|     return; | ||||
|  | ||||
|   cogl_texture_pixmap_x11_update_area (priv->texture, x, y, width, height); | ||||
|   meta_surface_actor_update_area (META_SURFACE_ACTOR (self), x, y, width, height); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_x11_process_damage (MetaSurfaceActor *actor, | ||||
|                                        int x, int y, int width, int height) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (actor); | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|  | ||||
|   priv->received_damage = TRUE; | ||||
|  | ||||
|   if (meta_window_is_fullscreen (priv->window) && !priv->unredirected && !priv->does_full_damage) | ||||
|     { | ||||
|       MetaRectangle window_rect; | ||||
|       meta_window_get_frame_rect (priv->window, &window_rect); | ||||
|  | ||||
|       if (window_rect.x == x && | ||||
|           window_rect.y == y && | ||||
|           window_rect.width == width && | ||||
|           window_rect.height == height) | ||||
|         priv->full_damage_frames_count++; | ||||
|       else | ||||
|         priv->full_damage_frames_count = 0; | ||||
|  | ||||
|       if (priv->full_damage_frames_count >= 100) | ||||
|         priv->does_full_damage = TRUE; | ||||
|     } | ||||
|  | ||||
|   /* Drop damage event for unredirected windows */ | ||||
|   if (priv->unredirected) | ||||
|     return; | ||||
|  | ||||
|   damage_area (self, x, y, width, height); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_x11_pre_paint (MetaSurfaceActor *actor) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (actor); | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|   MetaDisplay *display = priv->display; | ||||
|   Display *xdisplay = meta_display_get_xdisplay (display); | ||||
|  | ||||
|   if (priv->received_damage) | ||||
|     { | ||||
|       meta_error_trap_push (display); | ||||
|       XDamageSubtract (xdisplay, priv->damage, None, None); | ||||
|       meta_error_trap_pop (display); | ||||
|  | ||||
|       /* We need to make sure that any X drawing that happens before the | ||||
|        * XDamageSubtract() above is visible to subsequent GL rendering; | ||||
|        * the only standardized way to do this is EXT_x11_sync_object, | ||||
|        * which isn't yet widely available. For now, we count on details | ||||
|        * of Xorg and the open source drivers, and hope for the best | ||||
|        * otherwise. | ||||
|        * | ||||
|        * Xorg and open source driver specifics: | ||||
|        * | ||||
|        * The X server makes sure to flush drawing to the kernel before | ||||
|        * sending out damage events, but since we use DamageReportBoundingBox | ||||
|        * there may be drawing between the last damage event and the | ||||
|        * XDamageSubtract() that needs to be flushed as well. | ||||
|        * | ||||
|        * Xorg always makes sure that drawing is flushed to the kernel | ||||
|        * before writing events or responses to the client, so any round trip | ||||
|        * request at this point is sufficient to flush the GLX buffers. | ||||
|        */ | ||||
|       XSync (xdisplay, False); | ||||
|  | ||||
|       priv->received_damage = FALSE; | ||||
|     } | ||||
|  | ||||
|   update_pixmap (self); | ||||
| } | ||||
|  | ||||
| static void | ||||
| update_is_argb32 (MetaSurfaceActorX11 *self) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|   MetaDisplay *display = priv->display; | ||||
|   Display *xdisplay = meta_display_get_xdisplay (display); | ||||
|  | ||||
|   XRenderPictFormat *format; | ||||
|   format = XRenderFindVisualFormat (xdisplay, priv->window->xvisual); | ||||
|  | ||||
|   priv->argb32 = (format && format->type == PictTypeDirect && format->direct.alphaMask); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_surface_actor_x11_is_argb32 (MetaSurfaceActor *actor) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (actor); | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|  | ||||
|   return priv->argb32; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_surface_actor_x11_is_visible (MetaSurfaceActor *actor) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (actor); | ||||
|   return is_visible (self); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_surface_actor_x11_should_unredirect (MetaSurfaceActor *actor) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (actor); | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|  | ||||
|   MetaWindow *window = priv->window; | ||||
|  | ||||
|   if (meta_window_requested_dont_bypass_compositor (window)) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (window->opacity != 0xFF) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (window->shape_region != NULL) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (priv->argb32 && !meta_window_requested_bypass_compositor (window)) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (!meta_window_is_monitor_sized (window)) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (meta_window_requested_bypass_compositor (window)) | ||||
|     return TRUE; | ||||
|  | ||||
|   if (meta_window_is_override_redirect (window)) | ||||
|     return TRUE; | ||||
|  | ||||
|   if (priv->does_full_damage) | ||||
|     return TRUE; | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| sync_unredirected (MetaSurfaceActorX11 *self) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|   MetaDisplay *display = priv->display; | ||||
|   Display *xdisplay = meta_display_get_xdisplay (display); | ||||
|   Window xwindow = meta_window_get_toplevel_xwindow (priv->window); | ||||
|  | ||||
|   meta_error_trap_push (display); | ||||
|  | ||||
|   if (priv->unredirected) | ||||
|     { | ||||
|       detach_pixmap (self); | ||||
|       XCompositeUnredirectWindow (xdisplay, xwindow, CompositeRedirectManual); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       XCompositeRedirectWindow (xdisplay, xwindow, CompositeRedirectManual); | ||||
|     } | ||||
|  | ||||
|   meta_error_trap_pop (display); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_x11_set_unredirected (MetaSurfaceActor *actor, | ||||
|                                          gboolean          unredirected) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (actor); | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|  | ||||
|   if (priv->unredirected == unredirected) | ||||
|     return; | ||||
|  | ||||
|   priv->unredirected = unredirected; | ||||
|   sync_unredirected (self); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_surface_actor_x11_is_unredirected (MetaSurfaceActor *actor) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (actor); | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|  | ||||
|   return priv->unredirected; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_x11_dispose (GObject *object) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (object); | ||||
|  | ||||
|   detach_pixmap (self); | ||||
|   free_damage (self); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_surface_actor_x11_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static MetaWindow * | ||||
| meta_surface_actor_x11_get_window (MetaSurfaceActor *actor) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (META_SURFACE_ACTOR_X11 (actor)); | ||||
|  | ||||
|   return priv->window; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_x11_class_init (MetaSurfaceActorX11Class *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|   MetaSurfaceActorClass *surface_actor_class = META_SURFACE_ACTOR_CLASS (klass); | ||||
|  | ||||
|   object_class->dispose = meta_surface_actor_x11_dispose; | ||||
|  | ||||
|   surface_actor_class->process_damage = meta_surface_actor_x11_process_damage; | ||||
|   surface_actor_class->pre_paint = meta_surface_actor_x11_pre_paint; | ||||
|   surface_actor_class->is_argb32 = meta_surface_actor_x11_is_argb32; | ||||
|   surface_actor_class->is_visible = meta_surface_actor_x11_is_visible; | ||||
|  | ||||
|   surface_actor_class->should_unredirect = meta_surface_actor_x11_should_unredirect; | ||||
|   surface_actor_class->set_unredirected = meta_surface_actor_x11_set_unredirected; | ||||
|   surface_actor_class->is_unredirected = meta_surface_actor_x11_is_unredirected; | ||||
|  | ||||
|   surface_actor_class->get_window = meta_surface_actor_x11_get_window; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_x11_init (MetaSurfaceActorX11 *self) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|  | ||||
|   priv->last_width = -1; | ||||
|   priv->last_height = -1; | ||||
| } | ||||
|  | ||||
| static void | ||||
| create_damage (MetaSurfaceActorX11 *self) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|   Display *xdisplay = meta_display_get_xdisplay (priv->display); | ||||
|   Window xwindow = meta_window_get_toplevel_xwindow (priv->window); | ||||
|  | ||||
|   priv->damage = XDamageCreate (xdisplay, xwindow, XDamageReportBoundingBox); | ||||
| } | ||||
|  | ||||
| static void | ||||
| window_decorated_notify (MetaWindow *window, | ||||
|                          GParamSpec *pspec, | ||||
|                          gpointer    user_data) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (user_data); | ||||
|  | ||||
|   free_damage (self); | ||||
|   create_damage (self); | ||||
| } | ||||
|  | ||||
| MetaSurfaceActor * | ||||
| meta_surface_actor_x11_new (MetaWindow *window) | ||||
| { | ||||
|   MetaSurfaceActorX11 *self = g_object_new (META_TYPE_SURFACE_ACTOR_X11, NULL); | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|   MetaDisplay *display = meta_window_get_display (window); | ||||
|  | ||||
|   g_assert (!meta_is_wayland_compositor ()); | ||||
|  | ||||
|   priv->window = window; | ||||
|   priv->display = display; | ||||
|  | ||||
|   create_damage (self); | ||||
|   g_signal_connect_object (priv->window, "notify::decorated", | ||||
|                            G_CALLBACK (window_decorated_notify), self, 0); | ||||
|  | ||||
|   update_is_argb32 (self); | ||||
|  | ||||
|   priv->unredirected = FALSE; | ||||
|   sync_unredirected (self); | ||||
|  | ||||
|   clutter_actor_set_reactive (CLUTTER_ACTOR (self), TRUE); | ||||
|   return META_SURFACE_ACTOR (self); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_surface_actor_x11_set_size (MetaSurfaceActorX11 *self, | ||||
|                                  int width, int height) | ||||
| { | ||||
|   MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); | ||||
|  | ||||
|   if (priv->last_width == width && | ||||
|       priv->last_height == height) | ||||
|     return; | ||||
|  | ||||
|   priv->size_changed = TRUE; | ||||
|   priv->last_width = width; | ||||
|   priv->last_height = height; | ||||
| } | ||||
							
								
								
									
										69
									
								
								src/compositor/meta-surface-actor-x11.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/compositor/meta-surface-actor-x11.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (C) 2013 Red Hat | ||||
|  * | ||||
|  * 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. | ||||
|  * | ||||
|  * Written by: | ||||
|  *     Owen Taylor <otaylor@redhat.com> | ||||
|  *     Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_SURFACE_ACTOR_X11_H__ | ||||
| #define __META_SURFACE_ACTOR_X11_H__ | ||||
|  | ||||
| #include <glib-object.h> | ||||
|  | ||||
| #include "meta-surface-actor.h" | ||||
|  | ||||
| #include <X11/extensions/Xdamage.h> | ||||
|  | ||||
| #include <meta/display.h> | ||||
| #include <meta/window.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define META_TYPE_SURFACE_ACTOR_X11            (meta_surface_actor_x11_get_type ()) | ||||
| #define META_SURFACE_ACTOR_X11(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_SURFACE_ACTOR_X11, MetaSurfaceActorX11)) | ||||
| #define META_SURFACE_ACTOR_X11_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  META_TYPE_SURFACE_ACTOR_X11, MetaSurfaceActorX11Class)) | ||||
| #define META_IS_SURFACE_ACTOR_X11(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_SURFACE_ACTOR_X11)) | ||||
| #define META_IS_SURFACE_ACTOR_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  META_TYPE_SURFACE_ACTOR_X11)) | ||||
| #define META_SURFACE_ACTOR_X11_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  META_TYPE_SURFACE_ACTOR_X11, MetaSurfaceActorX11Class)) | ||||
|  | ||||
| typedef struct _MetaSurfaceActorX11      MetaSurfaceActorX11; | ||||
| typedef struct _MetaSurfaceActorX11Class MetaSurfaceActorX11Class; | ||||
|  | ||||
| struct _MetaSurfaceActorX11 | ||||
| { | ||||
|   MetaSurfaceActor parent; | ||||
| }; | ||||
|  | ||||
| struct _MetaSurfaceActorX11Class | ||||
| { | ||||
|   MetaSurfaceActorClass parent_class; | ||||
| }; | ||||
|  | ||||
| GType meta_surface_actor_x11_get_type (void); | ||||
|  | ||||
| MetaSurfaceActor * meta_surface_actor_x11_new (MetaWindow *window); | ||||
|  | ||||
| void meta_surface_actor_x11_set_size (MetaSurfaceActorX11 *self, | ||||
|                                       int width, int height); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __META_SURFACE_ACTOR_X11_H__ */ | ||||
							
								
								
									
										319
									
								
								src/compositor/meta-surface-actor.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										319
									
								
								src/compositor/meta-surface-actor.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,319 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-surface-actor | ||||
|  * @title: MetaSurfaceActor | ||||
|  * @short_description: An actor representing a surface in the scene graph | ||||
|  * | ||||
|  * A surface can be either a shaped texture, or a group of shaped texture, | ||||
|  * used to draw the content of a window. | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include "meta-surface-actor.h" | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| #include <meta/meta-shaped-texture.h> | ||||
| #include "meta-cullable.h" | ||||
| #include "meta-shaped-texture-private.h" | ||||
|  | ||||
| struct _MetaSurfaceActorPrivate | ||||
| { | ||||
|   MetaShapedTexture *texture; | ||||
|  | ||||
|   cairo_region_t *input_region; | ||||
|  | ||||
|   /* Freeze/thaw accounting */ | ||||
|   guint needs_damage_all : 1; | ||||
|   guint frozen : 1; | ||||
| }; | ||||
|  | ||||
| static void cullable_iface_init (MetaCullableInterface *iface); | ||||
|  | ||||
| G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MetaSurfaceActor, meta_surface_actor, CLUTTER_TYPE_ACTOR, | ||||
|                                   G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); | ||||
|  | ||||
| enum { | ||||
|   REPAINT_SCHEDULED, | ||||
|  | ||||
|   LAST_SIGNAL, | ||||
| }; | ||||
|  | ||||
| static guint signals[LAST_SIGNAL]; | ||||
|  | ||||
| gboolean | ||||
| meta_surface_actor_get_unobscured_bounds (MetaSurfaceActor      *self, | ||||
|                                           cairo_rectangle_int_t *unobscured_bounds) | ||||
| { | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|   return meta_shaped_texture_get_unobscured_bounds (priv->texture, unobscured_bounds); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_pick (ClutterActor       *actor, | ||||
|                          const ClutterColor *color) | ||||
| { | ||||
|   MetaSurfaceActor *self = META_SURFACE_ACTOR (actor); | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|  | ||||
|   if (!clutter_actor_should_pick_paint (actor)) | ||||
|     return; | ||||
|  | ||||
|   /* If there is no region then use the regular pick */ | ||||
|   if (priv->input_region == NULL) | ||||
|     CLUTTER_ACTOR_CLASS (meta_surface_actor_parent_class)->pick (actor, color); | ||||
|   else | ||||
|     { | ||||
|       int n_rects; | ||||
|       float *rectangles; | ||||
|       int i; | ||||
|       CoglPipeline *pipeline; | ||||
|       CoglContext *ctx; | ||||
|       CoglFramebuffer *fb; | ||||
|       CoglColor cogl_color; | ||||
|  | ||||
|       n_rects = cairo_region_num_rectangles (priv->input_region); | ||||
|       rectangles = g_alloca (sizeof (float) * 4 * n_rects); | ||||
|  | ||||
|       for (i = 0; i < n_rects; i++) | ||||
|         { | ||||
|           cairo_rectangle_int_t rect; | ||||
|           int pos = i * 4; | ||||
|  | ||||
|           cairo_region_get_rectangle (priv->input_region, i, &rect); | ||||
|  | ||||
|           rectangles[pos + 0] = rect.x; | ||||
|           rectangles[pos + 1] = rect.y; | ||||
|           rectangles[pos + 2] = rect.x + rect.width; | ||||
|           rectangles[pos + 3] = rect.y + rect.height; | ||||
|         } | ||||
|  | ||||
|       ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|       fb = cogl_get_draw_framebuffer (); | ||||
|  | ||||
|       cogl_color_init_from_4ub (&cogl_color, color->red, color->green, color->blue, color->alpha); | ||||
|  | ||||
|       pipeline = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_color (pipeline, &cogl_color); | ||||
|       cogl_framebuffer_draw_rectangles (fb, pipeline, rectangles, n_rects); | ||||
|       cogl_object_unref (pipeline); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_dispose (GObject *object) | ||||
| { | ||||
|   MetaSurfaceActor *self = META_SURFACE_ACTOR (object); | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|  | ||||
|   g_clear_pointer (&priv->input_region, cairo_region_destroy); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_surface_actor_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_class_init (MetaSurfaceActorClass *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|   ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); | ||||
|  | ||||
|   object_class->dispose = meta_surface_actor_dispose; | ||||
|   actor_class->pick = meta_surface_actor_pick; | ||||
|  | ||||
|   signals[REPAINT_SCHEDULED] = g_signal_new ("repaint-scheduled", | ||||
|                                              G_TYPE_FROM_CLASS (object_class), | ||||
|                                              G_SIGNAL_RUN_LAST, | ||||
|                                              0, | ||||
|                                              NULL, NULL, NULL, | ||||
|                                              G_TYPE_NONE, 0); | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaSurfaceActorPrivate)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_cull_out (MetaCullable   *cullable, | ||||
|                              cairo_region_t *unobscured_region, | ||||
|                              cairo_region_t *clip_region) | ||||
| { | ||||
|   meta_cullable_cull_out_children (cullable, unobscured_region, clip_region); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   meta_cullable_reset_culling_children (cullable); | ||||
| } | ||||
|  | ||||
| static void | ||||
| cullable_iface_init (MetaCullableInterface *iface) | ||||
| { | ||||
|   iface->cull_out = meta_surface_actor_cull_out; | ||||
|   iface->reset_culling = meta_surface_actor_reset_culling; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_surface_actor_init (MetaSurfaceActor *self) | ||||
| { | ||||
|   MetaSurfaceActorPrivate *priv; | ||||
|  | ||||
|   priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, | ||||
|                                                    META_TYPE_SURFACE_ACTOR, | ||||
|                                                    MetaSurfaceActorPrivate); | ||||
|  | ||||
|   priv->texture = META_SHAPED_TEXTURE (meta_shaped_texture_new ()); | ||||
|   clutter_actor_add_child (CLUTTER_ACTOR (self), CLUTTER_ACTOR (priv->texture)); | ||||
| } | ||||
|  | ||||
| cairo_surface_t * | ||||
| meta_surface_actor_get_image (MetaSurfaceActor      *self, | ||||
|                               cairo_rectangle_int_t *clip) | ||||
| { | ||||
|   return meta_shaped_texture_get_image (self->priv->texture, clip); | ||||
| } | ||||
|  | ||||
| MetaShapedTexture * | ||||
| meta_surface_actor_get_texture (MetaSurfaceActor *self) | ||||
| { | ||||
|   return self->priv->texture; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_surface_actor_update_area (MetaSurfaceActor *self, | ||||
|                                 int x, int y, int width, int height) | ||||
| { | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|  | ||||
|   if (meta_shaped_texture_update_area (priv->texture, x, y, width, height)) | ||||
|     g_signal_emit (self, signals[REPAINT_SCHEDULED], 0); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_surface_actor_is_obscured (MetaSurfaceActor *self) | ||||
| { | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|   return meta_shaped_texture_is_obscured (priv->texture); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_surface_actor_set_input_region (MetaSurfaceActor *self, | ||||
|                                      cairo_region_t   *region) | ||||
| { | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|  | ||||
|   if (priv->input_region) | ||||
|     cairo_region_destroy (priv->input_region); | ||||
|  | ||||
|   if (region) | ||||
|     priv->input_region = cairo_region_reference (region); | ||||
|   else | ||||
|     priv->input_region = NULL; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_surface_actor_set_opaque_region (MetaSurfaceActor *self, | ||||
|                                       cairo_region_t   *region) | ||||
| { | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|   meta_shaped_texture_set_opaque_region (priv->texture, region); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| is_frozen (MetaSurfaceActor *self) | ||||
| { | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|   return priv->frozen; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_surface_actor_process_damage (MetaSurfaceActor *self, | ||||
|                                    int x, int y, int width, int height) | ||||
| { | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|  | ||||
|   if (is_frozen (self)) | ||||
|     { | ||||
|       /* The window is frozen due to an effect in progress: we ignore damage | ||||
|        * here on the off chance that this will stop the corresponding | ||||
|        * texture_from_pixmap from being update. | ||||
|        * | ||||
|        * needs_damage_all tracks that some unknown damage happened while the | ||||
|        * window was frozen so that when the window becomes unfrozen we can | ||||
|        * issue a full window update to cover any lost damage. | ||||
|        * | ||||
|        * It should be noted that this is an unreliable mechanism since it's | ||||
|        * quite likely that drivers will aim to provide a zero-copy | ||||
|        * implementation of the texture_from_pixmap extension and in those cases | ||||
|        * any drawing done to the window is always immediately reflected in the | ||||
|        * texture regardless of damage event handling. | ||||
|        */ | ||||
|       priv->needs_damage_all = TRUE; | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   META_SURFACE_ACTOR_GET_CLASS (self)->process_damage (self, x, y, width, height); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_surface_actor_pre_paint (MetaSurfaceActor *self) | ||||
| { | ||||
|   META_SURFACE_ACTOR_GET_CLASS (self)->pre_paint (self); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_surface_actor_is_argb32 (MetaSurfaceActor *self) | ||||
| { | ||||
|   return META_SURFACE_ACTOR_GET_CLASS (self)->is_argb32 (self); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_surface_actor_is_visible (MetaSurfaceActor *self) | ||||
| { | ||||
|   return META_SURFACE_ACTOR_GET_CLASS (self)->is_visible (self); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_surface_actor_set_frozen (MetaSurfaceActor *self, | ||||
|                                gboolean          frozen) | ||||
| { | ||||
|   MetaSurfaceActorPrivate *priv = self->priv; | ||||
|  | ||||
|   priv->frozen = frozen; | ||||
|  | ||||
|   if (!frozen && priv->needs_damage_all) | ||||
|     { | ||||
|       /* Since we ignore damage events while a window is frozen for certain effects | ||||
|        * we may need to issue an update_area() covering the whole pixmap if we | ||||
|        * don't know what real damage has happened. */ | ||||
|  | ||||
|       meta_surface_actor_process_damage (self, 0, 0, | ||||
|                                          clutter_actor_get_width (CLUTTER_ACTOR (priv->texture)), | ||||
|                                          clutter_actor_get_height (CLUTTER_ACTOR (priv->texture))); | ||||
|       priv->needs_damage_all = FALSE; | ||||
|     } | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_surface_actor_should_unredirect (MetaSurfaceActor *self) | ||||
| { | ||||
|   return META_SURFACE_ACTOR_GET_CLASS (self)->should_unredirect (self); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_surface_actor_set_unredirected (MetaSurfaceActor *self, | ||||
|                                      gboolean          unredirected) | ||||
| { | ||||
|   META_SURFACE_ACTOR_GET_CLASS (self)->set_unredirected (self, unredirected); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_surface_actor_is_unredirected (MetaSurfaceActor *self) | ||||
| { | ||||
|   return META_SURFACE_ACTOR_GET_CLASS (self)->is_unredirected (self); | ||||
| } | ||||
|  | ||||
| MetaWindow * | ||||
| meta_surface_actor_get_window (MetaSurfaceActor *self) | ||||
| { | ||||
|   return META_SURFACE_ACTOR_GET_CLASS (self)->get_window (self); | ||||
| } | ||||
							
								
								
									
										86
									
								
								src/compositor/meta-surface-actor.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								src/compositor/meta-surface-actor.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| #ifndef META_SURFACE_ACTOR_PRIVATE_H | ||||
| #define META_SURFACE_ACTOR_PRIVATE_H | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include <meta/meta-shaped-texture.h> | ||||
| #include <meta/window.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define META_TYPE_SURFACE_ACTOR            (meta_surface_actor_get_type()) | ||||
| #define META_SURFACE_ACTOR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_SURFACE_ACTOR, MetaSurfaceActor)) | ||||
| #define META_SURFACE_ACTOR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_SURFACE_ACTOR, MetaSurfaceActorClass)) | ||||
| #define META_IS_SURFACE_ACTOR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_SURFACE_ACTOR)) | ||||
| #define META_IS_SURFACE_ACTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_SURFACE_ACTOR)) | ||||
| #define META_SURFACE_ACTOR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_SURFACE_ACTOR, MetaSurfaceActorClass)) | ||||
|  | ||||
| typedef struct _MetaSurfaceActor        MetaSurfaceActor; | ||||
| typedef struct _MetaSurfaceActorClass   MetaSurfaceActorClass; | ||||
| typedef struct _MetaSurfaceActorPrivate MetaSurfaceActorPrivate; | ||||
|  | ||||
| struct _MetaSurfaceActorClass | ||||
| { | ||||
|   /*< private >*/ | ||||
|   ClutterActorClass parent_class; | ||||
|  | ||||
|   void     (* process_damage)    (MetaSurfaceActor *actor, | ||||
|                                   int x, int y, int width, int height); | ||||
|   void     (* pre_paint)         (MetaSurfaceActor *actor); | ||||
|   gboolean (* is_argb32)         (MetaSurfaceActor *actor); | ||||
|   gboolean (* is_visible)        (MetaSurfaceActor *actor); | ||||
|  | ||||
|   gboolean (* should_unredirect) (MetaSurfaceActor *actor); | ||||
|   void     (* set_unredirected)  (MetaSurfaceActor *actor, | ||||
|                                   gboolean          unredirected); | ||||
|   gboolean (* is_unredirected)   (MetaSurfaceActor *actor); | ||||
|  | ||||
|   MetaWindow *(* get_window)      (MetaSurfaceActor *actor); | ||||
| }; | ||||
|  | ||||
| struct _MetaSurfaceActor | ||||
| { | ||||
|   ClutterActor            parent; | ||||
|  | ||||
|   MetaSurfaceActorPrivate *priv; | ||||
| }; | ||||
|  | ||||
| GType meta_surface_actor_get_type (void); | ||||
|  | ||||
| cairo_surface_t *meta_surface_actor_get_image (MetaSurfaceActor      *self, | ||||
|                                                cairo_rectangle_int_t *clip); | ||||
|  | ||||
| MetaShapedTexture *meta_surface_actor_get_texture (MetaSurfaceActor *self); | ||||
| MetaWindow        *meta_surface_actor_get_window  (MetaSurfaceActor *self); | ||||
|  | ||||
| gboolean meta_surface_actor_is_obscured (MetaSurfaceActor *self); | ||||
| gboolean meta_surface_actor_get_unobscured_bounds (MetaSurfaceActor      *self, | ||||
|                                                    cairo_rectangle_int_t *unobscured_bounds); | ||||
|  | ||||
| void meta_surface_actor_set_input_region (MetaSurfaceActor *self, | ||||
|                                           cairo_region_t   *region); | ||||
| void meta_surface_actor_set_opaque_region (MetaSurfaceActor *self, | ||||
|                                            cairo_region_t   *region); | ||||
|  | ||||
| void meta_surface_actor_update_area (MetaSurfaceActor *actor, | ||||
|                                      int x, int y, int width, int height); | ||||
|  | ||||
| void meta_surface_actor_process_damage (MetaSurfaceActor *actor, | ||||
|                                         int x, int y, int width, int height); | ||||
| void meta_surface_actor_pre_paint (MetaSurfaceActor *actor); | ||||
| gboolean meta_surface_actor_is_argb32 (MetaSurfaceActor *actor); | ||||
| gboolean meta_surface_actor_is_visible (MetaSurfaceActor *actor); | ||||
|  | ||||
| void meta_surface_actor_set_frozen (MetaSurfaceActor *actor, | ||||
|                                     gboolean          frozen); | ||||
|  | ||||
| gboolean meta_surface_actor_should_unredirect (MetaSurfaceActor *actor); | ||||
| void meta_surface_actor_set_unredirected (MetaSurfaceActor *actor, | ||||
|                                           gboolean          unredirected); | ||||
| gboolean meta_surface_actor_is_unredirected (MetaSurfaceActor *actor); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* META_SURFACE_ACTOR_PRIVATE_H */ | ||||
| @@ -18,9 +18,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
| @@ -28,41 +26,6 @@ | ||||
| #include <clutter/clutter.h> | ||||
| #include "meta-texture-rectangle.h" | ||||
|  | ||||
| CoglTexture * | ||||
| meta_texture_rectangle_new (unsigned int width, | ||||
|                             unsigned int height, | ||||
|                             CoglPixelFormat format, | ||||
|                             CoglPixelFormat internal_format, | ||||
|                             unsigned int rowstride, | ||||
|                             const guint8 *data, | ||||
|                             GError **error) | ||||
| { | ||||
|   ClutterBackend *backend = | ||||
|     clutter_get_default_backend (); | ||||
|   CoglContext *context = | ||||
|     clutter_backend_get_cogl_context (backend); | ||||
|   CoglTextureRectangle *tex_rect; | ||||
|  | ||||
|   tex_rect = cogl_texture_rectangle_new_with_size (context, | ||||
|                                                    width, height, | ||||
|                                                    internal_format, | ||||
|                                                    error); | ||||
|   if (tex_rect == NULL) | ||||
|     return NULL; | ||||
|  | ||||
|   if (data) | ||||
|     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); | ||||
|  | ||||
|   return COGL_TEXTURE (tex_rect); | ||||
| } | ||||
|  | ||||
| static void | ||||
| texture_rectangle_check_cb (CoglTexture *sub_texture, | ||||
|                             const float *sub_texture_coords, | ||||
|   | ||||
| @@ -18,9 +18,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_TEXTURE_RECTANGLE_H__ | ||||
| @@ -30,15 +28,6 @@ | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| CoglTexture * | ||||
| meta_texture_rectangle_new (unsigned int width, | ||||
|                             unsigned int height, | ||||
|                             CoglPixelFormat format, | ||||
|                             CoglPixelFormat internal_format, | ||||
|                             unsigned int rowstride, | ||||
|                             const guint8 *data, | ||||
|                             GError **error); | ||||
|  | ||||
| gboolean | ||||
| meta_texture_rectangle_check (CoglTexture *texture); | ||||
|  | ||||
|   | ||||
| @@ -17,9 +17,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <math.h> | ||||
| @@ -357,18 +355,10 @@ texture_tower_create_texture (MetaTextureTower *tower, | ||||
|   if ((!is_power_of_two (width) || !is_power_of_two (height)) && | ||||
|       meta_texture_rectangle_check (tower->textures[level - 1])) | ||||
|     { | ||||
|       tower->textures[level] = | ||||
|         meta_texture_rectangle_new (width, height, | ||||
|                                     /* data format */ | ||||
|                                     TEXTURE_FORMAT, | ||||
|                                     /* internal cogl format */ | ||||
|                                     TEXTURE_FORMAT, | ||||
|                                     /* rowstride */ | ||||
|                                     width * 4, | ||||
|                                     /* data */ | ||||
|                                     NULL, | ||||
|                                     /* error */ | ||||
|                                     NULL); | ||||
|       ClutterBackend *backend = clutter_get_default_backend (); | ||||
|       CoglContext *context = clutter_backend_get_cogl_context (backend); | ||||
|  | ||||
|       tower->textures[level] = cogl_texture_rectangle_new_with_size (context, width, height); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|   | ||||
| @@ -17,9 +17,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_TEXTURE_TOWER_H__ | ||||
|   | ||||
| @@ -7,6 +7,7 @@ | ||||
|  | ||||
| #include <X11/extensions/Xdamage.h> | ||||
| #include <meta/compositor-mutter.h> | ||||
| #include "meta-surface-actor.h" | ||||
|  | ||||
| MetaWindowActor *meta_window_actor_new (MetaWindow *window); | ||||
|  | ||||
| @@ -24,8 +25,8 @@ void meta_window_actor_unmaximize (MetaWindowActor *self, | ||||
|                                    MetaRectangle   *old_rect, | ||||
|                                    MetaRectangle   *new_rect); | ||||
|  | ||||
| void meta_window_actor_process_damage (MetaWindowActor    *self, | ||||
|                                        XDamageNotifyEvent *event); | ||||
| void meta_window_actor_process_x11_damage (MetaWindowActor    *self, | ||||
|                                            XDamageNotifyEvent *event); | ||||
|  | ||||
| void meta_window_actor_pre_paint      (MetaWindowActor    *self); | ||||
| void meta_window_actor_post_paint     (MetaWindowActor    *self); | ||||
| @@ -35,13 +36,13 @@ void meta_window_actor_frame_complete (MetaWindowActor    *self, | ||||
|  | ||||
| void meta_window_actor_invalidate_shadow (MetaWindowActor *self); | ||||
|  | ||||
| void meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state); | ||||
|  | ||||
| gboolean meta_window_actor_should_unredirect (MetaWindowActor *self); | ||||
|  | ||||
| void meta_window_actor_get_shape_bounds (MetaWindowActor       *self, | ||||
|                                           cairo_rectangle_int_t *bounds); | ||||
|  | ||||
| gboolean meta_window_actor_should_unredirect   (MetaWindowActor *self); | ||||
| void     meta_window_actor_set_unredirected    (MetaWindowActor *self, | ||||
|                                                 gboolean         unredirected); | ||||
|  | ||||
| gboolean meta_window_actor_effect_in_progress  (MetaWindowActor *self); | ||||
| void     meta_window_actor_sync_actor_geometry (MetaWindowActor *self, | ||||
|                                                 gboolean         did_placement); | ||||
| @@ -55,15 +56,10 @@ void     meta_window_actor_set_updates_frozen  (MetaWindowActor *self, | ||||
| void     meta_window_actor_queue_frame_drawn   (MetaWindowActor *self, | ||||
|                                                 gboolean         no_delay_frame); | ||||
|  | ||||
| cairo_region_t *meta_window_actor_get_obscured_region (MetaWindowActor *self); | ||||
|  | ||||
| void meta_window_actor_set_visible_region         (MetaWindowActor *self, | ||||
|                                                    cairo_region_t  *visible_region); | ||||
| void meta_window_actor_set_visible_region_beneath (MetaWindowActor *self, | ||||
|                                                    cairo_region_t  *beneath_region); | ||||
| void meta_window_actor_reset_visible_regions      (MetaWindowActor *self); | ||||
|  | ||||
| void meta_window_actor_effect_completed (MetaWindowActor *actor, | ||||
|                                          gulong           event); | ||||
|  | ||||
| MetaSurfaceActor *meta_window_actor_get_surface (MetaWindowActor *self); | ||||
| void meta_window_actor_update_surface (MetaWindowActor *self); | ||||
|  | ||||
| #endif /* META_WINDOW_ACTOR_PRIVATE_H */ | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -11,8 +11,8 @@ | ||||
| #include "compositor-private.h" | ||||
| #include "meta-window-actor-private.h" | ||||
| #include "meta-window-group.h" | ||||
| #include "meta-background-actor-private.h" | ||||
| #include "meta-background-group-private.h" | ||||
| #include "window-private.h" | ||||
| #include "meta-cullable.h" | ||||
|  | ||||
| struct _MetaWindowGroupClass | ||||
| { | ||||
| @@ -26,7 +26,10 @@ struct _MetaWindowGroup | ||||
|   MetaScreen *screen; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaWindowGroup, meta_window_group, CLUTTER_TYPE_ACTOR); | ||||
| static void cullable_iface_init (MetaCullableInterface *iface); | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_CODE (MetaWindowGroup, meta_window_group, CLUTTER_TYPE_ACTOR, | ||||
|                          G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); | ||||
|  | ||||
| /* Help macros to scale from OpenGL <-1,1> coordinates system to | ||||
|  * window coordinates ranging [0,window-size]. Borrowed from clutter-utils.c | ||||
| @@ -86,19 +89,39 @@ painting_untransformed (MetaWindowGroup *window_group, | ||||
|   return meta_actor_vertices_are_untransformed (vertices, width, height, x_origin, y_origin); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_window_group_cull_out (MetaCullable   *cullable, | ||||
|                             cairo_region_t *unobscured_region, | ||||
|                             cairo_region_t *clip_region) | ||||
| { | ||||
|   meta_cullable_cull_out_children (cullable, unobscured_region, clip_region); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_window_group_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   meta_cullable_reset_culling_children (cullable); | ||||
| } | ||||
|  | ||||
| static void | ||||
| cullable_iface_init (MetaCullableInterface *iface) | ||||
| { | ||||
|   iface->cull_out = meta_window_group_cull_out; | ||||
|   iface->reset_culling = meta_window_group_reset_culling; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_window_group_paint (ClutterActor *actor) | ||||
| { | ||||
|   cairo_region_t *visible_region; | ||||
|   ClutterActor *stage; | ||||
|   cairo_rectangle_int_t visible_rect; | ||||
|   GList *children, *l; | ||||
|   cairo_region_t *clip_region; | ||||
|   cairo_region_t *unobscured_region; | ||||
|   cairo_rectangle_int_t visible_rect, clip_rect; | ||||
|   int paint_x_offset, paint_y_offset; | ||||
|   int paint_x_origin, paint_y_origin; | ||||
|   int actor_x_origin, actor_y_origin; | ||||
|   int paint_x_offset, paint_y_offset; | ||||
|  | ||||
|   MetaWindowGroup *window_group = META_WINDOW_GROUP (actor); | ||||
|   MetaCompScreen *info = meta_screen_get_compositor_data (window_group->screen); | ||||
|   ClutterActor *stage = clutter_actor_get_stage (actor); | ||||
|  | ||||
|   /* Normally we expect an actor to be drawn at it's position on the screen. | ||||
|    * However, if we're inside the paint of a ClutterClone, that won't be the | ||||
| @@ -120,15 +143,11 @@ meta_window_group_paint (ClutterActor *actor) | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   paint_x_offset = paint_x_origin - actor_x_origin; | ||||
|   paint_y_offset = paint_y_origin - actor_y_origin; | ||||
|   visible_rect.x = visible_rect.y = 0; | ||||
|   visible_rect.width = clutter_actor_get_width (CLUTTER_ACTOR (stage)); | ||||
|   visible_rect.height = clutter_actor_get_height (CLUTTER_ACTOR (stage)); | ||||
|  | ||||
|   /* We walk the list from top to bottom (opposite of painting order), | ||||
|    * and subtract the opaque area of each window out of the visible | ||||
|    * region that we pass to the windows below. | ||||
|    */ | ||||
|   children = clutter_actor_get_children (actor); | ||||
|   children = g_list_reverse (children); | ||||
|   unobscured_region = cairo_region_create_rectangle (&visible_rect); | ||||
|  | ||||
|   /* Get the clipped redraw bounds from Clutter so that we can avoid | ||||
|    * painting shadows on windows that don't need to be painted in this | ||||
| @@ -136,125 +155,49 @@ meta_window_group_paint (ClutterActor *actor) | ||||
|    * sizes, we could intersect this with an accurate union of the | ||||
|    * monitors to avoid painting shadows that are visible only in the | ||||
|    * holes. */ | ||||
|   stage = clutter_actor_get_stage (actor); | ||||
|   clutter_stage_get_redraw_clip_bounds (CLUTTER_STAGE (stage), | ||||
|                                         &visible_rect); | ||||
|                                         &clip_rect); | ||||
|  | ||||
|   visible_region = cairo_region_create_rectangle (&visible_rect); | ||||
|   clip_region = cairo_region_create_rectangle (&clip_rect); | ||||
|  | ||||
|   if (info->unredirected_window != NULL) | ||||
|     { | ||||
|       cairo_rectangle_int_t unredirected_rect; | ||||
|       MetaWindow *window = meta_window_actor_get_meta_window (info->unredirected_window); | ||||
|   paint_x_offset = paint_x_origin - actor_x_origin; | ||||
|   paint_y_offset = paint_y_origin - actor_y_origin; | ||||
|   cairo_region_translate (clip_region, -paint_x_offset, -paint_y_offset); | ||||
|  | ||||
|       meta_window_get_outer_rect (window, (MetaRectangle *)&unredirected_rect); | ||||
|       cairo_region_subtract_rectangle (visible_region, &unredirected_rect); | ||||
|     } | ||||
|   meta_cullable_cull_out (META_CULLABLE (window_group), unobscured_region, clip_region); | ||||
|  | ||||
|   for (l = children; l; l = l->next) | ||||
|     { | ||||
|       if (!CLUTTER_ACTOR_IS_VISIBLE (l->data)) | ||||
|         continue; | ||||
|  | ||||
|       if (l->data == info->unredirected_window) | ||||
|         continue; | ||||
|  | ||||
|       /* If an actor has effects applied, then that can change the area | ||||
|        * it paints and the opacity, so we no longer can figure out what | ||||
|        * portion of the actor is obscured and what portion of the screen | ||||
|        * it obscures, so we skip the actor. | ||||
|        * | ||||
|        * This has a secondary beneficial effect: if a ClutterOffscreenEffect | ||||
|        * is applied to an actor, then our clipped redraws interfere with the | ||||
|        * caching of the FBO - even if we only need to draw a small portion | ||||
|        * of the window right now, ClutterOffscreenEffect may use other portions | ||||
|        * of the FBO later. So, skipping actors with effects applied also | ||||
|        * prevents these bugs. | ||||
|        * | ||||
|        * Theoretically, we should check clutter_actor_get_offscreen_redirect() | ||||
|        * as well for the same reason, but omitted for simplicity in the | ||||
|        * hopes that no-one will do that. | ||||
|        */ | ||||
|       if (clutter_actor_has_effects (l->data)) | ||||
|         continue; | ||||
|  | ||||
|       if (META_IS_WINDOW_ACTOR (l->data)) | ||||
|         { | ||||
|           MetaWindowActor *window_actor = l->data; | ||||
|           int x, y; | ||||
|  | ||||
|           if (!meta_actor_is_untransformed (CLUTTER_ACTOR (window_actor), &x, &y)) | ||||
|             continue; | ||||
|  | ||||
|           x += paint_x_offset; | ||||
|           y += paint_y_offset; | ||||
|  | ||||
|           /* Temporarily move to the coordinate system of the actor */ | ||||
|           cairo_region_translate (visible_region, - x, - y); | ||||
|  | ||||
|           meta_window_actor_set_visible_region (window_actor, visible_region); | ||||
|  | ||||
|           if (clutter_actor_get_paint_opacity (CLUTTER_ACTOR (window_actor)) == 0xff) | ||||
|             { | ||||
|               cairo_region_t *obscured_region = meta_window_actor_get_obscured_region (window_actor); | ||||
|               if (obscured_region) | ||||
|                 cairo_region_subtract (visible_region, obscured_region); | ||||
|             } | ||||
|  | ||||
|           meta_window_actor_set_visible_region_beneath (window_actor, visible_region); | ||||
|           cairo_region_translate (visible_region, x, y); | ||||
|         } | ||||
|       else if (META_IS_BACKGROUND_ACTOR (l->data) || | ||||
|                META_IS_BACKGROUND_GROUP (l->data)) | ||||
|         { | ||||
|           ClutterActor *background_actor = l->data; | ||||
|           int x, y; | ||||
|  | ||||
|           if (!meta_actor_is_untransformed (CLUTTER_ACTOR (background_actor), &x, &y)) | ||||
|             continue; | ||||
|  | ||||
|           x += paint_x_offset; | ||||
|           y += paint_y_offset; | ||||
|  | ||||
|           cairo_region_translate (visible_region, - x, - y); | ||||
|  | ||||
|           if (META_IS_BACKGROUND_GROUP (background_actor)) | ||||
|             meta_background_group_set_visible_region (META_BACKGROUND_GROUP (background_actor), visible_region); | ||||
|           else | ||||
|             meta_background_actor_set_visible_region (META_BACKGROUND_ACTOR (background_actor), visible_region); | ||||
|           cairo_region_translate (visible_region, x, y); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   cairo_region_destroy (visible_region); | ||||
|   cairo_region_destroy (unobscured_region); | ||||
|   cairo_region_destroy (clip_region); | ||||
|  | ||||
|   CLUTTER_ACTOR_CLASS (meta_window_group_parent_class)->paint (actor); | ||||
|  | ||||
|   /* Now that we are done painting, unset the visible regions (they will | ||||
|    * mess up painting clones of our actors) | ||||
|    */ | ||||
|   for (l = children; l; l = l->next) | ||||
|     { | ||||
|       if (META_IS_WINDOW_ACTOR (l->data)) | ||||
|         { | ||||
|           MetaWindowActor *window_actor = l->data; | ||||
|           meta_window_actor_reset_visible_regions (window_actor); | ||||
|         } | ||||
|       else if (META_IS_BACKGROUND_ACTOR (l->data)) | ||||
|         { | ||||
|           MetaBackgroundActor *background_actor = l->data; | ||||
|           meta_background_actor_set_visible_region (background_actor, NULL); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   g_list_free (children); | ||||
|   meta_cullable_reset_culling (META_CULLABLE (window_group)); | ||||
| } | ||||
|  | ||||
| /* Adapted from clutter_actor_update_default_paint_volume() */ | ||||
| static gboolean | ||||
| meta_window_group_get_paint_volume (ClutterActor       *actor, | ||||
| meta_window_group_get_paint_volume (ClutterActor       *self, | ||||
|                                     ClutterPaintVolume *volume) | ||||
| { | ||||
|   return clutter_paint_volume_set_from_allocation (volume, actor); | ||||
|   ClutterActorIter iter; | ||||
|   ClutterActor *child; | ||||
|  | ||||
|   clutter_actor_iter_init (&iter, self); | ||||
|   while (clutter_actor_iter_next (&iter, &child)) | ||||
|     { | ||||
|       const ClutterPaintVolume *child_volume; | ||||
|  | ||||
|       if (!CLUTTER_ACTOR_IS_MAPPED (child)) | ||||
|         continue; | ||||
|  | ||||
|       child_volume = clutter_actor_get_transformed_paint_volume (child, self); | ||||
|       if (child_volume == NULL) | ||||
|         return FALSE; | ||||
|  | ||||
|       clutter_paint_volume_union (volume, child_volume); | ||||
|     } | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -11,29 +11,9 @@ | ||||
|  * MetaWindowGroup: | ||||
|  * | ||||
|  * This class is a subclass of ClutterActor with special handling for | ||||
|  * MetaWindowActor/MetaBackgroundActor/MetaBackgroundGroup when painting | ||||
|  * children. | ||||
|  * | ||||
|  * When we are painting a stack of 5-10 maximized windows, the | ||||
|  * standard bottom-to-top method of drawing every actor results in a | ||||
|  * tremendous amount of overdraw and can easily max out the available | ||||
|  * memory bandwidth on a low-end graphics chipset. It's even worse if | ||||
|  * window textures are being accessed over the AGP bus. | ||||
|  * | ||||
|  * The basic technique applied here is to do a pre-pass before painting | ||||
|  * where we walk window from top to bottom and compute the visible area | ||||
|  * at each step by subtracting out the windows above it. The visible | ||||
|  * area is passed to MetaWindowActor which uses it to clip the portion of | ||||
|  * the window which drawn and avoid redrawing the shadow if it is completely | ||||
|  * obscured. | ||||
|  * | ||||
|  * A caveat is that this is ineffective if applications are using ARGB | ||||
|  * visuals, since we have no way of knowing whether a window obscures | ||||
|  * the windows behind it or not. Alternate approaches using the depth | ||||
|  * or stencil buffer rather than client side regions might be able to | ||||
|  * handle alpha windows, but the combination of glAlphaFunc and stenciling | ||||
|  * tends not to be efficient except on newer cards. (And on newer cards | ||||
|  * we have lots of memory and bandwidth.) | ||||
|  * #MetaCullable when painting children. It uses code similar to | ||||
|  * meta_cullable_cull_out_children(), but also has additional special | ||||
|  * cases for the undirected window, and similar. | ||||
|  */ | ||||
|  | ||||
| #define META_TYPE_WINDOW_GROUP            (meta_window_group_get_type ()) | ||||
|   | ||||
| @@ -17,9 +17,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| #include <string.h> | ||||
|  | ||||
|   | ||||
| @@ -17,9 +17,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_WINDOW_SHAPE_H__ | ||||
|   | ||||
| @@ -16,30 +16,30 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include <meta/meta-plugin.h> | ||||
| #include <meta/window.h> | ||||
| #include <meta/meta-background-group.h> | ||||
| #include <meta/meta-background-actor.h> | ||||
| #include <meta/util.h> | ||||
|  | ||||
| #include <libintl.h> | ||||
| #define _(x) dgettext (GETTEXT_PACKAGE, x) | ||||
| #define N_(x) x | ||||
| #include <glib/gi18n-lib.h> | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| #include <gmodule.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #define DESTROY_TIMEOUT   250 | ||||
| #define DESTROY_TIMEOUT   100 | ||||
| #define MINIMIZE_TIMEOUT  250 | ||||
| #define MAXIMIZE_TIMEOUT  250 | ||||
| #define MAP_TIMEOUT       250 | ||||
| #define SWITCH_TIMEOUT    500 | ||||
|  | ||||
| #define ACTOR_DATA_KEY "MCCP-Default-actor-data" | ||||
| #define SCREEN_TILE_PREVIEW_DATA_KEY "MCCP-Default-screen-tile-preview-data" | ||||
|  | ||||
| #define META_TYPE_DEFAULT_PLUGIN            (meta_default_plugin_get_type ()) | ||||
| #define META_DEFAULT_PLUGIN(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEFAULT_PLUGIN, MetaDefaultPlugin)) | ||||
| @@ -68,6 +68,7 @@ struct _MetaDefaultPluginClass | ||||
| }; | ||||
|  | ||||
| static GQuark actor_data_quark = 0; | ||||
| static GQuark screen_tile_preview_data_quark = 0; | ||||
|  | ||||
| static void start      (MetaPlugin      *plugin); | ||||
| static void minimize   (MetaPlugin      *plugin, | ||||
| @@ -98,6 +99,14 @@ static void kill_window_effects   (MetaPlugin      *plugin, | ||||
|                                    MetaWindowActor *actor); | ||||
| static void kill_switch_workspace (MetaPlugin      *plugin); | ||||
|  | ||||
| static void show_tile_preview (MetaPlugin      *plugin, | ||||
|                                MetaWindow      *window, | ||||
|                                MetaRectangle   *tile_rect, | ||||
|                                int              tile_monitor_number); | ||||
| static void hide_tile_preview (MetaPlugin      *plugin); | ||||
|  | ||||
| static void confirm_display_change (MetaPlugin *plugin); | ||||
|  | ||||
| static const MetaPluginInfo * plugin_info (MetaPlugin *plugin); | ||||
|  | ||||
| META_PLUGIN_DECLARE(MetaDefaultPlugin, meta_default_plugin); | ||||
| @@ -113,6 +122,8 @@ struct _MetaDefaultPluginPrivate | ||||
|   ClutterActor          *desktop1; | ||||
|   ClutterActor          *desktop2; | ||||
|  | ||||
|   ClutterActor          *background_group; | ||||
|  | ||||
|   MetaPluginInfo         info; | ||||
| }; | ||||
|  | ||||
| @@ -140,6 +151,15 @@ typedef struct | ||||
| } EffectCompleteData; | ||||
|  | ||||
|  | ||||
| typedef struct _ScreenTilePreview | ||||
| { | ||||
|   ClutterActor   *actor; | ||||
|  | ||||
|   GdkRGBA        *preview_color; | ||||
|  | ||||
|   MetaRectangle   tile_rect; | ||||
| } ScreenTilePreview; | ||||
|  | ||||
| static void | ||||
| meta_default_plugin_dispose (GObject *object) | ||||
| { | ||||
| @@ -200,9 +220,12 @@ meta_default_plugin_class_init (MetaDefaultPluginClass *klass) | ||||
|   plugin_class->unmaximize       = unmaximize; | ||||
|   plugin_class->destroy          = destroy; | ||||
|   plugin_class->switch_workspace = switch_workspace; | ||||
|   plugin_class->show_tile_preview = show_tile_preview; | ||||
|   plugin_class->hide_tile_preview = hide_tile_preview; | ||||
|   plugin_class->plugin_info      = plugin_info; | ||||
|   plugin_class->kill_window_effects   = kill_window_effects; | ||||
|   plugin_class->kill_switch_workspace = kill_switch_workspace; | ||||
|   plugin_class->confirm_display_change = confirm_display_change; | ||||
|  | ||||
|   g_type_class_add_private (gobject_class, sizeof (MetaDefaultPluginPrivate)); | ||||
| } | ||||
| @@ -285,27 +308,62 @@ on_switch_workspace_effect_complete (ClutterTimeline *timeline, gpointer data) | ||||
|   meta_plugin_switch_workspace_completed (plugin); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| show_stage (MetaPlugin *plugin) | ||||
| static void | ||||
| on_monitors_changed (MetaScreen *screen, | ||||
|                      MetaPlugin *plugin) | ||||
| { | ||||
|   MetaScreen *screen; | ||||
|   ClutterActor *stage; | ||||
|   MetaDefaultPlugin *self = META_DEFAULT_PLUGIN (plugin); | ||||
|   int i, n; | ||||
|   GRand *rand = g_rand_new_with_seed (12345); | ||||
|  | ||||
|   screen = meta_plugin_get_screen (plugin); | ||||
|   stage = meta_get_stage_for_screen (screen); | ||||
|   clutter_actor_destroy_all_children (self->priv->background_group); | ||||
|  | ||||
|   clutter_actor_show (stage); | ||||
|   n = meta_screen_get_n_monitors (screen); | ||||
|   for (i = 0; i < n; i++) | ||||
|     { | ||||
|       MetaRectangle rect; | ||||
|       ClutterActor *background; | ||||
|       ClutterColor color; | ||||
|  | ||||
|   return FALSE; | ||||
|       meta_screen_get_monitor_geometry (screen, i, &rect); | ||||
|  | ||||
|       background = meta_background_actor_new (); | ||||
|  | ||||
|       clutter_actor_set_position (background, rect.x, rect.y); | ||||
|       clutter_actor_set_size (background, rect.width, rect.height); | ||||
|  | ||||
|       /* Don't use rand() here, mesa calls srand() internally when | ||||
|          parsing the driconf XML, but it's nice if the colors are | ||||
|          reproducible. | ||||
|       */ | ||||
|       clutter_color_init (&color, | ||||
|                           g_rand_int_range (rand, 0, 255), | ||||
|                           g_rand_int_range (rand, 0, 255), | ||||
|                           g_rand_int_range (rand, 0, 255), | ||||
|                           255); | ||||
|       clutter_actor_set_background_color (background, &color); | ||||
|  | ||||
|       clutter_actor_add_child (self->priv->background_group, background); | ||||
|     } | ||||
|  | ||||
|   g_rand_free (rand); | ||||
| } | ||||
|  | ||||
| static void | ||||
| start (MetaPlugin *plugin) | ||||
| { | ||||
|   meta_later_add (META_LATER_BEFORE_REDRAW, | ||||
|                   (GSourceFunc) show_stage, | ||||
|                   plugin, | ||||
|                   NULL); | ||||
|   MetaDefaultPlugin *self = META_DEFAULT_PLUGIN (plugin); | ||||
|   MetaScreen *screen = meta_plugin_get_screen (plugin); | ||||
|  | ||||
|   self->priv->background_group = meta_background_group_new (); | ||||
|   clutter_actor_insert_child_below (meta_get_window_group_for_screen (screen), | ||||
|                                     self->priv->background_group, NULL); | ||||
|  | ||||
|   g_signal_connect (screen, "monitors-changed", | ||||
|                     G_CALLBACK (on_monitors_changed), plugin); | ||||
|   on_monitors_changed (screen, plugin); | ||||
|  | ||||
|   clutter_actor_show (meta_get_stage_for_screen (screen)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -354,9 +412,11 @@ switch_workspace (MetaPlugin *plugin, | ||||
|       MetaWindowActor *window_actor = l->data; | ||||
|       ActorPrivate    *apriv	    = get_actor_private (window_actor); | ||||
|       ClutterActor    *actor	    = CLUTTER_ACTOR (window_actor); | ||||
|       MetaWorkspace   *workspace; | ||||
|       gint             win_workspace; | ||||
|  | ||||
|       win_workspace = meta_window_actor_get_workspace (window_actor); | ||||
|       workspace = meta_window_get_workspace (meta_window_actor_get_meta_window (window_actor)); | ||||
|       win_workspace = meta_workspace_index (workspace); | ||||
|  | ||||
|       if (win_workspace == to || win_workspace == from) | ||||
|         { | ||||
| @@ -428,8 +488,6 @@ on_minimize_effect_complete (ClutterTimeline *timeline, EffectCompleteData *data | ||||
|   /* FIXME - we shouldn't assume the original scale, it should be saved | ||||
|    * at the start of the effect */ | ||||
|   clutter_actor_set_scale (data->actor, 1.0, 1.0); | ||||
|   clutter_actor_move_anchor_point_from_gravity (data->actor, | ||||
|                                                 CLUTTER_GRAVITY_NORTH_WEST); | ||||
|  | ||||
|   /* Now notify the manager that we are done with this effect */ | ||||
|   meta_plugin_minimize_completed (plugin, window_actor); | ||||
| @@ -466,9 +524,6 @@ minimize (MetaPlugin *plugin, MetaWindowActor *window_actor) | ||||
|  | ||||
|       apriv->is_minimized = TRUE; | ||||
|  | ||||
|       clutter_actor_move_anchor_point_from_gravity (actor, | ||||
|                                                     CLUTTER_GRAVITY_CENTER); | ||||
|  | ||||
|       animation = clutter_actor_animate (actor, | ||||
|                                          CLUTTER_EASE_IN_SINE, | ||||
|                                          MINIMIZE_TIMEOUT, | ||||
| @@ -507,8 +562,6 @@ on_maximize_effect_complete (ClutterTimeline *timeline, EffectCompleteData *data | ||||
|  | ||||
|   /* FIXME - don't assume the original scale was 1.0 */ | ||||
|   clutter_actor_set_scale (data->actor, 1.0, 1.0); | ||||
|   clutter_actor_move_anchor_point_from_gravity (data->actor, | ||||
|                                                 CLUTTER_GRAVITY_NORTH_WEST); | ||||
|  | ||||
|   /* Now notify the manager that we are done with this effect */ | ||||
|   meta_plugin_maximize_completed (plugin, window_actor); | ||||
| @@ -533,10 +586,8 @@ maximize (MetaPlugin *plugin, | ||||
|   ClutterActor *actor = CLUTTER_ACTOR (window_actor); | ||||
|   MetaWindow *meta_window = meta_window_actor_get_meta_window (window_actor); | ||||
|  | ||||
|   gdouble  scale_x    = 1.0; | ||||
|   gdouble  scale_y    = 1.0; | ||||
|   gfloat   anchor_x   = 0; | ||||
|   gfloat   anchor_y   = 0; | ||||
|   gdouble  scale_x = 1.0; | ||||
|   gdouble  scale_y = 1.0; | ||||
|  | ||||
|   type = meta_window_get_window_type (meta_window); | ||||
|  | ||||
| @@ -560,13 +611,6 @@ maximize (MetaPlugin *plugin, | ||||
|       scale_x = (gdouble)end_width / (gdouble) width; | ||||
|       scale_y = (gdouble)end_height / (gdouble) height; | ||||
|  | ||||
|       anchor_x = (gdouble)(x - end_x)*(gdouble)width / | ||||
|         ((gdouble)(end_width - width)); | ||||
|       anchor_y = (gdouble)(y - end_y)*(gdouble)height / | ||||
|         ((gdouble)(end_height - height)); | ||||
|  | ||||
|       clutter_actor_move_anchor_point (actor, anchor_x, anchor_y); | ||||
|  | ||||
|       animation = clutter_actor_animate (actor, | ||||
|                                          CLUTTER_EASE_IN_SINE, | ||||
|                                          MAXIMIZE_TIMEOUT, | ||||
| @@ -621,9 +665,6 @@ on_map_effect_complete (ClutterTimeline *timeline, EffectCompleteData *data) | ||||
|  | ||||
|   apriv->tml_map = NULL; | ||||
|  | ||||
|   clutter_actor_move_anchor_point_from_gravity (data->actor, | ||||
|                                                 CLUTTER_GRAVITY_NORTH_WEST); | ||||
|  | ||||
|   /* Now notify the manager that we are done with this effect */ | ||||
|   meta_plugin_map_completed (plugin, window_actor); | ||||
|  | ||||
| @@ -649,15 +690,15 @@ map (MetaPlugin *plugin, MetaWindowActor *window_actor) | ||||
|       EffectCompleteData *data = g_new0 (EffectCompleteData, 1); | ||||
|       ActorPrivate *apriv = get_actor_private (window_actor); | ||||
|  | ||||
|       clutter_actor_move_anchor_point_from_gravity (actor, | ||||
|                                                     CLUTTER_GRAVITY_CENTER); | ||||
|  | ||||
|       clutter_actor_set_scale (actor, 0.0, 0.0); | ||||
|       clutter_actor_set_pivot_point (actor, 0.5, 0.5); | ||||
|       clutter_actor_set_opacity (actor, 0); | ||||
|       clutter_actor_set_scale (actor, 0.5, 0.5); | ||||
|       clutter_actor_show (actor); | ||||
|  | ||||
|       animation = clutter_actor_animate (actor, | ||||
|                                          CLUTTER_EASE_IN_SINE, | ||||
|                                          CLUTTER_EASE_OUT_QUAD, | ||||
|                                          MAP_TIMEOUT, | ||||
|                                          "opacity", 255, | ||||
|                                          "scale-x", 1.0, | ||||
|                                          "scale-y", 1.0, | ||||
|                                          NULL); | ||||
| @@ -709,14 +750,12 @@ destroy (MetaPlugin *plugin, MetaWindowActor *window_actor) | ||||
|       EffectCompleteData *data = g_new0 (EffectCompleteData, 1); | ||||
|       ActorPrivate *apriv = get_actor_private (window_actor); | ||||
|  | ||||
|       clutter_actor_move_anchor_point_from_gravity (actor, | ||||
|                                                     CLUTTER_GRAVITY_CENTER); | ||||
|  | ||||
|       animation = clutter_actor_animate (actor, | ||||
|                                          CLUTTER_EASE_IN_SINE, | ||||
|                                          CLUTTER_EASE_OUT_QUAD, | ||||
|                                          DESTROY_TIMEOUT, | ||||
|                                          "scale-x", 0.0, | ||||
|                                          "scale-y", 1.0, | ||||
|                                          "opacity", 0, | ||||
|                                          "scale-x", 0.8, | ||||
|                                          "scale-y", 0.8, | ||||
|                                          NULL); | ||||
|       apriv->tml_destroy = clutter_animation_get_timeline (animation); | ||||
|       data->plugin = plugin; | ||||
| @@ -729,6 +768,82 @@ destroy (MetaPlugin *plugin, MetaWindowActor *window_actor) | ||||
|     meta_plugin_destroy_completed (plugin, window_actor); | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Tile preview private data accessor | ||||
|  */ | ||||
| static void | ||||
| free_screen_tile_preview (gpointer data) | ||||
| { | ||||
|   ScreenTilePreview *preview = data; | ||||
|  | ||||
|   if (G_LIKELY (preview != NULL)) { | ||||
|     clutter_actor_destroy (preview->actor); | ||||
|     g_slice_free (ScreenTilePreview, preview); | ||||
|   } | ||||
| } | ||||
|  | ||||
| static ScreenTilePreview * | ||||
| get_screen_tile_preview (MetaScreen *screen) | ||||
| { | ||||
|   ScreenTilePreview *preview = g_object_get_qdata (G_OBJECT (screen), screen_tile_preview_data_quark); | ||||
|  | ||||
|   if (G_UNLIKELY (screen_tile_preview_data_quark == 0)) | ||||
|     screen_tile_preview_data_quark = g_quark_from_static_string (SCREEN_TILE_PREVIEW_DATA_KEY); | ||||
|  | ||||
|   if (G_UNLIKELY (!preview)) | ||||
|     { | ||||
|       preview = g_slice_new0 (ScreenTilePreview); | ||||
|  | ||||
|       preview->actor = clutter_actor_new (); | ||||
|       clutter_actor_set_background_color (preview->actor, CLUTTER_COLOR_Blue); | ||||
|       clutter_actor_set_opacity (preview->actor, 100); | ||||
|  | ||||
|       clutter_actor_add_child (meta_get_window_group_for_screen (screen), preview->actor); | ||||
|       g_object_set_qdata_full (G_OBJECT (screen), | ||||
|                                screen_tile_preview_data_quark, preview, | ||||
|                                free_screen_tile_preview); | ||||
|     } | ||||
|  | ||||
|   return preview; | ||||
| } | ||||
|  | ||||
| static void | ||||
| show_tile_preview (MetaPlugin    *plugin, | ||||
|                    MetaWindow    *window, | ||||
|                    MetaRectangle *tile_rect, | ||||
|                    int            tile_monitor_number) | ||||
| { | ||||
|   MetaScreen *screen = meta_plugin_get_screen (plugin); | ||||
|   ScreenTilePreview *preview = get_screen_tile_preview (screen); | ||||
|   ClutterActor *window_actor; | ||||
|  | ||||
|   if (CLUTTER_ACTOR_IS_VISIBLE (preview->actor) | ||||
|       && preview->tile_rect.x == tile_rect->x | ||||
|       && preview->tile_rect.y == tile_rect->y | ||||
|       && preview->tile_rect.width == tile_rect->width | ||||
|       && preview->tile_rect.height == tile_rect->height) | ||||
|     return; /* nothing to do */ | ||||
|  | ||||
|   clutter_actor_set_position (preview->actor, tile_rect->x, tile_rect->y); | ||||
|   clutter_actor_set_size (preview->actor, tile_rect->width, tile_rect->height); | ||||
|  | ||||
|   clutter_actor_show (preview->actor); | ||||
|  | ||||
|   window_actor = CLUTTER_ACTOR (meta_window_get_compositor_private (window)); | ||||
|   clutter_actor_lower (preview->actor, window_actor); | ||||
|  | ||||
|   preview->tile_rect = *tile_rect; | ||||
| } | ||||
|  | ||||
| static void | ||||
| hide_tile_preview (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaScreen *screen = meta_plugin_get_screen (plugin); | ||||
|   ScreenTilePreview *preview = get_screen_tile_preview (screen); | ||||
|  | ||||
|   clutter_actor_hide (preview->actor); | ||||
| } | ||||
|  | ||||
| static void | ||||
| kill_switch_workspace (MetaPlugin     *plugin) | ||||
| { | ||||
| @@ -782,3 +897,33 @@ plugin_info (MetaPlugin *plugin) | ||||
|  | ||||
|   return &priv->info; | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_dialog_closed (GPid     pid, | ||||
|                   gint     status, | ||||
|                   gpointer user_data) | ||||
| { | ||||
|   MetaPlugin *plugin = user_data; | ||||
|   gboolean ok; | ||||
|  | ||||
|   ok = g_spawn_check_exit_status (status, NULL); | ||||
|   meta_plugin_complete_display_change (plugin, ok); | ||||
| } | ||||
|  | ||||
| static void | ||||
| confirm_display_change (MetaPlugin *plugin) | ||||
| { | ||||
|   GPid pid; | ||||
|  | ||||
|   pid = meta_show_dialog ("--question", | ||||
|                           "Does the display look OK?", | ||||
|                           "20", | ||||
|                           NULL, | ||||
|                           "_Keep This Configuration", | ||||
|                           "_Restore Previous Configuration", | ||||
|                           "preferences-desktop-display", | ||||
|                           0, | ||||
|                           NULL, NULL); | ||||
|  | ||||
|   g_child_watch_add (pid, on_dialog_closed, plugin); | ||||
| } | ||||
|   | ||||
| @@ -15,9 +15,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include "region-utils.h" | ||||
|   | ||||
| @@ -15,9 +15,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_REGION_UTILS_H__ | ||||
|   | ||||
| @@ -15,9 +15,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| /* The standard cycle-windows keybinding should be the key above the | ||||
|   | ||||
| @@ -59,6 +59,8 @@ struct _MetaBarrierPrivate | ||||
|   PointerBarrier xbarrier; | ||||
| }; | ||||
|  | ||||
| static void meta_barrier_event_unref (MetaBarrierEvent *event); | ||||
|  | ||||
| static void | ||||
| meta_barrier_get_property (GObject    *object, | ||||
|                            guint       prop_id, | ||||
| @@ -359,14 +361,30 @@ meta_barrier_fire_event (MetaBarrier    *barrier, | ||||
|     default: | ||||
|       g_assert_not_reached (); | ||||
|     } | ||||
|  | ||||
|   meta_barrier_event_unref (event); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_display_process_barrier_event (MetaDisplay    *display, | ||||
|                                     XIBarrierEvent *xev) | ||||
| meta_display_process_barrier_event (MetaDisplay *display, | ||||
|                                     XIEvent     *event) | ||||
| { | ||||
|   MetaBarrier *barrier; | ||||
|   XIBarrierEvent *xev; | ||||
|  | ||||
|   if (event == NULL) | ||||
|     return FALSE; | ||||
|  | ||||
|   switch (event->evtype) | ||||
|     { | ||||
|     case XI_BarrierHit: | ||||
|     case XI_BarrierLeave: | ||||
|       break; | ||||
|     default: | ||||
|       return FALSE; | ||||
|     } | ||||
|  | ||||
|   xev = (XIBarrierEvent *) event; | ||||
|   barrier = g_hash_table_lookup (display->xids, &xev->barrier); | ||||
|   if (barrier != NULL) | ||||
|     { | ||||
|   | ||||
| @@ -17,9 +17,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
| @@ -53,6 +51,7 @@ | ||||
| #include "bell.h" | ||||
| #include "screen-private.h" | ||||
| #include "window-private.h" | ||||
| #include "util-private.h" | ||||
| #include <meta/prefs.h> | ||||
| #include <meta/compositor.h> | ||||
| #ifdef HAVE_LIBCANBERRA | ||||
|   | ||||
| @@ -14,9 +14,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #include <X11/Xlib.h> | ||||
|   | ||||
| @@ -16,9 +16,7 @@ | ||||
|  * 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. | ||||
|  * along with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| #ifndef META_BOXES_PRIVATE_H | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user