Compare commits
	
		
			813 Commits
		
	
	
		
			3.25.90
			...
			wip/carlos
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | b3b3bf1bae | ||
|   | 9cfd185316 | ||
|   | 176117c5f7 | ||
|   | 8083065579 | ||
|   | 34f5be726d | ||
|   | b53707f8c4 | ||
|   | d9294e4eb0 | ||
|   | 94f8acc8fe | ||
|   | 4841c1b13e | ||
|   | 1e00cd290d | ||
|   | 3daa2d2751 | ||
|   | 444af437a0 | ||
|   | eebcf98284 | ||
|   | 7d973ac538 | ||
|   | 0ada04089c | ||
|   | 85284acb00 | ||
|   | 388d065699 | ||
|   | e191c21e04 | ||
|   | 5376c31a33 | ||
|   | ca5b27baf5 | ||
|   | 64df627688 | ||
|   | a740f50cd7 | ||
|   | 5fd0f62a62 | ||
|   | 80d420ff43 | ||
|   | 407d62943c | ||
|   | 0ace58d05f | ||
|   | d791710197 | ||
|   | b30c907ef9 | ||
|   | 784a774d9c | ||
|   | 8d3e053059 | ||
|   | f4d07caa38 | ||
|   | 8a6d502e68 | ||
|   | b6c2eec487 | ||
|   | 093aa086af | ||
|   | ebafc256a0 | ||
|   | aaed7c9a4f | ||
|   | fa8930817e | ||
|   | e741adb82e | ||
|   | deb541ef5a | ||
|   | 29cc526e2e | ||
|   | 6a92c6f83f | ||
|   | b8340f1355 | ||
|   | c7db234c11 | ||
|   | db22c13c4f | ||
|   | ad864083f9 | ||
|   | 5f99eeb926 | ||
|   | e1513b6b00 | ||
|   | 0cc3cd62ba | ||
|   | 0f40541bb2 | ||
|   | db604dda89 | ||
|   | 21ce6f96f1 | ||
|   | 323a806d35 | ||
|   | 84ac28cbee | ||
|   | 2860adcf65 | ||
|   | 2dbacfa8d6 | ||
|   | 85e5b160ee | ||
|   | 9510fbcbac | ||
|   | 7c06e21e5a | ||
|   | 1bfa20929b | ||
|   | bafc43ca26 | ||
|   | d37528f693 | ||
|   | 37eeda0320 | ||
|   | acf70a3561 | ||
|   | 24aef44baf | ||
|   | f7af32a3ea | ||
|   | 252dd52439 | ||
|   | c216397974 | ||
|   | 841dc09d21 | ||
|   | 192b7887c3 | ||
|   | 1fd8fe65c5 | ||
|   | a87c447b72 | ||
|   | c624fcbb8b | ||
|   | b393f3d540 | ||
|   | 3e3bc3e67f | ||
|   | 11d5e00003 | ||
|   | f0c9c25cf8 | ||
|   | 7fdaf7721c | ||
|   | c403785d36 | ||
|   | 4fe594bf9c | ||
|   | ec451b4674 | ||
|   | 43eb724b94 | ||
|   | 3d75b48d50 | ||
|   | 4d465eac08 | ||
|   | db5abbb225 | ||
|   | eb0865fe11 | ||
|   | e283cd7b91 | ||
|   | d99442d6e6 | ||
|   | 148da24f95 | ||
|   | 649c26e05a | ||
|   | 48eaa36d41 | ||
|   | 6e953e2725 | ||
|   | 3e357bd36f | ||
|   | a3da4b8d5b | ||
|   | 0f43f86341 | ||
|   | d30a78767d | ||
|   | 5f37369adb | ||
|   | c6691afa38 | ||
|   | ff5d561ca6 | ||
|   | 5ac7109aaa | ||
|   | 7749f4d983 | ||
|   | 22aea3dc67 | ||
|   | 3d5784342d | ||
|   | fa9e330f2c | ||
|   | 951219650f | ||
|   | 49b23c7490 | ||
|   | 644a618fb1 | ||
|   | 1e3ac3cf2c | ||
|   | 658c373580 | ||
|   | 6d12d2eac2 | ||
|   | 356cad094b | ||
|   | 161d2540e6 | ||
|   | 94f4009882 | ||
|   | ec8138773a | ||
|   | 041be7c565 | ||
|   | 0407a8b33d | ||
|   | 912a6f5e3f | ||
|   | 89162a90aa | ||
|   | 90a68f3118 | ||
|   | 951fb03a7c | ||
|   | 4837ea3434 | ||
|   | 3fbeeb9072 | ||
|   | 0ca3526627 | ||
|   | 5b8c8a4114 | ||
|   | f635876eac | ||
|   | 1caaf0cd1e | ||
|   | e2464660bc | ||
|   | 81c1c70c0a | ||
|   | e05cd6009a | ||
|   | 390314adfb | ||
|   | 2ac7afe8a9 | ||
|   | d5c5669f2a | ||
|   | e8171ccdc1 | ||
|   | 43f9cd537e | ||
|   | d4c4d6e64d | ||
|   | 89727aa747 | ||
|   | de5e7a7175 | ||
|   | e6b885210c | ||
|   | 9f1ab1c3af | ||
|   | 9333a6da75 | ||
|   | 8adab02757 | ||
|   | 14d8aec4b8 | ||
|   | 8e7e1eeef5 | ||
|   | 0a8ae8417c | ||
|   | 1d5e37050d | ||
|   | b7c3dada81 | ||
|   | d79ffd3976 | ||
|   | 6458139c04 | ||
|   | 82307dd694 | ||
|   | e1c67a1824 | ||
|   | 68f261e8e2 | ||
|   | 1530f27513 | ||
|   | 05899596d1 | ||
|   | 98d912ba5f | ||
|   | 9e5ea8def4 | ||
|   | 722c975aca | ||
|   | 937a9853cd | ||
|   | cd8f4259be | ||
|   | c64d5ad8af | ||
|   | dacc041d0c | ||
|   | 18779109de | ||
|   | 522f9b4c38 | ||
|   | 3d2b9a3a69 | ||
|   | 15fa7816bd | ||
|   | 6621a9b5a0 | ||
|   | 04e411c2c0 | ||
|   | 859bea629b | ||
|   | cbc783108e | ||
|   | 2383801f7b | ||
|   | 8626c69c2f | ||
|   | 768ec15ea0 | ||
|   | 1200182d70 | ||
|   | d9c18fd5bb | ||
|   | 54709c16b5 | ||
|   | 8da95b17f5 | ||
|   | d535c1eb6d | ||
|   | 435b3c4bdb | ||
|   | 22723ca371 | ||
|   | edd3634bb5 | ||
|   | 1bf2eb95b5 | ||
|   | 516fb524cb | ||
|   | 596b30096d | ||
|   | 7412794c66 | ||
|   | ad22b3f098 | ||
|   | 206634e0ed | ||
|   | ea05d2af49 | ||
|   | 6c7c566c6c | ||
|   | b596cf97ee | ||
|   | 9dcf9782b6 | ||
|   | 0f519ffb05 | ||
|   | 42c78bd41f | ||
|   | b702c0fa5c | ||
|   | c80fd487f1 | ||
|   | 817c8e568c | ||
|   | b7e9388906 | ||
|   | b8336633a7 | ||
|   | 3c538d4a92 | ||
|   | 2fc978ca9d | ||
|   | 10dfc67dad | ||
|   | 9ebcb719a1 | ||
|   | 2a20df0c50 | ||
|   | d3441f7577 | ||
|   | 65c02e26db | ||
|   | 50ff9d4c71 | ||
|   | a3269dde95 | ||
|   | f2dea5d139 | ||
|   | 3649795108 | ||
|   | 36b9551f92 | ||
|   | 6abe4703c7 | ||
|   | 69ca584168 | ||
|   | 8ee14a7cb7 | ||
|   | 909dbafd67 | ||
|   | d5203f170e | ||
|   | 2a45b7de7c | ||
|   | 62c67be4c8 | ||
|   | 0332b7394e | ||
|   | 15f41c9f68 | ||
|   | 2a38601b42 | ||
|   | d7bdc1591f | ||
|   | bd36764b4d | ||
|   | 473bf38753 | ||
|   | f7747e4d4f | ||
|   | e8dc2acfca | ||
|   | cf734999fb | ||
|   | c9c3283540 | ||
|   | d2a8cdfd7c | ||
|   | 3e85ac8131 | ||
|   | 5f83d9a5c8 | ||
|   | ac20bf2000 | ||
|   | 3561082aba | ||
|   | e34c330f66 | ||
|   | 7655e09d00 | ||
|   | be069fb8ae | ||
|   | a30166a547 | ||
|   | 0f9c6aef99 | ||
|   | 332d55f7f6 | ||
|   | 98d7024288 | ||
|   | 82564772dc | ||
|   | 33c2a38ff7 | ||
|   | 52fdd24467 | ||
|   | 2319cd9c40 | ||
|   | 3b4319a87c | ||
|   | 20176d0395 | ||
|   | 762a3f89a9 | ||
|   | 822c2666f5 | ||
|   | b412e6c493 | ||
|   | ae26cd0774 | ||
|   | 3104d697c0 | ||
|   | 0b3a1c9c31 | ||
|   | 423c5f8e77 | ||
|   | 3bbff94878 | ||
|   | 4ef886f51e | ||
|   | 22485ba36f | ||
|   | 8df2a1452c | ||
|   | b12c92e206 | ||
|   | 70036429bd | ||
|   | 44502be560 | ||
|   | 8cf42cd06c | ||
|   | b5328c977e | ||
|   | 4339b23dd0 | ||
|   | a95cbd0aca | ||
|   | 6df2b7af55 | ||
|   | c01b099dbd | ||
|   | 2d80fd02e7 | ||
|   | bb65854065 | ||
|   | bc05e49eba | ||
|   | 773b8384fa | ||
|   | 7fdac6d310 | ||
|   | f6cd87734d | ||
|   | 01a0fa9437 | ||
|   | 657417a578 | ||
|   | 4af00ae296 | ||
|   | 84e575be77 | ||
|   | 7945ee5beb | ||
|   | b6f5bab212 | ||
|   | 5ad34e0efb | ||
|   | a1c34aad09 | ||
|   | 98dfd5b887 | ||
|   | 17a745bf81 | ||
|   | 85bbd82ae8 | ||
|   | deda7a5235 | ||
|   | 96141e28f9 | ||
|   | e6109cfc22 | ||
|   | 3684f6b0ac | ||
|   | 31b5059068 | ||
|   | ebff7fd7f4 | ||
|   | 6e415353e3 | ||
|   | 67917db45f | ||
|   | 8286557a05 | ||
|   | 63e2c0329f | ||
|   | 06c357d781 | ||
|   | 2f260edf19 | ||
|   | a5fd9a6e2f | ||
|   | 4e6114b14d | ||
|   | 65630d6310 | ||
|   | b8a81128e0 | ||
|   | 19e55b9a8c | ||
|   | 9ea9352c93 | ||
|   | 817a76a7f5 | ||
|   | cb40049ec1 | ||
|   | 481e87032c | ||
|   | bf5ac39d46 | ||
|   | 47856d9701 | ||
|   | 06429b12e2 | ||
|   | 419fb81d40 | ||
|   | f1bbe5c251 | ||
|   | 27fef44d48 | ||
|   | 00b8ca7aeb | ||
|   | 675d429ba0 | ||
|   | f4d754c934 | ||
|   | 8ae79182c1 | ||
|   | 712ec30cd9 | ||
|   | 7a41483ea0 | ||
|   | b4d642be52 | ||
|   | 0bf0e5780c | ||
|   | d7c5e57134 | ||
|   | 67bf936ef8 | ||
|   | 15b7b40ea8 | ||
|   | 81bff3eba6 | ||
|   | da3fd8f7fb | ||
|   | 6e125d9d04 | ||
|   | 80705018f9 | ||
|   | f39dacd451 | ||
|   | 33c070cdd5 | ||
|   | 8d2f794bd3 | ||
|   | 1458dc394a | ||
|   | c93877abb5 | ||
|   | ef0efc9589 | ||
|   | 09cdf39b68 | ||
|   | a6ccbbfe68 | ||
|   | e502adfa04 | ||
|   | 8dd377da38 | ||
|   | 03a12f9458 | ||
|   | 061f69f2a2 | ||
|   | 4d5e1f690d | ||
|   | f3203f0330 | ||
|   | d27e6921d6 | ||
|   | c459ad7932 | ||
|   | 5ee825c081 | ||
|   | 1ead513b66 | ||
|   | 9ed236bd67 | ||
|   | a1517cae1c | ||
|   | 542502be53 | ||
|   | 203a0b37ed | ||
|   | b6477a826d | ||
|   | 95adc45b71 | ||
|   | f20daf567d | ||
|   | 4345906663 | ||
|   | d714a94d97 | ||
|   | 514c7028f4 | ||
|   | 44624736c5 | ||
|   | 0162cdf8ef | ||
|   | 7e17dd0098 | ||
|   | 704b73b041 | ||
|   | bd5e36cf0e | ||
|   | dbf56e24cb | ||
|   | 0371897e22 | ||
|   | cc5fe05c4d | ||
|   | d8f13f6b4c | ||
|   | a2959510e5 | ||
|   | c8fbd4bee8 | ||
|   | d5631f793e | ||
|   | d4d160a186 | ||
|   | 4719c3f31e | ||
|   | 1f5a2d6029 | ||
|   | 19bf4cf4f8 | ||
|   | 6f59e4858e | ||
|   | aec85281ba | ||
|   | b22875aae9 | ||
|   | 962712ddc2 | ||
|   | de29627855 | ||
|   | 54dcff3aa2 | ||
|   | bcd5882081 | ||
|   | 69f56578a3 | ||
|   | c00e092456 | ||
|   | a8cee14417 | ||
|   | 8a89b0007c | ||
|   | 6934b83f44 | ||
|   | 37aab9280a | ||
|   | 49e8bc8a52 | ||
|   | abd6b7affd | ||
|   | 748223b896 | ||
|   | c75eac27a8 | ||
|   | ac502c921d | ||
|   | 134765c634 | ||
|   | 5149d6eb40 | ||
|   | 006cdac531 | ||
|   | 61bc1a7d6f | ||
|   | 86ab3878e7 | ||
|   | f2d0e5021a | ||
|   | 6d8286614f | ||
|   | 70fcf745b8 | ||
|   | 589e999049 | ||
|   | d8f2f583e6 | ||
|   | db866eb052 | ||
|   | d092e913d6 | ||
|   | 6147be3dff | ||
|   | 57f55d486d | ||
|   | 6be56de140 | ||
|   | 206ca43c91 | ||
|   | f8f1bcfa9e | ||
|   | 91df801ffb | ||
|   | 97f142d1cc | ||
|   | 5ea3a4ecbb | ||
|   | fbd5a74a0b | ||
|   | 58bb61e161 | ||
|   | dbd053020a | ||
|   | c063d43be8 | ||
|   | 35b77a61c8 | ||
|   | 32547d2eff | ||
|   | dc37ee2782 | ||
|   | 371e5df568 | ||
|   | cc4e007148 | ||
|   | c0d9b08ef9 | ||
|   | d99cd279d2 | ||
|   | d670a1aa78 | ||
|   | 76b396846d | ||
|   | bd0105ba8d | ||
|   | 6dcce19932 | ||
|   | cc40a885ef | ||
|   | 513c278077 | ||
|   | ac8ee9a08c | ||
|   | 952c1fefa2 | ||
|   | 18b8f9bfed | ||
|   | f08417b618 | ||
|   | 62c9713361 | ||
|   | efd7a4af5e | ||
|   | 3a914a915e | ||
|   | aa6561a3b1 | ||
|   | 9eb9623288 | ||
|   | 8c988aa632 | ||
|   | 13cf19e0b6 | ||
|   | eac0e253e1 | ||
|   | 7346419295 | ||
|   | 3e77f6704b | ||
|   | 01e27a4366 | ||
|   | 4e3b26d2ed | ||
|   | 5f05112b9a | ||
|   | 6cf7d2d47f | ||
|   | 1139ace244 | ||
|   | bd9a300801 | ||
|   | 2d090f9232 | ||
|   | 1c8aebd811 | ||
|   | 31eafba93a | ||
|   | 5eacdf7af7 | ||
|   | ca638d1354 | ||
|   | f12e6ad4f1 | ||
|   | 0bbda3ad87 | ||
|   | dd43d04d42 | ||
|   | 383ac76d00 | ||
|   | e59ca14f6c | ||
|   | 7917b083cb | ||
|   | 2b3040d04f | ||
|   | 6cc48d8cbb | ||
|   | 798026498d | ||
|   | 49f029571c | ||
|   | 290b257288 | ||
|   | 2b60fb0144 | ||
|   | 7f5f5eb847 | ||
|   | 44269e6a1d | ||
|   | 70dfe8c97d | ||
|   | 072afa5fa3 | ||
|   | 519a0fd93d | ||
|   | 5f132f3975 | ||
|   | 1546989845 | ||
|   | 1923db97c1 | ||
|   | db32047a5d | ||
|   | b505eb261e | ||
|   | 1a1db9ef8d | ||
|   | b1587f0716 | ||
|   | 93e450f37c | ||
|   | fc713ecb70 | ||
|   | 500c13ab6f | ||
|   | 050267fe74 | ||
|   | ce25a0171c | ||
|   | b7518c8651 | ||
|   | 62dedfbef3 | ||
|   | 4508978ea5 | ||
|   | c533a06e93 | ||
|   | 5d3b4f0134 | ||
|   | 4cf340ae9b | ||
|   | 053ac03f01 | ||
|   | 28a9439209 | ||
|   | cf4b5efdd1 | ||
|   | 3067dab84c | ||
|   | 1790320ba3 | ||
|   | f45df4265d | ||
|   | bcbcd6a68c | ||
|   | b1a0bf8916 | ||
|   | 6c18bae83c | ||
|   | d0531966eb | ||
|   | 989a47ee8c | ||
|   | 03be6b687b | ||
|   | 32c22d375a | ||
|   | bdf3f49a82 | ||
|   | 356b4b0dc5 | ||
|   | 3fc2ea8297 | ||
|   | 06d976e853 | ||
|   | 96ebd1c214 | ||
|   | fa28481736 | ||
|   | 76b064cffc | ||
|   | 333b5d12a0 | ||
|   | aa73504d95 | ||
|   | 32305b453d | ||
|   | 7d5e08c843 | ||
|   | dc0fc65229 | ||
|   | 428af6d213 | ||
|   | 2ffe597617 | ||
|   | 0461eed0cb | ||
|   | ca1bacc212 | ||
|   | 2229365ca8 | ||
|   | 8c367364b6 | ||
|   | 58909da425 | ||
|   | ff32bf467c | ||
|   | c5572d3095 | ||
|   | e706bcdf73 | ||
|   | d9ebcbd55c | ||
|   | 240b13aa74 | ||
|   | 97635d6f84 | ||
|   | 6c21a22e4d | ||
|   | 0add6f62b6 | ||
|   | 049418cd03 | ||
|   | 3ee1999c70 | ||
|   | e4b8920688 | ||
|   | eb236649fc | ||
|   | 0a36a4545f | ||
|   | 180985018b | ||
|   | c86c5d6905 | ||
|   | c2fad2dc7c | ||
|   | 1196b7bde4 | ||
|   | 19eddfd756 | ||
|   | ed280ef4ac | ||
|   | b6200ac3ff | ||
|   | 626621a53a | ||
|   | fb3a64491e | ||
|   | 294f9419f7 | ||
|   | a37956c95f | ||
|   | 89f5ca3301 | ||
|   | 07745b3082 | ||
|   | 054c25f693 | ||
|   | 01de04d8c9 | ||
|   | 08e4cb54a8 | ||
|   | c71faffb71 | ||
|   | 91e3a0b3a9 | ||
|   | 5fa8f78434 | ||
|   | ab5ac21104 | ||
|   | 0ebea2be9c | ||
|   | 6f54bab0a8 | ||
|   | 5d7deab6da | ||
|   | 35fcf4a4ae | ||
|   | 74565380aa | ||
|   | fa37496ffb | ||
|   | cc772ddd61 | ||
|   | 4d2647cdbc | ||
|   | 3caefd8fda | ||
|   | 12381d57d1 | ||
|   | 4ad8c4b86b | ||
|   | dbd2827ca1 | ||
|   | 1a78557e0b | ||
|   | 2e99963087 | ||
|   | 4d763e1828 | ||
|   | a17b343c21 | ||
|   | 556136dacc | ||
|   | a8c80ccece | ||
|   | f044511037 | ||
|   | b31e545c9d | ||
|   | fad5657eda | ||
|   | eaf9ccde39 | ||
|   | f9c625924e | ||
|   | 64cb735abf | ||
|   | c85f322b20 | ||
|   | 76096a725b | ||
|   | 6eb7d13894 | ||
|   | 7928b25ebf | ||
|   | 78e6258b44 | ||
|   | c9259c2b15 | ||
|   | 492d2eb573 | ||
|   | 376dcd3b92 | ||
|   | 60781bc6c2 | ||
|   | 2d8827cb0c | ||
|   | 802f7dcd30 | ||
|   | e62cfd9043 | ||
|   | cbcf6a4f23 | ||
|   | b0e42d3f6e | ||
|   | 18eb66de06 | ||
|   | b32cccddf9 | ||
|   | 362e26b3e2 | ||
|   | 5c53284bde | ||
|   | e45d7f70e8 | ||
|   | 70edc7dda4 | ||
|   | 3244ed37a9 | ||
|   | 406359bba1 | ||
|   | 8b23dd915f | ||
|   | 7e1f65405f | ||
|   | c1683073f1 | ||
|   | 18ec86bd90 | ||
|   | 315a6f43d7 | ||
|   | 7603bb5fd5 | ||
|   | d53b79f8c3 | ||
|   | f534452c6a | ||
|   | 0f6b83e7df | ||
|   | 16a6aef5a7 | ||
|   | 518fb9fb5e | ||
|   | 547ace3cf8 | ||
|   | a4ba38ee78 | ||
|   | e32d52b9b8 | ||
|   | de40ced8b4 | ||
|   | cfee58798e | ||
|   | 7ea01693a7 | ||
|   | e0d839aea2 | ||
|   | d3efd73429 | ||
|   | 2db5505216 | ||
|   | f44b6c772a | ||
|   | f64fab1d2d | ||
|   | 39bc2e0333 | ||
|   | 5bb6f0ad8b | ||
|   | 903537a2a0 | ||
|   | 1db937826c | ||
|   | c1fe1c5d6b | ||
|   | a62e9f99a2 | ||
|   | 9817a6aa47 | ||
|   | 8185373bd4 | ||
|   | 18c41aefc9 | ||
|   | 32917f1922 | ||
|   | 7a843e1fd1 | ||
|   | 0e154ccf76 | ||
|   | 120db06c60 | ||
|   | e76ab05d45 | ||
|   | 43eeb009ce | ||
|   | 9000eef49d | ||
|   | e198c8452b | ||
|   | aea66ddff6 | ||
|   | a5f4ffa58c | ||
|   | a1c39e142d | ||
|   | e76a0f564c | ||
|   | 8307d9c4de | ||
|   | 1dbf6b096b | ||
|   | 6fe71ecc01 | ||
|   | 57e58eaf2a | ||
|   | 00a5db71cf | ||
|   | c7fa57cd28 | ||
|   | 8f2c86d79e | ||
|   | 56f1da5c66 | ||
|   | 30a205c0e3 | ||
|   | 98d77d37d0 | ||
|   | 0853fb940a | ||
|   | 6dd819a61e | ||
|   | 39aae19ed7 | ||
|   | 20749e5dbd | ||
|   | 99e1cd549d | ||
|   | efdbeb7c1b | ||
|   | ea4dbd14bc | ||
|   | 838df4b00b | ||
|   | b6110ba8dc | ||
|   | fd763ad857 | ||
|   | e3d59832c5 | ||
|   | 2c85bb4178 | ||
|   | 8493777961 | ||
|   | 4e7405aca9 | ||
|   | 34207ba509 | ||
|   | 6dc499f305 | ||
|   | 92e2242cf0 | ||
|   | ea214fbe0f | ||
|   | 487b8a0430 | ||
|   | 8b060342bd | ||
|   | 27d6c063ad | ||
|   | 0e62b71959 | ||
|   | 2c3f79829e | ||
|   | 5d2b0bc0cc | ||
|   | 7e3a780dcd | ||
|   | 1035200f26 | ||
|   | 8532b10290 | ||
|   | f0c6c4eb1f | ||
|   | ba194bd19e | ||
|   | a35274ddb7 | ||
|   | ab541e3e0f | ||
|   | 67ce04993e | ||
|   | 22cdc8f414 | ||
|   | 8b022a5595 | ||
|   | 7a1393ba26 | ||
|   | 5ed954e6de | ||
|   | 96572fbe6a | ||
|   | 4ab47e72e5 | ||
|   | 70e0fd0b45 | ||
|   | 26cd031be8 | ||
|   | 743e8cc249 | ||
|   | 2bf7974076 | ||
|   | 9c16e4e2f3 | ||
|   | 07f6c85cc7 | ||
|   | d4968e10e5 | ||
|   | bd3817198e | ||
|   | 5b5737f65e | ||
|   | 5af8753171 | ||
|   | 8bef74f441 | ||
|   | f1a42b0f97 | ||
|   | 95682a9494 | ||
|   | ef41867303 | ||
|   | 8d4b03ce87 | ||
|   | 06263354a5 | ||
|   | aa30e11c8b | ||
|   | 65bca8e008 | ||
|   | 068791f6c1 | ||
|   | cbc4563b30 | ||
|   | f381d7c3bf | ||
|   | 0a8d8128b3 | ||
|   | 46135d4f0f | ||
|   | 7ba44e7945 | ||
|   | dd4ad4efc4 | ||
|   | 807658e972 | ||
|   | 8499a29d0a | ||
|   | 283eedef90 | ||
|   | ce515c5389 | ||
|   | 83440614bc | ||
|   | a93661f9e1 | ||
|   | 216f7631de | ||
|   | 361bf847af | ||
|   | 46f54eb3d9 | ||
|   | bc47c6cc4f | ||
|   | 8bfdfa1f46 | ||
|   | 999542c915 | ||
|   | cb38e9c4a2 | ||
|   | 42c56c2460 | ||
|   | e2d904c32b | ||
|   | fa9c09feee | ||
|   | 3f6a2d02fd | ||
|   | 5b37901b57 | ||
|   | 2df4ccd1cd | ||
|   | dcd15e6145 | ||
|   | 2a318eb3f2 | ||
|   | 522eec00cd | ||
|   | be11c32815 | ||
|   | 24c91d95de | ||
|   | 7562eb6006 | ||
|   | 0aa7405a2a | ||
|   | a119e58773 | ||
|   | 8a32b42172 | ||
|   | 94a15404da | ||
|   | fefede5b51 | ||
|   | 5be00f23be | ||
|   | bdbd2e96de | ||
|   | 7785a57f8a | ||
|   | cf01e26b2f | ||
|   | 6e46ad9f3a | ||
|   | 921b18f713 | ||
|   | 53175e8788 | ||
|   | 920541fa26 | ||
|   | 9d8922764c | ||
|   | 97f2c7c161 | ||
|   | 38235bc145 | ||
|   | 3ce3a5a952 | ||
|   | 3005a400ca | ||
|   | 34e7134db2 | ||
|   | 12710dc644 | ||
|   | a10ad577a7 | ||
|   | d3c559a917 | ||
|   | 1e7628a3ef | ||
|   | d5a85997f2 | ||
|   | 5a37e0e1ef | ||
|   | 00f6a74397 | ||
|   | c9439107c1 | ||
|   | ba65664cbd | ||
|   | 3da0730a31 | ||
|   | 98fcd616a3 | ||
|   | 06d0989014 | ||
|   | c248feb3c1 | ||
|   | 3f2c5ca9bd | ||
|   | 520c56fe53 | ||
|   | d3a670b043 | ||
|   | 6eca267eee | ||
|   | fdefe776d3 | ||
|   | bba8776184 | ||
|   | e075242801 | ||
|   | 0f9686fb5a | ||
|   | 168479862d | ||
|   | 483ed98777 | ||
|   | 14fe6e9c95 | ||
|   | 6584d06bb5 | ||
|   | 92a53f08f4 | ||
|   | a81d4aed7a | ||
|   | 517488ef67 | ||
|   | 33f1706634 | ||
|   | 5685449e15 | ||
|   | a6d67b164a | ||
|   | f950380202 | ||
|   | a4270fa7ac | ||
|   | 35c9280fb6 | ||
|   | 8b92ad1d4b | ||
|   | 0d6e3fd675 | ||
|   | b140e7fbeb | ||
|   | 6c0f107db0 | ||
|   | 61950755ec | ||
|   | bc3162460f | ||
|   | 27a4f9f862 | ||
|   | 88f2441330 | ||
|   | ab04286c6b | ||
|   | e8a62861c9 | ||
|   | 9ac87b36c1 | ||
|   | ce7819949f | ||
|   | 12792f99a0 | ||
|   | 66996dee4b | ||
|   | 2f45e88f06 | ||
|   | c1439e141e | ||
|   | dceb0f1f1f | ||
|   | a7915ff8ae | ||
|   | 420a712ad5 | ||
|   | 9a47e5c832 | ||
|   | dbc63430d8 | ||
|   | 0f861cecac | ||
|   | 586f9666d7 | ||
|   | 05a2331052 | ||
|   | 9f8bee7781 | ||
|   | d9505315da | ||
|   | c9937faf1e | ||
|   | 98606bc046 | 
							
								
								
									
										19
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -55,6 +55,7 @@ mutter-restart-helper | ||||
| mutter-test-client | ||||
| mutter-test-runner | ||||
| mutter-test-unit-tests | ||||
| mutter-test-headless-start-test | ||||
| mutter-all.test | ||||
| org.gnome.mutter.gschema.valid | ||||
| org.gnome.mutter.gschema.xml | ||||
| @@ -71,6 +72,8 @@ src/stamp-meta-enum-types.h | ||||
| src/meta-dbus-display-config.[ch] | ||||
| src/meta-dbus-idle-monitor.[ch] | ||||
| src/meta-dbus-login1.[ch] | ||||
| src/meta-dbus-remote-desktop.[ch] | ||||
| src/meta-dbus-screen-cast.[ch] | ||||
| src/gtk-primary-selection-protocol.c | ||||
| src/gtk-primary-selection-server-protocol.h | ||||
| src/gtk-shell-protocol.c | ||||
| @@ -85,6 +88,21 @@ src/pointer-constraints-unstable-v*-protocol.c | ||||
| src/pointer-constraints-unstable-v*-server-protocol.h | ||||
| src/xdg-foreign-unstable-v*-protocol.c | ||||
| src/xdg-foreign-unstable-v*-server-protocol.h | ||||
| src/xdg-output-unstable-v1-protocol.c | ||||
| src/xdg-output-unstable-v1-server-protocol.h | ||||
| src/xwayland-keyboard-grab-unstable-v1-protocol.c | ||||
| src/xwayland-keyboard-grab-unstable-v1-server-protocol.h | ||||
| src/tablet-unstable-v*-protocol.c | ||||
| src/tablet-unstable-v*-server-protocol.h | ||||
| src/text-input-unstable-v*-protocol.c | ||||
| src/text-input-unstable-v*-server-protocol.h | ||||
| src/keyboard-shortcuts-inhibit-unstable-v*-protocol.c | ||||
| src/keyboard-shortcuts-inhibit-unstable-v*-server-protocol.h | ||||
| src/linux-dmabuf-unstable-v*-protocol.c | ||||
| src/linux-dmabuf-unstable-v*-server-protocol.h | ||||
| src/xdg-shell-protocol.c | ||||
| src/xdg-shell-server-protocol.h | ||||
| src/wayland-eglstream-controller-server-protocol.h | ||||
| src/meta/meta-version.h | ||||
| src/libmutter-*.pc | ||||
| doc/reference/*.args | ||||
| @@ -112,3 +130,4 @@ ltsugar.m4 | ||||
| ltversion.m4 | ||||
| lt~obsolete.m4 | ||||
| .dirstamp | ||||
| **/tags.* | ||||
|   | ||||
							
								
								
									
										294
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										294
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,3 +1,297 @@ | ||||
| 3.30.0 | ||||
| ====== | ||||
|  | ||||
| Translators: | ||||
|   Fran Dieguez [gl], Balázs Meskó [hu], Rūdolfs Mazurs [lv], | ||||
|   Trần Ngọc Quân [vi], Ask Hjorth Larsen [da], gogo [hr] | ||||
|  | ||||
| 3.29.92 | ||||
| ======= | ||||
| * Avoid crash when a cursor is not found [Sebastian; #254] | ||||
| * Fix screen rotation regression [Jonas; #216] | ||||
| * Handle requests to unmanaged windows gracefully [Jonas; #240] | ||||
| * Move popups together with their parent [Jonas; #274] | ||||
| * Fix non-lowercase letters on virtual key devices [Carlos; gnome-shell#135] | ||||
| * Misc. bug fixes [Iain, Jonas; #223, #192, #279] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Carlos Garnacho, Sebastian Keller, Iain Lane, Robert Mader, | ||||
|   Daniel van Vugt | ||||
|  | ||||
| Translators: | ||||
|   Gwan-gyeong Mun [ko], Kukuh Syafaat [id], Milo Casagrande [it], | ||||
|   Anders Jonsson [sv], Rafael Fontenelle [pt_BR], Marek Cernocky [cs] | ||||
|  | ||||
| 3.29.91 | ||||
| ======= | ||||
| * Various crash fixes [Olivier, Iain; #255, #223] | ||||
| * Fix lock up with some DRI drivers [Alex; #127] | ||||
| * Send correct button codes from virtual evdev devices [Jonas; !190] | ||||
| * Improve grab-device clock updates on X11 [Jeff; !174] | ||||
| * Fix popups closing immediately on key down [Jonas; !180] | ||||
| * Prevent clients from modifying the shared keymap [Jonas; #784206] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Andrea Azzarone, Piotr Drąg, Olivier Fourdan, Carlos Garnacho, | ||||
|   Jan Grulich, Iain Lane, Alex Villacís Lasso, Jeff Smith, Daniel van Vugt | ||||
|  | ||||
| Translators: | ||||
|   Matej Urbančič [sl], Mario Blättermann [de], Piotr Drąg [pl], | ||||
|   Aurimas Černius [lt], Yi-Jyun Pan [zh_TW], Emin Tufan Çetin [tr], | ||||
|   Fabio Tomat [fur], Bruce Cowan [en_GB] | ||||
|  | ||||
| 3.29.90 | ||||
| ======= | ||||
| * Various crash fixes [Olivier, Jonas, Florian; #189, #70, #194, #15, #130] | ||||
| * Don't expose resolutions that are below the minimum [Andrea; #793223] | ||||
| * Remove support for preference overrides [Florian; #786496] | ||||
| * Misc. bug fixes and cleanups [Daniel, Jonas, Florian; #131, #245, !176] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Andrea Azzarone, Olivier Fourdan, Florian Müllner, Kevin Tamool, | ||||
|   Daniel van Vugt | ||||
|  | ||||
| Translators: | ||||
|   Daniel Mustieles [es], Claude Paroz [fr] | ||||
|  | ||||
| 3.29.4 | ||||
| ====== | ||||
| * Fix crash with parent-less modal dialogs [Olivier; #174] | ||||
| * Preserve paint volumes where possible to optimize CPU usage [Carlos; #782344] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Iain Lane, Bastien Nocera | ||||
|  | ||||
| Translators: | ||||
|   Daniel Șerbănescu [ro] | ||||
|  | ||||
| 3.29.3 | ||||
| ====== | ||||
| * Fix Korean Hangul support on wayland [Changwoo; #152] | ||||
| * Improve support for proprietary Nvidia driver [Jonas; #790316] | ||||
| * Only upload HW cursor sprite to the GPU that will display them [Jonas; #77] | ||||
| * Improve EGLstream support [Miguel; #2, #782575] | ||||
| * Remove MetaScreen to prepare for non-mandatary X11 dependency | ||||
|   [Armin, Jonas; #759538] | ||||
| * Misc. bug fixes [Olivier, Jonas, Sam; #160, !130, #786929, #788834] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Armin Krezović, Corentin Noël, | ||||
|   Changwoo Ryu, Sam Spilsbury, Daniel Stone, Marco Trevisan (Treviño), | ||||
|   Miguel A. Vico, Daniel van Vugt | ||||
|  | ||||
| Translators: | ||||
|   Yi-Jyun Pan [zh_TW], Jordi Mas [ca], Daniel Șerbănescu [ro], Fabio Tomat [fur] | ||||
|  | ||||
| 3.29.2 | ||||
| ====== | ||||
| * Fix size change animations on wayland [Georges; #780292] | ||||
| * Handle touch events on server-side titlebars [Carlos; #770185] | ||||
| * Misc. bug fixes [Florian, Olivier, Jonas, Georges; #134, #124, !96, #138, | ||||
|   !102, #781471, #150] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Florian Müllner, | ||||
|   Georges Basile Stavracas Neto, Marco Trevisan (Treviño), Daniel van Vugt | ||||
|  | ||||
| Translators: | ||||
|   Daniel Șerbănescu [ro], Marcos Lans [gl], Dz Chen [zh_CN] | ||||
|  | ||||
| 3.29.1 | ||||
| ====== | ||||
| * Fix various input-method regressions [Carlos, Olivier; #65, #74, #66, #112] | ||||
| * Fix wayland build on FreeBSD [Ting-Wei; #792280, #792717] | ||||
| * Fix swapped colors in screenshots (again) [Carlos; #72] | ||||
| * Allow building with elogind [Rasmus; !46] | ||||
| * Consider display rotation for cursor [Olivier; #85] | ||||
| * Fall back to non-modifier GBM surfaces [Daniel; #84] | ||||
| * Take inhibitors into account for monitoring idle [Bastien; #705942] | ||||
| * Misc. bug fixes [handsome-feng, Olivier, Mario, Jonas; !45, #83, #104, | ||||
|   gnome-shell#157, #130, #21] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, handsome-feng, Yussuf Khalil, | ||||
|   Ting-Wei Lan, Aleksandr Mezin, Alberts Muktupāvels, | ||||
|   Georges Basile Stavracas Neto, Bastien Nocera, Benjamin Otte, | ||||
|   Mario Sanchez Prada, Daniel Stone, Ray Strode, Rasmus Thomsen, | ||||
|   Marco Trevisan (Treviño), Daniel van Vugt | ||||
|  | ||||
| Translators: | ||||
|   Emin Tufan Çetin [tr], Dušan Kazik [sk], Matej Urbančič [sl] | ||||
|  | ||||
| 3.28.0 | ||||
| ====== | ||||
| * Fix xdg-foreign regression [Carlos; #63] | ||||
|  | ||||
| Contributors: | ||||
|   Carlos Garnacho, Georges Basile Stavracas Neto | ||||
|  | ||||
| Translators: | ||||
|   Marek Cernocky [cs], Ask Hjorth Larsen [da], Chao-Hsiung Liao [zh_TW], | ||||
|   Anders Jonsson [sv], Mart Raudsepp [et] | ||||
|  | ||||
| 3.27.92 | ||||
| ======= | ||||
| * Fix use of modifiers with multi-GPU systems [Louis-Francis; #18] | ||||
| * Add xdg-shell stable support [Jonas; #791938] | ||||
| * Fix scaling of icons in titlebar buttons [Egmont; #23] | ||||
| * Implement missing wacom functionality on X11 [Carlos; #48] | ||||
| * Force 8-bit RGB config [Jonas; #2] | ||||
| * Misc. bug fixes [Jonas, Olivier, Robert; #6, #27, #792203] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Egmont Koblinger, Robert Mader, | ||||
|   Bastien Nocera, Louis-Francis Ratté-Boulianne | ||||
|  | ||||
| Translators: | ||||
|   Daniel Mustieles [es], Марко Костић [sr], Милош Поповић [sr@latin], | ||||
|   Fran Dieguez [gl], Balázs Úr [hu], Gwan-gyeong Mun [ko], Rūdolfs Mazurs [lv], | ||||
|   Milo Casagrande [it], Mario Blättermann [de], GNOME Translation Robot [gd, | ||||
|   nl], Claude Paroz [fr], Aurimas Černius [lt] | ||||
|  | ||||
| 3.27.91 | ||||
| ======= | ||||
| * Fix handling of trackball settings on wayland [Carlos; #787804] | ||||
| * Apply font settings on wayland [Daniel; #645433] | ||||
| * Fix keybindings getting mixed up with some layouts [Jonas; #789300] | ||||
| * Fix bluetooth mouse cursor disappearing after idle [Benoit; #761067] | ||||
| * Support platforms that export EGL_KHR_platform_gbm [memeka; #780668] | ||||
| * Add keyboard accessibility support on wayland [Olivier; #788564] | ||||
| * Fix missing cursor when using screen magnifier [Carlos; #754806] | ||||
| * Fix external monitor shutting off on wayland when lid closes [Jonas; #788915] | ||||
| * Add xdg-output support [Olivier; #787363] | ||||
| * Add Xwayland grab keyboard support [Olivier; #783342] | ||||
| * Allow shortcut inhibition of the super key [Olivier; #790627] | ||||
| * Take "panel orientation" drm_connector property into account [Hans; #782294] | ||||
| * Fix focus window ending up below other windows on wayland [Olivier; #780820] | ||||
| * Fix maximized windows restoring to a tiny size on wayland [Olivier; #783901] | ||||
| * Fix tap-and-drag setting on X11 [Jonas; #775755] | ||||
| * Fix handling of single-touch devices on wayland [Carlos; #792005] | ||||
| * Support tiled/compressed buffers [Daniel; #785779] | ||||
| * Port screencast support to pipewire 0.1.8 [Jonas; #792854] | ||||
| * Add support for third stylus button on newer tablets [Jason; #790033] | ||||
| * Fix background corruption regression on nvidia [Jonas; #739178] | ||||
| * Misc. bug fixes [Jonas, Rui, Michael, Marco, Carlos, Olivier, Philip, Piotr, | ||||
|   Ting-Wei, Daniel, Jeremy, Hans, Florian, Ray, Jeff, George, Gwan-gyeong; | ||||
|   #789153, #788493, #784314, #789227, #789223, #789277, #782344, #789552, | ||||
|   #789553, #788695, #789984, #788764, #789386, #784545, #790336, #790358, | ||||
|   #791022, #791006, #789070, #772218, #791383, #791809, #776220, #791916, | ||||
|   #792281, #790309, #791371, #792527, #792599, #788834, #792765, #792062, | ||||
|   #645460, #792853, !2, #792818, #8, #12, #789501, #10, #789961, #13, !15, #1, | ||||
|   #26, #28, #35, #36, #38] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Jeremy Bicha, Michael Catanzaro, Piotr Drąg, Olivier Fourdan, | ||||
|   Carlos Garnacho, Jason Gerecke, Hans de Goede, Benoit Gschwind, | ||||
|   Peter Hutterer, George Kiagiadakis, Ting-Wei Lan, Rui Matos, memeka, | ||||
|   Florian Müllner, Gwan-gyeong Mun, Jeremy Nickurak, Marc-Antoine Perennou, | ||||
|   Jeff Smith, Daniel Stone, Ray Strode, Marco Trevisan (Treviño), | ||||
|   Daniel van Vugt, Philip Withnall | ||||
|  | ||||
| Translators: | ||||
|   Khaled Hosny [ar], Kjartan Maraas [nb], Piotr Drąg [pl], | ||||
|   Rafael Fontenelle [pt_BR], Christian Kirbach [de], Anders Jonsson [sv], | ||||
|   Charles Monzat [fr], Marek Cernocky [cs], Muhammet Kara [tr], | ||||
|   Milo Casagrande [it], Pawan Chitrakar [ne], Yosef Or Boczko [he], | ||||
|   Kukuh Syafaat [id], Daniel Mustieles [es], Fabio Tomat [fur], | ||||
|   Kristjan SCHMIDT [eo], Balázs Úr [hu], Andika Triwidada [id], | ||||
|   Fran Dieguez [gl], gogo [hr] | ||||
|  | ||||
| 3.27.1 | ||||
| ====== | ||||
| * Work with clients that require older linux_dmabuf protocol [Daniel; #788558] | ||||
| * Support hybrid GPU systems [Jonas; #785381] | ||||
| * Prevent crash when closing maximized windows [Jonni; #788666] | ||||
| * Use the correct monitor for HiDPI scaling of shell chrome [Jonas; #788820] | ||||
| * Fix unredirection of fullscreen windows [Rui, Jonas; #788493] | ||||
| * Fix list of supported monitor scales on X11 [Jonas; #788901] | ||||
| * Misc. bug fixes [Florian, Jonas, Marco; #788572, #788569, #788607, #788860, | ||||
|   #788921] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner, Daniel Stone, | ||||
|   Marco Trevisan, Jonni Westphalen | ||||
|  | ||||
| Translations: | ||||
|   Xavi Ivars [ca@valencia] | ||||
|  | ||||
| 3.26.1 | ||||
| ====== | ||||
| * Fix crash when respawning shortcut inhibitor dialog [Olivier; #787568] | ||||
| * Fix crash during monitor configuration migration [Carlos, Jonas; #787668] | ||||
| * Fix multihead regressions in X11 session [Jonas; #787477] | ||||
| * Fix screen rotation regressions [Hans; #787836] | ||||
| * Fix keybindings not being resolved with non-latin layouts [Jonas; #787016] | ||||
| * Support snap packages for sandboxed app IDs [Marco; #788217] | ||||
| * Fix crash when reconnecting tablet device [Jason; #787649] | ||||
| * Support running headless [Jonas; #730551, #787637] | ||||
| * Support _NET_RESTACK_WINDOW and ConfigureRequest siblings [Vasilis; #786365] | ||||
| * Fix monitor layout not being remembered across sessions [Jonas; #787629] | ||||
| * Make sure to export _NET_NUMBER_OF_DESKTOPS [Florian; #760651] | ||||
| * Allow resizing of tiled windows [Georges, Florian; #645153] | ||||
| * Export tiling information to clients [Georges; #751857] | ||||
| * Misc. bug fixes [Jonas, Florian, Jeremy, Rico; #787570, #787715, #787953, | ||||
|   #788049, #788199, #788292, #788197] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Andrea Azzarone, Georges Basile Stavracas Neto, Hans de Goede, | ||||
|   Olivier Fourdan, Carlos Garnacho, Jason Gerecke, Vasilis Liaskovitis, | ||||
|   Rui Matos, Florian Müllner, Jeremy Soller, Marco Trevisan, Rico Tzschichholz | ||||
|  | ||||
| Translations: | ||||
|   Matej Urbančič [sl], gogo [hr], Cheng-Chia Tseng [zh_TW] | ||||
|  | ||||
| 3.26.0 | ||||
| ====== | ||||
| Contributors: | ||||
|   Florian Müllner | ||||
|  | ||||
| Translations: | ||||
|   Trần Ngọc Quân [vi], Inaki Larranaga Murgoitio [eu], Jordi Mas [ca], | ||||
|   Anders Jonsson [sv], Alexander Shopov [bg], Ask Hjorth Larsen [da], | ||||
|   Jean-Baptiste Holcroft [fr], A S Alam [pa] | ||||
|  | ||||
| 3.25.92 | ||||
| ======= | ||||
| * Add screencast and remote desktop support [Jonas; #784199] | ||||
| * Support running with no attached monitors [Jonas; #730551] | ||||
| * Add a vertical gradient effect to background actor [Alessandro; #786618] | ||||
| * Misc. bug fixes [Mario, Daniel, Piotr, Jonas, Bastien; #786619, #786677, | ||||
|   #772218, #786918, #760670] | ||||
|  | ||||
| Contributors: | ||||
|   Jonas Ådahl, Alessandro Bono, Piotr Drąg, Bastien Nocera, | ||||
|   Mario Sanchez Prada, Daniel Stone | ||||
|  | ||||
| Translations: | ||||
|   Marek Cernocky [cs], Aurimas Černius [lt], Piotr Drąg [pl], | ||||
|   Fran Dieguez [gl], gogo [hr], Dušan Kazik [sk], Milo Casagrande [it], | ||||
|   Jordi Mas [ca], Cheng-Chia Tseng [zh_TW], Марко Костић [sr], | ||||
|   Милош Поповић [sr@latin], Rūdolfs Mazurs [lv], Matej Urbančič [sl], | ||||
|   Ask Hjorth Larsen [da], Piotr Drąg [it, lt], Jiri Grönroos [fi], | ||||
|   Emin Tufan Çetin [tr], Wolfgang Stöggl [de], Kukuh Syafaat [id], | ||||
|   Yuras Shumovich [be], Changwoo Ryu [ko], Alexander Shopov [bg], | ||||
|   Rafael Fontenelle [pt_BR], Balázs Úr [hu] | ||||
|  | ||||
| 3.25.91 | ||||
| ======= | ||||
| * Reduce memory use of suspended instances [Jonas; #786299] | ||||
| * Make supported scales determination saner [Rui; #786474] | ||||
| * Fix crash on inhibit-shortcuts dialog reponse [Jonas; #786385] | ||||
| * Support libinput's tag-and-drag setting [freeroot; #775755] | ||||
| * Avoid overlapping keybindings with multiple layouts [Jonas; #786408] | ||||
| * Fix non-transformed cursor on rotated monitors [Jonas; #786023] | ||||
| * Avoid unnecessary work during background painting [Alessandro; #783512] | ||||
| * Misc. bug fixes [Alberts, Jonas, Mario; #691611, #786300, #777732, #786568] | ||||
|  | ||||
| Contributors: | ||||
|   freeroot, Jonas Ådahl, Alessandro Bono, Carlos Garnacho, Rui Matos, | ||||
|   Alberts Muktupāvels, Mario Sanchez Prada | ||||
|  | ||||
| Translations: | ||||
|   Muhammet Kara [tr], Claude Paroz [fr], Мирослав Николић [sr, sr@latin], | ||||
|   Pawan Chitrakar [ne], Kukuh Syafaat [id] | ||||
|  | ||||
| 3.25.90 | ||||
| ======= | ||||
| * Add zwp_linux_dmabuf_v1 support [Daniel; #785262] | ||||
|   | ||||
							
								
								
									
										30
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| # Mutter | ||||
|  | ||||
| Mutter is a Wayland display server and X11 window manager and compositor library. | ||||
|  | ||||
| When used as a Wayland display server, it runs on top of KMS and libinput. It | ||||
| implements the compositor side of the Wayland core protocol as well as various | ||||
| protocol extensions. It also has functionality related to running X11 | ||||
| applications using Xwayland. | ||||
|  | ||||
| When used on top of Xorg it acts as a X11 window manager and compositing manager. | ||||
|  | ||||
| It contains functionality related to, among other things, window management, | ||||
| window compositing, focus tracking, workspace management, keybindings and | ||||
| monitor configuration. | ||||
|  | ||||
| Internally it uses a fork of Cogl, a hardware acceleration abstraction library | ||||
| used to simplify usage of OpenGL pipelines, as well as a fork af Clutter, a | ||||
| scene graph and user interface toolkit. | ||||
|  | ||||
| Mutter is used by GNOME Shell, the GNOME core user interface. It can also be run | ||||
| standalone, using the command "mutter", but just running plain mutter is only | ||||
| intended for debugging purposes. | ||||
|  | ||||
| ## License | ||||
|  | ||||
| Mutter is distributed under the terms of the GNU General Public License, | ||||
| version 2 or later. See the [COPYING][license] file for detalis. | ||||
|  | ||||
| [bug-tracker]: https://gitlab.gnome.org/GNOME/mutter/issues | ||||
| [license]: COPYING | ||||
| @@ -87,6 +87,8 @@ source_h =					\ | ||||
| 	clutter-image.h		\ | ||||
| 	clutter-input-device.h	\ | ||||
| 	clutter-input-device-tool.h	\ | ||||
| 	clutter-input-focus.h	\ | ||||
| 	clutter-input-method.h	\ | ||||
|         clutter-interval.h            \ | ||||
| 	clutter-keyframe-transition.h	\ | ||||
| 	clutter-keysyms.h 		\ | ||||
| @@ -169,6 +171,8 @@ source_c = \ | ||||
| 	clutter-image.c		\ | ||||
| 	clutter-input-device.c	\ | ||||
| 	clutter-input-device-tool.c	\ | ||||
| 	clutter-input-focus.c	\ | ||||
| 	clutter-input-method.c	\ | ||||
| 	clutter-virtual-input-device.c	\ | ||||
| 	clutter-interval.c            \ | ||||
| 	clutter-keyframe-transition.c	\ | ||||
| @@ -229,6 +233,8 @@ source_h_priv = \ | ||||
| 	clutter-flatten-effect.h		\ | ||||
| 	clutter-gesture-action-private.h	\ | ||||
| 	clutter-id-pool.h 			\ | ||||
| 	clutter-input-focus-private.h		\ | ||||
| 	clutter-input-method-private.h		\ | ||||
| 	clutter-master-clock.h			\ | ||||
| 	clutter-master-clock-default.h		\ | ||||
| 	clutter-offscreen-effect-private.h	\ | ||||
| @@ -388,6 +394,7 @@ x11_source_c = \ | ||||
| 	x11/clutter-keymap-x11.c		\ | ||||
| 	x11/clutter-stage-x11.c		\ | ||||
| 	x11/clutter-x11-texture-pixmap.c	\ | ||||
| 	x11/clutter-xkb-a11y-x11.c		\ | ||||
| 	$(NULL) | ||||
|  | ||||
| x11_source_h = \ | ||||
| @@ -402,6 +409,7 @@ x11_source_h_priv = \ | ||||
| 	x11/clutter-keymap-x11.h		\ | ||||
| 	x11/clutter-settings-x11.h		\ | ||||
| 	x11/clutter-stage-x11.h		\ | ||||
| 	x11/clutter-xkb-a11y-x11.h		\ | ||||
| 	$(NULL) | ||||
|  | ||||
| x11_source_c_priv = \ | ||||
| @@ -684,7 +692,7 @@ Cally_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS) | ||||
| Cally_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \ | ||||
| 	--warn-all \ | ||||
| 	--c-include='cally/cally.h' \ | ||||
| 	--pkg-export=mutter-cally-@LIBMUTTER_API_VERSION@ \ | ||||
| 	--pkg-export=mutter-clutter-@LIBMUTTER_API_VERSION@ \ | ||||
| 	--include-uninstalled=$(top_builddir)/clutter/Clutter-@LIBMUTTER_API_VERSION@.gir | ||||
|  | ||||
| INTROSPECTION_GIRS += Cally-@LIBMUTTER_API_VERSION@.gir | ||||
|   | ||||
| @@ -214,6 +214,8 @@ cally_util_simulate_snooper_install (void) | ||||
|                     G_CALLBACK (cally_util_stage_added_cb), cally_key_snooper); | ||||
|   g_signal_connect (G_OBJECT (stage_manager), "stage-removed", | ||||
|                     G_CALLBACK (cally_util_stage_removed_cb), cally_key_snooper); | ||||
|  | ||||
|   g_slist_free (stage_list); | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -840,6 +840,7 @@ struct _ClutterActorPrivate | ||||
|   guint needs_compute_expand        : 1; | ||||
|   guint needs_x_expand              : 1; | ||||
|   guint needs_y_expand              : 1; | ||||
|   guint needs_paint_volume_update   : 1; | ||||
| }; | ||||
|  | ||||
| enum | ||||
| @@ -1092,6 +1093,11 @@ static void clutter_actor_set_child_transform_internal (ClutterActor        *sel | ||||
| static void     clutter_actor_realize_internal          (ClutterActor *self); | ||||
| static void     clutter_actor_unrealize_internal        (ClutterActor *self); | ||||
|  | ||||
| static void clutter_actor_push_in_cloned_branch (ClutterActor *self, | ||||
|                                                  gulong        count); | ||||
| static void clutter_actor_pop_in_cloned_branch (ClutterActor *self, | ||||
|                                                 gulong        count); | ||||
|  | ||||
| /* Helper macro which translates by the anchor coord, applies the | ||||
|    given transformation and then translates back */ | ||||
| #define TRANSFORM_ABOUT_ANCHOR_COORD(a,m,c,_transform)  G_STMT_START { \ | ||||
| @@ -1504,6 +1510,8 @@ clutter_actor_real_map (ClutterActor *self) | ||||
|  | ||||
|   CLUTTER_ACTOR_SET_FLAGS (self, CLUTTER_ACTOR_MAPPED); | ||||
|  | ||||
|   self->priv->needs_paint_volume_update = TRUE; | ||||
|  | ||||
|   stage = _clutter_actor_get_stage_internal (self); | ||||
|   priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self); | ||||
|  | ||||
| @@ -2737,6 +2745,7 @@ clutter_actor_real_queue_relayout (ClutterActor *self) | ||||
|   priv->needs_width_request  = TRUE; | ||||
|   priv->needs_height_request = TRUE; | ||||
|   priv->needs_allocation     = TRUE; | ||||
|   priv->needs_paint_volume_update = TRUE; | ||||
|  | ||||
|   /* reset the cached size requests */ | ||||
|   memset (priv->width_requests, 0, | ||||
| @@ -2821,7 +2830,7 @@ _clutter_actor_fully_transform_vertices (ClutterActor *self, | ||||
|   /* Note: we pass NULL as the ancestor because we don't just want the modelview | ||||
|    * that gets us to stage coordinates, we want to go all the way to eye | ||||
|    * coordinates */ | ||||
|   _clutter_actor_apply_relative_transformation_matrix (self, NULL, &modelview); | ||||
|   _clutter_actor_get_relative_transformation_matrix (self, NULL, &modelview); | ||||
|  | ||||
|   /* Fetch the projection and viewport */ | ||||
|   _clutter_stage_get_projection_matrix (CLUTTER_STAGE (stage), &projection); | ||||
| @@ -4285,6 +4294,9 @@ clutter_actor_remove_child_internal (ClutterActor                 *self, | ||||
|  | ||||
|   self->priv->age += 1; | ||||
|  | ||||
|   if (self->priv->in_cloned_branch) | ||||
|     clutter_actor_pop_in_cloned_branch (child, self->priv->in_cloned_branch); | ||||
|  | ||||
|   /* if the child that got removed was visible and set to | ||||
|    * expand then we want to reset the parent's state in | ||||
|    * case the child was the only thing that was making it | ||||
| @@ -4828,8 +4840,7 @@ clutter_actor_set_scale_factor (ClutterActor      *self, | ||||
|   g_assert (pspec != NULL); | ||||
|   g_assert (scale_p != NULL); | ||||
|  | ||||
|   if (*scale_p != factor) | ||||
|     _clutter_actor_create_transition (self, pspec, *scale_p, factor); | ||||
|   _clutter_actor_create_transition (self, pspec, *scale_p, factor); | ||||
| } | ||||
|  | ||||
| static inline void | ||||
| @@ -8519,6 +8530,7 @@ clutter_actor_init (ClutterActor *self) | ||||
|   priv->needs_width_request = TRUE; | ||||
|   priv->needs_height_request = TRUE; | ||||
|   priv->needs_allocation = TRUE; | ||||
|   priv->needs_paint_volume_update = TRUE; | ||||
|  | ||||
|   priv->cached_width_age = 1; | ||||
|   priv->cached_height_age = 1; | ||||
| @@ -10085,6 +10097,9 @@ clutter_actor_allocate (ClutterActor           *self, | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   if (CLUTTER_ACTOR_IS_MAPPED (self)) | ||||
|     self->priv->needs_paint_volume_update = TRUE; | ||||
|  | ||||
|   if (!stage_allocation_changed) | ||||
|     { | ||||
|       /* If the actor didn't move but needs_allocation is set, we just | ||||
| @@ -10264,10 +10279,9 @@ clutter_actor_set_position (ClutterActor *self, | ||||
|   cur_position.x = clutter_actor_get_x (self); | ||||
|   cur_position.y = clutter_actor_get_y (self); | ||||
|  | ||||
|   if (!clutter_point_equals (&cur_position, &new_position)) | ||||
|     _clutter_actor_create_transition (self, obj_props[PROP_POSITION], | ||||
|                                       &cur_position, | ||||
|                                       &new_position); | ||||
|   _clutter_actor_create_transition (self, obj_props[PROP_POSITION], | ||||
|                                     &cur_position, | ||||
|                                     &new_position); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -12904,6 +12918,9 @@ clutter_actor_add_child_internal (ClutterActor              *self, | ||||
|  | ||||
|   self->priv->age += 1; | ||||
|  | ||||
|   if (self->priv->in_cloned_branch) | ||||
|     clutter_actor_push_in_cloned_branch (child, self->priv->in_cloned_branch); | ||||
|  | ||||
|   /* if push_internal() has been called then we automatically set | ||||
|    * the flag on the actor | ||||
|    */ | ||||
| @@ -12974,6 +12991,9 @@ clutter_actor_add_child_internal (ClutterActor              *self, | ||||
|       child->priv->needs_height_request = TRUE; | ||||
|       child->priv->needs_allocation = TRUE; | ||||
|  | ||||
|       if (CLUTTER_ACTOR_IS_MAPPED (child)) | ||||
|         child->priv->needs_paint_volume_update = TRUE; | ||||
|  | ||||
|       /* we only queue a relayout here, because any possible | ||||
|        * redraw has already been queued either by show() or | ||||
|        * by our call to queue_redraw() above | ||||
| @@ -17516,11 +17536,16 @@ _clutter_actor_get_paint_volume_mutable (ClutterActor *self) | ||||
|   priv = self->priv; | ||||
|  | ||||
|   if (priv->paint_volume_valid) | ||||
|     clutter_paint_volume_free (&priv->paint_volume); | ||||
|     { | ||||
|       if (!priv->needs_paint_volume_update) | ||||
|         return &priv->paint_volume; | ||||
|       clutter_paint_volume_free (&priv->paint_volume); | ||||
|     } | ||||
|  | ||||
|   if (_clutter_actor_get_paint_volume_real (self, &priv->paint_volume)) | ||||
|     { | ||||
|       priv->paint_volume_valid = TRUE; | ||||
|       priv->needs_paint_volume_update = FALSE; | ||||
|       return &priv->paint_volume; | ||||
|     } | ||||
|   else | ||||
| @@ -20690,29 +20715,31 @@ clutter_actor_get_child_transform (ClutterActor  *self, | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_actor_push_in_cloned_branch (ClutterActor *self) | ||||
| clutter_actor_push_in_cloned_branch (ClutterActor *self, | ||||
|                                      gulong        count) | ||||
| { | ||||
|   ClutterActor *iter; | ||||
|  | ||||
|   for (iter = self->priv->first_child; | ||||
|        iter != NULL; | ||||
|        iter = iter->priv->next_sibling) | ||||
|     clutter_actor_push_in_cloned_branch (iter); | ||||
|     clutter_actor_push_in_cloned_branch (iter, count); | ||||
|  | ||||
|   self->priv->in_cloned_branch += 1; | ||||
|   self->priv->in_cloned_branch += count; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_actor_pop_in_cloned_branch (ClutterActor *self) | ||||
| clutter_actor_pop_in_cloned_branch (ClutterActor *self, | ||||
|                                     gulong        count) | ||||
| { | ||||
|   ClutterActor *iter; | ||||
|  | ||||
|   self->priv->in_cloned_branch -= 1; | ||||
|   self->priv->in_cloned_branch -= count; | ||||
|  | ||||
|   for (iter = self->priv->first_child; | ||||
|        iter != NULL; | ||||
|        iter = iter->priv->next_sibling) | ||||
|     clutter_actor_pop_in_cloned_branch (iter); | ||||
|     clutter_actor_pop_in_cloned_branch (iter, count); | ||||
| } | ||||
|  | ||||
| void | ||||
| @@ -20728,7 +20755,7 @@ _clutter_actor_attach_clone (ClutterActor *actor, | ||||
|  | ||||
|   g_hash_table_add (priv->clones, clone); | ||||
|  | ||||
|   clutter_actor_push_in_cloned_branch (actor); | ||||
|   clutter_actor_push_in_cloned_branch (actor, 1); | ||||
| } | ||||
|  | ||||
| void | ||||
| @@ -20743,7 +20770,7 @@ _clutter_actor_detach_clone (ClutterActor *actor, | ||||
|       g_hash_table_lookup (priv->clones, clone) == NULL) | ||||
|     return; | ||||
|  | ||||
|   clutter_actor_pop_in_cloned_branch (actor); | ||||
|   clutter_actor_pop_in_cloned_branch (actor, 1); | ||||
|  | ||||
|   g_hash_table_remove (priv->clones, clone); | ||||
|  | ||||
|   | ||||
| @@ -58,6 +58,8 @@ struct _ClutterBackend | ||||
|   gint32 units_serial; | ||||
|  | ||||
|   GList *event_translators; | ||||
|  | ||||
|   ClutterInputMethod *input_method; | ||||
| }; | ||||
|  | ||||
| struct _ClutterBackendClass | ||||
| @@ -100,6 +102,8 @@ struct _ClutterBackendClass | ||||
|  | ||||
|   PangoDirection        (* get_keymap_direction) (ClutterBackend   *backend); | ||||
|  | ||||
|   void                  (* bell_notify)          (ClutterBackend   *backend); | ||||
|  | ||||
|   /* signals */ | ||||
|   void (* resolution_changed) (ClutterBackend *backend); | ||||
|   void (* font_changed)       (ClutterBackend *backend); | ||||
|   | ||||
| @@ -127,6 +127,7 @@ clutter_backend_finalize (GObject *gobject) | ||||
|  | ||||
|   g_free (backend->font_name); | ||||
|   clutter_backend_set_font_options (backend, NULL); | ||||
|   g_clear_object (&backend->input_method); | ||||
|  | ||||
|   G_OBJECT_CLASS (clutter_backend_parent_class)->finalize (gobject); | ||||
| } | ||||
| @@ -1363,3 +1364,41 @@ clutter_set_allowed_drivers (const char *drivers) | ||||
|  | ||||
|   allowed_drivers = g_strdup (drivers); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_backend_bell_notify (ClutterBackend *backend) | ||||
| { | ||||
|   ClutterBackendClass *klass; | ||||
|  | ||||
|   klass = CLUTTER_BACKEND_GET_CLASS (backend); | ||||
|   if (klass->bell_notify) | ||||
|     klass->bell_notify (backend); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * clutter_backend_get_input_method: | ||||
|  * @backend: the #CLutterBackend | ||||
|  * | ||||
|  * Returns the input method used by Clutter | ||||
|  * | ||||
|  * Returns: (transfer none): the input method | ||||
|  **/ | ||||
| ClutterInputMethod * | ||||
| clutter_backend_get_input_method (ClutterBackend *backend) | ||||
| { | ||||
|   return backend->input_method; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * clutter_backend_set_input_method: | ||||
|  * @backend: the #ClutterBackend | ||||
|  * @method: the input method | ||||
|  * | ||||
|  * Sets the input method to be used by Clutter | ||||
|  **/ | ||||
| void | ||||
| clutter_backend_set_input_method (ClutterBackend     *backend, | ||||
|                                   ClutterInputMethod *method) | ||||
| { | ||||
|   g_set_object (&backend->input_method, method); | ||||
| } | ||||
|   | ||||
| @@ -74,6 +74,15 @@ const cairo_font_options_t *    clutter_backend_get_font_options        (Clutter | ||||
| CLUTTER_AVAILABLE_IN_1_8 | ||||
| CoglContext *                   clutter_backend_get_cogl_context        (ClutterBackend             *backend); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| void                            clutter_backend_bell_notify             (ClutterBackend             *backend); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| ClutterInputMethod *            clutter_backend_get_input_method        (ClutterBackend             *backend); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void                            clutter_backend_set_input_method        (ClutterBackend             *backend, | ||||
|                                                                          ClutterInputMethod         *method); | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __CLUTTER_BACKEND_H__ */ | ||||
|   | ||||
| @@ -324,7 +324,7 @@ _clutter_bezier_init (ClutterBezier *b, | ||||
|    * triggers, we need to change those two functions a bit. | ||||
|    */ | ||||
|   if (b->ax > 0x1fff || b->bx > 0x1fff || b->cx > 0x1fff) | ||||
|     g_warning ("Calculated coefficents will result in multiplication " | ||||
|     g_warning ("Calculated coefficients will result in multiplication " | ||||
|                "overflow in clutter_bezier_t2x and clutter_bezier_t2y."); | ||||
|  | ||||
|   /* | ||||
|   | ||||
| @@ -145,6 +145,9 @@ struct _ClutterInputDevice | ||||
|   guint is_enabled : 1; | ||||
| }; | ||||
|  | ||||
| typedef void (*ClutterEmitInputDeviceEvent) (ClutterEvent       *event, | ||||
|                                              ClutterInputDevice *device); | ||||
|  | ||||
| struct _ClutterInputDeviceClass | ||||
| { | ||||
|   GObjectClass parent_class; | ||||
| @@ -163,6 +166,11 @@ struct _ClutterInputDeviceClass | ||||
|  | ||||
|   gboolean (* is_grouped) (ClutterInputDevice *device, | ||||
|                            ClutterInputDevice *other_device); | ||||
|  | ||||
|   /* Keyboard accessbility */ | ||||
|   void (* process_kbd_a11y_event) (ClutterEvent               *event, | ||||
|                                    ClutterInputDevice         *device, | ||||
|                                    ClutterEmitInputDeviceEvent emit_event_func); | ||||
| }; | ||||
|  | ||||
| /* Platform-dependent interface */ | ||||
|   | ||||
| @@ -54,6 +54,9 @@ struct _ClutterDeviceManagerPrivate | ||||
| { | ||||
|   /* back-pointer to the backend */ | ||||
|   ClutterBackend *backend; | ||||
|  | ||||
|   /* Keyboard a11y */ | ||||
|   ClutterKbdA11ySettings kbd_a11y_settings; | ||||
| }; | ||||
|  | ||||
| enum | ||||
| @@ -72,6 +75,8 @@ enum | ||||
|   DEVICE_ADDED, | ||||
|   DEVICE_REMOVED, | ||||
|   TOOL_CHANGED, | ||||
|   KBD_A11Y_MASK_CHANGED, | ||||
|   KBD_A11Y_FLAGS_CHANGED, | ||||
|  | ||||
|   LAST_SIGNAL | ||||
| }; | ||||
| @@ -196,6 +201,46 @@ clutter_device_manager_class_init (ClutterDeviceManagerClass *klass) | ||||
|                   G_TYPE_NONE, 2, | ||||
|                   CLUTTER_TYPE_INPUT_DEVICE, | ||||
|                   CLUTTER_TYPE_INPUT_DEVICE_TOOL); | ||||
|  | ||||
|   /** | ||||
|    * ClutterDeviceManager::kbd-a11y-mods-state-changed: | ||||
|    * @manager: the #ClutterDeviceManager that emitted the signal | ||||
|    * @latched_mask: the latched modifier mask from stickykeys | ||||
|    * @locked_mask:  the locked modifier mask from stickykeys | ||||
|    * | ||||
|    * The ::kbd-a11y-mods-state-changed signal is emitted each time either the | ||||
|    * latched modifiers mask or locked modifiers mask are changed as the | ||||
|    * result of keyboard accessibilty's sticky keys operations. | ||||
|    */ | ||||
|   manager_signals[KBD_A11Y_MASK_CHANGED] = | ||||
|     g_signal_new (I_("kbd-a11y-mods-state-changed"), | ||||
|                   G_TYPE_FROM_CLASS (klass), | ||||
|                   G_SIGNAL_RUN_LAST, | ||||
|                   0, NULL, NULL, | ||||
|                   _clutter_marshal_VOID__UINT_UINT, | ||||
|                   G_TYPE_NONE, 2, | ||||
|                   G_TYPE_UINT, | ||||
|                   G_TYPE_UINT); | ||||
|  | ||||
|   /** | ||||
|    * ClutterDeviceManager::kbd-a11y-flags-changed: | ||||
|    * @manager: the #ClutterDeviceManager that emitted the signal | ||||
|    * @settings_flags: the new ClutterKeyboardA11yFlags configuration | ||||
|    * @changed_mask: the ClutterKeyboardA11yFlags changed | ||||
|    * | ||||
|    * The ::kbd-a11y-flags-changed signal is emitted each time the | ||||
|    * ClutterKeyboardA11yFlags configuration is changed as the result of | ||||
|    * keyboard accessibilty operations. | ||||
|    */ | ||||
|   manager_signals[KBD_A11Y_FLAGS_CHANGED] = | ||||
|     g_signal_new (I_("kbd-a11y-flags-changed"), | ||||
|                   G_TYPE_FROM_CLASS (klass), | ||||
|                   G_SIGNAL_RUN_LAST, | ||||
|                   0, NULL, NULL, | ||||
|                   _clutter_marshal_VOID__UINT_UINT, | ||||
|                   G_TYPE_NONE, 2, | ||||
|                   G_TYPE_UINT, | ||||
|                   G_TYPE_UINT); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -471,6 +516,21 @@ clutter_device_manager_create_virtual_device (ClutterDeviceManager   *device_man | ||||
|                                                device_type); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * clutter_device_manager_supported_virtua_device_types: (skip) | ||||
|  */ | ||||
| ClutterVirtualDeviceType | ||||
| clutter_device_manager_get_supported_virtual_device_types (ClutterDeviceManager *device_manager) | ||||
| { | ||||
|   ClutterDeviceManagerClass *manager_class; | ||||
|  | ||||
|   g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), | ||||
|                         CLUTTER_VIRTUAL_DEVICE_TYPE_NONE); | ||||
|  | ||||
|   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||
|   return manager_class->get_supported_virtual_device_types (device_manager); | ||||
| } | ||||
|  | ||||
| void | ||||
| _clutter_device_manager_compress_motion (ClutterDeviceManager *device_manager, | ||||
|                                          ClutterEvent         *event, | ||||
| @@ -487,3 +547,43 @@ _clutter_device_manager_compress_motion (ClutterDeviceManager *device_manager, | ||||
|  | ||||
|   manager_class->compress_motion (device_manager, event, to_discard); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| are_kbd_a11y_settings_equal (ClutterKbdA11ySettings *a, | ||||
|                              ClutterKbdA11ySettings *b) | ||||
| { | ||||
|   return (a->controls == b->controls && | ||||
|           a->slowkeys_delay == b->slowkeys_delay && | ||||
|           a->debounce_delay == b->debounce_delay && | ||||
|           a->timeout_delay == b->timeout_delay && | ||||
|           a->mousekeys_init_delay == b->mousekeys_init_delay && | ||||
|           a->mousekeys_max_speed == b->mousekeys_max_speed && | ||||
|           a->mousekeys_accel_time == b->mousekeys_accel_time); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||
|                                               ClutterKbdA11ySettings *settings) | ||||
| { | ||||
|   ClutterDeviceManagerClass *manager_class; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||
|  | ||||
|   if (are_kbd_a11y_settings_equal (&device_manager->priv->kbd_a11y_settings, settings)) | ||||
|     return; | ||||
|  | ||||
|   device_manager->priv->kbd_a11y_settings = *settings; | ||||
|  | ||||
|   manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager); | ||||
|   if (manager_class->apply_kbd_a11y_settings) | ||||
|     manager_class->apply_kbd_a11y_settings (device_manager, settings); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||
|                                               ClutterKbdA11ySettings *settings) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager)); | ||||
|  | ||||
|   *settings = device_manager->priv->kbd_a11y_settings; | ||||
| } | ||||
|   | ||||
| @@ -44,6 +44,35 @@ typedef struct _ClutterDeviceManager            ClutterDeviceManager; | ||||
| typedef struct _ClutterDeviceManagerPrivate     ClutterDeviceManagerPrivate; | ||||
| typedef struct _ClutterDeviceManagerClass       ClutterDeviceManagerClass; | ||||
|  | ||||
| /** | ||||
|  * ClutterVirtualDeviceType: | ||||
|  */ | ||||
| typedef enum _ClutterVirtualDeviceType | ||||
| { | ||||
|   CLUTTER_VIRTUAL_DEVICE_TYPE_NONE = 0, | ||||
|   CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD = 1 << 0, | ||||
|   CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER = 1 << 1, | ||||
|   CLUTTER_VIRTUAL_DEVICE_TYPE_TOUCHSCREEN = 1 << 2, | ||||
| } ClutterVirtualDeviceType; | ||||
|  | ||||
| /** | ||||
|  * ClutterKbdA11ySettings: | ||||
|  * | ||||
|  * The #ClutterKbdA11ySettings structure contains keyboard accessibility | ||||
|  * settings | ||||
|  * | ||||
|  */ | ||||
| typedef struct _ClutterKbdA11ySettings | ||||
| { | ||||
|   ClutterKeyboardA11yFlags controls; | ||||
|   gint slowkeys_delay; | ||||
|   gint debounce_delay; | ||||
|   gint timeout_delay; | ||||
|   gint mousekeys_init_delay; | ||||
|   gint mousekeys_max_speed; | ||||
|   gint mousekeys_accel_time; | ||||
| } ClutterKbdA11ySettings; | ||||
|  | ||||
| /** | ||||
|  * ClutterDeviceManager: | ||||
|  * | ||||
| @@ -85,10 +114,13 @@ struct _ClutterDeviceManagerClass | ||||
|                                                ClutterStage       *stage); | ||||
|   ClutterVirtualInputDevice *(* create_virtual_device) (ClutterDeviceManager  *device_manager, | ||||
|                                                         ClutterInputDeviceType device_type); | ||||
|   ClutterVirtualDeviceType (* get_supported_virtual_device_types) (ClutterDeviceManager *device_manager); | ||||
|   void                (* compress_motion) (ClutterDeviceManager *device_manger, | ||||
|                                            ClutterEvent         *event, | ||||
|                                            const ClutterEvent   *to_discard); | ||||
|  | ||||
|   /* Keyboard accessbility */ | ||||
|   void                (* apply_kbd_a11y_settings) (ClutterDeviceManager   *device_manger, | ||||
|                                                    ClutterKbdA11ySettings *settings); | ||||
|   /* padding */ | ||||
|   gpointer _padding[6]; | ||||
| }; | ||||
| @@ -114,6 +146,16 @@ CLUTTER_AVAILABLE_IN_ALL | ||||
| ClutterVirtualInputDevice *clutter_device_manager_create_virtual_device (ClutterDeviceManager  *device_manager, | ||||
|                                                                          ClutterInputDeviceType device_type); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| ClutterVirtualDeviceType clutter_device_manager_get_supported_virtual_device_types (ClutterDeviceManager *device_manager); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| void clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||
|                                                    ClutterKbdA11ySettings *settings); | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| void clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||
|                                                    ClutterKbdA11ySettings *settings); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __CLUTTER_DEVICE_MANAGER_H__ */ | ||||
|   | ||||
| @@ -396,6 +396,43 @@ typedef enum { | ||||
|   CLUTTER_MODIFIER_MASK = 0x5c001fff | ||||
| } ClutterModifierType; | ||||
|  | ||||
| /** | ||||
|  * ClutterKeyboardA11yFlags: | ||||
|  * @CLUTTER_A11Y_KEYBOARD_ENABLED: | ||||
|  * @CLUTTER_A11Y_TIMEOUT_ENABLED: | ||||
|  * @CLUTTER_A11Y_MOUSE_KEYS_ENABLED: | ||||
|  * @CLUTTER_A11Y_SLOW_KEYS_ENABLED: | ||||
|  * @CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS: | ||||
|  * @CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT: | ||||
|  * @CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT: | ||||
|  * @CLUTTER_A11Y_BOUNCE_KEYS_ENABLED: | ||||
|  * @CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT: | ||||
|  * @CLUTTER_A11Y_TOGGLE_KEYS_ENABLED: | ||||
|  * @CLUTTER_A11Y_STICKY_KEYS_ENABLED: | ||||
|  * @CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF: | ||||
|  * @CLUTTER_A11Y_STICKY_KEYS_BEEP: | ||||
|  * @CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP: | ||||
|  * | ||||
|  * Keyboard accessibility features applied to a ClutterInputDevice keyboard. | ||||
|  * | ||||
|  */ | ||||
| typedef enum { | ||||
|   CLUTTER_A11Y_KEYBOARD_ENABLED          = 1 << 0, | ||||
|   CLUTTER_A11Y_TIMEOUT_ENABLED           = 1 << 1, | ||||
|   CLUTTER_A11Y_MOUSE_KEYS_ENABLED        = 1 << 2, | ||||
|   CLUTTER_A11Y_SLOW_KEYS_ENABLED         = 1 << 3, | ||||
|   CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS      = 1 << 4, | ||||
|   CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT     = 1 << 5, | ||||
|   CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT     = 1 << 6, | ||||
|   CLUTTER_A11Y_BOUNCE_KEYS_ENABLED       = 1 << 7, | ||||
|   CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT   = 1 << 8, | ||||
|   CLUTTER_A11Y_TOGGLE_KEYS_ENABLED       = 1 << 9, | ||||
|   CLUTTER_A11Y_STICKY_KEYS_ENABLED       = 1 << 10, | ||||
|   CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF   = 1 << 11, | ||||
|   CLUTTER_A11Y_STICKY_KEYS_BEEP          = 1 << 12, | ||||
|   CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13, | ||||
| } ClutterKeyboardA11yFlags; | ||||
|  | ||||
| /** | ||||
|  * ClutterActorFlags: | ||||
|  * @CLUTTER_ACTOR_MAPPED: the actor will be painted (is visible, and inside | ||||
| @@ -724,14 +761,17 @@ typedef enum { /*< prefix=CLUTTER_DRAG >*/ | ||||
|  * ClutterEventFlags: | ||||
|  * @CLUTTER_EVENT_NONE: No flag set | ||||
|  * @CLUTTER_EVENT_FLAG_SYNTHETIC: Synthetic event | ||||
|  * @CLUTTER_EVENT_FLAG_REPEATED: Auto-repeated event | ||||
|  * | ||||
|  * Flags for the #ClutterEvent | ||||
|  * | ||||
|  * Since: 0.6 | ||||
|  */ | ||||
| typedef enum { /*< flags prefix=CLUTTER_EVENT >*/ | ||||
|   CLUTTER_EVENT_NONE           = 0, | ||||
|   CLUTTER_EVENT_FLAG_SYNTHETIC = 1 << 0 | ||||
|   CLUTTER_EVENT_NONE              = 0, | ||||
|   CLUTTER_EVENT_FLAG_SYNTHETIC    = 1 << 0, | ||||
|   CLUTTER_EVENT_FLAG_INPUT_METHOD = 1 << 1, | ||||
|   CLUTTER_EVENT_FLAG_REPEATED     = 1 << 2 | ||||
| } ClutterEventFlags; | ||||
|  | ||||
| /** | ||||
| @@ -1536,6 +1576,41 @@ typedef enum { | ||||
|   CLUTTER_INPUT_DEVICE_MAPPING_RELATIVE, | ||||
| } ClutterInputDeviceMapping; | ||||
|  | ||||
| typedef enum { | ||||
|   CLUTTER_INPUT_CONTENT_HINT_COMPLETION          = 1 << 0, | ||||
|   CLUTTER_INPUT_CONTENT_HINT_SPELLCHECK          = 1 << 1, | ||||
|   CLUTTER_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION = 1 << 2, | ||||
|   CLUTTER_INPUT_CONTENT_HINT_LOWERCASE           = 1 << 3, | ||||
|   CLUTTER_INPUT_CONTENT_HINT_UPPERCASE           = 1 << 4, | ||||
|   CLUTTER_INPUT_CONTENT_HINT_TITLECASE           = 1 << 5, | ||||
|   CLUTTER_INPUT_CONTENT_HINT_HIDDEN_TEXT         = 1 << 6, | ||||
|   CLUTTER_INPUT_CONTENT_HINT_SENSITIVE_DATA      = 1 << 7, | ||||
|   CLUTTER_INPUT_CONTENT_HINT_LATIN               = 1 << 8, | ||||
|   CLUTTER_INPUT_CONTENT_HINT_MULTILINE           = 1 << 9, | ||||
| } ClutterInputContentHintFlags; | ||||
|  | ||||
| typedef enum { | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_NORMAL, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_ALPHA, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_DIGITS, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_NUMBER, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_PHONE, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_URL, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_EMAIL, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_NAME, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_PASSWORD, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_DATE, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_TIME, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_DATETIME, | ||||
|   CLUTTER_INPUT_CONTENT_PURPOSE_TERMINAL, | ||||
| } ClutterInputContentPurpose; | ||||
|  | ||||
| typedef enum { | ||||
|   CLUTTER_INPUT_PANEL_STATE_OFF, | ||||
|   CLUTTER_INPUT_PANEL_STATE_ON, | ||||
|   CLUTTER_INPUT_PANEL_STATE_TOGGLE, | ||||
| } ClutterInputPanelState; | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __CLUTTER_ENUMS_H__ */ | ||||
|   | ||||
							
								
								
									
										40
									
								
								clutter/clutter/clutter-input-focus-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								clutter/clutter/clutter-input-focus-private.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| /* | ||||
|  * Copyright (C) 2017,2018 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. | ||||
|  * | ||||
|  * Author: Carlos Garnacho <carlosg@gnome.org> | ||||
|  */ | ||||
|  | ||||
| #ifndef __CLUTTER_INPUT_FOCUS_PRIVATE_H__ | ||||
| #define __CLUTTER_INPUT_FOCUS_PRIVATE_H__ | ||||
|  | ||||
| void clutter_input_focus_focus_in  (ClutterInputFocus  *focus, | ||||
|                                     ClutterInputMethod *method); | ||||
| void clutter_input_focus_focus_out (ClutterInputFocus  *focus); | ||||
|  | ||||
| void clutter_input_focus_commit (ClutterInputFocus *focus, | ||||
|                                  const gchar       *text); | ||||
| void clutter_input_focus_delete_surrounding (ClutterInputFocus *focus, | ||||
|                                              guint              offset, | ||||
|                                              guint              len); | ||||
| void clutter_input_focus_request_surrounding (ClutterInputFocus *focus); | ||||
|  | ||||
| void clutter_input_focus_set_preedit_text (ClutterInputFocus *focus, | ||||
|                                            const gchar       *preedit, | ||||
|                                            guint              cursor); | ||||
|  | ||||
| #endif /* __CLUTTER_INPUT_FOCUS_PRIVATE_H__ */ | ||||
							
								
								
									
										243
									
								
								clutter/clutter/clutter-input-focus.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								clutter/clutter/clutter-input-focus.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,243 @@ | ||||
| /* | ||||
|  * Copyright (C) 2017,2018 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. | ||||
|  * | ||||
|  * Author: Carlos Garnacho <carlosg@gnome.org> | ||||
|  */ | ||||
|  | ||||
| #include "clutter-build-config.h" | ||||
|  | ||||
| #include "clutter/clutter-input-focus.h" | ||||
| #include "clutter/clutter-input-focus-private.h" | ||||
| #include "clutter/clutter-input-method-private.h" | ||||
|  | ||||
| typedef struct _ClutterInputFocusPrivate ClutterInputFocusPrivate; | ||||
|  | ||||
| struct _ClutterInputFocusPrivate | ||||
| { | ||||
|   ClutterInputMethod *im; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterInputFocus, clutter_input_focus, G_TYPE_OBJECT) | ||||
|  | ||||
| static void | ||||
| clutter_input_focus_real_focus_in (ClutterInputFocus  *focus, | ||||
|                                    ClutterInputMethod *im) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|   priv->im = im; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_input_focus_real_focus_out (ClutterInputFocus  *focus) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|   priv->im = NULL; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_input_focus_class_init (ClutterInputFocusClass *klass) | ||||
| { | ||||
|   klass->focus_in = clutter_input_focus_real_focus_in; | ||||
|   klass->focus_out = clutter_input_focus_real_focus_out; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_input_focus_init (ClutterInputFocus *focus) | ||||
| { | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| clutter_input_focus_is_focused (ClutterInputFocus *focus) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|  | ||||
|   return !!priv->im; | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_reset (ClutterInputFocus *focus) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|   g_return_if_fail (clutter_input_focus_is_focused (focus)); | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|  | ||||
|   clutter_input_method_reset (priv->im); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_set_cursor_location (ClutterInputFocus *focus, | ||||
|                                          const ClutterRect *rect) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|   g_return_if_fail (clutter_input_focus_is_focused (focus)); | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|  | ||||
|   clutter_input_method_set_cursor_location (priv->im, rect); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_set_surrounding (ClutterInputFocus *focus, | ||||
|                                      const gchar       *text, | ||||
|                                      guint              cursor, | ||||
|                                      guint              anchor) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|   g_return_if_fail (clutter_input_focus_is_focused (focus)); | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|  | ||||
|   clutter_input_method_set_surrounding (priv->im, text, cursor, anchor); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_set_content_hints (ClutterInputFocus            *focus, | ||||
|                                        ClutterInputContentHintFlags  hints) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|   g_return_if_fail (clutter_input_focus_is_focused (focus)); | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|  | ||||
|   clutter_input_method_set_content_hints (priv->im, hints); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_set_content_purpose (ClutterInputFocus          *focus, | ||||
|                                          ClutterInputContentPurpose  purpose) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|   g_return_if_fail (clutter_input_focus_is_focused (focus)); | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|  | ||||
|   clutter_input_method_set_content_purpose (priv->im, purpose); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| clutter_input_focus_filter_key_event (ClutterInputFocus     *focus, | ||||
|                                       const ClutterKeyEvent *key) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   g_return_val_if_fail (CLUTTER_IS_INPUT_FOCUS (focus), FALSE); | ||||
|   g_return_val_if_fail (clutter_input_focus_is_focused (focus), FALSE); | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|  | ||||
|   return clutter_input_method_filter_key_event (priv->im, key); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_set_can_show_preedit (ClutterInputFocus *focus, | ||||
|                                           gboolean           can_show_preedit) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|   g_return_if_fail (clutter_input_focus_is_focused (focus)); | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|  | ||||
|   clutter_input_method_set_can_show_preedit (priv->im, can_show_preedit); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_request_toggle_input_panel (ClutterInputFocus *focus) | ||||
| { | ||||
|   ClutterInputFocusPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|   g_return_if_fail (clutter_input_focus_is_focused (focus)); | ||||
|  | ||||
|   priv = clutter_input_focus_get_instance_private (focus); | ||||
|  | ||||
|   clutter_input_method_toggle_input_panel (priv->im); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_focus_in (ClutterInputFocus  *focus, | ||||
|                               ClutterInputMethod *im) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->focus_in (focus, im); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_focus_out (ClutterInputFocus  *focus) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|  | ||||
|   CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->focus_out (focus); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_commit (ClutterInputFocus *focus, | ||||
|                             const gchar       *text) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|  | ||||
|   CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->commit_text (focus, text); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_delete_surrounding (ClutterInputFocus *focus, | ||||
|                                         guint              offset, | ||||
|                                         guint              len) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|  | ||||
|   CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->delete_surrounding (focus, offset, len); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_request_surrounding (ClutterInputFocus *focus) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|  | ||||
|   CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->request_surrounding (focus); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_focus_set_preedit_text (ClutterInputFocus *focus, | ||||
|                                       const gchar       *preedit, | ||||
|                                       guint              cursor) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|  | ||||
|   CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->set_preedit_text (focus, preedit, cursor); | ||||
| } | ||||
							
								
								
									
										83
									
								
								clutter/clutter/clutter-input-focus.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								clutter/clutter/clutter-input-focus.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | ||||
| /* | ||||
|  * Copyright (C) 2017,2018 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. | ||||
|  * | ||||
|  * Author: Carlos Garnacho <carlosg@gnome.org> | ||||
|  */ | ||||
|  | ||||
| #ifndef __CLUTTER_INPUT_FOCUS_H__ | ||||
| #define __CLUTTER_INPUT_FOCUS_H__ | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
|  | ||||
| #define CLUTTER_TYPE_INPUT_FOCUS (clutter_input_focus_get_type ()) | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| G_DECLARE_DERIVABLE_TYPE (ClutterInputFocus, clutter_input_focus, | ||||
|                           CLUTTER, INPUT_FOCUS, GObject) | ||||
|  | ||||
| struct _ClutterInputFocusClass | ||||
| { | ||||
|   GObjectClass parent_class; | ||||
|   GTypeInterface iface; | ||||
|  | ||||
|   void (* focus_in)  (ClutterInputFocus  *focus, | ||||
|                       ClutterInputMethod *input_method); | ||||
|   void (* focus_out) (ClutterInputFocus  *focus); | ||||
|  | ||||
|   void (* request_surrounding) (ClutterInputFocus *focus); | ||||
|   void (* delete_surrounding)  (ClutterInputFocus *focus, | ||||
|                                 guint              offset, | ||||
|                                 guint              len); | ||||
|   void (* commit_text) (ClutterInputFocus *focus, | ||||
|                         const gchar       *text); | ||||
|  | ||||
|   void (* set_preedit_text) (ClutterInputFocus *focus, | ||||
|                              const gchar       *preedit, | ||||
|                              guint              cursor); | ||||
| }; | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| gboolean clutter_input_focus_is_focused (ClutterInputFocus *focus); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_focus_reset (ClutterInputFocus *focus); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_focus_set_cursor_location (ClutterInputFocus *focus, | ||||
|                                               const ClutterRect *rect); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_focus_set_surrounding (ClutterInputFocus *focus, | ||||
|                                           const gchar       *text, | ||||
|                                           guint              cursor, | ||||
|                                           guint              anchor); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_focus_set_content_hints (ClutterInputFocus            *focus, | ||||
|                                             ClutterInputContentHintFlags  hint); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_focus_set_content_purpose (ClutterInputFocus          *focus, | ||||
|                                               ClutterInputContentPurpose  purpose); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| gboolean clutter_input_focus_filter_key_event (ClutterInputFocus     *focus, | ||||
|                                                const ClutterKeyEvent *key); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_focus_set_can_show_preedit (ClutterInputFocus *focus, | ||||
|                                                gboolean           can_show_preedit); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_focus_request_toggle_input_panel (ClutterInputFocus *focus); | ||||
|  | ||||
| #endif /* __CLUTTER_INPUT_FOCUS_H__ */ | ||||
							
								
								
									
										46
									
								
								clutter/clutter/clutter-input-method-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								clutter/clutter/clutter-input-method-private.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| /* | ||||
|  * Copyright (C) 2017,2018 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. | ||||
|  * | ||||
|  * Author: Carlos Garnacho <carlosg@gnome.org> | ||||
|  */ | ||||
|  | ||||
| #ifndef __CLUTTER_INPUT_METHOD_PRIVATE_H__ | ||||
| #define __CLUTTER_INPUT_METHOD_PRIVATE_H__ | ||||
|  | ||||
| ClutterInputFocus * clutter_input_method_get_focus (ClutterInputMethod *method); | ||||
|  | ||||
| void clutter_input_method_reset               (ClutterInputMethod *method); | ||||
|  | ||||
| void clutter_input_method_set_cursor_location (ClutterInputMethod *method, | ||||
|                                                const ClutterRect  *rect); | ||||
| void clutter_input_method_set_surrounding     (ClutterInputMethod *method, | ||||
|                                                const gchar        *text, | ||||
|                                                guint               cursor, | ||||
|                                                guint               anchor); | ||||
| void clutter_input_method_set_content_hints   (ClutterInputMethod           *method, | ||||
|                                                ClutterInputContentHintFlags  hints); | ||||
| void clutter_input_method_set_content_purpose (ClutterInputMethod         *method, | ||||
|                                                ClutterInputContentPurpose  purpose); | ||||
| void clutter_input_method_set_can_show_preedit (ClutterInputMethod *method, | ||||
|                                                 gboolean            can_show_preedit); | ||||
| gboolean clutter_input_method_filter_key_event (ClutterInputMethod    *method, | ||||
|                                                 const ClutterKeyEvent *key); | ||||
|  | ||||
| void clutter_input_method_toggle_input_panel (ClutterInputMethod *method); | ||||
|  | ||||
| #endif /* __CLUTTER_INPUT_METHOD_PRIVATE_H__ */ | ||||
							
								
								
									
										444
									
								
								clutter/clutter/clutter-input-method.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										444
									
								
								clutter/clutter/clutter-input-method.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,444 @@ | ||||
| /* | ||||
|  * Copyright (C) 2017,2018 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. | ||||
|  * | ||||
|  * Author: Carlos Garnacho <carlosg@gnome.org> | ||||
|  */ | ||||
|  | ||||
| #include "clutter-build-config.h" | ||||
|  | ||||
| #include "clutter-private.h" | ||||
| #include "clutter/clutter-input-method.h" | ||||
| #include "clutter/clutter-input-method-private.h" | ||||
| #include "clutter/clutter-input-focus-private.h" | ||||
|  | ||||
| typedef struct _ClutterInputMethodPrivate ClutterInputMethodPrivate; | ||||
|  | ||||
| struct _ClutterInputMethodPrivate | ||||
| { | ||||
|   ClutterInputFocus *focus; | ||||
|   ClutterInputContentHintFlags content_hints; | ||||
|   ClutterInputContentPurpose content_purpose; | ||||
|   gboolean can_show_preedit; | ||||
| }; | ||||
|  | ||||
| enum { | ||||
|   COMMIT, | ||||
|   DELETE_SURROUNDING, | ||||
|   REQUEST_SURROUNDING, | ||||
|   INPUT_PANEL_STATE, | ||||
|   CURSOR_LOCATION_CHANGED, | ||||
|   N_SIGNALS, | ||||
| }; | ||||
|  | ||||
| enum { | ||||
|   PROP_0, | ||||
|   PROP_CONTENT_HINTS, | ||||
|   PROP_CONTENT_PURPOSE, | ||||
|   PROP_CAN_SHOW_PREEDIT, | ||||
|   N_PROPS | ||||
| }; | ||||
|  | ||||
| static guint signals[N_SIGNALS] = { 0 }; | ||||
| static GParamSpec *pspecs[N_PROPS] = { 0 }; | ||||
|  | ||||
| G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterInputMethod, clutter_input_method, G_TYPE_OBJECT) | ||||
|  | ||||
| static void | ||||
| set_content_hints (ClutterInputMethod           *im, | ||||
|                    ClutterInputContentHintFlags  content_hints) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|   priv->content_hints = content_hints; | ||||
|   CLUTTER_INPUT_METHOD_GET_CLASS (im)->update_content_hints (im, content_hints); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_content_purpose (ClutterInputMethod         *im, | ||||
|                      ClutterInputContentPurpose  content_purpose) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|   priv->content_purpose = content_purpose; | ||||
|   CLUTTER_INPUT_METHOD_GET_CLASS (im)->update_content_purpose (im, | ||||
|                                                                content_purpose); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_can_show_preedit (ClutterInputMethod *im, | ||||
|                       gboolean            can_show_preedit) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|   priv->can_show_preedit = can_show_preedit; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_input_method_set_property (GObject      *object, | ||||
|                                    guint         prop_id, | ||||
|                                    const GValue *value, | ||||
|                                    GParamSpec   *pspec) | ||||
| { | ||||
|   switch (prop_id) | ||||
|     { | ||||
|     case PROP_CONTENT_HINTS: | ||||
|       set_content_hints (CLUTTER_INPUT_METHOD (object), | ||||
|                          g_value_get_flags (value)); | ||||
|       break; | ||||
|     case PROP_CONTENT_PURPOSE: | ||||
|       set_content_purpose (CLUTTER_INPUT_METHOD (object), | ||||
|                            g_value_get_enum (value)); | ||||
|       break; | ||||
|     case PROP_CAN_SHOW_PREEDIT: | ||||
|       set_can_show_preedit (CLUTTER_INPUT_METHOD (object), | ||||
|                             g_value_get_boolean (value)); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_input_method_get_property (GObject    *object, | ||||
|                                    guint       prop_id, | ||||
|                                    GValue     *value, | ||||
|                                    GParamSpec *pspec) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|   ClutterInputMethod *im; | ||||
|  | ||||
|   im = CLUTTER_INPUT_METHOD (object); | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|  | ||||
|   switch (prop_id) | ||||
|     { | ||||
|     case PROP_CONTENT_HINTS: | ||||
|       g_value_set_flags (value, priv->content_hints); | ||||
|       break; | ||||
|     case PROP_CONTENT_PURPOSE: | ||||
|       g_value_set_enum (value, priv->content_purpose); | ||||
|       break; | ||||
|     case PROP_CAN_SHOW_PREEDIT: | ||||
|       g_value_set_boolean (value, priv->can_show_preedit); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_input_method_class_init (ClutterInputMethodClass *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|  | ||||
|   object_class->set_property = clutter_input_method_set_property; | ||||
|   object_class->get_property = clutter_input_method_get_property; | ||||
|  | ||||
|   signals[COMMIT] = | ||||
|     g_signal_new ("commit", | ||||
|                   G_TYPE_FROM_CLASS (object_class), | ||||
|                   G_SIGNAL_RUN_LAST, | ||||
|                   0, NULL, NULL, NULL, | ||||
|                   G_TYPE_NONE, 1, G_TYPE_STRING); | ||||
|   signals[DELETE_SURROUNDING] = | ||||
|     g_signal_new ("delete-surrounding", | ||||
|                   G_TYPE_FROM_CLASS (object_class), | ||||
|                   G_SIGNAL_RUN_LAST, | ||||
|                   0, NULL, NULL, NULL, | ||||
|                   G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); | ||||
|   signals[REQUEST_SURROUNDING] = | ||||
|     g_signal_new ("request-surrounding", | ||||
|                   G_TYPE_FROM_CLASS (object_class), | ||||
|                   G_SIGNAL_RUN_LAST, | ||||
|                   0, NULL, NULL, NULL, | ||||
|                   G_TYPE_NONE, 0); | ||||
|   signals[INPUT_PANEL_STATE] = | ||||
|     g_signal_new ("input-panel-state", | ||||
|                   G_TYPE_FROM_CLASS (object_class), | ||||
|                   G_SIGNAL_RUN_LAST, | ||||
|                   0, NULL, NULL, NULL, | ||||
|                   G_TYPE_NONE, 1, | ||||
|                   CLUTTER_TYPE_INPUT_PANEL_STATE); | ||||
|   signals[CURSOR_LOCATION_CHANGED] = | ||||
|     g_signal_new ("cursor-location-changed", | ||||
|                   G_TYPE_FROM_CLASS (object_class), | ||||
|                   G_SIGNAL_RUN_LAST, | ||||
|                   0, NULL, NULL, NULL, | ||||
|                   G_TYPE_NONE, 1, CLUTTER_TYPE_RECT); | ||||
|  | ||||
|   pspecs[PROP_CONTENT_HINTS] = | ||||
|     g_param_spec_flags ("content-hints", | ||||
|                         P_("Content hints"), | ||||
|                         P_("Content hints"), | ||||
|                         CLUTTER_TYPE_INPUT_CONTENT_HINT_FLAGS, 0, | ||||
|                         G_PARAM_READWRITE | | ||||
|                         G_PARAM_STATIC_STRINGS); | ||||
|   pspecs[PROP_CONTENT_PURPOSE] = | ||||
|     g_param_spec_enum ("content-purpose", | ||||
|                        P_("Content purpose"), | ||||
|                        P_("Content purpose"), | ||||
|                        CLUTTER_TYPE_INPUT_CONTENT_PURPOSE, 0, | ||||
|                        G_PARAM_READWRITE | | ||||
|                        G_PARAM_STATIC_STRINGS); | ||||
|   pspecs[PROP_CAN_SHOW_PREEDIT] = | ||||
|     g_param_spec_boolean ("can-show-preedit", | ||||
|                           P_("Can show preedit"), | ||||
|                           P_("Can show preedit"), | ||||
|                           FALSE, | ||||
|                           G_PARAM_READWRITE | | ||||
|                           G_PARAM_STATIC_STRINGS); | ||||
|  | ||||
|   g_object_class_install_properties (object_class, N_PROPS, pspecs); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_input_method_init (ClutterInputMethod *im) | ||||
| { | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_focus_in (ClutterInputMethod *im, | ||||
|                                ClutterInputFocus  *focus) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|   ClutterInputMethodClass *klass; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus)); | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|  | ||||
|   if (priv->focus == focus) | ||||
|     return; | ||||
|  | ||||
|   if (priv->focus) | ||||
|     clutter_input_method_focus_out (im); | ||||
|  | ||||
|   g_set_object (&priv->focus, focus); | ||||
|  | ||||
|   if (focus) | ||||
|     { | ||||
|       klass = CLUTTER_INPUT_METHOD_GET_CLASS (im); | ||||
|       klass->focus_in (im, focus); | ||||
|  | ||||
|       clutter_input_focus_focus_in (priv->focus, im); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_focus_out (ClutterInputMethod *im) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|   ClutterInputMethodClass *klass; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|  | ||||
|   if (!priv->focus) | ||||
|     return; | ||||
|  | ||||
|   clutter_input_focus_focus_out (priv->focus); | ||||
|   g_clear_object (&priv->focus); | ||||
|  | ||||
|   klass = CLUTTER_INPUT_METHOD_GET_CLASS (im); | ||||
|   klass->focus_out (im); | ||||
|  | ||||
|   g_signal_emit (im, signals[INPUT_PANEL_STATE], | ||||
|                  0, CLUTTER_INPUT_PANEL_STATE_OFF); | ||||
| } | ||||
|  | ||||
| ClutterInputFocus * | ||||
| clutter_input_method_get_focus (ClutterInputMethod *im) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|   return priv->focus; | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_commit (ClutterInputMethod *im, | ||||
|                              const gchar        *text) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|   if (priv->focus) | ||||
|     clutter_input_focus_commit (priv->focus, text); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_delete_surrounding (ClutterInputMethod *im, | ||||
|                                          guint               offset, | ||||
|                                          guint               len) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|   if (priv->focus) | ||||
|     clutter_input_focus_delete_surrounding (priv->focus, offset, len); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_request_surrounding (ClutterInputMethod *im) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|   if (priv->focus) | ||||
|     clutter_input_focus_request_surrounding (priv->focus); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * clutter_input_method_set_preedit_text: | ||||
|  * @im: a #ClutterInputMethod | ||||
|  * @preedit: (nullable): the preedit text, or %NULL | ||||
|  * @cursor: the cursor | ||||
|  * | ||||
|  * Sets the preedit text on the current input focus. | ||||
|  **/ | ||||
| void | ||||
| clutter_input_method_set_preedit_text (ClutterInputMethod *im, | ||||
|                                        const gchar        *preedit, | ||||
|                                        guint               cursor) | ||||
| { | ||||
|   ClutterInputMethodPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   priv = clutter_input_method_get_instance_private (im); | ||||
|   if (priv->focus) | ||||
|     clutter_input_focus_set_preedit_text (priv->focus, preedit, cursor); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_notify_key_event (ClutterInputMethod *im, | ||||
|                                        const ClutterEvent *event, | ||||
|                                        gboolean            filtered) | ||||
| { | ||||
|   if (!filtered) | ||||
|     { | ||||
|       ClutterEvent *copy; | ||||
|  | ||||
|       /* XXX: we rely on the IM implementation to notify back of | ||||
|        * key events in the exact same order they were given. | ||||
|        */ | ||||
|       copy = clutter_event_copy (event); | ||||
|       clutter_event_set_flags (copy, clutter_event_get_flags (event) | | ||||
|                                CLUTTER_EVENT_FLAG_INPUT_METHOD); | ||||
|       clutter_event_set_source_device (copy, clutter_event_get_device (copy)); | ||||
|       clutter_event_put (copy); | ||||
|       clutter_event_free (copy); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_toggle_input_panel (ClutterInputMethod *im) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   g_signal_emit (im, signals[INPUT_PANEL_STATE], 0, | ||||
|                  CLUTTER_INPUT_PANEL_STATE_TOGGLE); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_reset (ClutterInputMethod *im) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   CLUTTER_INPUT_METHOD_GET_CLASS (im)->reset (im); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_set_cursor_location (ClutterInputMethod *im, | ||||
|                                           const ClutterRect  *rect) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   CLUTTER_INPUT_METHOD_GET_CLASS (im)->set_cursor_location (im, rect); | ||||
|  | ||||
|   g_signal_emit (im, signals[CURSOR_LOCATION_CHANGED], 0, rect); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_set_surrounding (ClutterInputMethod *im, | ||||
|                                       const gchar        *text, | ||||
|                                       guint               cursor, | ||||
|                                       guint               anchor) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   CLUTTER_INPUT_METHOD_GET_CLASS (im)->set_surrounding (im, text, | ||||
|                                                         cursor, anchor); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_set_content_hints (ClutterInputMethod           *im, | ||||
|                                         ClutterInputContentHintFlags  hints) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   g_object_set (G_OBJECT (im), "content-hints", hints, NULL); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_set_content_purpose (ClutterInputMethod         *im, | ||||
|                                           ClutterInputContentPurpose  purpose) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   g_object_set (G_OBJECT (im), "content-purpose", purpose, NULL); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_method_set_can_show_preedit (ClutterInputMethod *im, | ||||
|                                            gboolean            can_show_preedit) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im)); | ||||
|  | ||||
|   g_object_set (G_OBJECT (im), "can-show-preedit", can_show_preedit, NULL); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| clutter_input_method_filter_key_event (ClutterInputMethod    *im, | ||||
|                                        const ClutterKeyEvent *key) | ||||
| { | ||||
|   ClutterInputMethodClass *im_class = CLUTTER_INPUT_METHOD_GET_CLASS (im); | ||||
|  | ||||
|   g_return_val_if_fail (CLUTTER_IS_INPUT_METHOD (im), FALSE); | ||||
|   g_return_val_if_fail (key != NULL, FALSE); | ||||
|  | ||||
|   if (clutter_event_get_flags ((ClutterEvent *) key) & CLUTTER_EVENT_FLAG_INPUT_METHOD) | ||||
|     return FALSE; | ||||
|   if (!im_class->filter_key_event) | ||||
|     return FALSE; | ||||
|  | ||||
|   return im_class->filter_key_event (im, (const ClutterEvent *) key); | ||||
| } | ||||
							
								
								
									
										88
									
								
								clutter/clutter/clutter-input-method.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								clutter/clutter/clutter-input-method.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| /* | ||||
|  * Copyright (C) 2017,2018 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. | ||||
|  * | ||||
|  * Author: Carlos Garnacho <carlosg@gnome.org> | ||||
|  */ | ||||
|  | ||||
| #ifndef __CLUTTER_INPUT_METHOD_H__ | ||||
| #define __CLUTTER_INPUT_METHOD_H__ | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
|  | ||||
| #define CLUTTER_TYPE_INPUT_METHOD (clutter_input_method_get_type ()) | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| G_DECLARE_DERIVABLE_TYPE (ClutterInputMethod, clutter_input_method, | ||||
|                           CLUTTER, INPUT_METHOD, GObject) | ||||
|  | ||||
| typedef struct _ClutterInputMethodClass ClutterInputMethodClass; | ||||
|  | ||||
| struct _ClutterInputMethodClass | ||||
| { | ||||
|   GObjectClass parent_class; | ||||
|  | ||||
|   void (* focus_in) (ClutterInputMethod *im, | ||||
|                      ClutterInputFocus  *actor); | ||||
|   void (* focus_out) (ClutterInputMethod *im); | ||||
|  | ||||
|   void (* reset) (ClutterInputMethod *im); | ||||
|  | ||||
|   void (* set_cursor_location) (ClutterInputMethod          *im, | ||||
|                                 const ClutterRect           *rect); | ||||
|   void (* set_surrounding) (ClutterInputMethod *im, | ||||
|                             const gchar        *text, | ||||
|                             guint               cursor, | ||||
|                             guint               anchor); | ||||
|   void (* update_content_hints) (ClutterInputMethod           *im, | ||||
|                                  ClutterInputContentHintFlags  hint); | ||||
|   void (* update_content_purpose) (ClutterInputMethod         *im, | ||||
|                                    ClutterInputContentPurpose  purpose); | ||||
|  | ||||
|   gboolean (* filter_key_event) (ClutterInputMethod *im, | ||||
|                                  const ClutterEvent *key); | ||||
| }; | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_method_focus_in  (ClutterInputMethod *im, | ||||
|                                      ClutterInputFocus  *focus); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_method_focus_out (ClutterInputMethod *im); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_method_commit (ClutterInputMethod *im, | ||||
|                                   const gchar        *text); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_method_delete_surrounding (ClutterInputMethod *im, | ||||
|                                               guint               offset, | ||||
|                                               guint               len); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_method_request_surrounding (ClutterInputMethod *im); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_method_set_preedit_text (ClutterInputMethod *im, | ||||
|                                             const gchar        *preedit, | ||||
|                                             guint               cursor); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_method_notify_key_event (ClutterInputMethod *im, | ||||
|                                             const ClutterEvent *event, | ||||
|                                             gboolean            filtered); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_input_method_request_toggle_input_panel (ClutterInputMethod *im); | ||||
|  | ||||
| #endif /* __CLUTTER_INPUT_METHOD_H__ */ | ||||
| @@ -2089,6 +2089,21 @@ emit_keyboard_event (ClutterEvent       *event, | ||||
|     } | ||||
| } | ||||
|  | ||||
| static inline void | ||||
| process_key_event (ClutterEvent       *event, | ||||
|                    ClutterInputDevice *device) | ||||
| { | ||||
|   ClutterInputDeviceClass *device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device); | ||||
|  | ||||
|   if (device_class->process_kbd_a11y_event) | ||||
|     { | ||||
|       device_class->process_kbd_a11y_event (event, device, emit_keyboard_event); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   emit_keyboard_event (event, device); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| is_off_stage (ClutterActor *stage, | ||||
|               gfloat        x, | ||||
| @@ -2176,7 +2191,7 @@ _clutter_process_event_details (ClutterActor        *stage, | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|           emit_keyboard_event (event, device); | ||||
|           process_key_event (event, device); | ||||
|         } | ||||
|         break; | ||||
|  | ||||
| @@ -2742,6 +2757,7 @@ clutter_input_device_grab (ClutterInputDevice *device, | ||||
|   switch (device->device_type) | ||||
|     { | ||||
|     case CLUTTER_POINTER_DEVICE: | ||||
|     case CLUTTER_TABLET_DEVICE: | ||||
|       grab_actor = &(device->pointer_grab_actor); | ||||
|       break; | ||||
|  | ||||
| @@ -2787,6 +2803,7 @@ clutter_input_device_ungrab (ClutterInputDevice *device) | ||||
|   switch (device->device_type) | ||||
|     { | ||||
|     case CLUTTER_POINTER_DEVICE: | ||||
|     case CLUTTER_TABLET_DEVICE: | ||||
|       grab_actor = &(device->pointer_grab_actor); | ||||
|       break; | ||||
|  | ||||
|   | ||||
| @@ -40,6 +40,12 @@ gboolean        _clutter_get_sync_to_vblank     (void); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| int64_t clutter_stage_get_frame_counter (ClutterStage *stage); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void clutter_stage_capture_into (ClutterStage          *stage, | ||||
|                                  gboolean               paint, | ||||
|                                  cairo_rectangle_int_t *rect, | ||||
|                                  uint8_t               *data); | ||||
|  | ||||
| #undef __CLUTTER_H_INSIDE__ | ||||
|  | ||||
| #endif /* __CLUTTER_MUTTER_H__ */ | ||||
|   | ||||
| @@ -355,7 +355,7 @@ clutter_stage_view_class_init (ClutterStageViewClass *klass) | ||||
|                         "Framebuffer used as intermediate buffer", | ||||
|                         COGL_TYPE_HANDLE, | ||||
|                         G_PARAM_READWRITE | | ||||
| 			G_PARAM_CONSTRUCT_ONLY | | ||||
|                         G_PARAM_CONSTRUCT_ONLY | | ||||
|                         G_PARAM_STATIC_STRINGS); | ||||
|  | ||||
|   obj_props[PROP_SCALE] = | ||||
|   | ||||
| @@ -1486,10 +1486,11 @@ _clutter_stage_do_pick_on_view (ClutterStage     *stage, | ||||
|                 priv->viewport[1] * fb_scale - viewport_offset_y, | ||||
|                 priv->viewport[2] * fb_scale, | ||||
|                 priv->viewport[3] * fb_scale); | ||||
|   cogl_set_viewport (priv->viewport[0] * fb_scale - viewport_offset_x, | ||||
|                      priv->viewport[1] * fb_scale - viewport_offset_y, | ||||
|                      priv->viewport[2] * fb_scale, | ||||
|                      priv->viewport[3] * fb_scale); | ||||
|   cogl_framebuffer_set_viewport (fb, | ||||
|                                  priv->viewport[0] * fb_scale - viewport_offset_x, | ||||
|                                  priv->viewport[1] * fb_scale - viewport_offset_y, | ||||
|                                  priv->viewport[2] * fb_scale, | ||||
|                                  priv->viewport[3] * fb_scale); | ||||
|  | ||||
|   read_x = dirty_x * fb_scale; | ||||
|   read_y = dirty_y * fb_scale; | ||||
| @@ -3617,6 +3618,7 @@ _clutter_stage_maybe_setup_viewport (ClutterStage     *stage, | ||||
|                                      ClutterStageView *view) | ||||
| { | ||||
|   ClutterStagePrivate *priv = stage->priv; | ||||
|   CoglFramebuffer *fb = clutter_stage_view_get_framebuffer (view); | ||||
|  | ||||
|   if (clutter_stage_view_is_dirty_viewport (view)) | ||||
|     { | ||||
| @@ -3637,10 +3639,11 @@ _clutter_stage_maybe_setup_viewport (ClutterStage     *stage, | ||||
|  | ||||
|       viewport_offset_x = view_layout.x * fb_scale; | ||||
|       viewport_offset_y = view_layout.y * fb_scale; | ||||
|       cogl_set_viewport (priv->viewport[0] * fb_scale - viewport_offset_x, | ||||
|                          priv->viewport[1] * fb_scale - viewport_offset_y, | ||||
|                          priv->viewport[2] * fb_scale, | ||||
|                          priv->viewport[3] * fb_scale); | ||||
|       cogl_framebuffer_set_viewport (fb, | ||||
|                                      priv->viewport[0] * fb_scale - viewport_offset_x, | ||||
|                                      priv->viewport[1] * fb_scale - viewport_offset_y, | ||||
|                                      priv->viewport[2] * fb_scale, | ||||
|                                      priv->viewport[3] * fb_scale); | ||||
|  | ||||
|       perspective = priv->perspective; | ||||
|  | ||||
| @@ -3679,7 +3682,7 @@ _clutter_stage_maybe_setup_viewport (ClutterStage     *stage, | ||||
|  | ||||
|   if (clutter_stage_view_is_dirty_projection (view)) | ||||
|     { | ||||
|       cogl_set_projection_matrix (&priv->projection); | ||||
|       cogl_framebuffer_set_projection_matrix (fb, &priv->projection); | ||||
|  | ||||
|       clutter_stage_view_set_dirty_projection (view, FALSE); | ||||
|     } | ||||
| @@ -4726,8 +4729,8 @@ capture_view (ClutterStage          *stage, | ||||
|  | ||||
|   if (paint) | ||||
|     { | ||||
|       _clutter_stage_maybe_setup_viewport (stage, view); | ||||
|       cogl_push_framebuffer (framebuffer); | ||||
|       _clutter_stage_maybe_setup_viewport (stage, view); | ||||
|       clutter_stage_do_paint_view (stage, view, rect); | ||||
|     } | ||||
|  | ||||
| @@ -4810,3 +4813,93 @@ clutter_stage_capture (ClutterStage          *stage, | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| capture_view_into (ClutterStage          *stage, | ||||
|                    gboolean               paint, | ||||
|                    ClutterStageView      *view, | ||||
|                    cairo_rectangle_int_t *rect, | ||||
|                    uint8_t               *data, | ||||
|                    int                    stride) | ||||
| { | ||||
|   CoglFramebuffer *framebuffer; | ||||
|   ClutterBackend *backend; | ||||
|   CoglContext *context; | ||||
|   CoglBitmap *bitmap; | ||||
|   cairo_rectangle_int_t view_layout; | ||||
|  | ||||
|   framebuffer = clutter_stage_view_get_framebuffer (view); | ||||
|  | ||||
|   if (paint) | ||||
|     { | ||||
|       cogl_push_framebuffer (framebuffer); | ||||
|       _clutter_stage_maybe_setup_viewport (stage, view); | ||||
|       clutter_stage_do_paint_view (stage, view, rect); | ||||
|     } | ||||
|  | ||||
|   backend = clutter_get_default_backend (); | ||||
|   context = clutter_backend_get_cogl_context (backend); | ||||
|   bitmap = cogl_bitmap_new_for_data (context, | ||||
|                                      rect->width, rect->height, | ||||
|                                      CLUTTER_CAIRO_FORMAT_ARGB32, | ||||
|                                      stride, | ||||
|                                      data); | ||||
|  | ||||
|   clutter_stage_view_get_layout (view, &view_layout); | ||||
|  | ||||
|   cogl_framebuffer_read_pixels_into_bitmap (framebuffer, | ||||
|                                             rect->x - view_layout.x, | ||||
|                                             rect->y - view_layout.y, | ||||
|                                             COGL_READ_PIXELS_COLOR_BUFFER, | ||||
|                                             bitmap); | ||||
|  | ||||
|   if (paint) | ||||
|     cogl_pop_framebuffer (); | ||||
|  | ||||
|   cogl_object_unref (bitmap); | ||||
| } | ||||
|  | ||||
| static ClutterStageView * | ||||
| get_view_at_rect (ClutterStage          *stage, | ||||
|                   cairo_rectangle_int_t *rect) | ||||
| { | ||||
|   ClutterStagePrivate *priv = stage->priv; | ||||
|   GList *views = _clutter_stage_window_get_views (priv->impl); | ||||
|   GList *l; | ||||
|  | ||||
|   for (l = views; l; l = l->next) | ||||
|     { | ||||
|       ClutterStageView *view = l->data; | ||||
|       cairo_rectangle_int_t view_layout; | ||||
|       cairo_region_t *region; | ||||
|       cairo_rectangle_int_t view_capture_rect; | ||||
|  | ||||
|       clutter_stage_view_get_layout (view, &view_layout); | ||||
|       region = cairo_region_create_rectangle (&view_layout); | ||||
|       cairo_region_intersect_rectangle (region, rect); | ||||
|       cairo_region_get_extents (region, &view_capture_rect); | ||||
|       cairo_region_destroy (region); | ||||
|  | ||||
|       if (view_capture_rect.width == 0 || view_capture_rect.height == 0) | ||||
|         continue; | ||||
|  | ||||
|       g_assert (view_capture_rect.width == rect->width && | ||||
|                 view_capture_rect.height == rect->height); | ||||
|       return view; | ||||
|     } | ||||
|  | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_stage_capture_into (ClutterStage          *stage, | ||||
|                             gboolean               paint, | ||||
|                             cairo_rectangle_int_t *rect, | ||||
|                             uint8_t               *data) | ||||
| { | ||||
|   ClutterStageView *view; | ||||
|   int bpp = 4; | ||||
|  | ||||
|   view = get_view_at_rect (stage, rect); | ||||
|   capture_view_into (stage, paint, view, rect, data, rect->width * bpp); | ||||
| } | ||||
|   | ||||
| @@ -63,6 +63,7 @@ | ||||
| #include "clutter-units.h" | ||||
| #include "clutter-paint-volume-private.h" | ||||
| #include "clutter-scriptable.h" | ||||
| #include "clutter-input-focus.h" | ||||
|  | ||||
| /* cursor width in pixels */ | ||||
| #define DEFAULT_CURSOR_SIZE     2 | ||||
| @@ -98,6 +99,12 @@ struct _LayoutCache | ||||
|   guint age; | ||||
| }; | ||||
|  | ||||
| struct _ClutterTextInputFocus | ||||
| { | ||||
|   ClutterInputFocus parent_instance; | ||||
|   ClutterText *text; | ||||
| }; | ||||
|  | ||||
| struct _ClutterTextPrivate | ||||
| { | ||||
|   PangoFontDescription *font_desc; | ||||
| @@ -176,6 +183,10 @@ struct _ClutterTextPrivate | ||||
|   /* Signal handler for when the :text-direction changes */ | ||||
|   guint direction_changed_id; | ||||
|  | ||||
|   ClutterInputFocus *input_focus; | ||||
|   ClutterInputContentHintFlags input_hints; | ||||
|   ClutterInputContentPurpose input_purpose; | ||||
|  | ||||
|   /* bitfields */ | ||||
|   guint alignment               : 2; | ||||
|   guint wrap                    : 1; | ||||
| @@ -236,6 +247,8 @@ enum | ||||
|   PROP_SINGLE_LINE_MODE, | ||||
|   PROP_SELECTED_TEXT_COLOR, | ||||
|   PROP_SELECTED_TEXT_COLOR_SET, | ||||
|   PROP_INPUT_HINTS, | ||||
|   PROP_INPUT_PURPOSE, | ||||
|  | ||||
|   PROP_LAST | ||||
| }; | ||||
| @@ -269,6 +282,112 @@ static const ClutterColor default_selected_text_color = {   0,   0,   0, 255 }; | ||||
| static ClutterAnimatableIface *parent_animatable_iface = NULL; | ||||
| static ClutterScriptableIface *parent_scriptable_iface = NULL; | ||||
|  | ||||
| /* ClutterTextInputFocus */ | ||||
| #define CLUTTER_TYPE_TEXT_INPUT_FOCUS (clutter_text_input_focus_get_type ()) | ||||
|  | ||||
| G_DECLARE_FINAL_TYPE (ClutterTextInputFocus, clutter_text_input_focus, | ||||
|                       CLUTTER, TEXT_INPUT_FOCUS, ClutterInputFocus) | ||||
| G_DEFINE_TYPE (ClutterTextInputFocus, clutter_text_input_focus, | ||||
|                CLUTTER_TYPE_INPUT_FOCUS) | ||||
|  | ||||
| static void | ||||
| clutter_text_input_focus_request_surrounding (ClutterInputFocus *focus) | ||||
| { | ||||
|   ClutterText *clutter_text = CLUTTER_TEXT_INPUT_FOCUS (focus)->text; | ||||
|   ClutterTextBuffer *buffer; | ||||
|   const gchar *text; | ||||
|   gint anchor_pos, cursor_pos; | ||||
|  | ||||
|   buffer = clutter_text_get_buffer (clutter_text); | ||||
|   text = clutter_text_buffer_get_text (buffer); | ||||
|  | ||||
|   cursor_pos = clutter_text_get_cursor_position (clutter_text); | ||||
|   if (cursor_pos < 0) | ||||
|     cursor_pos = clutter_text_buffer_get_length (buffer); | ||||
|  | ||||
|   anchor_pos = clutter_text_get_selection_bound (clutter_text); | ||||
|   if (anchor_pos < 0) | ||||
|     anchor_pos = cursor_pos; | ||||
|  | ||||
|   clutter_input_focus_set_surrounding (focus, text, | ||||
|                                        g_utf8_offset_to_pointer (text, cursor_pos) - text, | ||||
|                                        g_utf8_offset_to_pointer (text, anchor_pos) - text); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_text_input_focus_delete_surrounding (ClutterInputFocus *focus, | ||||
|                                              guint              offset, | ||||
|                                              guint              len) | ||||
| { | ||||
|   ClutterText *clutter_text = CLUTTER_TEXT_INPUT_FOCUS (focus)->text; | ||||
|  | ||||
|   if (clutter_text_get_editable (clutter_text)) | ||||
|     clutter_text_delete_text (clutter_text, offset, len); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_text_input_focus_commit_text (ClutterInputFocus *focus, | ||||
|                                       const gchar       *text) | ||||
| { | ||||
|   ClutterText *clutter_text = CLUTTER_TEXT_INPUT_FOCUS (focus)->text; | ||||
|  | ||||
|   if (clutter_text_get_editable (clutter_text)) | ||||
|     { | ||||
|       clutter_text_delete_selection (clutter_text); | ||||
|       clutter_text_insert_text (clutter_text, text, | ||||
|                                 clutter_text_get_cursor_position (clutter_text)); | ||||
|       clutter_text_set_preedit_string (clutter_text, NULL, NULL, 0); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_text_input_focus_set_preedit_text (ClutterInputFocus *focus, | ||||
|                                            const gchar       *preedit_text, | ||||
|                                            guint              cursor_pos) | ||||
| { | ||||
|   ClutterText *clutter_text = CLUTTER_TEXT_INPUT_FOCUS (focus)->text; | ||||
|  | ||||
|   if (clutter_text_get_editable (clutter_text)) | ||||
|     { | ||||
|       PangoAttrList *list; | ||||
|  | ||||
|       list = pango_attr_list_new (); | ||||
|       pango_attr_list_insert (list, pango_attr_underline_new (PANGO_UNDERLINE_SINGLE)); | ||||
|       clutter_text_set_preedit_string (clutter_text, | ||||
|                                        preedit_text, list, | ||||
|                                        cursor_pos); | ||||
|       pango_attr_list_unref (list); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_text_input_focus_class_init (ClutterTextInputFocusClass *klass) | ||||
| { | ||||
|   ClutterInputFocusClass *focus_class = CLUTTER_INPUT_FOCUS_CLASS (klass); | ||||
|  | ||||
|   focus_class->request_surrounding = clutter_text_input_focus_request_surrounding; | ||||
|   focus_class->delete_surrounding = clutter_text_input_focus_delete_surrounding; | ||||
|   focus_class->commit_text = clutter_text_input_focus_commit_text; | ||||
|   focus_class->set_preedit_text = clutter_text_input_focus_set_preedit_text; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_text_input_focus_init (ClutterTextInputFocus *focus) | ||||
| { | ||||
| } | ||||
|  | ||||
| static ClutterInputFocus * | ||||
| clutter_text_input_focus_new (ClutterText *text) | ||||
| { | ||||
|   ClutterTextInputFocus *focus; | ||||
|  | ||||
|   focus = g_object_new (CLUTTER_TYPE_TEXT_INPUT_FOCUS, NULL); | ||||
|   focus->text = text; | ||||
|  | ||||
|   return CLUTTER_INPUT_FOCUS (focus); | ||||
| } | ||||
|  | ||||
| /* ClutterText */ | ||||
| static void clutter_scriptable_iface_init (ClutterScriptableIface *iface); | ||||
| static void clutter_animatable_iface_init (ClutterAnimatableIface *iface); | ||||
|  | ||||
| @@ -1009,6 +1128,22 @@ clutter_text_position_to_coords (ClutterText *self, | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static inline void | ||||
| update_cursor_location (ClutterText *self) | ||||
| { | ||||
|   ClutterTextPrivate *priv = self->priv; | ||||
|   ClutterRect rect; | ||||
|   float x, y; | ||||
|  | ||||
|   if (!priv->editable) | ||||
|     return; | ||||
|  | ||||
|   rect = priv->cursor_rect; | ||||
|   clutter_actor_get_transformed_position (CLUTTER_ACTOR (self), &x, &y); | ||||
|   clutter_rect_offset (&rect, x, y); | ||||
|   clutter_input_focus_set_cursor_location (priv->input_focus, &rect); | ||||
| } | ||||
|  | ||||
| static inline void | ||||
| clutter_text_ensure_cursor_position (ClutterText *self) | ||||
| { | ||||
| @@ -1057,6 +1192,8 @@ clutter_text_ensure_cursor_position (ClutterText *self) | ||||
|       g_signal_emit (self, text_signals[CURSOR_EVENT], 0, &cursor_pos); | ||||
|  | ||||
|       g_signal_emit (self, text_signals[CURSOR_CHANGED], 0); | ||||
|  | ||||
|       update_cursor_location (self); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1503,6 +1640,8 @@ clutter_text_finalize (GObject *gobject) | ||||
|   clutter_text_set_buffer (self, NULL); | ||||
|   g_free (priv->font_name); | ||||
|  | ||||
|   g_clear_object (&priv->input_focus); | ||||
|  | ||||
|   G_OBJECT_CLASS (clutter_text_parent_class)->finalize (gobject); | ||||
| } | ||||
|  | ||||
| @@ -1643,7 +1782,7 @@ selection_paint (ClutterText *self) | ||||
|       CoglColor cogl_color = { 0, }; | ||||
|       CoglFramebuffer *fb; | ||||
|  | ||||
|       fb = _clutter_actor_get_active_framebuffer (actor); | ||||
|       fb = cogl_get_draw_framebuffer (); | ||||
|       if (G_UNLIKELY (fb == NULL)) | ||||
|         return; | ||||
|  | ||||
| @@ -1859,6 +1998,7 @@ clutter_text_press (ClutterActor *actor, | ||||
|     return CLUTTER_EVENT_PROPAGATE; | ||||
|  | ||||
|   clutter_actor_grab_key_focus (actor); | ||||
|   clutter_input_focus_request_toggle_input_panel (priv->input_focus); | ||||
|  | ||||
|   /* if the actor is empty we just reset everything and not | ||||
|    * set up the dragging of the selection since there's nothing | ||||
| @@ -2084,10 +2224,17 @@ clutter_text_key_press (ClutterActor    *actor, | ||||
|   pool = clutter_binding_pool_find (g_type_name (CLUTTER_TYPE_TEXT)); | ||||
|   g_assert (pool != NULL); | ||||
|  | ||||
|   if (!(event->flags & CLUTTER_EVENT_FLAG_INPUT_METHOD) && | ||||
|       clutter_input_focus_is_focused (priv->input_focus) && | ||||
|       clutter_input_focus_filter_key_event (priv->input_focus, event)) | ||||
|     return CLUTTER_EVENT_STOP; | ||||
|  | ||||
|   /* we allow passing synthetic events that only contain | ||||
|    * the Unicode value and not the key symbol | ||||
|    * the Unicode value and not the key symbol, unless they | ||||
|    * contain the input method flag. | ||||
|    */ | ||||
|   if (event->keyval == 0 && (event->flags & CLUTTER_EVENT_FLAG_SYNTHETIC)) | ||||
|   if (event->keyval == 0 && (event->flags & CLUTTER_EVENT_FLAG_SYNTHETIC) && | ||||
|       !(event->flags & CLUTTER_EVENT_FLAG_INPUT_METHOD)) | ||||
|     res = FALSE; | ||||
|   else | ||||
|     res = clutter_binding_pool_activate (pool, event->keyval, | ||||
| @@ -2141,6 +2288,20 @@ clutter_text_key_press (ClutterActor    *actor, | ||||
|   return CLUTTER_EVENT_PROPAGATE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| clutter_text_key_release (ClutterActor    *actor, | ||||
|                           ClutterKeyEvent *event) | ||||
| { | ||||
|   ClutterText *self = CLUTTER_TEXT (actor); | ||||
|   ClutterTextPrivate *priv = self->priv; | ||||
|  | ||||
|   if (clutter_input_focus_is_focused (priv->input_focus) && | ||||
|       clutter_input_focus_filter_key_event (priv->input_focus, event)) | ||||
|     return CLUTTER_EVENT_STOP; | ||||
|  | ||||
|   return CLUTTER_EVENT_PROPAGATE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_text_compute_layout_offsets (ClutterText           *self, | ||||
|                                      PangoLayout           *layout, | ||||
| @@ -2230,13 +2391,7 @@ clutter_text_paint (ClutterActor *self) | ||||
|   float alloc_width; | ||||
|   float alloc_height; | ||||
|  | ||||
|   /* FIXME: this should not be needed, but apparently the text-cache | ||||
|    * test unit manages to get in a situation where the active frame | ||||
|    * buffer is NULL | ||||
|    */ | ||||
|   fb = _clutter_actor_get_active_framebuffer (self); | ||||
|   if (fb == NULL) | ||||
|     fb = cogl_get_draw_framebuffer (); | ||||
|   fb = cogl_get_draw_framebuffer (); | ||||
|  | ||||
|   /* Note that if anything in this paint method changes it needs to be | ||||
|      reflected in the get_paint_volume implementation which is tightly | ||||
| @@ -2659,11 +2814,33 @@ clutter_text_has_overlaps (ClutterActor *self) | ||||
|   return clutter_text_should_draw_cursor ((ClutterText *) self); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_text_im_focus (ClutterText *text) | ||||
| { | ||||
|   ClutterTextPrivate *priv = text->priv; | ||||
|   ClutterBackend *backend = clutter_get_default_backend (); | ||||
|   ClutterInputMethod *method = clutter_backend_get_input_method (backend); | ||||
|  | ||||
|   if (!method) | ||||
|     return; | ||||
|  | ||||
|   clutter_input_method_focus_in (method, priv->input_focus); | ||||
|   clutter_input_focus_set_content_purpose (priv->input_focus, | ||||
|                                            priv->input_purpose); | ||||
|   clutter_input_focus_set_content_hints (priv->input_focus, | ||||
|                                          priv->input_hints); | ||||
|   clutter_input_focus_set_can_show_preedit (priv->input_focus, TRUE); | ||||
|   update_cursor_location (text); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_text_key_focus_in (ClutterActor *actor) | ||||
| { | ||||
|   ClutterTextPrivate *priv = CLUTTER_TEXT (actor)->priv; | ||||
|  | ||||
|   if (priv->editable) | ||||
|     clutter_text_im_focus (CLUTTER_TEXT (actor)); | ||||
|  | ||||
|   priv->has_focus = TRUE; | ||||
|  | ||||
|   clutter_text_queue_redraw (actor); | ||||
| @@ -2673,9 +2850,17 @@ static void | ||||
| clutter_text_key_focus_out (ClutterActor *actor) | ||||
| { | ||||
|   ClutterTextPrivate *priv = CLUTTER_TEXT (actor)->priv; | ||||
|   ClutterBackend *backend = clutter_get_default_backend (); | ||||
|   ClutterInputMethod *method = clutter_backend_get_input_method (backend); | ||||
|  | ||||
|   priv->has_focus = FALSE; | ||||
|  | ||||
|   if (priv->editable && clutter_input_focus_is_focused (priv->input_focus)) | ||||
|     { | ||||
|       clutter_text_set_preedit_string (CLUTTER_TEXT (actor), NULL, NULL, 0); | ||||
|       clutter_input_method_focus_out (method); | ||||
|     } | ||||
|  | ||||
|   clutter_text_queue_redraw (actor); | ||||
| } | ||||
|  | ||||
| @@ -3369,6 +3554,7 @@ clutter_text_class_init (ClutterTextClass *klass) | ||||
|   actor_class->get_preferred_height = clutter_text_get_preferred_height; | ||||
|   actor_class->allocate = clutter_text_allocate; | ||||
|   actor_class->key_press_event = clutter_text_key_press; | ||||
|   actor_class->key_release_event = clutter_text_key_release; | ||||
|   actor_class->button_press_event = clutter_text_button_press; | ||||
|   actor_class->button_release_event = clutter_text_button_release; | ||||
|   actor_class->motion_event = clutter_text_motion; | ||||
| @@ -3869,6 +4055,22 @@ clutter_text_class_init (ClutterTextClass *klass) | ||||
|   obj_props[PROP_SELECTED_TEXT_COLOR_SET] = pspec; | ||||
|   g_object_class_install_property (gobject_class, PROP_SELECTED_TEXT_COLOR_SET, pspec); | ||||
|  | ||||
|   pspec = g_param_spec_flags ("input-hints", | ||||
|                               P_("Input hints"), | ||||
|                               P_("Input hints"), | ||||
|                               CLUTTER_TYPE_INPUT_CONTENT_HINT_FLAGS, | ||||
|                               0, CLUTTER_PARAM_READWRITE); | ||||
|   obj_props[PROP_INPUT_HINTS] = pspec; | ||||
|   g_object_class_install_property (gobject_class, PROP_INPUT_HINTS, pspec); | ||||
|  | ||||
|   pspec = g_param_spec_enum ("input-purpose", | ||||
|                              P_("Input purpose"), | ||||
|                              P_("Input purpose"), | ||||
|                              CLUTTER_TYPE_INPUT_CONTENT_PURPOSE, | ||||
|                              0, CLUTTER_PARAM_READWRITE); | ||||
|   obj_props[PROP_INPUT_PURPOSE] = pspec; | ||||
|   g_object_class_install_property (gobject_class, PROP_INPUT_PURPOSE, pspec); | ||||
|  | ||||
|   /** | ||||
|    * ClutterText::text-changed: | ||||
|    * @self: the #ClutterText that emitted the signal | ||||
| @@ -4169,6 +4371,8 @@ clutter_text_init (ClutterText *self) | ||||
|     g_signal_connect (self, "notify::text-direction", | ||||
|                       G_CALLBACK (clutter_text_direction_changed_cb), | ||||
|                       NULL); | ||||
|  | ||||
|   priv->input_focus = clutter_text_input_focus_new (self); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -4315,6 +4519,27 @@ buffer_deleted_text (ClutterTextBuffer *buffer, | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_text_queue_redraw_or_relayout (ClutterText *self) | ||||
| { | ||||
|   ClutterActor *actor = CLUTTER_ACTOR (self); | ||||
|   gfloat preferred_width; | ||||
|   gfloat preferred_height; | ||||
|  | ||||
|   clutter_text_dirty_cache (self); | ||||
|  | ||||
|   /* we're using our private implementations here to avoid the caching done by ClutterActor */ | ||||
|   clutter_text_get_preferred_width (actor, -1, NULL, &preferred_width); | ||||
|   clutter_text_get_preferred_height (actor, preferred_width, NULL, &preferred_height); | ||||
|  | ||||
|   if (clutter_actor_has_allocation (actor) && | ||||
|       (fabsf (preferred_width - clutter_actor_get_width (actor)) > 0.001 || | ||||
|        fabsf (preferred_height - clutter_actor_get_height (actor)) > 0.001)) | ||||
|     clutter_actor_queue_relayout (actor); | ||||
|   else | ||||
|     clutter_text_queue_redraw (actor); | ||||
| } | ||||
|  | ||||
| static void | ||||
| buffer_notify_text (ClutterTextBuffer *buffer, | ||||
|                     GParamSpec        *spec, | ||||
| @@ -4322,9 +4547,7 @@ buffer_notify_text (ClutterTextBuffer *buffer, | ||||
| { | ||||
|   g_object_freeze_notify (G_OBJECT (self)); | ||||
|  | ||||
|   clutter_text_dirty_cache (self); | ||||
|  | ||||
|   clutter_actor_queue_relayout (CLUTTER_ACTOR (self)); | ||||
|   clutter_text_queue_redraw_or_relayout (self); | ||||
|  | ||||
|   g_signal_emit (self, text_signals[TEXT_CHANGED], 0); | ||||
|   g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_TEXT]); | ||||
| @@ -4459,6 +4682,8 @@ void | ||||
| clutter_text_set_editable (ClutterText *self, | ||||
|                            gboolean     editable) | ||||
| { | ||||
|   ClutterBackend *backend = clutter_get_default_backend (); | ||||
|   ClutterInputMethod *method = clutter_backend_get_input_method (backend); | ||||
|   ClutterTextPrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_TEXT (self)); | ||||
| @@ -4469,6 +4694,14 @@ clutter_text_set_editable (ClutterText *self, | ||||
|     { | ||||
|       priv->editable = editable; | ||||
|  | ||||
|       if (method) | ||||
|         { | ||||
|           if (!priv->editable && clutter_input_focus_is_focused (priv->input_focus)) | ||||
|             clutter_input_method_focus_out (method); | ||||
|           else if (priv->has_focus) | ||||
|             clutter_text_im_focus (self); | ||||
|         } | ||||
|  | ||||
|       clutter_text_queue_redraw (CLUTTER_ACTOR (self)); | ||||
|  | ||||
|       g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_EDITABLE]); | ||||
| @@ -4666,8 +4899,7 @@ clutter_text_set_cursor_visible (ClutterText *self, | ||||
|     { | ||||
|       priv->cursor_visible = cursor_visible; | ||||
|  | ||||
|       clutter_text_dirty_cache (self); | ||||
|       clutter_actor_queue_relayout (CLUTTER_ACTOR (self)); | ||||
|       clutter_text_queue_redraw_or_relayout (self); | ||||
|  | ||||
|       g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_CURSOR_VISIBLE]); | ||||
|     } | ||||
| @@ -5568,9 +5800,7 @@ clutter_text_set_line_alignment (ClutterText    *self, | ||||
|     { | ||||
|       priv->alignment = alignment; | ||||
|  | ||||
|       clutter_text_dirty_cache (self); | ||||
|  | ||||
|       clutter_actor_queue_relayout (CLUTTER_ACTOR (self)); | ||||
|       clutter_text_queue_redraw_or_relayout (self); | ||||
|  | ||||
|       g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_LINE_ALIGNMENT]); | ||||
|     } | ||||
| @@ -5625,9 +5855,7 @@ clutter_text_set_use_markup (ClutterText *self, | ||||
|   if (setting) | ||||
|     clutter_text_set_markup_internal (self, text); | ||||
|  | ||||
|   clutter_text_dirty_cache (self); | ||||
|  | ||||
|   clutter_actor_queue_relayout (CLUTTER_ACTOR (self)); | ||||
|   clutter_text_queue_redraw_or_relayout (self); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -5674,9 +5902,7 @@ clutter_text_set_justify (ClutterText *self, | ||||
|     { | ||||
|       priv->justify = justify; | ||||
|  | ||||
|       clutter_text_dirty_cache (self); | ||||
|  | ||||
|       clutter_actor_queue_relayout (CLUTTER_ACTOR (self)); | ||||
|       clutter_text_queue_redraw_or_relayout (self); | ||||
|  | ||||
|       g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_JUSTIFY]); | ||||
|     } | ||||
| @@ -6243,8 +6469,7 @@ clutter_text_set_preedit_string (ClutterText   *self, | ||||
|       priv->preedit_set = TRUE; | ||||
|     } | ||||
|  | ||||
|   clutter_text_dirty_cache (self); | ||||
|   clutter_actor_queue_relayout (CLUTTER_ACTOR (self)); | ||||
|   clutter_text_queue_redraw_or_relayout (self); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -6298,3 +6523,53 @@ clutter_text_get_cursor_rect (ClutterText *self, | ||||
|  | ||||
|   *rect = self->priv->cursor_rect; | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_text_set_input_hints (ClutterText                  *self, | ||||
|                               ClutterInputContentHintFlags  hints) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_TEXT (self)); | ||||
|  | ||||
|   self->priv->input_hints = hints; | ||||
|  | ||||
|   if (clutter_input_focus_is_focused (self->priv->input_focus)) | ||||
|     clutter_input_focus_set_content_hints (self->priv->input_focus, hints); | ||||
|   g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_INPUT_HINTS]); | ||||
| } | ||||
|  | ||||
| ClutterInputContentHintFlags | ||||
| clutter_text_get_input_hints (ClutterText *self) | ||||
| { | ||||
|   g_return_val_if_fail (CLUTTER_IS_TEXT (self), 0); | ||||
|  | ||||
|   return self->priv->input_hints; | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_text_set_input_purpose (ClutterText                *self, | ||||
|                                 ClutterInputContentPurpose  purpose) | ||||
| { | ||||
|   g_return_if_fail (CLUTTER_IS_TEXT (self)); | ||||
|  | ||||
|   self->priv->input_purpose = purpose; | ||||
|  | ||||
|   if (clutter_input_focus_is_focused (self->priv->input_focus)) | ||||
|     clutter_input_focus_set_content_purpose (self->priv->input_focus, purpose); | ||||
|   g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_INPUT_PURPOSE]); | ||||
| } | ||||
|  | ||||
| ClutterInputContentPurpose | ||||
| clutter_text_get_input_purpose (ClutterText *self) | ||||
| { | ||||
|   g_return_val_if_fail (CLUTTER_IS_TEXT (self), 0); | ||||
|  | ||||
|   return self->priv->input_purpose; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| clutter_text_has_preedit (ClutterText *self) | ||||
| { | ||||
|   g_return_val_if_fail (CLUTTER_IS_TEXT (self), FALSE); | ||||
|  | ||||
|   return self->priv->preedit_set; | ||||
| } | ||||
|   | ||||
| @@ -302,6 +302,20 @@ void                  clutter_text_get_layout_offsets   (ClutterText           * | ||||
|                                                          gint                  *x, | ||||
|                                                          gint                  *y); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void                  clutter_text_set_input_hints (ClutterText                  *self, | ||||
|                                                     ClutterInputContentHintFlags  hints); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| void                  clutter_text_set_input_purpose (ClutterText                *self, | ||||
|                                                       ClutterInputContentPurpose  purpose); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| ClutterInputContentHintFlags clutter_text_get_input_hints (ClutterText *self); | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| ClutterInputContentPurpose clutter_text_get_input_purpose (ClutterText *self); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| gboolean              clutter_text_has_preedit (ClutterText *self); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __CLUTTER_TEXT_H__ */ | ||||
|   | ||||
| @@ -97,6 +97,9 @@ typedef struct _ClutterInputDeviceTool          ClutterInputDeviceTool; | ||||
| typedef struct _ClutterInputDevice              ClutterInputDevice; | ||||
| typedef struct _ClutterVirtualInputDevice       ClutterVirtualInputDevice; | ||||
|  | ||||
| typedef struct _ClutterInputMethod              ClutterInputMethod; | ||||
| typedef struct _ClutterInputFocus               ClutterInputFocus; | ||||
|  | ||||
| typedef CoglMatrix                              ClutterMatrix; | ||||
|  | ||||
| typedef union _ClutterEvent                     ClutterEvent; | ||||
|   | ||||
| @@ -115,6 +115,74 @@ clutter_virtual_input_device_notify_keyval (ClutterVirtualInputDevice *virtual_d | ||||
|   klass->notify_keyval (virtual_device, time_us, keyval, key_state); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_virtual_input_device_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                      uint64_t                   time_us, | ||||
|                                                      ClutterScrollDirection     direction, | ||||
|                                                      ClutterScrollSource        scroll_source) | ||||
| { | ||||
|   ClutterVirtualInputDeviceClass *klass = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_GET_CLASS (virtual_device); | ||||
|  | ||||
|   klass->notify_discrete_scroll (virtual_device, time_us, | ||||
|                                  direction, scroll_source); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_virtual_input_device_notify_scroll_continuous (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                        uint64_t                   time_us, | ||||
|                                                        double                     dx, | ||||
|                                                        double                     dy, | ||||
|                                                        ClutterScrollSource        scroll_source, | ||||
|                                                        ClutterScrollFinishFlags   finish_flags) | ||||
| { | ||||
|   ClutterVirtualInputDeviceClass *klass = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_GET_CLASS (virtual_device); | ||||
|  | ||||
|   klass->notify_scroll_continuous (virtual_device, time_us, | ||||
|                                    dx, dy, scroll_source, finish_flags); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_virtual_input_device_notify_touch_down (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                 uint64_t                   time_us, | ||||
|                                                 int                        slot, | ||||
|                                                 double                     x, | ||||
|                                                 double                     y) | ||||
| { | ||||
|   ClutterVirtualInputDeviceClass *klass = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_GET_CLASS (virtual_device); | ||||
|  | ||||
|   klass->notify_touch_down (virtual_device, time_us, | ||||
|                             slot, x, y); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_virtual_input_device_notify_touch_motion (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                   uint64_t                   time_us, | ||||
|                                                   int                        slot, | ||||
|                                                   double                     x, | ||||
|                                                   double                     y) | ||||
| { | ||||
|   ClutterVirtualInputDeviceClass *klass = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_GET_CLASS (virtual_device); | ||||
|  | ||||
|   klass->notify_touch_motion (virtual_device, time_us, | ||||
|                               slot, x, y); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_virtual_input_device_notify_touch_up (ClutterVirtualInputDevice *virtual_device, | ||||
|                                               uint64_t                   time_us, | ||||
|                                               int                        slot) | ||||
| { | ||||
|   ClutterVirtualInputDeviceClass *klass = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_GET_CLASS (virtual_device); | ||||
|  | ||||
|   klass->notify_touch_up (virtual_device, time_us, | ||||
|                           slot); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * clutter_virtual_input_device_get_manager: | ||||
|  * @virtual_device: a virtual device | ||||
|   | ||||
| @@ -76,6 +76,34 @@ struct _ClutterVirtualInputDeviceClass | ||||
|                          uint64_t                   time_us, | ||||
|                          uint32_t                   keyval, | ||||
|                          ClutterKeyState            key_state); | ||||
|  | ||||
|   void (*notify_discrete_scroll) (ClutterVirtualInputDevice *virtual_device, | ||||
|                                   uint64_t                   time_us, | ||||
|                                   ClutterScrollDirection     direction, | ||||
|                                   ClutterScrollSource        scroll_source); | ||||
|  | ||||
|   void (*notify_scroll_continuous) (ClutterVirtualInputDevice *virtual_device, | ||||
|                                     uint64_t                   time_us, | ||||
|                                     double                     dx, | ||||
|                                     double                     dy, | ||||
|                                     ClutterScrollSource        scroll_source, | ||||
|                                     ClutterScrollFinishFlags   finish_flags); | ||||
|  | ||||
|   void (*notify_touch_down) (ClutterVirtualInputDevice *virtual_device, | ||||
|                              uint64_t                   time_us, | ||||
|                              int                        slot, | ||||
|                              double                     x, | ||||
|                              double                     y); | ||||
|  | ||||
|   void (*notify_touch_motion) (ClutterVirtualInputDevice *virtual_device, | ||||
|                                uint64_t                   time_us, | ||||
|                                int                        slot, | ||||
|                                double                     x, | ||||
|                                double                     y); | ||||
|  | ||||
|   void (*notify_touch_up) (ClutterVirtualInputDevice *virtual_device, | ||||
|                            uint64_t                   time_us, | ||||
|                            int                        slot); | ||||
| }; | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| @@ -108,6 +136,39 @@ void clutter_virtual_input_device_notify_keyval (ClutterVirtualInputDevice *virt | ||||
|                                                  uint32_t                   keyval, | ||||
|                                                  ClutterKeyState            key_state); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| void clutter_virtual_input_device_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                           uint64_t                   time_us, | ||||
|                                                           ClutterScrollDirection     direction, | ||||
|                                                           ClutterScrollSource        scroll_source); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| void clutter_virtual_input_device_notify_scroll_continuous (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                             uint64_t                   time_us, | ||||
|                                                             double                     dx, | ||||
|                                                             double                     dy, | ||||
|                                                             ClutterScrollSource        scroll_source, | ||||
|                                                             ClutterScrollFinishFlags   finish_flags); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| void clutter_virtual_input_device_notify_touch_down (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                      uint64_t                   time_us, | ||||
|                                                      int                        slot, | ||||
|                                                      double                     x, | ||||
|                                                      double                     y); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| void clutter_virtual_input_device_notify_touch_motion (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                        uint64_t                   time_us, | ||||
|                                                        int                        slot, | ||||
|                                                        double                     x, | ||||
|                                                        double                     y); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| void clutter_virtual_input_device_notify_touch_up (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                    uint64_t                   time_us, | ||||
|                                                    int                        slot); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| ClutterDeviceManager * clutter_virtual_input_device_get_manager (ClutterVirtualInputDevice *virtual_device); | ||||
|  | ||||
|   | ||||
| @@ -72,6 +72,8 @@ | ||||
| #include "clutter-image.h" | ||||
| #include "clutter-input-device.h" | ||||
| #include "clutter-input-device-tool.h" | ||||
| #include "clutter-input-method.h" | ||||
| #include "clutter-input-focus.h" | ||||
| #include "clutter-interval.h" | ||||
| #include "clutter-keyframe-transition.h" | ||||
| #include "clutter-keysyms.h" | ||||
|   | ||||
| @@ -48,6 +48,7 @@ | ||||
| #include "clutter-private.h" | ||||
| #include "clutter-main.h" | ||||
| #include "clutter-stage-private.h" | ||||
| #include "clutter-settings-private.h" | ||||
|  | ||||
| #ifdef COGL_HAS_EGL_SUPPORT | ||||
| #include "clutter-egl.h" | ||||
| @@ -60,6 +61,8 @@ clutter_backend_egl_native_dispose (GObject *gobject) | ||||
| { | ||||
|   ClutterBackendEglNative *backend_egl_native = CLUTTER_BACKEND_EGL_NATIVE (gobject); | ||||
|  | ||||
|   g_clear_object (&backend_egl_native->xsettings); | ||||
|  | ||||
|   if (backend_egl_native->event_timer != NULL) | ||||
|     { | ||||
|       g_timer_destroy (backend_egl_native->event_timer); | ||||
| @@ -77,9 +80,181 @@ clutter_backend_egl_native_class_init (ClutterBackendEglNativeClass *klass) | ||||
|   gobject_class->dispose = clutter_backend_egl_native_dispose; | ||||
| } | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   cairo_antialias_t cairo_antialias; | ||||
|   gint clutter_font_antialias; | ||||
|  | ||||
|   cairo_hint_style_t cairo_hint_style; | ||||
|   const char *clutter_font_hint_style; | ||||
|  | ||||
|   cairo_subpixel_order_t cairo_subpixel_order; | ||||
|   const char *clutter_font_subpixel_order; | ||||
| } FontSettings; | ||||
|  | ||||
| static void | ||||
| get_font_gsettings (GSettings    *xsettings, | ||||
|                     FontSettings *output) | ||||
| { | ||||
|   /* org.gnome.settings-daemon.GsdFontAntialiasingMode */ | ||||
|   static const struct | ||||
|   { | ||||
|     cairo_antialias_t cairo_antialias; | ||||
|     gint clutter_font_antialias; | ||||
|   } | ||||
|   antialiasings[] = | ||||
|   { | ||||
|     /* none=0      */ {CAIRO_ANTIALIAS_NONE,     0}, | ||||
|     /* grayscale=1 */ {CAIRO_ANTIALIAS_GRAY,     1}, | ||||
|     /* rgba=2      */ {CAIRO_ANTIALIAS_SUBPIXEL, 1}, | ||||
|   }; | ||||
|  | ||||
|   /* org.gnome.settings-daemon.GsdFontHinting */ | ||||
|   static const struct | ||||
|   { | ||||
|     cairo_hint_style_t cairo_hint_style; | ||||
|     const char *clutter_font_hint_style; | ||||
|   } | ||||
|   hintings[] = | ||||
|   { | ||||
|     /* none=0   */ {CAIRO_HINT_STYLE_NONE,   "hintnone"}, | ||||
|     /* slight=1 */ {CAIRO_HINT_STYLE_SLIGHT, "hintslight"}, | ||||
|     /* medium=2 */ {CAIRO_HINT_STYLE_MEDIUM, "hintmedium"}, | ||||
|     /* full=3   */ {CAIRO_HINT_STYLE_FULL,   "hintfull"}, | ||||
|   }; | ||||
|  | ||||
|   /* org.gnome.settings-daemon.GsdFontRgbaOrder */ | ||||
|   static const struct | ||||
|   { | ||||
|     cairo_subpixel_order_t cairo_subpixel_order; | ||||
|     const char *clutter_font_subpixel_order; | ||||
|   } | ||||
|   rgba_orders[] = | ||||
|   { | ||||
|     /* rgba=0 */ {CAIRO_SUBPIXEL_ORDER_RGB,  "rgb"}, /* XXX what is 'rgba'? */ | ||||
|     /* rgb=1  */ {CAIRO_SUBPIXEL_ORDER_RGB,  "rgb"}, | ||||
|     /* bgr=2  */ {CAIRO_SUBPIXEL_ORDER_BGR,  "bgr"}, | ||||
|     /* vrgb=3 */ {CAIRO_SUBPIXEL_ORDER_VRGB, "vrgb"}, | ||||
|     /* vbgr=4 */ {CAIRO_SUBPIXEL_ORDER_VBGR, "vbgr"}, | ||||
|   }; | ||||
|   guint i; | ||||
|  | ||||
|   i = g_settings_get_enum (xsettings, "hinting"); | ||||
|   if (i < G_N_ELEMENTS (hintings)) | ||||
|     { | ||||
|       output->cairo_hint_style = hintings[i].cairo_hint_style; | ||||
|       output->clutter_font_hint_style = hintings[i].clutter_font_hint_style; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       output->cairo_hint_style = CAIRO_HINT_STYLE_DEFAULT; | ||||
|       output->clutter_font_hint_style = NULL; | ||||
|     } | ||||
|  | ||||
|   i = g_settings_get_enum (xsettings, "antialiasing"); | ||||
|   if (i < G_N_ELEMENTS (antialiasings)) | ||||
|     { | ||||
|       output->cairo_antialias = antialiasings[i].cairo_antialias; | ||||
|       output->clutter_font_antialias = antialiasings[i].clutter_font_antialias; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       output->cairo_antialias = CAIRO_ANTIALIAS_DEFAULT; | ||||
|       output->clutter_font_antialias = -1; | ||||
|     } | ||||
|  | ||||
|   i = g_settings_get_enum (xsettings, "rgba-order"); | ||||
|   if (i < G_N_ELEMENTS (rgba_orders)) | ||||
|     { | ||||
|       output->cairo_subpixel_order = rgba_orders[i].cairo_subpixel_order; | ||||
|       output->clutter_font_subpixel_order = rgba_orders[i].clutter_font_subpixel_order; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       output->cairo_subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT; | ||||
|       output->clutter_font_subpixel_order = NULL; | ||||
|     } | ||||
|  | ||||
|   if (output->cairo_antialias == CAIRO_ANTIALIAS_GRAY) | ||||
|     output->clutter_font_subpixel_order = "none"; | ||||
| } | ||||
|  | ||||
| static void | ||||
| init_font_options (ClutterBackendEglNative *backend_egl_native) | ||||
| { | ||||
|   GSettings *xsettings = backend_egl_native->xsettings; | ||||
|   cairo_font_options_t *options = cairo_font_options_create (); | ||||
|   FontSettings fs; | ||||
|  | ||||
|   get_font_gsettings (xsettings, &fs); | ||||
|  | ||||
|   cairo_font_options_set_hint_style (options, fs.cairo_hint_style); | ||||
|   cairo_font_options_set_antialias (options, fs.cairo_antialias); | ||||
|   cairo_font_options_set_subpixel_order (options, fs.cairo_subpixel_order); | ||||
|  | ||||
|   clutter_backend_set_font_options (CLUTTER_BACKEND (backend_egl_native), | ||||
|                                     options); | ||||
|  | ||||
|   cairo_font_options_destroy (options); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| on_xsettings_change_event (GSettings *xsettings, | ||||
|                            gpointer   keys, | ||||
|                            gint       n_keys, | ||||
|                            gpointer   user_data) | ||||
| { | ||||
|   /* | ||||
|    * A simpler alternative to this function that does not update the screen | ||||
|    * immediately (like macOS :P): | ||||
|    * | ||||
|    *   init_font_options (CLUTTER_BACKEND_EGL_NATIVE (user_data)); | ||||
|    * | ||||
|    * which has the added benefit of eliminating the need for all the | ||||
|    * FontSettings.clutter_ fields. However the below approach is better for | ||||
|    * testing settings and more consistent with the existing x11 backend... | ||||
|    */ | ||||
|   ClutterSettings *csettings = clutter_settings_get_default (); | ||||
|   FontSettings fs; | ||||
|   gint hinting; | ||||
|  | ||||
|   get_font_gsettings (xsettings, &fs); | ||||
|   hinting = fs.cairo_hint_style == CAIRO_HINT_STYLE_NONE ? 0 : 1; | ||||
|   g_object_set (csettings, | ||||
|                 "font-hinting",        hinting, | ||||
|                 "font-hint-style",     fs.clutter_font_hint_style, | ||||
|                 "font-antialias",      fs.clutter_font_antialias, | ||||
|                 "font-subpixel-order", fs.clutter_font_subpixel_order, | ||||
|                 NULL); | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_backend_egl_native_init (ClutterBackendEglNative *backend_egl_native) | ||||
| { | ||||
|   static const gchar xsettings_path[] = "org.gnome.settings-daemon.plugins.xsettings"; | ||||
|   GSettingsSchemaSource *source = g_settings_schema_source_get_default (); | ||||
|   GSettingsSchema *schema = g_settings_schema_source_lookup (source, | ||||
|                                                              xsettings_path, | ||||
|                                                              FALSE); | ||||
|  | ||||
|   if (!schema) | ||||
|     { | ||||
|       g_warning ("Failed to find schema: %s", xsettings_path); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       backend_egl_native->xsettings = g_settings_new_full (schema, NULL, NULL); | ||||
|       if (backend_egl_native->xsettings) | ||||
|         { | ||||
|           init_font_options (backend_egl_native); | ||||
|           g_signal_connect (backend_egl_native->xsettings, "change-event", | ||||
|                             G_CALLBACK (on_xsettings_change_event), | ||||
|                             backend_egl_native); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   backend_egl_native->event_timer = g_timer_new (); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -61,6 +61,9 @@ struct _ClutterBackendEglNative | ||||
|  | ||||
|   /* event timer */ | ||||
|   GTimer *event_timer; | ||||
|  | ||||
|   /* "xsettings" is still the defacto place for Xft settings, even in Wayland */ | ||||
|   GSettings *xsettings; | ||||
| }; | ||||
|  | ||||
| struct _ClutterBackendEglNativeClass | ||||
|   | ||||
| @@ -59,9 +59,6 @@ | ||||
|  | ||||
| #include "clutter-device-manager-evdev.h" | ||||
|  | ||||
| #define DISCRETE_SCROLL_STEP 10.0 | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Clutter makes the assumption that two core devices have ID's 2 and 3 (core | ||||
|  * pointer and core keyboard). | ||||
| @@ -400,168 +397,6 @@ notify_relative_tool_motion (ClutterInputDevice *input_device, | ||||
|   queue_event (event); | ||||
| } | ||||
|  | ||||
| static ClutterScrollDirection | ||||
| discrete_to_direction (gdouble discrete_x, | ||||
|                        gdouble discrete_y) | ||||
| { | ||||
|   if (discrete_x > 0) | ||||
|     return CLUTTER_SCROLL_RIGHT; | ||||
|   else if (discrete_x < 0) | ||||
|     return CLUTTER_SCROLL_LEFT; | ||||
|   else if (discrete_y > 0) | ||||
|     return CLUTTER_SCROLL_DOWN; | ||||
|   else if (discrete_y < 0) | ||||
|     return CLUTTER_SCROLL_UP; | ||||
|   else | ||||
|     return CLUTTER_SCROLL_SMOOTH; | ||||
| } | ||||
|  | ||||
| static void | ||||
| notify_discrete_scroll (ClutterInputDevice     *input_device, | ||||
|                         guint64                 time_us, | ||||
|                         ClutterScrollDirection  direction, | ||||
|                         ClutterScrollSource     scroll_source, | ||||
|                         gboolean                emulated) | ||||
| { | ||||
|   ClutterInputDeviceEvdev *device_evdev; | ||||
|   ClutterSeatEvdev *seat; | ||||
|   ClutterStage *stage; | ||||
|   ClutterEvent *event = NULL; | ||||
|  | ||||
|   if (direction == CLUTTER_SCROLL_SMOOTH) | ||||
|     return; | ||||
|  | ||||
|   /* We can drop the event on the floor if no stage has been | ||||
|    * associated with the device yet. */ | ||||
|   stage = _clutter_input_device_get_stage (input_device); | ||||
|   if (stage == NULL) | ||||
|     return; | ||||
|  | ||||
|   device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device); | ||||
|   seat = _clutter_input_device_evdev_get_seat (device_evdev); | ||||
|  | ||||
|   event = clutter_event_new (CLUTTER_SCROLL); | ||||
|  | ||||
|   _clutter_evdev_event_set_time_usec (event, time_us); | ||||
|   event->scroll.time = us2ms (time_us); | ||||
|   event->scroll.stage = CLUTTER_STAGE (stage); | ||||
|   event->scroll.device = seat->core_pointer; | ||||
|   _clutter_xkb_translate_state (event, seat->xkb, seat->button_state); | ||||
|  | ||||
|   event->scroll.direction = direction; | ||||
|  | ||||
|   event->scroll.x = seat->pointer_x; | ||||
|   event->scroll.y = seat->pointer_y; | ||||
|   clutter_event_set_device (event, seat->core_pointer); | ||||
|   clutter_event_set_source_device (event, input_device); | ||||
|   event->scroll.scroll_source = scroll_source; | ||||
|  | ||||
|   _clutter_event_set_pointer_emulated (event, emulated); | ||||
|  | ||||
|   queue_event (event); | ||||
| } | ||||
|  | ||||
| static void | ||||
| notify_scroll (ClutterInputDevice       *input_device, | ||||
|                guint64                   time_us, | ||||
|                gdouble                   dx, | ||||
|                gdouble                   dy, | ||||
|                ClutterScrollSource       source, | ||||
|                ClutterScrollFinishFlags  flags, | ||||
|                gboolean                  emulated) | ||||
| { | ||||
|   ClutterInputDeviceEvdev *device_evdev; | ||||
|   ClutterSeatEvdev *seat; | ||||
|   ClutterStage *stage; | ||||
|   ClutterEvent *event = NULL; | ||||
|   gdouble scroll_factor; | ||||
|  | ||||
|   /* We can drop the event on the floor if no stage has been | ||||
|    * associated with the device yet. */ | ||||
|   stage = _clutter_input_device_get_stage (input_device); | ||||
|   if (stage == NULL) | ||||
|     return; | ||||
|  | ||||
|   device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device); | ||||
|   seat = _clutter_input_device_evdev_get_seat (device_evdev); | ||||
|  | ||||
|   event = clutter_event_new (CLUTTER_SCROLL); | ||||
|  | ||||
|   _clutter_evdev_event_set_time_usec (event, time_us); | ||||
|   event->scroll.time = us2ms (time_us); | ||||
|   event->scroll.stage = CLUTTER_STAGE (stage); | ||||
|   event->scroll.device = seat->core_pointer; | ||||
|   _clutter_xkb_translate_state (event, seat->xkb, seat->button_state); | ||||
|  | ||||
|   /* libinput pointer axis events are in pointer motion coordinate space. | ||||
|    * To convert to Xi2 discrete step coordinate space, multiply the factor | ||||
|    * 1/10. */ | ||||
|   event->scroll.direction = CLUTTER_SCROLL_SMOOTH; | ||||
|   scroll_factor = 1.0 / DISCRETE_SCROLL_STEP; | ||||
|   clutter_event_set_scroll_delta (event, | ||||
|                                   scroll_factor * dx, | ||||
|                                   scroll_factor * dy); | ||||
|  | ||||
|   event->scroll.x = seat->pointer_x; | ||||
|   event->scroll.y = seat->pointer_y; | ||||
|   clutter_event_set_device (event, seat->core_pointer); | ||||
|   clutter_event_set_source_device (event, input_device); | ||||
|   event->scroll.scroll_source = source; | ||||
|   event->scroll.finish_flags = flags; | ||||
|  | ||||
|   _clutter_event_set_pointer_emulated (event, emulated); | ||||
|  | ||||
|   queue_event (event); | ||||
| } | ||||
|  | ||||
| static void | ||||
| notify_touch_event (ClutterInputDevice *input_device, | ||||
| 		    ClutterEventType    evtype, | ||||
| 		    guint64             time_us, | ||||
| 		    gint32              slot, | ||||
| 		    gdouble             x, | ||||
| 		    gdouble             y) | ||||
| { | ||||
|   ClutterInputDeviceEvdev *device_evdev; | ||||
|   ClutterSeatEvdev *seat; | ||||
|   ClutterStage *stage; | ||||
|   ClutterEvent *event = NULL; | ||||
|  | ||||
|   /* We can drop the event on the floor if no stage has been | ||||
|    * associated with the device yet. */ | ||||
|   stage = _clutter_input_device_get_stage (input_device); | ||||
|   if (stage == NULL) | ||||
|     return; | ||||
|  | ||||
|   device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device); | ||||
|   seat = _clutter_input_device_evdev_get_seat (device_evdev); | ||||
|  | ||||
|   event = clutter_event_new (evtype); | ||||
|  | ||||
|   _clutter_evdev_event_set_time_usec (event, time_us); | ||||
|   event->touch.time = us2ms (time_us); | ||||
|   event->touch.stage = CLUTTER_STAGE (stage); | ||||
|   event->touch.device = seat->core_pointer; | ||||
|   event->touch.x = x; | ||||
|   event->touch.y = y; | ||||
|   clutter_input_device_evdev_translate_coordinates (input_device, stage, | ||||
|                                                     &event->touch.x, | ||||
|                                                     &event->touch.y); | ||||
|  | ||||
|   /* "NULL" sequences are special cased in clutter */ | ||||
|   event->touch.sequence = GINT_TO_POINTER (slot + 1); | ||||
|   _clutter_xkb_translate_state (event, seat->xkb, seat->button_state); | ||||
|  | ||||
|   if (evtype == CLUTTER_TOUCH_BEGIN || | ||||
|       evtype == CLUTTER_TOUCH_UPDATE) | ||||
|     event->touch.modifier_state |= CLUTTER_BUTTON1_MASK; | ||||
|  | ||||
|   clutter_event_set_device (event, seat->core_pointer); | ||||
|   clutter_event_set_source_device (event, input_device); | ||||
|  | ||||
|   queue_event (event); | ||||
| } | ||||
|  | ||||
| static void | ||||
| notify_pinch_gesture_event (ClutterInputDevice          *input_device, | ||||
|                             ClutterTouchpadGesturePhase  phase, | ||||
| @@ -958,10 +793,12 @@ evdev_add_device (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|       if (priv->main_seat->libinput_seat == NULL) | ||||
|         seat = priv->main_seat; | ||||
|       else | ||||
|         seat = clutter_seat_evdev_new (manager_evdev); | ||||
|         { | ||||
|           seat = clutter_seat_evdev_new (manager_evdev); | ||||
|           priv->seats = g_slist_append (priv->seats, seat); | ||||
|         } | ||||
|  | ||||
|       clutter_seat_evdev_set_libinput_seat (seat, libinput_seat); | ||||
|       priv->seats = g_slist_append (priv->seats, seat); | ||||
|     } | ||||
|  | ||||
|   device = _clutter_input_device_evdev_new (manager, seat, libinput_device); | ||||
| @@ -1084,7 +921,6 @@ clutter_device_manager_evdev_get_device (ClutterDeviceManager *manager, | ||||
|   ClutterDeviceManagerEvdev *manager_evdev; | ||||
|   ClutterDeviceManagerEvdevPrivate *priv; | ||||
|   GSList *l; | ||||
|   GSList *device_it; | ||||
|  | ||||
|   manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (manager); | ||||
|   priv = manager_evdev->priv; | ||||
| @@ -1092,14 +928,10 @@ clutter_device_manager_evdev_get_device (ClutterDeviceManager *manager, | ||||
|   for (l = priv->seats; l; l = l->next) | ||||
|     { | ||||
|       ClutterSeatEvdev *seat = l->data; | ||||
|       ClutterInputDevice *device = clutter_seat_evdev_get_device (seat, id); | ||||
|  | ||||
|       for (device_it = seat->devices; device_it; device_it = device_it->next) | ||||
|         { | ||||
|           ClutterInputDevice *device = device_it->data; | ||||
|  | ||||
|           if (clutter_input_device_get_device_id (device) == id) | ||||
|             return device; | ||||
|         } | ||||
|       if (device) | ||||
|         return device; | ||||
|     } | ||||
|  | ||||
|   return NULL; | ||||
| @@ -1153,40 +985,6 @@ process_base_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|   return handled; | ||||
| } | ||||
|  | ||||
| static void | ||||
| check_notify_discrete_scroll (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|                               ClutterInputDevice        *device, | ||||
|                               guint64                    time_us, | ||||
|                               ClutterScrollSource        scroll_source) | ||||
| { | ||||
|   ClutterInputDeviceEvdev *device_evdev = | ||||
|     CLUTTER_INPUT_DEVICE_EVDEV (device); | ||||
|   ClutterSeatEvdev *seat = _clutter_input_device_evdev_get_seat (device_evdev); | ||||
|   int i, n_xscrolls, n_yscrolls; | ||||
|  | ||||
|   n_xscrolls = floor (fabs (seat->accum_scroll_dx) / DISCRETE_SCROLL_STEP); | ||||
|   n_yscrolls = floor (fabs (seat->accum_scroll_dy) / DISCRETE_SCROLL_STEP); | ||||
|  | ||||
|   for (i = 0; i < n_xscrolls; i++) | ||||
|     { | ||||
|       notify_discrete_scroll (device, time_us, | ||||
|                               seat->accum_scroll_dx > 0 ? | ||||
|                               CLUTTER_SCROLL_RIGHT : CLUTTER_SCROLL_LEFT, | ||||
|                               scroll_source, TRUE); | ||||
|     } | ||||
|  | ||||
|   for (i = 0; i < n_yscrolls; i++) | ||||
|     { | ||||
|       notify_discrete_scroll (device, time_us, | ||||
|                               seat->accum_scroll_dy > 0 ? | ||||
|                               CLUTTER_SCROLL_DOWN : CLUTTER_SCROLL_UP, | ||||
|                               scroll_source, TRUE); | ||||
|     } | ||||
|  | ||||
|   seat->accum_scroll_dx = fmodf (seat->accum_scroll_dx, DISCRETE_SCROLL_STEP); | ||||
|   seat->accum_scroll_dy = fmodf (seat->accum_scroll_dy, DISCRETE_SCROLL_STEP); | ||||
| } | ||||
|  | ||||
| static ClutterScrollSource | ||||
| translate_scroll_source (enum libinput_pointer_axis_source source) | ||||
| { | ||||
| @@ -1334,6 +1132,115 @@ seat_from_device (ClutterInputDevice *device) | ||||
|   return _clutter_input_device_evdev_get_seat (device_evdev); | ||||
| } | ||||
|  | ||||
| static void | ||||
| notify_continuous_axis (ClutterSeatEvdev              *seat, | ||||
|                         ClutterInputDevice            *device, | ||||
|                         uint64_t                       time_us, | ||||
|                         ClutterScrollSource            scroll_source, | ||||
|                         struct libinput_event_pointer *axis_event) | ||||
| { | ||||
|   gdouble dx = 0.0, dy = 0.0; | ||||
|   ClutterScrollFinishFlags finish_flags = CLUTTER_SCROLL_FINISHED_NONE; | ||||
|  | ||||
|   if (libinput_event_pointer_has_axis (axis_event, | ||||
|                                        LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL)) | ||||
|     { | ||||
|       dx = libinput_event_pointer_get_axis_value ( | ||||
|           axis_event, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL); | ||||
|  | ||||
|       if (fabs (dx) < DBL_EPSILON) | ||||
|         finish_flags |= CLUTTER_SCROLL_FINISHED_HORIZONTAL; | ||||
|     } | ||||
|   if (libinput_event_pointer_has_axis (axis_event, | ||||
|                                        LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL)) | ||||
|     { | ||||
|       dy = libinput_event_pointer_get_axis_value ( | ||||
|           axis_event, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL); | ||||
|  | ||||
|       if (fabs (dy) < DBL_EPSILON) | ||||
|         finish_flags |= CLUTTER_SCROLL_FINISHED_VERTICAL; | ||||
|     } | ||||
|  | ||||
|   clutter_seat_evdev_notify_scroll_continuous (seat, device, time_us, | ||||
|                                                dx, dy, | ||||
|                                                scroll_source, finish_flags); | ||||
| } | ||||
|  | ||||
| static void | ||||
| notify_discrete_axis (ClutterSeatEvdev              *seat, | ||||
|                       ClutterInputDevice            *device, | ||||
|                       uint64_t                       time_us, | ||||
|                       ClutterScrollSource            scroll_source, | ||||
|                       struct libinput_event_pointer *axis_event) | ||||
| { | ||||
|   gdouble discrete_dx = 0.0, discrete_dy = 0.0; | ||||
|  | ||||
|   if (libinput_event_pointer_has_axis (axis_event, | ||||
|                                        LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL)) | ||||
|     { | ||||
|       discrete_dx = libinput_event_pointer_get_axis_value_discrete ( | ||||
|           axis_event, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL); | ||||
|     } | ||||
|   if (libinput_event_pointer_has_axis (axis_event, | ||||
|                                        LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL)) | ||||
|     { | ||||
|       discrete_dy = libinput_event_pointer_get_axis_value_discrete ( | ||||
|           axis_event, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL); | ||||
|     } | ||||
|  | ||||
|   clutter_seat_evdev_notify_discrete_scroll (seat, device, | ||||
|                                              time_us, | ||||
|                                              discrete_dx, discrete_dy, | ||||
|                                              scroll_source); | ||||
| } | ||||
|  | ||||
| static void | ||||
| process_tablet_axis (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|                      struct libinput_event     *event) | ||||
| { | ||||
|   struct libinput_device *libinput_device = libinput_event_get_device (event); | ||||
|   guint64 time; | ||||
|   double x, y, dx, dy, *axes; | ||||
|   gfloat stage_width, stage_height; | ||||
|   ClutterStage *stage; | ||||
|   ClutterInputDevice *device; | ||||
|   struct libinput_event_tablet_tool *tablet_event = | ||||
|     libinput_event_get_tablet_tool_event (event); | ||||
|   ClutterInputDeviceEvdev *evdev_device; | ||||
|  | ||||
|   device = libinput_device_get_user_data (libinput_device); | ||||
|   evdev_device = CLUTTER_INPUT_DEVICE_EVDEV (device); | ||||
|  | ||||
|   stage = _clutter_input_device_get_stage (device); | ||||
|   if (!stage) | ||||
|     return; | ||||
|  | ||||
|   axes = translate_tablet_axes (tablet_event, | ||||
|                                 evdev_device->last_tool); | ||||
|   if (!axes) | ||||
|     return; | ||||
|  | ||||
|   stage_width = clutter_actor_get_width (CLUTTER_ACTOR (stage)); | ||||
|   stage_height = clutter_actor_get_height (CLUTTER_ACTOR (stage)); | ||||
|  | ||||
|   time = libinput_event_tablet_tool_get_time_usec (tablet_event); | ||||
|  | ||||
|   if (clutter_input_device_get_mapping_mode (device) == CLUTTER_INPUT_DEVICE_MAPPING_RELATIVE || | ||||
|       clutter_input_device_tool_get_tool_type (evdev_device->last_tool) == CLUTTER_INPUT_DEVICE_TOOL_MOUSE || | ||||
|       clutter_input_device_tool_get_tool_type (evdev_device->last_tool) == CLUTTER_INPUT_DEVICE_TOOL_LENS) | ||||
|     { | ||||
|       dx = libinput_event_tablet_tool_get_dx (tablet_event); | ||||
|       dy = libinput_event_tablet_tool_get_dy (tablet_event); | ||||
|       notify_relative_tool_motion (device, time, dx, dy, axes); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       x = libinput_event_tablet_tool_get_x_transformed (tablet_event, stage_width); | ||||
|       y = libinput_event_tablet_tool_get_y_transformed (tablet_event, stage_height); | ||||
|       notify_absolute_motion (device, time, x, y, axes); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|                       struct libinput_event *event) | ||||
| @@ -1341,6 +1248,7 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|   gboolean handled = TRUE; | ||||
|   struct libinput_device *libinput_device = libinput_event_get_device(event); | ||||
|   ClutterInputDevice *device; | ||||
|   ClutterInputDeviceEvdev *device_evdev; | ||||
|  | ||||
|   switch (libinput_event_get_type (event)) | ||||
|     { | ||||
| @@ -1460,17 +1368,12 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|  | ||||
|     case LIBINPUT_EVENT_POINTER_AXIS: | ||||
|       { | ||||
|         gdouble dx = 0.0, dy = 0.0; | ||||
|         gdouble discrete_x = 0.0, discrete_y = 0.0; | ||||
|         guint64 time_us; | ||||
|         gboolean wheel = FALSE; | ||||
|         enum libinput_pointer_axis axis; | ||||
|         enum libinput_pointer_axis_source source; | ||||
|         struct libinput_event_pointer *axis_event = | ||||
|           libinput_event_get_pointer_event (event); | ||||
|         ClutterSeatEvdev *seat; | ||||
|         ClutterScrollSource scroll_source; | ||||
|         ClutterScrollFinishFlags finish_flags = 0; | ||||
|  | ||||
|         device = libinput_device_get_user_data (libinput_device); | ||||
|         seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device)); | ||||
| @@ -1484,68 +1387,25 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|            backwards-compat with existing clients, we just send multiples of | ||||
|            the click count. */ | ||||
|  | ||||
|         if (source == LIBINPUT_POINTER_AXIS_SOURCE_WHEEL) | ||||
|             wheel = TRUE; | ||||
|  | ||||
|         axis = LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL; | ||||
|         if (libinput_event_pointer_has_axis (axis_event, axis)) | ||||
|         switch (scroll_source) | ||||
|           { | ||||
|             discrete_y = libinput_event_pointer_get_axis_value_discrete (axis_event, axis); | ||||
|             dy = libinput_event_pointer_get_axis_value (axis_event, axis); | ||||
|  | ||||
|             if (wheel) | ||||
|               seat->accum_scroll_dy = 0; | ||||
|             else if (fabs (dy) < DBL_EPSILON) | ||||
|               { | ||||
|                 finish_flags |= CLUTTER_SCROLL_FINISHED_VERTICAL; | ||||
|                 seat->accum_scroll_dy = 0; | ||||
|               } | ||||
|             else | ||||
|               seat->accum_scroll_dy += dy; | ||||
|           case CLUTTER_SCROLL_SOURCE_WHEEL: | ||||
|             notify_discrete_axis (seat, device, time_us, scroll_source, | ||||
|                                   axis_event); | ||||
|             break; | ||||
|           case CLUTTER_SCROLL_SOURCE_FINGER: | ||||
|           case CLUTTER_SCROLL_SOURCE_CONTINUOUS: | ||||
|           case CLUTTER_SCROLL_SOURCE_UNKNOWN: | ||||
|             notify_continuous_axis (seat, device, time_us, scroll_source, | ||||
|                                     axis_event); | ||||
|             break; | ||||
|           } | ||||
|  | ||||
|         axis = LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL; | ||||
|         if (libinput_event_pointer_has_axis (axis_event, axis)) | ||||
|           { | ||||
|             discrete_x = libinput_event_pointer_get_axis_value_discrete (axis_event, axis); | ||||
|             dx = libinput_event_pointer_get_axis_value (axis_event, axis); | ||||
|  | ||||
|             if (wheel) | ||||
|               seat->accum_scroll_dx = 0; | ||||
|             else if (fabs (dx) < DBL_EPSILON) | ||||
|               { | ||||
|                 finish_flags |= CLUTTER_SCROLL_FINISHED_HORIZONTAL; | ||||
|                 seat->accum_scroll_dx = 0; | ||||
|               } | ||||
|             else | ||||
|               seat->accum_scroll_dx += dx; | ||||
|           } | ||||
|  | ||||
|         if (wheel) | ||||
|           { | ||||
|             notify_scroll (device, time_us, | ||||
|                            discrete_x * DISCRETE_SCROLL_STEP, | ||||
|                            discrete_y * DISCRETE_SCROLL_STEP, | ||||
|                            scroll_source, finish_flags, TRUE); | ||||
|             notify_discrete_scroll (device, time_us, | ||||
|                                     discrete_to_direction (discrete_x, discrete_y), | ||||
|                                     scroll_source, FALSE); | ||||
|           } | ||||
|         else | ||||
|           { | ||||
|             notify_scroll (device, time_us, dx, dy, | ||||
|                            scroll_source, finish_flags, FALSE); | ||||
|             check_notify_discrete_scroll (manager_evdev, device, | ||||
|                                           time_us, scroll_source); | ||||
|           } | ||||
|  | ||||
|         break; | ||||
|  | ||||
|       } | ||||
|  | ||||
|     case LIBINPUT_EVENT_TOUCH_DOWN: | ||||
|       { | ||||
|         gint32 slot; | ||||
|         int device_slot; | ||||
|         guint64 time_us; | ||||
|         double x, y; | ||||
|         gfloat stage_width, stage_height; | ||||
| @@ -1556,7 +1416,8 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|           libinput_event_get_touch_event (event); | ||||
|  | ||||
|         device = libinput_device_get_user_data (libinput_device); | ||||
|         seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device)); | ||||
|         device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device); | ||||
|         seat = _clutter_input_device_evdev_get_seat (device_evdev); | ||||
|  | ||||
|         stage = _clutter_input_device_get_stage (device); | ||||
|         if (stage == NULL) | ||||
| @@ -1565,25 +1426,31 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|         stage_width = clutter_actor_get_width (CLUTTER_ACTOR (stage)); | ||||
|         stage_height = clutter_actor_get_height (CLUTTER_ACTOR (stage)); | ||||
|  | ||||
|         slot = libinput_event_touch_get_slot (touch_event); | ||||
|         device_slot = libinput_event_touch_get_slot (touch_event); | ||||
|         time_us = libinput_event_touch_get_time_usec (touch_event); | ||||
|         x = libinput_event_touch_get_x_transformed (touch_event, | ||||
|                                                     stage_width); | ||||
|         y = libinput_event_touch_get_y_transformed (touch_event, | ||||
|                                                     stage_height); | ||||
|  | ||||
|         touch_state = clutter_seat_evdev_add_touch (seat, slot); | ||||
|         touch_state = | ||||
|           clutter_input_device_evdev_acquire_touch_state (device_evdev, | ||||
|                                                           device_slot); | ||||
|         touch_state->coords.x = x; | ||||
|         touch_state->coords.y = y; | ||||
|  | ||||
|         notify_touch_event (device, CLUTTER_TOUCH_BEGIN, time_us, slot, | ||||
|                              touch_state->coords.x, touch_state->coords.y); | ||||
|         clutter_seat_evdev_notify_touch_event (seat, device, | ||||
|                                                CLUTTER_TOUCH_BEGIN, | ||||
|                                                time_us, | ||||
|                                                touch_state->seat_slot, | ||||
|                                                touch_state->coords.x, | ||||
|                                                touch_state->coords.y); | ||||
|         break; | ||||
|       } | ||||
|  | ||||
|     case LIBINPUT_EVENT_TOUCH_UP: | ||||
|       { | ||||
|         gint32 slot; | ||||
|         int device_slot; | ||||
|         guint64 time_us; | ||||
|         ClutterSeatEvdev *seat; | ||||
|         ClutterTouchState *touch_state; | ||||
| @@ -1591,22 +1458,30 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|           libinput_event_get_touch_event (event); | ||||
|  | ||||
|         device = libinput_device_get_user_data (libinput_device); | ||||
|         seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device)); | ||||
|         device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device); | ||||
|         seat = _clutter_input_device_evdev_get_seat (device_evdev); | ||||
|  | ||||
|         slot = libinput_event_touch_get_slot (touch_event); | ||||
|         device_slot = libinput_event_touch_get_slot (touch_event); | ||||
|         time_us = libinput_event_touch_get_time_usec (touch_event); | ||||
|         touch_state = clutter_seat_evdev_get_touch (seat, slot); | ||||
|  | ||||
|         notify_touch_event (device, CLUTTER_TOUCH_END, time_us, slot, | ||||
| 			    touch_state->coords.x, touch_state->coords.y); | ||||
|         clutter_seat_evdev_remove_touch (seat, slot); | ||||
|         touch_state = | ||||
|           clutter_input_device_evdev_lookup_touch_state (device_evdev, | ||||
|                                                          device_slot); | ||||
|         if (!touch_state) | ||||
|           break; | ||||
|  | ||||
|         clutter_seat_evdev_notify_touch_event (seat, device, | ||||
|                                                CLUTTER_TOUCH_END, time_us, | ||||
|                                                touch_state->seat_slot, | ||||
|                                                touch_state->coords.x, | ||||
|                                                touch_state->coords.y); | ||||
|         clutter_input_device_evdev_release_touch_state (device_evdev, | ||||
|                                                         touch_state); | ||||
|         break; | ||||
|       } | ||||
|  | ||||
|     case LIBINPUT_EVENT_TOUCH_MOTION: | ||||
|       { | ||||
|         gint32 slot; | ||||
|         int device_slot; | ||||
|         guint64 time_us; | ||||
|         double x, y; | ||||
|         gfloat stage_width, stage_height; | ||||
| @@ -1617,7 +1492,8 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|           libinput_event_get_touch_event (event); | ||||
|  | ||||
|         device = libinput_device_get_user_data (libinput_device); | ||||
|         seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device)); | ||||
|         device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device); | ||||
|         seat = _clutter_input_device_evdev_get_seat (device_evdev); | ||||
|  | ||||
|         stage = _clutter_input_device_get_stage (device); | ||||
|         if (stage == NULL) | ||||
| @@ -1626,42 +1502,41 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|         stage_width = clutter_actor_get_width (CLUTTER_ACTOR (stage)); | ||||
|         stage_height = clutter_actor_get_height (CLUTTER_ACTOR (stage)); | ||||
|  | ||||
|         slot = libinput_event_touch_get_slot (touch_event); | ||||
|         device_slot = libinput_event_touch_get_slot (touch_event); | ||||
|         time_us = libinput_event_touch_get_time_usec (touch_event); | ||||
|         x = libinput_event_touch_get_x_transformed (touch_event, | ||||
|                                                     stage_width); | ||||
|         y = libinput_event_touch_get_y_transformed (touch_event, | ||||
|                                                     stage_height); | ||||
|  | ||||
|         touch_state = clutter_seat_evdev_get_touch (seat, slot); | ||||
|         touch_state = | ||||
|           clutter_input_device_evdev_lookup_touch_state (device_evdev, | ||||
|                                                          device_slot); | ||||
|         if (!touch_state) | ||||
|           break; | ||||
|  | ||||
|         touch_state->coords.x = x; | ||||
|         touch_state->coords.y = y; | ||||
|  | ||||
|         notify_touch_event (device, CLUTTER_TOUCH_UPDATE, time_us, slot, | ||||
| 			    touch_state->coords.x, touch_state->coords.y); | ||||
|         clutter_seat_evdev_notify_touch_event (seat, device, | ||||
|                                                CLUTTER_TOUCH_UPDATE, | ||||
|                                                time_us, | ||||
|                                                touch_state->seat_slot, | ||||
|                                                touch_state->coords.x, | ||||
|                                                touch_state->coords.y); | ||||
|         break; | ||||
|       } | ||||
|     case LIBINPUT_EVENT_TOUCH_CANCEL: | ||||
|       { | ||||
|         ClutterTouchState *touch_state; | ||||
|         GHashTableIter iter; | ||||
|         guint64 time_us; | ||||
|         struct libinput_event_touch *touch_event = | ||||
|           libinput_event_get_touch_event (event); | ||||
|         ClutterSeatEvdev *seat; | ||||
|  | ||||
|         device = libinput_device_get_user_data (libinput_device); | ||||
|         device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device); | ||||
|         time_us = libinput_event_touch_get_time_usec (touch_event); | ||||
|         seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device)); | ||||
|         g_hash_table_iter_init (&iter, seat->touches); | ||||
|  | ||||
|         while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &touch_state)) | ||||
|           { | ||||
|             notify_touch_event (device, CLUTTER_TOUCH_CANCEL, | ||||
|                                 time_us, touch_state->id, | ||||
|                                 touch_state->coords.x, touch_state->coords.y); | ||||
|             g_hash_table_iter_remove (&iter); | ||||
|           } | ||||
|         clutter_input_device_evdev_release_touch_slots (device_evdev, time_us); | ||||
|  | ||||
|         break; | ||||
|       } | ||||
| @@ -1750,46 +1625,7 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|       } | ||||
|     case LIBINPUT_EVENT_TABLET_TOOL_AXIS: | ||||
|       { | ||||
|         guint64 time; | ||||
|         double x, y, dx, dy, *axes; | ||||
|         gfloat stage_width, stage_height; | ||||
|         ClutterStage *stage; | ||||
|         struct libinput_event_tablet_tool *tablet_event = | ||||
|           libinput_event_get_tablet_tool_event (event); | ||||
|         ClutterInputDeviceEvdev *evdev_device; | ||||
|  | ||||
|         device = libinput_device_get_user_data (libinput_device); | ||||
|         evdev_device = CLUTTER_INPUT_DEVICE_EVDEV (device); | ||||
|  | ||||
|         stage = _clutter_input_device_get_stage (device); | ||||
|         if (!stage) | ||||
|           break; | ||||
|  | ||||
|         axes = translate_tablet_axes (tablet_event, | ||||
|                                       evdev_device->last_tool); | ||||
|         if (!axes) | ||||
|           break; | ||||
|  | ||||
|         stage_width = clutter_actor_get_width (CLUTTER_ACTOR (stage)); | ||||
|         stage_height = clutter_actor_get_height (CLUTTER_ACTOR (stage)); | ||||
|  | ||||
|         time = libinput_event_tablet_tool_get_time_usec (tablet_event); | ||||
|  | ||||
|         if (clutter_input_device_get_mapping_mode (device) == CLUTTER_INPUT_DEVICE_MAPPING_RELATIVE || | ||||
|             clutter_input_device_tool_get_tool_type (evdev_device->last_tool) == CLUTTER_INPUT_DEVICE_TOOL_MOUSE || | ||||
|             clutter_input_device_tool_get_tool_type (evdev_device->last_tool) == CLUTTER_INPUT_DEVICE_TOOL_LENS) | ||||
|           { | ||||
|             dx = libinput_event_tablet_tool_get_dx (tablet_event); | ||||
|             dy = libinput_event_tablet_tool_get_dy (tablet_event); | ||||
|             notify_relative_tool_motion (device, time, dx, dy, axes); | ||||
|           } | ||||
|         else | ||||
|           { | ||||
|             x = libinput_event_tablet_tool_get_x_transformed (tablet_event, stage_width); | ||||
|             y = libinput_event_tablet_tool_get_y_transformed (tablet_event, stage_height); | ||||
|             notify_absolute_motion (device, time, x, y, axes); | ||||
|           } | ||||
|  | ||||
|         process_tablet_axis (manager_evdev, event); | ||||
|         break; | ||||
|       } | ||||
|     case LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY: | ||||
| @@ -1821,6 +1657,8 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|           libinput_event_get_tablet_tool_event (event); | ||||
|         guint tablet_button; | ||||
|  | ||||
|         process_tablet_axis (manager_evdev, event); | ||||
|  | ||||
|         device = libinput_device_get_user_data (libinput_device); | ||||
|         time_us = libinput_event_tablet_tool_get_time_usec (tablet_event); | ||||
|         tablet_button = libinput_event_tablet_tool_get_button (tablet_event); | ||||
| @@ -1845,8 +1683,15 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, | ||||
|         button_state = libinput_event_tablet_tool_get_tip_state (tablet_event) == | ||||
|                        LIBINPUT_TABLET_TOOL_TIP_DOWN; | ||||
|  | ||||
|         /* To avoid jumps on tip, notify axes before the tip down event | ||||
|            but after the tip up event */ | ||||
|         if (button_state) | ||||
|           process_tablet_axis (manager_evdev, event); | ||||
|  | ||||
|         clutter_seat_evdev_notify_button (seat_from_device (device), device, | ||||
|                                           time_us, BTN_TOUCH, button_state); | ||||
|         if (!button_state) | ||||
|           process_tablet_axis (manager_evdev, event); | ||||
|         break; | ||||
|       } | ||||
|     case LIBINPUT_EVENT_TABLET_PAD_BUTTON: | ||||
| @@ -2035,6 +1880,14 @@ clutter_device_manager_evdev_create_virtual_device (ClutterDeviceManager  *manag | ||||
|                        NULL); | ||||
| } | ||||
|  | ||||
| static ClutterVirtualDeviceType | ||||
| clutter_device_manager_evdev_get_supported_virtual_device_types (ClutterDeviceManager *device_manager) | ||||
| { | ||||
|   return (CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD | | ||||
|           CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER | | ||||
|           CLUTTER_VIRTUAL_DEVICE_TYPE_TOUCHSCREEN); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_device_manager_evdev_compress_motion (ClutterDeviceManager *device_manger, | ||||
|                                               ClutterEvent         *event, | ||||
| @@ -2060,6 +1913,18 @@ clutter_device_manager_evdev_compress_motion (ClutterDeviceManager *device_mange | ||||
|                                             dy_unaccel + dst_dy_unaccel); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_device_manager_evdev_apply_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||
|                                                       ClutterKbdA11ySettings *settings) | ||||
| { | ||||
|   ClutterInputDevice *device; | ||||
|  | ||||
|   device = clutter_device_manager_evdev_get_core_device (device_manager, CLUTTER_KEYBOARD_DEVICE); | ||||
|   if (device) | ||||
|     clutter_input_device_evdev_apply_kbd_a11y_settings (CLUTTER_INPUT_DEVICE_EVDEV (device), | ||||
|                                                         settings); | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * GObject implementation | ||||
|  */ | ||||
| @@ -2116,6 +1981,7 @@ clutter_device_manager_evdev_constructed (GObject *gobject) | ||||
|   xkb_context_unref (ctx); | ||||
|  | ||||
|   priv->main_seat = clutter_seat_evdev_new (manager_evdev); | ||||
|   priv->seats = g_slist_append (priv->seats, priv->main_seat); | ||||
|  | ||||
|   dispatch_libinput (manager_evdev); | ||||
|  | ||||
| @@ -2201,7 +2067,9 @@ clutter_device_manager_evdev_class_init (ClutterDeviceManagerEvdevClass *klass) | ||||
|   manager_class->get_core_device = clutter_device_manager_evdev_get_core_device; | ||||
|   manager_class->get_device = clutter_device_manager_evdev_get_device; | ||||
|   manager_class->create_virtual_device = clutter_device_manager_evdev_create_virtual_device; | ||||
|   manager_class->get_supported_virtual_device_types = clutter_device_manager_evdev_get_supported_virtual_device_types; | ||||
|   manager_class->compress_motion = clutter_device_manager_evdev_compress_motion; | ||||
|   manager_class->apply_kbd_a11y_settings = clutter_device_manager_evdev_apply_kbd_a11y_settings; | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -2322,7 +2190,7 @@ _clutter_device_manager_evdev_acquire_device_id (ClutterDeviceManagerEvdev *mana | ||||
|  | ||||
|   first = g_list_first (priv->free_device_ids); | ||||
|   next_id = GPOINTER_TO_INT (first->data); | ||||
|   priv->free_device_ids = g_list_remove_link (priv->free_device_ids, first); | ||||
|   priv->free_device_ids = g_list_delete_link (priv->free_device_ids, first); | ||||
|  | ||||
|   return next_id; | ||||
| } | ||||
| @@ -2441,7 +2309,7 @@ clutter_evdev_update_xkb_state (ClutterDeviceManagerEvdev *manager_evdev) | ||||
|                              0, /* depressed */ | ||||
|                              latched_mods, | ||||
|                              locked_mods, | ||||
|                              0, 0, 0); | ||||
|                              0, 0, seat->layout_idx); | ||||
|  | ||||
|       seat->caps_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_CAPS); | ||||
|       seat->num_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_NUM); | ||||
| @@ -2589,6 +2457,7 @@ clutter_evdev_set_keyboard_layout_index (ClutterDeviceManager *evdev, | ||||
|   xkb_mod_mask_t latched_mods; | ||||
|   xkb_mod_mask_t locked_mods; | ||||
|   struct xkb_state *state; | ||||
|   GSList *l; | ||||
|  | ||||
|   g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev)); | ||||
|  | ||||
| @@ -2600,6 +2469,24 @@ clutter_evdev_set_keyboard_layout_index (ClutterDeviceManager *evdev, | ||||
|   locked_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED); | ||||
|  | ||||
|   xkb_state_update_mask (state, depressed_mods, latched_mods, locked_mods, 0, 0, idx); | ||||
|   for (l = manager_evdev->priv->seats; l; l = l->next) | ||||
|     { | ||||
|       ClutterSeatEvdev *seat = l->data; | ||||
|  | ||||
|       seat->layout_idx = idx; | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * clutter_evdev_get_keyboard_layout_index: (skip) | ||||
|  */ | ||||
| xkb_layout_index_t | ||||
| clutter_evdev_get_keyboard_layout_index (ClutterDeviceManager *evdev) | ||||
| { | ||||
|   ClutterDeviceManagerEvdev *manager_evdev; | ||||
|  | ||||
|   manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev); | ||||
|   return manager_evdev->priv->main_seat->layout_idx; | ||||
| } | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -120,6 +120,9 @@ CLUTTER_AVAILABLE_IN_1_20 | ||||
| void clutter_evdev_set_keyboard_layout_index (ClutterDeviceManager *evdev, | ||||
|                                               xkb_layout_index_t    idx); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_MUTTER | ||||
| xkb_layout_index_t clutter_evdev_get_keyboard_layout_index (ClutterDeviceManager *evdev); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_1_26 | ||||
| void clutter_evdev_set_keyboard_numlock (ClutterDeviceManager *evdev, | ||||
|                                          gboolean              numlock_state); | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -70,6 +70,31 @@ struct _ClutterInputDeviceEvdev | ||||
|   cairo_matrix_t device_matrix; | ||||
|   gdouble device_aspect_ratio; /* w:h */ | ||||
|   gdouble output_ratio;        /* w:h */ | ||||
|  | ||||
|   GHashTable *touches; | ||||
|  | ||||
|   /* Keyboard a11y */ | ||||
|   ClutterKeyboardA11yFlags a11y_flags; | ||||
|   GList *slow_keys_list; | ||||
|   guint debounce_timer; | ||||
|   guint16 debounce_key; | ||||
|   xkb_mod_mask_t stickykeys_depressed_mask; | ||||
|   xkb_mod_mask_t stickykeys_latched_mask; | ||||
|   xkb_mod_mask_t stickykeys_locked_mask; | ||||
|   guint toggle_slowkeys_timer; | ||||
|   guint16 shift_count; | ||||
|   guint32 last_shift_time; | ||||
|   gint mousekeys_btn; | ||||
|   gboolean mousekeys_btn_states[3]; | ||||
|   guint32 mousekeys_first_motion_time; /* ms */ | ||||
|   guint32 mousekeys_last_motion_time; /* ms */ | ||||
|   guint mousekeys_init_delay; | ||||
|   guint mousekeys_accel_time; | ||||
|   guint mousekeys_max_speed; | ||||
|   gdouble mousekeys_curve_factor; | ||||
|   guint move_mousekeys_timer; | ||||
|   guint16 last_mousekeys_key; | ||||
|   ClutterVirtualInputDevice *mousekeys_virtual_device; | ||||
| }; | ||||
|  | ||||
| GType                     _clutter_input_device_evdev_get_type        (void) G_GNUC_CONST; | ||||
| @@ -111,6 +136,22 @@ void                      clutter_input_device_evdev_translate_coordinates (Clut | ||||
|                                                                             gfloat             *x, | ||||
|                                                                             gfloat             *y); | ||||
|  | ||||
| void                      clutter_input_device_evdev_apply_kbd_a11y_settings (ClutterInputDeviceEvdev *device, | ||||
|                                                                               ClutterKbdA11ySettings  *settings); | ||||
|  | ||||
| ClutterTouchState *       clutter_input_device_evdev_acquire_touch_state (ClutterInputDeviceEvdev *device, | ||||
|                                                                           int                      device_slot); | ||||
|  | ||||
| ClutterTouchState *       clutter_input_device_evdev_lookup_touch_state (ClutterInputDeviceEvdev *device, | ||||
|                                                                          int                      device_slot); | ||||
|  | ||||
| void                      clutter_input_device_evdev_release_touch_state (ClutterInputDeviceEvdev *device, | ||||
|                                                                           ClutterTouchState       *touch_state); | ||||
|  | ||||
| void                      clutter_input_device_evdev_release_touch_slots (ClutterInputDeviceEvdev *device_evdev, | ||||
|                                                                           uint64_t                 time_us); | ||||
|  | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __CLUTTER_INPUT_DEVICE_EVDEV_H__ */ | ||||
|   | ||||
| @@ -29,6 +29,7 @@ | ||||
| #include "clutter-seat-evdev.h" | ||||
|  | ||||
| #include <linux/input.h> | ||||
| #include <math.h> | ||||
|  | ||||
| #include "clutter-event-private.h" | ||||
| #include "clutter-input-device-evdev.h" | ||||
| @@ -42,6 +43,12 @@ | ||||
|  | ||||
| #define AUTOREPEAT_VALUE 2 | ||||
|  | ||||
| #define DISCRETE_SCROLL_STEP 10.0 | ||||
|  | ||||
| #ifndef BTN_STYLUS3 | ||||
| #define BTN_STYLUS3 0x149 /* Linux 4.15 */ | ||||
| #endif | ||||
|  | ||||
| void | ||||
| clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev     *seat, | ||||
|                                       struct libinput_seat *libinput_seat) | ||||
| @@ -85,32 +92,57 @@ clutter_touch_state_free (ClutterTouchState *touch_state) | ||||
|   g_slice_free (ClutterTouchState, touch_state); | ||||
| } | ||||
|  | ||||
| ClutterTouchState * | ||||
| clutter_seat_evdev_add_touch (ClutterSeatEvdev *seat, | ||||
|                               guint32           id) | ||||
| static void | ||||
| ensure_seat_slot_allocated (ClutterSeatEvdev *seat, | ||||
|                             int               seat_slot) | ||||
| { | ||||
|   ClutterTouchState *touch; | ||||
|   if (seat_slot >= seat->n_alloc_touch_states) | ||||
|     { | ||||
|       const int size_increase = 5; | ||||
|       int i; | ||||
|  | ||||
|   touch = g_slice_new0 (ClutterTouchState); | ||||
|   touch->id = id; | ||||
|       seat->n_alloc_touch_states += size_increase; | ||||
|       seat->touch_states = g_realloc_n (seat->touch_states, | ||||
|                                         seat->n_alloc_touch_states, | ||||
|                                         sizeof (ClutterTouchState *)); | ||||
|       for (i = 0; i < size_increase; i++) | ||||
|         seat->touch_states[seat->n_alloc_touch_states - (i + 1)] = NULL; | ||||
|     } | ||||
| } | ||||
|  | ||||
|   g_hash_table_insert (seat->touches, GUINT_TO_POINTER (id), touch); | ||||
| ClutterTouchState * | ||||
| clutter_seat_evdev_acquire_touch_state (ClutterSeatEvdev *seat, | ||||
|                                         int               device_slot) | ||||
| { | ||||
|   ClutterTouchState *touch_state; | ||||
|   int seat_slot; | ||||
|  | ||||
|   return touch; | ||||
|   for (seat_slot = 0; seat_slot < seat->n_alloc_touch_states; seat_slot++) | ||||
|     { | ||||
|       if (!seat->touch_states[seat_slot]) | ||||
|         break; | ||||
|     } | ||||
|  | ||||
|   ensure_seat_slot_allocated (seat, seat_slot); | ||||
|  | ||||
|   touch_state = g_slice_new0 (ClutterTouchState); | ||||
|   *touch_state = (ClutterTouchState) { | ||||
|     .seat = seat, | ||||
|     .seat_slot = seat_slot, | ||||
|     .device_slot = device_slot, | ||||
|   }; | ||||
|  | ||||
|   seat->touch_states[seat_slot] = touch_state; | ||||
|  | ||||
|   return touch_state; | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_seat_evdev_remove_touch (ClutterSeatEvdev *seat, | ||||
|                                  guint32           id) | ||||
| clutter_seat_evdev_release_touch_state (ClutterSeatEvdev  *seat, | ||||
|                                         ClutterTouchState *touch_state) | ||||
| { | ||||
|   g_hash_table_remove (seat->touches, GUINT_TO_POINTER (id)); | ||||
| } | ||||
|  | ||||
| ClutterTouchState * | ||||
| clutter_seat_evdev_get_touch (ClutterSeatEvdev *seat, | ||||
|                               guint32           id) | ||||
| { | ||||
|   return g_hash_table_lookup (seat->touches, GUINT_TO_POINTER (id)); | ||||
|   g_clear_pointer (&seat->touch_states[touch_state->seat_slot], | ||||
|                    clutter_touch_state_free); | ||||
| } | ||||
|  | ||||
| ClutterSeatEvdev * | ||||
| @@ -147,9 +179,6 @@ clutter_seat_evdev_new (ClutterDeviceManagerEvdev *manager_evdev) | ||||
|   _clutter_device_manager_add_device (manager, device); | ||||
|   seat->core_keyboard = device; | ||||
|  | ||||
|   seat->touches = g_hash_table_new_full (NULL, NULL, NULL, | ||||
|                                          (GDestroyNotify) clutter_touch_state_free); | ||||
|  | ||||
|   seat->repeat = TRUE; | ||||
|   seat->repeat_delay = 250;     /* ms */ | ||||
|   seat->repeat_interval = 33;   /* ms */ | ||||
| @@ -281,7 +310,7 @@ clutter_seat_evdev_notify_key (ClutterSeatEvdev   *seat, | ||||
|   else | ||||
|     { | ||||
|       changed_state = 0; | ||||
|       clutter_event_set_flags (event, CLUTTER_EVENT_FLAG_SYNTHETIC); | ||||
|       clutter_event_set_flags (event, CLUTTER_EVENT_FLAG_REPEATED); | ||||
|     } | ||||
|  | ||||
|   queue_event (event); | ||||
| @@ -489,6 +518,10 @@ clutter_seat_evdev_notify_button (ClutterSeatEvdev   *seat, | ||||
|       button_nr = CLUTTER_BUTTON_MIDDLE; | ||||
|       break; | ||||
|  | ||||
|     case 0x149: /* BTN_STYLUS3 */ | ||||
|       button_nr = 8; | ||||
|       break; | ||||
|  | ||||
|     default: | ||||
|       /* For compatibility reasons, all additional buttons go after the old 4-7 scroll ones */ | ||||
|       if (clutter_input_device_get_device_type (input_device) == CLUTTER_TABLET_DEVICE) | ||||
| @@ -569,6 +602,238 @@ clutter_seat_evdev_notify_button (ClutterSeatEvdev   *seat, | ||||
|   queue_event (event); | ||||
| } | ||||
|  | ||||
| static void | ||||
| notify_scroll (ClutterInputDevice       *input_device, | ||||
|                guint64                   time_us, | ||||
|                gdouble                   dx, | ||||
|                gdouble                   dy, | ||||
|                ClutterScrollSource       scroll_source, | ||||
|                ClutterScrollFinishFlags  flags, | ||||
|                gboolean                  emulated) | ||||
| { | ||||
|   ClutterInputDeviceEvdev *device_evdev; | ||||
|   ClutterSeatEvdev *seat; | ||||
|   ClutterStage *stage; | ||||
|   ClutterEvent *event = NULL; | ||||
|   gdouble scroll_factor; | ||||
|  | ||||
|   /* We can drop the event on the floor if no stage has been | ||||
|    * associated with the device yet. */ | ||||
|   stage = _clutter_input_device_get_stage (input_device); | ||||
|   if (stage == NULL) | ||||
|     return; | ||||
|  | ||||
|   device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device); | ||||
|   seat = _clutter_input_device_evdev_get_seat (device_evdev); | ||||
|  | ||||
|   event = clutter_event_new (CLUTTER_SCROLL); | ||||
|  | ||||
|   _clutter_evdev_event_set_time_usec (event, time_us); | ||||
|   event->scroll.time = us2ms (time_us); | ||||
|   event->scroll.stage = CLUTTER_STAGE (stage); | ||||
|   event->scroll.device = seat->core_pointer; | ||||
|   _clutter_xkb_translate_state (event, seat->xkb, seat->button_state); | ||||
|  | ||||
|   /* libinput pointer axis events are in pointer motion coordinate space. | ||||
|    * To convert to Xi2 discrete step coordinate space, multiply the factor | ||||
|    * 1/10. */ | ||||
|   event->scroll.direction = CLUTTER_SCROLL_SMOOTH; | ||||
|   scroll_factor = 1.0 / DISCRETE_SCROLL_STEP; | ||||
|   clutter_event_set_scroll_delta (event, | ||||
|                                   scroll_factor * dx, | ||||
|                                   scroll_factor * dy); | ||||
|  | ||||
|   event->scroll.x = seat->pointer_x; | ||||
|   event->scroll.y = seat->pointer_y; | ||||
|   clutter_event_set_device (event, seat->core_pointer); | ||||
|   clutter_event_set_source_device (event, input_device); | ||||
|   event->scroll.scroll_source = scroll_source; | ||||
|   event->scroll.finish_flags = flags; | ||||
|  | ||||
|   _clutter_event_set_pointer_emulated (event, emulated); | ||||
|  | ||||
|   queue_event (event); | ||||
| } | ||||
|  | ||||
| static void | ||||
| notify_discrete_scroll (ClutterInputDevice     *input_device, | ||||
|                         uint64_t                time_us, | ||||
|                         ClutterScrollDirection  direction, | ||||
|                         ClutterScrollSource     scroll_source, | ||||
|                         gboolean                emulated) | ||||
| { | ||||
|   ClutterInputDeviceEvdev *device_evdev; | ||||
|   ClutterSeatEvdev *seat; | ||||
|   ClutterStage *stage; | ||||
|   ClutterEvent *event = NULL; | ||||
|  | ||||
|   if (direction == CLUTTER_SCROLL_SMOOTH) | ||||
|     return; | ||||
|  | ||||
|   /* We can drop the event on the floor if no stage has been | ||||
|    * associated with the device yet. */ | ||||
|   stage = _clutter_input_device_get_stage (input_device); | ||||
|   if (stage == NULL) | ||||
|     return; | ||||
|  | ||||
|   device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device); | ||||
|   seat = _clutter_input_device_evdev_get_seat (device_evdev); | ||||
|  | ||||
|   event = clutter_event_new (CLUTTER_SCROLL); | ||||
|  | ||||
|   _clutter_evdev_event_set_time_usec (event, time_us); | ||||
|   event->scroll.time = us2ms (time_us); | ||||
|   event->scroll.stage = CLUTTER_STAGE (stage); | ||||
|   event->scroll.device = seat->core_pointer; | ||||
|   _clutter_xkb_translate_state (event, seat->xkb, seat->button_state); | ||||
|  | ||||
|   event->scroll.direction = direction; | ||||
|  | ||||
|   event->scroll.x = seat->pointer_x; | ||||
|   event->scroll.y = seat->pointer_y; | ||||
|   clutter_event_set_device (event, seat->core_pointer); | ||||
|   clutter_event_set_source_device (event, input_device); | ||||
|   event->scroll.scroll_source = scroll_source; | ||||
|  | ||||
|   _clutter_event_set_pointer_emulated (event, emulated); | ||||
|  | ||||
|   queue_event (event); | ||||
| } | ||||
|  | ||||
| static void | ||||
| check_notify_discrete_scroll (ClutterSeatEvdev   *seat, | ||||
|                               ClutterInputDevice *device, | ||||
|                               uint64_t            time_us, | ||||
|                               ClutterScrollSource scroll_source) | ||||
| { | ||||
|   int i, n_xscrolls, n_yscrolls; | ||||
|  | ||||
|   n_xscrolls = floor (fabs (seat->accum_scroll_dx) / DISCRETE_SCROLL_STEP); | ||||
|   n_yscrolls = floor (fabs (seat->accum_scroll_dy) / DISCRETE_SCROLL_STEP); | ||||
|  | ||||
|   for (i = 0; i < n_xscrolls; i++) | ||||
|     { | ||||
|       notify_discrete_scroll (device, time_us, | ||||
|                               seat->accum_scroll_dx > 0 ? | ||||
|                               CLUTTER_SCROLL_RIGHT : CLUTTER_SCROLL_LEFT, | ||||
|                               scroll_source, TRUE); | ||||
|     } | ||||
|  | ||||
|   for (i = 0; i < n_yscrolls; i++) | ||||
|     { | ||||
|       notify_discrete_scroll (device, time_us, | ||||
|                               seat->accum_scroll_dy > 0 ? | ||||
|                               CLUTTER_SCROLL_DOWN : CLUTTER_SCROLL_UP, | ||||
|                               scroll_source, TRUE); | ||||
|     } | ||||
|  | ||||
|   seat->accum_scroll_dx = fmodf (seat->accum_scroll_dx, DISCRETE_SCROLL_STEP); | ||||
|   seat->accum_scroll_dy = fmodf (seat->accum_scroll_dy, DISCRETE_SCROLL_STEP); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_seat_evdev_notify_scroll_continuous (ClutterSeatEvdev         *seat, | ||||
|                                              ClutterInputDevice       *input_device, | ||||
|                                              uint64_t                  time_us, | ||||
|                                              double                    dx, | ||||
|                                              double                    dy, | ||||
|                                              ClutterScrollSource       scroll_source, | ||||
|                                              ClutterScrollFinishFlags  finish_flags) | ||||
| { | ||||
|   if (finish_flags & CLUTTER_SCROLL_FINISHED_HORIZONTAL) | ||||
|     seat->accum_scroll_dx = 0; | ||||
|   else | ||||
|     seat->accum_scroll_dx += dx; | ||||
|  | ||||
|   if (finish_flags & CLUTTER_SCROLL_FINISHED_VERTICAL) | ||||
|     seat->accum_scroll_dy = 0; | ||||
|   else | ||||
|     seat->accum_scroll_dy += dy; | ||||
|  | ||||
|   notify_scroll (input_device, time_us, dx, dy, scroll_source, | ||||
|                  finish_flags, FALSE); | ||||
|   check_notify_discrete_scroll (seat, input_device, time_us, scroll_source); | ||||
| } | ||||
|  | ||||
| static ClutterScrollDirection | ||||
| discrete_to_direction (double discrete_dx, | ||||
|                        double discrete_dy) | ||||
| { | ||||
|   if (discrete_dx > 0) | ||||
|     return CLUTTER_SCROLL_RIGHT; | ||||
|   else if (discrete_dx < 0) | ||||
|     return CLUTTER_SCROLL_LEFT; | ||||
|   else if (discrete_dy > 0) | ||||
|     return CLUTTER_SCROLL_DOWN; | ||||
|   else if (discrete_dy < 0) | ||||
|     return CLUTTER_SCROLL_UP; | ||||
|   else | ||||
|     g_assert_not_reached (); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_seat_evdev_notify_discrete_scroll (ClutterSeatEvdev    *seat, | ||||
|                                            ClutterInputDevice  *input_device, | ||||
|                                            uint64_t             time_us, | ||||
|                                            double               discrete_dx, | ||||
|                                            double               discrete_dy, | ||||
|                                            ClutterScrollSource  scroll_source) | ||||
| { | ||||
|   notify_scroll (input_device, time_us, | ||||
|                  discrete_dx * DISCRETE_SCROLL_STEP, | ||||
|                  discrete_dy * DISCRETE_SCROLL_STEP, | ||||
|                  scroll_source, CLUTTER_SCROLL_FINISHED_NONE, | ||||
|                  TRUE); | ||||
|   notify_discrete_scroll (input_device, time_us, | ||||
|                           discrete_to_direction (discrete_dx, discrete_dy), | ||||
|                           scroll_source, FALSE); | ||||
|  | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_seat_evdev_notify_touch_event (ClutterSeatEvdev   *seat, | ||||
|                                        ClutterInputDevice *input_device, | ||||
|                                        ClutterEventType    evtype, | ||||
|                                        uint64_t            time_us, | ||||
|                                        int                 slot, | ||||
|                                        double              x, | ||||
|                                        double              y) | ||||
| { | ||||
|   ClutterStage *stage; | ||||
|   ClutterEvent *event = NULL; | ||||
|  | ||||
|   /* We can drop the event on the floor if no stage has been | ||||
|    * associated with the device yet. */ | ||||
|   stage = _clutter_input_device_get_stage (input_device); | ||||
|   if (stage == NULL) | ||||
|     return; | ||||
|  | ||||
|   event = clutter_event_new (evtype); | ||||
|  | ||||
|   _clutter_evdev_event_set_time_usec (event, time_us); | ||||
|   event->touch.time = us2ms (time_us); | ||||
|   event->touch.stage = CLUTTER_STAGE (stage); | ||||
|   event->touch.device = seat->core_pointer; | ||||
|   event->touch.x = x; | ||||
|   event->touch.y = y; | ||||
|   clutter_input_device_evdev_translate_coordinates (input_device, stage, | ||||
|                                                     &event->touch.x, | ||||
|                                                     &event->touch.y); | ||||
|  | ||||
|   /* "NULL" sequences are special cased in clutter */ | ||||
|   event->touch.sequence = GINT_TO_POINTER (MAX (1, slot + 1)); | ||||
|   _clutter_xkb_translate_state (event, seat->xkb, seat->button_state); | ||||
|  | ||||
|   if (evtype == CLUTTER_TOUCH_BEGIN || | ||||
|       evtype == CLUTTER_TOUCH_UPDATE) | ||||
|     event->touch.modifier_state |= CLUTTER_BUTTON1_MASK; | ||||
|  | ||||
|   clutter_event_set_device (event, seat->core_pointer); | ||||
|   clutter_event_set_source_device (event, input_device); | ||||
|  | ||||
|   queue_event (event); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_seat_evdev_free (ClutterSeatEvdev *seat) | ||||
| { | ||||
| @@ -581,7 +846,7 @@ clutter_seat_evdev_free (ClutterSeatEvdev *seat) | ||||
|       g_object_unref (device); | ||||
|     } | ||||
|   g_slist_free (seat->devices); | ||||
|   g_hash_table_unref (seat->touches); | ||||
|   g_free (seat->touch_states); | ||||
|  | ||||
|   xkb_state_unref (seat->xkb); | ||||
|  | ||||
| @@ -593,6 +858,24 @@ clutter_seat_evdev_free (ClutterSeatEvdev *seat) | ||||
|   g_free (seat); | ||||
| } | ||||
|  | ||||
| ClutterInputDevice * | ||||
| clutter_seat_evdev_get_device (ClutterSeatEvdev *seat, | ||||
|                                gint              id) | ||||
| { | ||||
|   ClutterInputDevice *device; | ||||
|   GSList *l; | ||||
|  | ||||
|   for (l = seat->devices; l; l = l->next) | ||||
|     { | ||||
|       device = l->data; | ||||
|  | ||||
|       if (clutter_input_device_get_device_id (device) == id) | ||||
|         return device; | ||||
|     } | ||||
|  | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_seat_evdev_set_stage (ClutterSeatEvdev *seat, | ||||
|                               ClutterStage     *stage) | ||||
|   | ||||
| @@ -38,7 +38,10 @@ typedef struct _ClutterTouchState ClutterTouchState; | ||||
|  | ||||
| struct _ClutterTouchState | ||||
| { | ||||
|   guint32 id; | ||||
|   ClutterSeatEvdev *seat; | ||||
|  | ||||
|   int device_slot; | ||||
|   int seat_slot; | ||||
|   ClutterPoint coords; | ||||
| }; | ||||
|  | ||||
| @@ -52,12 +55,14 @@ struct _ClutterSeatEvdev | ||||
|   ClutterInputDevice *core_pointer; | ||||
|   ClutterInputDevice *core_keyboard; | ||||
|  | ||||
|   GHashTable *touches; | ||||
|   ClutterTouchState **touch_states; | ||||
|   int n_alloc_touch_states; | ||||
|  | ||||
|   struct xkb_state *xkb; | ||||
|   xkb_led_index_t caps_lock_led; | ||||
|   xkb_led_index_t num_lock_led; | ||||
|   xkb_led_index_t scroll_lock_led; | ||||
|   xkb_layout_index_t layout_idx; | ||||
|   uint32_t button_state; | ||||
|   int button_count[KEY_CNT]; | ||||
|  | ||||
| @@ -106,16 +111,42 @@ void clutter_seat_evdev_notify_button (ClutterSeatEvdev   *seat, | ||||
|                                        uint32_t            button, | ||||
|                                        uint32_t            state); | ||||
|  | ||||
| void clutter_seat_evdev_notify_scroll_continuous (ClutterSeatEvdev         *seat, | ||||
|                                                   ClutterInputDevice       *input_device, | ||||
|                                                   uint64_t                  time_us, | ||||
|                                                   double                    dx, | ||||
|                                                   double                    dy, | ||||
|                                                   ClutterScrollSource       source, | ||||
|                                                   ClutterScrollFinishFlags  flags); | ||||
|  | ||||
| void clutter_seat_evdev_notify_discrete_scroll (ClutterSeatEvdev    *seat, | ||||
|                                                 ClutterInputDevice  *input_device, | ||||
|                                                 uint64_t             time_us, | ||||
|                                                 double               discrete_dx, | ||||
|                                                 double               discrete_dy, | ||||
|                                                 ClutterScrollSource  source); | ||||
|  | ||||
| void clutter_seat_evdev_notify_touch_event (ClutterSeatEvdev   *seat, | ||||
|                                             ClutterInputDevice *input_device, | ||||
|                                             ClutterEventType    evtype, | ||||
|                                             uint64_t            time_us, | ||||
|                                             int                 slot, | ||||
|                                             double              x, | ||||
|                                             double              y); | ||||
|  | ||||
| void clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev     *seat, | ||||
|                                            struct libinput_seat *libinput_seat); | ||||
|  | ||||
| void clutter_seat_evdev_sync_leds (ClutterSeatEvdev *seat); | ||||
|  | ||||
| ClutterTouchState * clutter_seat_evdev_add_touch (ClutterSeatEvdev *seat, | ||||
|                                                   guint32           id); | ||||
| ClutterInputDevice * clutter_seat_evdev_get_device (ClutterSeatEvdev *seat, | ||||
|                                                     gint              id); | ||||
|  | ||||
| void clutter_seat_evdev_remove_touch (ClutterSeatEvdev *seat, | ||||
|                                       guint32           id); | ||||
| ClutterTouchState * clutter_seat_evdev_acquire_touch_state (ClutterSeatEvdev *seat, | ||||
|                                                             int               device_slot); | ||||
|  | ||||
| void clutter_seat_evdev_release_touch_state (ClutterSeatEvdev  *seat, | ||||
|                                              ClutterTouchState *touch_state); | ||||
|  | ||||
| ClutterTouchState * clutter_seat_evdev_get_touch (ClutterSeatEvdev *seat, | ||||
|                                                   guint32           id); | ||||
|   | ||||
| @@ -156,6 +156,9 @@ clutter_virtual_input_device_evdev_notify_relative_motion (ClutterVirtualInputDe | ||||
|   ClutterVirtualInputDeviceEvdev *virtual_evdev = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); | ||||
|  | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   clutter_seat_evdev_notify_relative_motion (virtual_evdev->seat, | ||||
|                                              virtual_evdev->device, | ||||
|                                              time_us, | ||||
| @@ -172,6 +175,9 @@ clutter_virtual_input_device_evdev_notify_absolute_motion (ClutterVirtualInputDe | ||||
|   ClutterVirtualInputDeviceEvdev *virtual_evdev = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); | ||||
|  | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   clutter_seat_evdev_notify_absolute_motion (virtual_evdev->seat, | ||||
|                                              virtual_evdev->device, | ||||
|                                              time_us, | ||||
| @@ -179,6 +185,26 @@ clutter_virtual_input_device_evdev_notify_absolute_motion (ClutterVirtualInputDe | ||||
|                                              NULL); | ||||
| } | ||||
|  | ||||
| static int | ||||
| translate_to_evdev_button (int clutter_button) | ||||
| { | ||||
|   switch (clutter_button) | ||||
|     { | ||||
|     case CLUTTER_BUTTON_PRIMARY: | ||||
|       return BTN_LEFT; | ||||
|     case CLUTTER_BUTTON_SECONDARY: | ||||
|       return BTN_RIGHT; | ||||
|     case CLUTTER_BUTTON_MIDDLE: | ||||
|       return BTN_MIDDLE; | ||||
|     default: | ||||
|       /* | ||||
|        * For compatibility reasons, all additional buttons go after the old | ||||
|        * 4-7 scroll ones. | ||||
|        */ | ||||
|       return clutter_button + (BTN_LEFT - 1) - 4; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_evdev_notify_button (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                   uint64_t                   time_us, | ||||
| @@ -188,27 +214,33 @@ clutter_virtual_input_device_evdev_notify_button (ClutterVirtualInputDevice *vir | ||||
|   ClutterVirtualInputDeviceEvdev *virtual_evdev = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); | ||||
|   int button_count; | ||||
|   int evdev_button; | ||||
|  | ||||
|   if (get_button_type (button) != EVDEV_BUTTON_TYPE_BUTTON) | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   evdev_button = translate_to_evdev_button (button); | ||||
|  | ||||
|   if (get_button_type (evdev_button) != EVDEV_BUTTON_TYPE_BUTTON) | ||||
|     { | ||||
|       g_warning ("Unknown/invalid virtual device button 0x%x pressed", | ||||
|                  button); | ||||
|                  evdev_button); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   button_count = update_button_count (virtual_evdev, button, button_state); | ||||
|   button_count = update_button_count (virtual_evdev, evdev_button, button_state); | ||||
|   if (button_count < 0 || button_count > 1) | ||||
|     { | ||||
|       g_warning ("Received multiple virtual 0x%x button %s (ignoring)", button, | ||||
|       g_warning ("Received multiple virtual 0x%x button %s (ignoring)", evdev_button, | ||||
|                  button_state == CLUTTER_BUTTON_STATE_PRESSED ? "presses" : "releases"); | ||||
|       update_button_count (virtual_evdev, button, 1 - button_state); | ||||
|       update_button_count (virtual_evdev, evdev_button, 1 - button_state); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   clutter_seat_evdev_notify_button (virtual_evdev->seat, | ||||
|                                     virtual_evdev->device, | ||||
|                                     time_us, | ||||
|                                     button, | ||||
|                                     evdev_button, | ||||
|                                     button_state); | ||||
| } | ||||
|  | ||||
| @@ -222,6 +254,9 @@ clutter_virtual_input_device_evdev_notify_key (ClutterVirtualInputDevice *virtua | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); | ||||
|   int key_count; | ||||
|  | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   if (get_button_type (key) != EVDEV_BUTTON_TYPE_KEY) | ||||
|     { | ||||
|       g_warning ("Unknown/invalid virtual device key 0x%x pressed\n", key); | ||||
| @@ -343,6 +378,9 @@ clutter_virtual_input_device_evdev_notify_keyval (ClutterVirtualInputDevice *vir | ||||
|   int key_count; | ||||
|   guint keycode = 0, level = 0, evcode = 0; | ||||
|  | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   if (!pick_keycode_for_keyval_in_current_group (virtual_device, | ||||
|                                                  keyval, &keycode, &level)) | ||||
|     { | ||||
| @@ -382,6 +420,175 @@ clutter_virtual_input_device_evdev_notify_keyval (ClutterVirtualInputDevice *vir | ||||
|     apply_level_modifiers (virtual_device, time_us, level, key_state); | ||||
| } | ||||
|  | ||||
| static void | ||||
| direction_to_discrete (ClutterScrollDirection direction, | ||||
|                        double                *discrete_dx, | ||||
|                        double                *discrete_dy) | ||||
| { | ||||
|   switch (direction) | ||||
|     { | ||||
|     case CLUTTER_SCROLL_UP: | ||||
|       *discrete_dx = 0.0; | ||||
|       *discrete_dy = -1.0; | ||||
|       break; | ||||
|     case CLUTTER_SCROLL_DOWN: | ||||
|       *discrete_dx = 0.0; | ||||
|       *discrete_dy = 1.0; | ||||
|       break; | ||||
|     case CLUTTER_SCROLL_LEFT: | ||||
|       *discrete_dx = -1.0; | ||||
|       *discrete_dy = 0.0; | ||||
|       break; | ||||
|     case CLUTTER_SCROLL_RIGHT: | ||||
|       *discrete_dx = 1.0; | ||||
|       *discrete_dy = 0.0; | ||||
|       break; | ||||
|     case CLUTTER_SCROLL_SMOOTH: | ||||
|       g_assert_not_reached (); | ||||
|       break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_evdev_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                            uint64_t                   time_us, | ||||
|                                                            ClutterScrollDirection     direction, | ||||
|                                                            ClutterScrollSource        scroll_source) | ||||
| { | ||||
|   ClutterVirtualInputDeviceEvdev *virtual_evdev = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); | ||||
|   double discrete_dx = 0.0, discrete_dy = 0.0; | ||||
|  | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   direction_to_discrete (direction, &discrete_dx, &discrete_dy); | ||||
|  | ||||
|   clutter_seat_evdev_notify_discrete_scroll (virtual_evdev->seat, | ||||
|                                              virtual_evdev->device, | ||||
|                                              time_us, | ||||
|                                              discrete_dx, discrete_dy, | ||||
|                                              scroll_source); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_evdev_notify_scroll_continuous (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                              uint64_t                   time_us, | ||||
|                                                              double                     dx, | ||||
|                                                              double                     dy, | ||||
|                                                              ClutterScrollSource        scroll_source, | ||||
|                                                              ClutterScrollFinishFlags   finish_flags) | ||||
| { | ||||
|   ClutterVirtualInputDeviceEvdev *virtual_evdev = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); | ||||
|  | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   clutter_seat_evdev_notify_scroll_continuous (virtual_evdev->seat, | ||||
|                                                virtual_evdev->device, | ||||
|                                                time_us, | ||||
|                                                dx, dy, | ||||
|                                                scroll_source, | ||||
|                                                CLUTTER_SCROLL_FINISHED_NONE); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_evdev_notify_touch_down (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                       uint64_t                   time_us, | ||||
|                                                       int                        device_slot, | ||||
|                                                       double                     x, | ||||
|                                                       double                     y) | ||||
| { | ||||
|   ClutterVirtualInputDeviceEvdev *virtual_evdev = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); | ||||
|   ClutterInputDeviceEvdev *device_evdev = | ||||
|     CLUTTER_INPUT_DEVICE_EVDEV (virtual_evdev->device); | ||||
|   ClutterTouchState *touch_state; | ||||
|  | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   touch_state = clutter_input_device_evdev_acquire_touch_state (device_evdev, | ||||
|                                                                 device_slot); | ||||
|   if (!touch_state) | ||||
|     return; | ||||
|  | ||||
|   touch_state->coords.x = x; | ||||
|   touch_state->coords.y = y; | ||||
|  | ||||
|   clutter_seat_evdev_notify_touch_event (virtual_evdev->seat, | ||||
|                                          virtual_evdev->device, | ||||
|                                          CLUTTER_TOUCH_BEGIN, | ||||
|                                          time_us, | ||||
|                                          touch_state->seat_slot, | ||||
|                                          touch_state->coords.x, | ||||
|                                          touch_state->coords.y); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_evdev_notify_touch_motion (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                         uint64_t                   time_us, | ||||
|                                                         int                        device_slot, | ||||
|                                                         double                     x, | ||||
|                                                         double                     y) | ||||
| { | ||||
|   ClutterVirtualInputDeviceEvdev *virtual_evdev = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); | ||||
|   ClutterInputDeviceEvdev *device_evdev = | ||||
|     CLUTTER_INPUT_DEVICE_EVDEV (virtual_evdev->device); | ||||
|   ClutterTouchState *touch_state; | ||||
|  | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   touch_state = clutter_input_device_evdev_lookup_touch_state (device_evdev, | ||||
|                                                                device_slot); | ||||
|   if (!touch_state) | ||||
|     return; | ||||
|  | ||||
|   touch_state->coords.x = x; | ||||
|   touch_state->coords.y = y; | ||||
|  | ||||
|   clutter_seat_evdev_notify_touch_event (virtual_evdev->seat, | ||||
|                                          virtual_evdev->device, | ||||
|                                          CLUTTER_TOUCH_BEGIN, | ||||
|                                          time_us, | ||||
|                                          touch_state->seat_slot, | ||||
|                                          touch_state->coords.x, | ||||
|                                          touch_state->coords.y); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_evdev_notify_touch_up (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                     uint64_t                   time_us, | ||||
|                                                     int                        device_slot) | ||||
| { | ||||
|   ClutterVirtualInputDeviceEvdev *virtual_evdev = | ||||
|     CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); | ||||
|   ClutterInputDeviceEvdev *device_evdev = | ||||
|     CLUTTER_INPUT_DEVICE_EVDEV (virtual_evdev->device); | ||||
|   ClutterTouchState *touch_state; | ||||
|  | ||||
|   if (time_us == CLUTTER_CURRENT_TIME) | ||||
|     time_us = g_get_monotonic_time (); | ||||
|  | ||||
|   touch_state = clutter_input_device_evdev_lookup_touch_state (device_evdev, | ||||
|                                                                device_slot); | ||||
|   if (!touch_state) | ||||
|     return; | ||||
|  | ||||
|   clutter_seat_evdev_notify_touch_event (virtual_evdev->seat, | ||||
|                                          virtual_evdev->device, | ||||
|                                          CLUTTER_TOUCH_BEGIN, | ||||
|                                          time_us, | ||||
|                                          touch_state->seat_slot, | ||||
|                                          touch_state->coords.x, | ||||
|                                          touch_state->coords.y); | ||||
|  | ||||
|   clutter_input_device_evdev_release_touch_state (device_evdev, touch_state); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_evdev_get_property (GObject    *object, | ||||
|                                                  guint       prop_id, | ||||
| @@ -485,6 +692,11 @@ clutter_virtual_input_device_evdev_class_init (ClutterVirtualInputDeviceEvdevCla | ||||
|   virtual_input_device_class->notify_button = clutter_virtual_input_device_evdev_notify_button; | ||||
|   virtual_input_device_class->notify_key = clutter_virtual_input_device_evdev_notify_key; | ||||
|   virtual_input_device_class->notify_keyval = clutter_virtual_input_device_evdev_notify_keyval; | ||||
|   virtual_input_device_class->notify_discrete_scroll = clutter_virtual_input_device_evdev_notify_discrete_scroll; | ||||
|   virtual_input_device_class->notify_scroll_continuous = clutter_virtual_input_device_evdev_notify_scroll_continuous; | ||||
|   virtual_input_device_class->notify_touch_down = clutter_virtual_input_device_evdev_notify_touch_down; | ||||
|   virtual_input_device_class->notify_touch_motion = clutter_virtual_input_device_evdev_notify_touch_motion; | ||||
|   virtual_input_device_class->notify_touch_up = clutter_virtual_input_device_evdev_notify_touch_up; | ||||
|  | ||||
|   obj_props[PROP_SEAT] = g_param_spec_pointer ("seat", | ||||
|                                                P_("ClutterSeatEvdev"), | ||||
|   | ||||
| @@ -109,7 +109,6 @@ static const gchar *atom_names[] = { | ||||
| #define N_ATOM_NAMES G_N_ELEMENTS (atom_names) | ||||
|  | ||||
| /* various flags corresponding to pre init setup calls */ | ||||
| static gboolean _want_reset_on_video_memory_purge = FALSE; | ||||
| static gboolean _no_xevent_retrieval = FALSE; | ||||
| static gboolean clutter_enable_xinput = TRUE; | ||||
| static gboolean clutter_enable_argb = FALSE; | ||||
| @@ -682,8 +681,7 @@ clutter_backend_x11_get_renderer (ClutterBackend  *backend, | ||||
|  | ||||
|   /* set the display object we're using */ | ||||
|   cogl_xlib_renderer_set_foreign_display (renderer, xdisplay); | ||||
|   cogl_xlib_renderer_request_reset_on_video_memory_purge (renderer, | ||||
|                                                           _want_reset_on_video_memory_purge); | ||||
|  | ||||
|   return renderer; | ||||
| } | ||||
|  | ||||
| @@ -1028,30 +1026,6 @@ clutter_x11_has_event_retrieval (void) | ||||
|   return !_no_xevent_retrieval; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * clutter_x11_request_reset_on_video_memory_purge: | ||||
|  * | ||||
|  * If the GL driver supports the NV_robustness_video_memory_purge | ||||
|  * extension, this call lets applications request that it gets | ||||
|  * initialized, thus allowing cogl_get_graphics_reset_status() to | ||||
|  * report memory purged errors if they happen. Checking for the | ||||
|  * graphics reset status is the application's responsibility. | ||||
|  * | ||||
|  * This function can only be called before calling clutter_init(). | ||||
|  */ | ||||
| void | ||||
| clutter_x11_request_reset_on_video_memory_purge (void) | ||||
| { | ||||
|   if (_clutter_context_is_initialized ()) | ||||
|     { | ||||
|       g_warning ("%s() can only be used before calling clutter_init()", | ||||
|                  G_STRFUNC); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   _want_reset_on_video_memory_purge = TRUE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * clutter_x11_get_default_screen: | ||||
|  * | ||||
|   | ||||
| @@ -37,6 +37,7 @@ | ||||
| #include "clutter-event-translator.h" | ||||
| #include "clutter-stage-private.h" | ||||
| #include "clutter-private.h" | ||||
| #include "clutter-xkb-a11y-x11.h" | ||||
|  | ||||
| enum | ||||
| { | ||||
| @@ -352,9 +353,11 @@ static void | ||||
| clutter_device_manager_x11_constructed (GObject *gobject) | ||||
| { | ||||
|   ClutterDeviceManagerX11 *manager_x11; | ||||
|   ClutterDeviceManager *manager; | ||||
|   ClutterBackendX11 *backend_x11; | ||||
|  | ||||
|   manager_x11 = CLUTTER_DEVICE_MANAGER_X11 (gobject); | ||||
|   manager = CLUTTER_DEVICE_MANAGER (gobject); | ||||
|  | ||||
|   g_object_get (gobject, "backend", &backend_x11, NULL); | ||||
|   g_assert (backend_x11 != NULL); | ||||
| @@ -389,6 +392,8 @@ clutter_device_manager_x11_constructed (GObject *gobject) | ||||
|   _clutter_input_device_set_associated_device (manager_x11->core_keyboard, | ||||
|                                                manager_x11->core_pointer); | ||||
|  | ||||
|   clutter_device_manager_x11_a11y_init (manager); | ||||
|  | ||||
|   if (G_OBJECT_CLASS (clutter_device_manager_x11_parent_class)->constructed) | ||||
|     G_OBJECT_CLASS (clutter_device_manager_x11_parent_class)->constructed (gobject); | ||||
| } | ||||
| @@ -485,6 +490,13 @@ clutter_device_manager_x11_create_virtual_device (ClutterDeviceManager  *device_ | ||||
|   return g_object_new (CLUTTER_TYPE_VIRTUAL_INPUT_DEVICE_X11, NULL); | ||||
| } | ||||
|  | ||||
| static ClutterVirtualDeviceType | ||||
| clutter_device_manager_x11_get_supported_virtual_device_types (ClutterDeviceManager *device_manager) | ||||
| { | ||||
|   return (CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD | | ||||
|           CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_device_manager_x11_set_property (GObject      *gobject, | ||||
|                                          guint         prop_id, | ||||
| @@ -532,6 +544,8 @@ clutter_device_manager_x11_class_init (ClutterDeviceManagerX11Class *klass) | ||||
|   manager_class->get_core_device = clutter_device_manager_x11_get_core_device; | ||||
|   manager_class->get_device = clutter_device_manager_x11_get_device; | ||||
|   manager_class->create_virtual_device = clutter_device_manager_x11_create_virtual_device; | ||||
|   manager_class->get_supported_virtual_device_types = clutter_device_manager_x11_get_supported_virtual_device_types; | ||||
|   manager_class->apply_kbd_a11y_settings = clutter_device_manager_x11_apply_kbd_a11y_settings; | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -40,6 +40,7 @@ | ||||
| #include "clutter-event-translator.h" | ||||
| #include "clutter-stage-private.h" | ||||
| #include "clutter-private.h" | ||||
| #include "clutter-xkb-a11y-x11.h" | ||||
|  | ||||
| #include <X11/extensions/XInput2.h> | ||||
|  | ||||
| @@ -494,13 +495,21 @@ create_device (ClutterDeviceManagerXI2 *manager_xi2, | ||||
|                          "device-node", node_path, | ||||
|                          "n-rings", num_rings, | ||||
|                          "n-strips", num_strips, | ||||
|                          "n-mode-groups", MAX (num_rings, num_strips), | ||||
|                          NULL); | ||||
|  | ||||
|   translate_device_classes (backend_x11->xdpy, retval, | ||||
|                             info->classes, | ||||
|                             info->num_classes); | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
|   if (source == CLUTTER_PAD_DEVICE) | ||||
|     clutter_input_device_xi2_ensure_wacom_info (retval, manager_xi2->wacom_db); | ||||
| #endif | ||||
|  | ||||
|   g_free (vendor_id); | ||||
|   g_free (product_id); | ||||
|   g_free (node_path); | ||||
|  | ||||
|   CLUTTER_NOTE (BACKEND, "Created device '%s' (id: %d, has-cursor: %s)", | ||||
|                 info->name, | ||||
| @@ -1125,7 +1134,7 @@ translate_pad_event (ClutterEvent       *event, | ||||
|                      ClutterInputDevice *device) | ||||
| { | ||||
|   gdouble value; | ||||
|   guint number; | ||||
|   guint number, mode = 0; | ||||
|  | ||||
|   if (!translate_pad_axis (device, &xev->valuators, | ||||
|                            &event->any.type, | ||||
| @@ -1139,15 +1148,21 @@ translate_pad_event (ClutterEvent       *event, | ||||
|   if (xev->evtype == XI_Motion) | ||||
|     value = -1; | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
|   mode = clutter_input_device_xi2_get_pad_group_mode (device, number); | ||||
| #endif | ||||
|  | ||||
|   if (event->any.type == CLUTTER_PAD_RING) | ||||
|     { | ||||
|       event->pad_ring.ring_number = number; | ||||
|       event->pad_ring.angle = value; | ||||
|       event->pad_ring.mode = mode; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       event->pad_strip.strip_number = number; | ||||
|       event->pad_strip.value = value; | ||||
|       event->pad_strip.mode = mode; | ||||
|     } | ||||
|  | ||||
|   event->any.time = xev->time; | ||||
| @@ -1160,7 +1175,7 @@ translate_pad_event (ClutterEvent       *event, | ||||
|                 event->any.type == CLUTTER_PAD_RING | ||||
|                 ? "pad ring  " | ||||
|                 : "pad strip", | ||||
|                 (unsigned int) stage_x11->xwin, | ||||
|                 (unsigned int) xev->event, | ||||
|                 device->id, | ||||
|                 device->device_name, | ||||
|                 event->any.time, value); | ||||
| @@ -1256,6 +1271,9 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator, | ||||
|                                       ? CLUTTER_KEY_PRESS | ||||
|                                       : CLUTTER_KEY_RELEASE; | ||||
|  | ||||
|         if (xev->evtype == XI_KeyPress && xev->flags & XIKeyRepeat) | ||||
|           clutter_event_set_flags (event, CLUTTER_EVENT_FLAG_REPEATED); | ||||
|  | ||||
|         event->key.time = xev->time; | ||||
|         event->key.stage = stage; | ||||
| 	_clutter_input_device_xi2_translate_state (event, &xev->mods, &xev->buttons, &xev->group); | ||||
| @@ -1374,6 +1392,13 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator, | ||||
|  | ||||
|             /* Pad buttons are 0-indexed */ | ||||
|             event->pad_button.button = xev->detail - 1; | ||||
| #ifdef HAVE_LIBWACOM | ||||
|             clutter_input_device_xi2_update_pad_state (device, | ||||
|                                                        event->pad_button.button, | ||||
|                                                        (xi_event->evtype == XI_ButtonPress), | ||||
|                                                        &event->pad_button.group, | ||||
|                                                        &event->pad_button.mode); | ||||
| #endif | ||||
|             clutter_event_set_device (event, device); | ||||
|             clutter_event_set_source_device (event, source_device); | ||||
|  | ||||
| @@ -1987,6 +2012,8 @@ clutter_device_manager_xi2_constructed (GObject *gobject) | ||||
|  | ||||
|   XSync (backend_x11->xdpy, False); | ||||
|  | ||||
|   clutter_device_manager_x11_a11y_init (manager); | ||||
|  | ||||
|   if (G_OBJECT_CLASS (clutter_device_manager_xi2_parent_class)->constructed) | ||||
|     G_OBJECT_CLASS (clutter_device_manager_xi2_parent_class)->constructed (gobject); | ||||
| } | ||||
| @@ -2021,6 +2048,13 @@ clutter_device_manager_xi2_create_virtual_device (ClutterDeviceManager   *manage | ||||
|                        NULL); | ||||
| } | ||||
|  | ||||
| static ClutterVirtualDeviceType | ||||
| clutter_device_manager_xi2_get_supported_virtual_device_types (ClutterDeviceManager *device_manager) | ||||
| { | ||||
|   return (CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD | | ||||
|           CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_device_manager_xi2_class_init (ClutterDeviceManagerXI2Class *klass) | ||||
| { | ||||
| @@ -2049,6 +2083,8 @@ clutter_device_manager_xi2_class_init (ClutterDeviceManagerXI2Class *klass) | ||||
|   manager_class->get_device = clutter_device_manager_xi2_get_device; | ||||
|   manager_class->select_stage_events = clutter_device_manager_xi2_select_stage_events; | ||||
|   manager_class->create_virtual_device = clutter_device_manager_xi2_create_virtual_device; | ||||
|   manager_class->get_supported_virtual_device_types = clutter_device_manager_xi2_get_supported_virtual_device_types; | ||||
|   manager_class->apply_kbd_a11y_settings = clutter_device_manager_x11_apply_kbd_a11y_settings; | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -2059,4 +2095,8 @@ clutter_device_manager_xi2_init (ClutterDeviceManagerXI2 *self) | ||||
|                                                (GDestroyNotify) g_object_unref); | ||||
|   self->tools_by_serial = g_hash_table_new_full (NULL, NULL, NULL, | ||||
|                                                  (GDestroyNotify) g_object_unref); | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
|   self->wacom_db = libwacom_database_new (); | ||||
| #endif | ||||
| } | ||||
|   | ||||
| @@ -26,6 +26,10 @@ | ||||
|  | ||||
| #include <clutter/clutter-device-manager.h> | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
| #include <libwacom/libwacom.h> | ||||
| #endif | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define CLUTTER_TYPE_DEVICE_MANAGER_XI2            (_clutter_device_manager_xi2_get_type ()) | ||||
| @@ -51,6 +55,10 @@ struct _ClutterDeviceManagerXI2 | ||||
|   GList *slave_devices; | ||||
|  | ||||
|   int opcode; | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
|   WacomDeviceDatabase *wacom_db; | ||||
| #endif | ||||
| }; | ||||
|  | ||||
| struct _ClutterDeviceManagerXI2Class | ||||
|   | ||||
| @@ -45,6 +45,11 @@ struct _ClutterInputDeviceXI2 | ||||
|  | ||||
|   gint device_id; | ||||
|   ClutterInputDeviceTool *current_tool; | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
|   WacomDevice *wacom_device; | ||||
|   GArray *group_modes; | ||||
| #endif | ||||
| }; | ||||
|  | ||||
| #define N_BUTTONS       5 | ||||
| @@ -64,6 +69,15 @@ clutter_input_device_xi2_constructed (GObject *gobject) | ||||
|  | ||||
|   if (G_OBJECT_CLASS (clutter_input_device_xi2_parent_class)->constructed) | ||||
|     G_OBJECT_CLASS (clutter_input_device_xi2_parent_class)->constructed (gobject); | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
|   if (clutter_input_device_get_device_type (CLUTTER_INPUT_DEVICE (gobject)) == CLUTTER_PAD_DEVICE) | ||||
|     { | ||||
|       device_xi2->group_modes = g_array_new (FALSE, TRUE, sizeof (guint)); | ||||
|       g_array_set_size (device_xi2->group_modes, | ||||
|                         clutter_input_device_get_n_mode_groups (CLUTTER_INPUT_DEVICE (gobject))); | ||||
|     } | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| @@ -87,6 +101,85 @@ clutter_input_device_xi2_is_grouped (ClutterInputDevice *device, | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_input_device_xi2_finalize (GObject *object) | ||||
| { | ||||
| #ifdef HAVE_LIBWACOM | ||||
|   ClutterInputDeviceXI2 *device_xi2 = CLUTTER_INPUT_DEVICE_XI2 (object); | ||||
|  | ||||
|   if (device_xi2->wacom_device) | ||||
|     libwacom_destroy (device_xi2->wacom_device); | ||||
|  | ||||
|   if (device_xi2->group_modes) | ||||
|     g_array_unref (device_xi2->group_modes); | ||||
| #endif | ||||
|  | ||||
|   G_OBJECT_CLASS (clutter_input_device_xi2_parent_class)->finalize (object); | ||||
| } | ||||
|  | ||||
| static gint | ||||
| clutter_input_device_xi2_get_group_n_modes (ClutterInputDevice *device, | ||||
|                                             gint                group) | ||||
| { | ||||
| #ifdef HAVE_LIBWACOM | ||||
|   ClutterInputDeviceXI2 *device_xi2 = CLUTTER_INPUT_DEVICE_XI2 (device); | ||||
|  | ||||
|   if (device_xi2->wacom_device) | ||||
|     { | ||||
|       if (group == 0) | ||||
|         { | ||||
|           if (libwacom_has_ring (device_xi2->wacom_device)) | ||||
|             return libwacom_get_ring_num_modes (device_xi2->wacom_device); | ||||
|           else if (libwacom_get_num_strips (device_xi2->wacom_device) >= 1) | ||||
|             return libwacom_get_strips_num_modes (device_xi2->wacom_device); | ||||
|         } | ||||
|       else if (group == 1) | ||||
|         { | ||||
|           if (libwacom_has_ring2 (device_xi2->wacom_device)) | ||||
|             return libwacom_get_ring2_num_modes (device_xi2->wacom_device); | ||||
|           else if (libwacom_get_num_strips (device_xi2->wacom_device) >= 2) | ||||
|             return libwacom_get_strips_num_modes (device_xi2->wacom_device); | ||||
|         } | ||||
|     } | ||||
| #endif | ||||
|  | ||||
|   return -1; | ||||
| } | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
| static int | ||||
| clutter_input_device_xi2_get_button_group (ClutterInputDevice *device, | ||||
|                                            guint               button) | ||||
| { | ||||
|   ClutterInputDeviceXI2 *device_xi2 = CLUTTER_INPUT_DEVICE_XI2 (device); | ||||
|  | ||||
|   if (device_xi2->wacom_device) | ||||
|     { | ||||
|       if (button >= libwacom_get_num_buttons (device_xi2->wacom_device)) | ||||
|         return -1; | ||||
|  | ||||
|       return libwacom_get_button_led_group (device_xi2->wacom_device, | ||||
|                                             'A' + button); | ||||
|     } | ||||
|   else | ||||
|     return -1; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static gboolean | ||||
| clutter_input_device_xi2_is_mode_switch_button (ClutterInputDevice *device, | ||||
|                                                 guint               group, | ||||
|                                                 guint               button) | ||||
| { | ||||
|   int button_group = -1; | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
|   button_group = clutter_input_device_xi2_get_button_group (device, button); | ||||
| #endif | ||||
|  | ||||
|   return button_group == (int) group; | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_input_device_xi2_class_init (ClutterInputDeviceXI2Class *klass) | ||||
| { | ||||
| @@ -94,9 +187,12 @@ clutter_input_device_xi2_class_init (ClutterInputDeviceXI2Class *klass) | ||||
|   ClutterInputDeviceClass *device_class = CLUTTER_INPUT_DEVICE_CLASS (klass); | ||||
|  | ||||
|   gobject_class->constructed = clutter_input_device_xi2_constructed; | ||||
|   gobject_class->finalize = clutter_input_device_xi2_finalize; | ||||
|  | ||||
|   device_class->keycode_to_evdev = clutter_input_device_xi2_keycode_to_evdev; | ||||
|   device_class->is_grouped = clutter_input_device_xi2_is_grouped; | ||||
|   device_class->get_group_n_modes = clutter_input_device_xi2_get_group_n_modes; | ||||
|   device_class->is_mode_switch_button = clutter_input_device_xi2_is_mode_switch_button; | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -196,3 +292,66 @@ clutter_input_device_xi2_get_current_tool (ClutterInputDevice *device) | ||||
|   ClutterInputDeviceXI2 *device_xi2 = CLUTTER_INPUT_DEVICE_XI2 (device); | ||||
|   return device_xi2->current_tool; | ||||
| } | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
| void | ||||
| clutter_input_device_xi2_ensure_wacom_info (ClutterInputDevice  *device, | ||||
|                                             WacomDeviceDatabase *wacom_db) | ||||
| { | ||||
|   ClutterInputDeviceXI2 *device_xi2 = CLUTTER_INPUT_DEVICE_XI2 (device); | ||||
|   const gchar *node_path; | ||||
|  | ||||
|   node_path = clutter_input_device_get_device_node (device); | ||||
|   device_xi2->wacom_device = libwacom_new_from_path (wacom_db, node_path, | ||||
|                                                      WFALLBACK_NONE, NULL); | ||||
| } | ||||
|  | ||||
| guint | ||||
| clutter_input_device_xi2_get_pad_group_mode (ClutterInputDevice *device, | ||||
|                                              guint               group) | ||||
| { | ||||
|   ClutterInputDeviceXI2 *device_xi2 = CLUTTER_INPUT_DEVICE_XI2 (device); | ||||
|  | ||||
|   if (group >= device_xi2->group_modes->len) | ||||
|     return 0; | ||||
|  | ||||
|   return g_array_index (device_xi2->group_modes, guint, group); | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_input_device_xi2_update_pad_state (ClutterInputDevice *device, | ||||
|                                            guint               button, | ||||
|                                            guint               state, | ||||
|                                            guint              *group, | ||||
|                                            guint              *mode) | ||||
| { | ||||
|   ClutterInputDeviceXI2 *device_xi2 = CLUTTER_INPUT_DEVICE_XI2 (device); | ||||
|   guint button_group, *group_mode; | ||||
|   gboolean is_mode_switch = FALSE; | ||||
|  | ||||
|   button_group = clutter_input_device_xi2_get_button_group (device, button); | ||||
|   is_mode_switch = button_group >= 0; | ||||
|  | ||||
|   /* Assign all non-mode-switch buttons to group 0 so far */ | ||||
|   button_group = MAX (0, button_group); | ||||
|  | ||||
|   if (button_group >= device_xi2->group_modes->len) | ||||
|     return; | ||||
|  | ||||
|   group_mode = &g_array_index (device_xi2->group_modes, guint, button_group); | ||||
|  | ||||
|   if (is_mode_switch && state) | ||||
|     { | ||||
|       guint next, n_modes; | ||||
|  | ||||
|       n_modes = clutter_input_device_get_group_n_modes (device, button_group); | ||||
|       next = (*group_mode + 1) % n_modes; | ||||
|       *group_mode = next; | ||||
|     } | ||||
|  | ||||
|   if (group) | ||||
|     *group = button_group; | ||||
|   if (mode) | ||||
|     *mode = *group_mode; | ||||
| } | ||||
| #endif | ||||
|   | ||||
| @@ -27,6 +27,10 @@ | ||||
| #include <clutter/clutter-input-device.h> | ||||
| #include <X11/extensions/XInput2.h> | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
| #include <libwacom/libwacom.h> | ||||
| #endif | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define CLUTTER_TYPE_INPUT_DEVICE_XI2           (_clutter_input_device_xi2_get_type ()) | ||||
| @@ -45,6 +49,21 @@ void  clutter_input_device_xi2_update_tool      (ClutterInputDevice     *device, | ||||
|                                                  ClutterInputDeviceTool *tool); | ||||
| ClutterInputDeviceTool * clutter_input_device_xi2_get_current_tool (ClutterInputDevice *device); | ||||
|  | ||||
| #ifdef HAVE_LIBWACOM | ||||
| void clutter_input_device_xi2_ensure_wacom_info (ClutterInputDevice  *device, | ||||
|                                                  WacomDeviceDatabase *wacom_db); | ||||
|  | ||||
| guint clutter_input_device_xi2_get_pad_group_mode (ClutterInputDevice *device, | ||||
|                                                    guint               group); | ||||
|  | ||||
| void clutter_input_device_xi2_update_pad_state (ClutterInputDevice *device, | ||||
|                                                 guint               button, | ||||
|                                                 guint               state, | ||||
|                                                 guint              *group, | ||||
|                                                 guint              *mode); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __CLUTTER_INPUT_DEVICE_XI2_H__ */ | ||||
|   | ||||
| @@ -38,6 +38,14 @@ | ||||
|  | ||||
| typedef struct _ClutterKeymapX11Class   ClutterKeymapX11Class; | ||||
| typedef struct _DirectionCacheEntry     DirectionCacheEntry; | ||||
| typedef struct _ClutterKeymapKey        ClutterKeymapKey; | ||||
|  | ||||
| struct _ClutterKeymapKey | ||||
| { | ||||
|   guint keycode; | ||||
|   guint group; | ||||
|   guint level; | ||||
| }; | ||||
|  | ||||
| struct _DirectionCacheEntry | ||||
| { | ||||
| @@ -59,6 +67,7 @@ struct _ClutterKeymapX11 | ||||
|  | ||||
|   ClutterModifierType num_lock_mask; | ||||
|   ClutterModifierType scroll_lock_mask; | ||||
|   ClutterModifierType level3_shift_mask; | ||||
|  | ||||
|   PangoDirection current_direction; | ||||
|  | ||||
| @@ -69,6 +78,7 @@ struct _ClutterKeymapX11 | ||||
|   Atom current_group_atom; | ||||
|   guint current_cache_serial; | ||||
|   DirectionCacheEntry group_direction_cache[4]; | ||||
|   int current_group; | ||||
| #endif | ||||
|  | ||||
|   guint caps_lock_state : 1; | ||||
| @@ -198,6 +208,9 @@ get_xkb (ClutterKeymapX11 *keymap_x11) | ||||
|   if (keymap_x11->scroll_lock_mask == 0) | ||||
|     keymap_x11->scroll_lock_mask = XkbKeysymToModifiers (backend_x11->xdpy, | ||||
|                                                          XK_Scroll_Lock); | ||||
|   if (keymap_x11->level3_shift_mask == 0) | ||||
|     keymap_x11->level3_shift_mask = XkbKeysymToModifiers (backend_x11->xdpy, | ||||
|                                                           XK_ISO_Level3_Shift); | ||||
|  | ||||
|   return keymap_x11->xkb_desc; | ||||
| } | ||||
| @@ -469,6 +482,7 @@ static void | ||||
| clutter_keymap_x11_init (ClutterKeymapX11 *keymap) | ||||
| { | ||||
|   keymap->current_direction = PANGO_DIRECTION_NEUTRAL; | ||||
|   keymap->current_group = -1; | ||||
| } | ||||
|  | ||||
| static ClutterTranslateReturn | ||||
| @@ -498,7 +512,8 @@ clutter_keymap_x11_translate_event (ClutterEventTranslator *translator, | ||||
|         { | ||||
|         case XkbStateNotify: | ||||
|           CLUTTER_NOTE (EVENT, "Updating keyboard state"); | ||||
|           update_direction (keymap_x11, XkbStateGroup (&xkb_event->state)); | ||||
|           keymap_x11->current_group = XkbStateGroup (&xkb_event->state); | ||||
|           update_direction (keymap_x11, keymap_x11->current_group); | ||||
|           update_locked_mods (keymap_x11, xkb_event->state.locked_mods); | ||||
|           retval = CLUTTER_TRANSLATE_REMOVE; | ||||
|           break; | ||||
| @@ -665,3 +680,164 @@ _clutter_keymap_x11_get_direction (ClutterKeymapX11 *keymap) | ||||
| #endif | ||||
|     return PANGO_DIRECTION_NEUTRAL; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| clutter_keymap_x11_get_entries_for_keyval (ClutterKeymapX11  *keymap_x11, | ||||
|                                            guint              keyval, | ||||
|                                            ClutterKeymapKey **keys, | ||||
|                                            gint              *n_keys) | ||||
| { | ||||
| #ifdef HAVE_XKB | ||||
|   if (CLUTTER_BACKEND_X11 (keymap_x11->backend)->use_xkb) | ||||
|     { | ||||
|       XkbDescRec *xkb = get_xkb (keymap_x11); | ||||
|       GArray *retval; | ||||
|       gint keycode; | ||||
|  | ||||
|       keycode = keymap_x11->min_keycode; | ||||
|       retval = g_array_new (FALSE, FALSE, sizeof (ClutterKeymapKey)); | ||||
|  | ||||
|       while (keycode <= keymap_x11->max_keycode) | ||||
|         { | ||||
|           gint max_shift_levels = XkbKeyGroupsWidth (xkb, keycode); | ||||
|           gint group = 0; | ||||
|           gint level = 0; | ||||
|           gint total_syms = XkbKeyNumSyms (xkb, keycode); | ||||
|           gint i = 0; | ||||
|           KeySym *entry; | ||||
|  | ||||
|           /* entry is an array with all syms for group 0, all | ||||
|            * syms for group 1, etc. and for each group the | ||||
|            * shift level syms are in order | ||||
|            */ | ||||
|           entry = XkbKeySymsPtr (xkb, keycode); | ||||
|  | ||||
|           while (i < total_syms) | ||||
|             { | ||||
|               g_assert (i == (group * max_shift_levels + level)); | ||||
|  | ||||
|               if (entry[i] == keyval) | ||||
|                 { | ||||
|                   ClutterKeymapKey key; | ||||
|  | ||||
|                   key.keycode = keycode; | ||||
|                   key.group = group; | ||||
|                   key.level = level; | ||||
|  | ||||
|                   g_array_append_val (retval, key); | ||||
|  | ||||
|                   g_assert (XkbKeySymEntry (xkb, keycode, level, group) == | ||||
|                             keyval); | ||||
|                 } | ||||
|  | ||||
|               ++level; | ||||
|  | ||||
|               if (level == max_shift_levels) | ||||
|                 { | ||||
|                   level = 0; | ||||
|                   ++group; | ||||
|                 } | ||||
|  | ||||
|               ++i; | ||||
|             } | ||||
|  | ||||
|           ++keycode; | ||||
|         } | ||||
|  | ||||
|       if (retval->len > 0) | ||||
|         { | ||||
|           *keys = (ClutterKeymapKey*) retval->data; | ||||
|           *n_keys = retval->len; | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           *keys = NULL; | ||||
|           *n_keys = 0; | ||||
|         } | ||||
|  | ||||
|       g_array_free (retval, retval->len > 0 ? FALSE : TRUE); | ||||
|  | ||||
|       return *n_keys > 0; | ||||
|     } | ||||
|   else | ||||
| #endif | ||||
|     { | ||||
|       return FALSE; | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_keymap_x11_latch_modifiers (ClutterKeymapX11 *keymap_x11, | ||||
|                                     uint32_t          level, | ||||
|                                     gboolean          enable) | ||||
| { | ||||
| #ifdef HAVE_XKB | ||||
|   ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (keymap_x11->backend); | ||||
|   uint32_t modifiers[] = { | ||||
|     0, | ||||
|     ShiftMask, | ||||
|     keymap_x11->level3_shift_mask, | ||||
|     keymap_x11->level3_shift_mask | ShiftMask, | ||||
|   }; | ||||
|   uint32_t value = 0; | ||||
|  | ||||
|   if (!backend_x11->use_xkb) | ||||
|     return; | ||||
|  | ||||
|   level = CLAMP (level, 0, G_N_ELEMENTS (modifiers) - 1); | ||||
|  | ||||
|   if (enable) | ||||
|     value = modifiers[level]; | ||||
|   else | ||||
|     value = 0; | ||||
|  | ||||
|   XkbLatchModifiers (clutter_x11_get_default_display (), | ||||
|                      XkbUseCoreKbd, modifiers[level], | ||||
|                      value); | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static uint32_t | ||||
| clutter_keymap_x11_get_current_group (ClutterKeymapX11 *keymap_x11) | ||||
| { | ||||
|   ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (keymap_x11->backend); | ||||
|   XkbStateRec state_rec; | ||||
|  | ||||
|   if (keymap_x11->current_group >= 0) | ||||
|     return keymap_x11->current_group; | ||||
|  | ||||
|   XkbGetState (backend_x11->xdpy, XkbUseCoreKbd, &state_rec); | ||||
|   return XkbStateGroup (&state_rec); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| clutter_keymap_x11_keycode_for_keyval (ClutterKeymapX11 *keymap_x11, | ||||
|                                        guint             keyval, | ||||
|                                        guint            *keycode_out, | ||||
|                                        guint            *level_out) | ||||
| { | ||||
|   ClutterKeymapKey *keys; | ||||
|   gint i, n_keys, group; | ||||
|   gboolean found = FALSE; | ||||
|  | ||||
|   g_return_val_if_fail (keycode_out != NULL, FALSE); | ||||
|   g_return_val_if_fail (level_out != NULL, FALSE); | ||||
|  | ||||
|   group = clutter_keymap_x11_get_current_group (keymap_x11); | ||||
|  | ||||
|   if (!clutter_keymap_x11_get_entries_for_keyval (keymap_x11, keyval, &keys, &n_keys)) | ||||
|     return FALSE; | ||||
|  | ||||
|   for (i = 0; i < n_keys && !found; i++) | ||||
|     { | ||||
|       if (keys[i].group == group) | ||||
|         { | ||||
|           *keycode_out = keys[i].keycode; | ||||
|           *level_out = keys[i].level; | ||||
|           found = TRUE; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   g_free (keys); | ||||
|   return found; | ||||
| } | ||||
|   | ||||
| @@ -51,6 +51,14 @@ gboolean _clutter_keymap_x11_get_is_modifier     (ClutterKeymapX11    *keymap, | ||||
|  | ||||
| PangoDirection _clutter_keymap_x11_get_direction (ClutterKeymapX11    *keymap); | ||||
|  | ||||
| gboolean clutter_keymap_x11_keycode_for_keyval (ClutterKeymapX11 *keymap_x11, | ||||
|                                                 guint             keyval, | ||||
|                                                 guint            *keycode_out, | ||||
|                                                 guint            *level_out); | ||||
| void     clutter_keymap_x11_latch_modifiers (ClutterKeymapX11 *keymap_x11, | ||||
|                                              uint32_t          level, | ||||
|                                              gboolean          enable); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __CLUTTER_KEYMAP_X11_H__ */ | ||||
|   | ||||
| @@ -14,7 +14,6 @@ static const struct { | ||||
|   { "Xft/HintStyle",           "font-hint-style" }, | ||||
|   { "Xft/RGBA",                "font-subpixel-order" }, | ||||
|   { "Fontconfig/Timestamp",    "fontconfig-timestamp" }, | ||||
|   { "Gdk/UnscaledDPI",         "unscaled-font-dpi" }, | ||||
| }; | ||||
|  | ||||
| static const gint _n_clutter_settings_map = G_N_ELEMENTS (_clutter_settings_map); | ||||
|   | ||||
| @@ -32,6 +32,8 @@ | ||||
|  | ||||
| #include "clutter-virtual-input-device.h" | ||||
| #include "x11/clutter-virtual-input-device-x11.h" | ||||
| #include "x11/clutter-backend-x11.h" | ||||
| #include "x11/clutter-keymap-x11.h" | ||||
|  | ||||
| struct _ClutterVirtualInputDeviceX11 | ||||
| { | ||||
| @@ -48,6 +50,10 @@ clutter_virtual_input_device_x11_notify_relative_motion (ClutterVirtualInputDevi | ||||
|                                                          double                     dx, | ||||
|                                                          double                     dy) | ||||
| { | ||||
|   XTestFakeRelativeMotionEvent (clutter_x11_get_default_display (), | ||||
|                                 (int) dx, | ||||
|                                 (int) dy, | ||||
|                                 0); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -56,6 +62,11 @@ clutter_virtual_input_device_x11_notify_absolute_motion (ClutterVirtualInputDevi | ||||
|                                                          double                     x, | ||||
|                                                          double                     y) | ||||
| { | ||||
|   XTestFakeMotionEvent (clutter_x11_get_default_display (), | ||||
|                         clutter_x11_get_default_screen (), | ||||
|                         (int) x, | ||||
|                         (int) y, | ||||
|                         0); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -68,6 +79,48 @@ clutter_virtual_input_device_x11_notify_button (ClutterVirtualInputDevice *virtu | ||||
|                         button, button_state == CLUTTER_BUTTON_STATE_PRESSED, 0); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_x11_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                          uint64_t                   time_us, | ||||
|                                                          ClutterScrollDirection     direction, | ||||
|                                                          ClutterScrollSource        scroll_source) | ||||
| { | ||||
|   Display *xdisplay = clutter_x11_get_default_display (); | ||||
|   int button; | ||||
|  | ||||
|   switch (direction) | ||||
|     { | ||||
|     case CLUTTER_SCROLL_UP: | ||||
|       button = 4; | ||||
|       break; | ||||
|     case CLUTTER_SCROLL_DOWN: | ||||
|       button = 5; | ||||
|       break; | ||||
|     case CLUTTER_SCROLL_LEFT: | ||||
|       button = 6; | ||||
|       break; | ||||
|     case CLUTTER_SCROLL_RIGHT: | ||||
|       button = 7; | ||||
|       break; | ||||
|     default: | ||||
|       g_warn_if_reached (); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   XTestFakeButtonEvent (xdisplay, button, True, 0); | ||||
|   XTestFakeButtonEvent (xdisplay, button, False, 0); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_x11_notify_scroll_continuous (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                            uint64_t                   time_us, | ||||
|                                                            double                     dx, | ||||
|                                                            double                     dy, | ||||
|                                                            ClutterScrollSource        scroll_source, | ||||
|                                                            ClutterScrollFinishFlags   finish_flags) | ||||
| { | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_x11_notify_key (ClutterVirtualInputDevice *virtual_device, | ||||
|                                              uint64_t                   time_us, | ||||
| @@ -84,11 +137,53 @@ clutter_virtual_input_device_x11_notify_keyval (ClutterVirtualInputDevice *virtu | ||||
| 						uint32_t                   keyval, | ||||
| 						ClutterKeyState            key_state) | ||||
| { | ||||
|   KeyCode keycode; | ||||
|   ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (clutter_get_default_backend ()); | ||||
|   ClutterKeymapX11 *keymap = backend_x11->keymap; | ||||
|   uint32_t keycode, level; | ||||
|  | ||||
|   if (!clutter_keymap_x11_keycode_for_keyval (keymap, keyval, &keycode, &level)) | ||||
|     { | ||||
|       g_warning ("No keycode found for keyval %x in current group", keyval); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   if (key_state == CLUTTER_KEY_STATE_PRESSED) | ||||
|     clutter_keymap_x11_latch_modifiers (keymap, level, TRUE); | ||||
|  | ||||
|   keycode = XKeysymToKeycode (clutter_x11_get_default_display (), keyval); | ||||
|   XTestFakeKeyEvent (clutter_x11_get_default_display (), | ||||
|                      keycode, key_state == CLUTTER_KEY_STATE_PRESSED, 0); | ||||
|                      (KeyCode) keycode, | ||||
|                      key_state == CLUTTER_KEY_STATE_PRESSED, 0); | ||||
|  | ||||
|   if (key_state == CLUTTER_KEY_STATE_RELEASED) | ||||
|     clutter_keymap_x11_latch_modifiers (keymap, level, FALSE); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_x11_notify_touch_down (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                     uint64_t                   time_us, | ||||
|                                                     int                        device_slot, | ||||
|                                                     double                     x, | ||||
|                                                     double                     y) | ||||
| { | ||||
|   g_warning ("Virtual touch motion not implemented under X11"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_x11_notify_touch_motion (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                       uint64_t                   time_us, | ||||
|                                                       int                        device_slot, | ||||
|                                                       double                     x, | ||||
|                                                       double                     y) | ||||
| { | ||||
|   g_warning ("Virtual touch motion not implemented under X11"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| clutter_virtual_input_device_x11_notify_touch_up (ClutterVirtualInputDevice *virtual_device, | ||||
|                                                   uint64_t                   time_us, | ||||
|                                                   int                        device_slot) | ||||
| { | ||||
|   g_warning ("Virtual touch motion not implemented under X11"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -105,6 +200,11 @@ clutter_virtual_input_device_x11_class_init (ClutterVirtualInputDeviceX11Class * | ||||
|   virtual_input_device_class->notify_relative_motion = clutter_virtual_input_device_x11_notify_relative_motion; | ||||
|   virtual_input_device_class->notify_absolute_motion = clutter_virtual_input_device_x11_notify_absolute_motion; | ||||
|   virtual_input_device_class->notify_button = clutter_virtual_input_device_x11_notify_button; | ||||
|   virtual_input_device_class->notify_discrete_scroll = clutter_virtual_input_device_x11_notify_discrete_scroll; | ||||
|   virtual_input_device_class->notify_scroll_continuous = clutter_virtual_input_device_x11_notify_scroll_continuous; | ||||
|   virtual_input_device_class->notify_key = clutter_virtual_input_device_x11_notify_key; | ||||
|   virtual_input_device_class->notify_keyval = clutter_virtual_input_device_x11_notify_keyval; | ||||
|   virtual_input_device_class->notify_touch_down = clutter_virtual_input_device_x11_notify_touch_down; | ||||
|   virtual_input_device_class->notify_touch_motion = clutter_virtual_input_device_x11_notify_touch_motion; | ||||
|   virtual_input_device_class->notify_touch_up = clutter_virtual_input_device_x11_notify_touch_up; | ||||
| } | ||||
|   | ||||
| @@ -161,9 +161,6 @@ gint clutter_x11_event_get_key_group (const ClutterEvent *event); | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| guint clutter_x11_event_sequence_get_touch_detail (const ClutterEventSequence *sequence); | ||||
|  | ||||
| CLUTTER_AVAILABLE_IN_ALL | ||||
| void clutter_x11_request_reset_on_video_memory_purge (void); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __CLUTTER_X11_H__ */ | ||||
|   | ||||
							
								
								
									
										328
									
								
								clutter/clutter/x11/clutter-xkb-a11y-x11.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										328
									
								
								clutter/clutter/x11/clutter-xkb-a11y-x11.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,328 @@ | ||||
| /* | ||||
|  * | ||||
|  * Copyright © 2001 Ximian, Inc. | ||||
|  * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu> | ||||
|  * Copyright (C) 2017 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. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #include "clutter-device-manager-private.h" | ||||
| #include "clutter-xkb-a11y-x11.h" | ||||
|  | ||||
| #include <X11/XKBlib.h> | ||||
| #include <X11/extensions/XKBstr.h> | ||||
|  | ||||
| #define DEFAULT_XKB_SET_CONTROLS_MASK XkbSlowKeysMask         | \ | ||||
|                                       XkbBounceKeysMask       | \ | ||||
|                                       XkbStickyKeysMask       | \ | ||||
|                                       XkbMouseKeysMask        | \ | ||||
|                                       XkbMouseKeysAccelMask   | \ | ||||
|                                       XkbAccessXKeysMask      | \ | ||||
|                                       XkbAccessXTimeoutMask   | \ | ||||
|                                       XkbAccessXFeedbackMask  | \ | ||||
|                                       XkbControlsEnabledMask | ||||
|  | ||||
| static int _xkb_event_base; | ||||
|  | ||||
| static XkbDescRec * | ||||
| get_xkb_desc_rec (ClutterBackendX11 *backend_x11) | ||||
| { | ||||
|   XkbDescRec *desc; | ||||
|   Status      status = Success; | ||||
|  | ||||
|   clutter_x11_trap_x_errors (); | ||||
|   desc = XkbGetMap (backend_x11->xdpy, XkbAllMapComponentsMask, XkbUseCoreKbd); | ||||
|   if (desc != NULL) | ||||
|     { | ||||
|       desc->ctrls = NULL; | ||||
|       status = XkbGetControls (backend_x11->xdpy, XkbAllControlsMask, desc); | ||||
|     } | ||||
|   clutter_x11_untrap_x_errors (); | ||||
|  | ||||
|   g_return_val_if_fail (desc != NULL, NULL); | ||||
|   g_return_val_if_fail (desc->ctrls != NULL, NULL); | ||||
|   g_return_val_if_fail (status == Success, NULL); | ||||
|  | ||||
|   return desc; | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_xkb_desc_rec (ClutterBackendX11 *backend_x11, | ||||
|                   XkbDescRec        *desc) | ||||
| { | ||||
|   clutter_x11_trap_x_errors (); | ||||
|   XkbSetControls (backend_x11->xdpy, DEFAULT_XKB_SET_CONTROLS_MASK, desc); | ||||
|   XSync (backend_x11->xdpy, FALSE); | ||||
|   clutter_x11_untrap_x_errors (); | ||||
| } | ||||
|  | ||||
| static void | ||||
| check_settings_changed (ClutterDeviceManager *device_manager) | ||||
| { | ||||
|   ClutterBackendX11 *backend_x11; | ||||
|   ClutterKbdA11ySettings kbd_a11y_settings; | ||||
|   ClutterKeyboardA11yFlags what_changed = 0; | ||||
|   XkbDescRec *desc; | ||||
|  | ||||
|   backend_x11 = CLUTTER_BACKEND_X11 (clutter_get_default_backend ()); | ||||
|   desc = get_xkb_desc_rec (backend_x11); | ||||
|   if (!desc) | ||||
|     return; | ||||
|  | ||||
|   clutter_device_manager_get_kbd_a11y_settings (device_manager, &kbd_a11y_settings); | ||||
|  | ||||
|   if (desc->ctrls->enabled_ctrls & XkbSlowKeysMask && | ||||
|       !(kbd_a11y_settings.controls & CLUTTER_A11Y_SLOW_KEYS_ENABLED)) | ||||
|     { | ||||
|       what_changed |= CLUTTER_A11Y_SLOW_KEYS_ENABLED; | ||||
|       kbd_a11y_settings.controls |= CLUTTER_A11Y_SLOW_KEYS_ENABLED; | ||||
|     } | ||||
|   else if (!(desc->ctrls->enabled_ctrls & XkbSlowKeysMask) && | ||||
|            kbd_a11y_settings.controls & CLUTTER_A11Y_SLOW_KEYS_ENABLED) | ||||
|     { | ||||
|       what_changed |= CLUTTER_A11Y_SLOW_KEYS_ENABLED; | ||||
|       kbd_a11y_settings.controls &= ~CLUTTER_A11Y_SLOW_KEYS_ENABLED; | ||||
|     } | ||||
|  | ||||
|   if (desc->ctrls->enabled_ctrls & XkbStickyKeysMask && | ||||
|       !(kbd_a11y_settings.controls & CLUTTER_A11Y_STICKY_KEYS_ENABLED)) | ||||
|     { | ||||
|       what_changed |= CLUTTER_A11Y_STICKY_KEYS_ENABLED; | ||||
|       kbd_a11y_settings.controls |= CLUTTER_A11Y_STICKY_KEYS_ENABLED; | ||||
|     } | ||||
|   else if (!(desc->ctrls->enabled_ctrls & XkbStickyKeysMask) && | ||||
|            kbd_a11y_settings.controls & CLUTTER_A11Y_STICKY_KEYS_ENABLED) | ||||
|     { | ||||
|       what_changed |= CLUTTER_A11Y_STICKY_KEYS_ENABLED; | ||||
|       kbd_a11y_settings.controls &= ~CLUTTER_A11Y_STICKY_KEYS_ENABLED; | ||||
|     } | ||||
|  | ||||
|   if (what_changed) | ||||
|     g_signal_emit_by_name (device_manager, | ||||
|                            "kbd-a11y-flags-changed", | ||||
|                            kbd_a11y_settings.controls, | ||||
|                            what_changed); | ||||
|  | ||||
|   XkbFreeKeyboard (desc, XkbAllComponentsMask, TRUE); | ||||
| } | ||||
|  | ||||
| static ClutterX11FilterReturn | ||||
| xkb_a11y_event_filter (XEvent       *xevent, | ||||
|                        ClutterEvent *clutter_event, | ||||
|                        gpointer      data) | ||||
| { | ||||
|   ClutterDeviceManager *device_manager = CLUTTER_DEVICE_MANAGER (data); | ||||
|   XkbEvent *xkbev = (XkbEvent *) xevent; | ||||
|  | ||||
|   /* 'event_type' is set to zero on notifying us of updates in | ||||
|    * response to client requests (including our own) and non-zero | ||||
|    * to notify us of key/mouse events causing changes (like | ||||
|    * pressing shift 5 times to enable sticky keys). | ||||
|    * | ||||
|    * We only want to update out settings when it's in response to an | ||||
|    * explicit user input event, so require a non-zero event_type. | ||||
|    */ | ||||
|   if (xevent->xany.type == (_xkb_event_base + XkbEventCode) && | ||||
|       xkbev->any.xkb_type == XkbControlsNotify && xkbev->ctrls.event_type != 0) | ||||
|     check_settings_changed (device_manager); | ||||
|  | ||||
|   return  CLUTTER_X11_FILTER_CONTINUE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| is_xkb_available (ClutterBackendX11 *backend_x11) | ||||
| { | ||||
|   gint opcode, error_base, event_base, major, minor; | ||||
|  | ||||
|   if (_xkb_event_base) | ||||
|     return TRUE; | ||||
|  | ||||
|   if (!XkbQueryExtension (backend_x11->xdpy, | ||||
|                           &opcode, | ||||
|                           &event_base, | ||||
|                           &error_base, | ||||
|                           &major, | ||||
|                           &minor)) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (!XkbUseExtension (backend_x11->xdpy, &major, &minor)) | ||||
|     return FALSE; | ||||
|  | ||||
|   _xkb_event_base = event_base; | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static unsigned long | ||||
| set_value_mask (gboolean      flag, | ||||
|                 unsigned long value, | ||||
|                 unsigned long mask) | ||||
| { | ||||
|   if (flag) | ||||
|     return value | mask; | ||||
|  | ||||
|   return value & ~mask; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| set_xkb_ctrl (XkbDescRec               *desc, | ||||
|               ClutterKeyboardA11yFlags settings, | ||||
|               ClutterKeyboardA11yFlags flag, | ||||
|               unsigned long            mask) | ||||
| { | ||||
|   gboolean result = (settings & flag) == flag; | ||||
|   desc->ctrls->enabled_ctrls = set_value_mask (result, desc->ctrls->enabled_ctrls, mask); | ||||
|  | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| void | ||||
| clutter_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||
|                                                     ClutterKbdA11ySettings *kbd_a11y_settings) | ||||
| { | ||||
|   ClutterBackendX11 *backend_x11; | ||||
|   XkbDescRec      *desc; | ||||
|   gboolean         enable_accessX; | ||||
|  | ||||
|   backend_x11 = CLUTTER_BACKEND_X11 (clutter_get_default_backend ()); | ||||
|   desc = get_xkb_desc_rec (backend_x11); | ||||
|   if (!desc) | ||||
|     return; | ||||
|  | ||||
|   /* general */ | ||||
|   enable_accessX = kbd_a11y_settings->controls & CLUTTER_A11Y_KEYBOARD_ENABLED; | ||||
|  | ||||
|   desc->ctrls->enabled_ctrls = set_value_mask (enable_accessX, | ||||
|                                                desc->ctrls->enabled_ctrls, | ||||
|                                                XkbAccessXKeysMask); | ||||
|  | ||||
|   if (set_xkb_ctrl (desc, kbd_a11y_settings->controls, CLUTTER_A11Y_TIMEOUT_ENABLED, | ||||
|                     XkbAccessXTimeoutMask)) | ||||
|     { | ||||
|       desc->ctrls->ax_timeout = kbd_a11y_settings->timeout_delay; | ||||
|       /* disable only the master flag via the server we will disable | ||||
|        * the rest on the rebound without affecting settings state | ||||
|        * don't change the option flags at all. | ||||
|        */ | ||||
|       desc->ctrls->axt_ctrls_mask = XkbAccessXKeysMask | XkbAccessXFeedbackMask; | ||||
|       desc->ctrls->axt_ctrls_values = 0; | ||||
|       desc->ctrls->axt_opts_mask = 0; | ||||
|     } | ||||
|  | ||||
|   desc->ctrls->ax_options = | ||||
|     set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP, | ||||
|                     desc->ctrls->ax_options, | ||||
|                     XkbAccessXFeedbackMask | XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask); | ||||
|  | ||||
|   /* bounce keys */ | ||||
|   if (set_xkb_ctrl (desc, kbd_a11y_settings->controls, | ||||
|                     CLUTTER_A11Y_BOUNCE_KEYS_ENABLED, XkbBounceKeysMask)) | ||||
|     { | ||||
|       desc->ctrls->debounce_delay = kbd_a11y_settings->debounce_delay; | ||||
|       desc->ctrls->ax_options = | ||||
|         set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT, | ||||
|                         desc->ctrls->ax_options, | ||||
|                         XkbAccessXFeedbackMask | XkbAX_BKRejectFBMask); | ||||
|     } | ||||
|  | ||||
|   /* mouse keys */ | ||||
|   if (set_xkb_ctrl (desc, kbd_a11y_settings->controls, | ||||
|                     CLUTTER_A11Y_MOUSE_KEYS_ENABLED, XkbMouseKeysMask | XkbMouseKeysAccelMask)) | ||||
|     { | ||||
|       gint mk_max_speed; | ||||
|       gint mk_accel_time; | ||||
|  | ||||
|       desc->ctrls->mk_interval     = 100;     /* msec between mousekey events */ | ||||
|       desc->ctrls->mk_curve        = 50; | ||||
|  | ||||
|       /* We store pixels / sec, XKB wants pixels / event */ | ||||
|       mk_max_speed = kbd_a11y_settings->mousekeys_max_speed; | ||||
|       desc->ctrls->mk_max_speed = mk_max_speed / (1000 / desc->ctrls->mk_interval); | ||||
|       if (desc->ctrls->mk_max_speed <= 0) | ||||
|         desc->ctrls->mk_max_speed = 1; | ||||
|  | ||||
|       mk_accel_time = kbd_a11y_settings->mousekeys_accel_time; | ||||
|       desc->ctrls->mk_time_to_max = mk_accel_time / desc->ctrls->mk_interval; | ||||
|  | ||||
|       if (desc->ctrls->mk_time_to_max <= 0) | ||||
|         desc->ctrls->mk_time_to_max = 1; | ||||
|  | ||||
|       desc->ctrls->mk_delay = kbd_a11y_settings->mousekeys_init_delay; | ||||
|     } | ||||
|  | ||||
|   /* slow keys */ | ||||
|   if (set_xkb_ctrl (desc, kbd_a11y_settings->controls, | ||||
|                     CLUTTER_A11Y_SLOW_KEYS_ENABLED, XkbSlowKeysMask)) | ||||
|     { | ||||
|       desc->ctrls->ax_options = | ||||
|         set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS, | ||||
|                         desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_SKPressFBMask); | ||||
|       desc->ctrls->ax_options = | ||||
|         set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT, | ||||
|                         desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_SKAcceptFBMask); | ||||
|       desc->ctrls->ax_options = | ||||
|         set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT, | ||||
|                         desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_SKRejectFBMask); | ||||
|       desc->ctrls->slow_keys_delay = kbd_a11y_settings->slowkeys_delay; | ||||
|       /* anything larger than 500 seems to loose all keyboard input */ | ||||
|       if (desc->ctrls->slow_keys_delay > 500) | ||||
|         desc->ctrls->slow_keys_delay = 500; | ||||
|     } | ||||
|  | ||||
|   /* sticky keys */ | ||||
|   if (set_xkb_ctrl (desc, kbd_a11y_settings->controls, | ||||
|                     CLUTTER_A11Y_STICKY_KEYS_ENABLED, XkbStickyKeysMask)) | ||||
|   { | ||||
|     desc->ctrls->ax_options |= XkbAX_LatchToLockMask; | ||||
|     desc->ctrls->ax_options = | ||||
|       set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF, | ||||
|                       desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_TwoKeysMask); | ||||
|     desc->ctrls->ax_options = | ||||
|       set_value_mask (kbd_a11y_settings->controls &  CLUTTER_A11Y_STICKY_KEYS_BEEP, | ||||
|                       desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_StickyKeysFBMask); | ||||
|   } | ||||
|  | ||||
|   /* toggle keys */ | ||||
|   desc->ctrls->ax_options = | ||||
|     set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_TOGGLE_KEYS_ENABLED, | ||||
|                     desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_IndicatorFBMask); | ||||
|  | ||||
|   set_xkb_desc_rec (backend_x11, desc); | ||||
|   XkbFreeKeyboard (desc, XkbAllComponentsMask, TRUE); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| clutter_device_manager_x11_a11y_init (ClutterDeviceManager *device_manager) | ||||
| { | ||||
|   ClutterBackendX11 *backend_x11; | ||||
|   guint event_mask; | ||||
|  | ||||
|   backend_x11 = | ||||
|     CLUTTER_BACKEND_X11 (_clutter_device_manager_get_backend (device_manager)); | ||||
|  | ||||
|   if (!is_xkb_available (backend_x11)) | ||||
|     return FALSE; | ||||
|  | ||||
|   event_mask = XkbControlsNotifyMask | XkbAccessXNotifyMask; | ||||
|  | ||||
|   XkbSelectEvents (backend_x11->xdpy, XkbUseCoreKbd, event_mask, event_mask); | ||||
|  | ||||
|   clutter_x11_add_filter (xkb_a11y_event_filter, device_manager); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
							
								
								
									
										39
									
								
								clutter/clutter/x11/clutter-xkb-a11y-x11.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								clutter/clutter/x11/clutter-xkb-a11y-x11.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| /* | ||||
|  * | ||||
|  * Copyright © 2001 Ximian, Inc. | ||||
|  * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu> | ||||
|  * Copyright (C) 2017 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. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifndef CLUTTER_XKB_A11Y_X11_H | ||||
| #define CLUTTER_XKB_A11Y_X11_H | ||||
|  | ||||
| #include "clutter-device-manager-private.h" | ||||
| #include "clutter-backend-x11.h" | ||||
|  | ||||
| #include <X11/Xlib.h> | ||||
|  | ||||
| void | ||||
| clutter_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager   *device_manager, | ||||
|                                                     ClutterKbdA11ySettings *kbd_a11y_settings); | ||||
|  | ||||
| gboolean | ||||
| clutter_device_manager_x11_a11y_init               (ClutterDeviceManager *device_manager); | ||||
|  | ||||
| #endif /* CLUTTER_XKB_A11Y_X11_H */ | ||||
| @@ -121,6 +121,7 @@ m4_define([xcomposite_req_version],     [0.4]) | ||||
| m4_define([gdk_req_version],            [3.3.18]) | ||||
| m4_define([libinput_req_version],       [1.4.0]) | ||||
| m4_define([libudev_req_version],        [136]) | ||||
| m4_define([libwacom_req_version],       [0.13]) | ||||
|  | ||||
| AC_SUBST([GLIB_REQ_VERSION],       [glib_req_version]) | ||||
| AC_SUBST([COGL_REQ_VERSION],       [cogl_req_version]) | ||||
| @@ -133,6 +134,7 @@ AC_SUBST([XCOMPOSITE_REQ_VERSION], [xcomposite_req_version]) | ||||
| AC_SUBST([GDK_REQ_VERSION],        [gdk_req_version]) | ||||
| AC_SUBST([LIBINPUT_REQ_VERSION],   [libinput_req_version]) | ||||
| AC_SUBST([LIBUDEV_REQ_VERSION],    [libudev_req_version]) | ||||
| AC_SUBST([LIBWACOM_REQ_VERSION],   [libwacom_req_version]) | ||||
|  | ||||
| # Checks for typedefs, structures, and compiler characteristics. | ||||
| AM_PATH_GLIB_2_0([glib_req_version], | ||||
| @@ -149,7 +151,7 @@ AC_ARG_ENABLE([Bsymbolic], | ||||
|                 saved_LDFLAGS="${LDFLAGS}" | ||||
|                 AC_MSG_CHECKING([for -Bsymbolic-functions linker flag]) | ||||
|                 LDFLAGS=-Wl,-Bsymbolic-functions | ||||
|                 AC_TRY_LINK([], [int main (void) { return 0; }], | ||||
|                 AC_TRY_LINK([], [return 0], | ||||
|                             [ | ||||
|                               AC_MSG_RESULT([yes]) | ||||
|                               enable_Bsymbolic=yes | ||||
| @@ -170,7 +172,7 @@ dnl on other compilers, check if we can do -fvisibility=hidden | ||||
| SAVED_CFLAGS="${CFLAGS}" | ||||
| CFLAGS="-fvisibility=hidden" | ||||
| AC_MSG_CHECKING([for -fvisibility=hidden compiler flag]) | ||||
| AC_TRY_COMPILE([], [int main (void) { return 0; }], | ||||
| AC_TRY_COMPILE([], [return 0], | ||||
| 	       AC_MSG_RESULT(yes) | ||||
| 	       enable_fvisibility_hidden=yes, | ||||
| 	       AC_MSG_RESULT(no) | ||||
| @@ -508,6 +510,32 @@ X11_EXTS=${X11_EXTS#* } | ||||
|  | ||||
| AC_CACHE_SAVE | ||||
|  | ||||
| dnl === Libwacom support for X11 =============================================== | ||||
| AC_ARG_WITH(libwacom, | ||||
|   AC_HELP_STRING([--without-libwacom], | ||||
|                  [disable the use of libwacom for advanced tablet management]),, | ||||
|   with_libwacom=auto) | ||||
|  | ||||
| have_libwacom=no | ||||
| AC_MSG_CHECKING([libwacom]) | ||||
| if test x$with_libwacom = xno ; then | ||||
|   AC_MSG_RESULT([disabled]) | ||||
| else | ||||
|   if $PKG_CONFIG --exists libwacom '>=' $LIBWACOM_REQ_VERSION; then | ||||
|     have_libwacom=yes | ||||
|     AC_MSG_RESULT(yes) | ||||
|     PKG_CHECK_MODULES([LIBWACOM], [libwacom]) | ||||
|     AC_SUBST(LIBWACOM_CFLAGS) | ||||
|     AC_SUBST(LIBWACOM_LIBS) | ||||
|     AC_DEFINE([HAVE_LIBWACOM], 1, [Building with libwacom for advanced tablet management]) | ||||
|   else | ||||
|     AC_MSG_RESULT(no) | ||||
|     if test x$with_libwacom = xyes ; then | ||||
|       AC_MSG_ERROR([libwacom forced but not found]) | ||||
|     fi | ||||
|   fi | ||||
| fi | ||||
|  | ||||
| dnl === Enable GDK-Pixbuf in tests ============================================ | ||||
|  | ||||
| m4_define([pixbuf_default], [yes]) | ||||
| @@ -679,8 +707,8 @@ AS_IF([test "x$CLUTTER_BASE_PC_FILES_PRIVATE" = "x" && test "x$BACKEND_PC_FILES_ | ||||
| AC_SUBST(CLUTTER_REQUIRES) | ||||
| AC_SUBST(CLUTTER_REQUIRES_PRIVATE) | ||||
|  | ||||
| CLUTTER_CFLAGS="$FLAVOUR_CFLAGS $CLUTTER_DEPS_CFLAGS $CLUTTER_DEPS_PRIVATE_CFLAGS $GLIB_CFLAGS" | ||||
| CLUTTER_LIBS="$FLAVOUR_LIBS $CLUTTER_DEPS_LIBS $CLUTTER_DEPS_PRIVATE_LIBS $GLIB_LIBS" | ||||
| CLUTTER_CFLAGS="$FLAVOUR_CFLAGS $CLUTTER_DEPS_CFLAGS $CLUTTER_DEPS_PRIVATE_CFLAGS $GLIB_CFLAGS $LIBWACOM_CFLAGS" | ||||
| CLUTTER_LIBS="$FLAVOUR_LIBS $CLUTTER_DEPS_LIBS $CLUTTER_DEPS_PRIVATE_LIBS $GLIB_LIBS $LIBWACOM_LIBS" | ||||
| AC_SUBST(CLUTTER_CFLAGS) | ||||
| AC_SUBST(CLUTTER_LIBS) | ||||
|  | ||||
|   | ||||
| @@ -407,7 +407,8 @@ test_scale_center (TestState *state) | ||||
|   g_assert (scale_x == 4.0); | ||||
|   g_assert (scale_y == 2.0); | ||||
|   g_assert (gravity == CLUTTER_GRAVITY_NONE); | ||||
|   assert_notifications (NOTIFY_SCALE_CENTER_X | NOTIFY_SCALE_CENTER_Y | ||||
|   assert_notifications (NOTIFY_SCALE_X | NOTIFY_SCALE_Y | ||||
|                         | NOTIFY_SCALE_CENTER_X | NOTIFY_SCALE_CENTER_Y | ||||
|                         | NOTIFY_SCALE_GRAVITY); | ||||
|   assert_coords (state, 100 + 10 - 10 * 4, 200 + 20 - 20 * 2, | ||||
|                  100 + 10 + (RECT_WIDTH - 10) * 4, | ||||
|   | ||||
| @@ -61,11 +61,6 @@ G_END_DECLS | ||||
| /* Coglbox private declaration | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| struct _TestCoglboxPrivate | ||||
| { | ||||
|   CoglHandle texhand_id; | ||||
| @@ -73,6 +68,11 @@ struct _TestCoglboxPrivate | ||||
|   CoglHandle offscreen_id; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| /* Coglbox implementation | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| @@ -290,8 +290,6 @@ test_coglbox_class_init (TestCoglboxClass *klass) | ||||
|  | ||||
|   actor_class->map            = test_coglbox_map; | ||||
|   actor_class->paint          = test_coglbox_paint; | ||||
|  | ||||
|   g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate)); | ||||
| } | ||||
|  | ||||
| static ClutterActor* | ||||
|   | ||||
| @@ -61,17 +61,17 @@ G_END_DECLS | ||||
| /* Coglbox private declaration | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| struct _TestCoglboxPrivate | ||||
| { | ||||
|   CoglHandle cogl_tex_id[4]; | ||||
|   gint       frame; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| /* Coglbox implementation | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| @@ -182,8 +182,6 @@ test_coglbox_class_init (TestCoglboxClass *klass) | ||||
|   gobject_class->finalize     = test_coglbox_finalize; | ||||
|   gobject_class->dispose      = test_coglbox_dispose;   | ||||
|   actor_class->paint          = test_coglbox_paint; | ||||
|    | ||||
|   g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate)); | ||||
| } | ||||
|  | ||||
| static ClutterActor* | ||||
|   | ||||
| @@ -86,11 +86,6 @@ G_END_DECLS | ||||
| /* Coglbox private declaration | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| struct _TestCoglboxPrivate | ||||
| { | ||||
|   guint      gl_handle; | ||||
| @@ -116,6 +111,11 @@ struct _TestCoglboxPrivate | ||||
|   (* glBindTexture) (guint target, guint texture); | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| /* Coglbox implementation | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| @@ -229,8 +229,6 @@ test_coglbox_class_init (TestCoglboxClass *klass) | ||||
|   gobject_class->finalize     = test_coglbox_finalize; | ||||
|   gobject_class->dispose      = test_coglbox_dispose;   | ||||
|   actor_class->paint          = test_coglbox_paint; | ||||
|    | ||||
|   g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate)); | ||||
| } | ||||
|  | ||||
| static ClutterActor* | ||||
|   | ||||
| @@ -61,11 +61,6 @@ G_END_DECLS | ||||
| /* Coglbox private declaration | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| struct _TestCoglboxPrivate | ||||
| { | ||||
|   CoglHandle sliced_tex, not_sliced_tex; | ||||
| @@ -74,6 +69,11 @@ struct _TestCoglboxPrivate | ||||
|   gboolean   use_linear_filtering; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| /* Coglbox implementation | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| @@ -293,8 +293,6 @@ test_coglbox_class_init (TestCoglboxClass *klass) | ||||
|   gobject_class->finalize     = test_coglbox_finalize; | ||||
|   gobject_class->dispose      = test_coglbox_dispose; | ||||
|   actor_class->paint          = test_coglbox_paint; | ||||
|  | ||||
|   g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate)); | ||||
| } | ||||
|  | ||||
| static ClutterActor* | ||||
|   | ||||
| @@ -62,17 +62,17 @@ G_END_DECLS | ||||
| /* Coglbox private declaration | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| struct _TestCoglboxPrivate | ||||
| { | ||||
|   CoglHandle cogl_tex_id; | ||||
|   gdouble    animation_progress; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| #define TEST_COGLBOX_GET_PRIVATE(obj) \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate)) | ||||
|  | ||||
| /* Coglbox implementation | ||||
|  *--------------------------------------------------*/ | ||||
|  | ||||
| @@ -158,8 +158,6 @@ test_coglbox_class_init (TestCoglboxClass *klass) | ||||
|   gobject_class->finalize     = test_coglbox_finalize; | ||||
|   gobject_class->dispose      = test_coglbox_dispose; | ||||
|   actor_class->paint          = test_coglbox_paint; | ||||
|  | ||||
|   g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate)); | ||||
| } | ||||
|  | ||||
| static ClutterActor* | ||||
|   | ||||
| @@ -40,11 +40,6 @@ enum | ||||
|   PROP_USE_TRANSFORMED_BOX | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE (MyThing, my_thing, CLUTTER_TYPE_ACTOR) | ||||
|  | ||||
| #define MY_THING_GET_PRIVATE(obj)    \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MY_TYPE_THING, MyThingPrivate)) | ||||
|  | ||||
| struct _MyThingPrivate | ||||
| { | ||||
|   gfloat  spacing; | ||||
| @@ -53,6 +48,11 @@ struct _MyThingPrivate | ||||
|   guint   use_transformed_box : 1; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (MyThing, my_thing, CLUTTER_TYPE_ACTOR) | ||||
|  | ||||
| #define MY_THING_GET_PRIVATE(obj)    \ | ||||
| (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MY_TYPE_THING, MyThingPrivate)) | ||||
|  | ||||
| static void | ||||
| my_thing_set_property (GObject      *gobject, | ||||
|                        guint         prop_id, | ||||
| @@ -409,8 +409,6 @@ my_thing_class_init (MyThingClass *klass) | ||||
|                                                          "Use transformed box when allocating", | ||||
|                                                          FALSE, | ||||
|                                                          G_PARAM_READWRITE)); | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MyThingPrivate)); | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -452,7 +452,7 @@ libmutter_cogl_@LIBMUTTER_API_VERSION@_la_LDFLAGS = \ | ||||
| 	-avoid-version \ | ||||
| 	-export-dynamic \ | ||||
| 	-rpath $(mutterlibdir) \ | ||||
| 	-export-symbols-regex "^(cogl|_cogl_debug_flags|_cogl_atlas_new|_cogl_atlas_add_reorganize_callback|_cogl_atlas_reserve_space|_cogl_callback|_cogl_util_get_eye_planes_for_screen_poly|_cogl_atlas_texture_remove_reorganize_callback|_cogl_atlas_texture_add_reorganize_callback|_cogl_texture_get_format|_cogl_texture_foreach_sub_texture_in_region|_cogl_texture_set_region|_cogl_profile_trace_message|_cogl_context_get_default|_cogl_framebuffer_get_stencil_bits|_cogl_clip_stack_push_rectangle|_cogl_framebuffer_get_modelview_stack|_cogl_object_default_unref|_cogl_pipeline_foreach_layer_internal|_cogl_clip_stack_push_primitive|_cogl_buffer_unmap_for_fill_or_fallback|_cogl_framebuffer_draw_primitive|_cogl_debug_instances|_cogl_framebuffer_get_projection_stack|_cogl_pipeline_layer_get_texture|_cogl_buffer_map_for_fill_or_fallback|_cogl_texture_can_hardware_repeat|_cogl_pipeline_prune_to_n_layers|_cogl_primitive_draw|test_|unit_test_|_cogl_winsys_glx_get_vtable|_cogl_winsys_egl_xlib_get_vtable|_cogl_winsys_egl_get_vtable|_cogl_closure_disconnect|_cogl_onscreen_notify_complete|_cogl_onscreen_notify_frame_sync|_cogl_winsys_egl_renderer_connect_common|_cogl_winsys_error_quark|_cogl_set_error|_cogl_poll_renderer_add_fd|_cogl_poll_renderer_add_idle|_cogl_framebuffer_winsys_update_size|_cogl_winsys_egl_make_current|_cogl_pixel_format_get_bytes_per_pixel).*" | ||||
| 	-export-symbols-regex "^(cogl|_cogl_debug_flags|_cogl_atlas_new|_cogl_atlas_add_reorganize_callback|_cogl_atlas_reserve_space|_cogl_callback|_cogl_util_get_eye_planes_for_screen_poly|_cogl_atlas_texture_remove_reorganize_callback|_cogl_atlas_texture_add_reorganize_callback|_cogl_texture_get_format|_cogl_texture_foreach_sub_texture_in_region|_cogl_texture_set_region|_cogl_profile_trace_message|_cogl_context_get_default|_cogl_framebuffer_get_stencil_bits|_cogl_clip_stack_push_rectangle|_cogl_framebuffer_get_modelview_stack|_cogl_object_default_unref|_cogl_pipeline_foreach_layer_internal|_cogl_clip_stack_push_primitive|_cogl_buffer_unmap_for_fill_or_fallback|_cogl_framebuffer_draw_primitive|_cogl_debug_instances|_cogl_framebuffer_get_projection_stack|_cogl_pipeline_layer_get_texture|_cogl_buffer_map_for_fill_or_fallback|_cogl_texture_can_hardware_repeat|_cogl_pipeline_prune_to_n_layers|_cogl_primitive_draw|test_|unit_test_|_cogl_winsys_glx_get_vtable|_cogl_winsys_egl_xlib_get_vtable|_cogl_winsys_egl_get_vtable|_cogl_closure_disconnect|_cogl_onscreen_notify_complete|_cogl_onscreen_notify_frame_sync|_cogl_winsys_egl_renderer_connect_common|_cogl_winsys_error_quark|_cogl_set_error|_cogl_poll_renderer_add_fd|_cogl_poll_renderer_add_idle|_cogl_framebuffer_winsys_update_size|_cogl_winsys_egl_make_current|_cogl_winsys_egl_ensure_current|_cogl_pixel_format_get_bytes_per_pixel).*" | ||||
|  | ||||
| libmutter_cogl_@LIBMUTTER_API_VERSION@_la_SOURCES = $(cogl_sources_c) | ||||
| nodist_libmutter_cogl_@LIBMUTTER_API_VERSION@_la_SOURCES = $(BUILT_SOURCES) | ||||
|   | ||||
| @@ -89,11 +89,8 @@ int64_t cogl_frame_info_get_frame_counter (CoglFrameInfo *info); | ||||
|  * Gets the presentation time for the frame. This is the time at which | ||||
|  * the frame became visible to the user. | ||||
|  * | ||||
|  * The presentation time measured in nanoseconds is based on a | ||||
|  * monotonic time source. The time source is not necessarily | ||||
|  * correlated with system/wall clock time and may represent the time | ||||
|  * elapsed since some undefined system event such as when the system | ||||
|  * last booted. | ||||
|  * The presentation time measured in nanoseconds, is based on | ||||
|  * cogl_get_clock_time(). | ||||
|  * | ||||
|  * <note>Linux kernel version less that 3.8 can result in | ||||
|  * non-monotonic timestamps being reported when using a drm based | ||||
|   | ||||
| @@ -43,6 +43,7 @@ | ||||
| #include <cogl/winsys/cogl-winsys-private.h> | ||||
|  | ||||
| void cogl_renderer_set_custom_winsys (CoglRenderer                *renderer, | ||||
|                                       CoglCustomWinsysVtableGetter winsys_vtable_getter); | ||||
|                                       CoglCustomWinsysVtableGetter winsys_vtable_getter, | ||||
|                                       void                        *user_data); | ||||
|  | ||||
| #endif /* __COGL_MUTTER_H___ */ | ||||
|   | ||||
| @@ -109,7 +109,11 @@ _cogl_object_default_unref (void *object) | ||||
| void | ||||
| cogl_object_unref (void *obj) | ||||
| { | ||||
|   void (* unref_func) (void *) = ((CoglObject *) obj)->klass->virt_unref; | ||||
|   void (* unref_func) (void *); | ||||
|  | ||||
|   _COGL_RETURN_IF_FAIL (obj != NULL); | ||||
|  | ||||
|   unref_func = ((CoglObject *) obj)->klass->virt_unref; | ||||
|   unref_func (obj); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -592,7 +592,7 @@ _cogl_rectangles_validate_layer_cb (CoglPipeline *pipeline, | ||||
|  | ||||
|           if (!warning_seen) | ||||
|             g_warning ("Skipping layer %d of your pipeline consisting of " | ||||
|                        "a sliced texture (unsuported for multi texturing)", | ||||
|                        "a sliced texture (unsupported for multi texturing)", | ||||
|                        state->i); | ||||
|           warning_seen = TRUE; | ||||
|  | ||||
|   | ||||
| @@ -54,6 +54,7 @@ struct _CoglRenderer | ||||
|   const CoglDriverVtable *driver_vtable; | ||||
|   const CoglTextureDriver *texture_driver; | ||||
|   const CoglWinsysVtable *winsys_vtable; | ||||
|   void *custom_winsys_user_data; | ||||
|   CoglCustomWinsysVtableGetter custom_winsys_vtable_getter; | ||||
|   CoglWinsysID winsys_id_override; | ||||
|   GList *constraints; | ||||
|   | ||||
| @@ -566,8 +566,10 @@ _cogl_renderer_choose_driver (CoglRenderer *renderer, | ||||
|  | ||||
| void | ||||
| cogl_renderer_set_custom_winsys (CoglRenderer                *renderer, | ||||
|                                  CoglCustomWinsysVtableGetter winsys_vtable_getter) | ||||
|                                  CoglCustomWinsysVtableGetter winsys_vtable_getter, | ||||
|                                  void                        *user_data) | ||||
| { | ||||
|   renderer->custom_winsys_user_data = user_data; | ||||
|   renderer->custom_winsys_vtable_getter = winsys_vtable_getter; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -542,285 +542,6 @@ cogl_texture_set_data (CoglTexture *texture, | ||||
|                                    error); | ||||
| } | ||||
|  | ||||
| /* Reads back the contents of a texture by rendering it to the framebuffer | ||||
|  * and reading back the resulting pixels. | ||||
|  * | ||||
|  * It will perform multiple renders if the texture is larger than the | ||||
|  * current glViewport. | ||||
|  * | ||||
|  * It assumes the projection and modelview have already been setup so | ||||
|  * that rendering to 0,0 with the same width and height of the viewport | ||||
|  * will exactly cover the viewport. | ||||
|  * | ||||
|  * NB: Normally this approach isn't normally used since we can just use | ||||
|  * glGetTexImage, but may be used as a fallback in some circumstances. | ||||
|  */ | ||||
| static CoglBool | ||||
| do_texture_draw_and_read (CoglFramebuffer *fb, | ||||
|                           CoglPipeline *pipeline, | ||||
|                           CoglTexture *texture, | ||||
|                           CoglBitmap *target_bmp, | ||||
|                           float *viewport, | ||||
|                           CoglError **error) | ||||
| { | ||||
|   float rx1, ry1; | ||||
|   float rx2, ry2; | ||||
|   float tx1, ty1; | ||||
|   float tx2, ty2; | ||||
|   int bw,  bh; | ||||
|   CoglBitmap *rect_bmp; | ||||
|   unsigned int tex_width, tex_height; | ||||
|   CoglContext *ctx = fb->context; | ||||
|  | ||||
|   tex_width = cogl_texture_get_width (texture); | ||||
|   tex_height = cogl_texture_get_height (texture); | ||||
|  | ||||
|   ry2 = 0; | ||||
|   ty2 = 0; | ||||
|  | ||||
|   /* Walk Y axis until whole bitmap height consumed */ | ||||
|   for (bh = tex_height; bh > 0; bh -= viewport[3]) | ||||
|     { | ||||
|       /* Rectangle Y coords */ | ||||
|       ry1 = ry2; | ||||
|       ry2 += (bh < viewport[3]) ? bh : viewport[3]; | ||||
|  | ||||
|       /* Normalized texture Y coords */ | ||||
|       ty1 = ty2; | ||||
|       ty2 = (ry2 / (float) tex_height); | ||||
|  | ||||
|       rx2 = 0; | ||||
|       tx2 = 0; | ||||
|  | ||||
|       /* Walk X axis until whole bitmap width consumed */ | ||||
|       for (bw = tex_width; bw > 0; bw-=viewport[2]) | ||||
|         { | ||||
|           int width; | ||||
|           int height; | ||||
|  | ||||
|           /* Rectangle X coords */ | ||||
|           rx1 = rx2; | ||||
|           rx2 += (bw < viewport[2]) ? bw : viewport[2]; | ||||
|  | ||||
|           width = rx2 - rx1; | ||||
|           height = ry2 - ry1; | ||||
|  | ||||
|           /* Normalized texture X coords */ | ||||
|           tx1 = tx2; | ||||
|           tx2 = (rx2 / (float) tex_width); | ||||
|  | ||||
|           /* Draw a portion of texture */ | ||||
|           cogl_framebuffer_draw_textured_rectangle (fb, | ||||
|                                                     pipeline, | ||||
|                                                     0, 0, | ||||
|                                                     rx2 - rx1, | ||||
|                                                     ry2 - ry1, | ||||
|                                                     tx1, ty1, | ||||
|                                                     tx2, ty2); | ||||
|  | ||||
|           /* Read into a temporary bitmap */ | ||||
|           rect_bmp = _cogl_bitmap_new_with_malloc_buffer | ||||
|                                               (ctx, | ||||
|                                                width, height, | ||||
|                                                COGL_PIXEL_FORMAT_RGBA_8888_PRE, | ||||
|                                                error); | ||||
|           if (!rect_bmp) | ||||
|             return FALSE; | ||||
|  | ||||
|           if (!_cogl_framebuffer_read_pixels_into_bitmap | ||||
|                                                (fb, | ||||
|                                                 viewport[0], viewport[1], | ||||
|                                                 COGL_READ_PIXELS_COLOR_BUFFER, | ||||
|                                                 rect_bmp, | ||||
|                                                 error)) | ||||
|             { | ||||
|               cogl_object_unref (rect_bmp); | ||||
|               return FALSE; | ||||
|             } | ||||
|  | ||||
|           /* Copy to target bitmap */ | ||||
|           if (!_cogl_bitmap_copy_subregion (rect_bmp, | ||||
|                                             target_bmp, | ||||
|                                             0, 0, | ||||
|                                             rx1, ry1, | ||||
|                                             width, | ||||
|                                             height, | ||||
|                                             error)) | ||||
|             { | ||||
|               cogl_object_unref (rect_bmp); | ||||
|               return FALSE; | ||||
|             } | ||||
|  | ||||
|           /* Free temp bitmap */ | ||||
|           cogl_object_unref (rect_bmp); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| /* Reads back the contents of a texture by rendering it to the framebuffer | ||||
|  * and reading back the resulting pixels. | ||||
|  * | ||||
|  * NB: Normally this approach isn't normally used since we can just use | ||||
|  * glGetTexImage, but may be used as a fallback in some circumstances. | ||||
|  */ | ||||
| static CoglBool | ||||
| _cogl_texture_draw_and_read (CoglTexture *texture, | ||||
|                              CoglBitmap *target_bmp, | ||||
|                              GLuint target_gl_format, | ||||
|                              GLuint target_gl_type, | ||||
|                              CoglError **error) | ||||
| { | ||||
|   CoglFramebuffer *framebuffer = cogl_get_draw_framebuffer (); | ||||
|   CoglContext *ctx = framebuffer->context; | ||||
|   float save_viewport[4]; | ||||
|   float viewport[4]; | ||||
|   CoglBool status = FALSE; | ||||
|  | ||||
|   viewport[0] = 0; | ||||
|   viewport[1] = 0; | ||||
|   viewport[2] = cogl_framebuffer_get_width (framebuffer); | ||||
|   viewport[3] = cogl_framebuffer_get_height (framebuffer); | ||||
|  | ||||
|   cogl_framebuffer_get_viewport4fv (framebuffer, save_viewport); | ||||
|   _cogl_framebuffer_push_projection (framebuffer); | ||||
|   cogl_framebuffer_orthographic (framebuffer, | ||||
|                                  0, 0, | ||||
|                                  viewport[2], | ||||
|                                  viewport[3], | ||||
|                                  0, 100); | ||||
|  | ||||
|   cogl_framebuffer_push_matrix (framebuffer); | ||||
|   cogl_framebuffer_identity_matrix (framebuffer); | ||||
|  | ||||
|   /* Direct copy operation */ | ||||
|  | ||||
|   if (ctx->texture_download_pipeline == NULL) | ||||
|     { | ||||
|       ctx->texture_download_pipeline = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_blend (ctx->texture_download_pipeline, | ||||
|                                "RGBA = ADD (SRC_COLOR, 0)", | ||||
|                                NULL); | ||||
|     } | ||||
|  | ||||
|   cogl_pipeline_set_layer_texture (ctx->texture_download_pipeline, 0, texture); | ||||
|  | ||||
|   cogl_pipeline_set_layer_combine (ctx->texture_download_pipeline, | ||||
|                                    0, /* layer */ | ||||
|                                    "RGBA = REPLACE (TEXTURE)", | ||||
|                                    NULL); | ||||
|  | ||||
|   cogl_pipeline_set_layer_filters (ctx->texture_download_pipeline, 0, | ||||
|                                    COGL_PIPELINE_FILTER_NEAREST, | ||||
|                                    COGL_PIPELINE_FILTER_NEAREST); | ||||
|  | ||||
|   if (!do_texture_draw_and_read (framebuffer, | ||||
|                                  ctx->texture_download_pipeline, | ||||
|                                  texture, target_bmp, viewport, | ||||
|                                  error)) | ||||
|     return FALSE; | ||||
|  | ||||
|   /* XXX: As an alleged PowerVR driver bug workaround where the driver | ||||
|    * is apparently not maintaining the alpha component of some | ||||
|    * framebuffers we render the alpha component of the texture | ||||
|    * separately to be sure we retrieve all components of the texture. | ||||
|    * | ||||
|    * TODO: verify if this is still an issue | ||||
|    */ | ||||
|   if ((_cogl_texture_get_format (texture) & COGL_A_BIT)/* && a_bits == 0*/) | ||||
|     { | ||||
|       uint8_t *srcdata; | ||||
|       uint8_t *dstdata; | ||||
|       uint8_t *srcpixel; | ||||
|       uint8_t *dstpixel; | ||||
|       int target_width = cogl_bitmap_get_width (target_bmp); | ||||
|       int target_height = cogl_bitmap_get_height (target_bmp); | ||||
|       int target_rowstride = cogl_bitmap_get_rowstride (target_bmp); | ||||
|       int bpp = _cogl_pixel_format_get_bytes_per_pixel (COGL_PIXEL_FORMAT_RGBA_8888); | ||||
|       int alpha_rowstride = bpp * target_width; | ||||
|       CoglBitmap *alpha_bmp; | ||||
|       int x,y; | ||||
|  | ||||
|       if ((dstdata = _cogl_bitmap_map (target_bmp, | ||||
|                                        COGL_BUFFER_ACCESS_WRITE, | ||||
|                                        COGL_BUFFER_MAP_HINT_DISCARD, | ||||
|                                        error)) == NULL) | ||||
|         goto EXIT; | ||||
|  | ||||
|       /* Create temp bitmap for alpha values */ | ||||
|       alpha_bmp = | ||||
|         _cogl_bitmap_new_with_malloc_buffer (ctx, | ||||
|                                              target_width, | ||||
|                                              target_height, | ||||
|                                              COGL_PIXEL_FORMAT_RGBA_8888, | ||||
|                                              error); | ||||
|       if (!alpha_bmp) | ||||
|         { | ||||
|           _cogl_bitmap_unmap (target_bmp); | ||||
|           goto EXIT; | ||||
|         } | ||||
|  | ||||
|  | ||||
|       /* Draw alpha values into RGB channels */ | ||||
|       cogl_pipeline_set_layer_combine (ctx->texture_download_pipeline, | ||||
|                                        0, /* layer */ | ||||
|                                        "RGBA = REPLACE (TEXTURE[A])", | ||||
|                                        NULL); | ||||
|  | ||||
|       if (!do_texture_draw_and_read (framebuffer, | ||||
|                                      ctx->texture_download_pipeline, | ||||
|                                      texture, alpha_bmp, viewport, | ||||
|                                      error)) | ||||
|         { | ||||
|           cogl_object_unref (alpha_bmp); | ||||
|           _cogl_bitmap_unmap (target_bmp); | ||||
|           goto EXIT; | ||||
|         } | ||||
|  | ||||
|       /* Copy temp R to target A */ | ||||
|  | ||||
|       /* Note: we don't try to catch errors since "mapping" an | ||||
|        * malloc buffer should never fail */ | ||||
|       srcdata = _cogl_bitmap_map (alpha_bmp, | ||||
|                                   COGL_BUFFER_ACCESS_READ, | ||||
|                                   0 /* hints */, | ||||
|                                   NULL); | ||||
|  | ||||
|       for (y=0; y<target_height; ++y) | ||||
|         { | ||||
|           for (x=0; x<target_width; ++x) | ||||
|             { | ||||
|               srcpixel = srcdata + x*bpp; | ||||
|               dstpixel = dstdata + x*bpp; | ||||
|               dstpixel[3] = srcpixel[0]; | ||||
|             } | ||||
|           srcdata += alpha_rowstride; | ||||
|           dstdata += target_rowstride; | ||||
|         } | ||||
|  | ||||
|       _cogl_bitmap_unmap (alpha_bmp); | ||||
|  | ||||
|       _cogl_bitmap_unmap (target_bmp); | ||||
|  | ||||
|       cogl_object_unref (alpha_bmp); | ||||
|     } | ||||
|  | ||||
|   status = TRUE; | ||||
|  | ||||
| EXIT: | ||||
|   /* Restore old state */ | ||||
|   cogl_framebuffer_pop_matrix (framebuffer); | ||||
|   _cogl_framebuffer_pop_projection (framebuffer); | ||||
|   cogl_framebuffer_set_viewport (framebuffer, | ||||
|                                  save_viewport[0], | ||||
|                                  save_viewport[1], | ||||
|                                  save_viewport[2], | ||||
|                                  save_viewport[3]); | ||||
|  | ||||
|   return status; | ||||
| } | ||||
|  | ||||
| static CoglBool | ||||
| get_texture_bits_via_offscreen (CoglTexture *meta_texture, | ||||
|                                 CoglTexture *sub_texture, | ||||
| @@ -1156,25 +877,13 @@ cogl_texture_get_data (CoglTexture *texture, | ||||
|       tg_data.success = FALSE; | ||||
|     } | ||||
|  | ||||
|   /* XXX: In some cases _cogl_texture_2d_download_from_gl may fail | ||||
|    * to read back the texture data; such as for GLES which doesn't | ||||
|    * support glGetTexImage, so here we fallback to drawing the | ||||
|    * texture and reading the pixels from the framebuffer. */ | ||||
|   /* XXX: In some cases this api may fail to read back the texture | ||||
|    * data; such as for GLES which doesn't support glGetTexImage | ||||
|    */ | ||||
|   if (!tg_data.success) | ||||
|     { | ||||
|       if (!_cogl_texture_draw_and_read (texture, target_bmp, | ||||
|                                         closest_gl_format, | ||||
|                                         closest_gl_type, | ||||
|                                         &ignore_error)) | ||||
|         { | ||||
|           /* We have no more fallbacks so we just give up and | ||||
|            * hope for the best */ | ||||
|           g_warning ("Failed to read texture since draw-and-read " | ||||
|                      "fallback failed: %s", ignore_error->message); | ||||
|           cogl_error_free (ignore_error); | ||||
|           cogl_object_unref (target_bmp); | ||||
|           return 0; | ||||
|         } | ||||
|       cogl_object_unref (target_bmp); | ||||
|       return 0; | ||||
|     } | ||||
|  | ||||
|   /* Was intermediate used? */ | ||||
|   | ||||
| @@ -168,7 +168,7 @@ cogl_xlib_renderer_set_event_retrieval_enabled (CoglRenderer *renderer, | ||||
|                                                 CoglBool enable); | ||||
|  | ||||
| /** | ||||
|  * cogl_xlib_renderer_set_threaded_swap_wait_enabled: | ||||
|  * cogl_xlib_renderer_set_threaded_swap_wait_enabled: (skip) | ||||
|  * @renderer: a #CoglRenderer | ||||
|  * @enable: The new value | ||||
|  * | ||||
|   | ||||
| @@ -1412,20 +1412,12 @@ _cogl_framebuffer_gl_read_pixels_into_bitmap (CoglFramebuffer *framebuffer, | ||||
|   if (!cogl_is_offscreen (framebuffer)) | ||||
|     y = framebuffer_height - y - height; | ||||
|  | ||||
|   required_format = ctx->driver_vtable->pixel_format_to_gl (ctx, | ||||
|                                                             format, | ||||
|                                                             &gl_intformat, | ||||
|                                                             &gl_format, | ||||
|                                                             &gl_type); | ||||
|  | ||||
|   /* As we are reading pixels, we want to consider the bitmap according to | ||||
|    * its real pixel format, not the swizzled channels we pretend face to the | ||||
|    * pipeline. | ||||
|    */ | ||||
|   if ((format == COGL_PIXEL_FORMAT_BGRA_8888 || | ||||
|        format == COGL_PIXEL_FORMAT_BGRA_8888_PRE) && | ||||
|       _cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_TEXTURE_SWIZZLE)) | ||||
|     gl_format = GL_BGRA; | ||||
|   required_format = ctx->driver_vtable->pixel_format_to_gl_with_target (ctx, | ||||
|                                                                         framebuffer->internal_format, | ||||
|                                                                         format, | ||||
|                                                                         &gl_intformat, | ||||
|                                                                         &gl_format, | ||||
|                                                                         &gl_type); | ||||
|  | ||||
|   /* NB: All offscreen rendering is done upside down so there is no need | ||||
|    * to flip in this case... */ | ||||
|   | ||||
| @@ -90,6 +90,11 @@ typedef struct _CoglWinsysEGLVtable | ||||
|   (* add_config_attributes) (CoglDisplay *display, | ||||
|                              CoglFramebufferConfig *config, | ||||
|                              EGLint *attributes); | ||||
|   CoglBool | ||||
|   (* choose_config) (CoglDisplay *display, | ||||
|                      EGLint *attributes, | ||||
|                      EGLConfig *out_config, | ||||
|                      CoglError **error); | ||||
| } CoglWinsysEGLVtable; | ||||
|  | ||||
| typedef enum _CoglEGLWinsysFeature | ||||
| @@ -176,6 +181,9 @@ _cogl_winsys_egl_make_current (CoglDisplay *display, | ||||
|                                EGLSurface read, | ||||
|                                EGLContext context); | ||||
|  | ||||
| EGLBoolean | ||||
| _cogl_winsys_egl_ensure_current (CoglDisplay *display); | ||||
|  | ||||
| #ifdef EGL_KHR_image_base | ||||
| EGLImageKHR | ||||
| _cogl_egl_create_image (CoglContext *ctx, | ||||
|   | ||||
| @@ -336,6 +336,32 @@ _cogl_winsys_egl_add_config_attributes (CoglDisplay *display, | ||||
|   return i; | ||||
| } | ||||
|  | ||||
| static CoglBool | ||||
| _cogl_winsys_egl_choose_config (CoglDisplay *display, | ||||
|                                 EGLint *attributes, | ||||
|                                 EGLConfig *out_config, | ||||
|                                 CoglError **error) | ||||
| { | ||||
|   CoglRenderer *renderer = display->renderer; | ||||
|   CoglRendererEGL *egl_renderer = renderer->winsys; | ||||
|   EGLint config_count = 0; | ||||
|   EGLBoolean status; | ||||
|  | ||||
|   status = eglChooseConfig (egl_renderer->edpy, | ||||
|                             attributes, | ||||
|                             out_config, 1, | ||||
|                             &config_count); | ||||
|   if (status != EGL_TRUE || config_count == 0) | ||||
|     { | ||||
|       _cogl_set_error (error, COGL_WINSYS_ERROR, | ||||
|                        COGL_WINSYS_ERROR_CREATE_CONTEXT, | ||||
|                        "No compatible EGL configs found"); | ||||
|       return FALSE; | ||||
|     } | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static CoglBool | ||||
| _cogl_winsys_egl_display_setup (CoglDisplay *display, | ||||
|                                 CoglError **error) | ||||
| @@ -841,6 +867,7 @@ static const CoglWinsysEGLVtable | ||||
| _cogl_winsys_egl_vtable = | ||||
|   { | ||||
|     .add_config_attributes = _cogl_winsys_egl_add_config_attributes, | ||||
|     .choose_config = _cogl_winsys_egl_choose_config, | ||||
|     .display_setup = _cogl_winsys_egl_display_setup, | ||||
|     .display_destroy = _cogl_winsys_egl_display_destroy, | ||||
|     .context_created = _cogl_winsys_egl_context_created, | ||||
|   | ||||
| @@ -309,6 +309,18 @@ _cogl_winsys_egl_make_current (CoglDisplay *display, | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| EGLBoolean | ||||
| _cogl_winsys_egl_ensure_current (CoglDisplay *display) | ||||
| { | ||||
|   CoglDisplayEGL *egl_display = display->winsys; | ||||
|   CoglRendererEGL *egl_renderer = display->renderer->winsys; | ||||
|  | ||||
|   return eglMakeCurrent (egl_renderer->edpy, | ||||
|                          egl_display->current_draw_surface, | ||||
|                          egl_display->current_read_surface, | ||||
|                          egl_display->current_context); | ||||
| } | ||||
|  | ||||
| static void | ||||
| cleanup_context (CoglDisplay *display) | ||||
| { | ||||
| @@ -338,10 +350,9 @@ try_create_context (CoglDisplay *display, | ||||
|   CoglRendererEGL *egl_renderer = renderer->winsys; | ||||
|   EGLDisplay edpy; | ||||
|   EGLConfig config; | ||||
|   EGLint config_count = 0; | ||||
|   EGLBoolean status; | ||||
|   EGLint attribs[9]; | ||||
|   EGLint cfg_attribs[MAX_EGL_CONFIG_ATTRIBS]; | ||||
|   GError *config_error = NULL; | ||||
|   const char *error_message; | ||||
|  | ||||
|   _COGL_RETURN_VAL_IF_FAIL (egl_display->egl_context == NULL, TRUE); | ||||
| @@ -356,14 +367,16 @@ try_create_context (CoglDisplay *display, | ||||
|  | ||||
|   edpy = egl_renderer->edpy; | ||||
|  | ||||
|   status = eglChooseConfig (edpy, | ||||
|                             cfg_attribs, | ||||
|                             &config, 1, | ||||
|                             &config_count); | ||||
|   if (status != EGL_TRUE || config_count == 0) | ||||
|   if (!egl_renderer->platform_vtable->choose_config (display, | ||||
|                                                      cfg_attribs, | ||||
|                                                      &config, | ||||
|                                                      &config_error)) | ||||
|     { | ||||
|       error_message = "Unable to find a usable EGL configuration"; | ||||
|       goto fail; | ||||
|       _cogl_set_error (error, COGL_WINSYS_ERROR, | ||||
|                        COGL_WINSYS_ERROR_CREATE_CONTEXT, | ||||
|                        "Couldn't choose config: %s", config_error->message); | ||||
|       g_error_free (config_error); | ||||
|       goto err; | ||||
|     } | ||||
|  | ||||
|   egl_display->egl_config = config; | ||||
| @@ -419,6 +432,7 @@ fail: | ||||
|                COGL_WINSYS_ERROR_CREATE_CONTEXT, | ||||
|                "%s", error_message); | ||||
|  | ||||
| err: | ||||
|   cleanup_context (display); | ||||
|  | ||||
|   return FALSE; | ||||
|   | ||||
							
								
								
									
										70
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -1,15 +1,15 @@ | ||||
| AC_PREREQ(2.62) | ||||
|  | ||||
| m4_define([mutter_major_version], [3]) | ||||
| m4_define([mutter_minor_version], [25]) | ||||
| m4_define([mutter_micro_version], [90]) | ||||
| m4_define([mutter_minor_version], [30]) | ||||
| m4_define([mutter_micro_version], [0]) | ||||
|  | ||||
| m4_define([mutter_version], | ||||
|           [mutter_major_version.mutter_minor_version.mutter_micro_version]) | ||||
|  | ||||
| m4_define([mutter_plugin_api_version], [3]) | ||||
|  | ||||
| m4_define([libmutter_api_version], [1]) | ||||
| m4_define([libmutter_api_version], [3]) | ||||
|  | ||||
| AC_INIT([mutter], [mutter_version], | ||||
|         [http://bugzilla.gnome.org/enter_bug.cgi?product=mutter]) | ||||
| @@ -80,6 +80,7 @@ CANBERRA_GTK_VERSION=0.26 | ||||
| LIBWACOM_VERSION=0.13 | ||||
|  | ||||
| MUTTER_PC_MODULES=" | ||||
|    gl | ||||
|    egl | ||||
|    gtk+-3.0 >= 3.19.8 | ||||
|    gio-unix-2.0 >= 2.35.1 | ||||
| @@ -87,7 +88,6 @@ MUTTER_PC_MODULES=" | ||||
|    cairo >= 1.10.0 | ||||
|    gsettings-desktop-schemas >= 3.21.4 | ||||
|    json-glib-1.0 | ||||
|    upower-glib >= 0.99.0 | ||||
|    gnome-desktop-3.0 | ||||
|    xcomposite >= 0.2 | ||||
|    xcursor | ||||
| @@ -104,6 +104,7 @@ MUTTER_PC_MODULES=" | ||||
|    xcb-randr | ||||
|    xcb-res | ||||
| " | ||||
| XWAYLAND_GRAB_DEFAULT_ACCESS_RULES="gnome-boxes,remote-viewer,virt-viewer,virt-manager,vinagre,vncviewer,Xephyr" | ||||
|  | ||||
| GLIB_GSETTINGS | ||||
|  | ||||
| @@ -225,10 +226,10 @@ AC_MSG_CHECKING([gudev]) | ||||
| if test x$with_gudev = xno ; then | ||||
|   AC_MSG_RESULT([disabled]) | ||||
| else | ||||
|   if $PKG_CONFIG --exists gudev-1.0; then | ||||
|   if $PKG_CONFIG --exists "gudev-1.0 >= 232"; then | ||||
|     have_gudev=yes | ||||
|     AC_MSG_RESULT(yes) | ||||
|     MUTTER_PC_MODULES="$MUTTER_PC_MODULES gudev-1.0" | ||||
|     MUTTER_PC_MODULES="$MUTTER_PC_MODULES gudev-1.0 >= 232" | ||||
|     AC_DEFINE([HAVE_LIBGUDEV], 1, [Building with gudev for device type detection]) | ||||
|   else | ||||
|     AC_MSG_RESULT(no) | ||||
| @@ -238,6 +239,16 @@ else | ||||
|   fi | ||||
| fi | ||||
|  | ||||
| AC_ARG_ENABLE(remote-desktop, | ||||
|   AS_HELP_STRING([--enable-remote-desktop], [enable support for remote desktop and screen cast]),, | ||||
|   enable_remote_desktop=no | ||||
| ) | ||||
| AS_IF([test "$enable_remote_desktop" = "yes"], [ | ||||
|   MUTTER_PC_MODULES="$MUTTER_PC_MODULES libpipewire-0.2 >= 0.2.2" | ||||
|   AC_DEFINE([HAVE_REMOTE_DESKTOP],[1], [Defined if screen cast and remote desktop support is enabled]) | ||||
| ]) | ||||
| AM_CONDITIONAL([HAVE_REMOTE_DESKTOP],[test "$enable_remote_desktop" = "yes"]) | ||||
|  | ||||
| INTROSPECTION_VERSION=0.9.5 | ||||
| GOBJECT_INTROSPECTION_CHECK([$INTROSPECTION_VERSION]) | ||||
|  | ||||
| @@ -250,7 +261,19 @@ AC_SUBST(XWAYLAND_PATH) | ||||
|  | ||||
| PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES) | ||||
|  | ||||
| MUTTER_NATIVE_BACKEND_MODULES="libdrm libsystemd libinput >= 1.4 gudev-1.0 gbm >= 10.3" | ||||
| PKG_CHECK_MODULES(ELOGIND, [libelogind], [have_elogind=yes], [have_elogind=no]) | ||||
|  | ||||
| if test x$have_elogind = xyes; then | ||||
|      logind_provider="libelogind" | ||||
| fi | ||||
|  | ||||
| PKG_CHECK_MODULES(SYSTEMD, [libsystemd], [have_systemd=yes], [have_systemd=no]) | ||||
|  | ||||
| if test x$have_systemd = xyes -o -z "$logind_provider"; then | ||||
|      logind_provider="libsystemd" | ||||
| fi | ||||
|  | ||||
| MUTTER_NATIVE_BACKEND_MODULES="libdrm $logind_provider libinput >= 1.4 gudev-1.0 gbm >= 10.3" | ||||
|  | ||||
| AC_ARG_ENABLE(native-backend, | ||||
|   AS_HELP_STRING([--disable-native-backend], [disable mutter native (KMS) backend]),, | ||||
| @@ -266,14 +289,24 @@ AS_IF([test "$have_native_backend" = "yes"], [ | ||||
| ]) | ||||
| AM_CONDITIONAL([HAVE_NATIVE_BACKEND],[test "$have_native_backend" = "yes"]) | ||||
|  | ||||
| MUTTER_WAYLAND_EGLSTREAM_MODULES="wayland-eglstream-protocols" | ||||
|  | ||||
| AC_ARG_ENABLE(egl-device, | ||||
|   AS_HELP_STRING([--enable-egl-device], [enable support for EGLDevice on top of KMS]), | ||||
|   enable_egl_device=yes, | ||||
|   AS_HELP_STRING([--enable-egl-device], [enable support for EGLDevice on top of KMS]),, | ||||
|   enable_egl_device=no | ||||
|   have_wayland_eglstream=no | ||||
| ) | ||||
| AS_IF([test "$enable_egl_device" = "yes"], [ | ||||
|   AC_DEFINE([HAVE_EGL_DEVICE],[1], [Defined if EGLDevice support is enabled]) | ||||
|   PKG_CHECK_EXISTS([$MUTTER_WAYLAND_EGLSTREAM_MODULES], [have_wayland_eglstream=yes], [have_wayland_eglstream=no]) | ||||
| ]) | ||||
| AS_IF([test "$have_wayland_eglstream" = "yes"], [ | ||||
|   AC_DEFINE([HAVE_WAYLAND_EGLSTREAM],[1],[Defined if Wayland EGLStream protocols are available]) | ||||
|   PKG_CHECK_MODULES(WAYLAND_EGLSTREAM, [$MUTTER_WAYLAND_EGLSTREAM_MODULES], | ||||
|                     [ac_wayland_eglstream_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir $MUTTER_WAYLAND_EGLSTREAM_MODULES`]) | ||||
|   AC_SUBST(WAYLAND_EGLSTREAM_DATADIR, $ac_wayland_eglstream_pkgdatadir) | ||||
| ]) | ||||
| AM_CONDITIONAL([HAVE_WAYLAND_EGLSTREAM],[test "$have_wayland_eglstream" = "yes"]) | ||||
|  | ||||
| MUTTER_WAYLAND_MODULES="wayland-server >= 1.13.0" | ||||
|  | ||||
| @@ -292,12 +325,27 @@ AS_IF([test "$have_wayland" = "yes"], [ | ||||
|   AC_SUBST([WAYLAND_SCANNER]) | ||||
|   AC_DEFINE([HAVE_WAYLAND],[1],[Define if you want to enable Wayland support]) | ||||
|  | ||||
|   PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.9], | ||||
|   PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.16], | ||||
| 		    [ac_wayland_protocols_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`]) | ||||
|   AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, $ac_wayland_protocols_pkgdatadir) | ||||
| ]) | ||||
| AM_CONDITIONAL([HAVE_WAYLAND],[test "$have_wayland" = "yes"]) | ||||
|  | ||||
| AC_ARG_WITH([xwayland-grab-default-access-rules], | ||||
|     [AS_HELP_STRING([--with-xwayland-grab-default-access-rules="app-res1,app-res2,..."], | ||||
|         [comma delimited list of applications ressources or class allowed to issue X11 grabs in Xwayland"])], | ||||
|     [with_XWAYLAND_GRAB_DEFAULT_ACCESS_RULES="$withval"], | ||||
|     [with_XWAYLAND_GRAB_DEFAULT_ACCESS_RULES="$XWAYLAND_GRAB_DEFAULT_ACCESS_RULES"]) | ||||
|  | ||||
| case "$with_XWAYLAND_GRAB_DEFAULT_ACCESS_RULES" in | ||||
|     yes) with_XWAYLAND_GRAB_DEFAULT_ACCESS_RULES="$XWAYLAND_GRAB_DEFAULT_ACCESS_RULES" ;; | ||||
|     no) with_XWAYLAND_GRAB_DEFAULT_ACCESS_RULES='' ;; | ||||
| esac | ||||
| AC_DEFINE_UNQUOTED([XWAYLAND_GRAB_DEFAULT_ACCESS_RULES], | ||||
|                     "$with_XWAYLAND_GRAB_DEFAULT_ACCESS_RULES", | ||||
|                     [Xwayland applications allowed to issue keyboard grabs]) | ||||
| AC_SUBST(XWAYLAND_GRAB_DEFAULT_ACCESS_RULES) | ||||
|  | ||||
| PKG_CHECK_EXISTS([xi >= 1.6.99.1], | ||||
|                  AC_DEFINE([HAVE_XI23],[1],[Define if you have support for XInput 2.3 or greater])) | ||||
|  | ||||
| @@ -511,8 +559,10 @@ mutter-$VERSION | ||||
| 	Introspection:            ${found_introspection} | ||||
| 	Session management:       ${found_sm} | ||||
| 	Wayland:                  ${have_wayland} | ||||
| 	Wayland EGLStream:        ${have_wayland_eglstream} | ||||
| 	Native (KMS) backend:     ${have_native_backend} | ||||
| 	EGLDevice:                ${enable_egl_device} | ||||
| 	Remote desktop:           ${enable_remote_desktop} | ||||
| " | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -20,12 +20,6 @@ | ||||
|         <KeyListEntry name="move-to-workspace-last" | ||||
|                       description="Move window to last workspace" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-left" | ||||
| 	              description="Move window one workspace to the left" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-right" | ||||
| 	              description="Move window one workspace to the right" /> | ||||
|  | ||||
| 	<KeyListEntry name="move-to-workspace-up" | ||||
| 	              description="Move window one workspace up" /> | ||||
|  | ||||
| @@ -125,12 +119,6 @@ | ||||
| 	<KeyListEntry name="switch-to-workspace-last" | ||||
| 	              description="Switch to last workspace" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-left" | ||||
| 	              description="Move to workspace left" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-right" | ||||
| 	              description="Move to workspace right" /> | ||||
|  | ||||
| 	<KeyListEntry name="switch-to-workspace-up" | ||||
| 	              description="Move to workspace above" /> | ||||
|  | ||||
|   | ||||
							
								
								
									
										10
									
								
								data/50-mutter-wayland.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								data/50-mutter-wayland.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <KeyListEntries schema="org.gnome.mutter.wayland.keybindings" | ||||
|                 group="system" | ||||
|                 name="System" | ||||
|                 wm_name="Mutter" | ||||
|                 package="mutter"> | ||||
|  | ||||
| 	<KeyListEntry name="restore-shortcuts" description="Restore the keyboard shortcuts"/> | ||||
|  | ||||
| </KeyListEntries> | ||||
| @@ -15,8 +15,6 @@ | ||||
|  | ||||
| 	<KeyListEntry name="unmaximize" description="Restore window"/> | ||||
|  | ||||
| 	<KeyListEntry name="toggle-shaded" description="Toggle shaded state"/> | ||||
|  | ||||
| 	<KeyListEntry name="close" description="Close window"/> | ||||
|  | ||||
| 	<KeyListEntry name="minimize" description="Hide window"/> | ||||
|   | ||||
| @@ -12,13 +12,19 @@ xml_DATA = \ | ||||
|         50-mutter-system.xml \ | ||||
|         50-mutter-windows.xml | ||||
|  | ||||
| if HAVE_WAYLAND | ||||
| xml_DATA += \ | ||||
|         50-mutter-wayland.xml | ||||
| endif | ||||
|  | ||||
| gschema_in_files = \ | ||||
| 	org.gnome.mutter.gschema.xml.in	\ | ||||
| 	org.gnome.mutter.wayland.gschema.xml.in | ||||
| gsettings_SCHEMAS = $(gschema_in_files:.xml.in=.xml) | ||||
|  | ||||
| %.gschema.xml: %.gschema.xml.in Makefile | ||||
| 	$(AM_V_GEN) sed -e 's|@GETTEXT_DOMAIN[@]|$(GETTEXT_DOMAIN)|g' \ | ||||
| 	$(AM_V_GEN) sed -e 's|@GETTEXT_DOMAIN[@]|$(GETTEXT_PACKAGE)|g' \ | ||||
| 	                -e 's|@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES[@]|$(XWAYLAND_GRAB_DEFAULT_ACCESS_RULES)|g' \ | ||||
| 	$< > $@ || rm $@ | ||||
|  | ||||
| @GSETTINGS_RULES@ | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| <schemalist> | ||||
|   <schema id="org.gnome.mutter" path="/org/gnome/mutter/" | ||||
|           gettext-domain="@GETTEXT_DOMAIN"> | ||||
|           gettext-domain="@GETTEXT_DOMAIN@"> | ||||
|  | ||||
|     <key name="overlay-key" type="s"> | ||||
|       <default>'Super_L'</default> | ||||
| @@ -103,7 +103,7 @@ | ||||
|     </key> | ||||
|  | ||||
|     <key name="experimental-features" type="as"> | ||||
|       <default>['monitor-config-manager']</default> | ||||
|       <default>[]</default> | ||||
|       <summary>Enable experimental features</summary> | ||||
|       <description> | ||||
|         To enable experimental features, add the feature keyword to the list. | ||||
| @@ -114,22 +114,12 @@ | ||||
|  | ||||
|         Currently possible keywords: | ||||
|  | ||||
|         • “monitor-config-manager”    — use the new monitor configuration | ||||
|                                         system, aimed to replace the old one. | ||||
|                                         This enables a higher level configuration | ||||
|                                         API to be used by configuration | ||||
|                                         applications, as well as the ability to | ||||
|                                         configure per logical monitor scale. | ||||
|         • “scale-monitor-framebuffer” — makes mutter default to layout logical | ||||
|                                         monitors in a logical pixel coordinate | ||||
|                                         space, while scaling monitor | ||||
|                                         framebuffers instead of window content, | ||||
|                                         to manage HiDPI monitors. Does not | ||||
|                                         require a restart. | ||||
|  | ||||
|                                         Also enabling “monitor-config-manager” | ||||
|                                         is required for this feature to be | ||||
|                                         enabled. | ||||
|       </description> | ||||
|     </key> | ||||
|  | ||||
|   | ||||
| @@ -50,8 +50,52 @@ | ||||
|       <summary>Switch to VT 12</summary> | ||||
|     </key> | ||||
|     <key name="restore-shortcuts" type="as"> | ||||
|       <default><![CDATA[['<Shift><Control>Escape']]]></default> | ||||
|       <default><![CDATA[['<Super>Escape']]]></default> | ||||
|       <summary>Re-enable shortcuts</summary> | ||||
|     </key> | ||||
|   </schema> | ||||
|  | ||||
|  | ||||
|   <schema id="org.gnome.mutter.wayland" path="/org/gnome/mutter/wayland/" | ||||
|           gettext-domain="@GETTEXT_DOMAIN@"> | ||||
|  | ||||
|     <key name="xwayland-allow-grabs" type="b"> | ||||
|       <default>false</default> | ||||
|       <summary>Allow grabs with Xwayland</summary> | ||||
|       <description> | ||||
|         Allow keyboard grabs issued by X11 applications running in Xwayland | ||||
|         to be taken into account. | ||||
|  | ||||
|         For a X11 grab to be taken into account under Wayland, the client must | ||||
|         also either send a specific X11 ClientMessage to the root window or be | ||||
|         among the applications white-listed in key “xwayland-grab-access-rules”. | ||||
|       </description> | ||||
|     </key> | ||||
|  | ||||
|     <key name="xwayland-grab-access-rules" type="as"> | ||||
|       <default>[]</default> | ||||
|       <summary>Xwayland applications allowed to issue keyboard grabs</summary> | ||||
|       <description> | ||||
|         List the resource names or resource class of X11 windows either | ||||
|         allowed or not allowed to issue X11 keyboard grabs under Xwayland. | ||||
|  | ||||
|         The resource name or resource class of a given X11 window can be | ||||
|         obtained using the command “xprop WM_CLASS”. | ||||
|  | ||||
|         Wildcards “*” and jokers “?” in the values are supported. | ||||
|  | ||||
|         Values starting with “!” are blacklisted, which has precedence over | ||||
|         the whitelist, to revoke applications from the default system list. | ||||
|  | ||||
|         The default system list includes the following applications: | ||||
|  | ||||
|         “@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” | ||||
|  | ||||
|         Users can break an existing grab by using the specific keyboard | ||||
|         shortcut defined by the keybinding key “restore-shortcuts”. | ||||
|       </description> | ||||
|     </key> | ||||
|  | ||||
|   </schema> | ||||
|  | ||||
| </schemalist> | ||||
|   | ||||
| @@ -26,7 +26,6 @@ XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ \ | ||||
|         --flag=g_sprintf:2:c-format \ | ||||
|         --flag=g_snprintf:3:c-format | ||||
|  | ||||
|  | ||||
| # This is the copyright holder that gets inserted into the header of the | ||||
| # $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding | ||||
| # package.  (Note that the msgstr strings, extracted from the package's | ||||
| @@ -36,6 +35,7 @@ XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ \ | ||||
| # the public domain; in this case the translators are expected to disclaim | ||||
| # their copyright. | ||||
| COPYRIGHT_HOLDER = Translation copyright holder | ||||
|  | ||||
| # This is the email address or URL to which the translators shall report | ||||
| # bugs in the untranslated strings: | ||||
| # - Strings which are not entire sentences, see the maintainer guidelines | ||||
| @@ -50,7 +50,7 @@ COPYRIGHT_HOLDER = Translation copyright holder | ||||
| # It can be your email address, or a mailing list address where translators | ||||
| # can write to without being subscribed, or the URL of a web page through | ||||
| # which the translators can contact you. | ||||
| MSGID_BUGS_ADDRESS = http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general | ||||
| MSGID_BUGS_ADDRESS = https://gitlab.gnome.org/GNOME/mutter/issues | ||||
|  | ||||
| # This is the list of locale categories, beyond LC_MESSAGES, for which the | ||||
| # message catalogs shall be used.  It is usually empty. | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| # Please keep this file sorted alphabetically. | ||||
| data/50-mutter-navigation.xml | ||||
| data/50-mutter-system.xml | ||||
| data/50-mutter-wayland.xml | ||||
| data/50-mutter-windows.xml | ||||
| data/mutter.desktop.in | ||||
| data/org.gnome.mutter.gschema.xml.in | ||||
| @@ -13,18 +14,18 @@ src/compositor/meta-background.c | ||||
| src/core/bell.c | ||||
| src/core/core.c | ||||
| src/core/display.c | ||||
| src/core/errors.c | ||||
| src/core/keybindings.c | ||||
| src/core/main.c | ||||
| src/core/meta-close-dialog-default.c | ||||
| src/core/mutter.c | ||||
| src/core/prefs.c | ||||
| src/core/screen.c | ||||
| src/core/util.c | ||||
| src/core/window.c | ||||
| src/ui/frames.c | ||||
| src/ui/theme.c | ||||
| src/wayland/meta-wayland-tablet-pad.c | ||||
| src/x11/meta-x11-display.c | ||||
| src/x11/meta-x11-errors.c | ||||
| src/x11/session.c | ||||
| src/x11/window-props.c | ||||
| src/x11/xprops.c | ||||
|   | ||||
| @@ -28,6 +28,7 @@ clutter/clutter/clutter-grid-layout.c | ||||
| clutter/clutter/clutter-image.c | ||||
| clutter/clutter/clutter-input-device.c | ||||
| clutter/clutter/clutter-input-device-tool.c | ||||
| clutter/clutter/clutter-input-method.c | ||||
| clutter/clutter/clutter-interval.c | ||||
| clutter/clutter/clutter-layout-manager.c | ||||
| clutter/clutter/clutter-layout-meta.c | ||||
|   | ||||
							
								
								
									
										771
									
								
								po/ar.po
									
									
									
									
									
								
							
							
						
						
									
										771
									
								
								po/ar.po
									
									
									
									
									
								
							| @@ -11,8 +11,8 @@ msgstr "" | ||||
| "Project-Id-Version: metacity.HEAD\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&" | ||||
| "keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2017-06-18 21:26+0200\n" | ||||
| "PO-Revision-Date: 2017-06-18 21:27+0200\n" | ||||
| "POT-Creation-Date: 2017-11-03 10:20+0200\n" | ||||
| "PO-Revision-Date: 2017-11-03 10:22+0200\n" | ||||
| "Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n" | ||||
| "Language-Team: Arabic <doc@arabeyes.org>\n" | ||||
| "Language: ar\n" | ||||
| @@ -24,448 +24,10 @@ msgstr "" | ||||
| "X-Generator: Virtaal 1.0.0-beta1\n" | ||||
| "X-Project-Style: gnome\n" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| msgid "Navigation" | ||||
| msgstr "الإبحار" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:9 | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "انقل النافذة إلى مساحة العمل 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:12 | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "انقل النافذة إلى مساحة العمل 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:15 | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "انقل النافذة إلى مساحة العمل 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:18 | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "انقل النافذة إلى مساحة العمل 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:21 | ||||
| msgid "Move window to last workspace" | ||||
| msgstr "انقل النافذة إلى مساحة العمل الأخيرة" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "انقل النافذة مساحة عمل واحدة إلى اليسار" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "انقل النافذة مساحة عمل واحدة إلى اليمين" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "انقل النافذة مساحة عمل واحدة إلى الأعلى" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "انقل النافذة مساحة عمل واحدة إلى الأسفل" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "انقل النافذة شاشة واحدة إلى اليسار" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "انقل النافذة شاشة واحدة إلى اليمين" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "انقل النافذة شاشة واحدة إلى الأعلى" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "انقل النافذة شاشة واحدة إلى الأسفل" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| msgid "Switch applications" | ||||
| msgstr "تنقل بين التطبيقات" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "انتقل إلى التطبيق السابق" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| msgid "Switch windows" | ||||
| msgstr "تنقل بين النوافذ" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "انتقل إلى النافذة السابقة" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "تنقل بين نوافذ التطبيق" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "انتقل إلى نافذة التطبيق السابقة" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| msgid "Switch system controls" | ||||
| msgstr "تنقل بين تحكمات النظام" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "انتقل إلى تحكم النظام السابق" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "تنقل مباشرة بين النوافذ" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "انتقل مباشرة إلى النافذة السابقة" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "تنقل مباشرة بين نوافذ التطبيق" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "انتقل مباشرة إلى نافذة التطبيق السابقة" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "تنقل مباشرة بين تحكمات النظام" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "انتقل مباشرة إلى تحكم النظام السابق" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "أخفِ كل النوافذ العادية" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "انتقل إلى مساحة العمل 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "انتقل إلى مساحة العمل 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "انتقل إلى مساحة العمل 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "انتقل إلى مساحة العمل 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "انتقل إلى مساحة العمل الأخيرة" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "انقل لمساحة العمل على اليسار" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "انقل لمساحة العمل على اليمين" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "انقل لمساحة العمل أعلى" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "انقل لمساحة العمل أسفل" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| msgid "System" | ||||
| msgstr "النظام" | ||||
|  | ||||
| #: data/50-mutter-system.xml:8 | ||||
| msgid "Show the run command prompt" | ||||
| msgstr "أظهر محث تشغيل أمر" | ||||
|  | ||||
| #: data/50-mutter-system.xml:10 | ||||
| msgid "Show the activities overview" | ||||
| msgstr "أظهر نظرة عامة على الأنشطة" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "النوافذ" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:8 | ||||
| msgid "Activate the window menu" | ||||
| msgstr "فعّل قائمة النافذة" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:10 | ||||
| msgid "Toggle fullscreen mode" | ||||
| msgstr "بدّل نمط ملء الشاشة" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:12 | ||||
| msgid "Toggle maximization state" | ||||
| msgstr "بدّل حالة التكبير" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:14 | ||||
| msgid "Maximize window" | ||||
| msgstr "كبّر النّافذة" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:16 | ||||
| msgid "Restore window" | ||||
| msgstr "استعد النّافذة" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "بدّل حالة الإخفاء" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "أغلق النّافذة" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Hide window" | ||||
| msgstr "أخفِ النّافذة" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Move window" | ||||
| msgstr "انقل النّافذة" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| msgid "Resize window" | ||||
| msgstr "حجّم النّافذة" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "بدّل حالة ظهور النافذة على جميع مساحات العمل أو واحدة منها" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "ارفع النافذة إذا كانت أخرى تغطيها، أو أخفضها في ما عدا ذلك" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "ارفع النافذة فوق النوافذ الأخرى" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "اخفض النافذة تحت النوافذ الأخرى" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "كبّر النافذة رأسيا" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "كبّر النافذة أفقيا" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| msgid "View split on left" | ||||
| msgstr "المنظور مقسوم على اليمين" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| msgid "View split on right" | ||||
| msgstr "المنظور مقسوم على اليسار" | ||||
|  | ||||
| #: data/mutter.desktop.in:4 | ||||
| msgid "Mutter" | ||||
| msgstr "مَتَر" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:7 | ||||
| msgid "Modifier to use for extended window management operations" | ||||
| msgstr "المغير الذي سيُستعمل لتمديد عمليات إدارة النوافذ " | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:8 | ||||
| msgid "" | ||||
| "This key will initiate the “overlay”, which is a combination window overview " | ||||
| "and application launching system. The default is intended to be the “Windows " | ||||
| "key” on PC hardware. It’s expected that this binding either the default or " | ||||
| "set to the empty string." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:20 | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:21 | ||||
| msgid "" | ||||
| "When true, instead of having independent titlebars, modal dialogs appear " | ||||
| "attached to the titlebar of the parent window and are moved together with " | ||||
| "the parent window." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:30 | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:31 | ||||
| msgid "" | ||||
| "If enabled, dropping windows on vertical screen edges maximizes them " | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:40 | ||||
| msgid "Workspaces are managed dynamically" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:41 | ||||
| msgid "" | ||||
| "Determines whether workspaces are managed dynamically or whether there’s a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:50 | ||||
| msgid "Workspaces only on primary" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:51 | ||||
| msgid "" | ||||
| "Determines whether workspace switching should happen for windows on all " | ||||
| "monitors or only for windows on the primary monitor." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:59 | ||||
| msgid "No tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:60 | ||||
| msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:68 | ||||
| msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:69 | ||||
| msgid "" | ||||
| "If set to true, and the focus mode is either “sloppy” or “mouse” then the " | ||||
| "focus will not be changed immediately when entering a window, but only after " | ||||
| "the pointer stops moving." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:79 | ||||
| msgid "Draggable border width" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:80 | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme’s visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:89 | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:90 | ||||
| msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:98 | ||||
| msgid "Place new windows in the center" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:99 | ||||
| msgid "" | ||||
| "When true, the new windows will always be put in the center of the active " | ||||
| "screen of the monitor." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:107 | ||||
| msgid "Enable experimental features" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:108 | ||||
| msgid "" | ||||
| "To enable experimental features, add the feature keyword to the list. " | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “monitor-config-manager” — use the new " | ||||
| "monitor configuration system, aimed to replace the old one. This enables a " | ||||
| "higher level configuration API to be used by configuration applications, as " | ||||
| "well as the ability to configure per logical monitor scale. • “scale-monitor-" | ||||
| "framebuffer” — makes mutter default to layout logical monitors in a logical " | ||||
| "pixel coordinate space, while scaling monitor framebuffers instead of window " | ||||
| "content, to manage HiDPI monitors. Does not require a restart. Also enabling " | ||||
| "“monitor-config-manager” is required for this feature to be enabled." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:6 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 1" | ||||
| msgstr "انتقل إلى مساحة العمل 1" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:10 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 2" | ||||
| msgstr "انتقل إلى مساحة العمل 2" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:14 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 3" | ||||
| msgstr "انتقل إلى مساحة العمل 3" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:18 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 4" | ||||
| msgstr "انتقل إلى مساحة العمل 4" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:22 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 5" | ||||
| msgstr "انتقل إلى مساحة العمل 5" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:26 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 6" | ||||
| msgstr "انتقل إلى مساحة العمل 6" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:30 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 7" | ||||
| msgstr "انتقل إلى مساحة العمل 7" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:34 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 8" | ||||
| msgstr "انتقل إلى مساحة العمل 8" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:38 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 9" | ||||
| msgstr "انتقل إلى مساحة العمل 9" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:42 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 10" | ||||
| msgstr "انتقل إلى مساحة العمل 10" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:46 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 11" | ||||
| msgstr "انتقل إلى مساحة العمل 11" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:50 | ||||
| #, fuzzy | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "انتقل إلى مساحة العمل 12" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1866 | ||||
| #: ../src/backends/meta-input-settings.c:2167 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "" | ||||
| @@ -473,113 +35,113 @@ msgstr "" | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1888 | ||||
| #: ../src/backends/meta-input-settings.c:2190 | ||||
| msgid "Switch monitor" | ||||
| msgstr "غيّر الشاشة" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:1890 | ||||
| #: ../src/backends/meta-input-settings.c:2192 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "" | ||||
| msgstr "اعرض المساعدة على الشاشة" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:879 | ||||
| #: ../src/backends/meta-monitor-manager.c:900 | ||||
| msgid "Built-in display" | ||||
| msgstr "شاشة مدمجة" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:902 | ||||
| #: ../src/backends/meta-monitor-manager.c:923 | ||||
| msgid "Unknown" | ||||
| msgstr "غير معروفة" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:904 | ||||
| #: ../src/backends/meta-monitor-manager.c:925 | ||||
| msgid "Unknown Display" | ||||
| msgstr "شاشة غير معروفة" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:912 | ||||
| #: ../src/backends/meta-monitor-manager.c:933 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:476 | ||||
| #, fuzzy, c-format | ||||
| #: ../src/compositor/compositor.c:476 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| msgstr "يعمل مدير مزج آخر على الشاشة %i والعرض \"%s\"." | ||||
| msgstr "يعمل مدير مزج آخر على الشاشة %i و العرض ”%s“." | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| #: ../src/core/bell.c:194 | ||||
| msgid "Bell event" | ||||
| msgstr "حدث جرس" | ||||
|  | ||||
| #: src/core/display.c:608 | ||||
| #, fuzzy, c-format | ||||
| #: ../src/core/display.c:608 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "فشل فتح عرض نظام نوافذ إكس '%s'\n" | ||||
| msgstr "فشل فتح عرض نظام نوافذ إكس ”%s“\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| #: ../src/core/main.c:189 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "عطّل الاتصال بمدير الجلسة" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| #: ../src/core/main.c:195 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "استبدل بمدير النوافذ الذي يعمل" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| #: ../src/core/main.c:201 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "حدّد رقم هويّة إدارة الجلسة" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| #: ../src/core/main.c:206 | ||||
| msgid "X Display to use" | ||||
| msgstr "معراض س الذي سيستعمل" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| #: ../src/core/main.c:212 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "ابدأ الجلسة من ملف محفوظ" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| #: ../src/core/main.c:218 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "اجعل نداءات س متزامنة" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| #: ../src/core/main.c:225 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| #: ../src/core/main.c:231 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| #: ../src/core/main.c:239 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:147 | ||||
| #: ../src/core/meta-close-dialog-default.c:147 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "”%s“ لا يستجيب." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:149 | ||||
| #: ../src/core/meta-close-dialog-default.c:149 | ||||
| msgid "Application is not responding." | ||||
| msgstr "لا يستجيب التطبيق" | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:154 | ||||
| #: ../src/core/meta-close-dialog-default.c:154 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "ربما ترغب في الانتظار قليلا ليُكمِل أو إجبار التطبيق على الإنهاء كُلّية." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| #: ../src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Force Quit" | ||||
| msgstr "أ_جبر الإنهاء" | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| #: ../src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Wait" | ||||
| msgstr "ا_نتظر" | ||||
|  | ||||
| #: src/core/mutter.c:39 | ||||
| #, fuzzy, c-format | ||||
| #: ../src/core/mutter.c:39 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| @@ -592,56 +154,289 @@ msgstr "" | ||||
| "هذا برنامج حر، راجع المصدر لشروط النسخ.\n" | ||||
| "لا يوجد أي ضمان: و لا حتى ضمان قابلية التسويق أو المناسبة لأي هدف.\n" | ||||
|  | ||||
| #: src/core/mutter.c:53 | ||||
| #: ../src/core/mutter.c:53 | ||||
| msgid "Print version" | ||||
| msgstr "اطبع الإصدارة" | ||||
|  | ||||
| #: src/core/mutter.c:59 | ||||
| #: ../src/core/mutter.c:59 | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "ملحق مَتَر الذي سيُستخدم" | ||||
|  | ||||
| #: src/core/prefs.c:1997 | ||||
| #: ../src/core/prefs.c:1997 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "مساحة العمل %d" | ||||
|  | ||||
| #: src/core/screen.c:580 | ||||
| #, fuzzy, c-format | ||||
| #: ../src/core/screen.c:583 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| "replace the current window manager." | ||||
| msgstr "" | ||||
| "الشاشة \"%s\" لها مدير نوافذ بالفعل، حاول استعمال خيار التبديل --replace " | ||||
| "لتحُلّ محلّ مدير النوافذ الحالي." | ||||
| "الشاشة ”%s“ لها مدير نوافذ بالفعل، حاول استعمال خيار التبديل --replace لتحُلّ" | ||||
| " محلّ مدير النوافذ الحالي." | ||||
|  | ||||
| #: src/core/screen.c:665 | ||||
| #, fuzzy, c-format | ||||
| #: ../src/core/screen.c:668 | ||||
| #, c-format | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "الشاشة %d على العرض '%s' غير صحيحة\n" | ||||
| msgstr "الشاشة %d على العرض ”%s“ غير صحيحة\n" | ||||
|  | ||||
| #: src/core/util.c:120 | ||||
| #: ../src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "جُمِّع مَتَر دون دعم للنمط المطنب\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #: ../src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #, fuzzy | ||||
| #: ../src/x11/session.c:1815 | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| msgstr "" | ||||
| "هذه النوافذ لا تدعم "احفظ الضبط الحالي" يجب إعادة تشغيلها يدويا " | ||||
| "عند الولوج المرة القادمة." | ||||
| "هذه النوافذ لا تدعم ” الضبط الحالي" إعادة تشغيلها يدويا عند الولوج " | ||||
| "المرة القادمة." | ||||
|  | ||||
| #: src/x11/window-props.c:559 | ||||
| #: ../src/x11/window-props.c:559 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (على %s)" | ||||
|  | ||||
| #~ msgid "Navigation" | ||||
| #~ msgstr "الإبحار" | ||||
|  | ||||
| #~ msgid "Move window to workspace 1" | ||||
| #~ msgstr "انقل النافذة إلى مساحة العمل 1" | ||||
|  | ||||
| #~ msgid "Move window to workspace 2" | ||||
| #~ msgstr "انقل النافذة إلى مساحة العمل 2" | ||||
|  | ||||
| #~ msgid "Move window to workspace 3" | ||||
| #~ msgstr "انقل النافذة إلى مساحة العمل 3" | ||||
|  | ||||
| #~ msgid "Move window to workspace 4" | ||||
| #~ msgstr "انقل النافذة إلى مساحة العمل 4" | ||||
|  | ||||
| #~ msgid "Move window to last workspace" | ||||
| #~ msgstr "انقل النافذة إلى مساحة العمل الأخيرة" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the left" | ||||
| #~ msgstr "انقل النافذة مساحة عمل واحدة إلى اليسار" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the right" | ||||
| #~ msgstr "انقل النافذة مساحة عمل واحدة إلى اليمين" | ||||
|  | ||||
| #~ msgid "Move window one workspace up" | ||||
| #~ msgstr "انقل النافذة مساحة عمل واحدة إلى الأعلى" | ||||
|  | ||||
| #~ msgid "Move window one workspace down" | ||||
| #~ msgstr "انقل النافذة مساحة عمل واحدة إلى الأسفل" | ||||
|  | ||||
| #~ msgid "Move window one monitor to the left" | ||||
| #~ msgstr "انقل النافذة شاشة واحدة إلى اليسار" | ||||
|  | ||||
| #~ msgid "Move window one monitor to the right" | ||||
| #~ msgstr "انقل النافذة شاشة واحدة إلى اليمين" | ||||
|  | ||||
| #~ msgid "Move window one monitor up" | ||||
| #~ msgstr "انقل النافذة شاشة واحدة إلى الأعلى" | ||||
|  | ||||
| #~ msgid "Move window one monitor down" | ||||
| #~ msgstr "انقل النافذة شاشة واحدة إلى الأسفل" | ||||
|  | ||||
| #~ msgid "Switch applications" | ||||
| #~ msgstr "تنقل بين التطبيقات" | ||||
|  | ||||
| #~ msgid "Switch to previous application" | ||||
| #~ msgstr "انتقل إلى التطبيق السابق" | ||||
|  | ||||
| #~ msgid "Switch windows" | ||||
| #~ msgstr "تنقل بين النوافذ" | ||||
|  | ||||
| #~ msgid "Switch to previous window" | ||||
| #~ msgstr "انتقل إلى النافذة السابقة" | ||||
|  | ||||
| #~ msgid "Switch windows of an application" | ||||
| #~ msgstr "تنقل بين نوافذ التطبيق" | ||||
|  | ||||
| #~ msgid "Switch to previous window of an application" | ||||
| #~ msgstr "انتقل إلى نافذة التطبيق السابقة" | ||||
|  | ||||
| #~ msgid "Switch system controls" | ||||
| #~ msgstr "تنقل بين تحكمات النظام" | ||||
|  | ||||
| #~ msgid "Switch to previous system control" | ||||
| #~ msgstr "انتقل إلى تحكم النظام السابق" | ||||
|  | ||||
| #~ msgid "Switch windows directly" | ||||
| #~ msgstr "تنقل مباشرة بين النوافذ" | ||||
|  | ||||
| #~ msgid "Switch directly to previous window" | ||||
| #~ msgstr "انتقل مباشرة إلى النافذة السابقة" | ||||
|  | ||||
| #~ msgid "Switch windows of an app directly" | ||||
| #~ msgstr "تنقل مباشرة بين نوافذ التطبيق" | ||||
|  | ||||
| #~ msgid "Switch directly to previous window of an app" | ||||
| #~ msgstr "انتقل مباشرة إلى نافذة التطبيق السابقة" | ||||
|  | ||||
| #~ msgid "Switch system controls directly" | ||||
| #~ msgstr "تنقل مباشرة بين تحكمات النظام" | ||||
|  | ||||
| #~ msgid "Switch directly to previous system control" | ||||
| #~ msgstr "انتقل مباشرة إلى تحكم النظام السابق" | ||||
|  | ||||
| #~ msgid "Hide all normal windows" | ||||
| #~ msgstr "أخفِ كل النوافذ العادية" | ||||
|  | ||||
| #~ msgid "Switch to workspace 1" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 1" | ||||
|  | ||||
| #~ msgid "Switch to workspace 2" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 2" | ||||
|  | ||||
| #~ msgid "Switch to workspace 3" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 3" | ||||
|  | ||||
| #~ msgid "Switch to workspace 4" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 4" | ||||
|  | ||||
| #~ msgid "Switch to last workspace" | ||||
| #~ msgstr "انتقل إلى مساحة العمل الأخيرة" | ||||
|  | ||||
| #~ msgid "Move to workspace left" | ||||
| #~ msgstr "انقل لمساحة العمل على اليسار" | ||||
|  | ||||
| #~ msgid "Move to workspace right" | ||||
| #~ msgstr "انقل لمساحة العمل على اليمين" | ||||
|  | ||||
| #~ msgid "Move to workspace above" | ||||
| #~ msgstr "انقل لمساحة العمل أعلى" | ||||
|  | ||||
| #~ msgid "Move to workspace below" | ||||
| #~ msgstr "انقل لمساحة العمل أسفل" | ||||
|  | ||||
| #~ msgid "System" | ||||
| #~ msgstr "النظام" | ||||
|  | ||||
| #~ msgid "Show the run command prompt" | ||||
| #~ msgstr "أظهر محث تشغيل أمر" | ||||
|  | ||||
| #~ msgid "Show the activities overview" | ||||
| #~ msgstr "أظهر نظرة عامة على الأنشطة" | ||||
|  | ||||
| #~ msgid "Windows" | ||||
| #~ msgstr "النوافذ" | ||||
|  | ||||
| #~ msgid "Activate the window menu" | ||||
| #~ msgstr "فعّل قائمة النافذة" | ||||
|  | ||||
| #~ msgid "Toggle fullscreen mode" | ||||
| #~ msgstr "بدّل نمط ملء الشاشة" | ||||
|  | ||||
| #~ msgid "Toggle maximization state" | ||||
| #~ msgstr "بدّل حالة التكبير" | ||||
|  | ||||
| #~ msgid "Maximize window" | ||||
| #~ msgstr "كبّر النّافذة" | ||||
|  | ||||
| #~ msgid "Restore window" | ||||
| #~ msgstr "استعد النّافذة" | ||||
|  | ||||
| #~ msgid "Toggle shaded state" | ||||
| #~ msgstr "بدّل حالة الإخفاء" | ||||
|  | ||||
| #~ msgid "Close window" | ||||
| #~ msgstr "أغلق النّافذة" | ||||
|  | ||||
| #~ msgid "Hide window" | ||||
| #~ msgstr "أخفِ النّافذة" | ||||
|  | ||||
| #~ msgid "Move window" | ||||
| #~ msgstr "انقل النّافذة" | ||||
|  | ||||
| #~ msgid "Resize window" | ||||
| #~ msgstr "حجّم النّافذة" | ||||
|  | ||||
| #~ msgid "Toggle window on all workspaces or one" | ||||
| #~ msgstr "بدّل حالة ظهور النافذة على جميع مساحات العمل أو واحدة منها" | ||||
|  | ||||
| #~ msgid "Raise window if covered, otherwise lower it" | ||||
| #~ msgstr "ارفع النافذة إذا كانت أخرى تغطيها، أو أخفضها في ما عدا ذلك" | ||||
|  | ||||
| #~ msgid "Raise window above other windows" | ||||
| #~ msgstr "ارفع النافذة فوق النوافذ الأخرى" | ||||
|  | ||||
| #~ msgid "Lower window below other windows" | ||||
| #~ msgstr "اخفض النافذة تحت النوافذ الأخرى" | ||||
|  | ||||
| #~ msgid "Maximize window vertically" | ||||
| #~ msgstr "كبّر النافذة رأسيا" | ||||
|  | ||||
| #~ msgid "Maximize window horizontally" | ||||
| #~ msgstr "كبّر النافذة أفقيا" | ||||
|  | ||||
| #~ msgid "View split on left" | ||||
| #~ msgstr "المنظور مقسوم على اليمين" | ||||
|  | ||||
| #~ msgid "View split on right" | ||||
| #~ msgstr "المنظور مقسوم على اليسار" | ||||
|  | ||||
| #~ msgid "Mutter" | ||||
| #~ msgstr "مَتَر" | ||||
|  | ||||
| #~ msgid "Modifier to use for extended window management operations" | ||||
| #~ msgstr "المغير الذي سيُستعمل لتمديد عمليات إدارة النوافذ " | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 1" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 1" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 2" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 2" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 3" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 3" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 4" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 4" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 5" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 5" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 6" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 6" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 7" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 7" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 8" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 8" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 9" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 9" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 10" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 10" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 11" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 11" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Switch to VT 12" | ||||
| #~ msgstr "انتقل إلى مساحة العمل 12" | ||||
|  | ||||
| #~ msgid "Unknown window information request: %d" | ||||
| #~ msgstr "طلب معلومات نافذة مجهول: %d" | ||||
|  | ||||
|   | ||||
							
								
								
									
										336
									
								
								po/be.po
									
									
									
									
									
								
							
							
						
						
									
										336
									
								
								po/be.po
									
									
									
									
									
								
							| @@ -3,10 +3,9 @@ | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter.master\n" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2017-04-21 21:33+0000\n" | ||||
| "PO-Revision-Date: 2017-04-23 16:56+0300\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n" | ||||
| "POT-Creation-Date: 2018-07-07 09:58+0000\n" | ||||
| "PO-Revision-Date: 2018-09-06 18:47+0300\n" | ||||
| "Last-Translator: Yuras Shumovich <shumovichy@gmail.com>\n" | ||||
| "Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n" | ||||
| "Language: be\n" | ||||
| @@ -15,7 +14,7 @@ msgstr "" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" | ||||
| "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" | ||||
| "X-Generator: Poedit 1.8.11\n" | ||||
| "X-Generator: Poedit 2.1.1\n" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| msgid "Navigation" | ||||
| @@ -42,134 +41,118 @@ msgid "Move window to last workspace" | ||||
| msgstr "Перамясціць акно ў апошнюю прастору" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Перамясціць акно ў прастору злева ад дзейнай" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Перамясціць акно ў прастору справа ад дзейнай" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Перамясціць акно ў прастору зверху ад дзейнай" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Перамясціць акно ў прастору знізу ад дзейнай" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Перамясціць акно на манітор злева ад дзейнага" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Перамясціць акно на манітор справа ад дзейнага" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Перамясціць акно на манітор зверху ад дзейнага" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Перамясціць акно на манітор знізу ад дзейнага" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| #: data/50-mutter-navigation.xml:43 | ||||
| msgid "Switch applications" | ||||
| msgstr "Пераключэнне праграм" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| #: data/50-mutter-navigation.xml:48 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Пераключыць на папярэднюю праграму" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| #: data/50-mutter-navigation.xml:52 | ||||
| msgid "Switch windows" | ||||
| msgstr "Пераключэнне вокнаў" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| #: data/50-mutter-navigation.xml:57 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Перайсці на папярэдняе акно" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| #: data/50-mutter-navigation.xml:61 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Пераключэнне вокнаў праграмы" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| #: data/50-mutter-navigation.xml:66 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Перайсці на папярэдняе акно праграмы" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| #: data/50-mutter-navigation.xml:70 | ||||
| msgid "Switch system controls" | ||||
| msgstr "Пераключэнне паміж сістэмнымі элементамі кіравання" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| #: data/50-mutter-navigation.xml:75 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Пераключыць на папярэдні сістэмны элемент кіравання" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| #: data/50-mutter-navigation.xml:79 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Непасрэднае пераключэнне вокнаў" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| #: data/50-mutter-navigation.xml:84 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Перайсці непасрэдна на папярэдняе акно" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| #: data/50-mutter-navigation.xml:88 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Непасрэднае пераключэнне вокнаў праграмы" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| #: data/50-mutter-navigation.xml:93 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Перайсці непасрэдна на папярэдняе акно праграмы" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| #: data/50-mutter-navigation.xml:97 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Непасрэднае пераключэнне паміж сістэмнымі элементамі кіравання" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| #: data/50-mutter-navigation.xml:102 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Перайсці непасрэдна на папярэдні сістэмны элемент кіравання" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| #: data/50-mutter-navigation.xml:105 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Схаваць усе звычайныя вокны" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Перайсці ў прастору працы 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Перайсці ў прастору працы 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Перайсці ў прастору працы 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Перайсці ў прастору працы 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Перайсці ў апошнюю прастору працы" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Перамясціць на прастору працы злева" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Перамясціць на прастору працы справа" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Перамясціць на прастору працы зверху" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Перамясціць на прастору працы знізу" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "Сістэма" | ||||
|  | ||||
| @@ -181,6 +164,10 @@ msgstr "Паказаць акенца для выканання загаду" | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Паказаць агляд дзейнасцяў" | ||||
|  | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "Аднавіць клавіятурныя скароты" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Вокны" | ||||
| @@ -206,54 +193,50 @@ msgid "Restore window" | ||||
| msgstr "Аднавіць былы памер акна" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Перамяніць скручанасць акна ў загаловак" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Закрыць акно" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Hide window" | ||||
| msgstr "Схаваць акно" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Move window" | ||||
| msgstr "Перамясціць акно" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Resize window" | ||||
| msgstr "Змяніць памер акна" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| #: data/50-mutter-windows.xml:27 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Перамяніць, ці бачнае акно на ўсіх прасторах працы" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Узняць акно, калі яно закрыта іншымі вокнамі, іначай апусціць яго" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Узняць акно над астатнімі" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Апусціць акно пад астатнія" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Вертыкальна максімалізаваць акно" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Гарызантальна максімалізаваць акно" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| #: data/50-mutter-windows.xml:41 | ||||
| msgid "View split on left" | ||||
| msgstr "Падзяліць прагляд злева" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| #: data/50-mutter-windows.xml:45 | ||||
| msgid "View split on right" | ||||
| msgstr "Падзяліць прагляд справа" | ||||
|  | ||||
| @@ -428,6 +411,14 @@ msgstr "Выбраць акно з выплыўнога акенца" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Закрыць выплыўное акенца" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Пераключыць канфігурацыі манітора" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "Паварочвае убудаваны манітор" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:6 | ||||
| msgid "Switch to VT 1" | ||||
| msgstr "Перайсці ў віртуальны тэрмінал 1" | ||||
| @@ -476,10 +467,58 @@ msgstr "Перайсці ў віртуальны тэрмінал 11" | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "Перайсці ў віртуальны тэрмінал 12" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:54 | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Уключыць назад клавіятурныя скароты" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:64 | ||||
| msgid "Allow grabs with Xwayland" | ||||
| msgstr "Дазволіць захоп клавіятуры з Xwayland" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:65 | ||||
| msgid "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
| msgstr "" | ||||
| "Дазволіць прымаць у разлік захоп клавіятуры прыстасаваннямі X11, якія " | ||||
| "працуюць у Xwayland. Каб гэта працавала, карыстальнік павінны таксама " | ||||
| "даслаць адпаведнае X11 паведамленне ClientMessage каранёваму акну, ці быць " | ||||
| "сярод дазволеных дастасаванняў у \"xwayland-grab-access-rules\"." | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:77 | ||||
| msgid "Xwayland applications allowed to issue keyboard grabs" | ||||
| msgstr "Xwayland дастасаванні, якім дазволена захапляць клавіятуру" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:78 | ||||
| msgid "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
| msgstr "" | ||||
| "Спіс назваў ці класаў рэсурсаў вокнаў X11, якім дазволена ці не дазволена " | ||||
| "захопліваць клавіятуру пад Xwayland. Назву і клас рэсурса акна X11 можна " | ||||
| "атрымаць з дапамогай каманды \"xprop WM_CLASS\". Значэнні могуць змяшчаць " | ||||
| "шаблоны \"*\" і \"?\". Значэнні, якія пачынаюцца з \"!\", азначаюць " | ||||
| "забарону, што мае перавагу перад дазволам і адклікае дастасаванні з " | ||||
| "прадвызначанага сістэмнага спіса. Апошні змяшчае наступныя дастасаванні: " | ||||
| "\"@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@\". Карыстальнікі могуць спыніць " | ||||
| "дзейнічаючы захоп з дапамогай клавіятурнага скароту, азначанага ключом " | ||||
| "\"restore-shortcuts\"." | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1848 | ||||
| #: src/backends/meta-input-settings.c:2325 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Пераключыць рэжым (група %d)" | ||||
| @@ -487,113 +526,116 @@ msgstr "Пераключыць рэжым (група %d)" | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1870 | ||||
| #: src/backends/meta-input-settings.c:2348 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Пераключыць манітор" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:1872 | ||||
| #: src/backends/meta-input-settings.c:2350 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Паказаць экранную даведку" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:783 | ||||
| #: src/backends/meta-monitor-manager.c:907 | ||||
| msgid "Built-in display" | ||||
| msgstr "Убудаваны дысплей" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:806 | ||||
| #: src/backends/meta-monitor-manager.c:930 | ||||
| msgid "Unknown" | ||||
| msgstr "Невядомы" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:808 | ||||
| #: src/backends/meta-monitor-manager.c:932 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Невядомы дысплей" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:816 | ||||
| #: src/backends/meta-monitor-manager.c:940 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:474 | ||||
| #: src/compositor/compositor.c:481 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| msgstr "" | ||||
| "Іншы кампазітны кіраўнік вокнаў ужо абслугоўвае экран %i дысплея \"%s\"." | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| #: src/core/bell.c:254 | ||||
| msgid "Bell event" | ||||
| msgstr "Падзея з сігналам" | ||||
|  | ||||
| #: src/core/main.c:191 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Выключыць злучэнне з кіраўніком сеансаў" | ||||
|  | ||||
| #: src/core/main.c:197 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Замяніць дзейнага кіраўніка вокнаў" | ||||
|  | ||||
| #: src/core/main.c:203 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Вызначыць ідэнтыфікатар для кіравання сеансам" | ||||
|  | ||||
| #: src/core/main.c:208 | ||||
| msgid "X Display to use" | ||||
| msgstr "Патрэбны X-дысплей" | ||||
|  | ||||
| #: src/core/main.c:214 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Ініцыяваць сеанс з файла" | ||||
|  | ||||
| #: src/core/main.c:220 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Сінхронна выконваць выклікі X-сістэмы" | ||||
|  | ||||
| #: src/core/main.c:227 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Запусціць у якасці кампазітара wayland" | ||||
|  | ||||
| #: src/core/main.c:233 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Запусціць у якасці ўложанага кампазітара" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run wayland compositor without starting Xwayland" | ||||
| msgstr "Запусціць наборшчык wayland без Xwayland" | ||||
|  | ||||
| #: src/core/main.c:247 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Запусціць у якасці паўнавартаснага сервера дысплея, я не як уложаны " | ||||
|  | ||||
| #: src/core/main.c:253 | ||||
| msgid "Run with X11 backend" | ||||
| msgstr "Запусціць з драйверам X11" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/delete.c:127 | ||||
| #: src/core/meta-close-dialog-default.c:148 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "\"%s\" не адказвае на запыты." | ||||
|  | ||||
| #: src/core/delete.c:129 | ||||
| #: src/core/meta-close-dialog-default.c:150 | ||||
| msgid "Application is not responding." | ||||
| msgstr "Праграма не адказвае на запыты." | ||||
|  | ||||
| #: src/core/delete.c:134 | ||||
| #: src/core/meta-close-dialog-default.c:155 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "" | ||||
| "Вы можаце альбо крыху пачакаць адказу, альбо змусіць праграму да выхаду." | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Змусіць да выхаду" | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Wait" | ||||
| msgstr "_Пачакаць" | ||||
|  | ||||
| #: src/core/display.c:608 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Не ўдалося адкрыць дысплей аконнай сістэмы X \"%s\"\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Выключыць злучэнне з кіраўніком сеансаў" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Замяніць дзейнага кіраўніка вокнаў" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Вызначыць ідэнтыфікатар для кіравання сеансам" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| msgid "X Display to use" | ||||
| msgstr "Патрэбны X-дысплей" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Ініцыяваць сеанс з файла" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Сінхронна выконваць выклікі X-сістэмы" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Запусціць у якасці кампазітара wayland" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Запусціць у якасці ўложанага кампазітара" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Запусціць у якасці паўнавартаснага сервера дысплея, я не як уложаны " | ||||
|  | ||||
| #: src/core/mutter.c:39 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -618,12 +660,23 @@ msgstr "Вывесці нумар версіі праграмы" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Патрэбны плугін Mutter" | ||||
|  | ||||
| #: src/core/prefs.c:1997 | ||||
| #: src/core/prefs.c:1915 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Прастора працы %d" | ||||
|  | ||||
| #: src/core/screen.c:580 | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "" | ||||
| "Праграма \"Mutter\" была скампіляваная без падтрымкі падрабязнага " | ||||
| "пратакаліравання\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:567 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Пераключыць рэжым: %d" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:666 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| @@ -632,23 +685,21 @@ msgstr "" | ||||
| "Дысплеі \"%s\" ужо мае аконнага кіраўніка. Каб замяніць яго новым, дадайце " | ||||
| "опцыю --replace." | ||||
|  | ||||
| #: src/core/screen.c:665 | ||||
| #: src/x11/meta-x11-display.c:1010 | ||||
| msgid "Failed to initialize GDK\n" | ||||
| msgstr "Не ўдалося ініцыяваць GDK\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1034 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Не ўдалося адкрыць дысплей аконнай сістэмы X \"%s\"\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1117 | ||||
| #, c-format | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "Экран %d на дысплеі \"%s\" хібны\n" | ||||
|  | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "" | ||||
| "Праграма \"Mutter\" была скампіляваная без падтрымкі падрабязнага " | ||||
| "пратакаліравання\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Пераключыць рэжым: %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #: src/x11/session.c:1819 | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| @@ -656,11 +707,26 @@ msgstr "" | ||||
| "Гэтыя вокны не падтрымліваюць функцыі захавання дзейнага ладу працы, і таму " | ||||
| "іх прыйдзецца запусціць уручную пасля наступнага ўваходу ў сістэму." | ||||
|  | ||||
| #: src/x11/window-props.c:559 | ||||
| #: src/x11/window-props.c:565 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (на %s)" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the left" | ||||
| #~ msgstr "Перамясціць акно ў прастору злева ад дзейнай" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the right" | ||||
| #~ msgstr "Перамясціць акно ў прастору справа ад дзейнай" | ||||
|  | ||||
| #~ msgid "Move to workspace left" | ||||
| #~ msgstr "Перамясціць на прастору працы злева" | ||||
|  | ||||
| #~ msgid "Move to workspace right" | ||||
| #~ msgstr "Перамясціць на прастору працы справа" | ||||
|  | ||||
| #~ msgid "Toggle shaded state" | ||||
| #~ msgstr "Перамяніць скручанасць акна ў загаловак" | ||||
|  | ||||
| #~ msgid "background texture could not be created from file" | ||||
| #~ msgstr "не ўдалося стварыць фонавую тэкстуру з файла" | ||||
|  | ||||
|   | ||||
							
								
								
									
										235
									
								
								po/ca.po
									
									
									
									
									
								
							
							
						
						
									
										235
									
								
								po/ca.po
									
									
									
									
									
								
							| @@ -5,24 +5,23 @@ | ||||
| # Jesús Moreno <jmmolas@wanadoo.es>, 2002. | ||||
| # Jordi Mallach <jordi@sindominio.net>, 2003, 2004, 2005, 2006, 2007, 2008. | ||||
| # David Planella <david.planella@gmail.com>, 2008, 2009, 2011, 2012. | ||||
| # Jordi Serratosa <jordis@softcatala.cat>, 2012. | ||||
| # Jordi Serratosa <jordis@softcatala.cat>, 2012, 2017. | ||||
| # Gil Forcada <gilforcada@guifi.net>, 2012, 2013, 2014, 2016. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: metacity 2.24\n" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2017-07-26 13:44+0000\n" | ||||
| "PO-Revision-Date: 2017-07-2614:45+0100\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n" | ||||
| "POT-Creation-Date: 2018-06-07 13:00+0000\n" | ||||
| "PO-Revision-Date: 2018-06-17 10:25+0200\n" | ||||
| "Last-Translator: Jordi Mas <jmas@softcatala.org>\n" | ||||
| "Language-Team: Catalan <tradgnome@softcatala.org>\n" | ||||
| "Language: ca\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bits\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=n != 1;\n" | ||||
| "X-Generator: Gtranslator 2.91.6\n" | ||||
| "X-Generator: Poedit 2.0.6\n" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| msgid "Navigation" | ||||
| @@ -49,134 +48,118 @@ msgid "Move window to last workspace" | ||||
| msgstr "Mou la finestra a l'últim espai de treball" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Mou la finestra un espai de treball a l'esquerra" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Mou la finestra un espai de treball a la dreta" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Mou la finestra un espai de treball amunt" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Mou la finestra un espai de treball avall" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Mou la finestra un monitor a l'esquerra" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Mou la finestra un monitor a la dreta" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Mou la finestra un monitor amunt" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Mou la finestra un monitor avall" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| #: data/50-mutter-navigation.xml:43 | ||||
| msgid "Switch applications" | ||||
| msgstr "Canvia d'aplicacions" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| #: data/50-mutter-navigation.xml:48 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Canvia a l'aplicació anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| #: data/50-mutter-navigation.xml:52 | ||||
| msgid "Switch windows" | ||||
| msgstr "Canvia de finestres" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| #: data/50-mutter-navigation.xml:57 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Canvia a la finestra anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| #: data/50-mutter-navigation.xml:61 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Canvia entre les finestres d'una aplicació" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| #: data/50-mutter-navigation.xml:66 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Canvia a la finestra anterior d'una aplicació" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| #: data/50-mutter-navigation.xml:70 | ||||
| msgid "Switch system controls" | ||||
| msgstr "Canvia els controls del sistema" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| #: data/50-mutter-navigation.xml:75 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Canvia al control del sistema anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| #: data/50-mutter-navigation.xml:79 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Canvia immediatament entre finestres" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| #: data/50-mutter-navigation.xml:84 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Canvia immediatament a la finestra anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| #: data/50-mutter-navigation.xml:88 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Canvia immediatament entre les finestres d'una aplicació" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| #: data/50-mutter-navigation.xml:93 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Canvia immediatament a la finestra anterior d'una aplicació" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| #: data/50-mutter-navigation.xml:97 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Canvia immediatament entre els controls del sistema" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| #: data/50-mutter-navigation.xml:102 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Canvia immediatament al control del sistema anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| #: data/50-mutter-navigation.xml:105 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Oculta totes les finestres normals" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Canvia a l'espai de treball 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Canvia a l'espai de treball 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Canvia a l'espai de treball 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Canvia a l'espai de treball 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Canvia a l'últim espai de treball" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Mou a l'espai de treball de l'esquerra" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Mou a l'espai de treball de la dreta" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Mou a l'espai de treball de sobre" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Mou a l'espai de treball de sota" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "Sistema" | ||||
|  | ||||
| @@ -188,6 +171,10 @@ msgstr "Mostra l'indicador d'execució d'aplicacions" | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Mostra la vista general d'activitats" | ||||
|  | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "Restaura les dreceres de teclat" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Finestres" | ||||
| @@ -213,56 +200,52 @@ msgid "Restore window" | ||||
| msgstr "Restaura la finestra" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Canvia l'estat d'ombrejat" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Tanca la finestra" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Hide window" | ||||
| msgstr "Oculta la finestra" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Move window" | ||||
| msgstr "Mou la finestra" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Resize window" | ||||
| msgstr "Redimensiona la finestra" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| #: data/50-mutter-windows.xml:27 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "" | ||||
| "Canvia la funció que fa que la finestra estigui en tots els espais de " | ||||
| "treball o només en un" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Alça la finestra si està coberta per una altra, o sinó baixa-la" | ||||
| msgstr "Alça la finestra si està coberta per una altra; altrament, baixa-la" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Alça la finestra per damunt de les altres" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Baixa la finestra sota les altres" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Maximitza la finestra verticalment" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Maximitza la finestra horitzontalment" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| #: data/50-mutter-windows.xml:41 | ||||
| msgid "View split on left" | ||||
| msgstr "Mostra la partició a l'esquerra" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| #: data/50-mutter-windows.xml:45 | ||||
| msgid "View split on right" | ||||
| msgstr "Mostra la partició a la dreta" | ||||
|  | ||||
| @@ -306,7 +289,7 @@ msgstr "" | ||||
| #: data/org.gnome.mutter.gschema.xml.in:30 | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "" | ||||
| "Habilita la tesselització a les vores en deixar anar les finestres a les " | ||||
| "Habilita la tessel·lització a les vores en deixar anar les finestres a les " | ||||
| "vores de la pantalla" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:31 | ||||
| @@ -421,29 +404,25 @@ msgid "" | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “monitor-config-manager” — use the new " | ||||
| "monitor configuration system, aimed to replace the old one. This enables a " | ||||
| "higher level configuration API to be used by configuration applications, as " | ||||
| "well as the ability to configure per logical monitor scale. • “scale-monitor-" | ||||
| "framebuffer” — makes mutter default to layout logical monitors in a logical " | ||||
| "pixel coordinate space, while scaling monitor framebuffers instead of window " | ||||
| "content, to manage HiDPI monitors. Does not require a restart. Also enabling " | ||||
| "“monitor-config-manager” is required for this feature to be enabled." | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:141 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Selecció de finestra entre les emergents d'una pestanya" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:146 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Cancel·lació de les finestres emergents a les pestanyes" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:161 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Canvia configuracions de monitor" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:166 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "Gira la configuració del monitor integrada" | ||||
|  | ||||
| @@ -495,10 +474,45 @@ msgstr "Canvia al terminal virtual 11" | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "Canvia al terminal virtual 12" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:54 | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Torna a habilitar les dreceres" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:64 | ||||
| msgid "Allow grabs with Xwayland" | ||||
| msgstr "Permetre la captura amb Xwayland" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:65 | ||||
| msgid "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:77 | ||||
| msgid "Xwayland applications allowed to issue keyboard grabs" | ||||
| msgstr "Les aplicacions Xwayland poden capturar el teclat" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:78 | ||||
| msgid "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
| msgstr "" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2118 | ||||
| #: src/backends/meta-input-settings.c:2325 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Mode de commutació (grup %d)" | ||||
| @@ -506,37 +520,37 @@ msgstr "Mode de commutació (grup %d)" | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2141 | ||||
| #: src/backends/meta-input-settings.c:2348 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Commuta el monitor" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:2143 | ||||
| #: src/backends/meta-input-settings.c:2350 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Mostra l'ajuda en pantalla" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:925 | ||||
| #: src/backends/meta-monitor-manager.c:903 | ||||
| msgid "Built-in display" | ||||
| msgstr "Pantalla integrada" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:948 | ||||
| #: src/backends/meta-monitor-manager.c:926 | ||||
| msgid "Unknown" | ||||
| msgstr "Desconeguda" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:950 | ||||
| #: src/backends/meta-monitor-manager.c:928 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Pantalla desconeguda" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:958 | ||||
| #: src/backends/meta-monitor-manager.c:936 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:476 | ||||
| #: src/compositor/compositor.c:481 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| @@ -554,31 +568,31 @@ msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "" | ||||
| "S'ha produït un error en obrir la pantalla del sistema de finestres X «%s»\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| #: src/core/main.c:190 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Inhabilita la connexió al gestor de sessions" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| #: src/core/main.c:196 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Reemplaça el gestor de finestres en execució" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| #: src/core/main.c:202 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Especifica l'ID de gestió de sessió" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| #: src/core/main.c:207 | ||||
| msgid "X Display to use" | ||||
| msgstr "Visualització X per usar" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| #: src/core/main.c:213 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Inicialitza la sessió des del fitxer desat" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| #: src/core/main.c:219 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Fes que les crides a l'X siguin síncrones" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| #: src/core/main.c:226 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Funciona com a compositor de Wayland" | ||||
|  | ||||
| @@ -587,14 +601,18 @@ msgstr "Funciona com a compositor de Wayland" | ||||
| # | ||||
| # Camins: | ||||
| # ../src/core/main.c:223 | ||||
| #: src/core/main.c:231 | ||||
| #: src/core/main.c:232 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Funciona com a compositor imbricat" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| #: src/core/main.c:240 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Funciona com a servidor de pantalla completa, en comptes d'imbricat" | ||||
|  | ||||
| #: src/core/main.c:246 | ||||
| msgid "Run with X11 backend" | ||||
| msgstr "Executa amb un rerefons X11" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:147 | ||||
| #, c-format | ||||
| @@ -650,7 +668,7 @@ msgstr "Connector del Mutter a utilitzar" | ||||
| msgid "Workspace %d" | ||||
| msgstr "Espai de treball %d" | ||||
|  | ||||
| #: src/core/screen.c:580 | ||||
| #: src/core/screen.c:583 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| @@ -659,7 +677,7 @@ msgstr "" | ||||
| "La pantalla «%s» ja té un gestor de finestres; proveu l'opció --replace per " | ||||
| "reemplaçar el gestor de finestres actual." | ||||
|  | ||||
| #: src/core/screen.c:665 | ||||
| #: src/core/screen.c:668 | ||||
| #, c-format | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "El monitor %d en la pantalla '%s' no és vàlida\n" | ||||
| @@ -668,12 +686,12 @@ msgstr "El monitor %d en la pantalla '%s' no és vàlida\n" | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter es va compilar sense compatibilitat per al mode detallat\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:567 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Mode de commutació: mode %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #: src/x11/session.c:1818 | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| @@ -686,6 +704,21 @@ msgstr "" | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (a %s)" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the left" | ||||
| #~ msgstr "Mou la finestra un espai de treball a l'esquerra" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the right" | ||||
| #~ msgstr "Mou la finestra un espai de treball a la dreta" | ||||
|  | ||||
| #~ msgid "Move to workspace left" | ||||
| #~ msgstr "Mou a l'espai de treball de l'esquerra" | ||||
|  | ||||
| #~ msgid "Move to workspace right" | ||||
| #~ msgstr "Mou a l'espai de treball de la dreta" | ||||
|  | ||||
| #~ msgid "Toggle shaded state" | ||||
| #~ msgstr "Canvia l'estat d'ombrejat" | ||||
|  | ||||
| #~ msgid "Failed to scan themes directory: %s\n" | ||||
| #~ msgstr "No s'ha pogut analitzar el directori de temes: %s\n" | ||||
|  | ||||
|   | ||||
							
								
								
									
										1663
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
							
						
						
									
										1663
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										298
									
								
								po/cs.po
									
									
									
									
									
								
							
							
						
						
									
										298
									
								
								po/cs.po
									
									
									
									
									
								
							| @@ -6,17 +6,16 @@ | ||||
| # Petr Tomeš <ptomes@gmail.com>, 2006. | ||||
| # Jakub Friedl <jfriedl@suse.cz>, 2006, 2007. | ||||
| # Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. | ||||
| # Marek Černocký <marek@manet.cz>, 2012, 2013, 2014, 2016, 2017. | ||||
| # Marek Černocký <marek@manet.cz>, 2012, 2013, 2014, 2016, 2017, 2018. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2017-08-02 10:05+0000\n" | ||||
| "PO-Revision-Date: 2017-08-03 08:15+0200\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n" | ||||
| "POT-Creation-Date: 2018-07-07 09:58+0000\n" | ||||
| "PO-Revision-Date: 2018-08-29 07:28+0200\n" | ||||
| "Last-Translator: Marek Černocký <marek@manet.cz>\n" | ||||
| "Language-Team: čeština <gnome-cs-list@gnome.org>>\n" | ||||
| "Language-Team: čeština <gnome-cs-list@gnome.org>\n" | ||||
| "Language: cs\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| @@ -50,134 +49,118 @@ msgid "Move window to last workspace" | ||||
| msgstr "Přesunout okno na poslední pracovní plochu" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Přesunout okno o jednu pracovní plochu doleva" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Přesunout okno o jednu pracovní plochu doprava" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Přesunout okno o jednu pracovní plochu nahoru" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Přesunout okno o jednu pracovní plochu dolů" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Přesunout okno o jeden monitor doleva" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Přesunout okno o jeden monitor doprava" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Přesunout okno o jeden monitor nahoru" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Přesunout okno o jeden monitor dolů" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| #: data/50-mutter-navigation.xml:43 | ||||
| msgid "Switch applications" | ||||
| msgstr "Přepnout do jiné aplikace" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| #: data/50-mutter-navigation.xml:48 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Přepnout do předchozí aplikaci" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| #: data/50-mutter-navigation.xml:52 | ||||
| msgid "Switch windows" | ||||
| msgstr "Přepnout do jiného okna" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| #: data/50-mutter-navigation.xml:57 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Přepnout do minulého okna" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| #: data/50-mutter-navigation.xml:61 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Přepnout do jiného okna aplikace" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| #: data/50-mutter-navigation.xml:66 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Přepnout do předchozího okna aplikace" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| #: data/50-mutter-navigation.xml:70 | ||||
| msgid "Switch system controls" | ||||
| msgstr "Přepnout na systémový ovládací prvek" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| #: data/50-mutter-navigation.xml:75 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Přepnout na minulý systémový ovládací prvek" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| #: data/50-mutter-navigation.xml:79 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Přepnout do minulého okna" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| #: data/50-mutter-navigation.xml:84 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Přepnout přímo na předchozí okno" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| #: data/50-mutter-navigation.xml:88 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Přepnout do jiného okna aplikace" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| #: data/50-mutter-navigation.xml:93 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Přepnout do předchozího okna aplikace" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| #: data/50-mutter-navigation.xml:97 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Přepnout na minulý systémový ovládací prvek" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| #: data/50-mutter-navigation.xml:102 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Přepnout přímo na předchozí systémové ovládací prvky" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| #: data/50-mutter-navigation.xml:105 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Skrýt všechna běžná okna" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Přepnout na plochu 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Přepnout na plochu 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Přepnout na plochu 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Přepnout na plochu 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Přepnout na poslední plochu" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Přesunout na plochu vlevo" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Přesunout na plochu vpravo" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Přesunout na plochu nad" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Přesunout na plochu pod" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "Systém" | ||||
|  | ||||
| @@ -189,6 +172,10 @@ msgstr "Zobrazit řádek ke spuštění příkazu" | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Zobrazit přehled činností" | ||||
|  | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "Obnovit klávesové zkratky" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Okna" | ||||
| @@ -214,54 +201,50 @@ msgid "Restore window" | ||||
| msgstr "Obnovit velikost okna" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Přepnout stav svinutí" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Zavřít okno" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Hide window" | ||||
| msgstr "Skrýt okno" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Move window" | ||||
| msgstr "Přesunout okno" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Resize window" | ||||
| msgstr "Změnit velikost okna" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| #: data/50-mutter-windows.xml:27 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Přepnout okno na všechny/jednu pracovní plochu" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Když je okno zakryté vynést jej do popředí, jinak odsunout do pozadí" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Vynést okno do popředí nad ostatní okna" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Odsunout okno do pozadí za ostatní okna" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Maximalizovat okno svisle" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Maximalizovat okno vodorovně" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| #: data/50-mutter-windows.xml:41 | ||||
| msgid "View split on left" | ||||
| msgstr "Rozdělit okno přes levou půlku obrazovky" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| #: data/50-mutter-windows.xml:45 | ||||
| msgid "View split on right" | ||||
| msgstr "Rozdělit okno přes pravou půlku obrazovky" | ||||
|  | ||||
| @@ -410,43 +393,35 @@ msgid "" | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “monitor-config-manager” — use the new " | ||||
| "monitor configuration system, aimed to replace the old one. This enables a " | ||||
| "higher level configuration API to be used by configuration applications, as " | ||||
| "well as the ability to configure per logical monitor scale. • “scale-monitor-" | ||||
| "framebuffer” — makes mutter default to layout logical monitors in a logical " | ||||
| "pixel coordinate space, while scaling monitor framebuffers instead of window " | ||||
| "content, to manage HiDPI monitors. Does not require a restart. Also enabling " | ||||
| "“monitor-config-manager” is required for this feature to be enabled." | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart." | ||||
| msgstr "" | ||||
| "Chcete-li povolit experimentální funkce, přidejte klíčové slovo funkce do " | ||||
| "seznamu. Zda funkce vyžaduje restartování kompozitoru, závisí na dané " | ||||
| "funkci. Ne u každé experimentální funkce je vyžadováno, aby byla stále " | ||||
| "dostupná nebo konfigurovatelná. Neočekávejte, že by bylo v tomto nastavení " | ||||
| "přidáno něco, co by do budoucna přineslo vylepšení. V současné době jsou " | ||||
| "možná tato klíčová slova: • „monitor-config-manager“ – použijte se nový " | ||||
| "systém nastavení monitoru, jehož cílem je nahradit starý. Poskytuje " | ||||
| "aplikacím pro nastavování API vyšší úrovně, stejně jako možnost nastavení " | ||||
| "podle logického škálování monitorů. • „scale-monitor-framebuffer“ – zajistí, " | ||||
| "aby byl mutter výchozí pro logické uspořádání monitorů v logickém " | ||||
| "souřadnicovém prostoru pixelů, zatímco škáluje přímo v grafické vyrovnávací " | ||||
| "paměti, namísto v obsahu oken, aby se postaral o správu montorů s HiDPI. " | ||||
| "Nevyžaduje restart. Aby tato funkce fungovala, je zapotřebí povolit rovněž " | ||||
| "„monitor-config-manager“." | ||||
| "možná tato klíčová slova: • „scale-monitor-framebuffer“ – zajistí, aby byl " | ||||
| "mutter výchozí pro logické uspořádání monitorů v logickém souřadnicovém " | ||||
| "prostoru pixelů, zatímco škáluje přímo v grafické vyrovnávací paměti, " | ||||
| "namísto v obsahu oken, aby se postaral o správu montorů s HiDPI. Nevyžaduje " | ||||
| "restart." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:141 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Vybrat okno z překryvné nabídky tabulátoru" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:146 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Zrušit překryvné okno tabulátoru" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:161 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Přepnout nastavení monitoru" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:166 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "Postupně mění vestavěná nastavení monitoru" | ||||
|  | ||||
| @@ -502,10 +477,57 @@ msgstr "Přepnout na VT 12" | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Znovu povolit klávesové zkratky" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:64 | ||||
| msgid "Allow grabs with Xwayland" | ||||
| msgstr "Povolit zachytávání pomocí Xwaylandu" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:65 | ||||
| msgid "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
| msgstr "" | ||||
| "Povolit, aby bylo bráno v úvahu zachytávání kláves, o které se stará " | ||||
| "aplikace X11 běžící v Xwaylandu. Aby bylo pod Waylandem zachytávání bráno v " | ||||
| "úvahu, musí klient navíc buď poslat specifickou zprávu X11 ClientMessage do " | ||||
| "kořenového okna, nebo být mezi aplikacemi na bílé listině v klíči „xwayland-" | ||||
| "grab-access-rules“." | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:77 | ||||
| msgid "Xwayland applications allowed to issue keyboard grabs" | ||||
| msgstr "" | ||||
| "Aplikace pod Xwaylandem mají povoleno se starat o zachytávání klávesnice" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:78 | ||||
| msgid "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
| msgstr "" | ||||
| "Seznam názvů prostředků nebo tříd prostředků oken X11, které buď mají nebo " | ||||
| "nemají povolené se starat o zachytávání klávesnice X11 pod Xwaylandem. Název " | ||||
| "nebo třída prostředku daného okna X11 se dá zjistit pomocí příkazu „xprop " | ||||
| "WM_CLASS“. V názvech jsou podporované divoké znaky „*“ a „?“. Hodnoty " | ||||
| "začínající „!“ jsou na černé listině, což má přednost před bílou listinou, " | ||||
| "aby se daly aplikace odvolat z výchozího systémového seznamu. Do výchozího " | ||||
| "systémového seznamu patří následující aplikace: " | ||||
| "„@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@“. Uživatel může přerušit existující " | ||||
| "zachytávání pomocí speciální klávesové zkratky definované klíčem „restore-" | ||||
| "shortcuts“." | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2118 | ||||
| #: src/backends/meta-input-settings.c:2325 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Přepínač režimu (skupina %d)" | ||||
| @@ -513,98 +535,101 @@ msgstr "Přepínač režimu (skupina %d)" | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2141 | ||||
| #: src/backends/meta-input-settings.c:2348 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Přepnout monitor" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:2143 | ||||
| #: src/backends/meta-input-settings.c:2350 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Zobrazit nápovědu na obrazovce" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:927 | ||||
| #: src/backends/meta-monitor-manager.c:907 | ||||
| msgid "Built-in display" | ||||
| msgstr "Vestavěný displej" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:950 | ||||
| #: src/backends/meta-monitor-manager.c:930 | ||||
| msgid "Unknown" | ||||
| msgstr "Neznámý" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:952 | ||||
| #: src/backends/meta-monitor-manager.c:932 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Neznámý displej" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:960 | ||||
| #: src/backends/meta-monitor-manager.c:940 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:476 | ||||
| #: src/compositor/compositor.c:481 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| msgstr "Jiný kompozitní správce již běží na obrazovce %i displeje „%s“." | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| #: src/core/bell.c:254 | ||||
| msgid "Bell event" | ||||
| msgstr "Událost zvonku" | ||||
|  | ||||
| #: src/core/display.c:608 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Nelze otevřít displej X Window System „%s“\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| #: src/core/main.c:191 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Zakáže připojení ke správci sezení" | ||||
| msgstr "Zakázat připojení ke správci sezení" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| #: src/core/main.c:197 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Nahradí běžícího správce oken" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| #: src/core/main.c:203 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Určení ID správy sezení" | ||||
| msgstr "Určit ID správy sezení" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| #: src/core/main.c:208 | ||||
| msgid "X Display to use" | ||||
| msgstr "Displej X, který použije" | ||||
| msgstr "Displej X, který se má použít" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| #: src/core/main.c:214 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Spustí sezení z uloženého souboru" | ||||
| msgstr "Spustit sezení z uloženého souboru" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| #: src/core/main.c:220 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Provede volání X synchronně" | ||||
| msgstr "Provádět volání X synchronně" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| #: src/core/main.c:227 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Spustit jako kompozitor protokolu Wayland" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| #: src/core/main.c:233 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Spustit jako podkladový kompozitor" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run wayland compositor without starting Xwayland" | ||||
| msgstr "Spustit kompozitor wayland bez spuštění Xwayland" | ||||
|  | ||||
| #: src/core/main.c:247 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Spustit jako plnohodnotný server displeje, nikoliv vnořeně" | ||||
|  | ||||
| #: src/core/main.c:253 | ||||
| msgid "Run with X11 backend" | ||||
| msgstr "Spustit se serverem X11" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:147 | ||||
| #: src/core/meta-close-dialog-default.c:148 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "„%s“ nereaguje." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:149 | ||||
| #: src/core/meta-close-dialog-default.c:150 | ||||
| msgid "Application is not responding." | ||||
| msgstr "Aplikace nereaguje." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:154 | ||||
| #: src/core/meta-close-dialog-default.c:155 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| @@ -612,11 +637,11 @@ msgstr "" | ||||
| "Je možné chvíli počkat, aby aplikace mohla pokračovat, nebo si vynutit úplné " | ||||
| "ukončení aplikace." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Vynutit ukončení" | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Wait" | ||||
| msgstr "_Počkat" | ||||
|  | ||||
| @@ -644,12 +669,21 @@ msgstr "Vypsat verzi" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Zásuvný modul Mutter, který se má použít" | ||||
|  | ||||
| #: src/core/prefs.c:1997 | ||||
| #: src/core/prefs.c:1915 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Plocha %d" | ||||
|  | ||||
| #: src/core/screen.c:580 | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter bylo přeloženo bez podpory podrobného režimu\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:567 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Přepínač režimu: režim %d" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:666 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| @@ -658,21 +692,21 @@ msgstr "" | ||||
| "Displej „%s“ již správce oken má; zkuste prosím nahradit aktuálního správce " | ||||
| "oken pomocí přepínače --replace." | ||||
|  | ||||
| #: src/core/screen.c:665 | ||||
| #: src/x11/meta-x11-display.c:1010 | ||||
| msgid "Failed to initialize GDK\n" | ||||
| msgstr "Selhala inicializace GDK\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1034 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Nelze otevřít displej X Window System „%s“\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1117 | ||||
| #, c-format | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "Obrazovka %d na displeji „%s“ je neplatná\n" | ||||
|  | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter bylo přeloženo bez podpory podrobného režimu\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Přepínač režimu: režim %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #: src/x11/session.c:1819 | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| @@ -680,7 +714,7 @@ msgstr "" | ||||
| "Tato okna nepodporují „uložení aktuálního nastavení“ a po svém příštím " | ||||
| "přihlášení je budete muset spustit ručně." | ||||
|  | ||||
| #: src/x11/window-props.c:559 | ||||
| #: src/x11/window-props.c:565 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (na %s)" | ||||
|   | ||||
							
								
								
									
										351
									
								
								po/de.po
									
									
									
									
									
								
							
							
						
						
									
										351
									
								
								po/de.po
									
									
									
									
									
								
							| @@ -2,19 +2,19 @@ | ||||
| # Copyright (C) 2002-2004 Free Software Foundation, Inc. | ||||
| # Matthias Warkus <mawarkus@gnome.org>, 2002. | ||||
| # Christian Neumair <chris@gnome-de.org>, 2002-2004. | ||||
| # Hendrik Richter <hendrikr@gnome.org>, 2005, 2006, 2007, 2008. | ||||
| # Mario Blättermann <mario.blaettermann@gmail.com>, 2010-2013, 2016-2017. | ||||
| # Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2011, 2012. | ||||
| # Wolfgang Stöggl <c72578@yahoo.de> 2011. | ||||
| # Hendrik Richter <hendrikr@gnome.org>, 2005-2008. | ||||
| # Mario Blättermann <mario.blaettermann@gmail.com>, 2010-2013, 2016-2018. | ||||
| # Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2011-2012. | ||||
| # Wolfgang Stöggl <c72578@yahoo.de> 2011, 2017. | ||||
| # Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>, 2012. | ||||
| # Tim Sabsch <timæsabsch.com>, 2018. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter master\n" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2017-05-10 19:07+0000\n" | ||||
| "PO-Revision-Date: 2017-05-12 17:35+0200\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n" | ||||
| "POT-Creation-Date: 2018-07-07 09:58+0000\n" | ||||
| "PO-Revision-Date: 2018-08-04 19:59+0200\n" | ||||
| "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n" | ||||
| "Language-Team: Deutsch <gnome-de@gnome.org>\n" | ||||
| "Language: de\n" | ||||
| @@ -22,7 +22,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 2.0.1\n" | ||||
| "X-Generator: Poedit 2.0.9\n" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| msgid "Navigation" | ||||
| @@ -49,134 +49,118 @@ msgid "Move window to last workspace" | ||||
| msgstr "Fenster auf letzte Arbeitsfläche verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Fenster eine Arbeitsfläche nach links verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Fenster eine Arbeitsfläche nach rechts verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Fenster eine Arbeitsfläche nach oben verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Fenster eine Arbeitsfläche nach unten verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Fenster einen Bildschirm nach links verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Fenster einen Bildschirm nach rechts verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Fenster einen Bildschirm nach oben verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Fenster einen Bildschirm nach unten verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| #: data/50-mutter-navigation.xml:43 | ||||
| msgid "Switch applications" | ||||
| msgstr "Anwendungen wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| #: data/50-mutter-navigation.xml:48 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Zur vorherigen Anwendung wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| #: data/50-mutter-navigation.xml:52 | ||||
| msgid "Switch windows" | ||||
| msgstr "Fenster wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| #: data/50-mutter-navigation.xml:57 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Zum vorherigen Fenster wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| #: data/50-mutter-navigation.xml:61 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Zwischen den Fenstern einer Anwendung wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| #: data/50-mutter-navigation.xml:66 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Zum vorherigen Fenster einer Anwendung wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| #: data/50-mutter-navigation.xml:70 | ||||
| msgid "Switch system controls" | ||||
| msgstr "Systemsteuerungen umschalten" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| #: data/50-mutter-navigation.xml:75 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Zur vorherigen Systemsteuerungen wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| #: data/50-mutter-navigation.xml:79 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Fenster sofort wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| #: data/50-mutter-navigation.xml:84 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Direkt zum vorherigen Fenster wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| #: data/50-mutter-navigation.xml:88 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Sofort zwischen den Fenstern einer Anwendung wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| #: data/50-mutter-navigation.xml:93 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Direkt zum vorherigen Fenster einer Anwendung wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| #: data/50-mutter-navigation.xml:97 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Systemsteuerungen sofort umschalten" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| #: data/50-mutter-navigation.xml:102 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Direkt zur vorherigen Systemsteuerungen wechselen" | ||||
| msgstr "Direkt zur vorherigen Systemsteuerungen wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| #: data/50-mutter-navigation.xml:105 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Alle normalen Fenster verbergen" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Zur Arbeitsfläche 1 wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Zur Arbeitsfläche 2 wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Zur Arbeitsfläche 3 wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Zur Arbeitsfläche 4 wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Zur letzten Arbeitsfläche wechseln" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Auf Arbeitsfläche links verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Auf Arbeitsfläche rechts verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Auf Arbeitsfläche darüber verschieben" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Auf Arbeitsfläche darunter verschieben" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "System" | ||||
|  | ||||
| @@ -188,6 +172,10 @@ msgstr "Den »Befehl ausführen«-Dialog anzeigen" | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Aktivitäten-Übersicht anzeigen" | ||||
|  | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "Die Tastenkombinationen wiederherstellen" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Fenster" | ||||
| @@ -213,55 +201,51 @@ msgid "Restore window" | ||||
| msgstr "Fenstergröße wiederherstellen" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Fenster ein-/ausrollen" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Fenster schließen" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Hide window" | ||||
| msgstr "Fenster verbergen" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Move window" | ||||
| msgstr "Fenster verschieben" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Resize window" | ||||
| msgstr "Fenstergröße ändern" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| #: data/50-mutter-windows.xml:27 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "" | ||||
| "Festlegen, ob das Fenster auf allen oder nur einer Arbeitsfläche sichtbar ist" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Fenster anheben, falls es verdeckt ist, andernfalls absenken" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Fenster vor die anderen Fenster anheben" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Fenster hinter die anderen Fenster absenken" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Fenster vertikal maximieren" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Fenster horizontal maximieren" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| #: data/50-mutter-windows.xml:41 | ||||
| msgid "View split on left" | ||||
| msgstr "Ansicht links teilen" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| #: data/50-mutter-windows.xml:45 | ||||
| msgid "View split on right" | ||||
| msgstr "Ansicht rechts teilen" | ||||
|  | ||||
| @@ -319,7 +303,7 @@ msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:40 | ||||
| msgid "Workspaces are managed dynamically" | ||||
| msgstr "Arbeitsflächen sollen dynamisch verwaltet werden " | ||||
| msgstr "Arbeitsflächen sollen dynamisch verwaltet werden" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:41 | ||||
| msgid "" | ||||
| @@ -405,14 +389,13 @@ msgid "" | ||||
| "screen of the monitor." | ||||
| msgstr "" | ||||
| "Falls wahr, so werden neue Fenster immer in der Mitte des aktiven " | ||||
| "Bildschirms platziert" | ||||
| "Bildschirms platziert." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:107 | ||||
| msgid "Enable experimental features" | ||||
| msgstr "Experimentelle Funktionsmerkmale aktivieren" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:108 | ||||
| #, fuzzy | ||||
| msgid "" | ||||
| "To enable experimental features, add the feature keyword to the list. " | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| @@ -425,10 +408,14 @@ msgid "" | ||||
| msgstr "" | ||||
| "Um experimentelle Funktionsmerkmale zu aktivieren, fügen Sie das " | ||||
| "entsprechende Schlüsselwort zur Liste hinzu. Möglicherweise muss der " | ||||
| "Compositor neu gestartet werden, um es zu aktivieren. Für diese " | ||||
| "experimentellen Funktionsmerkmale gilt, dass sie nicht unbedingt dauerhaft " | ||||
| "verfügbar sein werden, oder Einstellungen möglich sind. Derzeit mögliche " | ||||
| "Schlüsselwörter: • “scale-monitor-framebuffer” — " | ||||
| "Compositor neu gestartet werden, um es zu aktivieren, dies ist vom " | ||||
| "Funktionsmerkmal abhängig. Für diese experimentellen Funktionsmerkmale gilt, " | ||||
| "dass sie nicht unbedingt dauerhaft verfügbar sein werden, oder Einstellungen " | ||||
| "möglich sind. Derzeit mögliche Schlüsselwörter: • »scale-monitor-" | ||||
| "framebuffer« – weist Mutter an, in der Voreinstellung logische Bildschirme " | ||||
| "in einem logischen Pixel-Koordinatensystem anzuordnen, wobei die Bildschirm-" | ||||
| "Framebuffer anstelle der Fensterinhalte skaliert werden, um HiDPI-" | ||||
| "Bildschirme besser versorgen zu können. Dafür ist kein Neustart erforderlich." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:141 | ||||
| msgid "Select window from tab popup" | ||||
| @@ -438,6 +425,15 @@ msgstr "Fenster aus Tab-Anzeige auswählen" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Tab-Anzeige abbrechen" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Bildschirmkonfigurationen wechseln" | ||||
|  | ||||
| # Ich denke nicht, dass »rotate« hier die Bildschirmdrehung meint, sondern eher eine Liste aus Konfigurationen rotiert (d.h. umgewälzt) wird. | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "Wechselt die Konfiguration des eingebauten Bildschirms" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:6 | ||||
| msgid "Switch to VT 1" | ||||
| msgstr "Zum virtuellen Terminal 1 wechseln" | ||||
| @@ -486,10 +482,63 @@ msgstr "Zum virtuellen Terminal 11 wechseln" | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "Zum virtuellen Terminal 12 wechseln" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:54 | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Tastenkombinationen erneut aktivieren" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:64 | ||||
| msgid "Allow grabs with Xwayland" | ||||
| msgstr "Tastatur-Kontrollübernahmen in Xwayland erlauben" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:65 | ||||
| msgid "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
| msgstr "" | ||||
| "Erlauben, dass in Xwayland laufende X11-Anwendungen Kontrolle über die " | ||||
| "Tastatur übernehmen dürfen. Damit eine X11-Kontrollübernahme unter Wayland " | ||||
| "durchgeführt werden kann, muss der Client auch entweder eine spezifische X11-" | ||||
| "ClientMessage an das Root-Fenster senden oder in den als »whitelisted« im " | ||||
| "Schlüssel »xwayland-grab-access-rules« aufgelisteten Anwendungen enthalten " | ||||
| "sein." | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:77 | ||||
| msgid "Xwayland applications allowed to issue keyboard grabs" | ||||
| msgstr "Xwayland-Anwendungen mit Erlaubnis zur Kontrollübernahme der Tastatur" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:78 | ||||
| msgid "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
| msgstr "" | ||||
| "Listet die Ressourcennamen oder -klassen von X11-Fenstern auf, die unter " | ||||
| "Xwayland X11-Tastatur-Kontrollübernahmen durchführen dürfen. Ressourcenname " | ||||
| "oder -klasse eines bestimmten X11-Fensters kann mit dem Befehl »xprop " | ||||
| "WM_CLASS« ermittelt werden. Dabei werden »*« als Platzhalter und »?« als " | ||||
| "Joker in den Wertangaben unterstützt. Mit »!« beginnende Werte gelten als " | ||||
| "»blacklisted« und werden gegenüber den als »whitelisted« markierten Werten " | ||||
| "bevorzugt, um in der Standardliste des Systems aufgeführte Anwendungen außer " | ||||
| "Kraft zu setzen. Die Standardliste des Systems enthält die folgenden " | ||||
| "Anwendungen: »@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@« Benutzer können eine " | ||||
| "existierende Kontrollübernahme unterbrechen, indem sie das spezifische " | ||||
| "Tastenkürzel verwenden, wie es im Schlüssel »restore-shortcuts« angegeben " | ||||
| "ist." | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1848 | ||||
| #: src/backends/meta-input-settings.c:2325 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Moduswechsel (Gruppe %d)" | ||||
| @@ -497,37 +546,37 @@ msgstr "Moduswechsel (Gruppe %d)" | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1870 | ||||
| #: src/backends/meta-input-settings.c:2348 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Bildschirm wechseln" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:1872 | ||||
| #: src/backends/meta-input-settings.c:2350 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Bildschirmhilfe anzeigen" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:783 | ||||
| #: src/backends/meta-monitor-manager.c:907 | ||||
| msgid "Built-in display" | ||||
| msgstr "Eingebaute Anzeige" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:806 | ||||
| #: src/backends/meta-monitor-manager.c:930 | ||||
| msgid "Unknown" | ||||
| msgstr "Unbekannt" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:808 | ||||
| #: src/backends/meta-monitor-manager.c:932 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Unbekannte Anzeige" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:816 | ||||
| #: src/backends/meta-monitor-manager.c:940 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:474 | ||||
| #: src/compositor/compositor.c:481 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| @@ -535,21 +584,65 @@ msgstr "" | ||||
| "Ein weiterer Compositing-Verwalter läuft bereits auf Bildschirm %i der " | ||||
| "Anzeige »%s«." | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| #: src/core/bell.c:254 | ||||
| msgid "Bell event" | ||||
| msgstr "Klangereignis" | ||||
|  | ||||
| #: src/core/main.c:191 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Verbindung zur Sitzungsverwaltung deaktivieren" | ||||
|  | ||||
| #: src/core/main.c:197 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Den aktuellen Fensterverwalter ersetzen" | ||||
|  | ||||
| #: src/core/main.c:203 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Kennung der Sitzungsverwaltung angeben" | ||||
|  | ||||
| #: src/core/main.c:208 | ||||
| msgid "X Display to use" | ||||
| msgstr "Zu verwendende X-Anzeige" | ||||
|  | ||||
| #: src/core/main.c:214 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Sitzung anhand gespeicherter Datei starten" | ||||
|  | ||||
| #: src/core/main.c:220 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "X-Aufrufe abgleichen" | ||||
|  | ||||
| #: src/core/main.c:227 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Als Wayland-Compositor ausführen" | ||||
|  | ||||
| #: src/core/main.c:233 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Als eingebetteten Compositor ausführen" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run wayland compositor without starting Xwayland" | ||||
| msgstr "Wayland-Compositor ausführen, ohne Xwayland zu starten" | ||||
|  | ||||
| #: src/core/main.c:247 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Als vollwertigen Display-Server verwenden (nicht eingebettet)" | ||||
|  | ||||
| #: src/core/main.c:253 | ||||
| msgid "Run with X11 backend" | ||||
| msgstr "Mit X11-Backend ausführen" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/delete.c:127 | ||||
| #: src/core/meta-close-dialog-default.c:148 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "»%s« antwortet nicht." | ||||
|  | ||||
| #: src/core/delete.c:129 | ||||
| #: src/core/meta-close-dialog-default.c:150 | ||||
| msgid "Application is not responding." | ||||
| msgstr "Die Anwendung antwortet nicht." | ||||
|  | ||||
| #: src/core/delete.c:134 | ||||
| #: src/core/meta-close-dialog-default.c:155 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| @@ -557,55 +650,14 @@ msgstr "" | ||||
| "Sie können der Anwendung noch etwas Zeit geben oder ein sofortiges Beenden " | ||||
| "erzwingen." | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Beenden erzwingen" | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Wait" | ||||
| msgstr "_Warten" | ||||
|  | ||||
| #: src/core/display.c:608 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "X-Window-Systemanzeige »%s« konnte nicht geöffnet werden\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Verbindung zur Sitzungsverwaltung deaktivieren" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Den aktuellen Fensterverwalter ersetzen" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Kennung der Sitzungsverwaltung angeben" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| msgid "X Display to use" | ||||
| msgstr "Zu verwendende X-Anzeige" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Sitzung anhand gespeicherter Datei starten" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "X-Aufrufe abgleichen" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Als Wayland-Compositor ausführen" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Als eingebetteten Compositor ausführen" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Als vollwertigen Display-Server verwenden (nicht eingebettet)" | ||||
|  | ||||
| # CHECK | ||||
| # c-format | ||||
| #: src/core/mutter.c:39 | ||||
| @@ -632,12 +684,21 @@ msgstr "Version ausgeben" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Zu benutzendes Mutter-Plugin" | ||||
|  | ||||
| #: src/core/prefs.c:1997 | ||||
| #: src/core/prefs.c:1915 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Arbeitsfläche %d" | ||||
|  | ||||
| #: src/core/screen.c:580 | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter wurde ohne Unterstützung für den redseligen Modus kompiliert\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:567 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Moduswechsel: Modus %d" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:666 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| @@ -646,21 +707,21 @@ msgstr "" | ||||
| "Bildschirm »%s« hat bereits einen Fensterverwalter. Versuchen Sie die Option " | ||||
| "»--replace«, um den aktuellen Fensterverwalter zu ersetzen." | ||||
|  | ||||
| #: src/core/screen.c:665 | ||||
| #: src/x11/meta-x11-display.c:1010 | ||||
| msgid "Failed to initialize GDK\n" | ||||
| msgstr "GDK konnte nicht initialisiert werden\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1034 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "X-Window-Systemanzeige »%s« konnte nicht geöffnet werden\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1117 | ||||
| #, c-format | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "Bildschirm %d auf Anzeige »%s« ist ungültig\n" | ||||
|  | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter wurde ohne Unterstützung für den redseligen Modus kompiliert\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Moduswechsel: Modus %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #: src/x11/session.c:1819 | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| @@ -668,7 +729,7 @@ msgstr "" | ||||
| "Diese Fenster unterstützen das Speichern der aktuellen Einstellungen nicht " | ||||
| "und müssen bei der nächsten Anmeldung manuell neu gestartet werden." | ||||
|  | ||||
| #: src/x11/window-props.c:559 | ||||
| #: src/x11/window-props.c:565 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (auf %s)" | ||||
|   | ||||
							
								
								
									
										477
									
								
								po/en_GB.po
									
									
									
									
									
								
							
							
						
						
									
										477
									
								
								po/en_GB.po
									
									
									
									
									
								
							| @@ -5,23 +5,22 @@ | ||||
| # Gareth Owen <gowen72@yahoo.com>, 2004. | ||||
| # Philip Withnall <philip@tecnocode.co.uk>, 2010. | ||||
| # Chris Leonard <cjlhomeaddress@gmail.com>, 2012. | ||||
| # Bruce Cowan <bruce@bcowan.me.uk>, 2011, 2012, 2013. | ||||
| # Bruce Cowan <bruce@bcowan.me.uk>, 2011, 2012, 2013, 2018. | ||||
| # | ||||
| 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: 2016-09-07 09:27+0000\n" | ||||
| "PO-Revision-Date: 2016-09-19 12:10+0200\n" | ||||
| "Last-Translator: David King <amigadave@amigadave.com>\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n" | ||||
| "POT-Creation-Date: 2018-07-07 09:58+0000\n" | ||||
| "PO-Revision-Date: 2018-08-19 17:43+0100\n" | ||||
| "Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n" | ||||
| "Language-Team: British English <en@li.org>\n" | ||||
| "Language: en_GB\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "X-Generator: Gtranslator 2.91.6\n" | ||||
| "X-Generator: Poedit 2.0.7\n" | ||||
| "X-Project-Style: gnome\n" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| @@ -49,134 +48,118 @@ msgid "Move window to last workspace" | ||||
| msgstr "Move window to last workspace" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Move window one workspace to the left" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Move window one workspace to the right" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Move window one workspace up" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Move window one workspace down" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Move window one monitor to the left" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Move window one monitor to the right" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Move window one monitor up" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Move window one monitor down" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| #: data/50-mutter-navigation.xml:43 | ||||
| msgid "Switch applications" | ||||
| msgstr "Switch applications" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| #: data/50-mutter-navigation.xml:48 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Switch to previous application" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| #: data/50-mutter-navigation.xml:52 | ||||
| msgid "Switch windows" | ||||
| msgstr "Switch windows" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| #: data/50-mutter-navigation.xml:57 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Switch to previous window" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| #: data/50-mutter-navigation.xml:61 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Switch windows of an application" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| #: data/50-mutter-navigation.xml:66 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Switch to previous window of an application" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| #: data/50-mutter-navigation.xml:70 | ||||
| msgid "Switch system controls" | ||||
| msgstr "Switch system controls" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| #: data/50-mutter-navigation.xml:75 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Switch to previous system control" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| #: data/50-mutter-navigation.xml:79 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Switch windows directly" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| #: data/50-mutter-navigation.xml:84 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Switch directly to previous window" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| #: data/50-mutter-navigation.xml:88 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Switch windows of an app directly" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| #: data/50-mutter-navigation.xml:93 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Switch directly to previous window of an app" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| #: data/50-mutter-navigation.xml:97 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Switch system controls directly" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| #: data/50-mutter-navigation.xml:102 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Switch directly to previous system control" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| #: data/50-mutter-navigation.xml:105 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Hide all normal windows" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Switch to workspace 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Switch to workspace 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Switch to workspace 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Switch to workspace 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Switch to last workspace" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Move to workspace left" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Move to workspace right" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Move to workspace above" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Move to workspace below" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "System" | ||||
|  | ||||
| @@ -188,6 +171,10 @@ msgstr "Show the run command prompt" | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Show the activities overview" | ||||
|  | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "Restore the keyboard shortcuts" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Windows" | ||||
| @@ -213,54 +200,50 @@ msgid "Restore window" | ||||
| msgstr "Restore window" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Toggle shaded state" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Close window" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Hide window" | ||||
| msgstr "Hide window" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Move window" | ||||
| msgstr "Move window" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Resize window" | ||||
| msgstr "Resize window" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| #: data/50-mutter-windows.xml:27 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Toggle window on all workspaces or one" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Raise window if covered, otherwise lower it" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Raise window above other windows" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Lower window below other windows" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Maximise window vertically" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Maximise window horizontally" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| #: data/50-mutter-windows.xml:41 | ||||
| msgid "View split on left" | ||||
| msgstr "View split on left" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| #: data/50-mutter-windows.xml:45 | ||||
| msgid "View split on right" | ||||
| msgstr "View split on right" | ||||
|  | ||||
| @@ -273,16 +256,21 @@ msgid "Modifier to use for extended window management operations" | ||||
| msgstr "Modifier to use for extended window management operations" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:8 | ||||
| #| msgid "" | ||||
| #| "This key will initiate the \"overlay\", which is a combination window " | ||||
| #| "overview and application launching system. The default is intended to be " | ||||
| #| "the \"Windows key\" on PC hardware. It's expected that this binding " | ||||
| #| "either the default or set to the empty string." | ||||
| msgid "" | ||||
| "This key will initiate the \"overlay\", which is a combination window " | ||||
| "overview and application launching system. The default is intended to be the " | ||||
| "\"Windows key\" on PC hardware. It's expected that this binding either the " | ||||
| "default or set to the empty string." | ||||
| "This key will initiate the “overlay”, which is a combination window overview " | ||||
| "and application launching system. The default is intended to be the “Windows " | ||||
| "key” on PC hardware. It’s expected that this binding either the default or " | ||||
| "set to the empty string." | ||||
| msgstr "" | ||||
| "This key will initiate the \"overlay\", which is a combination window " | ||||
| "overview and application launching system. The default is intended to be the " | ||||
| "\"Windows key\" on PC hardware. It's expected that this binding either the " | ||||
| "default or set to the empty string." | ||||
| "This key will initiate the “overlay”, which is a combination window overview " | ||||
| "and application launching system. The default is intended to be the “Windows " | ||||
| "key” on PC hardware. It’s expected that this binding either the default or " | ||||
| "set to the empty string." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:20 | ||||
| msgid "Attach modal dialogs" | ||||
| @@ -317,12 +305,16 @@ msgid "Workspaces are managed dynamically" | ||||
| msgstr "Workspaces are managed dynamically" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:41 | ||||
| #| msgid "" | ||||
| #| "Determines whether workspaces are managed dynamically or whether there's " | ||||
| #| "a static number of workspaces (determined by the num-workspaces key in " | ||||
| #| "org.gnome.desktop.wm.preferences)." | ||||
| msgid "" | ||||
| "Determines whether workspaces are managed dynamically or whether there's a " | ||||
| "Determines whether workspaces are managed dynamically or whether there’s a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
| "Determines whether workspaces are managed dynamically or whether there's a " | ||||
| "Determines whether workspaces are managed dynamically or whether there’s a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
|  | ||||
| @@ -355,25 +347,32 @@ msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "Delay focus changes until the pointer stops moving" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:69 | ||||
| #| msgid "" | ||||
| #| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then " | ||||
| #| "the focus will not be changed immediately when entering a window, but " | ||||
| #| "only after the pointer stops moving." | ||||
| msgid "" | ||||
| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then " | ||||
| "the focus will not be changed immediately when entering a window, but only " | ||||
| "after the pointer stops moving." | ||||
| "If set to true, and the focus mode is either “sloppy” or “mouse” then the " | ||||
| "focus will not be changed immediately when entering a window, but only after " | ||||
| "the pointer stops moving." | ||||
| msgstr "" | ||||
| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then " | ||||
| "the focus will not be changed immediately when entering a window, but only " | ||||
| "after the pointer stops moving." | ||||
| "If set to true, and the focus mode is either “sloppy” or “mouse” then the " | ||||
| "focus will not be changed immediately when entering a window, but only after " | ||||
| "the pointer stops moving." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:79 | ||||
| msgid "Draggable border width" | ||||
| msgstr "Draggable border width" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:80 | ||||
| #| msgid "" | ||||
| #| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| #| "not enough, invisible borders will be added to meet this value." | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "The amount of total draggable borders. If the theme’s visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "The amount of total draggable borders. If the theme’s visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:89 | ||||
| @@ -400,14 +399,47 @@ msgstr "" | ||||
| "When true, the new windows will always be put in the centre of the active " | ||||
| "screen of the monitor." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:120 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:107 | ||||
| msgid "Enable experimental features" | ||||
| msgstr "Enable experimental features" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:108 | ||||
| msgid "" | ||||
| "To enable experimental features, add the feature keyword to the list. " | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart." | ||||
| msgstr "" | ||||
| "To enable experimental features, add the feature keyword to the list. " | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:141 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Select window from tab popup" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:125 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:146 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Cancel tab popup" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| #| msgid "Switch monitor" | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Switch monitor configurations" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "Rotates the built-in monitor configuration" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:6 | ||||
| msgid "Switch to VT 1" | ||||
| msgstr "Switch to VT 1" | ||||
| @@ -456,59 +488,167 @@ msgstr "Switch to VT 11" | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "Switch to VT 12" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:1707 | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:54 | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Re-enable shortcuts" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:64 | ||||
| msgid "Allow grabs with Xwayland" | ||||
| msgstr "Allow grabs with Xwayland" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:65 | ||||
| msgid "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
| msgstr "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:77 | ||||
| msgid "Xwayland applications allowed to issue keyboard grabs" | ||||
| msgstr "Xwayland applications allowed to issue keyboard grabs" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:78 | ||||
| msgid "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
| msgstr "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2325 | ||||
| #, c-format | ||||
| #| msgid "Mode Switch: Mode %d" | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Mode Switch (Group %d)" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2348 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Switch monitor" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:1709 | ||||
| #: src/backends/meta-input-settings.c:2350 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Show on-screen help" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:514 | ||||
| #: src/backends/meta-monitor-manager.c:907 | ||||
| msgid "Built-in display" | ||||
| msgstr "Built-in display" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:537 | ||||
| #: src/backends/meta-monitor-manager.c:930 | ||||
| msgid "Unknown" | ||||
| msgstr "Unknown" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:539 | ||||
| #: src/backends/meta-monitor-manager.c:932 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Unknown Display" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:547 | ||||
| #: src/backends/meta-monitor-manager.c:940 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:463 | ||||
| #: src/compositor/compositor.c:481 | ||||
| #, c-format | ||||
| #| msgid "" | ||||
| #| "Another compositing manager is already running on screen %i on display " | ||||
| #| "\"%s\"." | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| msgstr "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| #: src/core/bell.c:254 | ||||
| msgid "Bell event" | ||||
| msgstr "Bell event" | ||||
|  | ||||
| #: src/core/delete.c:127 | ||||
| #: src/core/main.c:191 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Disable connection to session manager" | ||||
|  | ||||
| #: src/core/main.c:197 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Replace the running window manager" | ||||
|  | ||||
| #: src/core/main.c:203 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Specify session management ID" | ||||
|  | ||||
| #: src/core/main.c:208 | ||||
| msgid "X Display to use" | ||||
| msgstr "X Display to use" | ||||
|  | ||||
| #: src/core/main.c:214 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Initialise session from savefile" | ||||
|  | ||||
| #: src/core/main.c:220 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Make X calls synchronous" | ||||
|  | ||||
| #: src/core/main.c:227 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Run as a wayland compositor" | ||||
|  | ||||
| #: src/core/main.c:233 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Run as a nested compositor" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run wayland compositor without starting Xwayland" | ||||
| msgstr "Run wayland compositor without starting Xwayland" | ||||
|  | ||||
| #: src/core/main.c:247 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Run as a full display server, rather than nested" | ||||
|  | ||||
| #: src/core/main.c:253 | ||||
| msgid "Run with X11 backend" | ||||
| msgstr "Run with X11 backend" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:148 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "“%s” is not responding." | ||||
|  | ||||
| #: src/core/delete.c:129 | ||||
| #: src/core/meta-close-dialog-default.c:150 | ||||
| msgid "Application is not responding." | ||||
| msgstr "Application is not responding." | ||||
|  | ||||
| #: src/core/delete.c:134 | ||||
| #: src/core/meta-close-dialog-default.c:155 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| @@ -516,66 +656,31 @@ msgstr "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| msgid "_Wait" | ||||
| msgstr "_Wait" | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Force Quit" | ||||
|  | ||||
| #: src/core/display.c:590 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Failed to open X Window System display '%s'\n" | ||||
|  | ||||
| #: src/core/main.c:182 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Disable connection to session manager" | ||||
|  | ||||
| #: src/core/main.c:188 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Replace the running window manager" | ||||
|  | ||||
| #: src/core/main.c:194 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Specify session management ID" | ||||
|  | ||||
| #: src/core/main.c:199 | ||||
| msgid "X Display to use" | ||||
| msgstr "X Display to use" | ||||
|  | ||||
| #: src/core/main.c:205 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Initialise session from savefile" | ||||
|  | ||||
| #: src/core/main.c:211 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Make X calls synchronous" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Run as a wayland compositor" | ||||
|  | ||||
| #: src/core/main.c:224 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Run as a nested compositor" | ||||
|  | ||||
| #: src/core/main.c:232 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Run as a full display server, rather than nested" | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Wait" | ||||
| msgstr "_Wait" | ||||
|  | ||||
| #: src/core/mutter.c:39 | ||||
| #, c-format | ||||
| #| msgid "" | ||||
| #| "mutter %s\n" | ||||
| #| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| #| "This is free software; see the source for copying conditions.\n" | ||||
| #| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " | ||||
| #| "PARTICULAR PURPOSE.\n" | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "This is free software; see the source for copying conditions.\n" | ||||
| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " | ||||
| "PARTICULAR PURPOSE.\n" | ||||
| msgstr "" | ||||
| "mutter %s\n" | ||||
| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "This is free software; see the source for copying conditions.\n" | ||||
| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " | ||||
| "PARTICULAR PURPOSE.\n" | ||||
| @@ -588,47 +693,79 @@ msgstr "Print version" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Mutter plugin to use" | ||||
|  | ||||
| #: src/core/prefs.c:1997 | ||||
| #: src/core/prefs.c:1915 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Workspace %d" | ||||
|  | ||||
| #: src/core/screen.c:521 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display \"%s\" already has a window manager; try using the --replace option " | ||||
| "to replace the current window manager." | ||||
| msgstr "" | ||||
| "Display \"%s\" already has a window manager; try using the --replace option " | ||||
| "to replace the current window manager." | ||||
|  | ||||
| #: src/core/screen.c:606 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Screen %d on display '%s' is invalid\n" | ||||
|  | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter was compiled without support for verbose mode\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:595 | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:567 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Mode Switch: Mode %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #: src/x11/meta-x11-display.c:666 | ||||
| #, c-format | ||||
| #| msgid "" | ||||
| #| "Display \"%s\" already has a window manager; try using the --replace " | ||||
| #| "option to replace the current window manager." | ||||
| msgid "" | ||||
| "These windows do not support "save current setup" and will have to " | ||||
| "be restarted manually next time you log in." | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| "replace the current window manager." | ||||
| msgstr "" | ||||
| "These windows do not support "save current setup" and will have to " | ||||
| "be restarted manually next time you log in." | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| "replace the current window manager." | ||||
|  | ||||
| #: src/x11/window-props.c:548 | ||||
| #: src/x11/meta-x11-display.c:1010 | ||||
| msgid "Failed to initialize GDK\n" | ||||
| msgstr "Failed to initialise GDK\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1034 | ||||
| #, c-format | ||||
| #| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Failed to open X Window System display “%s”\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1117 | ||||
| #, c-format | ||||
| #| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "Screen %d on display “%s” is invalid\n" | ||||
|  | ||||
| #: src/x11/session.c:1819 | ||||
| #| msgid "" | ||||
| #| "These windows do not support "save current setup" and will have " | ||||
| #| "to be restarted manually next time you log in." | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| msgstr "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
|  | ||||
| #: src/x11/window-props.c:565 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (on %s)" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the left" | ||||
| #~ msgstr "Move window one workspace to the left" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the right" | ||||
| #~ msgstr "Move window one workspace to the right" | ||||
|  | ||||
| #~ msgid "Move to workspace left" | ||||
| #~ msgstr "Move to workspace left" | ||||
|  | ||||
| #~ msgid "Move to workspace right" | ||||
| #~ msgstr "Move to workspace right" | ||||
|  | ||||
| #~ msgid "Toggle shaded state" | ||||
| #~ msgstr "Toggle shaded state" | ||||
|  | ||||
| #~ msgid "background texture could not be created from file" | ||||
| #~ msgstr "background texture could not be created from file" | ||||
|  | ||||
|   | ||||
							
								
								
									
										518
									
								
								po/eo.po
									
									
									
									
									
								
							
							
						
						
									
										518
									
								
								po/eo.po
									
									
									
									
									
								
							| @@ -2,16 +2,16 @@ | ||||
| # Copyright (C) 2011 Free Software Foundation, Inc. | ||||
| # This file is distributed under the same license as the mutter package. | ||||
| # Michael MORONI < >, 2011. | ||||
| # Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011, 2012, 2015. | ||||
| # Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011, 2012, 2015, 2018. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter" | ||||
| "&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2015-02-14 11:06+0000\n" | ||||
| "PO-Revision-Date: 2015-02-14 22:34+0200\n" | ||||
| "POT-Creation-Date: 2017-12-18 16:24+0000\n" | ||||
| "PO-Revision-Date: 2018-01-22 20:12+0200\n" | ||||
| "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n" | ||||
| "Language-Team: Esperanto <gnome-l10n-eo@lists.launchpad.net>\n" | ||||
| "Language-Team: Esperanto <gnome-eo-list@gnome.org>\n" | ||||
| "Language: eo\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| @@ -20,553 +20,675 @@ msgstr "" | ||||
| "X-Generator: Virtaal 0.7.1\n" | ||||
| "X-Project-Style: gnome\n" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:1 | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| msgid "Navigation" | ||||
| msgstr "Navigado" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:2 | ||||
| #: data/50-mutter-navigation.xml:9 | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "Movi la fenestron al laborspaco 1" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:3 | ||||
| #: data/50-mutter-navigation.xml:12 | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "Movi la fenestron al laborspaco 2" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:4 | ||||
| #: data/50-mutter-navigation.xml:15 | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "Movi la fenestron al laborspaco 3" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:5 | ||||
| #: data/50-mutter-navigation.xml:18 | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "Movi la fenestron al laborspaco 4" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:6 | ||||
| #: data/50-mutter-navigation.xml:21 | ||||
| msgid "Move window to last workspace" | ||||
| msgstr "Movi la fenestron al lasta laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:7 | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Movi la fenestron al la maldekstra laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:8 | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Movi la fenestron al la dekstra laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:9 | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Movi la fenestron al la supra laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:10 | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Movi la fenestron al la suba laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:11 | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Movi la fenestron al la maldekstra ekrano" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:12 | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Movi la fenestron al la dekstra ekrano" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:13 | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Movi la fenestron al la supra ekrano" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:14 | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Movi la fenestron al la suba ekrano" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:15 | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| msgid "Switch applications" | ||||
| msgstr "Ŝanĝi aplikaĵojn" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:16 | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Ŝalti al antaŭa aplikaĵo" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:17 | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| msgid "Switch windows" | ||||
| msgstr "Ŝanĝi fenestrojn" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:18 | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Ŝalti al antaŭa fenestro" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:19 | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Ŝanĝi fenestrojn de aplikaĵo" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:20 | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Ŝalti al antaŭa fenestro de aplikaĵo" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:21 | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| msgid "Switch system controls" | ||||
| msgstr "Ŝanĝi sistem-kontrolojn" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:22 | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Ŝalti al antaŭa sistem-kontrolo" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:23 | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Ŝanĝi rekte fenestrojn" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:24 | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Ŝalti rekte al antaŭa fenestro" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:25 | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Ŝanĝi rekte fenestrojn de aplikaĵo" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:26 | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Ŝalti rekte al antaŭa fenestro de aplikaĵo" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:27 | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Ŝalti rekte sistem-kontrolojn" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:28 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Ŝalti rekte al antaŭa sistem-kontrolo" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:29 | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Kaŝi ĉiujn normalajn fenestrojn" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:30 | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Ŝalti al laborspaco 1" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:31 | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Ŝalti al laborspaco 2" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:32 | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Ŝalti al laborspaco 3" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:33 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Ŝalti al laborspaco 4" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:34 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Ŝalti al lasta laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:35 | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Movi al la maldekstra laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:36 | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Movi al la dekstra laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:37 | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Movi al la supra laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:38 | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Movi al la malsupra laborspaco" | ||||
|  | ||||
| #: ../data/50-mutter-system.xml.in.h:1 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "Sistemo" | ||||
|  | ||||
| #: ../data/50-mutter-system.xml.in.h:2 | ||||
| #: data/50-mutter-system.xml:8 | ||||
| msgid "Show the run command prompt" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-system.xml.in.h:3 | ||||
| #: data/50-mutter-system.xml:10 | ||||
| msgid "Show the activities overview" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:1 | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Fenestroj" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:2 | ||||
| #: data/50-mutter-windows.xml:8 | ||||
| msgid "Activate the window menu" | ||||
| msgstr "Aktivigi la fenestromenuon" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:3 | ||||
| #: data/50-mutter-windows.xml:10 | ||||
| msgid "Toggle fullscreen mode" | ||||
| msgstr "Baskuligi tutekranan reĝimon" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:4 | ||||
| #: data/50-mutter-windows.xml:12 | ||||
| msgid "Toggle maximization state" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:5 | ||||
| #: data/50-mutter-windows.xml:14 | ||||
| msgid "Maximize window" | ||||
| msgstr "Maksimumigi la fenestron" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:6 | ||||
| #: data/50-mutter-windows.xml:16 | ||||
| msgid "Restore window" | ||||
| msgstr "Restaŭri la fenestron" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:7 | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:8 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Fermi la fenestron" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:9 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Hide window" | ||||
| msgstr "Kaŝi la fenestron" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:10 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Move window" | ||||
| msgstr "Movi la fenestron" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:11 | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| msgid "Resize window" | ||||
| msgstr "Ŝanĝi la fenestrograndon" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:12 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:13 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:14 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:15 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:16 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Vertikale maksimumigi la fenestron" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:17 | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Horizontale maksimumigi la fenestron" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:18 | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| msgid "View split on left" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:19 | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| msgid "View split on right" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/mutter.desktop.in.h:1 | ||||
| #: data/mutter.desktop.in:4 | ||||
| msgid "Mutter" | ||||
| msgstr "Mutero" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:1 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:7 | ||||
| msgid "Modifier to use for extended window management operations" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:2 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:8 | ||||
| msgid "" | ||||
| "This key will initiate the \"overlay\", which is a combination window " | ||||
| "overview and application launching system. The default is intended to be the " | ||||
| "\"Windows key\" on PC hardware. It's expected that this binding either the " | ||||
| "default or set to the empty string." | ||||
| "This key will initiate the “overlay”, which is a combination window overview " | ||||
| "and application launching system. The default is intended to be the “Windows " | ||||
| "key” on PC hardware. It’s expected that this binding either the default or " | ||||
| "set to the empty string." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:3 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:20 | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:4 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:21 | ||||
| msgid "" | ||||
| "When true, instead of having independent titlebars, modal dialogs appear " | ||||
| "attached to the titlebar of the parent window and are moved together with " | ||||
| "the parent window." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:5 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:30 | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:6 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:31 | ||||
| msgid "" | ||||
| "If enabled, dropping windows on vertical screen edges maximizes them " | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:7 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:40 | ||||
| msgid "Workspaces are managed dynamically" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:8 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:41 | ||||
| msgid "" | ||||
| "Determines whether workspaces are managed dynamically or whether there's a " | ||||
| "Determines whether workspaces are managed dynamically or whether there’s a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:9 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:50 | ||||
| msgid "Workspaces only on primary" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:10 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:51 | ||||
| msgid "" | ||||
| "Determines whether workspace switching should happen for windows on all " | ||||
| "monitors or only for windows on the primary monitor." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:11 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:59 | ||||
| msgid "No tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:12 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:60 | ||||
| msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:13 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:68 | ||||
| msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:14 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:69 | ||||
| msgid "" | ||||
| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then " | ||||
| "the focus will not be changed immediately when entering a window, but only " | ||||
| "after the pointer stops moving." | ||||
| "If set to true, and the focus mode is either “sloppy” or “mouse” then the " | ||||
| "focus will not be changed immediately when entering a window, but only after " | ||||
| "the pointer stops moving." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:15 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:79 | ||||
| msgid "Draggable border width" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:16 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:80 | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "The amount of total draggable borders. If the theme’s visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:17 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:89 | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:18 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:90 | ||||
| msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:19 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:98 | ||||
| msgid "Place new windows in the center" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:20 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:99 | ||||
| msgid "" | ||||
| "When true, the new windows will always be put in the center of the active " | ||||
| "screen of the monitor." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:21 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:107 | ||||
| msgid "Enable experimental features" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:108 | ||||
| msgid "" | ||||
| "To enable experimental features, add the feature keyword to the list. " | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " | ||||
| "enables remote desktop support. To support remote desktop with screen " | ||||
| "sharing, “screen-cast” must also be enabled. • “screen-cast” — enables " | ||||
| "screen cast support." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:145 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:22 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:150 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:155 | ||||
| #, fuzzy | ||||
| #| msgid "Switch applications" | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Ŝanĝi aplikaĵojn" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:160 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:6 | ||||
| msgid "Switch to VT 1" | ||||
| msgstr "Ŝalti al VT 1" | ||||
| msgstr "Ŝalti al virtuala terminalo 1" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2 | ||||
| #, fuzzy | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:10 | ||||
| msgid "Switch to VT 2" | ||||
| msgstr "Ŝalti al VT 2" | ||||
| msgstr "Ŝalti al virtuala terminalo 2" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3 | ||||
| #, fuzzy | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:14 | ||||
| msgid "Switch to VT 3" | ||||
| msgstr "Ŝalti al VT 3" | ||||
| msgstr "Ŝalti al virtuala terminalo 3" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4 | ||||
| #, fuzzy | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:18 | ||||
| msgid "Switch to VT 4" | ||||
| msgstr "Ŝalti al VT 4" | ||||
| msgstr "Ŝalti al virtuala terminalo 4" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5 | ||||
| #, fuzzy | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:22 | ||||
| #| msgid "Switch to workspace 5" | ||||
| msgid "Switch to VT 5" | ||||
| msgstr "Ŝalti al VT 5" | ||||
| msgstr "Ŝalti al virtuala terminalo 5" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6 | ||||
| #, fuzzy | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:26 | ||||
| #| msgid "Switch to workspace 6" | ||||
| msgid "Switch to VT 6" | ||||
| msgstr "Ŝalti al VT 6" | ||||
| msgstr "Ŝalti al virtuala terminalo 6" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7 | ||||
| #, fuzzy | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:30 | ||||
| #| msgid "Switch to workspace 7" | ||||
| msgid "Switch to VT 7" | ||||
| msgstr "Ŝalti al VT 7" | ||||
| msgstr "Ŝalti al virtuala terminalo 7" | ||||
|  | ||||
| #: ../src/backends/meta-monitor-manager.c:364 | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:34 | ||||
| msgid "Switch to VT 8" | ||||
| msgstr "Ŝalti al virtuala terminalo 8" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:38 | ||||
| msgid "Switch to VT 9" | ||||
| msgstr "Ŝalti al virtuala terminalo 9" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:42 | ||||
| msgid "Switch to VT 10" | ||||
| msgstr "Ŝalti al virtuala terminalo 10" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:46 | ||||
| msgid "Switch to VT 11" | ||||
| msgstr "Ŝalti al virtuala terminalo 11" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:50 | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "Ŝalti al virtuala terminalo 12" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:54 | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Re-ŝalti klavkombinojn" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:64 | ||||
| msgid "Allow grabs with Xwayland" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:65 | ||||
| msgid "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:77 | ||||
| msgid "Xwayland applications allowed to issue keyboard grabs" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:78 | ||||
| msgid "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
| msgstr "" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2260 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2283 | ||||
| #, fuzzy | ||||
| #| msgid "Switch system controls" | ||||
| msgid "Switch monitor" | ||||
| msgstr "Ŝanĝi sistem-kontrolojn" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:2285 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Montri ekranhelpon" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:900 | ||||
| msgid "Built-in display" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../src/backends/meta-monitor-manager.c:391 | ||||
| #: src/backends/meta-monitor-manager.c:923 | ||||
| msgid "Unknown" | ||||
| msgstr "Nekonate" | ||||
|  | ||||
| #: ../src/backends/meta-monitor-manager.c:393 | ||||
| #: src/backends/meta-monitor-manager.c:925 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Nekonata ekrano" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: ../src/backends/meta-monitor-manager.c:401 | ||||
| #: src/backends/meta-monitor-manager.c:933 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:456 | ||||
| #, c-format | ||||
| #: src/compositor/compositor.c:479 | ||||
| #, fuzzy, c-format | ||||
| #| msgid "" | ||||
| #| "Another compositing manager is already running on screen %i on display " | ||||
| #| "\"%s\"." | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "Alia kunmetanta administrilo jam rulas sur ekrano %i de montrilo \"%s\"." | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| msgstr "Alia kunmetanta administrilo jam rulas sur ekrano %i de montrilo “%s”." | ||||
|  | ||||
| #: ../src/core/bell.c:185 | ||||
| #: src/core/bell.c:194 | ||||
| msgid "Bell event" | ||||
| msgstr "Sonoril-evento" | ||||
|  | ||||
| #: ../src/core/delete.c:127 | ||||
| #: src/core/display.c:608 | ||||
| #, fuzzy, c-format | ||||
| #| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Malsukcesis malfermi jenan vidigon de fenestra sistemo X “%s”\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Elŝalti konekton al la seancoadministrilo" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Anstataŭigi la nun ruliĝantan fenestromastrumilon" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Specifi identigilon de la seancoadministrilo" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| #, fuzzy | ||||
| msgid "X Display to use" | ||||
| msgstr "X-Vidigo uzenda" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Pravalorizi la seancon el konservita dosiero" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Fari X-vokojn sinkrone" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:147 | ||||
| #, c-format | ||||
| #| msgid "<tt>%s</tt> is not responding." | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "“%s” ne respondas." | ||||
|  | ||||
| #: ../src/core/delete.c:129 | ||||
| #: src/core/meta-close-dialog-default.c:149 | ||||
| msgid "Application is not responding." | ||||
| msgstr "Aplikaĵo ne respondas." | ||||
|  | ||||
| #: ../src/core/delete.c:134 | ||||
| #: src/core/meta-close-dialog-default.c:154 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "Vi povas elekti ĉu atendi iomete por la aplikaĵo aŭ perforte ĉesi ĝin." | ||||
|  | ||||
| #: ../src/core/delete.c:141 | ||||
| msgid "_Wait" | ||||
| msgstr "_Atendi" | ||||
|  | ||||
| #: ../src/core/delete.c:141 | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Force Quit" | ||||
| msgstr "Per_forta eliro" | ||||
|  | ||||
| #: ../src/core/display.c:562 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Malsukcesis malfermi jenan vidigon de fenestra sistemo X: '%s'\n" | ||||
|  | ||||
| #: ../src/core/main.c:176 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Elŝalti konekton al la seancoadministrilo" | ||||
|  | ||||
| #: ../src/core/main.c:182 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Anstataŭigi la nun ruliĝantan fenestromastrumilon" | ||||
|  | ||||
| #: ../src/core/main.c:188 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Specifi identigilon de la seancoadministrilo" | ||||
|  | ||||
| #: ../src/core/main.c:193 | ||||
| #, fuzzy | ||||
| msgid "X Display to use" | ||||
| msgstr "X-Vidigo uzenda" | ||||
|  | ||||
| #: ../src/core/main.c:199 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Pravalorizi la seancon el konservita dosiero" | ||||
|  | ||||
| #: ../src/core/main.c:205 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Fari X-vokojn sinkrone" | ||||
|  | ||||
| #: ../src/core/main.c:212 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../src/core/mutter.c:39 | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Wait" | ||||
| msgstr "_Atendi" | ||||
|  | ||||
| #: src/core/mutter.c:39 | ||||
| #, c-format | ||||
| #| msgid "" | ||||
| #| "mutter %s\n" | ||||
| #| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| #| "This is free software; see the source for copying conditions.\n" | ||||
| #| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " | ||||
| #| "PARTICULAR PURPOSE.\n" | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "This is free software; see the source for copying conditions.\n" | ||||
| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " | ||||
| "PARTICULAR PURPOSE.\n" | ||||
| msgstr "" | ||||
| "Mutero %s\n" | ||||
| "Kopirajto (C) 2001-%d Havoc PENNIGTON, Red Hat, Inc., kaj aliaj\n" | ||||
| "Ĉi tio estas libera programaro; rigardu la fontkodon por pli da informoj.\n" | ||||
| "Ekzistas neniu GARANTIO; nek por NEGOCEBLO nek por ADAPTADO AL IU APARTA " | ||||
| "Kopirajto © 2001-%d Havoc PENNIGTON, Red Hat, Inc., kaj aliaj\n" | ||||
| "Ĉi tio estas libera programaro; rigardu la fontkodon por kondiĉoj pri " | ||||
| "kopiado.\n" | ||||
| "Ekzistas NENIU garantio; nek por NEGOCEBLO nek por ADAPTADO AL IU APARTA " | ||||
| "CELO.\n" | ||||
|  | ||||
| #: ../src/core/mutter.c:53 | ||||
| #: src/core/mutter.c:53 | ||||
| msgid "Print version" | ||||
| msgstr "Motri version" | ||||
|  | ||||
| #: ../src/core/mutter.c:59 | ||||
| #: src/core/mutter.c:59 | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../src/core/prefs.c:2004 | ||||
| #: src/core/prefs.c:1997 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Laborspaco %d" | ||||
|  | ||||
| #: ../src/core/screen.c:525 | ||||
| #: src/core/screen.c:583 | ||||
| #, 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" | ||||
| #| "Display \"%s\" already has a window manager; try using the --replace " | ||||
| #| "option to replace the current window manager." | ||||
| msgid "" | ||||
| "Display \"%s\" already has a window manager; try using the --replace option " | ||||
| "to replace the current window manager." | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| "replace the current window manager." | ||||
| msgstr "" | ||||
| "Ekrano \"%s\" jam havas fenestroadministrilon; provu uzi opcion --replace por " | ||||
| "anstataŭigi la nunan fenestroadministrilon." | ||||
| "Ekrano “%s” jam havas fenestroadministrilon; provu uzi la opcion --replace " | ||||
| "por anstataŭigi la nunan fenestroadministrilon." | ||||
|  | ||||
| #: ../src/core/screen.c:607 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Ekrano %d en vidigilo '%s' estas nevalida\n" | ||||
| #: src/core/screen.c:668 | ||||
| #, fuzzy, c-format | ||||
| #| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "Ekrano %d en vidigilo “%s” estas nevalida\n" | ||||
|  | ||||
| #: ../src/core/util.c:118 | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutero estis kompilita sen subteno por eksplicita reĝimo\n" | ||||
|  | ||||
| #: ../src/x11/session.c:1815 | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Reĝim-ŝaltilo: Reĝimo %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| msgid "" | ||||
| "These windows do not support "save current setup" and will have to " | ||||
| "be restarted manually next time you log in." | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../src/x11/window-props.c:549 | ||||
| #: src/x11/window-props.c:559 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (ĉe %s)" | ||||
|   | ||||
							
								
								
									
										297
									
								
								po/es.po
									
									
									
									
									
								
							
							
						
						
									
										297
									
								
								po/es.po
									
									
									
									
									
								
							| @@ -7,15 +7,14 @@ | ||||
| # Pablo Gonzalo del Campo <pablodc@bigfoot.com>,2002,2003. | ||||
| # Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006. | ||||
| # Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009, 2010, 2011. | ||||
| # Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013, 2014, 2015, 2016, 2017. | ||||
| # Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter.master\n" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2017-08-02 10:05+0000\n" | ||||
| "PO-Revision-Date: 2017-08-03 09:59+0200\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n" | ||||
| "POT-Creation-Date: 2018-07-07 09:58+0000\n" | ||||
| "PO-Revision-Date: 2018-07-23 12:31+0200\n" | ||||
| "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" | ||||
| "Language-Team: es <gnome-es-list@gnome.org>\n" | ||||
| "Language: es\n" | ||||
| @@ -50,134 +49,118 @@ msgid "Move window to last workspace" | ||||
| msgstr "Mover la ventana a la última área de trabajo" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Mover la ventana un área de trabajo a la izquierda" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Mover la ventana un área de trabajo a la derecha" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Subir la ventana un área de trabajo" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Bajar la ventana un área de trabajo" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Mover la ventana una pantalla a la izquierda" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Mover la ventana una pantalla a la derecha" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Subir la ventana una pantalla" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Bajar la ventana una pantalla" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| #: data/50-mutter-navigation.xml:43 | ||||
| msgid "Switch applications" | ||||
| msgstr "Cambiar entre aplicaciones" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| #: data/50-mutter-navigation.xml:48 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Cambiar a la aplicación anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| #: data/50-mutter-navigation.xml:52 | ||||
| msgid "Switch windows" | ||||
| msgstr "Cambiar entre ventanas" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| #: data/50-mutter-navigation.xml:57 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Cambiar a la ventana anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| #: data/50-mutter-navigation.xml:61 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Cambiar entre ventanas de una aplicación" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| #: data/50-mutter-navigation.xml:66 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Cambiar a la ventana anterior de una aplicación" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| #: data/50-mutter-navigation.xml:70 | ||||
| msgid "Switch system controls" | ||||
| msgstr "Cambiar entre controles del sistema" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| #: data/50-mutter-navigation.xml:75 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Cambiar al control del sistema anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| #: data/50-mutter-navigation.xml:79 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Cambiar entre ventanas directamente" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| #: data/50-mutter-navigation.xml:84 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Cambiar directamente a la ventana anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| #: data/50-mutter-navigation.xml:88 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Cambiar entre ventanas de una aplicación directamente" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| #: data/50-mutter-navigation.xml:93 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Cambiar directamente a la ventana anterior de una aplicación" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| #: data/50-mutter-navigation.xml:97 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Cambiar entre controles del sistema directamente" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| #: data/50-mutter-navigation.xml:102 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Cambiar directamente al control del sistema anterior" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| #: data/50-mutter-navigation.xml:105 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Ocultar todas las ventanas normales" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Cambiar al área de trabajo 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Cambiar al área de trabajo 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Cambiar al área de trabajo 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Cambiar al área de trabajo 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Cambiar a la útima área de trabajo" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Mover al área de trabajo de la izquierda" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Mover al área de trabajo de la derecha" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Mover al área de trabajo de la arriba" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Mover al área de trabajo de abajo" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "Sistema" | ||||
|  | ||||
| @@ -189,6 +172,10 @@ msgstr "Mostrar el elemento «ejecutar comando»" | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Mostrar la vista de actividades" | ||||
|  | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "Restaurar los atajos de teclado" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Ventanas" | ||||
| @@ -214,54 +201,50 @@ msgid "Restore window" | ||||
| msgstr "Restaurar la ventana" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Cambiar el estado de enrollado" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Cerrar la ventana" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Hide window" | ||||
| msgstr "Ocultar la ventana" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Move window" | ||||
| msgstr "Mover la ventana" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Resize window" | ||||
| msgstr "Redimensionar la ventana" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| #: data/50-mutter-windows.xml:27 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Conmutar la ventana en todas las áreas de trabajo o sólo en una" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Elevar la ventana si está cubierta, de lo contrario, bajarla" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Elevar la ventana sobre las otras ventanas" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Bajar la ventana por debajo de otras ventanas" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Maximizar la ventana verticalmente" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Maximizar la ventana horizontalmente" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| #: data/50-mutter-windows.xml:41 | ||||
| msgid "View split on left" | ||||
| msgstr "Ver división a la izquierda" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| #: data/50-mutter-windows.xml:45 | ||||
| msgid "View split on right" | ||||
| msgstr "Ver división a la derecha" | ||||
|  | ||||
| @@ -414,49 +397,55 @@ msgid "Enable experimental features" | ||||
| msgstr "Activar las características experimentales" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:108 | ||||
| #, fuzzy | ||||
| #| msgid "" | ||||
| #| "To enable experimental features, add the feature keyword to the list. " | ||||
| #| "Whether the feature requires restarting the compositor depends on the " | ||||
| #| "given feature. Any experimental feature is not required to still be " | ||||
| #| "available, or configurable. Don’t expect adding anything in this setting " | ||||
| #| "to be future proof. Currently possible keywords: • “scale-monitor-" | ||||
| #| "framebuffer” — makes mutter default to layout logical monitors in a " | ||||
| #| "logical pixel coordinate space, while scaling monitor framebuffers " | ||||
| #| "instead of window content, to manage HiDPI monitors. Does not require a " | ||||
| #| "restart. • “remote-desktop” — enables remote desktop support. To support " | ||||
| #| "remote desktop with screen sharing, “screen-cast” must also be enabled. • " | ||||
| #| "“screen-cast” — enables screen cast support." | ||||
| msgid "" | ||||
| "To enable experimental features, add the feature keyword to the list. " | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “monitor-config-manager” — use the new " | ||||
| "monitor configuration system, aimed to replace the old one. This enables a " | ||||
| "higher level configuration API to be used by configuration applications, as " | ||||
| "well as the ability to configure per logical monitor scale. • “scale-monitor-" | ||||
| "framebuffer” — makes mutter default to layout logical monitors in a logical " | ||||
| "pixel coordinate space, while scaling monitor framebuffers instead of window " | ||||
| "content, to manage HiDPI monitors. Does not require a restart. Also enabling " | ||||
| "“monitor-config-manager” is required for this feature to be enabled." | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart." | ||||
| msgstr "" | ||||
| "Para activar las características experimentales, añada la palabra clave de " | ||||
| "la característica a la lista. Depende de la característica que se deba " | ||||
| "reiniciar o no el compositor. Cualquier característica experimental puede no " | ||||
| "estar disponible o ser configurable. No espere que lo que se añada en este " | ||||
| "escenario sirva como prueba futura. Las palabras clave actualmente " | ||||
| "disponibles son: • \"monitor-config-manager\" - utiliza el nuevo sistema de " | ||||
| "configuración del monitor, destinado a sustituir el antiguo. Esto permite " | ||||
| "que las aplicaciones de configuración usen una API de configuración de nivel " | ||||
| "superior, así como la capacidad de configurar el escalado de monitores " | ||||
| "lógicos. • \"scale-monitor-framebuffer\" - convierte a mutter en ña manera " | ||||
| "predeterminada de disponer monitores lógicos en un espacio lógico de " | ||||
| "disponibles son: • \"scale-monitor-framebuffer\" - convierte a mutter en la " | ||||
| "manera predeterminada de disponer monitores lógicos en un espacio lógico de " | ||||
| "coordenadas de píxeles, al escalar framebuffers de monitores framebuffers en " | ||||
| "lugar del contenido de ventana, para administrar monitores HiDPI. No " | ||||
| "requiere un reinicio. También es necesario activar \"monitor-config-manager" | ||||
| "\" para activar esta función." | ||||
| "requiere un reinicio. • \"remote-desktop\" — activa el escritorio remoto. " | ||||
| "Para soportarlo con compartición de pantalla es necesario activar \"screen-" | ||||
| "cast\" • \"screen-cast\" — activa el soporte de compartición de pantalla." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:141 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Seleccionar ventana de la pestaña emergente" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:146 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Cancelar pestaña emergente" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:161 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Cambiar la configuración del monitor" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:166 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "Rota la configuración del monitor empotrado" | ||||
|  | ||||
| @@ -512,10 +501,41 @@ msgstr "Cambiar al VT 12" | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Volver a activar los atajos" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:64 | ||||
| msgid "Allow grabs with Xwayland" | ||||
| msgstr "Permitir capturas con Xwayland" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:65 | ||||
| msgid "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:77 | ||||
| msgid "Xwayland applications allowed to issue keyboard grabs" | ||||
| msgstr "Aplicaciones de Xwayland que pueden capturar el teclado" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:78 | ||||
| msgid "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
| msgstr "" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2118 | ||||
| #: src/backends/meta-input-settings.c:2325 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Cambiar modo (grupo %d)" | ||||
| @@ -523,37 +543,37 @@ msgstr "Cambiar modo (grupo %d)" | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2141 | ||||
| #: src/backends/meta-input-settings.c:2348 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Cambiar monitor" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:2143 | ||||
| #: src/backends/meta-input-settings.c:2350 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Mostrar la ayuda en pantalla" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:927 | ||||
| #: src/backends/meta-monitor-manager.c:907 | ||||
| msgid "Built-in display" | ||||
| msgstr "Pantalla integrada" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:950 | ||||
| #: src/backends/meta-monitor-manager.c:930 | ||||
| msgid "Unknown" | ||||
| msgstr "Desconocida" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:952 | ||||
| #: src/backends/meta-monitor-manager.c:932 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Pantalla desconocida" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:960 | ||||
| #: src/backends/meta-monitor-manager.c:940 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:476 | ||||
| #: src/compositor/compositor.c:481 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| @@ -561,62 +581,65 @@ msgstr "" | ||||
| "Ya existe un gestor de composición ejecutándose en la monitor %i, pantalla " | ||||
| "«%s»." | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| #: src/core/bell.c:254 | ||||
| msgid "Bell event" | ||||
| msgstr "Evento de campana" | ||||
|  | ||||
| #: src/core/display.c:608 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| #: src/core/main.c:191 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Desactivar conexión al gestor de sesión" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| #: src/core/main.c:197 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Reemplazar el gestor de ventanas en ejecución" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| #: src/core/main.c:203 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Especificar el ID se gestión de sesión" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| #: src/core/main.c:208 | ||||
| msgid "X Display to use" | ||||
| msgstr "Pantalla X que usar" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| #: src/core/main.c:214 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Inicializar sesión desde el archivo de salvaguarda" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| #: src/core/main.c:220 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Hacer que las llamadas a las X sean síncronas" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| #: src/core/main.c:227 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Ejecutar como compositor Wayland" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| #: src/core/main.c:233 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Ejecutar como compositor anidado" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run wayland compositor without starting Xwayland" | ||||
| msgstr "Ejecutar el compositor wayland sin iniciar Xwayland" | ||||
|  | ||||
| #: src/core/main.c:247 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Ejecutar como servidor completo, en lugar de anidado" | ||||
|  | ||||
| #: src/core/main.c:253 | ||||
| msgid "Run with X11 backend" | ||||
| msgstr "Ejecutar con «backend» de X11" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:147 | ||||
| #: src/core/meta-close-dialog-default.c:148 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "«%s» no está respondiendo." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:149 | ||||
| #: src/core/meta-close-dialog-default.c:150 | ||||
| msgid "Application is not responding." | ||||
| msgstr "La aplicación no está respondiendo." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:154 | ||||
| #: src/core/meta-close-dialog-default.c:155 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| @@ -624,11 +647,11 @@ msgstr "" | ||||
| "Puede elegir esperar un rato para ver si continua o forzar la aplicación " | ||||
| "para cerrarla completamente." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Forzar la salida" | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Wait" | ||||
| msgstr "_Esperar" | ||||
|  | ||||
| @@ -656,12 +679,21 @@ msgstr "Imprimir versión" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Complemento de mutter que usar" | ||||
|  | ||||
| #: src/core/prefs.c:1997 | ||||
| #: src/core/prefs.c:1915 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Área de trabajo %d" | ||||
|  | ||||
| #: src/core/screen.c:580 | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter fue compilado sin soporte para modo prolijo\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:567 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Cambiar modo: modo %d" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:666 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| @@ -670,21 +702,21 @@ msgstr "" | ||||
| "La pantalla «%s» ya tiene un gestor de ventanas; pruebe a usar la opción «--" | ||||
| "replace» para reemplazar el gestor de ventanas activo." | ||||
|  | ||||
| #: src/core/screen.c:665 | ||||
| #: src/x11/meta-x11-display.c:1010 | ||||
| msgid "Failed to initialize GDK\n" | ||||
| msgstr "Falló al inicializar GDK\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1034 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1117 | ||||
| #, c-format | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "La ventana %d en la pantalla «%s» no es válida\n" | ||||
|  | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter fue compilado sin soporte para modo prolijo\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Cambiar modo: modo %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #: src/x11/session.c:1819 | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| @@ -692,11 +724,26 @@ msgstr "" | ||||
| "Estas ventanas no soportan «guardar la configuración actual» y tendrán que " | ||||
| "reiniciarse manualmente la próxima vez que inicie una sesión." | ||||
|  | ||||
| #: src/x11/window-props.c:559 | ||||
| #: src/x11/window-props.c:565 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (on %s)" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the left" | ||||
| #~ msgstr "Mover la ventana un área de trabajo a la izquierda" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the right" | ||||
| #~ msgstr "Mover la ventana un área de trabajo a la derecha" | ||||
|  | ||||
| #~ msgid "Move to workspace left" | ||||
| #~ msgstr "Mover al área de trabajo de la izquierda" | ||||
|  | ||||
| #~ msgid "Move to workspace right" | ||||
| #~ msgstr "Mover al área de trabajo de la derecha" | ||||
|  | ||||
| #~ msgid "Toggle shaded state" | ||||
| #~ msgstr "Cambiar el estado de enrollado" | ||||
|  | ||||
| #~ msgid "background texture could not be created from file" | ||||
| #~ msgstr "no se pudo crear la textura de fondo a partir de archivo" | ||||
|  | ||||
|   | ||||
							
								
								
									
										156
									
								
								po/eu.po
									
									
									
									
									
								
							
							
						
						
									
										156
									
								
								po/eu.po
									
									
									
									
									
								
							| @@ -8,10 +8,10 @@ | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter master\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2017-02-16 01:44+0000\n" | ||||
| "PO-Revision-Date: 2017-02-16 22:07+0100\n" | ||||
| "POT-Creation-Date: 2017-08-21 04:46+0000\n" | ||||
| "PO-Revision-Date: 2017-08-27 16:47+0200\n" | ||||
| "Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n" | ||||
| "Language-Team: Basque <librezale@librezale.eus>\n" | ||||
| "Language: eu\n" | ||||
| @@ -270,11 +270,6 @@ msgid "Modifier to use for extended window management operations" | ||||
| msgstr "Aldatzailea leihoak kudeatzeko eragiketa hedatuetan erabiltzeko" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:8 | ||||
| #| msgid "" | ||||
| #| "This key will initiate the \"overlay\", which is a combination window " | ||||
| #| "overview and application launching system. The default is intended to be " | ||||
| #| "the \"Windows key\" on PC hardware. It's expected that this binding " | ||||
| #| "either the default or set to the empty string." | ||||
| msgid "" | ||||
| "This key will initiate the “overlay”, which is a combination window overview " | ||||
| "and application launching system. The default is intended to be the “Windows " | ||||
| @@ -320,10 +315,6 @@ msgid "Workspaces are managed dynamically" | ||||
| msgstr "Laneko areak dinamikoki kudeatzen dira" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:41 | ||||
| #| msgid "" | ||||
| #| "Determines whether workspaces are managed dynamically or whether there's " | ||||
| #| "a static number of workspaces (determined by the num-workspaces key in " | ||||
| #| "org.gnome.desktop.wm.preferences)." | ||||
| msgid "" | ||||
| "Determines whether workspaces are managed dynamically or whether there’s a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| @@ -362,10 +353,6 @@ msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "Atzeratu fokuaren aldaketa erakuslea mugitzeari utzi arte" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:69 | ||||
| #| msgid "" | ||||
| #| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then " | ||||
| #| "the focus will not be changed immediately when entering a window, but " | ||||
| #| "only after the pointer stops moving." | ||||
| msgid "" | ||||
| "If set to true, and the focus mode is either “sloppy” or “mouse” then the " | ||||
| "focus will not be changed immediately when entering a window, but only after " | ||||
| @@ -380,9 +367,6 @@ msgid "Draggable border width" | ||||
| msgstr "Ertz arrastragarriaren zabalera" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:80 | ||||
| #| msgid "" | ||||
| #| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| #| "not enough, invisible borders will be added to meet this value." | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme’s visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| @@ -414,14 +398,50 @@ msgstr "" | ||||
| "TRUE (egia) denean, leiho berriak beti jarriko dira monitorearen pantaila " | ||||
| "aktiboaren zentroan." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:120 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:107 | ||||
| msgid "Enable experimental features" | ||||
| msgstr "Gaitu eginbide esperimentalak" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:108 | ||||
| msgid "" | ||||
| "To enable experimental features, add the feature keyword to the list. " | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart." | ||||
| msgstr "" | ||||
| "Eginbide esperimentalak gaitzeko, gehitu eginbidearen gakoa zerrendari. " | ||||
| "Eginbideak osatzailea berrabiaraztea behar duen edo ez emandako eginbidearen " | ||||
| "arabera dago. Ez da derrigorrezkoa edozer eginbide esperimental eskuragarri " | ||||
| "edo konfiguragarria egotea. Ez uste ezarpen honetan edozer gehitzeak " | ||||
| "etorkizuneko " | ||||
| "proba izango denik. Gako erabilgarriak: " | ||||
| "• “scale-monitor-framebuffer” — honek mutter monitoreen diseinu logikoetara " | ||||
| "lehenesten du espazioaren koordenatuko pixel logikoetan (leihoaren edukiaren " | ||||
| "ordez " | ||||
| "monitorearen framebufferra eskalatzean) HiDPI monitoreak kudeatzeko. Ez du " | ||||
| "berrabiaraztea eskatzen." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:141 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Hautatu leihoa laster-fitxatik" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:125 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:146 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Utzi laster-fitxa" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| #| msgid "Switch monitor" | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Aldatu monitorearen konfigurazioak" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "Biratu barneko monitorearen konfigurazioa" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:6 | ||||
| msgid "Switch to VT 1" | ||||
| msgstr "Aldatu 1. TBra" | ||||
| @@ -470,92 +490,65 @@ msgstr "Aldatu 11. TBra" | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "Aldatu 12. TBra" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:54 | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Gaitu berriro laster-teklak" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1759 | ||||
| #: src/backends/meta-input-settings.c:2151 | ||||
| #, c-format | ||||
| #| msgid "Mode Switch: Mode %d" | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Modu aldaketa (%d taldea)" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1781 | ||||
| #: src/backends/meta-input-settings.c:2174 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Aldatu monitorea" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:1783 | ||||
| #: src/backends/meta-input-settings.c:2176 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Erakutsi pantailako laguntza" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:675 | ||||
| #: src/backends/meta-monitor-manager.c:903 | ||||
| msgid "Built-in display" | ||||
| msgstr "Bertako pantaila" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:698 | ||||
| #: src/backends/meta-monitor-manager.c:926 | ||||
| msgid "Unknown" | ||||
| msgstr "Ezezaguna" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:700 | ||||
| #: src/backends/meta-monitor-manager.c:928 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Pantaila ezezaguna" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:708 | ||||
| #: src/backends/meta-monitor-manager.c:936 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:471 | ||||
| #: src/compositor/compositor.c:476 | ||||
| #, c-format | ||||
| #| msgid "" | ||||
| #| "Another compositing manager is already running on screen %i on display " | ||||
| #| "\"%s\"." | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| msgstr "" | ||||
| "Dagoeneko beste konposatze-kudeatzailea ari da exekutatzen “%2$s“ " | ||||
| "pantailako %1$i. monitorean." | ||||
| "Dagoeneko beste konposatze-kudeatzailea ari da exekutatzen “%2$s“ pantailako " | ||||
| "%1$i. monitorean." | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| msgid "Bell event" | ||||
| msgstr "Soinuaren gertaera" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/delete.c:127 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "'%s'(e)k ez du erantzuten." | ||||
|  | ||||
| #: src/core/delete.c:129 | ||||
| msgid "Application is not responding." | ||||
| msgstr "Aplikazioak ez du erantzuten." | ||||
|  | ||||
| #: src/core/delete.c:134 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "" | ||||
| "Aukeratu piskatean zai egotea aplikazioak jarraitzeko edo derrigortu " | ||||
| "aplikazioa erabat ixtea." | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Behartu ixtera" | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| msgid "_Wait" | ||||
| msgstr "_Itxaron" | ||||
|  | ||||
| #: src/core/display.c:608 | ||||
| #, c-format | ||||
| #| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Huts egin du X Window sistemaren “%s“ pantaila irekitzean\n" | ||||
|  | ||||
| @@ -595,14 +588,34 @@ msgstr "Exekutatu habiaratutako konposatzaile gisa" | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Exekutatu pantaila-zerbitzari oso bezala, habiaratuta baino" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:147 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "'%s'(e)k ez du erantzuten." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:149 | ||||
| msgid "Application is not responding." | ||||
| msgstr "Aplikazioak ez du erantzuten." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:154 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "" | ||||
| "Aukeratu piskatean zai egotea aplikazioak jarraitzeko edo derrigortu " | ||||
| "aplikazioa erabat ixtea." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Behartu ixtera" | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Wait" | ||||
| msgstr "_Itxaron" | ||||
|  | ||||
| #: src/core/mutter.c:39 | ||||
| #, c-format | ||||
| #| msgid "" | ||||
| #| "mutter %s\n" | ||||
| #| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| #| "This is free software; see the source for copying conditions.\n" | ||||
| #| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " | ||||
| #| "PARTICULAR PURPOSE.\n" | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| @@ -631,9 +644,6 @@ msgstr "%d. laneko area" | ||||
|  | ||||
| #: src/core/screen.c:580 | ||||
| #, c-format | ||||
| #| msgid "" | ||||
| #| "Display \"%s\" already has a window manager; try using the --replace " | ||||
| #| "option to replace the current window manager." | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| "replace the current window manager." | ||||
| @@ -643,7 +653,6 @@ msgstr "" | ||||
|  | ||||
| #: src/core/screen.c:665 | ||||
| #, c-format | ||||
| #| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "“%2$s“ bistaratzeko %1$d pantaila ez da baliozkoa\n" | ||||
|  | ||||
| @@ -657,9 +666,6 @@ msgid "Mode Switch: Mode %d" | ||||
| msgstr "Modu aldaketa: %d modua" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #| msgid "" | ||||
| #| "These windows do not support "save current setup" and will have " | ||||
| #| "to be restarted manually next time you log in." | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
|   | ||||
							
								
								
									
										455
									
								
								po/fi.po
									
									
									
									
									
								
							
							
						
						
									
										455
									
								
								po/fi.po
									
									
									
									
									
								
							| @@ -12,10 +12,10 @@ | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2015-03-13 11:15+0000\n" | ||||
| "PO-Revision-Date: 2015-03-13 17:52+0200\n" | ||||
| "POT-Creation-Date: 2017-08-29 16:09+0000\n" | ||||
| "PO-Revision-Date: 2017-08-30 19:16+0300\n" | ||||
| "Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n" | ||||
| "Language-Team: suomi <gnome-fi-laatu@lists.sourceforge.net>\n" | ||||
| "Language: fi\n" | ||||
| @@ -24,282 +24,288 @@ msgstr "" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "X-POT-Import-Date: 2012-02-19 15:25:23+0000\n" | ||||
| "X-Generator: Gtranslator 2.91.6\n" | ||||
| "X-Generator: Poedit 1.8.7.1\n" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:1 | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| msgid "Navigation" | ||||
| msgstr "Navigointi" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:2 | ||||
| #: data/50-mutter-navigation.xml:9 | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "Siirrä ikkuna työtilaan 1" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:3 | ||||
| #: data/50-mutter-navigation.xml:12 | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "Siirrä ikkuna työtilaan 2" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:4 | ||||
| #: data/50-mutter-navigation.xml:15 | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "Siirrä ikkuna työtilaan 3" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:5 | ||||
| #: data/50-mutter-navigation.xml:18 | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "Siirrä ikkuna työtilaan 4" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:6 | ||||
| #: data/50-mutter-navigation.xml:21 | ||||
| msgid "Move window to last workspace" | ||||
| msgstr "Siirrä ikkuna viimeiseen työtilaan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:7 | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Siirrä ikkunaa yksi työtila vasemmalle" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:8 | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Siirrä ikkunaa yksi työtila oikealle" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:9 | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Siirrä ikkunaa yksi työtila ylös" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:10 | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Siirrä ikkunaa yksi työtila alas" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:11 | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Siirrä ikkuna yhden näytön verran vasemmalle" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:12 | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Siirrä ikkuna yhden näytön verran oikealle" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:13 | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Siirrä ikkuna yhden näytön verran ylös" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:14 | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Siirrä ikkuna yhden näytön verran alas" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:15 | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| msgid "Switch applications" | ||||
| msgstr "Vaihda sovelluksia" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:16 | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Vaihda edelliseen sovellukseen" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:17 | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| msgid "Switch windows" | ||||
| msgstr "Vaihda ikkunoita" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:18 | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Vaihda edelliseen ikkunaan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:19 | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Vaihda sovelluksen ikkunoiden välillä" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:20 | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Vaihda sovelluksen edelliseen ikkunaan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:21 | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| #, fuzzy | ||||
| msgid "Switch system controls" | ||||
| msgstr "Vaihda järjestelmän kontrolleja" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:22 | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| #, fuzzy | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Vaihda järjestelmän kontrolleja" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:23 | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Vaihda ikkunoita suoraan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:24 | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Vaihda suoraan edelliseen ikkunaan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:25 | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Vaihda sovelluksen ikkunoiden välillä suoraan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:26 | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| #, fuzzy | ||||
| #| msgid "Switch windows of an application" | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Vaihda sovelluksen ikkunoiden välillä" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:27 | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| #, fuzzy | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Vaihda järjestelmän kontrolleja suoraan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:28 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| #, fuzzy | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Vaihda järjestelmän kontrolleja" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:29 | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Piilota kaikki tavalliset ikkunat" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:30 | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Siirry työtilaan 1" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:31 | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Siirry työtilaan 2" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:32 | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Siirry työtilaan 3" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:33 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Siirry työtilaan 4" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:34 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Siirry viimeiseen työtilaan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:35 | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Siirrä vasemmalla olevaan työtilaan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:36 | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Siirrä oikealla olevaan työtilaan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:37 | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Siirrä yllä olevaan työtilaan" | ||||
|  | ||||
| #: ../data/50-mutter-navigation.xml.in.h:38 | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Siirrä alla olevaan työtilaan" | ||||
|  | ||||
| #: ../data/50-mutter-system.xml.in.h:1 | ||||
| #: data/50-mutter-system.xml:6 | ||||
| msgid "System" | ||||
| msgstr "Järjestelmä" | ||||
|  | ||||
| #: ../data/50-mutter-system.xml.in.h:2 | ||||
| #: data/50-mutter-system.xml:8 | ||||
| msgid "Show the run command prompt" | ||||
| msgstr "Näytä komennonsuorituskehote" | ||||
|  | ||||
| #: ../data/50-mutter-system.xml.in.h:3 | ||||
| #: data/50-mutter-system.xml:10 | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Näytä toimintojen yleisnäkymä" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:1 | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Ikkunat" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:2 | ||||
| #: data/50-mutter-windows.xml:8 | ||||
| msgid "Activate the window menu" | ||||
| msgstr "Aktivoi ikkunavalikko" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:3 | ||||
| #: data/50-mutter-windows.xml:10 | ||||
| msgid "Toggle fullscreen mode" | ||||
| msgstr "Vaihda koko näytön tilaan tai pois" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:4 | ||||
| #: data/50-mutter-windows.xml:12 | ||||
| #, fuzzy | ||||
| msgid "Toggle maximization state" | ||||
| msgstr "Vaihda suurennustilaa" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:5 | ||||
| #: data/50-mutter-windows.xml:14 | ||||
| msgid "Maximize window" | ||||
| msgstr "Suurenna ikkuna" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:6 | ||||
| #: data/50-mutter-windows.xml:16 | ||||
| msgid "Restore window" | ||||
| msgstr "Palauta ikkunan koko" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:7 | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| #, fuzzy | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Vaihda rullaustilaa" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:8 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Sulje ikkuna" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:9 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Hide window" | ||||
| msgstr "Piilota ikkuna" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:10 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Move window" | ||||
| msgstr "Siirrä ikkunaa" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:11 | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| msgid "Resize window" | ||||
| msgstr "Muuta ikkunan kokoa" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:12 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| #, fuzzy | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Valitse onko ikkuna yhdessä vai kaikissa työtiloissa" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:13 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Nosta ikkuna, jos se on peittynyt, muuten laske se" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:14 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Nosta ikkuna muiden päälle" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:15 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Laske ikkuna muiden alle" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:16 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Suurenna ikkuna pystysuunnassa" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:17 | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Suurenna ikkuna vaakasuunnassa" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:18 | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| msgid "View split on left" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/50-mutter-windows.xml.in.h:19 | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| msgid "View split on right" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/mutter.desktop.in.h:1 | ||||
| #: data/mutter.desktop.in:4 | ||||
| msgid "Mutter" | ||||
| msgstr "Mutter" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:1 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:7 | ||||
| msgid "Modifier to use for extended window management operations" | ||||
| msgstr "Muunnosnäppäin laajennettuja ikkunoidenhallintatoimintoja varten" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:2 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:8 | ||||
| #, fuzzy | ||||
| #| msgid "" | ||||
| #| "This key will initiate the \"overlay\", which is a combination window " | ||||
| #| "overview and application launching system. The default is intended to be " | ||||
| #| "the \"Windows key\" on PC hardware. It's expected that this binding " | ||||
| #| "either the default or set to the empty string." | ||||
| msgid "" | ||||
| "This key will initiate the \"overlay\", which is a combination window " | ||||
| "overview and application launching system. The default is intended to be the " | ||||
| "\"Windows key\" on PC hardware. It's expected that this binding either the " | ||||
| "default or set to the empty string." | ||||
| "This key will initiate the “overlay”, which is a combination window overview " | ||||
| "and application launching system. The default is intended to be the “Windows " | ||||
| "key” on PC hardware. It’s expected that this binding either the default or " | ||||
| "set to the empty string." | ||||
| msgstr "" | ||||
| "Tämä avain asettaa ”overlay”-tilan (peite), joka on yhdistelmä " | ||||
| "ikkunoidenhallintaa ja sovellusten käynnistämisjärjestelmää. Oletuksena " | ||||
| "käytetään ”Windows”-näppäintä PC-tietokoneissa. Odotuksena on, että tämä " | ||||
| "näppäinsidos on joko oletus tai sen arvona on tyhjä." | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:3 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:20 | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "Liitä modaalisia valintaikkunoita" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:4 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:21 | ||||
| msgid "" | ||||
| "When true, instead of having independent titlebars, modal dialogs appear " | ||||
| "attached to the titlebar of the parent window and are moved together with " | ||||
| @@ -309,33 +315,33 @@ msgstr "" | ||||
| "liitetään pääikkunan otsikkopalkkiin ja niitä siirretään yhdessä pääikkunan " | ||||
| "kanssa." | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:5 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:30 | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:6 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:31 | ||||
| msgid "" | ||||
| "If enabled, dropping windows on vertical screen edges maximizes them " | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:7 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:40 | ||||
| msgid "Workspaces are managed dynamically" | ||||
| msgstr "Työtilat hallitaan dynaamisesti" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:8 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:41 | ||||
| msgid "" | ||||
| "Determines whether workspaces are managed dynamically or whether there's a " | ||||
| "Determines whether workspaces are managed dynamically or whether there’s a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:9 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:50 | ||||
| msgid "Workspaces only on primary" | ||||
| msgstr "Työtilat vain ensisijaisella" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:10 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:51 | ||||
| msgid "" | ||||
| "Determines whether workspace switching should happen for windows on all " | ||||
| "monitors or only for windows on the primary monitor." | ||||
| @@ -343,222 +349,289 @@ msgstr "" | ||||
| "Määrittää tapahtuuko työtilan vaihto ikkunoille kaikilla näytöillä vaiko " | ||||
| "vain ikkunoille ensisijaisella näytöllä." | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:11 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:59 | ||||
| msgid "No tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:12 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:60 | ||||
| msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:13 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:68 | ||||
| msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "" | ||||
| "Viivästytä kohdistuksen vaihtumista, kunnes osoitin lopettaa liikkumisen" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:14 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:69 | ||||
| msgid "" | ||||
| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then " | ||||
| "the focus will not be changed immediately when entering a window, but only " | ||||
| "after the pointer stops moving." | ||||
| "If set to true, and the focus mode is either “sloppy” or “mouse” then the " | ||||
| "focus will not be changed immediately when entering a window, but only after " | ||||
| "the pointer stops moving." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:15 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:79 | ||||
| msgid "Draggable border width" | ||||
| msgstr "Raahattava reunaleveys" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:16 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:80 | ||||
| #, fuzzy | ||||
| #| msgid "" | ||||
| #| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| #| "not enough, invisible borders will be added to meet this value." | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "The amount of total draggable borders. If the theme’s visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
| "Raahattavien reunojen määrä yhteensä. Mikäli teeman näkyvät reunat eivät " | ||||
| "riitä, näkymätöntä reunaa lisätään täyttämään tämä arvo." | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:17 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:89 | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:18 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:90 | ||||
| msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:19 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:98 | ||||
| msgid "Place new windows in the center" | ||||
| msgstr "Aseta uudet ikkunat keskelle näyttöä" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:20 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:99 | ||||
| msgid "" | ||||
| "When true, the new windows will always be put in the center of the active " | ||||
| "screen of the monitor." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:21 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:107 | ||||
| msgid "Enable experimental features" | ||||
| msgstr "Ota käyttöön kokeelliset ominaisuudet" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:108 | ||||
| msgid "" | ||||
| "To enable experimental features, add the feature keyword to the list. " | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " | ||||
| "enables remote desktop support. To support remote desktop with screen " | ||||
| "sharing, “screen-cast” must also be enabled. • “screen-cast” — enables " | ||||
| "screen cast support." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:145 | ||||
| #, fuzzy | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Poista ikkuna päältä" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.gschema.xml.in.h:22 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:150 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:155 | ||||
| #, fuzzy | ||||
| #| msgid "Switch applications" | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Vaihda sovelluksia" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:160 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:6 | ||||
| msgid "Switch to VT 1" | ||||
| msgstr "Siirry virtuaalikonsoliin 1" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2 | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:10 | ||||
| msgid "Switch to VT 2" | ||||
| msgstr "Siirry virtuaalikonsoliin 2" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3 | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:14 | ||||
| msgid "Switch to VT 3" | ||||
| msgstr "Siirry virtuaalikonsoliin 3" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4 | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:18 | ||||
| msgid "Switch to VT 4" | ||||
| msgstr "Siirry virtuaalikonsoliin 4" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5 | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:22 | ||||
| msgid "Switch to VT 5" | ||||
| msgstr "Siirry virtuaalikonsoliin 5" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6 | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:26 | ||||
| msgid "Switch to VT 6" | ||||
| msgstr "Siirry virtuaalikonsoliin 6" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7 | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:30 | ||||
| msgid "Switch to VT 7" | ||||
| msgstr "Siirry virtuaalikonsoliin 7" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8 | ||||
| #| msgid "Switch to VT 1" | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:34 | ||||
| msgid "Switch to VT 8" | ||||
| msgstr "Siirry virtuaalikonsoliin 8" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9 | ||||
| #| msgid "Switch to VT 1" | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:38 | ||||
| msgid "Switch to VT 9" | ||||
| msgstr "Siirry virtuaalikonsoliin 9" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10 | ||||
| #| msgid "Switch to VT 1" | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:42 | ||||
| msgid "Switch to VT 10" | ||||
| msgstr "Siirry virtuaalikonsoliin 10" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11 | ||||
| #| msgid "Switch to VT 1" | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:46 | ||||
| msgid "Switch to VT 11" | ||||
| msgstr "Siirry virtuaalikonsoliin 11" | ||||
|  | ||||
| #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12 | ||||
| #| msgid "Switch to VT 1" | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:50 | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "Siirry virtuaalikonsoliin 12" | ||||
|  | ||||
| #: ../src/backends/meta-monitor-manager.c:364 | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:54 | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2151 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2174 | ||||
| #, fuzzy | ||||
| msgid "Switch monitor" | ||||
| msgstr "Vaihda järjestelmän kontrolleja" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:2176 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:903 | ||||
| msgid "Built-in display" | ||||
| msgstr "Sisäänrakennettu näyttö" | ||||
|  | ||||
| #: ../src/backends/meta-monitor-manager.c:391 | ||||
| #: src/backends/meta-monitor-manager.c:926 | ||||
| msgid "Unknown" | ||||
| msgstr "Tuntematon" | ||||
|  | ||||
| #: ../src/backends/meta-monitor-manager.c:393 | ||||
| #: src/backends/meta-monitor-manager.c:928 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Tuntematon näyttö" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: ../src/backends/meta-monitor-manager.c:401 | ||||
| #: src/backends/meta-monitor-manager.c:936 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:456 | ||||
| #, c-format | ||||
| #: src/compositor/compositor.c:476 | ||||
| #, fuzzy, c-format | ||||
| #| msgid "" | ||||
| #| "Another compositing manager is already running on screen %i on display " | ||||
| #| "\"%s\"." | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| msgstr "" | ||||
| "Näytön ”%2$s” ruudullä %1$d on jo käynnissä toinen ikkunoidenladontaohjelman." | ||||
|  | ||||
| #: ../src/core/bell.c:185 | ||||
| #: src/core/bell.c:194 | ||||
| msgid "Bell event" | ||||
| msgstr "Äänimerkki" | ||||
|  | ||||
| #: ../src/core/delete.c:127 | ||||
| #: src/core/display.c:608 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "X-ikkunointijärjestelmän näytön “%s” avaaminen epäonnistui\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Estä yhteys sessionhallintaan" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Vaihda käytössä oleva ikkunanhallinta" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Anna sessionhallinnan ID" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| msgid "X Display to use" | ||||
| msgstr "Käytettävä X-näyttö" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Alusta sessio tiedostosta" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Käytä synkronisia X-kutsuja" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Suorita wayland-koostajana" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| #, fuzzy | ||||
| #| msgid "Run as a wayland compositor" | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Suorita wayland-koostajana" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:147 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "\"%s\" ei vastaa." | ||||
|  | ||||
| #: ../src/core/delete.c:129 | ||||
| #: src/core/meta-close-dialog-default.c:149 | ||||
| msgid "Application is not responding." | ||||
| msgstr "Sovellus ei vastaa." | ||||
|  | ||||
| #: ../src/core/delete.c:134 | ||||
| #: src/core/meta-close-dialog-default.c:154 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "" | ||||
| "Voit odottaa sovellusta vielä hetken tai sulkea sovelluksen väkisin heti." | ||||
|  | ||||
| #: ../src/core/delete.c:141 | ||||
| msgid "_Wait" | ||||
| msgstr "_Odota" | ||||
|  | ||||
| #: ../src/core/delete.c:141 | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Force Quit" | ||||
| msgstr "Sulje _väkisin" | ||||
|  | ||||
| #: ../src/core/display.c:562 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "X-ikkunointijärjestelmän näytön ”%s” avaaminen epäonnistui\n" | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Wait" | ||||
| msgstr "_Odota" | ||||
|  | ||||
| #: ../src/core/main.c:176 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Estä yhteys sessionhallintaan" | ||||
|  | ||||
| #: ../src/core/main.c:182 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Vaihda käytössä oleva ikkunanhallinta" | ||||
|  | ||||
| #: ../src/core/main.c:188 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Anna sessionhallinnan ID" | ||||
|  | ||||
| #: ../src/core/main.c:193 | ||||
| msgid "X Display to use" | ||||
| msgstr "Käytettävä X-näyttö" | ||||
|  | ||||
| #: ../src/core/main.c:199 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Alusta sessio tiedostosta" | ||||
|  | ||||
| #: ../src/core/main.c:205 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Käytä synkronisia X-kutsuja" | ||||
|  | ||||
| #: ../src/core/main.c:212 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Suorita wayland-koostajana" | ||||
|  | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../src/core/mutter.c:39 | ||||
| #, c-format | ||||
| #: src/core/mutter.c:39 | ||||
| #, fuzzy, c-format | ||||
| #| msgid "" | ||||
| #| "mutter %s\n" | ||||
| #| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| #| "This is free software; see the source for copying conditions.\n" | ||||
| #| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " | ||||
| #| "PARTICULAR PURPOSE.\n" | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "This is free software; see the source for copying conditions.\n" | ||||
| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " | ||||
| "PARTICULAR PURPOSE.\n" | ||||
| @@ -569,49 +642,59 @@ msgstr "" | ||||
| "Ei MINKÄÄNLAISTA takuuta: ei edes takuuta MYYNTIKELPOISUUDESTA tai\n" | ||||
| "SOPIVUUDESTA JOHONKIN KÄYTTÖÖN.\n" | ||||
|  | ||||
| #: ../src/core/mutter.c:53 | ||||
| #: src/core/mutter.c:53 | ||||
| msgid "Print version" | ||||
| msgstr "Näytä versio" | ||||
|  | ||||
| #: ../src/core/mutter.c:59 | ||||
| #: src/core/mutter.c:59 | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Käytettävä Mutter-liitännäinen" | ||||
|  | ||||
| #: ../src/core/prefs.c:2004 | ||||
| #: src/core/prefs.c:1997 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Työtila %d" | ||||
|  | ||||
| #: ../src/core/screen.c:525 | ||||
| #, c-format | ||||
| #: src/core/screen.c:580 | ||||
| #, fuzzy, 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" | ||||
| #| "Display \"%s\" already has a window manager; try using the --replace " | ||||
| #| "option to replace the current window manager." | ||||
| msgid "" | ||||
| "Display \"%s\" already has a window manager; try using the --replace option " | ||||
| "to replace the current window manager." | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| "replace the current window manager." | ||||
| msgstr "" | ||||
| "Näytöllä ”%s” on jo ikkunointiohjelma: kokeile valitsinta --replace, jos " | ||||
| "haluat korvata nykyisen ikkunointiohjelman." | ||||
|  | ||||
| #: ../src/core/screen.c:607 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| #: src/core/screen.c:665 | ||||
| #, fuzzy, c-format | ||||
| #| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "Näytön ”%2$s” ruutu %1$d ei ole kelvollinen\n" | ||||
|  | ||||
| #: ../src/core/util.c:118 | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter on käännetty ilman tukea monisanaisille ilmoituksille\n" | ||||
|  | ||||
| #: ../src/x11/session.c:1815 | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #, fuzzy | ||||
| #| msgid "" | ||||
| #| "These windows do not support "save current setup" and will have " | ||||
| #| "to be restarted manually next time you log in." | ||||
| msgid "" | ||||
| "These windows do not support "save current setup" and will have to " | ||||
| "be restarted manually next time you log in." | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| msgstr "" | ||||
| "Nämä ikkunat eivät ymmärrä ”tallenna nykyinen tila”-komentoa, ja ne täytyy " | ||||
| "käynnistää käsin uudelleen kun kirjaudut seuraavan kerran sisään." | ||||
|  | ||||
| #: ../src/x11/window-props.c:549 | ||||
| #: src/x11/window-props.c:559 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s @ %s" | ||||
|   | ||||
							
								
								
									
										499
									
								
								po/fr.po
									
									
									
									
									
								
							
							
						
						
									
										499
									
								
								po/fr.po
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| # French translation of mutter. | ||||
| # Copyright (C) 2002-2017 Free Software Foundation, Inc. | ||||
| # Copyright (C) 2002-2018 Free Software Foundation, Inc. | ||||
| # This file is distributed under the same license as the metacity package. | ||||
| # | ||||
| # Christophe Fergeau <teuf@users.sourceforge.net>, 2002. | ||||
| @@ -11,22 +11,24 @@ | ||||
| # Cyprien Le Pannérer <cyplp@free.fr>, 2006. | ||||
| # Robert-André Mauchin <zebob.m@gmail.com>, 2007. | ||||
| # Stéphane Raimbault <stephane.raimbault@gmail.com>, 2007. | ||||
| # Claude Paroz <claude@2xlibre.net>, 2008-2017. | ||||
| # Claude Paroz <claude@2xlibre.net>, 2008-2018. | ||||
| # Bruno Brouard <annoa.b@gmail.com>, 2011-12. | ||||
| # Charles Monzat <superboa@hotmail.fr>, 2016. | ||||
| # Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, 2017. | ||||
| # Charles Monzat <superboa@hotmail.fr>, 2016, 2017. | ||||
| # | ||||
| 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: 2017-02-16 01:44+0000\n" | ||||
| "PO-Revision-Date: 2017-02-17 21:09+0100\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n" | ||||
| "POT-Creation-Date: 2018-07-07 09:58+0000\n" | ||||
| "PO-Revision-Date: 2018-07-24 10:22+0200\n" | ||||
| "Last-Translator: Claude Paroz <claude@2xlibre.net>\n" | ||||
| "Language-Team: GNOME French Team <gnomefr@traduc.org>\n" | ||||
| "Language-Team: français <gnomefr@traduc.org>\n" | ||||
| "Language: fr\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| msgid "Navigation" | ||||
| @@ -34,153 +36,137 @@ msgstr "Navigation" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:9 | ||||
| msgid "Move window to workspace 1" | ||||
| msgstr "Déplacer la fenêtre vers l'espace de travail 1" | ||||
| msgstr "Déplacer la fenêtre vers l’espace de travail 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:12 | ||||
| msgid "Move window to workspace 2" | ||||
| msgstr "Déplacer la fenêtre vers l'espace de travail 2" | ||||
| msgstr "Déplacer la fenêtre vers l’espace de travail 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:15 | ||||
| msgid "Move window to workspace 3" | ||||
| msgstr "Déplacer la fenêtre vers l'espace de travail 3" | ||||
| msgstr "Déplacer la fenêtre vers l’espace de travail 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:18 | ||||
| msgid "Move window to workspace 4" | ||||
| msgstr "Déplacer la fenêtre vers l'espace de travail 4" | ||||
| msgstr "Déplacer la fenêtre vers l’espace de travail 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:21 | ||||
| msgid "Move window to last workspace" | ||||
| msgstr "Déplacer la fenêtre vers le dernier espace de travail" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Déplacer la fenêtre d'un espace de travail vers la gauche" | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Déplacer la fenêtre d’un espace de travail vers le haut" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Déplacer la fenêtre d'un espace de travail vers la droite" | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Déplacer la fenêtre d’un espace de travail vers le bas" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Déplacer la fenêtre d'un espace de travail vers le haut" | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Déplacer la fenêtre d’un écran vers la gauche" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Déplacer la fenêtre d'un espace de travail vers le bas" | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Déplacer la fenêtre d’un écran vers la droite" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Déplacer la fenêtre d'un écran vers la gauche" | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Déplacer la fenêtre d’un écran vers le haut" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Déplacer la fenêtre d'un écran vers la droite" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Déplacer la fenêtre d'un écran vers le haut" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Déplacer la fenêtre d'un écran vers le bas" | ||||
| msgstr "Déplacer la fenêtre d’un écran vers le bas" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| #: data/50-mutter-navigation.xml:43 | ||||
| msgid "Switch applications" | ||||
| msgstr "Changer d'application" | ||||
| msgstr "Changer d’application" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| #: data/50-mutter-navigation.xml:48 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Passer à l'application précédente" | ||||
| msgstr "Passer à l’application précédente" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| #: data/50-mutter-navigation.xml:52 | ||||
| msgid "Switch windows" | ||||
| msgstr "Changer de fenêtre" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| #: data/50-mutter-navigation.xml:57 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Passer à la fenêtre précédente" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| #: data/50-mutter-navigation.xml:61 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Changer de fenêtre d'une application" | ||||
| msgstr "Changer de fenêtre d’une application" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| #: data/50-mutter-navigation.xml:66 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Passer à la fenêtre précédente d'une application" | ||||
| msgstr "Passer à la fenêtre précédente d’une application" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| #: data/50-mutter-navigation.xml:70 | ||||
| msgid "Switch system controls" | ||||
| msgstr "Changer les contrôles système" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| #: data/50-mutter-navigation.xml:75 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Passer au contrôle système précédent" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| #: data/50-mutter-navigation.xml:79 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Changer de fenêtre directement" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| #: data/50-mutter-navigation.xml:84 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Passer directement à la fenêtre précédente" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| #: data/50-mutter-navigation.xml:88 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Changer de fenêtre d'une application directement" | ||||
| msgstr "Changer de fenêtre d’une application directement" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| #: data/50-mutter-navigation.xml:93 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Passer directement à la fenêtre précédente d'une application" | ||||
| msgstr "Passer directement à la fenêtre précédente d’une application" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| #: data/50-mutter-navigation.xml:97 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Changer les contrôles système directement" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| #: data/50-mutter-navigation.xml:102 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Passer directement au contrôle système précédent" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| #: data/50-mutter-navigation.xml:105 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Masquer toutes les fenêtres normales" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Passer à l'espace de travail 1" | ||||
| msgstr "Passer à l’espace de travail 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Passer à l’espace de travail 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Passer à l’espace de travail 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Passer à l'espace de travail 2" | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Passer à l’espace de travail 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Passer à l'espace de travail 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Passer à l'espace de travail 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Passer au dernier espace de travail" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Déplacer vers l'espace de travail de gauche" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Déplacer vers l'espace de travail de droite" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Déplacer vers l'espace de travail du dessus" | ||||
| msgstr "Déplacer vers l’espace de travail du dessus" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Déplacer vers l'espace de travail du dessous" | ||||
| msgstr "Déplacer vers l’espace de travail du dessous" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "Système" | ||||
|  | ||||
| @@ -190,7 +176,11 @@ msgstr "Afficher la fenêtre pour lancer une commande" | ||||
|  | ||||
| #: data/50-mutter-system.xml:10 | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Afficher l'aperçu des activités" | ||||
| msgstr "Afficher l’aperçu des activités" | ||||
|  | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "Restaurer les raccourcis clavier" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| @@ -206,7 +196,7 @@ msgstr "Basculer le mode plein écran" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:12 | ||||
| msgid "Toggle maximization state" | ||||
| msgstr "Basculer l'état d'agrandissement" | ||||
| msgstr "Basculer l’état d’agrandissement" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:14 | ||||
| msgid "Maximize window" | ||||
| @@ -217,55 +207,51 @@ msgid "Restore window" | ||||
| msgstr "Restaurer la fenêtre" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Basculer l'état de repli" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Fermer la fenêtre" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Hide window" | ||||
| msgstr "Masquer la fenêtre" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Move window" | ||||
| msgstr "Déplacer la fenêtre" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Resize window" | ||||
| msgstr "Redimensionner la fenêtre" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| #: data/50-mutter-windows.xml:27 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Placer la fenêtre sur tous les espaces de travail, ou sur un seul" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "" | ||||
| "Mettre la fenêtre au premier plan si elle est cachée, sinon à l'arrière-plan" | ||||
| "Mettre la fenêtre au premier plan si elle est cachée, sinon à l’arrière-plan" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Mettre la fenêtre au premier plan" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Mettre la fenêtre sous les autres fenêtres" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Maximiser la fenêtre verticalement" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Maximiser la fenêtre horizontalement" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| #: data/50-mutter-windows.xml:41 | ||||
| msgid "View split on left" | ||||
| msgstr "Vue divisée sur la gauche" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| #: data/50-mutter-windows.xml:45 | ||||
| msgid "View split on right" | ||||
| msgstr "Vue divisée sur la droite" | ||||
|  | ||||
| @@ -284,8 +270,8 @@ msgid "" | ||||
| "key” on PC hardware. It’s expected that this binding either the default or " | ||||
| "set to the empty string." | ||||
| msgstr "" | ||||
| "Cette touche initie l'« overlay », une combinaison d'aperçu des fenêtres et " | ||||
| "d'un système de lancement d'applications. La touche par défaut sur le " | ||||
| "Cette touche initie l’« overlay », une combinaison d’aperçu des fenêtres et " | ||||
| "d’un système de lancement d’applications. La touche par défaut sur le " | ||||
| "matériel PC est la touche Windows. En principe, ce raccourci est configuré " | ||||
| "sur le réglage par défaut ou sur la chaîne vide." | ||||
|  | ||||
| @@ -299,13 +285,13 @@ msgid "" | ||||
| "attached to the titlebar of the parent window and are moved together with " | ||||
| "the parent window." | ||||
| msgstr "" | ||||
| "Si vrai, au lieu d'avoir des barres de titre indépendantes, les boîtes de " | ||||
| "Si vrai, au lieu d’avoir des barres de titre indépendantes, les boîtes de " | ||||
| "dialogue apparaissent attachées à la barre de titre de la fenêtre parente et " | ||||
| "sont déplacées ensembles avec elle." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:30 | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "Activer l'empilage des fenêtres déposées sur les bords de l'écran" | ||||
| msgstr "Activer l’empilage des fenêtres déposées sur les bords de l’écran" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:31 | ||||
| msgid "" | ||||
| @@ -313,10 +299,10 @@ msgid "" | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
| "Si activé, le dépôt des fenêtres sur les bords verticaux de l'écran les " | ||||
| "Si activé, le dépôt des fenêtres sur les bords verticaux de l’écran les " | ||||
| "maximise verticalement et les redimensionne horizontalement pour recouvrir " | ||||
| "la moitié de la zone disponible. Le dépôt des fenêtres sur le bord supérieur " | ||||
| "de l'écran les maximise complètement." | ||||
| "de l’écran les maximise complètement." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:40 | ||||
| msgid "Workspaces are managed dynamically" | ||||
| @@ -329,20 +315,20 @@ msgid "" | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
| "Détermine si les espaces de travail sont gérés de manière dynamique ou si le " | ||||
| "nombre d'espaces de travail est fixe (déterminé par la clé num-workspaces " | ||||
| "nombre d’espaces de travail est fixe (déterminé par la clé num-workspaces " | ||||
| "dans org.gnome.desktop.wm.preferences)." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:50 | ||||
| msgid "Workspaces only on primary" | ||||
| msgstr "Espaces de travail seulement sur l'écran principal" | ||||
| msgstr "Espaces de travail seulement sur l’écran principal" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:51 | ||||
| msgid "" | ||||
| "Determines whether workspace switching should happen for windows on all " | ||||
| "monitors or only for windows on the primary monitor." | ||||
| msgstr "" | ||||
| "Détermine si le changement d'espace de travail doit se produire pour les " | ||||
| "fenêtres de tous les écrans ou seulement pour les fenêtres de l'écran " | ||||
| "Détermine si le changement d’espace de travail doit se produire pour les " | ||||
| "fenêtres de tous les écrans ou seulement pour les fenêtres de l’écran " | ||||
| "principal." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:59 | ||||
| @@ -354,12 +340,12 @@ msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
| "Détermine si l'utilisation de fenêtres surgissantes et de mise en valeur " | ||||
| "Détermine si l’utilisation de fenêtres surgissantes et de mise en valeur " | ||||
| "doit être désactivée pour la consultation des fenêtres." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:68 | ||||
| msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "Attend l'arrêt du pointeur avant le changement de focus" | ||||
| msgstr "Attend l’arrêt du pointeur avant le changement de focus" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:69 | ||||
| msgid "" | ||||
| @@ -369,7 +355,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Si défini à true et que le mode de focus est soit « sloppy » ou « souris », " | ||||
| "alors le focus ne sera pas changé immédiatement en passant sur une fenêtre, " | ||||
| "mais seulement après que le pointeur s'arrête." | ||||
| "mais seulement après que le pointeur s’arrête." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:79 | ||||
| msgid "Draggable border width" | ||||
| @@ -380,7 +366,7 @@ msgid "" | ||||
| "The amount of total draggable borders. If the theme’s visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
| "La taille totale des bordures que l'on peut déplacer. Si les bordures " | ||||
| "La taille totale des bordures que l’on peut déplacer. Si les bordures " | ||||
| "visibles du thème ne sont pas suffisantes, des bordures invisibles sont " | ||||
| "ajoutées pour arriver à cette valeur." | ||||
|  | ||||
| @@ -388,15 +374,15 @@ msgstr "" | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "" | ||||
| "Maximiser automatiquement les fenêtres dont la taille est proche de celle de " | ||||
| "l'écran" | ||||
| "l’écran" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:90 | ||||
| msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "" | ||||
| "Si activé, les nouvelles fenêtres qui ont presque la taille de l'écran à " | ||||
| "l'ouverture seront maximisées automatiquement." | ||||
| "Si activé, les nouvelles fenêtres qui ont presque la taille de l’écran à " | ||||
| "l’ouverture seront maximisées automatiquement." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:98 | ||||
| msgid "Place new windows in the center" | ||||
| @@ -408,70 +394,154 @@ msgid "" | ||||
| "screen of the monitor." | ||||
| msgstr "" | ||||
| "Si true (vrai), les nouvelles fenêtres seront toujours placées au centre de " | ||||
| "l'écran actif du moniteur." | ||||
| "l’écran actif du moniteur." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:120 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:107 | ||||
| msgid "Enable experimental features" | ||||
| msgstr "Activer les fonctionnalités expérimentales" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:108 | ||||
| msgid "" | ||||
| "To enable experimental features, add the feature keyword to the list. " | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart." | ||||
| msgstr "" | ||||
| "Pour activer les fonctionnalités expérimentales, ajoutez le mot-clé de la " | ||||
| "fonctionnalité dans la liste. Selon la fonctionnalité, il peut être " | ||||
| "nécessaire de redémarrer le compositeur. Chaque fonctionnalité expérimentale " | ||||
| "peut disparaître ou ne plus être configurable. Ne vous attendez pas à ce que " | ||||
| "le contenu de ce réglage soit stable dans le temps. Les mots-clés " | ||||
| "actuellement possibles sont : • « scale-monitor-framebuffer » — demande à " | ||||
| "mutter d’utiliser par défaut une disposition par moniteur logique dans un " | ||||
| "espace de coordonnées de pixels logique, tout en mettant à l’échelle les " | ||||
| "« framebuffers » de moniteur au lieu des contenus de fenêtre pour pouvoir " | ||||
| "gérer les moniteurs à haute densité. Cela ne nécessite pas de redémarrage." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:141 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "" | ||||
| "Sélectionner la fenêtre dans la vue qui apparaît suite à un appui sur la " | ||||
| "touche tab" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:125 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:146 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Fermer la vue qui apparaît suite à un appui sur la touche tab" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Changer de configuration de moniteur" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "Passe à la prochaine configuration intégrée de moniteur" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:6 | ||||
| msgid "Switch to VT 1" | ||||
| msgstr "Passer à l'émulateur de terminal 1" | ||||
| msgstr "Passer à l’émulateur de terminal 1" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:10 | ||||
| msgid "Switch to VT 2" | ||||
| msgstr "Passer à l'émulateur de terminal 2" | ||||
| msgstr "Passer à l’émulateur de terminal 2" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:14 | ||||
| msgid "Switch to VT 3" | ||||
| msgstr "Passer à l'émulateur de terminal 3" | ||||
| msgstr "Passer à l’émulateur de terminal 3" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:18 | ||||
| msgid "Switch to VT 4" | ||||
| msgstr "Passer à l'émulateur de terminal 4" | ||||
| msgstr "Passer à l’émulateur de terminal 4" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:22 | ||||
| msgid "Switch to VT 5" | ||||
| msgstr "Passer à l'émulateur de terminal 5" | ||||
| msgstr "Passer à l’émulateur de terminal 5" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:26 | ||||
| msgid "Switch to VT 6" | ||||
| msgstr "Passer à l'émulateur de terminal 6" | ||||
| msgstr "Passer à l’émulateur de terminal 6" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:30 | ||||
| msgid "Switch to VT 7" | ||||
| msgstr "Passer à l'émulateur de terminal 7" | ||||
| msgstr "Passer à l’émulateur de terminal 7" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:34 | ||||
| msgid "Switch to VT 8" | ||||
| msgstr "Passer à l'émulateur de terminal 8" | ||||
| msgstr "Passer à l’émulateur de terminal 8" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:38 | ||||
| msgid "Switch to VT 9" | ||||
| msgstr "Passer à l'émulateur de terminal 9" | ||||
| msgstr "Passer à l’émulateur de terminal 9" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:42 | ||||
| msgid "Switch to VT 10" | ||||
| msgstr "Passer à l'émulateur de terminal 10" | ||||
| msgstr "Passer à l’émulateur de terminal 10" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:46 | ||||
| msgid "Switch to VT 11" | ||||
| msgstr "Passer à l'émulateur de terminal 11" | ||||
| msgstr "Passer à l’émulateur de terminal 11" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:50 | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "Passer à l'émulateur de terminal 12" | ||||
| msgstr "Passer à l’émulateur de terminal 12" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:54 | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Réactiver les raccourcis" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:64 | ||||
| msgid "Allow grabs with Xwayland" | ||||
| msgstr "Autoriser les captures clavier avec Xwayland" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:65 | ||||
| msgid "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
| msgstr "" | ||||
| "Permettre aux captures de clavier émises par les applications X11 tournant " | ||||
| "dans Xwayland d’être prises en compte. Pour que ceci puisse arriver, le " | ||||
| "client doit aussi soit envoyer un ClientMessage X11 spécifique à la fenêtre " | ||||
| "racine, soit figurer dans les applications autorisées dans la clé « xwayland-" | ||||
| "access-rules »." | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:77 | ||||
| msgid "Xwayland applications allowed to issue keyboard grabs" | ||||
| msgstr "Applications Xwayland autorisées à émettre des captures clavier" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:78 | ||||
| msgid "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
| msgstr "" | ||||
| "Liste de noms de ressources ou de classes de ressources de fenêtres X11 " | ||||
| "autorisées ou non à émettre des captures clavier sous Xwayland. Le nom ou la " | ||||
| "classe de ressource d’une fenêtre X11 donnée peut être obtenue à l’aide de " | ||||
| "la commande « xprop WM_CLASS ». Les caractères joker « * » et « ? » sont " | ||||
| "acceptées dans les valeurs. Les valeurs commençant pas « ! » sont en liste " | ||||
| "noire, qui a priorité sur la liste blanche, pour révoquer les applications " | ||||
| "de la liste système par défaut. Celle-ci contient les applications " | ||||
| "suivantes : « @XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@ ». Les utilisateurs " | ||||
| "peuvent casser une capture existante en utilisant le raccourci clavier " | ||||
| "spécifique défini par la combinaison de touches « restore-shortcuts »." | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1759 | ||||
| #: src/backends/meta-input-settings.c:2325 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Changement de mode (groupe %d)" | ||||
| @@ -479,114 +549,117 @@ msgstr "Changement de mode (groupe %d)" | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1781 | ||||
| #: src/backends/meta-input-settings.c:2348 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Changer de moniteur" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:1783 | ||||
| #: src/backends/meta-input-settings.c:2350 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Afficher l'aide à l'écran" | ||||
| msgstr "Afficher l’aide à l’écran" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:675 | ||||
| #: src/backends/meta-monitor-manager.c:907 | ||||
| msgid "Built-in display" | ||||
| msgstr "Affichage intégré" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:698 | ||||
| #: src/backends/meta-monitor-manager.c:930 | ||||
| msgid "Unknown" | ||||
| msgstr "Inconnu" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:700 | ||||
| #: src/backends/meta-monitor-manager.c:932 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Affichage inconnu" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:708 | ||||
| #: src/backends/meta-monitor-manager.c:940 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:471 | ||||
| #: src/compositor/compositor.c:481 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| msgstr "" | ||||
| "Un autre gestionnaire de composition est déjà lancé sur l'écran %i de " | ||||
| "l'affichage « %s »." | ||||
| "Un autre gestionnaire de composition est déjà lancé sur l’écran %i de " | ||||
| "l’affichage « %s »." | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| #: src/core/bell.c:254 | ||||
| msgid "Bell event" | ||||
| msgstr "Évènement sonore" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/delete.c:127 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "« %s » ne répond pas." | ||||
|  | ||||
| #: src/core/delete.c:129 | ||||
| msgid "Application is not responding." | ||||
| msgstr "L'application ne répond pas." | ||||
|  | ||||
| #: src/core/delete.c:134 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "" | ||||
| "Vous pouvez patienter un instant pour continuer ou forcer l'application à " | ||||
| "quitter définitivement." | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Forcer à quitter" | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| msgid "_Wait" | ||||
| msgstr "_Attendre" | ||||
|  | ||||
| #: src/core/display.c:608 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Impossible d'ouvrir l'affichage « %s » du système X Window\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| #: src/core/main.c:191 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Désactiver la connexion au gestionnaire de sessions" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| #: src/core/main.c:197 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Remplacer le gestionnaire de fenêtres en cours de fonctionnement" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| #: src/core/main.c:203 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Indiquer l'ID de gestion de sessions" | ||||
| msgstr "Indiquer l’ID de gestion de sessions" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| #: src/core/main.c:208 | ||||
| msgid "X Display to use" | ||||
| msgstr "Affichage X à utiliser" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| #: src/core/main.c:214 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Initialiser la session depuis le fichier de sauvegarde" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| #: src/core/main.c:220 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Rendre synchrones les appels à X" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| #: src/core/main.c:227 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Lancer comme un compositeur wayland" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| #: src/core/main.c:233 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Lancer comme un compositeur imbriqué" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run wayland compositor without starting Xwayland" | ||||
| msgstr "Lancer le compositeur wayland sans démarrer Xwayland" | ||||
|  | ||||
| #: src/core/main.c:247 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Lancer comme un serveur d'affichage complet, plutôt qu'imbriqué" | ||||
| msgstr "Lancer comme un serveur d’affichage complet, plutôt qu’imbriqué" | ||||
|  | ||||
| #: src/core/main.c:253 | ||||
| msgid "Run with X11 backend" | ||||
| msgstr "Lancer avec le moteur X11" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:148 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "« %s » ne répond pas." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:150 | ||||
| msgid "Application is not responding." | ||||
| msgstr "L’application ne répond pas." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:155 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "" | ||||
| "Vous pouvez patienter un instant pour continuer ou forcer l’application à " | ||||
| "quitter définitivement." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Forcer à quitter" | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Wait" | ||||
| msgstr "_Attendre" | ||||
|  | ||||
| #: src/core/mutter.c:39 | ||||
| #, c-format | ||||
| @@ -601,8 +674,8 @@ msgstr "" | ||||
| "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., et autres.\n" | ||||
| "Ceci est un logiciel libre ; consultez le code source pour les\n" | ||||
| "conditions de copie.\n" | ||||
| "Il n'y a AUCUNE garantie ; même pas de VALEUR MARCHANDE ou\n" | ||||
| "d'ADÉQUATION À UN USAGE PARTICULIER.\n" | ||||
| "Il n’y a AUCUNE garantie ; même pas de VALEUR MARCHANDE ou\n" | ||||
| "d’ADÉQUATION À UN USAGE PARTICULIER.\n" | ||||
|  | ||||
| #: src/core/mutter.c:53 | ||||
| msgid "Print version" | ||||
| @@ -612,44 +685,68 @@ msgstr "Afficher la version" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Greffon de Mutter à utiliser" | ||||
|  | ||||
| #: src/core/prefs.c:1997 | ||||
| #: src/core/prefs.c:1915 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Espace de travail %d" | ||||
|  | ||||
| #: src/core/screen.c:580 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| "replace the current window manager." | ||||
| msgstr "" | ||||
| "L'affichage « %s » a déjà un gestionnaire de fenêtres ; essayez d'utiliser " | ||||
| "l'option --replace pour remplacer le gestionnaire de fenêtres actuel." | ||||
|  | ||||
| #: src/core/screen.c:665 | ||||
| #, c-format | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "L'écran %d sur l'affichage « %s » n'est pas valide\n" | ||||
|  | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter a été compilé sans la prise en charge du mode bavard\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:567 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Changement de mode : mode %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #: src/x11/meta-x11-display.c:666 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| "replace the current window manager." | ||||
| msgstr "" | ||||
| "L’affichage « %s » a déjà un gestionnaire de fenêtres ; essayez d’utiliser " | ||||
| "l’option --replace pour remplacer le gestionnaire de fenêtres actuel." | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1010 | ||||
| msgid "Failed to initialize GDK\n" | ||||
| msgstr "L’initialisation de GDK a échoué\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1034 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Impossible d’ouvrir l’affichage « %s » du système X Window\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1117 | ||||
| #, c-format | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "L’écran %d sur l’affichage « %s » n’est pas valide\n" | ||||
|  | ||||
| #: src/x11/session.c:1819 | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| msgstr "" | ||||
| "Ces fenêtres ne prennent pas en charge « l'enregistrement de la " | ||||
| "Ces fenêtres ne prennent pas en charge « l’enregistrement de la " | ||||
| "configuration actuelle » et devront être redémarrées manuellement à la " | ||||
| "prochaine connexion." | ||||
|  | ||||
| #: src/x11/window-props.c:559 | ||||
| #: src/x11/window-props.c:565 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (sur %s)" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the left" | ||||
| #~ msgstr "Déplacer la fenêtre d’un espace de travail vers la gauche" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the right" | ||||
| #~ msgstr "Déplacer la fenêtre d’un espace de travail vers la droite" | ||||
|  | ||||
| #~ msgid "Move to workspace left" | ||||
| #~ msgstr "Déplacer vers l’espace de travail de gauche" | ||||
|  | ||||
| #~ msgid "Move to workspace right" | ||||
| #~ msgstr "Déplacer vers l’espace de travail de droite" | ||||
|  | ||||
| #~ msgid "Toggle shaded state" | ||||
| #~ msgstr "Basculer l’état de repli" | ||||
|   | ||||
							
								
								
									
										307
									
								
								po/fur.po
									
									
									
									
									
								
							
							
						
						
									
										307
									
								
								po/fur.po
									
									
									
									
									
								
							| @@ -6,17 +6,16 @@ | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter master\n" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2017-07-22 09:45+0000\n" | ||||
| "PO-Revision-Date: 2017-07-22 22:53+0200\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n" | ||||
| "POT-Creation-Date: 2018-08-15 08:53+0000\n" | ||||
| "PO-Revision-Date: 2018-08-17 05:49+0200\n" | ||||
| "Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n" | ||||
| "Language-Team: Friulian <fur@li.org>\n" | ||||
| "Language: fur\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: Poedit 2.0.2\n" | ||||
| "X-Generator: Poedit 2.0.7\n" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| msgid "Navigation" | ||||
| @@ -43,145 +42,133 @@ msgid "Move window to last workspace" | ||||
| msgstr "Sposte barcon tal ultin spazi di lavôr" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:24 | ||||
| msgid "Move window one workspace to the left" | ||||
| msgstr "Sposte barcon tal spazi di lavôr a çampe" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace to the right" | ||||
| msgstr "Sposte barcon tal spazi di lavôr a drete" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one workspace up" | ||||
| msgstr "Sposte barcon tal spazi di lavôr parsore" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| #: data/50-mutter-navigation.xml:27 | ||||
| msgid "Move window one workspace down" | ||||
| msgstr "Sposte barcon tal spazi di lavôr sot" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| #: data/50-mutter-navigation.xml:30 | ||||
| msgid "Move window one monitor to the left" | ||||
| msgstr "Sposte barcon tal visôr a çampe" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| #: data/50-mutter-navigation.xml:33 | ||||
| msgid "Move window one monitor to the right" | ||||
| msgstr "Sposte barcon tal visôr a drete" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:42 | ||||
| #: data/50-mutter-navigation.xml:36 | ||||
| msgid "Move window one monitor up" | ||||
| msgstr "Sposte barcon tal visôr parsore" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:45 | ||||
| #: data/50-mutter-navigation.xml:39 | ||||
| msgid "Move window one monitor down" | ||||
| msgstr "Sposte barcon tal visôr sot" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:49 | ||||
| #: data/50-mutter-navigation.xml:43 | ||||
| msgid "Switch applications" | ||||
| msgstr "Passâ di une aplicazion in chê altre" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:54 | ||||
| #: data/50-mutter-navigation.xml:48 | ||||
| msgid "Switch to previous application" | ||||
| msgstr "Passe ae aplicazion prime" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:58 | ||||
| #: data/50-mutter-navigation.xml:52 | ||||
| msgid "Switch windows" | ||||
| msgstr "Passâ di un barcon in chel altri" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:63 | ||||
| #: data/50-mutter-navigation.xml:57 | ||||
| msgid "Switch to previous window" | ||||
| msgstr "Passe al barcon prime" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:67 | ||||
| #: data/50-mutter-navigation.xml:61 | ||||
| msgid "Switch windows of an application" | ||||
| msgstr "Passâ di un barcon in chel altri di une aplicazion" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:72 | ||||
| #: data/50-mutter-navigation.xml:66 | ||||
| msgid "Switch to previous window of an application" | ||||
| msgstr "Passe al barcon prime di une aplicazion" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:76 | ||||
| #: data/50-mutter-navigation.xml:70 | ||||
| msgid "Switch system controls" | ||||
| msgstr "Passâ di un control di sisteme in chel altri" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:81 | ||||
| #: data/50-mutter-navigation.xml:75 | ||||
| msgid "Switch to previous system control" | ||||
| msgstr "Passe al control di sisteme precedent" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:85 | ||||
| #: data/50-mutter-navigation.xml:79 | ||||
| msgid "Switch windows directly" | ||||
| msgstr "Passe dret ai barcons" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:90 | ||||
| #: data/50-mutter-navigation.xml:84 | ||||
| msgid "Switch directly to previous window" | ||||
| msgstr "Passe dret al barcon precedent" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:94 | ||||
| #: data/50-mutter-navigation.xml:88 | ||||
| msgid "Switch windows of an app directly" | ||||
| msgstr "Passe dret a un barcon di une aplicazion" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:99 | ||||
| #: data/50-mutter-navigation.xml:93 | ||||
| msgid "Switch directly to previous window of an app" | ||||
| msgstr "Passe dret al barcon precedent di une aplicazion" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:103 | ||||
| #: data/50-mutter-navigation.xml:97 | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Passe dret ai controi dal sisteme" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| #: data/50-mutter-navigation.xml:102 | ||||
| msgid "Switch directly to previous system control" | ||||
| msgstr "Passe dret al control precedent dal sisteme" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| #: data/50-mutter-navigation.xml:105 | ||||
| msgid "Hide all normal windows" | ||||
| msgstr "Plate ducj i barcons normâi" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| #: data/50-mutter-navigation.xml:108 | ||||
| msgid "Switch to workspace 1" | ||||
| msgstr "Passe al spazi di lavôr 1" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| #: data/50-mutter-navigation.xml:111 | ||||
| msgid "Switch to workspace 2" | ||||
| msgstr "Passe al spazi di lavôr 2" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| #: data/50-mutter-navigation.xml:114 | ||||
| msgid "Switch to workspace 3" | ||||
| msgstr "Passe al spazi di lavôr 3" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| #: data/50-mutter-navigation.xml:117 | ||||
| msgid "Switch to workspace 4" | ||||
| msgstr "Passe al spazi di lavôr 4" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| #: data/50-mutter-navigation.xml:120 | ||||
| msgid "Switch to last workspace" | ||||
| msgstr "Passe al ultin spazi di lavôr" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:129 | ||||
| msgid "Move to workspace left" | ||||
| msgstr "Sposte il spazi di lavôr a çampe" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:132 | ||||
| msgid "Move to workspace right" | ||||
| msgstr "Sposte il spazi di lavôr a drete" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| #: data/50-mutter-navigation.xml:123 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Sposte il spazi di lavôr parsore" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| #: data/50-mutter-navigation.xml:126 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Sposte il spazi di lavôr sot" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "Sisteme" | ||||
|  | ||||
| #: data/50-mutter-system.xml:8 | ||||
| msgid "Show the run command prompt" | ||||
| msgstr "Mostre la richieste \"eseguìs comant\"" | ||||
| msgstr "Mostre la richieste “eseguìs comant”" | ||||
|  | ||||
| #: data/50-mutter-system.xml:10 | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Mostre la panoramiche ativitâts" | ||||
|  | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "Ripristine lis scurtis di tastiere" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Barcons" | ||||
| @@ -207,54 +194,50 @@ msgid "Restore window" | ||||
| msgstr "Ripristine barcon" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:18 | ||||
| msgid "Toggle shaded state" | ||||
| msgstr "Ative/Disative stât inrodolât" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Close window" | ||||
| msgstr "Siere il barcon" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| #: data/50-mutter-windows.xml:20 | ||||
| msgid "Hide window" | ||||
| msgstr "Plate il barcon" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| #: data/50-mutter-windows.xml:22 | ||||
| msgid "Move window" | ||||
| msgstr "Sposte il barcon" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:26 | ||||
| #: data/50-mutter-windows.xml:24 | ||||
| msgid "Resize window" | ||||
| msgstr "Ridimensione barcon" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| #: data/50-mutter-windows.xml:27 | ||||
| msgid "Toggle window on all workspaces or one" | ||||
| msgstr "Ative/Disative barcon su ducj i spazis di lavôr o nome un" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| #: data/50-mutter-windows.xml:29 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Tire sù il barcon se al è cuviert, se no sbassilu" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| #: data/50-mutter-windows.xml:31 | ||||
| msgid "Raise window above other windows" | ||||
| msgstr "Met il barcon parsore di chei altris" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| #: data/50-mutter-windows.xml:33 | ||||
| msgid "Lower window below other windows" | ||||
| msgstr "Bute il barcon sot di chei altris" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| #: data/50-mutter-windows.xml:35 | ||||
| msgid "Maximize window vertically" | ||||
| msgstr "Slargje il barcon par verticâl" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| #: data/50-mutter-windows.xml:37 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Slargje il barcon par orizontâl" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| #: data/50-mutter-windows.xml:41 | ||||
| msgid "View split on left" | ||||
| msgstr "Slargje dividint ae çampe" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:47 | ||||
| #: data/50-mutter-windows.xml:45 | ||||
| msgid "View split on right" | ||||
| msgstr "Slargje dividint ae drete" | ||||
|  | ||||
| @@ -405,14 +388,10 @@ msgid "" | ||||
| "Whether the feature requires restarting the compositor depends on the given " | ||||
| "feature. Any experimental feature is not required to still be available, or " | ||||
| "configurable. Don’t expect adding anything in this setting to be future " | ||||
| "proof. Currently possible keywords: • “monitor-config-manager” — use the new " | ||||
| "monitor configuration system, aimed to replace the old one. This enables a " | ||||
| "higher level configuration API to be used by configuration applications, as " | ||||
| "well as the ability to configure per logical monitor scale. • “scale-monitor-" | ||||
| "framebuffer” — makes mutter default to layout logical monitors in a logical " | ||||
| "pixel coordinate space, while scaling monitor framebuffers instead of window " | ||||
| "content, to manage HiDPI monitors. Does not require a restart. Also enabling " | ||||
| "“monitor-config-manager” is required for this feature to be enabled." | ||||
| "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " | ||||
| "mutter default to layout logical monitors in a logical pixel coordinate " | ||||
| "space, while scaling monitor framebuffers instead of window content, to " | ||||
| "manage HiDPI monitors. Does not require a restart." | ||||
| msgstr "" | ||||
| "Par abilitâ lis funzionalitâts sperimentâls, zonte la peraule clâf de " | ||||
| "funzionalitât ae liste. Il fat che la funzionalitât e vedi bisugne di tornâ " | ||||
| @@ -420,30 +399,24 @@ msgstr "" | ||||
| "funzionalitât sperimentâl no je necessarie che e sedi disponibile o " | ||||
| "configurabile. No sta spietâti di zontâ alc in cheste impostazion e pensâ " | ||||
| "che e duredi tal timp. Atualmentri lis peraulis clâf pussibilis a son: • " | ||||
| "“monitor-config-manager” — al dopre il gnûf sisteme di configurazion dal " | ||||
| "visôr, fat par sostituî chel vecjo. Chest al abilite une API di nivel " | ||||
| "superiôr che e pues jessi doprade di aplicazions di configurazion, cussì " | ||||
| "come la capacitât di configurâ par scjale di monitor logjic. • “scale-" | ||||
| "monitor-framebuffer” — al rint come predefinît par mutter la disposizion dai " | ||||
| "visôrs logjics intun spazi logjic di coordenadis dai pixel, intant i " | ||||
| "framebuffer dai visôrs par scjalâ, invezit dal contignût dal barcon, a " | ||||
| "gjestissin i visôrs HiDPI. Nol covente tornâ a inviâ. In plui al è necessari " | ||||
| "abilitâ “monitor-config-manager” par fâ in mût che cheste funzionalitât e " | ||||
| "sedi abilitade." | ||||
| "“scale-monitor-framebuffer” — al rint come predefinît par mutter, la " | ||||
| "disposizion logjiche dai visôrs intun spazi logjic di coordenadis di pixel, " | ||||
| "in plui si fâs il scjalâ dai framebuffer dai visôrs invezit che il contignût " | ||||
| "dal barcon; dut chest par gjestî i visôrs HiDPI. Nol covente tornâ a inviâ." | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:141 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "Selezione barcon dal tab popup" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:146 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Anule tab popup" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:161 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:151 | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Cambie configurazions visôr" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:166 | ||||
| #: data/org.gnome.mutter.gschema.xml.in:156 | ||||
| msgid "Rotates the built-in monitor configuration" | ||||
| msgstr "Al volte la configurazion dal visôr integrât" | ||||
|  | ||||
| @@ -495,10 +468,61 @@ msgstr "Passe al VT 11" | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "Passe al VT 12" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:54 | ||||
| msgid "Re-enable shortcuts" | ||||
| msgstr "Torne abilite lis scurtis" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:64 | ||||
| msgid "Allow grabs with Xwayland" | ||||
| msgstr "Permet cjapadis di control cun Xwayland" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:65 | ||||
| msgid "" | ||||
| "Allow keyboard grabs issued by X11 applications running in Xwayland to be " | ||||
| "taken into account. For a X11 grab to be taken into account under Wayland, " | ||||
| "the client must also either send a specific X11 ClientMessage to the root " | ||||
| "window or be among the applications white-listed in key “xwayland-grab-" | ||||
| "access-rules”." | ||||
| msgstr "" | ||||
| "Permet che il cjapâ il control de tastiere emetût di aplicazions X11 che a " | ||||
| "zirin in Xwayland, di jessi tignûts in considerazion. Par une cjapade di " | ||||
| "control di X11, par che e sedi tignude in considerazion sot Wayland, il " | ||||
| "client al scugne ancje inviâ un specific messaç (X11 ClientMessage) al " | ||||
| "barcon lidrîs o jessi tra lis aplicazions metudis te liste blancje inte clâf " | ||||
| "“xwayland-grab-access-rules”." | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:77 | ||||
| msgid "Xwayland applications allowed to issue keyboard grabs" | ||||
| msgstr "Aplicazions Xwayland che a puedin cjapâ la tastiere" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:78 | ||||
| msgid "" | ||||
| "List the resource names or resource class of X11 windows either allowed or " | ||||
| "not allowed to issue X11 keyboard grabs under Xwayland. The resource name or " | ||||
| "resource class of a given X11 window can be obtained using the command " | ||||
| "“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. " | ||||
| "Values starting with “!” are blacklisted, which has precedence over the " | ||||
| "whitelist, to revoke applications from the default system list. The default " | ||||
| "system list includes the following applications: " | ||||
| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by " | ||||
| "using the specific keyboard shortcut defined by the keybinding key “restore-" | ||||
| "shortcuts”." | ||||
| msgstr "" | ||||
| "Liste di nons di risorsis o classis di risorsis di barcons X11 che a puedin " | ||||
| "o no puedin cjapâ i segnâi di tastiere X11 sot di Xwayland. Il non de " | ||||
| "risorse o la classe de risorse di un dât barcon X11 al pues jessi otignût " | ||||
| "doprant il comant “xprop WM_CLASS”. I caratars “*” e “?” tai valôrs a son " | ||||
| "supuartâts. I valôrs che a tachin cun “!” a son metûts te liste nere, che e " | ||||
| "à precedence su la liste blancje, par revocâ lis aplicazions de liste di " | ||||
| "sisteme predefinide. La liste di sisteme predefinide e inclût lis " | ||||
| "aplicazions chi daurman: “@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” I utents a " | ||||
| "puedin interompi il control cjapât doprant la specifiche scurte di tastiere " | ||||
| "definide de clâf di associazion tast “restore-shortcuts”." | ||||
|  | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2118 | ||||
| #: src/backends/meta-input-settings.c:2325 | ||||
| #, c-format | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Cambie mût (Grup %d)" | ||||
| @@ -506,37 +530,37 @@ msgstr "Cambie mût (Grup %d)" | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2141 | ||||
| #: src/backends/meta-input-settings.c:2348 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Cambie visôr" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:2143 | ||||
| #: src/backends/meta-input-settings.c:2350 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Mostre jutori a schermi" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:925 | ||||
| #: src/backends/meta-monitor-manager.c:886 | ||||
| msgid "Built-in display" | ||||
| msgstr "Display integrât" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:948 | ||||
| #: src/backends/meta-monitor-manager.c:909 | ||||
| msgid "Unknown" | ||||
| msgstr "No cognossût" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:950 | ||||
| #: src/backends/meta-monitor-manager.c:911 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Display no cognossût" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:958 | ||||
| #: src/backends/meta-monitor-manager.c:919 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:476 | ||||
| #: src/compositor/compositor.c:481 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| @@ -544,62 +568,65 @@ msgstr "" | ||||
| "Un altri compositing manager al è za in esecuzion sul schermi %i sul display " | ||||
| "“%s”." | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| #: src/core/bell.c:254 | ||||
| msgid "Bell event" | ||||
| msgstr "Event cjampane" | ||||
|  | ||||
| #: src/core/display.c:608 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Impussibil vierzi il display “%s” di X Window System\n" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| #: src/core/main.c:191 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Disabilite la conession al gjestôr de session" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| #: src/core/main.c:197 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Rimplace il window manager in vore" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| #: src/core/main.c:203 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Specifiche il ID di gjestion session" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| #: src/core/main.c:208 | ||||
| msgid "X Display to use" | ||||
| msgstr "Display X di doprâ" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| #: src/core/main.c:214 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Inizialize session da file salvât" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| #: src/core/main.c:220 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Fâs lis clamadis X sincronis" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| #: src/core/main.c:227 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "Eseguìs come compositor wayland" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| #: src/core/main.c:233 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "Eseguìs come compositor nidiât" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run wayland compositor without starting Xwayland" | ||||
| msgstr "Eseguìs il compositôr di wayland cence inviâ Xwayland" | ||||
|  | ||||
| #: src/core/main.c:247 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "Eseguìs come servidôr display complet, invezit che nidiât" | ||||
|  | ||||
| #: src/core/main.c:253 | ||||
| msgid "Run with X11 backend" | ||||
| msgstr "Eseguìs cul backend X11" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:147 | ||||
| #: src/core/meta-close-dialog-default.c:148 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "“%s” nol rispuint." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:149 | ||||
| #: src/core/meta-close-dialog-default.c:150 | ||||
| msgid "Application is not responding." | ||||
| msgstr "La aplicazion no rispuint." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:154 | ||||
| #: src/core/meta-close-dialog-default.c:155 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| @@ -607,11 +634,11 @@ msgstr "" | ||||
| "Al è pussibil sielzi di spietâ un pôc lassant che la aplicazion e continui o " | ||||
| "sfuarçâ la aplicazion par sierâle dal dut." | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Force Quit" | ||||
| msgstr "Sfuarce _Jessude" | ||||
|  | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| #: src/core/meta-close-dialog-default.c:162 | ||||
| msgid "_Wait" | ||||
| msgstr "_Spiete" | ||||
|  | ||||
| @@ -638,12 +665,21 @@ msgstr "Stampe version" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Plugin Mutter di doprâ" | ||||
|  | ||||
| #: src/core/prefs.c:1997 | ||||
| #: src/core/prefs.c:1787 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Spazi di lavôr %d" | ||||
|  | ||||
| #: src/core/screen.c:580 | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter al è stât compilât cence supuart pe modalitât fetose\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:567 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Cambie mût: mût %d" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:666 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| @@ -652,21 +688,21 @@ msgstr "" | ||||
| "Il display “%s” al à za un window manager; prove dopre la opzion --replace " | ||||
| "par rimplaçâ chel atuâl." | ||||
|  | ||||
| #: src/core/screen.c:665 | ||||
| #: src/x11/meta-x11-display.c:1010 | ||||
| msgid "Failed to initialize GDK\n" | ||||
| msgstr "No si è rivâts a inizializâ GDK\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1034 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "Impussibil vierzi il display “%s” di X Window System\n" | ||||
|  | ||||
| #: src/x11/meta-x11-display.c:1117 | ||||
| #, c-format | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "Schermi %d su display “%s” no valit\n" | ||||
|  | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter al è stât compilât cence supuart pe modalitât fetose\n" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Cambie mût: mût %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| #: src/x11/session.c:1819 | ||||
| msgid "" | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| @@ -674,7 +710,22 @@ msgstr "" | ||||
| "Chescj barcons no supuartin la funzion “salve impostazions atuâls” e si " | ||||
| "scugnarà tornâ a inviâlis a man tal prossim acès." | ||||
|  | ||||
| #: src/x11/window-props.c:559 | ||||
| #: src/x11/window-props.c:565 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (su %s)" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the left" | ||||
| #~ msgstr "Sposte barcon tal spazi di lavôr a çampe" | ||||
|  | ||||
| #~ msgid "Move window one workspace to the right" | ||||
| #~ msgstr "Sposte barcon tal spazi di lavôr a drete" | ||||
|  | ||||
| #~ msgid "Move to workspace left" | ||||
| #~ msgstr "Sposte il spazi di lavôr a çampe" | ||||
|  | ||||
| #~ msgid "Move to workspace right" | ||||
| #~ msgstr "Sposte il spazi di lavôr a drete" | ||||
|  | ||||
| #~ msgid "Toggle shaded state" | ||||
| #~ msgstr "Ative/Disative stât inrodolât" | ||||
|   | ||||
							
								
								
									
										335
									
								
								po/gd.po
									
									
									
									
									
								
							
							
						
						
									
										335
									
								
								po/gd.po
									
									
									
									
									
								
							| @@ -1,14 +1,13 @@ | ||||
| # Scottish Gaelic translation for mutter. | ||||
| # Copyright (C) 2016 mutter's COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the mutter package. | ||||
| # GunChleoc <fios@foramnagaidhlig.net>, 2016, 2017. | ||||
| # GunChleoc <fios@foramnagaidhlig.net>, 2016, 2017, 2018. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter master\n" | ||||
| "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutte" | ||||
| "r&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2017-03-02 11:37+0000\n" | ||||
| "PO-Revision-Date: 2017-03-07 11:59+0100\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n" | ||||
| "POT-Creation-Date: 2018-01-27 08:02+0000\n" | ||||
| "PO-Revision-Date: 2018-03-01 10:45+0100\n" | ||||
| "Last-Translator: GunChleoc <fios@foramnagaidhlig.net>\n" | ||||
| "Language-Team: Fòram na Gàidhlig\n" | ||||
| "Language: gd\n" | ||||
| @@ -18,6 +17,7 @@ msgstr "" | ||||
| "Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " | ||||
| "(n > 2 && n < 20) ? 2 : 3;\n" | ||||
| "X-Generator: Virtaal 0.7.1\n" | ||||
| "(n > 2 && n < 20) ? 2: 3;\n" | ||||
| "X-Project-Style: gnome\n" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:6 | ||||
| @@ -166,13 +166,13 @@ msgstr "Gluais dhan rum-obrach air an taobh deas" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:135 | ||||
| msgid "Move to workspace above" | ||||
| msgstr "Gluais dhan rum-obrach aig a' bharr" | ||||
| msgstr "Gluais dhan rum-obrach aig a’ bharr" | ||||
|  | ||||
| #: data/50-mutter-navigation.xml:138 | ||||
| msgid "Move to workspace below" | ||||
| msgstr "Gluais dhan rum-obrach aig a' bhonn" | ||||
| msgstr "Gluais dhan rum-obrach aig a’ bhonn" | ||||
|  | ||||
| #: data/50-mutter-system.xml:6 | ||||
| #: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6 | ||||
| msgid "System" | ||||
| msgstr "An siostam" | ||||
|  | ||||
| @@ -184,6 +184,10 @@ msgstr "" | ||||
| msgid "Show the activities overview" | ||||
| msgstr "Foir-shealladh air na gnìomhachdan" | ||||
|  | ||||
| #: data/50-mutter-wayland.xml:8 | ||||
| msgid "Restore the keyboard shortcuts" | ||||
| msgstr "Aisig ath-ghoiridean a’ mheur-chlàir" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:6 | ||||
| msgid "Windows" | ||||
| msgstr "Uinneagan" | ||||
| @@ -250,7 +254,7 @@ msgstr "Làn-mheudaich an uinneag gu h-ingearach" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:39 | ||||
| msgid "Maximize window horizontally" | ||||
| msgstr "Làn-mheudaich an uinneag air a' chòmhnard" | ||||
| msgstr "Làn-mheudaich an uinneag air a’ chòmhnard" | ||||
|  | ||||
| #: data/50-mutter-windows.xml:43 | ||||
| msgid "View split on left" | ||||
| @@ -262,284 +266,135 @@ msgstr "Sgoilt an t-sealladh air an taobh deas" | ||||
|  | ||||
| #: data/mutter.desktop.in:4 | ||||
| msgid "Mutter" | ||||
| msgstr "" | ||||
| msgstr "Mutter" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:7 | ||||
| msgid "Modifier to use for extended window management operations" | ||||
| msgstr "" | ||||
| #: data/org.gnome.mutter.gschema.xml.in:155 | ||||
| #| msgid "Switch monitor" | ||||
| msgid "Switch monitor configurations" | ||||
| msgstr "Gearr leum eadar rèiteachaidhean monatair" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:8 | ||||
| msgid "" | ||||
| "This key will initiate the \"overlay\", which is a combination window " | ||||
| "overview and application launching system. The default is intended to be the " | ||||
| "\"Windows key\" on PC hardware. It's expected that this binding either the " | ||||
| "default or set to the empty string." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:20 | ||||
| msgid "Attach modal dialogs" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:21 | ||||
| msgid "" | ||||
| "When true, instead of having independent titlebars, modal dialogs appear " | ||||
| "attached to the titlebar of the parent window and are moved together with " | ||||
| "the parent window." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:30 | ||||
| msgid "Enable edge tiling when dropping windows on screen edges" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:31 | ||||
| msgid "" | ||||
| "If enabled, dropping windows on vertical screen edges maximizes them " | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:40 | ||||
| msgid "Workspaces are managed dynamically" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:41 | ||||
| msgid "" | ||||
| "Determines whether workspaces are managed dynamically or whether there's a " | ||||
| "static number of workspaces (determined by the num-workspaces key in org." | ||||
| "gnome.desktop.wm.preferences)." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:50 | ||||
| msgid "Workspaces only on primary" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:51 | ||||
| msgid "" | ||||
| "Determines whether workspace switching should happen for windows on all " | ||||
| "monitors or only for windows on the primary monitor." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:59 | ||||
| msgid "No tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:60 | ||||
| msgid "" | ||||
| "Determines whether the use of popup and highlight frame should be disabled " | ||||
| "for window cycling." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:68 | ||||
| msgid "Delay focus changes until the pointer stops moving" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:69 | ||||
| msgid "" | ||||
| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then " | ||||
| "the focus will not be changed immediately when entering a window, but only " | ||||
| "after the pointer stops moving." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:79 | ||||
| msgid "Draggable border width" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:80 | ||||
| msgid "" | ||||
| "The amount of total draggable borders. If the theme's visible borders are " | ||||
| "not enough, invisible borders will be added to meet this value." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:89 | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:90 | ||||
| msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:98 | ||||
| msgid "Place new windows in the center" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:99 | ||||
| msgid "" | ||||
| "When true, the new windows will always be put in the center of the active " | ||||
| "screen of the monitor." | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:120 | ||||
| msgid "Select window from tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.gschema.xml.in:125 | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:6 | ||||
| msgid "Switch to VT 1" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:10 | ||||
| msgid "Switch to VT 2" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:14 | ||||
| msgid "Switch to VT 3" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:18 | ||||
| msgid "Switch to VT 4" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:22 | ||||
| msgid "Switch to VT 5" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:26 | ||||
| msgid "Switch to VT 6" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:30 | ||||
| msgid "Switch to VT 7" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:34 | ||||
| msgid "Switch to VT 8" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:38 | ||||
| msgid "Switch to VT 9" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:42 | ||||
| msgid "Switch to VT 10" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:46 | ||||
| msgid "Switch to VT 11" | ||||
| msgstr "" | ||||
|  | ||||
| #: data/org.gnome.mutter.wayland.gschema.xml.in:50 | ||||
| msgid "Switch to VT 12" | ||||
| msgstr "" | ||||
| #. TRANSLATORS: This string refers to a button that switches between | ||||
| #. * different modes. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:2167 | ||||
| #, c-format | ||||
| #| msgid "Mode Switch: Mode %d" | ||||
| msgid "Mode Switch (Group %d)" | ||||
| msgstr "Suidse nam modh (Buidheann %d)" | ||||
|  | ||||
| #. TRANSLATORS: This string refers to an action, cycles drawing tablets' | ||||
| #. * mapping through the available outputs. | ||||
| #. | ||||
| #: src/backends/meta-input-settings.c:1913 | ||||
| #| msgid "Switch system controls" | ||||
| #: src/backends/meta-input-settings.c:2190 | ||||
| msgid "Switch monitor" | ||||
| msgstr "Gearr leum gu monatair eile" | ||||
|  | ||||
| #: src/backends/meta-input-settings.c:1915 | ||||
| #: src/backends/meta-input-settings.c:2192 | ||||
| msgid "Show on-screen help" | ||||
| msgstr "Seall a' chobhair air an sgrìn" | ||||
| msgstr "Seall a’ chobhair air an sgrìn" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:515 | ||||
| #: src/backends/meta-monitor-manager.c:908 | ||||
| msgid "Built-in display" | ||||
| msgstr "Uidheam-taisbeanaidh 'na broinn" | ||||
| msgstr "Uidheam-taisbeanaidh ’na broinn" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:538 | ||||
| #: src/backends/meta-monitor-manager.c:931 | ||||
| msgid "Unknown" | ||||
| msgstr "Chan eil fhios" | ||||
|  | ||||
| #: src/backends/meta-monitor-manager.c:540 | ||||
| #: src/backends/meta-monitor-manager.c:933 | ||||
| msgid "Unknown Display" | ||||
| msgstr "Uidheam-taisbeanaidh nach aithne dhuinn" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor vendor name, followed by a | ||||
| #. * size in inches, like 'Dell 15"' | ||||
| #. | ||||
| #: src/backends/meta-monitor-manager.c:548 | ||||
| #: src/backends/meta-monitor-manager.c:941 | ||||
| #, c-format | ||||
| msgid "%s %s" | ||||
| msgstr "%s %s" | ||||
|  | ||||
| #. 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:471 | ||||
| #: src/compositor/compositor.c:479 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| "Another compositing manager is already running on screen %i on display “%s”." | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/bell.c:194 | ||||
| msgid "Bell event" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/delete.c:127 | ||||
| #: src/core/display.c:608 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display “%s”\n" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:189 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:195 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:201 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:206 | ||||
| msgid "X Display to use" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:212 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:225 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:231 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:239 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "" | ||||
|  | ||||
| #. Translators: %s is a window title | ||||
| #: src/core/meta-close-dialog-default.c:147 | ||||
| #, c-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/delete.c:129 | ||||
| #: src/core/meta-close-dialog-default.c:149 | ||||
| msgid "Application is not responding." | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/delete.c:134 | ||||
| #: src/core/meta-close-dialog-default.c:154 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| msgid "_Wait" | ||||
| msgstr "_Fuirich" | ||||
|  | ||||
| #: src/core/delete.c:141 | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Force Quit" | ||||
| msgstr "Sparr _fàgail air" | ||||
|  | ||||
| #: src/core/display.c:590 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:182 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:188 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:194 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:199 | ||||
| msgid "X Display to use" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:205 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:211 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:218 | ||||
| msgid "Run as a wayland compositor" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:224 | ||||
| msgid "Run as a nested compositor" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/main.c:232 | ||||
| msgid "Run as a full display server, rather than nested" | ||||
| msgstr "" | ||||
| #: src/core/meta-close-dialog-default.c:161 | ||||
| msgid "_Wait" | ||||
| msgstr "_Fuirich" | ||||
|  | ||||
| #: src/core/mutter.c:39 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" | ||||
| "This is free software; see the source for copying conditions.\n" | ||||
| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " | ||||
| "PARTICULAR PURPOSE.\n" | ||||
| @@ -558,34 +413,34 @@ msgstr "" | ||||
| msgid "Workspace %d" | ||||
| msgstr "Rum-obrach %d" | ||||
|  | ||||
| #: src/core/screen.c:521 | ||||
| #: src/core/screen.c:583 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Display \"%s\" already has a window manager; try using the --replace option " | ||||
| "to replace the current window manager." | ||||
| "Display “%s” already has a window manager; try using the --replace option to " | ||||
| "replace the current window manager." | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/screen.c:606 | ||||
| #: src/core/screen.c:668 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgid "Screen %d on display “%s” is invalid\n" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/core/util.c:120 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "" | ||||
|  | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:595 | ||||
| #: src/wayland/meta-wayland-tablet-pad.c:563 | ||||
| #, c-format | ||||
| msgid "Mode Switch: Mode %d" | ||||
| msgstr "Suidse nam modh: Modh %d" | ||||
|  | ||||
| #: src/x11/session.c:1815 | ||||
| msgid "" | ||||
| "These windows do not support "save current setup" and will have to " | ||||
| "be restarted manually next time you log in." | ||||
| "These windows do not support “save current setup” and will have to be " | ||||
| "restarted manually next time you log in." | ||||
| msgstr "" | ||||
|  | ||||
| #: src/x11/window-props.c:548 | ||||
| #: src/x11/window-props.c:559 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (air %s)" | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user