Compare commits
	
		
			711 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					f0f88e4d3f | ||
| 
						 | 
					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 | ||
| 
						 | 
					49096f0530 | ||
| 
						 | 
					ff6eb86bb4 | ||
| 
						 | 
					c735eab216 | ||
| 
						 | 
					299aa9759c | ||
| 
						 | 
					35e9020f4c | ||
| 
						 | 
					6d4234e300 | ||
| 
						 | 
					0457870ff1 | ||
| 
						 | 
					a52c4c2795 | ||
| 
						 | 
					bb8c388a37 | ||
| 
						 | 
					46cb506f8f | ||
| 
						 | 
					ce20c964a6 | ||
| 
						 | 
					e3f76e9482 | ||
| 
						 | 
					b894fbd9ff | ||
| 
						 | 
					2ca0871724 | ||
| 
						 | 
					dd12f569d9 | ||
| 
						 | 
					c54377e3ba | ||
| 
						 | 
					346acaf7f6 | ||
| 
						 | 
					3343a199c2 | ||
| 
						 | 
					1fb3c9f8bf | ||
| 
						 | 
					b7b5fb293d | ||
| 
						 | 
					1455c402b9 | ||
| 
						 | 
					4c1fe4c30d | ||
| 
						 | 
					9b97a44760 | ||
| 
						 | 
					26fa7b8f6a | ||
| 
						 | 
					7486783692 | ||
| 
						 | 
					9929efb65e | ||
| 
						 | 
					5db48faca4 | ||
| 
						 | 
					b0c54b6675 | ||
| 
						 | 
					d8354cb153 | ||
| 
						 | 
					9a348aa859 | ||
| 
						 | 
					fe6e24ddbd | ||
| 
						 | 
					7e330bd65f | ||
| 
						 | 
					3f9c5823cb | ||
| 
						 | 
					2bdd97e067 | ||
| 
						 | 
					32fd1e8c08 | ||
| 
						 | 
					e126b6ed16 | ||
| 
						 | 
					4d8cb5408b | ||
| 
						 | 
					f852d2b0eb | ||
| 
						 | 
					5c3b27d02f | ||
| 
						 | 
					ead6556b50 | ||
| 
						 | 
					4afa66fe41 | ||
| 
						 | 
					408292959e | ||
| 
						 | 
					2d8d9dea97 | ||
| 
						 | 
					f38c90961a | ||
| 
						 | 
					aa47374d0e | ||
| 
						 | 
					5aee5048ba | ||
| 
						 | 
					0e3f80d238 | ||
| 
						 | 
					ef13ee4488 | ||
| 
						 | 
					8b5d34b24a | ||
| 
						 | 
					c614a2db28 | ||
| 
						 | 
					7360f51ee8 | ||
| 
						 | 
					6ae42f3845 | ||
| 
						 | 
					26b66826dc | ||
| 
						 | 
					6d082bf442 | ||
| 
						 | 
					aad2280309 | ||
| 
						 | 
					e3d5bc077d | ||
| 
						 | 
					777963eeb6 | ||
| 
						 | 
					4cc5b25493 | ||
| 
						 | 
					49c5228655 | ||
| 
						 | 
					85638c1b19 | ||
| 
						 | 
					2507e53d04 | ||
| 
						 | 
					a9c1c6d9fb | ||
| 
						 | 
					0a8e108f10 | ||
| 
						 | 
					859b01fc39 | ||
| 
						 | 
					e42206cc43 | ||
| 
						 | 
					41eea5a942 | ||
| 
						 | 
					197401fbf8 | ||
| 
						 | 
					9ab338d7b6 | ||
| 
						 | 
					aa5d8ac68c | ||
| 
						 | 
					0adc56779f | ||
| 
						 | 
					67eb289a6a | ||
| 
						 | 
					dfc4d0d523 | ||
| 
						 | 
					5f2bb43061 | ||
| 
						 | 
					fef81cd628 | ||
| 
						 | 
					3e8d0204bd | ||
| 
						 | 
					b2a530b326 | ||
| 
						 | 
					5ab116a87f | ||
| 
						 | 
					10b0351a59 | ||
| 
						 | 
					b64c69e4bc | ||
| 
						 | 
					c2e49f1bb5 | ||
| 
						 | 
					a3d63d0ac0 | ||
| 
						 | 
					88cae8bd3d | ||
| 
						 | 
					a6ec2b1d42 | ||
| 
						 | 
					ca600973ba | ||
| 
						 | 
					4b8dd51c4d | ||
| 
						 | 
					56c468a2ef | ||
| 
						 | 
					10b30eaba5 | ||
| 
						 | 
					328e3f8f4f | ||
| 
						 | 
					7bd69f0b32 | ||
| 
						 | 
					538e402d71 | ||
| 
						 | 
					9af6ec78ab | ||
| 
						 | 
					41e22ab592 | ||
| 
						 | 
					1303c626b1 | ||
| 
						 | 
					7eea82d3d7 | ||
| 
						 | 
					80e5955918 | ||
| 
						 | 
					ce989976fa | ||
| 
						 | 
					529e5adb2e | ||
| 
						 | 
					a70ae50ca9 | ||
| 
						 | 
					74882b2502 | ||
| 
						 | 
					5f49bda591 | ||
| 
						 | 
					edab8c3a4c | ||
| 
						 | 
					8153c5b544 | ||
| 
						 | 
					a4cef8586c | ||
| 
						 | 
					9b9bb9cf86 | ||
| 
						 | 
					dc5b2e396c | ||
| 
						 | 
					d23275bc76 | ||
| 
						 | 
					48e820235e | ||
| 
						 | 
					2d3c56b089 | ||
| 
						 | 
					85b2e59e7e | ||
| 
						 | 
					e1950ed76f | ||
| 
						 | 
					7938f41c11 | ||
| 
						 | 
					9f41bdb086 | ||
| 
						 | 
					8457e2bad6 | ||
| 
						 | 
					4d7329a7e2 | ||
| 
						 | 
					b4120a75e0 | ||
| 
						 | 
					b19e4592df | ||
| 
						 | 
					e9c9ee844c | ||
| 
						 | 
					f5f0ff0a2f | ||
| 
						 | 
					68dacb531b | ||
| 
						 | 
					dd82f4afcd | ||
| 
						 | 
					fc010e0edc | ||
| 
						 | 
					5132ea64be | ||
| 
						 | 
					82325cbcfd | ||
| 
						 | 
					fb5ebffb8d | ||
| 
						 | 
					94d843b80e | ||
| 
						 | 
					c32e2d17d9 | ||
| 
						 | 
					2b05748d5c | ||
| 
						 | 
					cd775929bf | ||
| 
						 | 
					7303a78b06 | ||
| 
						 | 
					07b8cc0773 | ||
| 
						 | 
					1bb0e18042 | ||
| 
						 | 
					05bc2e2331 | ||
| 
						 | 
					3b097c7e77 | ||
| 
						 | 
					0bc312a54b | ||
| 
						 | 
					2718699ccc | ||
| 
						 | 
					be175558c3 | ||
| 
						 | 
					df39a7d0fd | ||
| 
						 | 
					43cdf81f6b | ||
| 
						 | 
					183f4b0c13 | ||
| 
						 | 
					38a772bce7 | ||
| 
						 | 
					dd451547a5 | ||
| 
						 | 
					270da95cbc | ||
| 
						 | 
					76198e0b3b | ||
| 
						 | 
					efc190789f | ||
| 
						 | 
					81e99c2680 | ||
| 
						 | 
					755755a2f3 | ||
| 
						 | 
					4b23eb064c | ||
| 
						 | 
					498200776c | ||
| 
						 | 
					27b949d6ba | ||
| 
						 | 
					27ea62a79d | ||
| 
						 | 
					cf1edff9ed | ||
| 
						 | 
					5cb5baa7d4 | ||
| 
						 | 
					d620189ae3 | ||
| 
						 | 
					bc041e02b3 | ||
| 
						 | 
					4b4c2b1afa | ||
| 
						 | 
					05d15f8885 | ||
| 
						 | 
					561d71b8ae | ||
| 
						 | 
					177e47952a | ||
| 
						 | 
					374bb630f0 | ||
| 
						 | 
					fe5138dfc4 | ||
| 
						 | 
					68a9675d42 | ||
| 
						 | 
					020e0bb2ac | ||
| 
						 | 
					b47de58edd | ||
| 
						 | 
					24195d8d15 | ||
| 
						 | 
					3a7c37c60a | ||
| 
						 | 
					c69d5d978c | ||
| 
						 | 
					2f30098ab5 | ||
| 
						 | 
					e146428038 | ||
| 
						 | 
					5758401443 | ||
| 
						 | 
					f241bdba93 | ||
| 
						 | 
					410d66ca37 | ||
| 
						 | 
					f2309cdb55 | ||
| 
						 | 
					3887d25dbc | ||
| 
						 | 
					d6d01c85a6 | ||
| 
						 | 
					d0bfb94ff0 | ||
| 
						 | 
					2b1537cdf5 | ||
| 
						 | 
					d3362a6f05 | ||
| 
						 | 
					9cf8aa4584 | ||
| 
						 | 
					c76eedd794 | ||
| 
						 | 
					9131f26cae | ||
| 
						 | 
					8ed0dda40d | ||
| 
						 | 
					0fd9e38175 | ||
| 
						 | 
					891cab3bb3 | ||
| 
						 | 
					454bd88d27 | ||
| 
						 | 
					3ced749c89 | ||
| 
						 | 
					69b6479502 | ||
| 
						 | 
					a641b59f22 | ||
| 
						 | 
					704bd4c331 | ||
| 
						 | 
					229ac9c9dc | ||
| 
						 | 
					e435cf301f | ||
| 
						 | 
					0608ae2d4e | ||
| 
						 | 
					3f107da479 | ||
| 
						 | 
					813de50eba | ||
| 
						 | 
					a4cb1f0f7a | ||
| 
						 | 
					612432ac3e | ||
| 
						 | 
					47a01013b1 | ||
| 
						 | 
					69e7ad4402 | ||
| 
						 | 
					c214eb15bf | ||
| 
						 | 
					e6eac46629 | ||
| 
						 | 
					de61da16ae | ||
| 
						 | 
					bdcb395b33 | ||
| 
						 | 
					1caa7f7627 | ||
| 
						 | 
					5b4a96e3a3 | ||
| 
						 | 
					15dd23a323 | ||
| 
						 | 
					04d7fcf60d | ||
| 
						 | 
					9755cd469c | ||
| 
						 | 
					1bdadfa3e1 | ||
| 
						 | 
					20fcb88632 | ||
| 
						 | 
					6791d1b8e2 | ||
| 
						 | 
					6c8b103a7b | ||
| 
						 | 
					95d0117784 | ||
| 
						 | 
					740436ab4d | ||
| 
						 | 
					89fbf1e1d2 | ||
| 
						 | 
					c391cefd71 | ||
| 
						 | 
					52af529950 | ||
| 
						 | 
					c30cb069f5 | ||
| 
						 | 
					99a0b43f28 | ||
| 
						 | 
					af4017de49 | ||
| 
						 | 
					d804ecbd95 | ||
| 
						 | 
					1ad3382bff | ||
| 
						 | 
					9787b1cfd5 | ||
| 
						 | 
					0ac2eba4d3 | ||
| 
						 | 
					17c54c6e03 | ||
| 
						 | 
					dd14e1cebc | ||
| 
						 | 
					1e2266aa47 | ||
| 
						 | 
					472a434212 | ||
| 
						 | 
					7c226462e0 | ||
| 
						 | 
					93c6a869ec | ||
| 
						 | 
					9d914091f5 | ||
| 
						 | 
					afcc1bf512 | ||
| 
						 | 
					8a29c51b73 | ||
| 
						 | 
					d38c4c1f2d | ||
| 
						 | 
					2091df3856 | ||
| 
						 | 
					744b4dcb7c | ||
| 
						 | 
					0c64c35a8a | ||
| 
						 | 
					57acbc53fb | ||
| 
						 | 
					ac68631f4c | ||
| 
						 | 
					8163ca6821 | ||
| 
						 | 
					094e0356e8 | ||
| 
						 | 
					63450d69d3 | ||
| 
						 | 
					0952409de4 | ||
| 
						 | 
					1c54c7a1bb | ||
| 
						 | 
					f25f14351c | ||
| 
						 | 
					691e7951ea | ||
| 
						 | 
					7eaeba520a | ||
| 
						 | 
					9a5b94a340 | ||
| 
						 | 
					079b125430 | ||
| 
						 | 
					770a5a5bff | ||
| 
						 | 
					0548c9e7d5 | ||
| 
						 | 
					68a6cc5976 | ||
| 
						 | 
					2035f2f2e2 | ||
| 
						 | 
					1892a6b0c4 | ||
| 
						 | 
					b464004bb3 | ||
| 
						 | 
					ea4438284f | ||
| 
						 | 
					d050fdb17f | ||
| 
						 | 
					9003a42df3 | ||
| 
						 | 
					9e8ee491e6 | ||
| 
						 | 
					3b46345db4 | ||
| 
						 | 
					6b2a111428 | ||
| 
						 | 
					bc56971e18 | ||
| 
						 | 
					fcc0288f0c | ||
| 
						 | 
					4e03e89869 | ||
| 
						 | 
					4e17017501 | ||
| 
						 | 
					63bc86cd43 | ||
| 
						 | 
					ee32ca3efe | ||
| 
						 | 
					a393a614a1 | ||
| 
						 | 
					753e9c65a1 | ||
| 
						 | 
					409c92a68f | 
							
								
								
									
										8
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.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,10 @@ 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/meta/meta-version.h
 | 
			
		||||
src/libmutter-*.pc
 | 
			
		||||
doc/reference/*.args
 | 
			
		||||
@@ -112,3 +119,4 @@ ltsugar.m4
 | 
			
		||||
ltversion.m4
 | 
			
		||||
lt~obsolete.m4
 | 
			
		||||
.dirstamp
 | 
			
		||||
**/tags.*
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										248
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										248
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,3 +1,251 @@
 | 
			
		||||
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]
 | 
			
		||||
 | 
			
		||||
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]
 | 
			
		||||
* Add (x)wayland shortcut inhibitor support [Olivier; #783342]
 | 
			
		||||
* Misc. bug fixes [Daniel, Carlos, Cosimo; #785263, #785347, #767805]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Cosimo Cecchi, Olivier Fourdan, Carlos Garnacho, Daniel Stone
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Fabio Tomat [fur], Kukuh Syafaat [id], Aurimas Černius [lt],
 | 
			
		||||
  Daniel Mustieles [es], Baurzhan Muftakhidinov [kk], Jordi Mas [ca],
 | 
			
		||||
  Matej Urbančič [sl], Marek Cernocky [cs], gogo [hr], Fran Dieguez [gl],
 | 
			
		||||
  Balázs Meskó [hu]
 | 
			
		||||
 | 
			
		||||
3.25.4
 | 
			
		||||
======
 | 
			
		||||
* Do not throttle motion events on tablet tools [Carlos; #783535]
 | 
			
		||||
* Handle left-handed mode on pen/eraser devices [Carlos; #782027]
 | 
			
		||||
* Add wl_surface.damage_buffer() support [Jonas; #784080]
 | 
			
		||||
* Fix crash when moving across on-adjacent monitors [Jonas; #783630]
 | 
			
		||||
* Fix window moving/resizing via tablet tools [Jason; #777333]
 | 
			
		||||
* Support fractional monitor scaling [Jonas, Marco; #765011]
 | 
			
		||||
* Keep override-redirect windows stacked on top [Rui; #780485]
 | 
			
		||||
* Implement tablet rings/strips configuration [Carlos; #782033]
 | 
			
		||||
* Support tablet wheel events on wayland [Jason; #783716]
 | 
			
		||||
* Move g-s-d xrandr functionality into mutter [Rui; #781906]
 | 
			
		||||
* Misc. bug fixes [Florian, Jason, Miguel, Carlos, Jonas; #783502, #784009,
 | 
			
		||||
  #784223, #784272, #784402, #784881, #762083, #784867, #781723]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Miguel A. Vico, Emmanuele Bassi, Carlos Garnacho, Jason Gerecke,
 | 
			
		||||
  Rui Matos, Florian Müllner, Marco Trevisan (Treviño)
 | 
			
		||||
 | 
			
		||||
3.25.3
 | 
			
		||||
======
 | 
			
		||||
* Ignore hotplug-mode-update value on startup [Marco; #783073]
 | 
			
		||||
* Implement configurable monitor scales on X11 [Jonas; #777732]
 | 
			
		||||
* Fix handling of tiled monitors [Jonas; #781723]
 | 
			
		||||
* Handle multiple keycodes for keysym [Christian; #781223]
 | 
			
		||||
* Consider subsurfaces when grabbing [mindtree; #781811]
 | 
			
		||||
* Fix logic for HiPDPI scaling of TV outputs [Christian; #777347]
 | 
			
		||||
* Fix handling of left-handed mode on pen/eraser devices [Carlos; #782027]
 | 
			
		||||
* Fix output cycling in non-display-attached tablets [Carlos; #782032]
 | 
			
		||||
* Fix wacom cursor offset on wayland [Jason; #784009]
 | 
			
		||||
* Handle EXIF orientation of backgrounds [Silvère; #783125]
 | 
			
		||||
* Misc. bug fixes [Piotr, Tim, Bastien, Jonas, Florian, Benoit, Carlos; #772218,
 | 
			
		||||
  #783161, #780407, #783113, #783293, #783505, #781703]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  mitchmindtree, Jonas Ådahl, Ikey Doherty, Piotr Drąg, Carlos Garnacho,
 | 
			
		||||
  Jason Gerecke, Benoit Gschwind, Christian Kellner, Silvère Latchurié,
 | 
			
		||||
  Tim Lunn, Florian Müllner, Bastien Nocera, Marco Trevisan (Treviño)
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Fabio Tomat [fur], Kukuh Syafaat [id], Khaled Hosny [ar],
 | 
			
		||||
  Daniel Mustieles [es]
 | 
			
		||||
 | 
			
		||||
3.25.2
 | 
			
		||||
======
 | 
			
		||||
* Fix frame updates on hide-titlebar-when-maximized changes [Florian; #781862]
 | 
			
		||||
* Fix accessible screen coordinates on X11 [Florian; #781902]
 | 
			
		||||
* Use less CPU when rendering fast-updating windows [Carlos, Emmanuele; #782344]
 | 
			
		||||
* Compute geometry of clients that don't set one explicitly [Olivier; #782213]
 | 
			
		||||
* Fix copy+paste of UTF8 strings between X11 and wayland [Carlos; #782472]
 | 
			
		||||
* Fix non-wayland builds [Chris; #780533]
 | 
			
		||||
* Add plugin vfunc to implement a custom force-quit dialog [Carlos; #711619]
 | 
			
		||||
* Fix swapped red and blue channels in CoglTexture data [Carlos; #779234
 | 
			
		||||
* Fix build where libtool's link_all_deplibs defaults to 'no' [Marco; #782821]
 | 
			
		||||
* Fix glitches when opening a window maximized [Olivier; #781353, #782183]
 | 
			
		||||
* Fix wrong cursor after window underneath the pointer changed [Carlos; #755164]
 | 
			
		||||
* Implement support for disable-while-typing option [Evan; #764852]
 | 
			
		||||
* Emit size-change signal when tiling [Alessandro; #782968]
 | 
			
		||||
* Misc. bug fixes [Nigel, Matthias, Jonas; #759085, #780215, #782156, #782152]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Emmanuele Bassi, Alessandro Bono, Olivier Fourdan,
 | 
			
		||||
  Carlos Garnacho, Matthias Liertzer, Florian Müllner, Nigel Taylor,
 | 
			
		||||
  Marco Trevisan (Treviño), Chris Vine, Evan Welsh
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Fabio Tomat [fur], Jordi Mas [ca], Mario Blättermann [de],
 | 
			
		||||
  Emin Tufan Çetin [tr], Balázs Úr [hu]
 | 
			
		||||
 | 
			
		||||
3.25.1
 | 
			
		||||
======
 | 
			
		||||
* Always sync window geometry on state changes [Jonas; #780292]
 | 
			
		||||
* Use EGL instead of GLX when drawing using GLES [Jonas; #771636]
 | 
			
		||||
* Fix HiDPI detection on vertical monitor layouts [Carlos; #777687]
 | 
			
		||||
* Get double-click timing from desktop mouse settings [Armin; #771576]
 | 
			
		||||
* Scale relative motion deltas with monitor scale [Jonas, Carlos; #778119]
 | 
			
		||||
* Use texture fallback when setting hardware cursor fails [Jente; #770020]
 | 
			
		||||
* Fix lock-up when using additional theme variants [Shantanu; #780254]
 | 
			
		||||
* Rework low-level monitor configuration [Jonas; #777732]
 | 
			
		||||
* Fix building with GLES2 instead of GL [Mario; #781398]
 | 
			
		||||
* Misc. bug fixes [Jonas, Piotr, Philip; #780304, #772218, #781242, #781391]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Philip Chimento, Piotr Drąg, Carlos Garnacho, Shantanu Goel,
 | 
			
		||||
  Jente Hidskes, Armin Krezović, Rui Matos, Florian Müllner, Mario Sanchez Prada
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Yuras Shumovich [be], Yosef Or Boczko [he], Tom Tryfonidis [el],
 | 
			
		||||
  Fabio Tomat [fur], Kukuh Syafaat [id]
 | 
			
		||||
 | 
			
		||||
3.24.0
 | 
			
		||||
======
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,9 @@ test -z "$srcdir" && srcdir=.
 | 
			
		||||
 | 
			
		||||
REQUIRED_AUTOMAKE_VERSION=1.11
 | 
			
		||||
 | 
			
		||||
pushd $srcdir
 | 
			
		||||
olddir="$(pwd)"
 | 
			
		||||
 | 
			
		||||
cd "${srcdir}"
 | 
			
		||||
 | 
			
		||||
(test -f configure.ac \
 | 
			
		||||
  && test -d src) || {
 | 
			
		||||
@@ -19,8 +21,8 @@ aclocal --install || exit 1
 | 
			
		||||
intltoolize --force --copy --automake || exit 1
 | 
			
		||||
autoreconf --verbose --force --install || exit 1
 | 
			
		||||
 | 
			
		||||
popd
 | 
			
		||||
cd "${olddir}"
 | 
			
		||||
 | 
			
		||||
if [ "$NOCONFIGURE" = "" ]; then
 | 
			
		||||
    $srcdir/configure "$@" || exit 1
 | 
			
		||||
    "${srcdir}/configure" "$@" || exit 1
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -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 = \
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,7 @@ stamp-marshal: $(marshal_list)
 | 
			
		||||
	$(AM_V_GEN)$(GLIB_GENMARSHAL) \
 | 
			
		||||
		--prefix=$(glib_marshal_prefix) \
 | 
			
		||||
		--header \
 | 
			
		||||
		--valist-marshallers \
 | 
			
		||||
	$(marshal_list) > xgen-mh \
 | 
			
		||||
	&& (cmp -s xgen-mh $(marshal_h) || cp -f xgen-mh $(marshal_h)) \
 | 
			
		||||
	&& rm -f xgen-mh \
 | 
			
		||||
@@ -43,10 +44,11 @@ $(marshal_h): stamp-marshal
 | 
			
		||||
	@true
 | 
			
		||||
 | 
			
		||||
$(marshal_c): $(marshal_h)
 | 
			
		||||
	$(AM_V_GEN)(echo "#include \"$(marshal_h)\"" ; \
 | 
			
		||||
	$(GLIB_GENMARSHAL) \
 | 
			
		||||
	$(AM_V_GEN)$(GLIB_GENMARSHAL) \
 | 
			
		||||
		--prefix=$(glib_marshal_prefix) \
 | 
			
		||||
		--body \
 | 
			
		||||
	$(marshal_list)) > xgen-mc \
 | 
			
		||||
	&& cp xgen-mc $(marshal_c) \
 | 
			
		||||
		--valist-marshallers \
 | 
			
		||||
		--prototypes \
 | 
			
		||||
	$(marshal_list) > xgen-mc \
 | 
			
		||||
	&& (cmp -s xgen-mc $(marshal_c) || cp -f xgen-mc $(marshal_c)) \
 | 
			
		||||
	&& rm -f xgen-mc
 | 
			
		||||
 
 | 
			
		||||
@@ -781,7 +781,7 @@ _cally_actor_get_top_level_origin (ClutterActor *actor,
 | 
			
		||||
                   "position of the stage");
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
#else
 | 
			
		||||
#endif
 | 
			
		||||
    {
 | 
			
		||||
      static gboolean yet_warned = FALSE;
 | 
			
		||||
 | 
			
		||||
@@ -793,7 +793,6 @@ _cally_actor_get_top_level_origin (ClutterActor *actor,
 | 
			
		||||
                     "atk_component_get_extents() with ATK_XY_SCREEN.");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  if (xp)
 | 
			
		||||
    *xp = x;
 | 
			
		||||
 
 | 
			
		||||
@@ -2656,7 +2656,15 @@ _clutter_actor_signal_queue_redraw (ClutterActor *self,
 | 
			
		||||
  _clutter_actor_queue_redraw_on_clones (self);
 | 
			
		||||
 | 
			
		||||
  /* calls klass->queue_redraw in default handler */
 | 
			
		||||
  g_signal_emit (self, actor_signals[QUEUE_REDRAW], 0, origin);
 | 
			
		||||
  if (g_signal_has_handler_pending (self, actor_signals[QUEUE_REDRAW],
 | 
			
		||||
                                    0, TRUE))
 | 
			
		||||
    {
 | 
			
		||||
      g_signal_emit (self, actor_signals[QUEUE_REDRAW], 0, origin);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      CLUTTER_ACTOR_GET_CLASS (self)->queue_redraw (self, origin);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -4015,7 +4023,11 @@ clutter_actor_continue_paint (ClutterActor *self)
 | 
			
		||||
          clutter_paint_node_unref (dummy);
 | 
			
		||||
 | 
			
		||||
          /* XXX:2.0 - Call the paint() virtual directly */
 | 
			
		||||
          g_signal_emit (self, actor_signals[PAINT], 0);
 | 
			
		||||
          if (g_signal_has_handler_pending (self, actor_signals[PAINT],
 | 
			
		||||
                                            0, TRUE))
 | 
			
		||||
            g_signal_emit (self, actor_signals[PAINT], 0);
 | 
			
		||||
          else
 | 
			
		||||
            CLUTTER_ACTOR_GET_CLASS (self)->paint (self);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
@@ -4029,7 +4041,11 @@ clutter_actor_continue_paint (ClutterActor *self)
 | 
			
		||||
           *
 | 
			
		||||
           * XXX:2.0 - Call the pick() virtual directly
 | 
			
		||||
           */
 | 
			
		||||
          g_signal_emit (self, actor_signals[PICK], 0, &col);
 | 
			
		||||
          if (g_signal_has_handler_pending (self, actor_signals[PICK],
 | 
			
		||||
                                            0, TRUE))
 | 
			
		||||
            g_signal_emit (self, actor_signals[PICK], 0, &col);
 | 
			
		||||
          else
 | 
			
		||||
            CLUTTER_ACTOR_GET_CLASS (self)->pick (self, &col);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
 
 | 
			
		||||
@@ -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__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -76,9 +76,6 @@ struct _ClutterCanvasPrivate
 | 
			
		||||
  gboolean dirty;
 | 
			
		||||
 | 
			
		||||
  CoglBitmap *buffer;
 | 
			
		||||
 | 
			
		||||
  int scale_factor;
 | 
			
		||||
  guint scale_factor_set : 1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
@@ -87,8 +84,6 @@ enum
 | 
			
		||||
 | 
			
		||||
  PROP_WIDTH,
 | 
			
		||||
  PROP_HEIGHT,
 | 
			
		||||
  PROP_SCALE_FACTOR,
 | 
			
		||||
  PROP_SCALE_FACTOR_SET,
 | 
			
		||||
 | 
			
		||||
  LAST_PROP
 | 
			
		||||
};
 | 
			
		||||
@@ -185,11 +180,6 @@ clutter_canvas_set_property (GObject      *gobject,
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_SCALE_FACTOR:
 | 
			
		||||
      clutter_canvas_set_scale_factor (CLUTTER_CANVAS (gobject),
 | 
			
		||||
                                       g_value_get_int (value));
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
 | 
			
		||||
      break;
 | 
			
		||||
@@ -214,17 +204,6 @@ clutter_canvas_get_property (GObject    *gobject,
 | 
			
		||||
      g_value_set_int (value, priv->height);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_SCALE_FACTOR:
 | 
			
		||||
      if (priv->scale_factor_set)
 | 
			
		||||
        g_value_set_int (value, priv->scale_factor);
 | 
			
		||||
      else
 | 
			
		||||
        g_value_set_int (value, -1);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_SCALE_FACTOR_SET:
 | 
			
		||||
      g_value_set_boolean (value, priv->scale_factor_set);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
 | 
			
		||||
      break;
 | 
			
		||||
@@ -268,46 +247,6 @@ clutter_canvas_class_init (ClutterCanvasClass *klass)
 | 
			
		||||
                      G_PARAM_READWRITE |
 | 
			
		||||
                      G_PARAM_STATIC_STRINGS);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterCanvas:scale-factor-set:
 | 
			
		||||
   *
 | 
			
		||||
   * Whether the #ClutterCanvas:scale-factor property is set.
 | 
			
		||||
   *
 | 
			
		||||
   * If the #ClutterCanvas:scale-factor-set property is %FALSE
 | 
			
		||||
   * then #ClutterCanvas will use the #ClutterSettings:window-scaling-factor
 | 
			
		||||
   * property.
 | 
			
		||||
   *
 | 
			
		||||
   * Since: 1.18
 | 
			
		||||
   */
 | 
			
		||||
  obj_props[PROP_SCALE_FACTOR_SET] =
 | 
			
		||||
    g_param_spec_boolean ("scale-factor-set",
 | 
			
		||||
                          P_("Scale Factor Set"),
 | 
			
		||||
                          P_("Whether the scale-factor property is set"),
 | 
			
		||||
                          FALSE,
 | 
			
		||||
                          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterCanvas:scale-factor:
 | 
			
		||||
   *
 | 
			
		||||
   * The scaling factor to be applied to the Cairo surface used for
 | 
			
		||||
   * drawing.
 | 
			
		||||
   *
 | 
			
		||||
   * If #ClutterCanvas:scale-factor is set to a negative value, the
 | 
			
		||||
   * value of the #ClutterSettings:window-scaling-factor property is
 | 
			
		||||
   * used instead.
 | 
			
		||||
   *
 | 
			
		||||
   * Use #ClutterCanvas:scale-factor-set to check if the scale factor
 | 
			
		||||
   * is set.
 | 
			
		||||
   *
 | 
			
		||||
   * Since: 1.18
 | 
			
		||||
   */
 | 
			
		||||
  obj_props[PROP_SCALE_FACTOR] =
 | 
			
		||||
    g_param_spec_int ("scale-factor",
 | 
			
		||||
                      P_("Scale Factor"),
 | 
			
		||||
                      P_("The scaling factor for the surface"),
 | 
			
		||||
                      -1, 1000,
 | 
			
		||||
                      -1,
 | 
			
		||||
                      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * ClutterCanvas::draw:
 | 
			
		||||
@@ -354,7 +293,6 @@ clutter_canvas_init (ClutterCanvas *self)
 | 
			
		||||
 | 
			
		||||
  self->priv->width = -1;
 | 
			
		||||
  self->priv->height = -1;
 | 
			
		||||
  self->priv->scale_factor = -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -397,7 +335,6 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
 | 
			
		||||
  gboolean mapped_buffer;
 | 
			
		||||
  unsigned char *data;
 | 
			
		||||
  CoglBuffer *buffer;
 | 
			
		||||
  int window_scale = 1;
 | 
			
		||||
  gboolean res;
 | 
			
		||||
  cairo_t *cr;
 | 
			
		||||
 | 
			
		||||
@@ -405,20 +342,11 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
 | 
			
		||||
 | 
			
		||||
  priv->dirty = TRUE;
 | 
			
		||||
 | 
			
		||||
  if (priv->scale_factor_set)
 | 
			
		||||
    window_scale = priv->scale_factor;
 | 
			
		||||
  else
 | 
			
		||||
    g_object_get (clutter_settings_get_default (),
 | 
			
		||||
                  "window-scaling-factor", &window_scale,
 | 
			
		||||
                  NULL);
 | 
			
		||||
  real_width = priv->width;
 | 
			
		||||
  real_height = priv->height;
 | 
			
		||||
 | 
			
		||||
  real_width = priv->width * window_scale;
 | 
			
		||||
  real_height = priv->height * window_scale;
 | 
			
		||||
 | 
			
		||||
  CLUTTER_NOTE (MISC, "Creating Cairo surface with size %d x %d (real: %d x %d, scale: %d)",
 | 
			
		||||
                priv->width, priv->height,
 | 
			
		||||
                real_width, real_height,
 | 
			
		||||
                window_scale);
 | 
			
		||||
  CLUTTER_NOTE (MISC, "Creating Cairo surface with size %d x %d",
 | 
			
		||||
                priv->width, priv->height);
 | 
			
		||||
 | 
			
		||||
  if (priv->buffer == NULL)
 | 
			
		||||
    {
 | 
			
		||||
@@ -461,8 +389,6 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
 | 
			
		||||
      mapped_buffer = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  cairo_surface_set_device_scale (surface, window_scale, window_scale);
 | 
			
		||||
 | 
			
		||||
  self->priv->cr = cr = cairo_create (surface);
 | 
			
		||||
 | 
			
		||||
  g_signal_emit (self, canvas_signals[DRAW], 0,
 | 
			
		||||
@@ -636,81 +562,3 @@ clutter_canvas_set_size (ClutterCanvas *canvas,
 | 
			
		||||
 | 
			
		||||
  return clutter_canvas_invalidate_internal (canvas, width, height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_canvas_set_scale_factor:
 | 
			
		||||
 * @canvas: a #ClutterCanvas
 | 
			
		||||
 * @scale: the scale factor, or -1 for the default
 | 
			
		||||
 *
 | 
			
		||||
 * Sets the scaling factor for the Cairo surface used by @canvas.
 | 
			
		||||
 *
 | 
			
		||||
 * This function should rarely be used.
 | 
			
		||||
 *
 | 
			
		||||
 * The default scaling factor of a #ClutterCanvas content uses the
 | 
			
		||||
 * #ClutterSettings:window-scaling-factor property, which is set by
 | 
			
		||||
 * the windowing system. By using this function it is possible to
 | 
			
		||||
 * override that setting.
 | 
			
		||||
 *
 | 
			
		||||
 * Changing the scale factor will invalidate the @canvas.
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.18
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_canvas_set_scale_factor (ClutterCanvas *canvas,
 | 
			
		||||
                                 int            scale)
 | 
			
		||||
{
 | 
			
		||||
  ClutterCanvasPrivate *priv;
 | 
			
		||||
  GObject *obj;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_CANVAS (canvas));
 | 
			
		||||
  g_return_if_fail (scale != 0);
 | 
			
		||||
 | 
			
		||||
  priv = canvas->priv;
 | 
			
		||||
 | 
			
		||||
  if (scale < 0)
 | 
			
		||||
    {
 | 
			
		||||
      if (!priv->scale_factor_set)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
      priv->scale_factor_set = FALSE;
 | 
			
		||||
      priv->scale_factor = -1;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (priv->scale_factor_set && priv->scale_factor == scale)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
      priv->scale_factor_set = TRUE;
 | 
			
		||||
      priv->scale_factor = scale;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  clutter_content_invalidate (CLUTTER_CONTENT (canvas));
 | 
			
		||||
 | 
			
		||||
  obj = G_OBJECT (canvas);
 | 
			
		||||
 | 
			
		||||
  g_object_notify_by_pspec (obj, obj_props[PROP_SCALE_FACTOR]);
 | 
			
		||||
  g_object_notify_by_pspec (obj, obj_props[PROP_SCALE_FACTOR_SET]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_canvas_get_scale_factor:
 | 
			
		||||
 * @canvas: a #ClutterCanvas
 | 
			
		||||
 *
 | 
			
		||||
 * Retrieves the scaling factor of @canvas, as set using
 | 
			
		||||
 * clutter_canvas_set_scale_factor().
 | 
			
		||||
 *
 | 
			
		||||
 * Return value: the scaling factor, or -1 if the @canvas
 | 
			
		||||
 *   uses the default from #ClutterSettings
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.18
 | 
			
		||||
 */
 | 
			
		||||
int
 | 
			
		||||
clutter_canvas_get_scale_factor (ClutterCanvas *canvas)
 | 
			
		||||
{
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_CANVAS (canvas), -1);
 | 
			
		||||
 | 
			
		||||
  if (!canvas->priv->scale_factor_set)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  return canvas->priv->scale_factor;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@
 | 
			
		||||
#include "clutter-debug.h"
 | 
			
		||||
 | 
			
		||||
/* XXX - keep in sync with the ClutterStaticColor enumeration order */
 | 
			
		||||
static const ClutterColor const static_colors[] = {
 | 
			
		||||
static const ClutterColor static_colors[] = {
 | 
			
		||||
  /* CGA/EGA color palette */
 | 
			
		||||
  { 0xff, 0xff, 0xff, 0xff },   /* white */
 | 
			
		||||
  { 0x00, 0x00, 0x00, 0xff },   /* black */
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -487,3 +532,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,25 @@ typedef struct _ClutterDeviceManager            ClutterDeviceManager;
 | 
			
		||||
typedef struct _ClutterDeviceManagerPrivate     ClutterDeviceManagerPrivate;
 | 
			
		||||
typedef struct _ClutterDeviceManagerClass       ClutterDeviceManagerClass;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 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:
 | 
			
		||||
 *
 | 
			
		||||
@@ -88,7 +107,9 @@ struct _ClutterDeviceManagerClass
 | 
			
		||||
  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 +135,13 @@ CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
ClutterVirtualInputDevice *clutter_device_manager_create_virtual_device (ClutterDeviceManager  *device_manager,
 | 
			
		||||
                                                                         ClutterInputDeviceType device_type);
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
@@ -730,8 +767,9 @@ typedef enum { /*< prefix=CLUTTER_DRAG >*/
 | 
			
		||||
 * 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
 | 
			
		||||
} ClutterEventFlags;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -1536,6 +1574,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__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -2179,3 +2179,61 @@ clutter_event_get_mode_group (const ClutterEvent *event)
 | 
			
		||||
      return 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_event_get_pad_event_details:
 | 
			
		||||
 * @event: a pad event
 | 
			
		||||
 * @number: (out) (optional): ring/strip/button number
 | 
			
		||||
 * @mode: (out) (optional): pad mode as per the event
 | 
			
		||||
 * @value: (out) (optional): event axis value
 | 
			
		||||
 *
 | 
			
		||||
 * Returns the details of a pad event.
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: #TRUE if event details could be obtained
 | 
			
		||||
 **/
 | 
			
		||||
gboolean
 | 
			
		||||
clutter_event_get_pad_event_details (const ClutterEvent *event,
 | 
			
		||||
                                     guint              *number,
 | 
			
		||||
                                     guint              *mode,
 | 
			
		||||
                                     gdouble            *value)
 | 
			
		||||
{
 | 
			
		||||
  guint n, m;
 | 
			
		||||
  gdouble v;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (event != NULL, FALSE);
 | 
			
		||||
  g_return_val_if_fail (event->type == CLUTTER_PAD_BUTTON_PRESS ||
 | 
			
		||||
                        event->type == CLUTTER_PAD_BUTTON_RELEASE ||
 | 
			
		||||
                        event->type == CLUTTER_PAD_RING ||
 | 
			
		||||
                        event->type == CLUTTER_PAD_STRIP, FALSE);
 | 
			
		||||
 | 
			
		||||
  switch (event->type)
 | 
			
		||||
    {
 | 
			
		||||
    case CLUTTER_PAD_BUTTON_PRESS:
 | 
			
		||||
    case CLUTTER_PAD_BUTTON_RELEASE:
 | 
			
		||||
      n = event->pad_button.button;
 | 
			
		||||
      m = event->pad_button.mode;
 | 
			
		||||
      v = 0.0;
 | 
			
		||||
      break;
 | 
			
		||||
    case CLUTTER_PAD_RING:
 | 
			
		||||
      n = event->pad_ring.ring_number;
 | 
			
		||||
      m = event->pad_ring.mode;
 | 
			
		||||
      v = event->pad_ring.angle;
 | 
			
		||||
      break;
 | 
			
		||||
    case CLUTTER_PAD_STRIP:
 | 
			
		||||
      n = event->pad_strip.strip_number;
 | 
			
		||||
      m = event->pad_strip.mode;
 | 
			
		||||
      v = event->pad_strip.value;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (number)
 | 
			
		||||
    *number = n;
 | 
			
		||||
  if (mode)
 | 
			
		||||
    *mode = m;
 | 
			
		||||
  if (value)
 | 
			
		||||
    *value = v;
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -778,6 +778,12 @@ ClutterScrollFinishFlags clutter_event_get_scroll_finish_flags       (const Clut
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
guint                    clutter_event_get_mode_group                (const ClutterEvent     *event);
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_MUTTER
 | 
			
		||||
gboolean                 clutter_event_get_pad_event_details         (const ClutterEvent     *event,
 | 
			
		||||
                                                                      guint                  *number,
 | 
			
		||||
                                                                      guint                  *mode,
 | 
			
		||||
                                                                      gdouble                *value);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2243,10 +2243,15 @@ clutter_input_device_get_device_node (ClutterInputDevice *device)
 | 
			
		||||
ClutterInputDeviceMapping
 | 
			
		||||
clutter_input_device_get_mapping_mode (ClutterInputDevice *device)
 | 
			
		||||
{
 | 
			
		||||
  ClutterInputDeviceType device_type;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device),
 | 
			
		||||
                        CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE);
 | 
			
		||||
  g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
 | 
			
		||||
                        CLUTTER_TABLET_DEVICE,
 | 
			
		||||
 | 
			
		||||
  device_type = clutter_input_device_get_device_type (device);
 | 
			
		||||
  g_return_val_if_fail (device_type == CLUTTER_TABLET_DEVICE ||
 | 
			
		||||
                        device_type == CLUTTER_PEN_DEVICE ||
 | 
			
		||||
                        device_type == CLUTTER_ERASER_DEVICE,
 | 
			
		||||
                        CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE);
 | 
			
		||||
 | 
			
		||||
  return device->mapping_mode;
 | 
			
		||||
@@ -2256,9 +2261,14 @@ void
 | 
			
		||||
clutter_input_device_set_mapping_mode (ClutterInputDevice        *device,
 | 
			
		||||
                                       ClutterInputDeviceMapping  mapping)
 | 
			
		||||
{
 | 
			
		||||
  ClutterInputDeviceType device_type;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
 | 
			
		||||
  g_return_if_fail (clutter_input_device_get_device_type (device) ==
 | 
			
		||||
                    CLUTTER_TABLET_DEVICE);
 | 
			
		||||
 | 
			
		||||
  device_type = clutter_input_device_get_device_type (device);
 | 
			
		||||
  g_return_if_fail (device_type == CLUTTER_TABLET_DEVICE ||
 | 
			
		||||
                    device_type == CLUTTER_PEN_DEVICE ||
 | 
			
		||||
                    device_type == CLUTTER_ERASER_DEVICE);
 | 
			
		||||
 | 
			
		||||
  if (device->mapping_mode == mapping)
 | 
			
		||||
    return;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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__ */
 | 
			
		||||
							
								
								
									
										442
									
								
								clutter/clutter/clutter-input-method.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										442
									
								
								clutter/clutter/clutter-input-method.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,442 @@
 | 
			
		||||
/*
 | 
			
		||||
 * 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:
 | 
			
		||||
 * @method: a #ClutterInputMethod
 | 
			
		||||
 * @preedit: (nullable): the preedit text, or %NULL
 | 
			
		||||
 *
 | 
			
		||||
 * 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_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;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,7 @@ VOID:BOXED,FLAGS
 | 
			
		||||
VOID:INT
 | 
			
		||||
VOID:INT64,INT64,FLOAT,BOOLEAN
 | 
			
		||||
VOID:INT,INT
 | 
			
		||||
VOID:INT,POINTER
 | 
			
		||||
VOID:FLOAT,FLOAT
 | 
			
		||||
VOID:INT,INT,INT,INT
 | 
			
		||||
VOID:OBJECT
 | 
			
		||||
 
 | 
			
		||||
@@ -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__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -77,9 +77,7 @@ struct _ClutterSettings
 | 
			
		||||
 | 
			
		||||
  guint password_hint_time;
 | 
			
		||||
 | 
			
		||||
  gint window_scaling_factor;
 | 
			
		||||
  gint unscaled_font_dpi;
 | 
			
		||||
  guint fixed_scaling_factor : 1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ClutterSettingsClass
 | 
			
		||||
@@ -112,7 +110,6 @@ enum
 | 
			
		||||
 | 
			
		||||
  PROP_PASSWORD_HINT_TIME,
 | 
			
		||||
 | 
			
		||||
  PROP_WINDOW_SCALING_FACTOR,
 | 
			
		||||
  PROP_UNSCALED_FONT_DPI,
 | 
			
		||||
 | 
			
		||||
  PROP_LAST
 | 
			
		||||
@@ -355,14 +352,6 @@ clutter_settings_set_property (GObject      *gobject,
 | 
			
		||||
      self->password_hint_time = g_value_get_uint (value);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_WINDOW_SCALING_FACTOR:
 | 
			
		||||
      if (!self->fixed_scaling_factor)
 | 
			
		||||
        {
 | 
			
		||||
          self->window_scaling_factor = g_value_get_int (value);
 | 
			
		||||
          self->fixed_scaling_factor = TRUE;
 | 
			
		||||
        }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_UNSCALED_FONT_DPI:
 | 
			
		||||
      self->font_dpi = g_value_get_int (value);
 | 
			
		||||
      settings_update_resolution (self);
 | 
			
		||||
@@ -382,14 +371,7 @@ clutter_settings_set_property_internal (ClutterSettings *self,
 | 
			
		||||
 | 
			
		||||
  property = g_intern_string (property);
 | 
			
		||||
 | 
			
		||||
  if (property == I_("window-scaling-factor") &&
 | 
			
		||||
      self->fixed_scaling_factor)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  g_object_set_property (G_OBJECT (self), property, value);
 | 
			
		||||
 | 
			
		||||
  if (property == I_("window-scaling-factor"))
 | 
			
		||||
    self->fixed_scaling_factor = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -446,10 +428,6 @@ clutter_settings_get_property (GObject    *gobject,
 | 
			
		||||
      g_value_set_uint (value, self->password_hint_time);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case PROP_WINDOW_SCALING_FACTOR:
 | 
			
		||||
      g_value_set_int (value, self->window_scaling_factor);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
 | 
			
		||||
      break;
 | 
			
		||||
@@ -677,14 +655,6 @@ clutter_settings_class_init (ClutterSettingsClass *klass)
 | 
			
		||||
                      500,
 | 
			
		||||
                      CLUTTER_PARAM_READWRITE);
 | 
			
		||||
 | 
			
		||||
  obj_props[PROP_WINDOW_SCALING_FACTOR] =
 | 
			
		||||
    g_param_spec_int ("window-scaling-factor",
 | 
			
		||||
                      P_("Window Scaling Factor"),
 | 
			
		||||
                      P_("The scaling factor to be applied to windows"),
 | 
			
		||||
                      1, G_MAXINT,
 | 
			
		||||
                      1,
 | 
			
		||||
                      CLUTTER_PARAM_READWRITE);
 | 
			
		||||
 | 
			
		||||
  obj_props[PROP_FONTCONFIG_TIMESTAMP] =
 | 
			
		||||
    g_param_spec_uint ("fontconfig-timestamp",
 | 
			
		||||
                       P_("Fontconfig configuration timestamp"),
 | 
			
		||||
@@ -722,8 +692,6 @@ clutter_settings_class_init (ClutterSettingsClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
clutter_settings_init (ClutterSettings *self)
 | 
			
		||||
{
 | 
			
		||||
  const char *scale_str;
 | 
			
		||||
 | 
			
		||||
  self->resolution = -1.0;
 | 
			
		||||
 | 
			
		||||
  self->font_dpi = -1;
 | 
			
		||||
@@ -742,18 +710,6 @@ clutter_settings_init (ClutterSettings *self)
 | 
			
		||||
  self->xft_rgba = NULL;
 | 
			
		||||
 | 
			
		||||
  self->long_press_duration = 500;
 | 
			
		||||
 | 
			
		||||
  /* if the scaling factor was set by the environment we ignore
 | 
			
		||||
   * any explicit setting
 | 
			
		||||
   */
 | 
			
		||||
  scale_str = g_getenv ("CLUTTER_SCALE");
 | 
			
		||||
  if (scale_str != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      self->window_scaling_factor = atol (scale_str);
 | 
			
		||||
      self->fixed_scaling_factor = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    self->window_scaling_factor = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@
 | 
			
		||||
#include "clutter/clutter-stage-view.h"
 | 
			
		||||
 | 
			
		||||
#include <cairo-gobject.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
@@ -28,6 +29,7 @@ enum
 | 
			
		||||
  PROP_LAYOUT,
 | 
			
		||||
  PROP_FRAMEBUFFER,
 | 
			
		||||
  PROP_OFFSCREEN,
 | 
			
		||||
  PROP_SCALE,
 | 
			
		||||
 | 
			
		||||
  PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
@@ -37,6 +39,7 @@ static GParamSpec *obj_props[PROP_LAST];
 | 
			
		||||
typedef struct _ClutterStageViewPrivate
 | 
			
		||||
{
 | 
			
		||||
  cairo_rectangle_int_t layout;
 | 
			
		||||
  float scale;
 | 
			
		||||
  CoglFramebuffer *framebuffer;
 | 
			
		||||
 | 
			
		||||
  CoglOffscreen *offscreen;
 | 
			
		||||
@@ -141,6 +144,15 @@ clutter_stage_view_blit_offscreen (ClutterStageView            *view,
 | 
			
		||||
  cogl_framebuffer_pop_matrix (priv->framebuffer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float
 | 
			
		||||
clutter_stage_view_get_scale (ClutterStageView *view)
 | 
			
		||||
{
 | 
			
		||||
  ClutterStageViewPrivate *priv =
 | 
			
		||||
    clutter_stage_view_get_instance_private (view);
 | 
			
		||||
 | 
			
		||||
  return priv->scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
clutter_stage_view_is_dirty_viewport (ClutterStageView *view)
 | 
			
		||||
{
 | 
			
		||||
@@ -229,6 +241,9 @@ clutter_stage_view_get_property (GObject    *object,
 | 
			
		||||
    case PROP_OFFSCREEN:
 | 
			
		||||
      g_value_set_boxed (value, priv->offscreen);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_SCALE:
 | 
			
		||||
      g_value_set_float (value, priv->scale);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
    }
 | 
			
		||||
@@ -253,10 +268,27 @@ clutter_stage_view_set_property (GObject      *object,
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_FRAMEBUFFER:
 | 
			
		||||
      priv->framebuffer = g_value_dup_boxed (value);
 | 
			
		||||
#ifndef G_DISABLE_CHECKS
 | 
			
		||||
      if (priv->framebuffer)
 | 
			
		||||
        {
 | 
			
		||||
          int fb_width, fb_height;
 | 
			
		||||
 | 
			
		||||
          fb_width = cogl_framebuffer_get_width (priv->framebuffer);
 | 
			
		||||
          fb_height = cogl_framebuffer_get_height (priv->framebuffer);
 | 
			
		||||
 | 
			
		||||
          g_warn_if_fail (fabsf (roundf (fb_width / priv->scale) -
 | 
			
		||||
                                 fb_width / priv->scale) < FLT_EPSILON);
 | 
			
		||||
          g_warn_if_fail (fabsf (roundf (fb_height / priv->scale) -
 | 
			
		||||
                                 fb_height / priv->scale) < FLT_EPSILON);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_OFFSCREEN:
 | 
			
		||||
      priv->offscreen = g_value_dup_boxed (value);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_SCALE:
 | 
			
		||||
      priv->scale = g_value_get_float (value);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
    }
 | 
			
		||||
@@ -284,6 +316,7 @@ clutter_stage_view_init (ClutterStageView *view)
 | 
			
		||||
 | 
			
		||||
  priv->dirty_viewport = TRUE;
 | 
			
		||||
  priv->dirty_projection = TRUE;
 | 
			
		||||
  priv->scale = 1.0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -304,6 +337,7 @@ clutter_stage_view_class_init (ClutterStageViewClass *klass)
 | 
			
		||||
                        "The view layout on the screen",
 | 
			
		||||
                        CAIRO_GOBJECT_TYPE_RECTANGLE_INT,
 | 
			
		||||
                        G_PARAM_READWRITE |
 | 
			
		||||
                        G_PARAM_CONSTRUCT |
 | 
			
		||||
                        G_PARAM_STATIC_STRINGS);
 | 
			
		||||
 | 
			
		||||
  obj_props[PROP_FRAMEBUFFER] =
 | 
			
		||||
@@ -312,6 +346,7 @@ clutter_stage_view_class_init (ClutterStageViewClass *klass)
 | 
			
		||||
                        "The front buffer of the view",
 | 
			
		||||
                        COGL_TYPE_HANDLE,
 | 
			
		||||
                        G_PARAM_READWRITE |
 | 
			
		||||
                        G_PARAM_CONSTRUCT |
 | 
			
		||||
                        G_PARAM_STATIC_STRINGS);
 | 
			
		||||
 | 
			
		||||
  obj_props[PROP_OFFSCREEN] =
 | 
			
		||||
@@ -320,7 +355,16 @@ 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] =
 | 
			
		||||
    g_param_spec_float ("scale",
 | 
			
		||||
                        "View scale",
 | 
			
		||||
                        "The view scale",
 | 
			
		||||
                        0.5, G_MAXFLOAT, 1.0,
 | 
			
		||||
                        G_PARAM_READWRITE |
 | 
			
		||||
                        G_PARAM_CONSTRUCT |
 | 
			
		||||
                        G_PARAM_STATIC_STRINGS);
 | 
			
		||||
 | 
			
		||||
  g_object_class_install_properties (object_class, PROP_LAST, obj_props);
 | 
			
		||||
 
 | 
			
		||||
@@ -60,6 +60,9 @@ void             clutter_stage_view_transform_to_onscreen (ClutterStageView *vie
 | 
			
		||||
void clutter_stage_view_blit_offscreen (ClutterStageView            *view,
 | 
			
		||||
					const cairo_rectangle_int_t *clip);
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_MUTTER
 | 
			
		||||
float clutter_stage_view_get_scale (ClutterStageView *view);
 | 
			
		||||
 | 
			
		||||
gboolean clutter_stage_view_is_dirty_viewport (ClutterStageView *view);
 | 
			
		||||
 | 
			
		||||
void clutter_stage_view_set_dirty_viewport (ClutterStageView *view,
 | 
			
		||||
 
 | 
			
		||||
@@ -303,33 +303,6 @@ _clutter_stage_window_can_clip_redraws (ClutterStageWindow *window)
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_stage_window_set_scale_factor (ClutterStageWindow *window,
 | 
			
		||||
                                        int                 factor)
 | 
			
		||||
{
 | 
			
		||||
  ClutterStageWindowIface *iface;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (CLUTTER_IS_STAGE_WINDOW (window));
 | 
			
		||||
 | 
			
		||||
  iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
 | 
			
		||||
  if (iface->set_scale_factor != NULL)
 | 
			
		||||
    iface->set_scale_factor (window, factor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
_clutter_stage_window_get_scale_factor (ClutterStageWindow *window)
 | 
			
		||||
{
 | 
			
		||||
  ClutterStageWindowIface *iface;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_STAGE_WINDOW (window), 1);
 | 
			
		||||
 | 
			
		||||
  iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
 | 
			
		||||
  if (iface->get_scale_factor != NULL)
 | 
			
		||||
    return iface->get_scale_factor (window);
 | 
			
		||||
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GList *
 | 
			
		||||
_clutter_stage_window_get_views (ClutterStageWindow *window)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -83,9 +83,6 @@ struct _ClutterStageWindowIface
 | 
			
		||||
 | 
			
		||||
  gboolean          (* can_clip_redraws)        (ClutterStageWindow *stage_window);
 | 
			
		||||
 | 
			
		||||
  void              (* set_scale_factor)        (ClutterStageWindow *stage_window,
 | 
			
		||||
                                                 int                 factor);
 | 
			
		||||
  int               (* get_scale_factor)        (ClutterStageWindow *stage_window);
 | 
			
		||||
  GList            *(* get_views)               (ClutterStageWindow *stage_window);
 | 
			
		||||
  int64_t           (* get_frame_counter)       (ClutterStageWindow *stage_window);
 | 
			
		||||
  void              (* finish_frame)            (ClutterStageWindow *stage_window);
 | 
			
		||||
@@ -140,10 +137,6 @@ void              _clutter_stage_window_get_dirty_pixel         (ClutterStageWin
 | 
			
		||||
 | 
			
		||||
gboolean          _clutter_stage_window_can_clip_redraws        (ClutterStageWindow *window);
 | 
			
		||||
 | 
			
		||||
void              _clutter_stage_window_set_scale_factor        (ClutterStageWindow *window,
 | 
			
		||||
                                                                 int                 factor);
 | 
			
		||||
int               _clutter_stage_window_get_scale_factor        (ClutterStageWindow *window);
 | 
			
		||||
 | 
			
		||||
GList *           _clutter_stage_window_get_views               (ClutterStageWindow *window);
 | 
			
		||||
 | 
			
		||||
void              _clutter_stage_window_finish_frame            (ClutterStageWindow *window);
 | 
			
		||||
 
 | 
			
		||||
@@ -161,6 +161,7 @@ struct _ClutterStagePrivate
 | 
			
		||||
  guint accept_focus           : 1;
 | 
			
		||||
  guint motion_events_enabled  : 1;
 | 
			
		||||
  guint has_custom_perspective : 1;
 | 
			
		||||
  guint stage_was_relayout     : 1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
@@ -364,7 +365,6 @@ clutter_stage_allocate (ClutterActor           *self,
 | 
			
		||||
  float new_width, new_height;
 | 
			
		||||
  float width, height;
 | 
			
		||||
  cairo_rectangle_int_t window_size;
 | 
			
		||||
  int scale_factor;
 | 
			
		||||
 | 
			
		||||
  if (priv->impl == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
@@ -465,11 +465,6 @@ clutter_stage_allocate (ClutterActor           *self,
 | 
			
		||||
   */
 | 
			
		||||
  _clutter_stage_window_get_geometry (priv->impl, &window_size);
 | 
			
		||||
 | 
			
		||||
  scale_factor = _clutter_stage_window_get_scale_factor (priv->impl);
 | 
			
		||||
 | 
			
		||||
  window_size.width *= scale_factor;
 | 
			
		||||
  window_size.height *= scale_factor;
 | 
			
		||||
 | 
			
		||||
  cogl_onscreen_clutter_backend_set_size (window_size.width,
 | 
			
		||||
                                          window_size.height);
 | 
			
		||||
 | 
			
		||||
@@ -630,15 +625,13 @@ clutter_stage_do_paint_view (ClutterStage                *stage,
 | 
			
		||||
  float clip_poly[8];
 | 
			
		||||
  float viewport[4];
 | 
			
		||||
  cairo_rectangle_int_t geom;
 | 
			
		||||
  int window_scale;
 | 
			
		||||
 | 
			
		||||
  _clutter_stage_window_get_geometry (priv->impl, &geom);
 | 
			
		||||
  window_scale = _clutter_stage_window_get_scale_factor (priv->impl);
 | 
			
		||||
 | 
			
		||||
  viewport[0] = priv->viewport[0] * window_scale;
 | 
			
		||||
  viewport[1] = priv->viewport[1] * window_scale;
 | 
			
		||||
  viewport[2] = priv->viewport[2] * window_scale;
 | 
			
		||||
  viewport[3] = priv->viewport[3] * window_scale;
 | 
			
		||||
  viewport[0] = priv->viewport[0];
 | 
			
		||||
  viewport[1] = priv->viewport[1];
 | 
			
		||||
  viewport[2] = priv->viewport[2];
 | 
			
		||||
  viewport[3] = priv->viewport[3];
 | 
			
		||||
 | 
			
		||||
  if (!clip)
 | 
			
		||||
    {
 | 
			
		||||
@@ -646,16 +639,14 @@ clutter_stage_do_paint_view (ClutterStage                *stage,
 | 
			
		||||
      clip = &view_layout;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  clip_poly[0] = MAX (clip->x * window_scale, 0);
 | 
			
		||||
  clip_poly[1] = MAX (clip->y * window_scale, 0);
 | 
			
		||||
  clip_poly[0] = MAX (clip->x, 0);
 | 
			
		||||
  clip_poly[1] = MAX (clip->y, 0);
 | 
			
		||||
 | 
			
		||||
  clip_poly[2] = MIN ((clip->x + clip->width) * window_scale,
 | 
			
		||||
                      geom.width * window_scale);
 | 
			
		||||
  clip_poly[2] = MIN (clip->x + clip->width, geom.width);
 | 
			
		||||
  clip_poly[3] = clip_poly[1];
 | 
			
		||||
 | 
			
		||||
  clip_poly[4] = clip_poly[2];
 | 
			
		||||
  clip_poly[5] = MIN ((clip->y + clip->height) * window_scale,
 | 
			
		||||
                      geom.height * window_scale);
 | 
			
		||||
  clip_poly[5] = MIN (clip->y + clip->height, geom.height);
 | 
			
		||||
 | 
			
		||||
  clip_poly[6] = clip_poly[0];
 | 
			
		||||
  clip_poly[7] = clip_poly[5];
 | 
			
		||||
@@ -971,6 +962,7 @@ _clutter_stage_process_queued_events (ClutterStage *stage)
 | 
			
		||||
      ClutterEvent *next_event;
 | 
			
		||||
      ClutterInputDevice *device;
 | 
			
		||||
      ClutterInputDevice *next_device;
 | 
			
		||||
      ClutterInputDeviceType device_type;
 | 
			
		||||
      gboolean check_device = FALSE;
 | 
			
		||||
 | 
			
		||||
      event = l->data;
 | 
			
		||||
@@ -986,8 +978,16 @@ _clutter_stage_process_queued_events (ClutterStage *stage)
 | 
			
		||||
      if (device != NULL && next_device != NULL)
 | 
			
		||||
        check_device = TRUE;
 | 
			
		||||
 | 
			
		||||
      /* Skip consecutive motion events coming from the same device */
 | 
			
		||||
      if (priv->throttle_motion_events && next_event != NULL)
 | 
			
		||||
      device_type = clutter_input_device_get_device_type (device);
 | 
			
		||||
 | 
			
		||||
      /* Skip consecutive motion events coming from the same device,
 | 
			
		||||
       * except those of tablet tools, since users of these events
 | 
			
		||||
       * want no precision loss.
 | 
			
		||||
       */
 | 
			
		||||
      if (priv->throttle_motion_events && next_event != NULL &&
 | 
			
		||||
          device_type != CLUTTER_TABLET_DEVICE &&
 | 
			
		||||
          device_type != CLUTTER_PEN_DEVICE &&
 | 
			
		||||
          device_type != CLUTTER_ERASER_DEVICE)
 | 
			
		||||
        {
 | 
			
		||||
          if (event->type == CLUTTER_MOTION &&
 | 
			
		||||
              (next_event->type == CLUTTER_MOTION ||
 | 
			
		||||
@@ -1069,6 +1069,7 @@ _clutter_stage_maybe_relayout (ClutterActor *actor)
 | 
			
		||||
  if (!CLUTTER_ACTOR_IN_RELAYOUT (stage))
 | 
			
		||||
    {
 | 
			
		||||
      priv->relayout_pending = FALSE;
 | 
			
		||||
      priv->stage_was_relayout = TRUE;
 | 
			
		||||
 | 
			
		||||
      CLUTTER_NOTE (ACTOR, "Recomputing layout");
 | 
			
		||||
 | 
			
		||||
@@ -1139,6 +1140,58 @@ clutter_stage_do_redraw (ClutterStage *stage)
 | 
			
		||||
                stage);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static GSList *
 | 
			
		||||
_clutter_stage_check_updated_pointers (ClutterStage *stage)
 | 
			
		||||
{
 | 
			
		||||
  ClutterStagePrivate *priv = stage->priv;
 | 
			
		||||
  ClutterDeviceManager *device_manager;
 | 
			
		||||
  GSList *updating = NULL;
 | 
			
		||||
  const GSList *devices;
 | 
			
		||||
  cairo_rectangle_int_t clip;
 | 
			
		||||
  ClutterPoint point;
 | 
			
		||||
  gboolean has_clip;
 | 
			
		||||
 | 
			
		||||
  has_clip = _clutter_stage_window_get_redraw_clip_bounds (priv->impl, &clip);
 | 
			
		||||
 | 
			
		||||
  device_manager = clutter_device_manager_get_default ();
 | 
			
		||||
  devices = clutter_device_manager_peek_devices (device_manager);
 | 
			
		||||
 | 
			
		||||
  for (; devices != NULL; devices = devices->next)
 | 
			
		||||
    {
 | 
			
		||||
      ClutterInputDevice *dev = devices->data;
 | 
			
		||||
 | 
			
		||||
      if (clutter_input_device_get_device_mode (dev) !=
 | 
			
		||||
          CLUTTER_INPUT_MODE_MASTER)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      switch (clutter_input_device_get_device_type (dev))
 | 
			
		||||
        {
 | 
			
		||||
        case CLUTTER_POINTER_DEVICE:
 | 
			
		||||
        case CLUTTER_TABLET_DEVICE:
 | 
			
		||||
        case CLUTTER_PEN_DEVICE:
 | 
			
		||||
        case CLUTTER_ERASER_DEVICE:
 | 
			
		||||
        case CLUTTER_CURSOR_DEVICE:
 | 
			
		||||
          if (!clutter_input_device_get_coords (dev, NULL, &point))
 | 
			
		||||
            continue;
 | 
			
		||||
 | 
			
		||||
          if (!has_clip ||
 | 
			
		||||
              (point.x >= clip.x && point.x < clip.x + clip.width &&
 | 
			
		||||
               point.y >= clip.y && point.y < clip.y + clip.height))
 | 
			
		||||
            updating = g_slist_prepend (updating, dev);
 | 
			
		||||
          break;
 | 
			
		||||
        default:
 | 
			
		||||
          /* Any other devices don't need checking, either because they
 | 
			
		||||
           * don't have x/y coordinates, or because they're implicitly
 | 
			
		||||
           * grabbed on an actor by default as it's the case of
 | 
			
		||||
           * touch(screens).
 | 
			
		||||
           */
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return updating;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * _clutter_stage_do_update:
 | 
			
		||||
 * @stage: A #ClutterStage
 | 
			
		||||
@@ -1151,6 +1204,10 @@ gboolean
 | 
			
		||||
_clutter_stage_do_update (ClutterStage *stage)
 | 
			
		||||
{
 | 
			
		||||
  ClutterStagePrivate *priv = stage->priv;
 | 
			
		||||
  gboolean stage_was_relayout = priv->stage_was_relayout;
 | 
			
		||||
  GSList *pointers = NULL;
 | 
			
		||||
 | 
			
		||||
  priv->stage_was_relayout = FALSE;
 | 
			
		||||
 | 
			
		||||
  /* if the stage is being destroyed, or if the destruction already
 | 
			
		||||
   * happened and we don't have an StageWindow any more, then we
 | 
			
		||||
@@ -1171,6 +1228,9 @@ _clutter_stage_do_update (ClutterStage *stage)
 | 
			
		||||
  if (!priv->redraw_pending)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  if (stage_was_relayout)
 | 
			
		||||
    pointers = _clutter_stage_check_updated_pointers (stage);
 | 
			
		||||
 | 
			
		||||
  clutter_stage_maybe_finish_queue_redraws (stage);
 | 
			
		||||
 | 
			
		||||
  clutter_stage_do_redraw (stage);
 | 
			
		||||
@@ -1188,6 +1248,12 @@ _clutter_stage_do_update (ClutterStage *stage)
 | 
			
		||||
    }
 | 
			
		||||
#endif /* CLUTTER_ENABLE_DEBUG */
 | 
			
		||||
 | 
			
		||||
  while (pointers)
 | 
			
		||||
    {
 | 
			
		||||
      _clutter_input_device_update (pointers->data, NULL, TRUE);
 | 
			
		||||
      pointers = g_slist_delete_link (pointers, pointers);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1378,19 +1444,19 @@ _clutter_stage_do_pick_on_view (ClutterStage     *stage,
 | 
			
		||||
  gint dirty_y;
 | 
			
		||||
  gint read_x;
 | 
			
		||||
  gint read_y;
 | 
			
		||||
  int window_scale;
 | 
			
		||||
  float fb_width, fb_height;
 | 
			
		||||
  int viewport_offset_x;
 | 
			
		||||
  int viewport_offset_y;
 | 
			
		||||
  float fb_scale;
 | 
			
		||||
  float viewport_offset_x;
 | 
			
		||||
  float viewport_offset_y;
 | 
			
		||||
 | 
			
		||||
  priv = stage->priv;
 | 
			
		||||
 | 
			
		||||
  context = _clutter_context_get_default ();
 | 
			
		||||
  window_scale = _clutter_stage_window_get_scale_factor (priv->impl);
 | 
			
		||||
  fb_scale = clutter_stage_view_get_scale (view);
 | 
			
		||||
  clutter_stage_view_get_layout (view, &view_layout);
 | 
			
		||||
 | 
			
		||||
  fb_width = view_layout.width;
 | 
			
		||||
  fb_height = view_layout.height;
 | 
			
		||||
  fb_width = view_layout.width * fb_scale;
 | 
			
		||||
  fb_height = view_layout.height * fb_scale;
 | 
			
		||||
  cogl_push_framebuffer (fb);
 | 
			
		||||
 | 
			
		||||
  /* needed for when a context switch happens */
 | 
			
		||||
@@ -1400,38 +1466,39 @@ _clutter_stage_do_pick_on_view (ClutterStage     *stage,
 | 
			
		||||
   * picking to not work at all, so setting it the whole framebuffer content
 | 
			
		||||
   * for now. */
 | 
			
		||||
  cogl_framebuffer_push_scissor_clip (fb, 0, 0,
 | 
			
		||||
                                      view_layout.width,
 | 
			
		||||
                                      view_layout.height);
 | 
			
		||||
                                      view_layout.width * fb_scale,
 | 
			
		||||
                                      view_layout.height * fb_scale);
 | 
			
		||||
 | 
			
		||||
  _clutter_stage_window_get_dirty_pixel (priv->impl, view, &dirty_x, &dirty_y);
 | 
			
		||||
 | 
			
		||||
  if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
 | 
			
		||||
    {
 | 
			
		||||
      CLUTTER_NOTE (PICK, "Pushing pick scissor clip x: %d, y: %d, 1x1",
 | 
			
		||||
                    dirty_x * window_scale,
 | 
			
		||||
                    dirty_y * window_scale);
 | 
			
		||||
      cogl_framebuffer_push_scissor_clip (fb, dirty_x * window_scale, dirty_y * window_scale, 1, 1);
 | 
			
		||||
                    (int) dirty_x * fb_scale,
 | 
			
		||||
                    (int) dirty_y * fb_scale);
 | 
			
		||||
      cogl_framebuffer_push_scissor_clip (fb, dirty_x * fb_scale, dirty_y * fb_scale, 1, 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  viewport_offset_x = x * window_scale - dirty_x * window_scale;
 | 
			
		||||
  viewport_offset_y = y * window_scale - dirty_y * window_scale;
 | 
			
		||||
  viewport_offset_x = x * fb_scale - dirty_x * fb_scale;
 | 
			
		||||
  viewport_offset_y = y * fb_scale - dirty_y * fb_scale;
 | 
			
		||||
  CLUTTER_NOTE (PICK, "Setting viewport to %f, %f, %f, %f",
 | 
			
		||||
                priv->viewport[0] * window_scale - viewport_offset_x,
 | 
			
		||||
                priv->viewport[1] * window_scale - viewport_offset_y,
 | 
			
		||||
                priv->viewport[2] * window_scale,
 | 
			
		||||
                priv->viewport[3] * window_scale);
 | 
			
		||||
  cogl_set_viewport (priv->viewport[0] * window_scale - viewport_offset_x,
 | 
			
		||||
                     priv->viewport[1] * window_scale - viewport_offset_y,
 | 
			
		||||
                     priv->viewport[2] * window_scale,
 | 
			
		||||
                     priv->viewport[3] * window_scale);
 | 
			
		||||
                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 * window_scale;
 | 
			
		||||
  read_y = dirty_y * window_scale;
 | 
			
		||||
  read_x = dirty_x * fb_scale;
 | 
			
		||||
  read_y = dirty_y * fb_scale;
 | 
			
		||||
 | 
			
		||||
  CLUTTER_NOTE (PICK, "Performing pick at %i,%i on view %dx%d+%d+%d",
 | 
			
		||||
  CLUTTER_NOTE (PICK, "Performing pick at %i,%i on view %dx%d+%d+%d s: %d",
 | 
			
		||||
                x, y,
 | 
			
		||||
                view_layout.width, view_layout.height,
 | 
			
		||||
                view_layout.x, view_layout.y);
 | 
			
		||||
                view_layout.x, view_layout.y, fb_scale);
 | 
			
		||||
 | 
			
		||||
  cogl_color_init_from_4ub (&stage_pick_id, 255, 255, 255, 255);
 | 
			
		||||
  cogl_clear (&stage_pick_id, COGL_BUFFER_BIT_COLOR | COGL_BUFFER_BIT_DEPTH);
 | 
			
		||||
@@ -2186,8 +2253,8 @@ clutter_stage_class_init (ClutterStageClass *klass)
 | 
			
		||||
    g_signal_new (I_("presented"),
 | 
			
		||||
                  G_TYPE_FROM_CLASS (gobject_class),
 | 
			
		||||
                  G_SIGNAL_RUN_LAST,
 | 
			
		||||
                  0,
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  0, NULL, NULL,
 | 
			
		||||
                  _clutter_marshal_VOID__INT_POINTER,
 | 
			
		||||
                  G_TYPE_NONE, 2,
 | 
			
		||||
                  G_TYPE_INT, G_TYPE_POINTER);
 | 
			
		||||
 | 
			
		||||
@@ -2210,7 +2277,6 @@ clutter_stage_init (ClutterStage *self)
 | 
			
		||||
  ClutterStagePrivate *priv;
 | 
			
		||||
  ClutterStageWindow *impl;
 | 
			
		||||
  ClutterBackend *backend;
 | 
			
		||||
  int window_scale = 1;
 | 
			
		||||
  GError *error;
 | 
			
		||||
 | 
			
		||||
  /* a stage is a top-level object */
 | 
			
		||||
@@ -2228,7 +2294,6 @@ clutter_stage_init (ClutterStage *self)
 | 
			
		||||
    {
 | 
			
		||||
      _clutter_stage_set_window (self, impl);
 | 
			
		||||
      _clutter_stage_window_get_geometry (priv->impl, &geom);
 | 
			
		||||
      window_scale = _clutter_stage_window_get_scale_factor (priv->impl);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
@@ -2282,8 +2347,8 @@ clutter_stage_init (ClutterStage *self)
 | 
			
		||||
                                      priv->perspective.aspect,
 | 
			
		||||
                                      priv->perspective.z_near,
 | 
			
		||||
                                      50, /* distance to 2d plane */
 | 
			
		||||
                                      geom.width * window_scale,
 | 
			
		||||
                                      geom.height * window_scale);
 | 
			
		||||
                                      geom.width,
 | 
			
		||||
                                      geom.height);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  /* FIXME - remove for 2.0 */
 | 
			
		||||
@@ -3412,16 +3477,6 @@ clutter_stage_ensure_viewport (ClutterStage *stage)
 | 
			
		||||
  clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_stage_apply_scale (ClutterStage *stage)
 | 
			
		||||
{
 | 
			
		||||
  int factor;
 | 
			
		||||
 | 
			
		||||
  factor = _clutter_stage_window_get_scale_factor (stage->priv->impl);
 | 
			
		||||
  if (factor != 1)
 | 
			
		||||
    cogl_matrix_scale (&stage->priv->view, factor, factor, 1.f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# define _DEG_TO_RAD(d)         ((d) * ((float) G_PI / 180.0f))
 | 
			
		||||
 | 
			
		||||
/* This calculates a distance into the view frustum to position the
 | 
			
		||||
@@ -3563,14 +3618,15 @@ _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))
 | 
			
		||||
    {
 | 
			
		||||
      cairo_rectangle_int_t view_layout;
 | 
			
		||||
      ClutterPerspective perspective;
 | 
			
		||||
      int window_scale;
 | 
			
		||||
      int viewport_offset_x;
 | 
			
		||||
      int viewport_offset_y;
 | 
			
		||||
      float fb_scale;
 | 
			
		||||
      float viewport_offset_x;
 | 
			
		||||
      float viewport_offset_y;
 | 
			
		||||
      float z_2d;
 | 
			
		||||
 | 
			
		||||
      CLUTTER_NOTE (PAINT,
 | 
			
		||||
@@ -3578,15 +3634,16 @@ _clutter_stage_maybe_setup_viewport (ClutterStage     *stage,
 | 
			
		||||
                    priv->viewport[2],
 | 
			
		||||
                    priv->viewport[3]);
 | 
			
		||||
 | 
			
		||||
      window_scale = _clutter_stage_window_get_scale_factor (priv->impl);
 | 
			
		||||
      fb_scale = clutter_stage_view_get_scale (view);
 | 
			
		||||
      clutter_stage_view_get_layout (view, &view_layout);
 | 
			
		||||
 | 
			
		||||
      viewport_offset_x = view_layout.x * window_scale;
 | 
			
		||||
      viewport_offset_y = view_layout.y * window_scale;
 | 
			
		||||
      cogl_set_viewport (priv->viewport[0] * window_scale - viewport_offset_x,
 | 
			
		||||
                         priv->viewport[1] * window_scale - viewport_offset_y,
 | 
			
		||||
                         priv->viewport[2] * window_scale,
 | 
			
		||||
                         priv->viewport[3] * window_scale);
 | 
			
		||||
      viewport_offset_x = view_layout.x * fb_scale;
 | 
			
		||||
      viewport_offset_y = view_layout.y * 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;
 | 
			
		||||
 | 
			
		||||
@@ -3617,17 +3674,15 @@ _clutter_stage_maybe_setup_viewport (ClutterStage     *stage,
 | 
			
		||||
                                          perspective.aspect,
 | 
			
		||||
                                          perspective.z_near,
 | 
			
		||||
                                          z_2d,
 | 
			
		||||
                                          priv->viewport[2] * window_scale,
 | 
			
		||||
                                          priv->viewport[3] * window_scale);
 | 
			
		||||
 | 
			
		||||
      clutter_stage_apply_scale (stage);
 | 
			
		||||
                                          priv->viewport[2],
 | 
			
		||||
                                          priv->viewport[3]);
 | 
			
		||||
 | 
			
		||||
      clutter_stage_view_set_dirty_viewport (view, FALSE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  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);
 | 
			
		||||
    }
 | 
			
		||||
@@ -4635,23 +4690,6 @@ clutter_stage_skip_sync_delay (ClutterStage *stage)
 | 
			
		||||
    _clutter_stage_window_schedule_update (stage_window, -1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_clutter_stage_set_scale_factor (ClutterStage *stage,
 | 
			
		||||
                                 int           factor)
 | 
			
		||||
{
 | 
			
		||||
  ClutterStagePrivate *priv = stage->priv;
 | 
			
		||||
 | 
			
		||||
  if (CLUTTER_ACTOR_IN_DESTRUCTION (stage))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (priv->impl == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  _clutter_stage_window_set_scale_factor (priv->impl, factor);
 | 
			
		||||
 | 
			
		||||
  clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int64_t
 | 
			
		||||
clutter_stage_get_frame_counter (ClutterStage          *stage)
 | 
			
		||||
{
 | 
			
		||||
@@ -4685,18 +4723,22 @@ capture_view (ClutterStage          *stage,
 | 
			
		||||
  int stride;
 | 
			
		||||
  CoglBitmap *bitmap;
 | 
			
		||||
  cairo_rectangle_int_t view_layout;
 | 
			
		||||
  float view_scale;
 | 
			
		||||
 | 
			
		||||
  framebuffer = clutter_stage_view_get_framebuffer (view);
 | 
			
		||||
 | 
			
		||||
  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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  view_scale = clutter_stage_view_get_scale (view);
 | 
			
		||||
  image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
 | 
			
		||||
                                      rect->width, rect->height);
 | 
			
		||||
                                      rect->width * view_scale,
 | 
			
		||||
                                      rect->height * view_scale);
 | 
			
		||||
  cairo_surface_set_device_scale (image, view_scale, view_scale);
 | 
			
		||||
 | 
			
		||||
  data = cairo_image_surface_get_data (image);
 | 
			
		||||
  stride = cairo_image_surface_get_stride (image);
 | 
			
		||||
@@ -4704,7 +4746,8 @@ capture_view (ClutterStage          *stage,
 | 
			
		||||
  backend = clutter_get_default_backend ();
 | 
			
		||||
  context = clutter_backend_get_cogl_context (backend);
 | 
			
		||||
  bitmap = cogl_bitmap_new_for_data (context,
 | 
			
		||||
                                     rect->width, rect->height,
 | 
			
		||||
                                     rect->width * view_scale,
 | 
			
		||||
                                     rect->height * view_scale,
 | 
			
		||||
                                     CLUTTER_CAIRO_FORMAT_ARGB32,
 | 
			
		||||
                                     stride,
 | 
			
		||||
                                     data);
 | 
			
		||||
@@ -4712,8 +4755,8 @@ capture_view (ClutterStage          *stage,
 | 
			
		||||
  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,
 | 
			
		||||
                                            (rect->x - view_layout.x) * view_scale,
 | 
			
		||||
                                            (rect->y - view_layout.y) * view_scale,
 | 
			
		||||
                                            COGL_READ_PIXELS_COLOR_BUFFER,
 | 
			
		||||
                                            bitmap);
 | 
			
		||||
 | 
			
		||||
@@ -4770,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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -2085,9 +2225,11 @@ clutter_text_key_press (ClutterActor    *actor,
 | 
			
		||||
  g_assert (pool != NULL);
 | 
			
		||||
 | 
			
		||||
  /* 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,
 | 
			
		||||
@@ -2105,6 +2247,10 @@ clutter_text_key_press (ClutterActor    *actor,
 | 
			
		||||
    {
 | 
			
		||||
      gunichar key_unichar;
 | 
			
		||||
 | 
			
		||||
      if (clutter_input_focus_is_focused (priv->input_focus) &&
 | 
			
		||||
          clutter_input_focus_filter_key_event (priv->input_focus, event))
 | 
			
		||||
        return CLUTTER_EVENT_STOP;
 | 
			
		||||
 | 
			
		||||
      /* Skip keys when control is pressed */
 | 
			
		||||
      key_unichar = clutter_event_get_key_unicode ((ClutterEvent *) event);
 | 
			
		||||
 | 
			
		||||
@@ -2141,6 +2287,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,
 | 
			
		||||
@@ -2663,6 +2823,14 @@ static void
 | 
			
		||||
clutter_text_key_focus_in (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  ClutterTextPrivate *priv = CLUTTER_TEXT (actor)->priv;
 | 
			
		||||
  ClutterBackend *backend = clutter_get_default_backend ();
 | 
			
		||||
  ClutterInputMethod *method = clutter_backend_get_input_method (backend);
 | 
			
		||||
 | 
			
		||||
  if (method && priv->editable)
 | 
			
		||||
    {
 | 
			
		||||
      clutter_input_method_focus_in (method, priv->input_focus);
 | 
			
		||||
      update_cursor_location (CLUTTER_TEXT (actor));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  priv->has_focus = TRUE;
 | 
			
		||||
 | 
			
		||||
@@ -2673,9 +2841,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 +3545,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 +4046,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 +4362,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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -4459,6 +4654,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 +4666,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_input_method_focus_in (method, priv->input_focus);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      clutter_text_queue_redraw (CLUTTER_ACTOR (self));
 | 
			
		||||
 | 
			
		||||
      g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_EDITABLE]);
 | 
			
		||||
@@ -6298,3 +6503,49 @@ 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;
 | 
			
		||||
  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;
 | 
			
		||||
  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;
 | 
			
		||||
 
 | 
			
		||||
@@ -312,7 +312,7 @@ G_BEGIN_DECLS
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.2
 | 
			
		||||
 */
 | 
			
		||||
const guint clutter_major_version;
 | 
			
		||||
extern const guint clutter_major_version;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_minor_version:
 | 
			
		||||
@@ -326,7 +326,7 @@ const guint clutter_major_version;
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.2
 | 
			
		||||
 */
 | 
			
		||||
const guint clutter_minor_version;
 | 
			
		||||
extern const guint clutter_minor_version;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_micro_version:
 | 
			
		||||
@@ -340,7 +340,7 @@ const guint clutter_minor_version;
 | 
			
		||||
 *
 | 
			
		||||
 * Since: 1.2
 | 
			
		||||
 */
 | 
			
		||||
const guint clutter_micro_version;
 | 
			
		||||
extern const guint clutter_micro_version;
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -115,6 +115,19 @@ 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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_virtual_input_device_get_manager:
 | 
			
		||||
 * @virtual_device: a virtual device
 | 
			
		||||
 
 | 
			
		||||
@@ -76,6 +76,11 @@ 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);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CLUTTER_AVAILABLE_IN_ALL
 | 
			
		||||
@@ -108,6 +113,13 @@ 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
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,9 @@
 | 
			
		||||
 | 
			
		||||
typedef struct _ClutterStageViewCoglPrivate
 | 
			
		||||
{
 | 
			
		||||
  /* Stores a list of previous damaged areas in the stage coordinate space */
 | 
			
		||||
  /*
 | 
			
		||||
   * List of previous damaged areas in stage view framebuffer coordinate space.
 | 
			
		||||
   */
 | 
			
		||||
#define DAMAGE_HISTORY_MAX 16
 | 
			
		||||
#define DAMAGE_HISTORY(x) ((x) & (DAMAGE_HISTORY_MAX - 1))
 | 
			
		||||
  cairo_rectangle_int_t damage_history[DAMAGE_HISTORY_MAX];
 | 
			
		||||
@@ -435,13 +437,20 @@ fill_current_damage_history_and_step (ClutterStageView *view)
 | 
			
		||||
  ClutterStageViewCoglPrivate *view_priv =
 | 
			
		||||
    clutter_stage_view_cogl_get_instance_private (view_cogl);
 | 
			
		||||
  cairo_rectangle_int_t view_rect;
 | 
			
		||||
  cairo_rectangle_int_t *current_damage;
 | 
			
		||||
  float fb_scale;
 | 
			
		||||
  cairo_rectangle_int_t *current_fb_damage;
 | 
			
		||||
 | 
			
		||||
  current_damage =
 | 
			
		||||
  current_fb_damage =
 | 
			
		||||
    &view_priv->damage_history[DAMAGE_HISTORY (view_priv->damage_index)];
 | 
			
		||||
  clutter_stage_view_get_layout (view, &view_rect);
 | 
			
		||||
  fb_scale = clutter_stage_view_get_scale (view);
 | 
			
		||||
 | 
			
		||||
  *current_damage = view_rect;
 | 
			
		||||
  *current_fb_damage = (cairo_rectangle_int_t) {
 | 
			
		||||
    .x = 0,
 | 
			
		||||
    .y = 0,
 | 
			
		||||
    .width = view_rect.width * fb_scale,
 | 
			
		||||
    .height = view_rect.height * fb_scale
 | 
			
		||||
  };
 | 
			
		||||
  view_priv->damage_index++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -481,6 +490,40 @@ transform_swap_region_to_onscreen (ClutterStageView      *view,
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
calculate_scissor_region (cairo_rectangle_int_t *fb_clip_region,
 | 
			
		||||
                          int                    subpixel_compensation,
 | 
			
		||||
                          int                    fb_width,
 | 
			
		||||
                          int                    fb_height,
 | 
			
		||||
                          cairo_rectangle_int_t *out_scissor_rect)
 | 
			
		||||
{
 | 
			
		||||
  int scissor_x;
 | 
			
		||||
  int scissor_y;
 | 
			
		||||
  int scissor_width;
 | 
			
		||||
  int scissor_height;
 | 
			
		||||
 | 
			
		||||
  scissor_x = fb_clip_region->x;
 | 
			
		||||
  scissor_y = fb_clip_region->y;
 | 
			
		||||
  scissor_width = fb_clip_region->width;
 | 
			
		||||
  scissor_height = fb_clip_region->height;
 | 
			
		||||
 | 
			
		||||
  if (fb_clip_region->x > 0)
 | 
			
		||||
    scissor_x += subpixel_compensation;
 | 
			
		||||
  if (fb_clip_region->y > 0)
 | 
			
		||||
    scissor_y += subpixel_compensation;
 | 
			
		||||
  if (fb_clip_region->x + fb_clip_region->width < fb_width)
 | 
			
		||||
    scissor_width -= 2 * subpixel_compensation;
 | 
			
		||||
  if (fb_clip_region->y + fb_clip_region->height < fb_height)
 | 
			
		||||
    scissor_height -= 2 * subpixel_compensation;
 | 
			
		||||
 | 
			
		||||
  *out_scissor_rect = (cairo_rectangle_int_t) {
 | 
			
		||||
    .x = scissor_x,
 | 
			
		||||
    .y = scissor_y,
 | 
			
		||||
    .width = scissor_width,
 | 
			
		||||
    .height = scissor_height
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
                                ClutterStageView   *view)
 | 
			
		||||
@@ -501,13 +544,18 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
  ClutterActor *wrapper;
 | 
			
		||||
  cairo_rectangle_int_t redraw_clip;
 | 
			
		||||
  cairo_rectangle_int_t swap_region;
 | 
			
		||||
  cairo_rectangle_int_t clip_region;
 | 
			
		||||
  cairo_rectangle_int_t fb_clip_region;
 | 
			
		||||
  gboolean clip_region_empty;
 | 
			
		||||
  int window_scale;
 | 
			
		||||
  float fb_scale;
 | 
			
		||||
  int subpixel_compensation = 0;
 | 
			
		||||
  int fb_width, fb_height;
 | 
			
		||||
 | 
			
		||||
  wrapper = CLUTTER_ACTOR (stage_cogl->wrapper);
 | 
			
		||||
 | 
			
		||||
  clutter_stage_view_get_layout (view, &view_rect);
 | 
			
		||||
  fb_scale = clutter_stage_view_get_scale (view);
 | 
			
		||||
  fb_width = cogl_framebuffer_get_width (fb);
 | 
			
		||||
  fb_height = cogl_framebuffer_get_height (fb);
 | 
			
		||||
 | 
			
		||||
  can_blit_sub_buffer =
 | 
			
		||||
    cogl_is_onscreen (fb) &&
 | 
			
		||||
@@ -542,11 +590,24 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
      cogl_onscreen_get_frame_counter (COGL_ONSCREEN (fb)) > 3)
 | 
			
		||||
    {
 | 
			
		||||
      may_use_clipped_redraw = TRUE;
 | 
			
		||||
      clip_region = redraw_clip;
 | 
			
		||||
 | 
			
		||||
      if (fb_scale != floorf (fb_scale))
 | 
			
		||||
        subpixel_compensation = ceilf (fb_scale);
 | 
			
		||||
 | 
			
		||||
      fb_clip_region = (cairo_rectangle_int_t) {
 | 
			
		||||
        .x = (floorf ((redraw_clip.x - view_rect.x) * fb_scale) -
 | 
			
		||||
              subpixel_compensation),
 | 
			
		||||
        .y = (floorf ((redraw_clip.y - view_rect.y) * fb_scale) -
 | 
			
		||||
              subpixel_compensation),
 | 
			
		||||
        .width = (ceilf (redraw_clip.width * fb_scale) +
 | 
			
		||||
                  (2 * subpixel_compensation)),
 | 
			
		||||
        .height = (ceilf (redraw_clip.height * fb_scale) +
 | 
			
		||||
                   (2 * subpixel_compensation))
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      clip_region = (cairo_rectangle_int_t){ 0 };
 | 
			
		||||
      fb_clip_region = (cairo_rectangle_int_t) { 0 };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (may_use_clipped_redraw &&
 | 
			
		||||
@@ -555,9 +616,7 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
  else
 | 
			
		||||
    use_clipped_redraw = FALSE;
 | 
			
		||||
 | 
			
		||||
  clip_region_empty = may_use_clipped_redraw && clip_region.width == 0;
 | 
			
		||||
 | 
			
		||||
  window_scale = _clutter_stage_window_get_scale_factor (stage_window);
 | 
			
		||||
  clip_region_empty = may_use_clipped_redraw && fb_clip_region.width == 0;
 | 
			
		||||
 | 
			
		||||
  swap_with_damage = FALSE;
 | 
			
		||||
  if (has_buffer_age)
 | 
			
		||||
@@ -565,34 +624,44 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
      if (use_clipped_redraw && !clip_region_empty)
 | 
			
		||||
        {
 | 
			
		||||
          int age, i;
 | 
			
		||||
          cairo_rectangle_int_t *current_damage =
 | 
			
		||||
          cairo_rectangle_int_t *current_fb_damage =
 | 
			
		||||
            &view_priv->damage_history[DAMAGE_HISTORY (view_priv->damage_index++)];
 | 
			
		||||
 | 
			
		||||
          age = cogl_onscreen_get_buffer_age (COGL_ONSCREEN (fb));
 | 
			
		||||
 | 
			
		||||
          if (valid_buffer_age (view_cogl, age))
 | 
			
		||||
            {
 | 
			
		||||
              *current_damage = clip_region;
 | 
			
		||||
              cairo_rectangle_int_t damage_region;
 | 
			
		||||
 | 
			
		||||
              *current_fb_damage = fb_clip_region;
 | 
			
		||||
 | 
			
		||||
              for (i = 1; i <= age; i++)
 | 
			
		||||
                {
 | 
			
		||||
                  cairo_rectangle_int_t *damage =
 | 
			
		||||
                  cairo_rectangle_int_t *fb_damage =
 | 
			
		||||
                    &view_priv->damage_history[DAMAGE_HISTORY (view_priv->damage_index - i - 1)];
 | 
			
		||||
 | 
			
		||||
                  _clutter_util_rectangle_union (&clip_region, damage, &clip_region);
 | 
			
		||||
                  _clutter_util_rectangle_union (&fb_clip_region,
 | 
			
		||||
                                                 fb_damage,
 | 
			
		||||
                                                 &fb_clip_region);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
              /* Update the bounding redraw clip state with the extra damage. */
 | 
			
		||||
              damage_region = (cairo_rectangle_int_t) {
 | 
			
		||||
                .x = view_rect.x + floorf (fb_clip_region.x / fb_scale),
 | 
			
		||||
                .y = view_rect.y + floorf (fb_clip_region.y / fb_scale),
 | 
			
		||||
                .width = ceilf (fb_clip_region.width / fb_scale),
 | 
			
		||||
                .height = ceilf (fb_clip_region.height / fb_scale)
 | 
			
		||||
              };
 | 
			
		||||
              _clutter_util_rectangle_union (&stage_cogl->bounding_redraw_clip,
 | 
			
		||||
                                             &clip_region,
 | 
			
		||||
                                             &damage_region,
 | 
			
		||||
                                             &stage_cogl->bounding_redraw_clip);
 | 
			
		||||
 | 
			
		||||
              CLUTTER_NOTE (CLIPPING, "Reusing back buffer(age=%d) - repairing region: x=%d, y=%d, width=%d, height=%d\n",
 | 
			
		||||
                            age,
 | 
			
		||||
                            clip_region.x,
 | 
			
		||||
                            clip_region.y,
 | 
			
		||||
                            clip_region.width,
 | 
			
		||||
                            clip_region.height);
 | 
			
		||||
                            fb_clip_region.x,
 | 
			
		||||
                            fb_clip_region.y,
 | 
			
		||||
                            fb_clip_region.width,
 | 
			
		||||
                            fb_clip_region.height);
 | 
			
		||||
 | 
			
		||||
              swap_with_damage = TRUE;
 | 
			
		||||
            }
 | 
			
		||||
@@ -600,7 +669,12 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
            {
 | 
			
		||||
              CLUTTER_NOTE (CLIPPING, "Invalid back buffer(age=%d): forcing full redraw\n", age);
 | 
			
		||||
              use_clipped_redraw = FALSE;
 | 
			
		||||
              *current_damage = view_rect;
 | 
			
		||||
              *current_fb_damage = (cairo_rectangle_int_t) {
 | 
			
		||||
                .x = 0,
 | 
			
		||||
                .y = 0,
 | 
			
		||||
                .width = view_rect.width * fb_scale,
 | 
			
		||||
                .height = view_rect.height * fb_scale
 | 
			
		||||
              };
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      else if (!use_clipped_redraw)
 | 
			
		||||
@@ -616,26 +690,34 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
    }
 | 
			
		||||
  else if (use_clipped_redraw)
 | 
			
		||||
    {
 | 
			
		||||
      int scissor_x;
 | 
			
		||||
      int scissor_y;
 | 
			
		||||
      cairo_rectangle_int_t scissor_rect;
 | 
			
		||||
 | 
			
		||||
      calculate_scissor_region (&fb_clip_region,
 | 
			
		||||
                                subpixel_compensation,
 | 
			
		||||
                                fb_width, fb_height,
 | 
			
		||||
                                &scissor_rect);
 | 
			
		||||
 | 
			
		||||
      CLUTTER_NOTE (CLIPPING,
 | 
			
		||||
                    "Stage clip pushed: x=%d, y=%d, width=%d, height=%d\n",
 | 
			
		||||
                    clip_region.x,
 | 
			
		||||
                    clip_region.y,
 | 
			
		||||
                    clip_region.width,
 | 
			
		||||
                    clip_region.height);
 | 
			
		||||
                    scissor_rect.x,
 | 
			
		||||
                    scissor_rect.y,
 | 
			
		||||
                    scissor_rect.width,
 | 
			
		||||
                    scissor_rect.height);
 | 
			
		||||
 | 
			
		||||
      stage_cogl->using_clipped_redraw = TRUE;
 | 
			
		||||
 | 
			
		||||
      scissor_x = (clip_region.x - view_rect.x) * window_scale;
 | 
			
		||||
      scissor_y = (clip_region.y - view_rect.y) * window_scale;
 | 
			
		||||
      cogl_framebuffer_push_scissor_clip (fb,
 | 
			
		||||
                                          scissor_x,
 | 
			
		||||
                                          scissor_y,
 | 
			
		||||
                                          clip_region.width * window_scale,
 | 
			
		||||
                                          clip_region.height * window_scale);
 | 
			
		||||
      paint_stage (stage_cogl, view, &clip_region);
 | 
			
		||||
                                          scissor_rect.x,
 | 
			
		||||
                                          scissor_rect.y,
 | 
			
		||||
                                          scissor_rect.width,
 | 
			
		||||
                                          scissor_rect.height);
 | 
			
		||||
      paint_stage (stage_cogl, view,
 | 
			
		||||
                   &(cairo_rectangle_int_t) {
 | 
			
		||||
                     .x = view_rect.x + floorf ((fb_clip_region.x - 0) / fb_scale),
 | 
			
		||||
                     .y = view_rect.y + floorf ((fb_clip_region.y - 0) / fb_scale),
 | 
			
		||||
                     .width = ceilf ((fb_clip_region.width + 0) / fb_scale),
 | 
			
		||||
                     .height = ceilf ((fb_clip_region.height + 0) / fb_scale)
 | 
			
		||||
                   });
 | 
			
		||||
      cogl_framebuffer_pop_clip (fb);
 | 
			
		||||
 | 
			
		||||
      stage_cogl->using_clipped_redraw = FALSE;
 | 
			
		||||
@@ -650,17 +732,25 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
          may_use_clipped_redraw &&
 | 
			
		||||
          !clip_region_empty)
 | 
			
		||||
        {
 | 
			
		||||
          int scissor_x;
 | 
			
		||||
          int scissor_y;
 | 
			
		||||
          cairo_rectangle_int_t scissor_rect;
 | 
			
		||||
 | 
			
		||||
          calculate_scissor_region (&fb_clip_region,
 | 
			
		||||
                                    subpixel_compensation,
 | 
			
		||||
                                    fb_width, fb_height,
 | 
			
		||||
                                    &scissor_rect);
 | 
			
		||||
 | 
			
		||||
          scissor_x = (clip_region.x - view_rect.x) * window_scale;;
 | 
			
		||||
          scissor_y = (clip_region.y - view_rect.y) * window_scale;
 | 
			
		||||
          cogl_framebuffer_push_scissor_clip (fb,
 | 
			
		||||
                                              scissor_x,
 | 
			
		||||
                                              scissor_y,
 | 
			
		||||
                                              clip_region.width * window_scale,
 | 
			
		||||
                                              clip_region.height * window_scale);
 | 
			
		||||
          paint_stage (stage_cogl, view, &clip_region);
 | 
			
		||||
                                              scissor_rect.x,
 | 
			
		||||
                                              scissor_rect.y,
 | 
			
		||||
                                              scissor_rect.width,
 | 
			
		||||
                                              scissor_rect.height);
 | 
			
		||||
          paint_stage (stage_cogl, view,
 | 
			
		||||
                       &(cairo_rectangle_int_t) {
 | 
			
		||||
                         .x = view_rect.x + floorf (fb_clip_region.x / fb_scale),
 | 
			
		||||
                         .y = view_rect.y + floorf (fb_clip_region.y / fb_scale),
 | 
			
		||||
                         .width = ceilf (fb_clip_region.width / fb_scale),
 | 
			
		||||
                         .height = ceilf (fb_clip_region.height / fb_scale)
 | 
			
		||||
                       });
 | 
			
		||||
          cogl_framebuffer_pop_clip (fb);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
@@ -723,12 +813,7 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
        }
 | 
			
		||||
      else if (use_clipped_redraw)
 | 
			
		||||
        {
 | 
			
		||||
          swap_region = (cairo_rectangle_int_t) {
 | 
			
		||||
            .x = (clip_region.x - view_rect.x) * window_scale,
 | 
			
		||||
            .y = (clip_region.y - view_rect.y) * window_scale,
 | 
			
		||||
            .width = clip_region.width * window_scale,
 | 
			
		||||
            .height = clip_region.height * window_scale,
 | 
			
		||||
          };
 | 
			
		||||
          swap_region = fb_clip_region;
 | 
			
		||||
          g_assert (swap_region.width > 0);
 | 
			
		||||
          do_swap_buffer = TRUE;
 | 
			
		||||
        }
 | 
			
		||||
@@ -737,8 +822,8 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
 | 
			
		||||
          swap_region = (cairo_rectangle_int_t) {
 | 
			
		||||
            .x = 0,
 | 
			
		||||
            .y = 0,
 | 
			
		||||
            .width = view_rect.width * window_scale,
 | 
			
		||||
            .height = view_rect.height * window_scale,
 | 
			
		||||
            .width = view_rect.width * fb_scale,
 | 
			
		||||
            .height = view_rect.height * fb_scale,
 | 
			
		||||
          };
 | 
			
		||||
          do_swap_buffer = TRUE;
 | 
			
		||||
        }
 | 
			
		||||
@@ -810,9 +895,25 @@ clutter_stage_cogl_get_dirty_pixel (ClutterStageWindow *stage_window,
 | 
			
		||||
  gboolean has_buffer_age =
 | 
			
		||||
    cogl_is_onscreen (framebuffer) &&
 | 
			
		||||
    cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_BUFFER_AGE);
 | 
			
		||||
  cairo_rectangle_int_t *rect;
 | 
			
		||||
  float fb_scale;
 | 
			
		||||
  gboolean scale_is_fractional;
 | 
			
		||||
 | 
			
		||||
  if (!has_buffer_age)
 | 
			
		||||
  fb_scale = clutter_stage_view_get_scale (view);
 | 
			
		||||
  if (fb_scale != floorf (fb_scale))
 | 
			
		||||
    scale_is_fractional = TRUE;
 | 
			
		||||
  else
 | 
			
		||||
    scale_is_fractional = FALSE;
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * Buffer damage is tracked in the framebuffer coordinate space
 | 
			
		||||
   * using the damage history. When fractional scaling is used, a
 | 
			
		||||
   * coordinate on the stage might not correspond to the exact position of any
 | 
			
		||||
   * physical pixel, which causes issues when painting using the pick mode.
 | 
			
		||||
   *
 | 
			
		||||
   * For now, always use the (0, 0) pixel for picking when using fractional
 | 
			
		||||
   * framebuffer scaling.
 | 
			
		||||
   */
 | 
			
		||||
  if (!has_buffer_age || scale_is_fractional)
 | 
			
		||||
    {
 | 
			
		||||
      *x = 0;
 | 
			
		||||
      *y = 0;
 | 
			
		||||
@@ -823,12 +924,13 @@ clutter_stage_cogl_get_dirty_pixel (ClutterStageWindow *stage_window,
 | 
			
		||||
      ClutterStageViewCoglPrivate *view_priv =
 | 
			
		||||
        clutter_stage_view_cogl_get_instance_private (view_cogl);
 | 
			
		||||
      cairo_rectangle_int_t view_layout;
 | 
			
		||||
      cairo_rectangle_int_t *fb_damage;
 | 
			
		||||
 | 
			
		||||
      clutter_stage_view_get_layout (view, &view_layout);
 | 
			
		||||
 | 
			
		||||
      rect = &view_priv->damage_history[DAMAGE_HISTORY (view_priv->damage_index - 1)];
 | 
			
		||||
      *x = rect->x - view_layout.x;
 | 
			
		||||
      *y = rect->y - view_layout.y;
 | 
			
		||||
      fb_damage = &view_priv->damage_history[DAMAGE_HISTORY (view_priv->damage_index - 1)];
 | 
			
		||||
      *x = fb_damage->x / fb_scale;
 | 
			
		||||
      *y = fb_damage->y / fb_scale;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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,120 +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,
 | 
			
		||||
@@ -549,7 +432,7 @@ notify_touch_event (ClutterInputDevice *input_device,
 | 
			
		||||
                                                    &event->touch.y);
 | 
			
		||||
 | 
			
		||||
  /* "NULL" sequences are special cased in clutter */
 | 
			
		||||
  event->touch.sequence = GINT_TO_POINTER (slot + 1);
 | 
			
		||||
  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 ||
 | 
			
		||||
@@ -1153,40 +1036,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 +1183,68 @@ 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 gboolean
 | 
			
		||||
process_device_event (ClutterDeviceManagerEvdev *manager_evdev,
 | 
			
		||||
                      struct libinput_event *event)
 | 
			
		||||
@@ -1460,17 +1371,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,63 +1390,20 @@ 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:
 | 
			
		||||
@@ -1596,6 +1459,8 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev,
 | 
			
		||||
        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);
 | 
			
		||||
        if (!touch_state)
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        notify_touch_event (device, CLUTTER_TOUCH_END, time_us, slot,
 | 
			
		||||
			    touch_state->coords.x, touch_state->coords.y);
 | 
			
		||||
@@ -1634,6 +1499,9 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev,
 | 
			
		||||
                                                    stage_height);
 | 
			
		||||
 | 
			
		||||
        touch_state = clutter_seat_evdev_get_touch (seat, slot);
 | 
			
		||||
        if (!touch_state)
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        touch_state->coords.x = x;
 | 
			
		||||
        touch_state->coords.y = y;
 | 
			
		||||
 | 
			
		||||
@@ -2060,6 +1928,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
 | 
			
		||||
 */
 | 
			
		||||
@@ -2202,6 +2082,7 @@ clutter_device_manager_evdev_class_init (ClutterDeviceManagerEvdevClass *klass)
 | 
			
		||||
  manager_class->get_device = clutter_device_manager_evdev_get_device;
 | 
			
		||||
  manager_class->create_virtual_device = clutter_device_manager_evdev_create_virtual_device;
 | 
			
		||||
  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 +2203,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 +2322,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 +2470,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 +2482,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,29 @@ struct _ClutterInputDeviceEvdev
 | 
			
		||||
  cairo_matrix_t device_matrix;
 | 
			
		||||
  gdouble device_aspect_ratio; /* w:h */
 | 
			
		||||
  gdouble output_ratio;        /* w:h */
 | 
			
		||||
 | 
			
		||||
  /* 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 +134,9 @@ 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);
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
@@ -489,6 +496,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 +580,194 @@ 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_free (ClutterSeatEvdev *seat)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,7 @@ struct _ClutterSeatEvdev
 | 
			
		||||
  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,6 +107,21 @@ 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_set_libinput_seat (ClutterSeatEvdev     *seat,
 | 
			
		||||
                                           struct libinput_seat *libinput_seat);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
@@ -189,6 +195,9 @@ clutter_virtual_input_device_evdev_notify_button (ClutterVirtualInputDevice *vir
 | 
			
		||||
    CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device);
 | 
			
		||||
  int button_count;
 | 
			
		||||
 | 
			
		||||
  if (time_us == CLUTTER_CURRENT_TIME)
 | 
			
		||||
    time_us = g_get_monotonic_time ();
 | 
			
		||||
 | 
			
		||||
  if (get_button_type (button) != EVDEV_BUTTON_TYPE_BUTTON)
 | 
			
		||||
    {
 | 
			
		||||
      g_warning ("Unknown/invalid virtual device button 0x%x pressed",
 | 
			
		||||
@@ -222,6 +231,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 +355,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 +397,57 @@ 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_get_property (GObject    *object,
 | 
			
		||||
                                                 guint       prop_id,
 | 
			
		||||
@@ -485,6 +551,7 @@ 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;
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
{
 | 
			
		||||
@@ -136,7 +137,6 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
  ClutterTranslateReturn res;
 | 
			
		||||
  ClutterStage *stage;
 | 
			
		||||
  XEvent *xevent;
 | 
			
		||||
  int window_scale;
 | 
			
		||||
 | 
			
		||||
  manager_x11 = CLUTTER_DEVICE_MANAGER_X11 (translator);
 | 
			
		||||
  backend_x11 = CLUTTER_BACKEND_X11 (clutter_get_default_backend ());
 | 
			
		||||
@@ -152,8 +152,6 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
 | 
			
		||||
  stage_x11 = CLUTTER_STAGE_X11 (_clutter_stage_get_window (stage));
 | 
			
		||||
 | 
			
		||||
  window_scale = stage_x11->scale_factor;
 | 
			
		||||
 | 
			
		||||
  event->any.stage = stage;
 | 
			
		||||
 | 
			
		||||
  res = CLUTTER_TRANSLATE_CONTINUE;
 | 
			
		||||
@@ -226,8 +224,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
            event->scroll.direction = CLUTTER_SCROLL_RIGHT;
 | 
			
		||||
 | 
			
		||||
          event->scroll.time = xevent->xbutton.time;
 | 
			
		||||
          event->scroll.x = xevent->xbutton.x / window_scale;
 | 
			
		||||
          event->scroll.y = xevent->xbutton.y / window_scale;
 | 
			
		||||
          event->scroll.x = xevent->xbutton.x;
 | 
			
		||||
          event->scroll.y = xevent->xbutton.y;
 | 
			
		||||
          event->scroll.modifier_state = xevent->xbutton.state;
 | 
			
		||||
          event->scroll.axes = NULL;
 | 
			
		||||
          break;
 | 
			
		||||
@@ -235,8 +233,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
        default:
 | 
			
		||||
          event->button.type = event->type = CLUTTER_BUTTON_PRESS;
 | 
			
		||||
          event->button.time = xevent->xbutton.time;
 | 
			
		||||
          event->button.x = xevent->xbutton.x / window_scale;
 | 
			
		||||
          event->button.y = xevent->xbutton.y / window_scale;
 | 
			
		||||
          event->button.x = xevent->xbutton.x;
 | 
			
		||||
          event->button.y = xevent->xbutton.y;
 | 
			
		||||
          event->button.modifier_state = xevent->xbutton.state;
 | 
			
		||||
          event->button.button = xevent->xbutton.button;
 | 
			
		||||
          event->button.axes = NULL;
 | 
			
		||||
@@ -269,8 +267,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
 | 
			
		||||
      event->button.type = event->type = CLUTTER_BUTTON_RELEASE;
 | 
			
		||||
      event->button.time = xevent->xbutton.time;
 | 
			
		||||
      event->button.x = xevent->xbutton.x / window_scale;
 | 
			
		||||
      event->button.y = xevent->xbutton.y / window_scale;
 | 
			
		||||
      event->button.x = xevent->xbutton.x;
 | 
			
		||||
      event->button.y = xevent->xbutton.y;
 | 
			
		||||
      event->button.modifier_state = xevent->xbutton.state;
 | 
			
		||||
      event->button.button = xevent->xbutton.button;
 | 
			
		||||
      event->button.axes = NULL;
 | 
			
		||||
@@ -287,8 +285,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
 | 
			
		||||
      event->motion.type = event->type = CLUTTER_MOTION;
 | 
			
		||||
      event->motion.time = xevent->xmotion.time;
 | 
			
		||||
      event->motion.x = xevent->xmotion.x / window_scale;
 | 
			
		||||
      event->motion.y = xevent->xmotion.y / window_scale;
 | 
			
		||||
      event->motion.x = xevent->xmotion.x;
 | 
			
		||||
      event->motion.y = xevent->xmotion.y;
 | 
			
		||||
      event->motion.modifier_state = xevent->xmotion.state;
 | 
			
		||||
      event->motion.axes = NULL;
 | 
			
		||||
      clutter_event_set_device (event, manager_x11->core_pointer);
 | 
			
		||||
@@ -301,8 +299,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
 | 
			
		||||
      event->crossing.type = CLUTTER_ENTER;
 | 
			
		||||
      event->crossing.time = xevent->xcrossing.time;
 | 
			
		||||
      event->crossing.x = xevent->xcrossing.x / window_scale;
 | 
			
		||||
      event->crossing.y = xevent->xcrossing.y / window_scale;
 | 
			
		||||
      event->crossing.x = xevent->xcrossing.x;
 | 
			
		||||
      event->crossing.y = xevent->xcrossing.y;
 | 
			
		||||
      event->crossing.source = CLUTTER_ACTOR (stage);
 | 
			
		||||
      event->crossing.related = NULL;
 | 
			
		||||
      clutter_event_set_device (event, manager_x11->core_pointer);
 | 
			
		||||
@@ -327,8 +325,8 @@ clutter_device_manager_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
 | 
			
		||||
      event->crossing.type = CLUTTER_LEAVE;
 | 
			
		||||
      event->crossing.time = xevent->xcrossing.time;
 | 
			
		||||
      event->crossing.x = xevent->xcrossing.x / window_scale;
 | 
			
		||||
      event->crossing.y = xevent->xcrossing.y / window_scale;
 | 
			
		||||
      event->crossing.x = xevent->xcrossing.x;
 | 
			
		||||
      event->crossing.y = xevent->xcrossing.y;
 | 
			
		||||
      event->crossing.source = CLUTTER_ACTOR (stage);
 | 
			
		||||
      event->crossing.related = NULL;
 | 
			
		||||
      clutter_event_set_device (event, manager_x11->core_pointer);
 | 
			
		||||
@@ -355,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);
 | 
			
		||||
@@ -392,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);
 | 
			
		||||
}
 | 
			
		||||
@@ -535,6 +537,7 @@ 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->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>
 | 
			
		||||
 | 
			
		||||
@@ -66,6 +67,14 @@ static const char *clutter_input_axis_atom_names[] = {
 | 
			
		||||
 | 
			
		||||
#define N_AXIS_ATOMS    G_N_ELEMENTS (clutter_input_axis_atom_names)
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
  PAD_AXIS_FIRST  = 3, /* First axes are always x/y/pressure, ignored in pads */
 | 
			
		||||
  PAD_AXIS_STRIP1 = PAD_AXIS_FIRST,
 | 
			
		||||
  PAD_AXIS_STRIP2,
 | 
			
		||||
  PAD_AXIS_RING1,
 | 
			
		||||
  PAD_AXIS_RING2,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static Atom clutter_input_axis_atoms[N_AXIS_ATOMS] = { 0, };
 | 
			
		||||
 | 
			
		||||
static void clutter_event_translator_iface_init (ClutterEventTranslatorIface *iface);
 | 
			
		||||
@@ -359,6 +368,36 @@ get_device_node_path (ClutterBackendX11  *backend_x11,
 | 
			
		||||
  return node_path;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
get_pad_features (XIDeviceInfo *info,
 | 
			
		||||
                  guint        *n_rings,
 | 
			
		||||
                  guint        *n_strips)
 | 
			
		||||
{
 | 
			
		||||
  gint i, rings = 0, strips = 0;
 | 
			
		||||
 | 
			
		||||
  for (i = PAD_AXIS_FIRST; i < info->num_classes; i++)
 | 
			
		||||
    {
 | 
			
		||||
      XIValuatorClassInfo *valuator = (XIValuatorClassInfo*) info->classes[i];
 | 
			
		||||
      int axis = valuator->number;
 | 
			
		||||
 | 
			
		||||
      if (valuator->type != XIValuatorClass)
 | 
			
		||||
        continue;
 | 
			
		||||
      if (valuator->max <= 1)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      /* Ring/strip axes are fixed in pad devices as handled by the
 | 
			
		||||
       * wacom driver. Match those to detect pad features.
 | 
			
		||||
       */
 | 
			
		||||
      if (axis == PAD_AXIS_STRIP1 || axis == PAD_AXIS_STRIP2)
 | 
			
		||||
        strips++;
 | 
			
		||||
      else if (axis == PAD_AXIS_RING1 || axis == PAD_AXIS_RING2)
 | 
			
		||||
        rings++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  *n_rings = rings;
 | 
			
		||||
  *n_strips = strips;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ClutterInputDevice *
 | 
			
		||||
create_device (ClutterDeviceManagerXI2 *manager_xi2,
 | 
			
		||||
               ClutterBackendX11       *backend_x11,
 | 
			
		||||
@@ -368,7 +407,7 @@ create_device (ClutterDeviceManagerXI2 *manager_xi2,
 | 
			
		||||
  ClutterInputDevice *retval;
 | 
			
		||||
  ClutterInputMode mode;
 | 
			
		||||
  gboolean is_enabled;
 | 
			
		||||
  guint num_touches = 0;
 | 
			
		||||
  guint num_touches = 0, num_rings = 0, num_strips = 0;
 | 
			
		||||
  gchar *vendor_id = NULL, *product_id = NULL, *node_path = NULL;
 | 
			
		||||
 | 
			
		||||
  if (info->use == XIMasterKeyboard || info->use == XISlaveKeyboard)
 | 
			
		||||
@@ -436,6 +475,12 @@ create_device (ClutterDeviceManagerXI2 *manager_xi2,
 | 
			
		||||
      node_path = get_device_node_path (backend_x11, info);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (source == CLUTTER_PAD_DEVICE)
 | 
			
		||||
    {
 | 
			
		||||
      is_enabled = TRUE;
 | 
			
		||||
      get_pad_features (info, &num_rings, &num_strips);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  retval = g_object_new (CLUTTER_TYPE_INPUT_DEVICE_XI2,
 | 
			
		||||
                         "name", info->name,
 | 
			
		||||
                         "id", info->deviceid,
 | 
			
		||||
@@ -448,6 +493,8 @@ create_device (ClutterDeviceManagerXI2 *manager_xi2,
 | 
			
		||||
                         "vendor-id", vendor_id,
 | 
			
		||||
                         "product-id", product_id,
 | 
			
		||||
                         "device-node", node_path,
 | 
			
		||||
                         "n-rings", num_rings,
 | 
			
		||||
                         "n-strips", num_strips,
 | 
			
		||||
                         NULL);
 | 
			
		||||
 | 
			
		||||
  translate_device_classes (backend_x11->xdpy, retval,
 | 
			
		||||
@@ -847,6 +894,54 @@ translate_axes (ClutterInputDevice *device,
 | 
			
		||||
  return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
translate_pad_axis (ClutterInputDevice *device,
 | 
			
		||||
                    XIValuatorState    *valuators,
 | 
			
		||||
                    ClutterEventType   *evtype,
 | 
			
		||||
                    guint              *number,
 | 
			
		||||
                    gdouble            *value)
 | 
			
		||||
{
 | 
			
		||||
  double *values;
 | 
			
		||||
  gint i;
 | 
			
		||||
 | 
			
		||||
  values = valuators->values;
 | 
			
		||||
 | 
			
		||||
  for (i = PAD_AXIS_FIRST; i < valuators->mask_len * 8; i++)
 | 
			
		||||
    {
 | 
			
		||||
      gdouble val;
 | 
			
		||||
      guint axis_number = 0;
 | 
			
		||||
 | 
			
		||||
      if (!XIMaskIsSet (valuators->mask, i))
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      val = *values++;
 | 
			
		||||
      if (val <= 0)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      _clutter_input_device_translate_axis (device, i, val, value);
 | 
			
		||||
 | 
			
		||||
      if (i == PAD_AXIS_RING1 || i == PAD_AXIS_RING2)
 | 
			
		||||
        {
 | 
			
		||||
          *evtype = CLUTTER_PAD_RING;
 | 
			
		||||
          (*value) *= 360.0;
 | 
			
		||||
        }
 | 
			
		||||
      else if (i == PAD_AXIS_STRIP1 || i == PAD_AXIS_STRIP2)
 | 
			
		||||
        {
 | 
			
		||||
          *evtype = CLUTTER_PAD_STRIP;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (i == PAD_AXIS_STRIP2 || i == PAD_AXIS_RING2)
 | 
			
		||||
        axis_number++;
 | 
			
		||||
 | 
			
		||||
      *number = axis_number;
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
translate_coords (ClutterStageX11 *stage_x11,
 | 
			
		||||
                  gdouble          event_x,
 | 
			
		||||
@@ -861,8 +956,8 @@ translate_coords (ClutterStageX11 *stage_x11,
 | 
			
		||||
 | 
			
		||||
  clutter_actor_get_size (stage, &stage_width, &stage_height);
 | 
			
		||||
 | 
			
		||||
  *x_out = CLAMP (event_x / stage_x11->scale_factor, 0, stage_width);
 | 
			
		||||
  *y_out = CLAMP (event_y / stage_x11->scale_factor, 0, stage_height);
 | 
			
		||||
  *x_out = CLAMP (event_x, 0, stage_width);
 | 
			
		||||
  *y_out = CLAMP (event_y, 0, stage_height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gdouble
 | 
			
		||||
@@ -1025,6 +1120,54 @@ handle_property_event (ClutterDeviceManagerXI2 *manager_xi2,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
translate_pad_event (ClutterEvent       *event,
 | 
			
		||||
                     XIDeviceEvent      *xev,
 | 
			
		||||
                     ClutterInputDevice *device)
 | 
			
		||||
{
 | 
			
		||||
  gdouble value;
 | 
			
		||||
  guint number;
 | 
			
		||||
 | 
			
		||||
  if (!translate_pad_axis (device, &xev->valuators,
 | 
			
		||||
                           &event->any.type,
 | 
			
		||||
                           &number, &value))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  /* When touching a ring/strip a first XI_Motion event
 | 
			
		||||
   * is generated. Use it to reset the pad state, so
 | 
			
		||||
   * later events actually have a directionality.
 | 
			
		||||
   */
 | 
			
		||||
  if (xev->evtype == XI_Motion)
 | 
			
		||||
    value = -1;
 | 
			
		||||
 | 
			
		||||
  if (event->any.type == CLUTTER_PAD_RING)
 | 
			
		||||
    {
 | 
			
		||||
      event->pad_ring.ring_number = number;
 | 
			
		||||
      event->pad_ring.angle = value;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      event->pad_strip.strip_number = number;
 | 
			
		||||
      event->pad_strip.value = value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  event->any.time = xev->time;
 | 
			
		||||
  clutter_event_set_device (event, device);
 | 
			
		||||
  clutter_event_set_source_device (event, device);
 | 
			
		||||
 | 
			
		||||
  CLUTTER_NOTE (EVENT,
 | 
			
		||||
                "%s: win:0x%x, device:%d '%s', time:%d "
 | 
			
		||||
                "(value:%f)",
 | 
			
		||||
                event->any.type == CLUTTER_PAD_RING
 | 
			
		||||
                ? "pad ring  "
 | 
			
		||||
                : "pad strip",
 | 
			
		||||
                (unsigned int) xev->event,
 | 
			
		||||
                device->id,
 | 
			
		||||
                device->device_name,
 | 
			
		||||
                event->any.time, value);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ClutterTranslateReturn
 | 
			
		||||
clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
                                            gpointer                native,
 | 
			
		||||
@@ -1206,15 +1349,23 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
                           XIAsyncDevice,
 | 
			
		||||
                           xev->time);
 | 
			
		||||
 | 
			
		||||
	    /* Ignore 4-7 buttons */
 | 
			
		||||
            if (xev->detail >= 4 && xev->detail <= 7)
 | 
			
		||||
              return CLUTTER_TRANSLATE_REMOVE;
 | 
			
		||||
            event->any.stage = stage;
 | 
			
		||||
 | 
			
		||||
            event->pad_button.type =
 | 
			
		||||
            if (xev->detail >= 4 && xev->detail <= 7)
 | 
			
		||||
              {
 | 
			
		||||
                retval = CLUTTER_TRANSLATE_REMOVE;
 | 
			
		||||
 | 
			
		||||
                if (xi_event->evtype == XI_ButtonPress &&
 | 
			
		||||
                    translate_pad_event (event, xev, source_device))
 | 
			
		||||
                  retval = CLUTTER_TRANSLATE_QUEUE;
 | 
			
		||||
 | 
			
		||||
                break;
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
            event->any.type =
 | 
			
		||||
              (xi_event->evtype == XI_ButtonPress) ? CLUTTER_PAD_BUTTON_PRESS
 | 
			
		||||
                                                   : CLUTTER_PAD_BUTTON_RELEASE;
 | 
			
		||||
            event->pad_button.time = xev->time;
 | 
			
		||||
            event->pad_button.stage = stage;
 | 
			
		||||
            event->any.time = xev->time;
 | 
			
		||||
 | 
			
		||||
            /* The 4-7 button range is taken as non-existent on pad devices,
 | 
			
		||||
             * let the buttons above that take over this range.
 | 
			
		||||
@@ -1224,6 +1375,7 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
 | 
			
		||||
            /* Pad buttons are 0-indexed */
 | 
			
		||||
            event->pad_button.button = xev->detail - 1;
 | 
			
		||||
            clutter_event_set_device (event, device);
 | 
			
		||||
            clutter_event_set_source_device (event, source_device);
 | 
			
		||||
 | 
			
		||||
            CLUTTER_NOTE (EVENT,
 | 
			
		||||
@@ -1380,6 +1532,15 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
        device = g_hash_table_lookup (manager_xi2->devices_by_id,
 | 
			
		||||
                                      GINT_TO_POINTER (xev->deviceid));
 | 
			
		||||
 | 
			
		||||
        if (clutter_input_device_get_device_type (source_device) == CLUTTER_PAD_DEVICE)
 | 
			
		||||
          {
 | 
			
		||||
            event->any.stage = stage;
 | 
			
		||||
 | 
			
		||||
            if (translate_pad_event (event, xev, source_device))
 | 
			
		||||
              retval = CLUTTER_TRANSLATE_QUEUE;
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
        /* Set the stage for core events coming out of nowhere (see bug #684509) */
 | 
			
		||||
        if (clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_MASTER &&
 | 
			
		||||
            clutter_input_device_get_pointer_stage (device) == NULL &&
 | 
			
		||||
@@ -1827,6 +1988,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);
 | 
			
		||||
}
 | 
			
		||||
@@ -1889,6 +2052,7 @@ 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->apply_kbd_a11y_settings = clutter_device_manager_x11_apply_kbd_a11y_settings;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 
 | 
			
		||||
@@ -10,13 +10,10 @@ static const struct {
 | 
			
		||||
  { "Net/DndDragThreshold",    "dnd-drag-threshold" },
 | 
			
		||||
  { "Gtk/FontName",            "font-name" },
 | 
			
		||||
  { "Xft/Antialias",           "font-antialias" },
 | 
			
		||||
  { "Xft/DPI",                 "font-dpi" },
 | 
			
		||||
  { "Xft/Hinting",             "font-hinting" },
 | 
			
		||||
  { "Xft/HintStyle",           "font-hint-style" },
 | 
			
		||||
  { "Xft/RGBA",                "font-subpixel-order" },
 | 
			
		||||
  { "Fontconfig/Timestamp",    "fontconfig-timestamp" },
 | 
			
		||||
  { "Gdk/WindowScalingFactor", "window-scaling-factor" },
 | 
			
		||||
  { "Gdk/UnscaledDPI",         "unscaled-font-dpi" },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const gint _n_clutter_settings_map = G_N_ELEMENTS (_clutter_settings_map);
 | 
			
		||||
 
 | 
			
		||||
@@ -162,10 +162,10 @@ clutter_stage_x11_fix_window_size (ClutterStageX11 *stage_x11,
 | 
			
		||||
                                      &min_height);
 | 
			
		||||
 | 
			
		||||
      if (new_width <= 0)
 | 
			
		||||
        new_width = min_width * stage_x11->scale_factor;
 | 
			
		||||
        new_width = min_width;
 | 
			
		||||
 | 
			
		||||
      if (new_height <= 0)
 | 
			
		||||
        new_height = min_height * stage_x11->scale_factor;
 | 
			
		||||
        new_height = min_height;
 | 
			
		||||
 | 
			
		||||
      size_hints->flags = 0;
 | 
			
		||||
 | 
			
		||||
@@ -175,8 +175,8 @@ clutter_stage_x11_fix_window_size (ClutterStageX11 *stage_x11,
 | 
			
		||||
        {
 | 
			
		||||
          if (resize)
 | 
			
		||||
            {
 | 
			
		||||
              size_hints->min_width = min_width * stage_x11->scale_factor;
 | 
			
		||||
              size_hints->min_height = min_height * stage_x11->scale_factor;
 | 
			
		||||
              size_hints->min_width = min_width;
 | 
			
		||||
              size_hints->min_height = min_height;
 | 
			
		||||
              size_hints->flags = PMinSize;
 | 
			
		||||
            }
 | 
			
		||||
          else
 | 
			
		||||
@@ -236,8 +236,8 @@ clutter_stage_x11_get_geometry (ClutterStageWindow    *stage_window,
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  geometry->width = stage_x11->xwin_width / stage_x11->scale_factor;
 | 
			
		||||
  geometry->height = stage_x11->xwin_height / stage_x11->scale_factor;
 | 
			
		||||
  geometry->width = stage_x11->xwin_width;
 | 
			
		||||
  geometry->height = stage_x11->xwin_height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -255,8 +255,8 @@ clutter_stage_x11_resize (ClutterStageWindow *stage_window,
 | 
			
		||||
       * so we need to manually set the size and queue a relayout on the
 | 
			
		||||
       * stage here (as is normally done in response to ConfigureNotify).
 | 
			
		||||
       */
 | 
			
		||||
      stage_x11->xwin_width = width * stage_x11->scale_factor;
 | 
			
		||||
      stage_x11->xwin_height = height * stage_x11->scale_factor;
 | 
			
		||||
      stage_x11->xwin_width = width;
 | 
			
		||||
      stage_x11->xwin_height = height;
 | 
			
		||||
      clutter_actor_queue_relayout (CLUTTER_ACTOR (stage_cogl->wrapper));
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
@@ -277,9 +277,6 @@ clutter_stage_x11_resize (ClutterStageWindow *stage_window,
 | 
			
		||||
 | 
			
		||||
  CLUTTER_NOTE (BACKEND, "New size received: (%d, %d)", width, height);
 | 
			
		||||
 | 
			
		||||
  width *= stage_x11->scale_factor;
 | 
			
		||||
  height *= stage_x11->scale_factor;
 | 
			
		||||
 | 
			
		||||
  if (stage_x11->xwin != None)
 | 
			
		||||
    {
 | 
			
		||||
      clutter_stage_x11_fix_window_size (stage_x11, width, height);
 | 
			
		||||
@@ -400,20 +397,6 @@ set_cursor_visible (ClutterStageX11 *stage_x11)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_window_scaling_factor_notify (GObject         *settings,
 | 
			
		||||
                                 GParamSpec      *pspec,
 | 
			
		||||
                                 ClutterStageX11 *stage_x11)
 | 
			
		||||
{
 | 
			
		||||
  g_object_get (settings,
 | 
			
		||||
                "window-scaling-factor", &stage_x11->scale_factor,
 | 
			
		||||
                NULL);
 | 
			
		||||
 | 
			
		||||
  clutter_stage_x11_resize (CLUTTER_STAGE_WINDOW (stage_x11),
 | 
			
		||||
                            stage_x11->xwin_width,
 | 
			
		||||
                            stage_x11->xwin_height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_stage_x11_unrealize (ClutterStageWindow *stage_window)
 | 
			
		||||
{
 | 
			
		||||
@@ -643,12 +626,8 @@ clutter_stage_x11_realize (ClutterStageWindow *stage_window)
 | 
			
		||||
 | 
			
		||||
  CLUTTER_NOTE (BACKEND, "Wrapper size: %.2f x %.2f", width, height);
 | 
			
		||||
 | 
			
		||||
  width = width * (float) stage_x11->scale_factor;
 | 
			
		||||
  height = height * (float) stage_x11->scale_factor;
 | 
			
		||||
 | 
			
		||||
  CLUTTER_NOTE (BACKEND, "Creating a new Cogl onscreen surface: %.2f x %.2f (factor: %d)",
 | 
			
		||||
                width, height,
 | 
			
		||||
                stage_x11->scale_factor);
 | 
			
		||||
  CLUTTER_NOTE (BACKEND, "Creating a new Cogl onscreen surface: %.2f x %.2f",
 | 
			
		||||
                width, height);
 | 
			
		||||
 | 
			
		||||
  stage_x11->onscreen = cogl_onscreen_new (backend->cogl_context, width, height);
 | 
			
		||||
 | 
			
		||||
@@ -909,28 +888,6 @@ clutter_stage_x11_can_clip_redraws (ClutterStageWindow *stage_window)
 | 
			
		||||
  return stage_x11->clipped_redraws_cool_off == 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clutter_stage_x11_set_scale_factor (ClutterStageWindow *stage_window,
 | 
			
		||||
                                    int                 factor)
 | 
			
		||||
{
 | 
			
		||||
  ClutterStageX11 *stage_x11 = CLUTTER_STAGE_X11 (stage_window);
 | 
			
		||||
 | 
			
		||||
  if (stage_x11->scale_factor == factor)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  stage_x11->scale_factor = factor;
 | 
			
		||||
 | 
			
		||||
  clutter_stage_x11_resize (stage_window, stage_x11->xwin_width, stage_x11->xwin_height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
clutter_stage_x11_get_scale_factor (ClutterStageWindow *stage_window)
 | 
			
		||||
{
 | 
			
		||||
  ClutterStageX11 *stage_x11 = CLUTTER_STAGE_X11 (stage_window);
 | 
			
		||||
 | 
			
		||||
  return stage_x11->scale_factor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ensure_legacy_view (ClutterStageWindow *stage_window)
 | 
			
		||||
{
 | 
			
		||||
@@ -1002,8 +959,6 @@ clutter_stage_x11_class_init (ClutterStageX11Class *klass)
 | 
			
		||||
static void
 | 
			
		||||
clutter_stage_x11_init (ClutterStageX11 *stage)
 | 
			
		||||
{
 | 
			
		||||
  ClutterSettings *settings;
 | 
			
		||||
 | 
			
		||||
  stage->xwin = None;
 | 
			
		||||
  stage->xwin_width = 640;
 | 
			
		||||
  stage->xwin_height = 480;
 | 
			
		||||
@@ -1016,12 +971,6 @@ clutter_stage_x11_init (ClutterStageX11 *stage)
 | 
			
		||||
  stage->accept_focus = TRUE;
 | 
			
		||||
 | 
			
		||||
  stage->title = NULL;
 | 
			
		||||
 | 
			
		||||
  settings = clutter_settings_get_default ();
 | 
			
		||||
  g_signal_connect (settings, "notify::window-scaling-factor",
 | 
			
		||||
                    G_CALLBACK (on_window_scaling_factor_notify),
 | 
			
		||||
                    stage);
 | 
			
		||||
  on_window_scaling_factor_notify (G_OBJECT (settings), NULL, stage);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -1041,8 +990,6 @@ clutter_stage_window_iface_init (ClutterStageWindowIface *iface)
 | 
			
		||||
  iface->realize = clutter_stage_x11_realize;
 | 
			
		||||
  iface->unrealize = clutter_stage_x11_unrealize;
 | 
			
		||||
  iface->can_clip_redraws = clutter_stage_x11_can_clip_redraws;
 | 
			
		||||
  iface->set_scale_factor = clutter_stage_x11_set_scale_factor;
 | 
			
		||||
  iface->get_scale_factor = clutter_stage_x11_get_scale_factor;
 | 
			
		||||
  iface->get_views = clutter_stage_x11_get_views;
 | 
			
		||||
  iface->get_frame_counter = clutter_stage_x11_get_frame_counter;
 | 
			
		||||
}
 | 
			
		||||
@@ -1167,8 +1114,8 @@ clutter_stage_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
              stage_x11->xwin_height = xevent->xconfigure.height;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          stage_width = xevent->xconfigure.width / stage_x11->scale_factor;
 | 
			
		||||
          stage_height = xevent->xconfigure.height / stage_x11->scale_factor;
 | 
			
		||||
          stage_width = xevent->xconfigure.width;
 | 
			
		||||
          stage_height = xevent->xconfigure.height;
 | 
			
		||||
          clutter_actor_set_size (CLUTTER_ACTOR (stage), stage_width, stage_height);
 | 
			
		||||
 | 
			
		||||
          if (size_changed)
 | 
			
		||||
@@ -1335,10 +1282,10 @@ clutter_stage_x11_translate_event (ClutterEventTranslator *translator,
 | 
			
		||||
                      expose->width,
 | 
			
		||||
                      expose->height);
 | 
			
		||||
 | 
			
		||||
        clip.x = expose->x / stage_x11->scale_factor;
 | 
			
		||||
        clip.y = expose->y / stage_x11->scale_factor;
 | 
			
		||||
        clip.width = expose->width / stage_x11->scale_factor;
 | 
			
		||||
        clip.height = expose->height / stage_x11->scale_factor;
 | 
			
		||||
        clip.x = expose->x;
 | 
			
		||||
        clip.y = expose->y;
 | 
			
		||||
        clip.width = expose->width;
 | 
			
		||||
        clip.height = expose->height;
 | 
			
		||||
        clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stage), &clip);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
@@ -1504,8 +1451,8 @@ set_foreign_window_callback (ClutterActor *actor,
 | 
			
		||||
  fwd->stage_x11->xwin = fwd->xwindow;
 | 
			
		||||
  fwd->stage_x11->is_foreign_xwin = TRUE;
 | 
			
		||||
 | 
			
		||||
  fwd->stage_x11->xwin_width = fwd->geom.width * fwd->stage_x11->scale_factor;
 | 
			
		||||
  fwd->stage_x11->xwin_height = fwd->geom.height * fwd->stage_x11->scale_factor;
 | 
			
		||||
  fwd->stage_x11->xwin_width = fwd->geom.width;
 | 
			
		||||
  fwd->stage_x11->xwin_height = fwd->geom.height;
 | 
			
		||||
 | 
			
		||||
  clutter_actor_set_size (actor, fwd->geom.width, fwd->geom.height);
 | 
			
		||||
 | 
			
		||||
@@ -1599,8 +1546,8 @@ clutter_x11_set_stage_foreign (ClutterStage *stage,
 | 
			
		||||
 | 
			
		||||
  fwd.geom.x = x;
 | 
			
		||||
  fwd.geom.y = y;
 | 
			
		||||
  fwd.geom.width = width / stage_x11->scale_factor;
 | 
			
		||||
  fwd.geom.height = height / stage_x11->scale_factor;
 | 
			
		||||
  fwd.geom.width = width;
 | 
			
		||||
  fwd.geom.height = height;
 | 
			
		||||
 | 
			
		||||
  actor = CLUTTER_ACTOR (stage);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -69,8 +69,6 @@ struct _ClutterStageX11
 | 
			
		||||
 | 
			
		||||
  ClutterStageX11State wm_state;
 | 
			
		||||
 | 
			
		||||
  int scale_factor;
 | 
			
		||||
 | 
			
		||||
  guint is_foreign_xwin       : 1;
 | 
			
		||||
  guint fullscreening         : 1;
 | 
			
		||||
  guint is_cursor_visible     : 1;
 | 
			
		||||
 
 | 
			
		||||
@@ -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 */
 | 
			
		||||
@@ -110,7 +110,7 @@ LT_LIB_M
 | 
			
		||||
AC_HEADER_STDC
 | 
			
		||||
 | 
			
		||||
# required versions for dependencies
 | 
			
		||||
m4_define([glib_req_version],           [2.44.0])
 | 
			
		||||
m4_define([glib_req_version],           [2.53.2])
 | 
			
		||||
m4_define([cogl_req_version],           [1.21.2])
 | 
			
		||||
m4_define([json_glib_req_version],      [0.12.0])
 | 
			
		||||
m4_define([atk_req_version],            [2.5.3])
 | 
			
		||||
 
 | 
			
		||||
@@ -350,7 +350,8 @@ actor_replace_child (void)
 | 
			
		||||
  g_assert_cmpstr (clutter_actor_get_name (iter), ==, "qux");
 | 
			
		||||
 | 
			
		||||
  clutter_actor_add_child (actor, g_object_new (CLUTTER_TYPE_ACTOR,
 | 
			
		||||
                                                "name", "foo"));
 | 
			
		||||
                                                "name", "foo",
 | 
			
		||||
                                                NULL));
 | 
			
		||||
 | 
			
		||||
  clutter_actor_replace_child (actor, iter,
 | 
			
		||||
                               g_object_new (CLUTTER_TYPE_ACTOR,
 | 
			
		||||
 
 | 
			
		||||
@@ -81,6 +81,19 @@
 | 
			
		||||
#define GL_PURGED_CONTEXT_RESET_NV 0x92BB
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* These aren't defined in the GLES2 headers */
 | 
			
		||||
#ifndef GL_GUILTY_CONTEXT_RESET_ARB
 | 
			
		||||
#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef GL_INNOCENT_CONTEXT_RESET_ARB
 | 
			
		||||
#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef GL_UNKNOWN_CONTEXT_RESET_ARB
 | 
			
		||||
#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void _cogl_context_free (CoglContext *context);
 | 
			
		||||
 | 
			
		||||
COGL_OBJECT_DEFINE (Context, context);
 | 
			
		||||
 
 | 
			
		||||
@@ -1102,7 +1102,7 @@ upload_vertices (CoglJournal *journal,
 | 
			
		||||
 | 
			
		||||
  attribute_buffer = create_attribute_buffer (journal, needed_vbo_len * 4);
 | 
			
		||||
  buffer = COGL_BUFFER (attribute_buffer);
 | 
			
		||||
  cogl_buffer_set_update_hint (buffer, COGL_BUFFER_UPDATE_HINT_STATIC);
 | 
			
		||||
  cogl_buffer_set_update_hint (buffer, COGL_BUFFER_UPDATE_HINT_DYNAMIC);
 | 
			
		||||
 | 
			
		||||
  vout = _cogl_buffer_map_range_for_fill_or_fallback (buffer,
 | 
			
		||||
                                                      0, /* offset */
 | 
			
		||||
 
 | 
			
		||||
@@ -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___ */
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -198,6 +198,7 @@ struct _CoglTextureDriver
 | 
			
		||||
  CoglPixelFormat
 | 
			
		||||
  (* find_best_gl_get_data_format) (CoglContext     *context,
 | 
			
		||||
                                    CoglPixelFormat format,
 | 
			
		||||
                                    CoglPixelFormat target_format,
 | 
			
		||||
                                    GLenum *closest_gl_format,
 | 
			
		||||
                                    GLenum *closest_gl_type);
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
@@ -1059,6 +780,7 @@ cogl_texture_get_data (CoglTexture *texture,
 | 
			
		||||
 | 
			
		||||
  closest_format =
 | 
			
		||||
    ctx->texture_driver->find_best_gl_get_data_format (ctx,
 | 
			
		||||
                                                       texture_format,
 | 
			
		||||
                                                       format,
 | 
			
		||||
                                                       &closest_gl_format,
 | 
			
		||||
                                                       &closest_gl_type);
 | 
			
		||||
@@ -1155,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
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1417,15 +1417,17 @@ _cogl_framebuffer_gl_read_pixels_into_bitmap (CoglFramebuffer *framebuffer,
 | 
			
		||||
                                                            &gl_intformat,
 | 
			
		||||
                                                            &gl_format,
 | 
			
		||||
                                                            &gl_type);
 | 
			
		||||
 | 
			
		||||
#if HAVE_COGL_GL
 | 
			
		||||
  /* 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 ||
 | 
			
		||||
  if ((ctx->driver == COGL_DRIVER_GL || ctx->driver == COGL_DRIVER_GL3) &&
 | 
			
		||||
      (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;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* NB: All offscreen rendering is done upside down so there is no need
 | 
			
		||||
   * to flip in this case... */
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,11 @@
 | 
			
		||||
#include "cogl-gl-header.h"
 | 
			
		||||
#include "cogl-texture.h"
 | 
			
		||||
 | 
			
		||||
/* In OpenGL ES context, GL_CONTEXT_LOST has a _KHR prefix */
 | 
			
		||||
#ifndef GL_CONTEXT_LOST
 | 
			
		||||
#define GL_CONTEXT_LOST GL_CONTEXT_LOST_KHR
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef COGL_GL_DEBUG
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
 
 | 
			
		||||
@@ -533,14 +533,16 @@ static CoglPixelFormat
 | 
			
		||||
_cogl_texture_driver_find_best_gl_get_data_format
 | 
			
		||||
                                            (CoglContext *context,
 | 
			
		||||
                                             CoglPixelFormat format,
 | 
			
		||||
                                             CoglPixelFormat target_format,
 | 
			
		||||
                                             GLenum *closest_gl_format,
 | 
			
		||||
                                             GLenum *closest_gl_type)
 | 
			
		||||
{
 | 
			
		||||
  return context->driver_vtable->pixel_format_to_gl (context,
 | 
			
		||||
                                                     format,
 | 
			
		||||
                                                     NULL, /* don't need */
 | 
			
		||||
                                                     closest_gl_format,
 | 
			
		||||
                                                     closest_gl_type);
 | 
			
		||||
  return context->driver_vtable->pixel_format_to_gl_with_target (context,
 | 
			
		||||
                                                                 format,
 | 
			
		||||
                                                                 target_format,
 | 
			
		||||
                                                                 NULL, /* don't need */
 | 
			
		||||
                                                                 closest_gl_format,
 | 
			
		||||
                                                                 closest_gl_type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const CoglTextureDriver
 | 
			
		||||
 
 | 
			
		||||
@@ -615,6 +615,7 @@ static CoglPixelFormat
 | 
			
		||||
_cogl_texture_driver_find_best_gl_get_data_format
 | 
			
		||||
                                            (CoglContext *context,
 | 
			
		||||
                                             CoglPixelFormat format,
 | 
			
		||||
                                             CoglPixelFormat target_format,
 | 
			
		||||
                                             GLenum *closest_gl_format,
 | 
			
		||||
                                             GLenum *closest_gl_type)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								configure.ac
									
									
									
									
									
								
							@@ -1,15 +1,15 @@
 | 
			
		||||
AC_PREREQ(2.62)
 | 
			
		||||
 | 
			
		||||
m4_define([mutter_major_version], [3])
 | 
			
		||||
m4_define([mutter_minor_version], [24])
 | 
			
		||||
m4_define([mutter_micro_version], [0])
 | 
			
		||||
m4_define([mutter_minor_version], [27])
 | 
			
		||||
m4_define([mutter_micro_version], [91])
 | 
			
		||||
 | 
			
		||||
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], [0])
 | 
			
		||||
m4_define([libmutter_api_version], [1])
 | 
			
		||||
 | 
			
		||||
AC_INIT([mutter], [mutter_version],
 | 
			
		||||
        [http://bugzilla.gnome.org/enter_bug.cgi?product=mutter])
 | 
			
		||||
@@ -57,6 +57,13 @@ AM_GNU_GETTEXT([external])
 | 
			
		||||
 | 
			
		||||
LT_PREREQ([2.2.6])
 | 
			
		||||
LT_INIT([disable-static])
 | 
			
		||||
 | 
			
		||||
# Debian / Ubuntu set this flag to 'no' in libtool, causing linking errors
 | 
			
		||||
# (i.e when linking against mutter-clutter). Not to explicitly redefine such
 | 
			
		||||
# deps, we enable this flag for everybody.
 | 
			
		||||
link_all_deplibs=yes
 | 
			
		||||
link_all_deplibs_CXX=yes
 | 
			
		||||
 | 
			
		||||
AC_PROG_CC
 | 
			
		||||
AC_PROG_CC_C_O
 | 
			
		||||
AC_PROG_INSTALL
 | 
			
		||||
@@ -65,7 +72,7 @@ AC_HEADER_STDC
 | 
			
		||||
PKG_PROG_PKG_CONFIG([0.21])
 | 
			
		||||
 | 
			
		||||
# Sets GLIB_GENMARSHAL and GLIB_MKENUMS
 | 
			
		||||
AM_PATH_GLIB_2_0([2.49.0])
 | 
			
		||||
AM_PATH_GLIB_2_0([2.53.2])
 | 
			
		||||
 | 
			
		||||
CANBERRA_GTK=libcanberra-gtk3
 | 
			
		||||
CANBERRA_GTK_VERSION=0.26
 | 
			
		||||
@@ -73,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
 | 
			
		||||
@@ -97,6 +105,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
 | 
			
		||||
 | 
			
		||||
@@ -218,10 +227,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)
 | 
			
		||||
@@ -231,6 +240,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.1 >= 0.1.8"
 | 
			
		||||
  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])
 | 
			
		||||
 | 
			
		||||
@@ -243,7 +262,7 @@ 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"
 | 
			
		||||
MUTTER_NATIVE_BACKEND_MODULES="libdrm >= 2.4.83 libsystemd libinput >= 1.4 gudev-1.0 gbm >= 17.1"
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE(native-backend,
 | 
			
		||||
  AS_HELP_STRING([--disable-native-backend], [disable mutter native (KMS) backend]),,
 | 
			
		||||
@@ -260,15 +279,14 @@ AS_IF([test "$have_native_backend" = "yes"], [
 | 
			
		||||
AM_CONDITIONAL([HAVE_NATIVE_BACKEND],[test "$have_native_backend" = "yes"])
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
)
 | 
			
		||||
AS_IF([test "$enable_egl_device" = "yes"], [
 | 
			
		||||
  AC_DEFINE([HAVE_EGL_DEVICE],[1], [Defined if EGLDevice support is enabled])
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
MUTTER_WAYLAND_MODULES="wayland-server >= 1.6.90"
 | 
			
		||||
MUTTER_WAYLAND_MODULES="wayland-server >= 1.13.0"
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE(wayland,
 | 
			
		||||
  AS_HELP_STRING([--disable-wayland], [disable mutter on wayland support]),,
 | 
			
		||||
@@ -285,12 +303,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.7],
 | 
			
		||||
  PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.10],
 | 
			
		||||
		    [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]))
 | 
			
		||||
 | 
			
		||||
@@ -506,6 +539,7 @@ mutter-$VERSION
 | 
			
		||||
	Wayland:                  ${have_wayland}
 | 
			
		||||
	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>
 | 
			
		||||
@@ -102,6 +102,31 @@
 | 
			
		||||
      </description>
 | 
			
		||||
    </key>
 | 
			
		||||
 | 
			
		||||
    <key name="experimental-features" type="as">
 | 
			
		||||
      <default>[]</default>
 | 
			
		||||
      <summary>Enable experimental features</summary>
 | 
			
		||||
      <description>
 | 
			
		||||
        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.
 | 
			
		||||
      </description>
 | 
			
		||||
    </key>
 | 
			
		||||
 | 
			
		||||
    <child name="keybindings" schema="org.gnome.mutter.keybindings"/>
 | 
			
		||||
 | 
			
		||||
  </schema>
 | 
			
		||||
@@ -125,5 +150,15 @@
 | 
			
		||||
      <summary>Cancel tab popup</summary>
 | 
			
		||||
    </key>
 | 
			
		||||
 | 
			
		||||
    <key name="switch-monitor" type="as">
 | 
			
		||||
      <default><![CDATA[['<Super>p','XF86Display']]]></default>
 | 
			
		||||
      <summary>Switch monitor configurations</summary>
 | 
			
		||||
    </key>
 | 
			
		||||
 | 
			
		||||
    <key name="rotate-monitor" type="as">
 | 
			
		||||
      <default><![CDATA[['XF86RotateWindows']]]></default>
 | 
			
		||||
      <summary>Rotates the built-in monitor configuration</summary>
 | 
			
		||||
    </key>
 | 
			
		||||
 | 
			
		||||
  </schema>
 | 
			
		||||
</schemalist>
 | 
			
		||||
 
 | 
			
		||||
@@ -49,5 +49,53 @@
 | 
			
		||||
      <default><![CDATA[['<Primary><Alt>F12']]]></default>
 | 
			
		||||
      <summary>Switch to VT 12</summary>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="restore-shortcuts" type="as">
 | 
			
		||||
      <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>
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -12,11 +13,11 @@ src/compositor/compositor.c
 | 
			
		||||
src/compositor/meta-background.c
 | 
			
		||||
src/core/bell.c
 | 
			
		||||
src/core/core.c
 | 
			
		||||
src/core/delete.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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										822
									
								
								po/ar.po
									
									
									
									
									
								
							
							
						
						
									
										822
									
								
								po/ar.po
									
									
									
									
									
								
							@@ -4,14 +4,15 @@
 | 
			
		||||
# Arafat Medini <lumina@silverpen.de>, 2003.
 | 
			
		||||
# Abdulaziz Al-Arfaj <alarfaj0@yahoo.com>, 2004.
 | 
			
		||||
# Djihed Afifi <djihed@gmail.com>, 2006.
 | 
			
		||||
# Khaled Hosny <khaledhosny@eglug.org>, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015.
 | 
			
		||||
# Khaled Hosny <khaledhosny@eglug.org>, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017.
 | 
			
		||||
# Anas Afif Emad <anas.e87@gmail.com>, 2008.
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity.HEAD\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-23 21:38+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-23 21:45+0200\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&"
 | 
			
		||||
"keywords=I18N+L10N&component=general\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"
 | 
			
		||||
@@ -20,524 +21,130 @@ msgstr ""
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
 | 
			
		||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
 | 
			
		||||
"X-Generator: Virtaal 0.7.1\n"
 | 
			
		||||
"X-Generator: Virtaal 1.0.0-beta1\n"
 | 
			
		||||
"X-Project-Style: gnome\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
msgstr "الإبحار"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:2
 | 
			
		||||
msgid "Move window to workspace 1"
 | 
			
		||||
msgstr "انقل النافذة إلى مساحة العمل 1"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:3
 | 
			
		||||
msgid "Move window to workspace 2"
 | 
			
		||||
msgstr "انقل النافذة إلى مساحة العمل 2"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:4
 | 
			
		||||
msgid "Move window to workspace 3"
 | 
			
		||||
msgstr "انقل النافذة إلى مساحة العمل 3"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:5
 | 
			
		||||
msgid "Move window to workspace 4"
 | 
			
		||||
msgstr "انقل النافذة إلى مساحة العمل 4"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:6
 | 
			
		||||
msgid "Move window to last workspace"
 | 
			
		||||
msgstr "انقل النافذة إلى مساحة العمل الأخيرة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:7
 | 
			
		||||
msgid "Move window one workspace to the left"
 | 
			
		||||
msgstr "انقل النافذة مساحة عمل واحدة إلى اليسار"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:8
 | 
			
		||||
msgid "Move window one workspace to the right"
 | 
			
		||||
msgstr "انقل النافذة مساحة عمل واحدة إلى اليمين"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:9
 | 
			
		||||
msgid "Move window one workspace up"
 | 
			
		||||
msgstr "انقل النافذة مساحة عمل واحدة إلى الأعلى"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:10
 | 
			
		||||
msgid "Move window one workspace down"
 | 
			
		||||
msgstr "انقل النافذة مساحة عمل واحدة إلى الأسفل"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:11
 | 
			
		||||
msgid "Move window one monitor to the left"
 | 
			
		||||
msgstr "انقل النافذة شاشة واحدة إلى اليسار"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:12
 | 
			
		||||
msgid "Move window one monitor to the right"
 | 
			
		||||
msgstr "انقل النافذة شاشة واحدة إلى اليمين"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:13
 | 
			
		||||
msgid "Move window one monitor up"
 | 
			
		||||
msgstr "انقل النافذة شاشة واحدة إلى الأعلى"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:14
 | 
			
		||||
msgid "Move window one monitor down"
 | 
			
		||||
msgstr "انقل النافذة شاشة واحدة إلى الأسفل"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:15
 | 
			
		||||
msgid "Switch applications"
 | 
			
		||||
msgstr "تنقل بين التطبيقات"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:16
 | 
			
		||||
msgid "Switch to previous application"
 | 
			
		||||
msgstr "انتقل إلى التطبيق السابق"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:17
 | 
			
		||||
msgid "Switch windows"
 | 
			
		||||
msgstr "تنقل بين النوافذ"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:18
 | 
			
		||||
msgid "Switch to previous window"
 | 
			
		||||
msgstr "انتقل إلى النافذة السابقة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:19
 | 
			
		||||
msgid "Switch windows of an application"
 | 
			
		||||
msgstr "تنقل بين نوافذ التطبيق"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:20
 | 
			
		||||
msgid "Switch to previous window of an application"
 | 
			
		||||
msgstr "انتقل إلى نافذة التطبيق السابقة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:21
 | 
			
		||||
msgid "Switch system controls"
 | 
			
		||||
msgstr "تنقل بين تحكمات النظام"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:22
 | 
			
		||||
msgid "Switch to previous system control"
 | 
			
		||||
msgstr "انتقل إلى تحكم النظام السابق"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:23
 | 
			
		||||
msgid "Switch windows directly"
 | 
			
		||||
msgstr "تنقل مباشرة بين النوافذ"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:24
 | 
			
		||||
msgid "Switch directly to previous window"
 | 
			
		||||
msgstr "انتقل مباشرة إلى النافذة السابقة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:25
 | 
			
		||||
msgid "Switch windows of an app directly"
 | 
			
		||||
msgstr "تنقل مباشرة بين نوافذ التطبيق"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:26
 | 
			
		||||
msgid "Switch directly to previous window of an app"
 | 
			
		||||
msgstr "انتقل مباشرة إلى نافذة التطبيق السابقة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:27
 | 
			
		||||
msgid "Switch system controls directly"
 | 
			
		||||
msgstr "تنقل مباشرة بين تحكمات النظام"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:28
 | 
			
		||||
msgid "Switch directly to previous system control"
 | 
			
		||||
msgstr "انتقل مباشرة إلى تحكم النظام السابق"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:29
 | 
			
		||||
msgid "Hide all normal windows"
 | 
			
		||||
msgstr "أخفِ كل النوافذ العادية"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:30
 | 
			
		||||
msgid "Switch to workspace 1"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 1"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:31
 | 
			
		||||
msgid "Switch to workspace 2"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 2"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:32
 | 
			
		||||
msgid "Switch to workspace 3"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 3"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:33
 | 
			
		||||
msgid "Switch to workspace 4"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 4"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:34
 | 
			
		||||
msgid "Switch to last workspace"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل الأخيرة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:35
 | 
			
		||||
msgid "Move to workspace left"
 | 
			
		||||
msgstr "انقل لمساحة العمل على اليسار"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:36
 | 
			
		||||
msgid "Move to workspace right"
 | 
			
		||||
msgstr "انقل لمساحة العمل على اليمين"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:37
 | 
			
		||||
msgid "Move to workspace above"
 | 
			
		||||
msgstr "انقل لمساحة العمل أعلى"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:38
 | 
			
		||||
msgid "Move to workspace below"
 | 
			
		||||
msgstr "انقل لمساحة العمل أسفل"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-system.xml.in.h:1
 | 
			
		||||
msgid "System"
 | 
			
		||||
msgstr "النظام"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-system.xml.in.h:2
 | 
			
		||||
msgid "Show the run command prompt"
 | 
			
		||||
msgstr "أظهر محث تشغيل أمر"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-system.xml.in.h:3
 | 
			
		||||
msgid "Show the activities overview"
 | 
			
		||||
msgstr "أظهر نظرة عامة على الأنشطة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:1
 | 
			
		||||
msgid "Windows"
 | 
			
		||||
msgstr "النوافذ"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:2
 | 
			
		||||
msgid "Activate the window menu"
 | 
			
		||||
msgstr "فعّل قائمة النافذة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:3
 | 
			
		||||
msgid "Toggle fullscreen mode"
 | 
			
		||||
msgstr "بدّل نمط ملء الشاشة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:4
 | 
			
		||||
msgid "Toggle maximization state"
 | 
			
		||||
msgstr "بدّل حالة التكبير"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:5
 | 
			
		||||
msgid "Maximize window"
 | 
			
		||||
msgstr "كبّر النّافذة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:6
 | 
			
		||||
msgid "Restore window"
 | 
			
		||||
msgstr "استعد النّافذة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:7
 | 
			
		||||
msgid "Toggle shaded state"
 | 
			
		||||
msgstr "بدّل حالة الإخفاء"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:8
 | 
			
		||||
msgid "Close window"
 | 
			
		||||
msgstr "أغلق النّافذة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:9
 | 
			
		||||
msgid "Hide window"
 | 
			
		||||
msgstr "أخفِ النّافذة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:10
 | 
			
		||||
msgid "Move window"
 | 
			
		||||
msgstr "انقل النّافذة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:11
 | 
			
		||||
msgid "Resize window"
 | 
			
		||||
msgstr "حجّم النّافذة"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:12
 | 
			
		||||
msgid "Toggle window on all workspaces or one"
 | 
			
		||||
msgstr "بدّل حالة ظهور النافذة على جميع مساحات العمل أو واحدة منها"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:13
 | 
			
		||||
msgid "Raise window if covered, otherwise lower it"
 | 
			
		||||
msgstr "ارفع النافذة إذا كانت أخرى تغطيها، أو أخفضها في ما عدا ذلك"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:14
 | 
			
		||||
msgid "Raise window above other windows"
 | 
			
		||||
msgstr "ارفع النافذة فوق النوافذ الأخرى"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:15
 | 
			
		||||
msgid "Lower window below other windows"
 | 
			
		||||
msgstr "اخفض النافذة تحت النوافذ الأخرى"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:16
 | 
			
		||||
msgid "Maximize window vertically"
 | 
			
		||||
msgstr "كبّر النافذة رأسيا"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:17
 | 
			
		||||
msgid "Maximize window horizontally"
 | 
			
		||||
msgstr "كبّر النافذة أفقيا"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:18
 | 
			
		||||
msgid "View split on left"
 | 
			
		||||
msgstr "المنظور مقسوم على اليمين"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:19
 | 
			
		||||
msgid "View split on right"
 | 
			
		||||
msgstr "المنظور مقسوم على اليسار"
 | 
			
		||||
 | 
			
		||||
#: ../data/mutter.desktop.in.h:1
 | 
			
		||||
msgid "Mutter"
 | 
			
		||||
msgstr "مَتَر"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
 | 
			
		||||
msgid "Modifier to use for extended window management operations"
 | 
			
		||||
msgstr "المغير الذي سيُستعمل لتمديد عمليات إدارة النوافذ "
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
 | 
			
		||||
msgid ""
 | 
			
		||||
"This key will initiate the \"overlay\", which is a combination window "
 | 
			
		||||
"overview and application launching system. The default is intended to be the "
 | 
			
		||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
 | 
			
		||||
"default or set to the empty string."
 | 
			
		||||
#. TRANSLATORS: This string refers to a button that switches between
 | 
			
		||||
#. * different modes.
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-input-settings.c:2167
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
 | 
			
		||||
msgid "Attach modal dialogs"
 | 
			
		||||
msgstr ""
 | 
			
		||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
 | 
			
		||||
#. * mapping through the available outputs.
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-input-settings.c:2190
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "غيّر الشاشة"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
 | 
			
		||||
msgid ""
 | 
			
		||||
"When true, instead of having independent titlebars, modal dialogs appear "
 | 
			
		||||
"attached to the titlebar of the parent window and are moved together with "
 | 
			
		||||
"the parent window."
 | 
			
		||||
msgstr ""
 | 
			
		||||
#: ../src/backends/meta-input-settings.c:2192
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "اعرض المساعدة على الشاشة"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
 | 
			
		||||
msgid "Enable edge tiling when dropping windows on screen edges"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
 | 
			
		||||
msgid ""
 | 
			
		||||
"If enabled, dropping windows on vertical screen edges maximizes them "
 | 
			
		||||
"vertically and resizes them horizontally to cover half of the available "
 | 
			
		||||
"area. Dropping windows on the top screen edge maximizes them completely."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
 | 
			
		||||
msgid "Workspaces are managed dynamically"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether workspaces are managed dynamically or whether there's a "
 | 
			
		||||
"static number of workspaces (determined by the num-workspaces key in org."
 | 
			
		||||
"gnome.desktop.wm.preferences)."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
 | 
			
		||||
msgid "Workspaces only on primary"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether workspace switching should happen for windows on all "
 | 
			
		||||
"monitors or only for windows on the primary monitor."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
 | 
			
		||||
msgid "No tab popup"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether the use of popup and highlight frame should be disabled "
 | 
			
		||||
"for window cycling."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
 | 
			
		||||
msgid "Delay focus changes until the pointer stops moving"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
 | 
			
		||||
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.h:15
 | 
			
		||||
msgid "Draggable border width"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
 | 
			
		||||
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.h:17
 | 
			
		||||
msgid "Auto maximize nearly monitor sized windows"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
 | 
			
		||||
msgid ""
 | 
			
		||||
"If enabled, new windows that are initially the size of the monitor "
 | 
			
		||||
"automatically get maximized."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:19
 | 
			
		||||
msgid "Place new windows in the center"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
 | 
			
		||||
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
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:22
 | 
			
		||||
msgid "Cancel tab popup"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 1"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 1"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 2"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 2"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 3"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 3"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 4"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 4"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 5"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 5"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 6"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 6"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 7"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 7"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 8"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 9"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 10"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 11"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "انتقل إلى مساحة العمل 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
#: ../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 "غير معروفة"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
#: ../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: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
 | 
			
		||||
#: ../src/compositor/compositor.c:476
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display \"%s"
 | 
			
		||||
"\"."
 | 
			
		||||
msgstr "يعمل مدير مزج آخر على الشاشة %i والعرض \"%s\"."
 | 
			
		||||
"Another compositing manager is already running on screen %i on display “%s”."
 | 
			
		||||
msgstr "يعمل مدير مزج آخر على الشاشة %i و العرض ”%s“."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
#: ../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 "فشل فتح عرض نظام نوافذ إكس ”%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 "معراض س الذي سيستعمل"
 | 
			
		||||
 | 
			
		||||
#: ../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 "”%s“ لا يستجيب."
 | 
			
		||||
 | 
			
		||||
#: ../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 "ا_نتظر"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/delete.c:141
 | 
			
		||||
#: ../src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "أ_جبر الإنهاء"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "فشل فتح عرض نظام نوافذ إكس '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "عطّل الاتصال بمدير الجلسة"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "استبدل بمدير النوافذ الذي يعمل"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "حدّد رقم هويّة إدارة الجلسة"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "معراض س الذي سيستعمل"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "ابدأ الجلسة من ملف محفوظ"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "اجعل نداءات س متزامنة"
 | 
			
		||||
 | 
			
		||||
#: ../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/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "ا_نتظر"
 | 
			
		||||
 | 
			
		||||
#: ../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"
 | 
			
		||||
@@ -555,42 +162,281 @@ msgstr "اطبع الإصدارة"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "ملحق مَتَر الذي سيُستخدم"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "مساحة العمل %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#: ../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 ""
 | 
			
		||||
"الشاشة \"%s\" لها مدير نوافذ بالفعل، حاول استعمال خيار التبديل --replace "
 | 
			
		||||
"لتحُلّ محلّ مدير النوافذ الحالي."
 | 
			
		||||
"الشاشة ”%s“ لها مدير نوافذ بالفعل، حاول استعمال خيار التبديل --replace لتحُلّ"
 | 
			
		||||
" محلّ مدير النوافذ الحالي."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#: ../src/core/screen.c:668
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "الشاشة %d على العرض '%s' غير صحيحة\n"
 | 
			
		||||
msgid "Screen %d on display “%s” is invalid\n"
 | 
			
		||||
msgstr "الشاشة %d على العرض ”%s“ غير صحيحة\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
#: ../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
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch: Mode %d"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../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 (على %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"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										116
									
								
								po/be.po
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								po/be.po
									
									
									
									
									
								
							@@ -5,8 +5,8 @@ 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-02-28 06:20+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2017-03-27 18:08+0300\n"
 | 
			
		||||
"POT-Creation-Date: 2017-08-29 16:09+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2017-09-01 18:44+0300\n"
 | 
			
		||||
"Last-Translator: Yuras Shumovich <shumovichy@gmail.com>\n"
 | 
			
		||||
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
 | 
			
		||||
"Language: be\n"
 | 
			
		||||
@@ -396,14 +396,52 @@ msgstr ""
 | 
			
		||||
"Калі ўключана, новыя вокны будуць заўсёды з'яўляцца пасярэдзіне дзейнага "
 | 
			
		||||
"манітора."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:120
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"Каб уключыць эксперыментальныя функцыі, дадайце адпаведнае ключавое слова ў "
 | 
			
		||||
"гэты ліст. Некаторыя функцыі могуць патрабаваць перазапуску кампазітара. "
 | 
			
		||||
"Эксперыментальны функцыі могуць быць недаступныя. Не чакайце, што функцыі, "
 | 
			
		||||
"дададзеныя ў гэты спіс, будуць працаваць і далей. Магчымыя ключавыя словы: • "
 | 
			
		||||
"\"scale-monitor-framebuffer\" - прымушае mutter прадвызначана размяшчаць "
 | 
			
		||||
"лагічныя маніторы ў лагічнай прасторы каардынат пікселаў, пры гэтым "
 | 
			
		||||
"маштабаваць кадравы буфер, а не змесціва акна, для падтрымкі HiDPI "
 | 
			
		||||
"манітораў. Не патрабуе перазапуску. • \"remote-desktop\" - уключае падтрымку "
 | 
			
		||||
"аддаленых манітораў. Для падтрымкі аддаленых манітораў з супольным доступам "
 | 
			
		||||
"да экрана трэба таксама ўключыць \"screen-cast\". • \"screen-cast\" - "
 | 
			
		||||
"уключае падтрымку скрынкасту."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:145
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
msgstr "Выбраць акно з выплыўнога акенца"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:125
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:150
 | 
			
		||||
msgid "Cancel tab popup"
 | 
			
		||||
msgstr "Закрыць выплыўное акенца"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:155
 | 
			
		||||
msgid "Switch monitor configurations"
 | 
			
		||||
msgstr "Пераключыць канфігурацыі манітора"
 | 
			
		||||
 | 
			
		||||
#: 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 "Перайсці ў віртуальны тэрмінал 1"
 | 
			
		||||
@@ -452,10 +490,14 @@ msgstr "Перайсці ў віртуальны тэрмінал 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Перайсці ў віртуальны тэрмінал 12"
 | 
			
		||||
 | 
			
		||||
#: 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:1800
 | 
			
		||||
#: src/backends/meta-input-settings.c:2151
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr "Пераключыць рэжым (група %d)"
 | 
			
		||||
@@ -463,37 +505,37 @@ msgstr "Пераключыць рэжым (група %d)"
 | 
			
		||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
 | 
			
		||||
#. * mapping through the available outputs.
 | 
			
		||||
#.
 | 
			
		||||
#: src/backends/meta-input-settings.c:1822
 | 
			
		||||
#: src/backends/meta-input-settings.c:2174
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "Пераключыць манітор"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:1824
 | 
			
		||||
#: src/backends/meta-input-settings.c:2176
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "Паказаць экранную даведку"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:675
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:903
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Убудаваны дысплей"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:698
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:926
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Невядомы"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:700
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:928
 | 
			
		||||
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: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”."
 | 
			
		||||
@@ -504,31 +546,6 @@ msgstr ""
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Падзея з сігналам"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: src/core/delete.c:127
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "\"%s\" не адказвае на запыты."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:129
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "Праграма не адказвае на запыты."
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"Вы можаце альбо крыху пачакаць адказу, альбо змусіць праграму да выхаду."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Змусіць да выхаду"
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "_Пачакаць"
 | 
			
		||||
 | 
			
		||||
#: src/core/display.c:608
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display “%s”\n"
 | 
			
		||||
@@ -570,6 +587,31 @@ msgstr "Запусціць у якасці ўложанага кампазіта
 | 
			
		||||
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\" не адказвае на запыты."
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:149
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "Праграма не адказвае на запыты."
 | 
			
		||||
 | 
			
		||||
#: 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
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Змусіць да выхаду"
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "_Пачакаць"
 | 
			
		||||
 | 
			
		||||
#: src/core/mutter.c:39
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1663
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
							
						
						
									
										1663
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										139
									
								
								po/cs.po
									
									
									
									
									
								
							
							
						
						
									
										139
									
								
								po/cs.po
									
									
									
									
									
								
							@@ -13,8 +13,8 @@ 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-03-07 12:40+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2017-03-09 07:51+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2017-11-10 18:16+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2017-11-15 13:31+0100\n"
 | 
			
		||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
 | 
			
		||||
"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
 | 
			
		||||
"Language: cs\n"
 | 
			
		||||
@@ -177,7 +177,7 @@ msgstr "Přesunout na plochu nad"
 | 
			
		||||
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 +189,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"
 | 
			
		||||
@@ -361,9 +365,8 @@ msgid ""
 | 
			
		||||
"focus will not be changed immediately when entering a window, but only after "
 | 
			
		||||
"the pointer stops moving."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Je-li zapnuto a režim zaměření je buď „sloppy“ nebo „mouse“, pak se "
 | 
			
		||||
"zaměření nezmění hned, když vstoupíte do kona, ale až se přestane pohybovat "
 | 
			
		||||
"ukazatel."
 | 
			
		||||
"Je-li zapnuto a režim zaměření je buď „sloppy“ nebo „mouse“, pak se zaměření "
 | 
			
		||||
"nezmění hned, když vstoupíte do kona, ale až se přestane pohybovat ukazatel."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:79
 | 
			
		||||
msgid "Draggable border width"
 | 
			
		||||
@@ -401,14 +404,53 @@ msgstr ""
 | 
			
		||||
"Je-li zapnuto, nová okna budou vždy umístěna ve středu aktivní obrazovky "
 | 
			
		||||
"monitoru."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:120
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:107
 | 
			
		||||
msgid "Enable experimental features"
 | 
			
		||||
msgstr "Povolit experimentální funkce"
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"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: • „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. • „remote-desktop“ – zapne podporu pro vzdálenou pracovní plochu. "
 | 
			
		||||
"Pro podporu vzdálené plochy se sdílením obrazovky musít být zapnuto také "
 | 
			
		||||
"„screen-cast“. • „screen-cast“ – zapne podporu pro vysílání obsahu obrazovky."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:145
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
msgstr "Vybrat okno z překryvné nabídky tabulátoru"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:125
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:150
 | 
			
		||||
msgid "Cancel tab popup"
 | 
			
		||||
msgstr "Zrušit překryvné okno tabulátoru"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:155
 | 
			
		||||
msgid "Switch monitor configurations"
 | 
			
		||||
msgstr "Přepnout nastavení monitoru"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:160
 | 
			
		||||
msgid "Rotates the built-in monitor configuration"
 | 
			
		||||
msgstr "Postupně mění vestavěná nastavení monitoru"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
 | 
			
		||||
msgid "Switch to VT 1"
 | 
			
		||||
msgstr "Přepnout na VT 1"
 | 
			
		||||
@@ -457,10 +499,14 @@ msgstr "Přepnout na VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Přepnout na VT 12"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
 | 
			
		||||
msgid "Re-enable shortcuts"
 | 
			
		||||
msgstr "Znovu povolit klávesové zkratky"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: This string refers to a button that switches between
 | 
			
		||||
#. * different modes.
 | 
			
		||||
#.
 | 
			
		||||
#: src/backends/meta-input-settings.c:1800
 | 
			
		||||
#: src/backends/meta-input-settings.c:2167
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr "Přepínač režimu (skupina %d)"
 | 
			
		||||
@@ -468,37 +514,37 @@ 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:1822
 | 
			
		||||
#: src/backends/meta-input-settings.c:2190
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "Přepnout monitor"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:1824
 | 
			
		||||
#: src/backends/meta-input-settings.c:2192
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "Zobrazit nápovědu na obrazovce"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:675
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:900
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Vestavěný displej"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:698
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:923
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Neznámý"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:700
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:925
 | 
			
		||||
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:708
 | 
			
		||||
#: 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:474
 | 
			
		||||
#: src/compositor/compositor.c:476
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display “%s”."
 | 
			
		||||
@@ -508,32 +554,6 @@ msgstr "Jiný kompozitní správce již běží na obrazovce %i displeje „%s
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Událost zvonku"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: src/core/delete.c:127
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "„%s“ nereaguje."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:129
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "Aplikace nereaguje."
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"Je možné chvíli počkat, aby aplikace mohla pokračovat, nebo si vynutit úplné "
 | 
			
		||||
"ukončení aplikace."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Vynutit ukončení"
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "_Počkat"
 | 
			
		||||
 | 
			
		||||
#: src/core/display.c:608
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display “%s”\n"
 | 
			
		||||
@@ -575,6 +595,32 @@ msgstr "Spustit jako podkladový kompozitor"
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Spustit jako plnohodnotný server displeje, nikoliv vnořeně"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:147
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "„%s“ nereaguje."
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:149
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "Aplikace nereaguje."
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"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
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Vynutit ukončení"
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "_Počkat"
 | 
			
		||||
 | 
			
		||||
#: src/core/mutter.c:39
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
@@ -604,7 +650,7 @@ msgstr "Zásuvný modul Mutter, který se má použít"
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Plocha %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 "
 | 
			
		||||
@@ -613,7 +659,7 @@ 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/core/screen.c:668
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display “%s” is invalid\n"
 | 
			
		||||
msgstr "Obrazovka %d na displeji „%s“ je neplatná\n"
 | 
			
		||||
@@ -632,11 +678,10 @@ msgid ""
 | 
			
		||||
"These windows do not support “save current setup” and will have to be "
 | 
			
		||||
"restarted manually next time you log in."
 | 
			
		||||
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ě."
 | 
			
		||||
"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
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s (on %s)"
 | 
			
		||||
msgstr "%s (na %s)"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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)"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										179
									
								
								po/es.po
									
									
									
									
									
								
							
							
						
						
									
										179
									
								
								po/es.po
									
									
									
									
									
								
							@@ -12,10 +12,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-17 11:38+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2017-11-17 16:03+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2017-12-14 13:02+0100\n"
 | 
			
		||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
 | 
			
		||||
"Language-Team: es <gnome-es-list@gnome.org>\n"
 | 
			
		||||
"Language: es\n"
 | 
			
		||||
@@ -177,7 +177,7 @@ msgstr "Mover al área de trabajo de la arriba"
 | 
			
		||||
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 +189,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"
 | 
			
		||||
@@ -275,11 +279,6 @@ msgstr ""
 | 
			
		||||
"Modificador que usar para extender las operaciones de gestión sobre ventanas"
 | 
			
		||||
 | 
			
		||||
#: 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 "
 | 
			
		||||
@@ -328,10 +327,6 @@ msgid "Workspaces are managed dynamically"
 | 
			
		||||
msgstr "Las áreas de trabajo se gestionan dinámicamente"
 | 
			
		||||
 | 
			
		||||
#: 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."
 | 
			
		||||
@@ -370,10 +365,6 @@ msgid "Delay focus changes until the pointer stops moving"
 | 
			
		||||
msgstr "Retrasar el cambio de foco hasta detener el puntero"
 | 
			
		||||
 | 
			
		||||
#: 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 "
 | 
			
		||||
@@ -388,9 +379,6 @@ msgid "Draggable border width"
 | 
			
		||||
msgstr "Anchura arrastrable del borde"
 | 
			
		||||
 | 
			
		||||
#: 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."
 | 
			
		||||
@@ -425,14 +413,67 @@ msgstr ""
 | 
			
		||||
"Cuando es cierto, las ventanas nuevas se colocarán siempre en el centro de "
 | 
			
		||||
"la pantalla activa del monitor."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:120
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:107
 | 
			
		||||
msgid "Enable experimental features"
 | 
			
		||||
msgstr "Activar las características experimentales"
 | 
			
		||||
 | 
			
		||||
#: 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."
 | 
			
		||||
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 ""
 | 
			
		||||
"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: • \"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. • \"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:145
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
msgstr "Seleccionar ventana de la pestaña emergente"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:125
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:150
 | 
			
		||||
msgid "Cancel tab popup"
 | 
			
		||||
msgstr "Cancelar pestaña emergente"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:155
 | 
			
		||||
msgid "Switch monitor configurations"
 | 
			
		||||
msgstr "Cambiar la configuración del monitor"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:160
 | 
			
		||||
msgid "Rotates the built-in monitor configuration"
 | 
			
		||||
msgstr "Rota la configuración del monitor empotrado"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
 | 
			
		||||
msgid "Switch to VT 1"
 | 
			
		||||
msgstr "Cambiar al VT 1"
 | 
			
		||||
@@ -481,53 +522,53 @@ msgstr "Cambiar al VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Cambiar al VT 12"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
 | 
			
		||||
msgid "Re-enable shortcuts"
 | 
			
		||||
msgstr "Volver a activar los atajos"
 | 
			
		||||
 | 
			
		||||
#. 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:2260
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid "Mode Switch: Mode %d"
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
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:1781
 | 
			
		||||
#: src/backends/meta-input-settings.c:2283
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "Cambiar monitor"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:1783
 | 
			
		||||
#: src/backends/meta-input-settings.c:2285
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "Mostrar la ayuda en pantalla"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:675
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:900
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Pantalla integrada"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:698
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:923
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Desconocida"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:700
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:925
 | 
			
		||||
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:708
 | 
			
		||||
#: 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:471
 | 
			
		||||
#: src/compositor/compositor.c:479
 | 
			
		||||
#, 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 ""
 | 
			
		||||
@@ -538,35 +579,8 @@ msgstr ""
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Evento de campana"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: src/core/delete.c:127
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "«%s» no está respondiendo."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:129
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "La aplicación no está respondiendo."
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"Puede elegir esperar un rato para ver si continua o forzar la aplicación "
 | 
			
		||||
"para cerrarla completamente."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Forzar la salida"
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "_Esperar"
 | 
			
		||||
 | 
			
		||||
#: 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 "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
 | 
			
		||||
 | 
			
		||||
@@ -606,14 +620,34 @@ msgstr "Ejecutar como compositor anidado"
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Ejecutar como servidor completo, en lugar de anidado"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:147
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "«%s» no está respondiendo."
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:149
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "La aplicación no está respondiendo."
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"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
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Forzar la salida"
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "_Esperar"
 | 
			
		||||
 | 
			
		||||
#: 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"
 | 
			
		||||
@@ -641,11 +675,8 @@ msgstr "Complemento de mutter que usar"
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Área de trabajo %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 replace the current window manager."
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display “%s” already has a window manager; try using the --replace option to "
 | 
			
		||||
"replace the current window manager."
 | 
			
		||||
@@ -653,9 +684,8 @@ 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/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 "La ventana %d en la pantalla «%s» no es válida\n"
 | 
			
		||||
 | 
			
		||||
@@ -669,9 +699,6 @@ msgid "Mode Switch: Mode %d"
 | 
			
		||||
msgstr "Cambiar modo: modo %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."
 | 
			
		||||
msgid ""
 | 
			
		||||
"These windows do not support “save current setup” and will have to be "
 | 
			
		||||
"restarted manually next time you log in."
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										286
									
								
								po/fr.po
									
									
									
									
									
								
							
							
						
						
									
										286
									
								
								po/fr.po
									
									
									
									
									
								
							@@ -13,20 +13,24 @@
 | 
			
		||||
# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2007.
 | 
			
		||||
# Claude Paroz <claude@2xlibre.net>, 2008-2017.
 | 
			
		||||
# 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?"
 | 
			
		||||
"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-17 21:09+0100\n"
 | 
			
		||||
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
 | 
			
		||||
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
 | 
			
		||||
"POT-Creation-Date: 2017-11-10 18:18+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2017-11-10 23:07+0100\n"
 | 
			
		||||
"Last-Translator: Charles Monzat <superboa@hotmail.fr>\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"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.7\n"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:6
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -34,19 +38,19 @@ 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"
 | 
			
		||||
@@ -54,43 +58,43 @@ 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"
 | 
			
		||||
msgstr "Déplacer la fenêtre d’un espace de travail vers la gauche"
 | 
			
		||||
 | 
			
		||||
#: 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"
 | 
			
		||||
msgstr "Déplacer la fenêtre d’un espace de travail vers la droite"
 | 
			
		||||
 | 
			
		||||
#: 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"
 | 
			
		||||
msgstr "Déplacer la fenêtre d’un espace de travail vers le haut"
 | 
			
		||||
 | 
			
		||||
#: 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"
 | 
			
		||||
msgstr "Déplacer la fenêtre d’un espace de travail vers le bas"
 | 
			
		||||
 | 
			
		||||
#: 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"
 | 
			
		||||
msgstr "Déplacer la fenêtre d’un écran vers la gauche"
 | 
			
		||||
 | 
			
		||||
#: 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"
 | 
			
		||||
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"
 | 
			
		||||
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
 | 
			
		||||
msgid "Switch applications"
 | 
			
		||||
msgstr "Changer d'application"
 | 
			
		||||
msgstr "Changer d’application"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:54
 | 
			
		||||
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
 | 
			
		||||
msgid "Switch windows"
 | 
			
		||||
@@ -102,11 +106,11 @@ msgstr "Passer à la fenêtre précédente"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:67
 | 
			
		||||
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
 | 
			
		||||
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
 | 
			
		||||
msgid "Switch system controls"
 | 
			
		||||
@@ -126,11 +130,11 @@ msgstr "Passer directement à la fenêtre précédente"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:94
 | 
			
		||||
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
 | 
			
		||||
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
 | 
			
		||||
msgid "Switch system controls directly"
 | 
			
		||||
@@ -146,19 +150,19 @@ msgstr "Masquer toutes les fenêtres normales"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:114
 | 
			
		||||
msgid "Switch to workspace 1"
 | 
			
		||||
msgstr "Passer à l'espace de travail 1"
 | 
			
		||||
msgstr "Passer à l’espace de travail 1"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:117
 | 
			
		||||
msgid "Switch to workspace 2"
 | 
			
		||||
msgstr "Passer à l'espace de travail 2"
 | 
			
		||||
msgstr "Passer à l’espace de travail 2"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:120
 | 
			
		||||
msgid "Switch to workspace 3"
 | 
			
		||||
msgstr "Passer à l'espace de travail 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"
 | 
			
		||||
msgstr "Passer à l’espace de travail 4"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:126
 | 
			
		||||
msgid "Switch to last workspace"
 | 
			
		||||
@@ -166,21 +170,21 @@ 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"
 | 
			
		||||
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"
 | 
			
		||||
msgstr "Déplacer vers l’espace de travail de droite"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:135
 | 
			
		||||
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
 | 
			
		||||
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 +194,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 +214,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"
 | 
			
		||||
@@ -218,7 +226,7 @@ msgstr "Restaurer la fenêtre"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:18
 | 
			
		||||
msgid "Toggle shaded state"
 | 
			
		||||
msgstr "Basculer l'état de repli"
 | 
			
		||||
msgstr "Basculer l’état de repli"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:20
 | 
			
		||||
msgid "Close window"
 | 
			
		||||
@@ -243,7 +251,7 @@ msgstr "Placer la fenêtre sur tous les espaces de travail, ou sur un seul"
 | 
			
		||||
#: data/50-mutter-windows.xml:31
 | 
			
		||||
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
 | 
			
		||||
msgid "Raise window above other windows"
 | 
			
		||||
@@ -284,8 +292,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 +307,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 +321,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 +337,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 +362,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 +377,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 +388,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 +396,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 +416,114 @@ 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. • “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 ""
 | 
			
		||||
"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. • "
 | 
			
		||||
"« remote-desktop » — active la prise en charge du bureau à distance. Pour la "
 | 
			
		||||
"prise en charge du bureau distant avec partage de l’écran, « screen-cast » "
 | 
			
		||||
"doit aussi être activé. • « screen-cast »  — active la diffusion de l’écran. "
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:145
 | 
			
		||||
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:150
 | 
			
		||||
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:155
 | 
			
		||||
msgid "Switch monitor configurations"
 | 
			
		||||
msgstr "Changer de configuration de moniteur"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:160
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
#. 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:2167
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr "Changement de mode (groupe %d)"
 | 
			
		||||
@@ -479,78 +531,52 @@ 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:2190
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "Changer de moniteur"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:1783
 | 
			
		||||
#: src/backends/meta-input-settings.c:2192
 | 
			
		||||
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:908
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Affichage intégré"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:698
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:931
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Inconnu"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:700
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:933
 | 
			
		||||
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: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:476
 | 
			
		||||
#, 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
 | 
			
		||||
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"
 | 
			
		||||
msgstr "Impossible d’ouvrir l’affichage « %s » du système X Window\n"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:189
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
@@ -562,7 +588,7 @@ msgstr "Remplacer le gestionnaire de fenêtres en cours de fonctionnement"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:201
 | 
			
		||||
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
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
@@ -586,7 +612,33 @@ msgstr "Lancer comme un compositeur imbriqué"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:239
 | 
			
		||||
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é"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:147
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "« %s » ne répond pas."
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:149
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "L’application ne répond pas."
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"Vous pouvez patienter un instant pour continuer ou forcer l’application à "
 | 
			
		||||
"quitter définitivement."
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Forcer à quitter"
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "_Attendre"
 | 
			
		||||
 | 
			
		||||
#: src/core/mutter.c:39
 | 
			
		||||
#, c-format
 | 
			
		||||
@@ -601,8 +653,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"
 | 
			
		||||
@@ -617,19 +669,19 @@ msgstr "Greffon de Mutter à utiliser"
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Espace de travail %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 "
 | 
			
		||||
"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."
 | 
			
		||||
"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
 | 
			
		||||
#: src/core/screen.c:668
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display “%s” is invalid\n"
 | 
			
		||||
msgstr "L'écran %d sur l'affichage « %s » n'est pas valide\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"
 | 
			
		||||
@@ -645,7 +697,7 @@ 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."
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										612
									
								
								po/fur.po
									
									
									
									
									
								
							
							
						
						
									
										612
									
								
								po/fur.po
									
									
									
									
									
								
							@@ -6,17 +6,240 @@
 | 
			
		||||
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-02-22 19:28+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2017-02-24 16:31+0100\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2018-02-06 04:14+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2018-02-06 22:43+0100\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 1.8.11\n"
 | 
			
		||||
"X-Generator: Poedit 2.0.3\n"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:6
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
msgstr "Navigazion"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:9
 | 
			
		||||
msgid "Move window to workspace 1"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr 1"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:12
 | 
			
		||||
msgid "Move window to workspace 2"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr 2"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:15
 | 
			
		||||
msgid "Move window to workspace 3"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr 3"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:18
 | 
			
		||||
msgid "Move window to workspace 4"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr 4"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:21
 | 
			
		||||
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 up"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr parsore"
 | 
			
		||||
 | 
			
		||||
#: 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:30
 | 
			
		||||
msgid "Move window one monitor to the left"
 | 
			
		||||
msgstr "Sposte barcon tal visôr a çampe"
 | 
			
		||||
 | 
			
		||||
#: 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:36
 | 
			
		||||
msgid "Move window one monitor up"
 | 
			
		||||
msgstr "Sposte barcon tal visôr parsore"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:39
 | 
			
		||||
msgid "Move window one monitor down"
 | 
			
		||||
msgstr "Sposte barcon tal visôr sot"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:43
 | 
			
		||||
msgid "Switch applications"
 | 
			
		||||
msgstr "Passâ di une aplicazion in chê altre"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:48
 | 
			
		||||
msgid "Switch to previous application"
 | 
			
		||||
msgstr "Passe ae aplicazion prime"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:52
 | 
			
		||||
msgid "Switch windows"
 | 
			
		||||
msgstr "Passâ di un barcon in chel altri"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:57
 | 
			
		||||
msgid "Switch to previous window"
 | 
			
		||||
msgstr "Passe al barcon prime"
 | 
			
		||||
 | 
			
		||||
#: 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:66
 | 
			
		||||
msgid "Switch to previous window of an application"
 | 
			
		||||
msgstr "Passe al barcon prime di une aplicazion"
 | 
			
		||||
 | 
			
		||||
#: 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:75
 | 
			
		||||
msgid "Switch to previous system control"
 | 
			
		||||
msgstr "Passe al control di sisteme precedent"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:79
 | 
			
		||||
msgid "Switch windows directly"
 | 
			
		||||
msgstr "Passe dret ai barcons"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:84
 | 
			
		||||
msgid "Switch directly to previous window"
 | 
			
		||||
msgstr "Passe dret al barcon precedent"
 | 
			
		||||
 | 
			
		||||
#: 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:93
 | 
			
		||||
msgid "Switch directly to previous window of an app"
 | 
			
		||||
msgstr "Passe dret al barcon precedent di une aplicazion"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:97
 | 
			
		||||
msgid "Switch system controls directly"
 | 
			
		||||
msgstr "Passe dret ai controi dal sisteme"
 | 
			
		||||
 | 
			
		||||
#: 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:105
 | 
			
		||||
msgid "Hide all normal windows"
 | 
			
		||||
msgstr "Plate ducj i barcons normâi"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:108
 | 
			
		||||
msgid "Switch to workspace 1"
 | 
			
		||||
msgstr "Passe al spazi di lavôr 1"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:111
 | 
			
		||||
msgid "Switch to workspace 2"
 | 
			
		||||
msgstr "Passe al spazi di lavôr 2"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:114
 | 
			
		||||
msgid "Switch to workspace 3"
 | 
			
		||||
msgstr "Passe al spazi di lavôr 3"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:117
 | 
			
		||||
msgid "Switch to workspace 4"
 | 
			
		||||
msgstr "Passe al spazi di lavôr 4"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:120
 | 
			
		||||
msgid "Switch to last workspace"
 | 
			
		||||
msgstr "Passe al ultin spazi di lavôr"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:123
 | 
			
		||||
msgid "Move to workspace above"
 | 
			
		||||
msgstr "Sposte il spazi di lavôr parsore"
 | 
			
		||||
 | 
			
		||||
#: 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-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”"
 | 
			
		||||
 | 
			
		||||
#: 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"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:8
 | 
			
		||||
msgid "Activate the window menu"
 | 
			
		||||
msgstr "Ative il menù dal barcon"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:10
 | 
			
		||||
msgid "Toggle fullscreen mode"
 | 
			
		||||
msgstr "Ative/Disative modalitât plen visôr"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:12
 | 
			
		||||
msgid "Toggle maximization state"
 | 
			
		||||
msgstr "Ative/Disative il stât slargjât"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:14
 | 
			
		||||
msgid "Maximize window"
 | 
			
		||||
msgstr "Slargje il barcon"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:16
 | 
			
		||||
msgid "Restore window"
 | 
			
		||||
msgstr "Ripristine barcon"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:18
 | 
			
		||||
msgid "Close window"
 | 
			
		||||
msgstr "Siere il barcon"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:20
 | 
			
		||||
msgid "Hide window"
 | 
			
		||||
msgstr "Plate il barcon"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:22
 | 
			
		||||
msgid "Move window"
 | 
			
		||||
msgstr "Sposte il barcon"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:24
 | 
			
		||||
msgid "Resize window"
 | 
			
		||||
msgstr "Ridimensione barcon"
 | 
			
		||||
 | 
			
		||||
#: 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: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:31
 | 
			
		||||
msgid "Raise window above other windows"
 | 
			
		||||
msgstr "Met il barcon parsore di chei altris"
 | 
			
		||||
 | 
			
		||||
#: 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:35
 | 
			
		||||
msgid "Maximize window vertically"
 | 
			
		||||
msgstr "Slargje il barcon par verticâl"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:37
 | 
			
		||||
msgid "Maximize window horizontally"
 | 
			
		||||
msgstr "Slargje il barcon par orizontâl"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:41
 | 
			
		||||
msgid "View split on left"
 | 
			
		||||
msgstr "Slargje dividint ae çampe"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:45
 | 
			
		||||
msgid "View split on right"
 | 
			
		||||
msgstr "Slargje dividint ae drete"
 | 
			
		||||
 | 
			
		||||
#: data/mutter.desktop.in:4
 | 
			
		||||
msgid "Mutter"
 | 
			
		||||
@@ -155,14 +378,55 @@ msgstr ""
 | 
			
		||||
"Se metût a VÊR, i gnûfs barcons a vegnaran plaçâts simpri tal mieç dal "
 | 
			
		||||
"schermi atîf dal visôr."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:120
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:107
 | 
			
		||||
msgid "Enable experimental features"
 | 
			
		||||
msgstr "Abilite funzionalitâts sperimentâls"
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"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â "
 | 
			
		||||
"a inviâ il compositôr al dipent de funzionalitât dade. Cualsisei "
 | 
			
		||||
"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: • "
 | 
			
		||||
"“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â. "
 | 
			
		||||
"• “remote-desktop” — al abilite il supuart pal scritori rimot. Par podê "
 | 
			
		||||
"supuartâ il scritori rimot cun la condivision dal schermi si scugne abilitâ "
 | 
			
		||||
"ancje “screen-cast”. • “screen-cast” — al abilite il supuart pe trasmission "
 | 
			
		||||
"dal schermi."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:145
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
msgstr "Selezione barcon dal tab popup"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:125
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:150
 | 
			
		||||
msgid "Cancel tab popup"
 | 
			
		||||
msgstr "Anule tab popup"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:155
 | 
			
		||||
msgid "Switch monitor configurations"
 | 
			
		||||
msgstr "Cambie configurazions visôr"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:160
 | 
			
		||||
msgid "Rotates the built-in monitor configuration"
 | 
			
		||||
msgstr "Al volte la configurazion dal visôr integrât"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
 | 
			
		||||
msgid "Switch to VT 1"
 | 
			
		||||
msgstr "Passe al VT 1"
 | 
			
		||||
@@ -211,10 +475,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:1800
 | 
			
		||||
#: src/backends/meta-input-settings.c:2260
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr "Cambie mût (Grup %d)"
 | 
			
		||||
@@ -222,37 +537,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:1822
 | 
			
		||||
#: src/backends/meta-input-settings.c:2283
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "Cambie visôr"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:1824
 | 
			
		||||
#: src/backends/meta-input-settings.c:2285
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "Mostre jutori a schermi"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:675
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:900
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Display integrât"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:698
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:923
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "No cognossût"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:700
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:925
 | 
			
		||||
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:708
 | 
			
		||||
#: 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:471
 | 
			
		||||
#: src/compositor/compositor.c:481
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display “%s”."
 | 
			
		||||
@@ -264,17 +579,62 @@ msgstr ""
 | 
			
		||||
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:190
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Disabilite la conession al gjestôr de session"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:196
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Rimplace il window manager in vore"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:202
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Specifiche il ID di gjestion session"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:207
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Display X di doprâ"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:213
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inizialize session da file salvât"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:219
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Fâs lis clamadis X sincronis"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:226
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Eseguìs come compositor wayland"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:232
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Eseguìs come compositor nidiât"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:240
 | 
			
		||||
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:246
 | 
			
		||||
msgid "Run with X11 backend"
 | 
			
		||||
msgstr "Eseguìs cul backend X11"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: src/core/delete.c:127
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:147
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "“%s” nol rispuint."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:129
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:149
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "La aplicazion no rispuint."
 | 
			
		||||
 | 
			
		||||
#: 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."
 | 
			
		||||
@@ -282,55 +642,14 @@ 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/delete.c:141
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "Sfuarce _Jessude"
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "_Spiete"
 | 
			
		||||
 | 
			
		||||
#: 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
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Disabilite la conession al gjestôr de session"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:195
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Rimplace il window manager in vore"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:201
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Specifiche il ID di gjestion session"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:206
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Display X di doprâ"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:212
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inizialize session da file salvât"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:218
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Fâs lis clamadis X sincronis"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:225
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Eseguìs come compositor wayland"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:231
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Eseguìs come compositor nidiât"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:239
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Eseguìs come servidôr display complet, invezit che nidiât"
 | 
			
		||||
 | 
			
		||||
#: src/core/mutter.c:39
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
@@ -359,7 +678,7 @@ msgstr "Plugin Mutter di doprâ"
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Spazi di lavôr %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 "
 | 
			
		||||
@@ -368,7 +687,7 @@ 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/core/screen.c:668
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display “%s” is invalid\n"
 | 
			
		||||
msgstr "Schermi %d su display “%s” no valit\n"
 | 
			
		||||
@@ -382,7 +701,7 @@ msgstr "Mutter al è stât compilât cence supuart pe modalitât fetose\n"
 | 
			
		||||
msgid "Mode Switch: Mode %d"
 | 
			
		||||
msgstr "Cambie mût: mût %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."
 | 
			
		||||
@@ -395,182 +714,17 @@ msgstr ""
 | 
			
		||||
msgid "%s (on %s)"
 | 
			
		||||
msgstr "%s (su %s)"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Navigation"
 | 
			
		||||
#~ msgstr "Navigazion"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window to workspace 1"
 | 
			
		||||
#~ msgstr "Sposte barcon tal spazi di lavôr 1"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window to workspace 2"
 | 
			
		||||
#~ msgstr "Sposte barcon tal spazi di lavôr 2"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window to workspace 3"
 | 
			
		||||
#~ msgstr "Sposte barcon tal spazi di lavôr 3"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window to workspace 4"
 | 
			
		||||
#~ msgstr "Sposte barcon tal spazi di lavôr 4"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window to last workspace"
 | 
			
		||||
#~ msgstr "Sposte barcon tal ultin spazi di lavôr"
 | 
			
		||||
 | 
			
		||||
#~ 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 window one workspace up"
 | 
			
		||||
#~ msgstr "Sposte barcon tal spazi di lavôr parsore"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window one workspace down"
 | 
			
		||||
#~ msgstr "Sposte barcon tal spazi di lavôr sot"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window one monitor to the left"
 | 
			
		||||
#~ msgstr "Sposte barcon tal visôr a çampe"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window one monitor to the right"
 | 
			
		||||
#~ msgstr "Sposte barcon tal visôr a drete"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window one monitor up"
 | 
			
		||||
#~ msgstr "Sposte barcon tal visôr parsore"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window one monitor down"
 | 
			
		||||
#~ msgstr "Sposte barcon tal visôr sot"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch applications"
 | 
			
		||||
#~ msgstr "Passâ di une aplicazion in chê altre"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch to previous application"
 | 
			
		||||
#~ msgstr "Passe ae aplicazion prime"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch windows"
 | 
			
		||||
#~ msgstr "Passâ di un barcon in chel altri"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch to previous window"
 | 
			
		||||
#~ msgstr "Passe al barcon prime"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch windows of an application"
 | 
			
		||||
#~ msgstr "Passâ di un barcon in chel altri di une aplicazion"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch to previous window of an application"
 | 
			
		||||
#~ msgstr "Passe al barcon prime di une aplicazion"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch system controls"
 | 
			
		||||
#~ msgstr "Passâ di un control di sisteme in chel altri"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch to previous system control"
 | 
			
		||||
#~ msgstr "Passe al control di sisteme precedent"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch windows directly"
 | 
			
		||||
#~ msgstr "Passe dret ai barcons"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch directly to previous window"
 | 
			
		||||
#~ msgstr "Passe dret al barcon precedent"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch windows of an app directly"
 | 
			
		||||
#~ msgstr "Passe dret a un barcon di une aplicazion"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch directly to previous window of an app"
 | 
			
		||||
#~ msgstr "Passe dret al barcon precedent di une aplicazion"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch system controls directly"
 | 
			
		||||
#~ msgstr "Passe dret ai controi dal sisteme"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch directly to previous system control"
 | 
			
		||||
#~ msgstr "Passe dret al control precedent dal sisteme"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Hide all normal windows"
 | 
			
		||||
#~ msgstr "Plate ducj i barcons normâi"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch to workspace 1"
 | 
			
		||||
#~ msgstr "Passe al spazi di lavôr 1"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch to workspace 2"
 | 
			
		||||
#~ msgstr "Passe al spazi di lavôr 2"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch to workspace 3"
 | 
			
		||||
#~ msgstr "Passe al spazi di lavôr 3"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch to workspace 4"
 | 
			
		||||
#~ msgstr "Passe al spazi di lavôr 4"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Switch to last workspace"
 | 
			
		||||
#~ msgstr "Passe al ultin spazi di lavôr"
 | 
			
		||||
 | 
			
		||||
#~ 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 "Move to workspace above"
 | 
			
		||||
#~ msgstr "Sposte il spazi di lavôr parsore"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move to workspace below"
 | 
			
		||||
#~ msgstr "Sposte il spazi di lavôr sot"
 | 
			
		||||
 | 
			
		||||
#~ msgid "System"
 | 
			
		||||
#~ msgstr "Sisteme"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Show the run command prompt"
 | 
			
		||||
#~ msgstr "Mostre la richieste \"eseguìs comant\""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Show the activities overview"
 | 
			
		||||
#~ msgstr "Mostre la panoramiche ativitâts"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Windows"
 | 
			
		||||
#~ msgstr "Barcons"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Activate the window menu"
 | 
			
		||||
#~ msgstr "Ative il menù dal barcon"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Toggle fullscreen mode"
 | 
			
		||||
#~ msgstr "Ative/Disative modalitât plen visôr"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Toggle maximization state"
 | 
			
		||||
#~ msgstr "Ative/Disative il stât slargjât"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Maximize window"
 | 
			
		||||
#~ msgstr "Slargje il barcon"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Restore window"
 | 
			
		||||
#~ msgstr "Ripristine barcon"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Toggle shaded state"
 | 
			
		||||
#~ msgstr "Ative/Disative stât inrodolât"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Close window"
 | 
			
		||||
#~ msgstr "Siere il barcon"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Hide window"
 | 
			
		||||
#~ msgstr "Plate il barcon"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window"
 | 
			
		||||
#~ msgstr "Sposte il barcon"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Resize window"
 | 
			
		||||
#~ msgstr "Ridimensione barcon"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Toggle window on all workspaces or one"
 | 
			
		||||
#~ msgstr "Ative/Disative barcon su ducj i spazis di lavôr o nome un"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Raise window if covered, otherwise lower it"
 | 
			
		||||
#~ msgstr "Tire sù il barcon se al è cuviert, se no sbassilu"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Raise window above other windows"
 | 
			
		||||
#~ msgstr "Met il barcon parsore di chei altris"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Lower window below other windows"
 | 
			
		||||
#~ msgstr "Bute il barcon sot di chei altris"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Maximize window vertically"
 | 
			
		||||
#~ msgstr "Slargje il barcon par verticâl"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Maximize window horizontally"
 | 
			
		||||
#~ msgstr "Slargje il barcon par orizontâl"
 | 
			
		||||
 | 
			
		||||
#~ msgid "View split on left"
 | 
			
		||||
#~ msgstr "Slargje dividint ae çampe"
 | 
			
		||||
 | 
			
		||||
#~ msgid "View split on right"
 | 
			
		||||
#~ msgstr "Slargje dividint ae drete"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										362
									
								
								po/gl.po
									
									
									
									
									
								
							
							
						
						
									
										362
									
								
								po/gl.po
									
									
									
									
									
								
							@@ -9,23 +9,21 @@
 | 
			
		||||
# Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun.org>, 2009.
 | 
			
		||||
# Fran Diéguez <frandieguez@gnome.org>, 2009, 2010, 2011, 2012.
 | 
			
		||||
# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
 | 
			
		||||
# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013, 2014, 2015, 2016, 2017.
 | 
			
		||||
#
 | 
			
		||||
# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: gl\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2017-02-28 06:20+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2017-03-11 03:02+0100\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2018-02-06 04:14+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2018-02-14 23:45+0200\n"
 | 
			
		||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
 | 
			
		||||
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
 | 
			
		||||
"Language-Team: Galician\n"
 | 
			
		||||
"Language: gl\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.7\n"
 | 
			
		||||
"X-Generator: Virtaal 0.7.1\n"
 | 
			
		||||
"X-Project-Style: gnome\n"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:6
 | 
			
		||||
@@ -53,134 +51,118 @@ msgid "Move window to last workspace"
 | 
			
		||||
msgstr "Mover xanela ao último espazo de traballo"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:24
 | 
			
		||||
msgid "Move window one workspace to the left"
 | 
			
		||||
msgstr "Mover xanela un espazo de traballo cara á esquerda"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:27
 | 
			
		||||
msgid "Move window one workspace to the right"
 | 
			
		||||
msgstr "Mover xanela un espazo de traballo cara á dereita"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:30
 | 
			
		||||
msgid "Move window one workspace up"
 | 
			
		||||
msgstr "Mover xanela un espazo de traballo cara a arriba"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:33
 | 
			
		||||
#: data/50-mutter-navigation.xml:27
 | 
			
		||||
msgid "Move window one workspace down"
 | 
			
		||||
msgstr "Mover xanela un espazo de traballo cara a abaixo"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:36
 | 
			
		||||
#: data/50-mutter-navigation.xml:30
 | 
			
		||||
msgid "Move window one monitor to the left"
 | 
			
		||||
msgstr "Mover xanela un monitor á esquerda"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:39
 | 
			
		||||
#: data/50-mutter-navigation.xml:33
 | 
			
		||||
msgid "Move window one monitor to the right"
 | 
			
		||||
msgstr "Mover xanela un monitor á dereita"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:42
 | 
			
		||||
#: data/50-mutter-navigation.xml:36
 | 
			
		||||
msgid "Move window one monitor up"
 | 
			
		||||
msgstr "Mover xanela un monitor arriba"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:45
 | 
			
		||||
#: data/50-mutter-navigation.xml:39
 | 
			
		||||
msgid "Move window one monitor down"
 | 
			
		||||
msgstr "Mover xanela un espazo de traballo abaixo"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:49
 | 
			
		||||
#: data/50-mutter-navigation.xml:43
 | 
			
		||||
msgid "Switch applications"
 | 
			
		||||
msgstr "Cambiar entre aplicativos"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:54
 | 
			
		||||
#: data/50-mutter-navigation.xml:48
 | 
			
		||||
msgid "Switch to previous application"
 | 
			
		||||
msgstr "Cambiar ao aplicativo aplicativos"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:58
 | 
			
		||||
#: data/50-mutter-navigation.xml:52
 | 
			
		||||
msgid "Switch windows"
 | 
			
		||||
msgstr "Cambiar xanelas"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:63
 | 
			
		||||
#: data/50-mutter-navigation.xml:57
 | 
			
		||||
msgid "Switch to previous window"
 | 
			
		||||
msgstr "Cambiar á xanela anterior"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:67
 | 
			
		||||
#: data/50-mutter-navigation.xml:61
 | 
			
		||||
msgid "Switch windows of an application"
 | 
			
		||||
msgstr "Cambiar entre as xanelas dun aplicativo"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:72
 | 
			
		||||
#: data/50-mutter-navigation.xml:66
 | 
			
		||||
msgid "Switch to previous window of an application"
 | 
			
		||||
msgstr "Cambia á xanela anterior dun aplicativo"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:76
 | 
			
		||||
#: data/50-mutter-navigation.xml:70
 | 
			
		||||
msgid "Switch system controls"
 | 
			
		||||
msgstr "Cambiar entre os controles do sistema"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:81
 | 
			
		||||
#: data/50-mutter-navigation.xml:75
 | 
			
		||||
msgid "Switch to previous system control"
 | 
			
		||||
msgstr "Cambia ao control do sistema anterior"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:85
 | 
			
		||||
#: data/50-mutter-navigation.xml:79
 | 
			
		||||
msgid "Switch windows directly"
 | 
			
		||||
msgstr "Cambiar xanelas directamente"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:90
 | 
			
		||||
#: data/50-mutter-navigation.xml:84
 | 
			
		||||
msgid "Switch directly to previous window"
 | 
			
		||||
msgstr "Cambia directamente á xanela anterior"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:94
 | 
			
		||||
#: data/50-mutter-navigation.xml:88
 | 
			
		||||
msgid "Switch windows of an app directly"
 | 
			
		||||
msgstr "Cambiar entre as xanelas dun aplicativo directamente"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:99
 | 
			
		||||
#: data/50-mutter-navigation.xml:93
 | 
			
		||||
msgid "Switch directly to previous window of an app"
 | 
			
		||||
msgstr "Cambia directamente á xanela anterior do aplicativo"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:103
 | 
			
		||||
#: data/50-mutter-navigation.xml:97
 | 
			
		||||
msgid "Switch system controls directly"
 | 
			
		||||
msgstr "Cambiar entre os controles do sistema directamente"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:108
 | 
			
		||||
#: data/50-mutter-navigation.xml:102
 | 
			
		||||
msgid "Switch directly to previous system control"
 | 
			
		||||
msgstr "Cambiar directamente ao control do sistema anterior"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:111
 | 
			
		||||
#: data/50-mutter-navigation.xml:105
 | 
			
		||||
msgid "Hide all normal windows"
 | 
			
		||||
msgstr "Ocultar todas as xanelas normais"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:114
 | 
			
		||||
#: data/50-mutter-navigation.xml:108
 | 
			
		||||
msgid "Switch to workspace 1"
 | 
			
		||||
msgstr "Cambiar ao espazo de traballo 1"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:117
 | 
			
		||||
#: data/50-mutter-navigation.xml:111
 | 
			
		||||
msgid "Switch to workspace 2"
 | 
			
		||||
msgstr "Cambiar ao espazo de traballo 2"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:120
 | 
			
		||||
#: data/50-mutter-navigation.xml:114
 | 
			
		||||
msgid "Switch to workspace 3"
 | 
			
		||||
msgstr "Cambiar ao espazo de traballo 3"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:123
 | 
			
		||||
#: data/50-mutter-navigation.xml:117
 | 
			
		||||
msgid "Switch to workspace 4"
 | 
			
		||||
msgstr "Cambiar ao espazo de traballo 4"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:126
 | 
			
		||||
#: data/50-mutter-navigation.xml:120
 | 
			
		||||
msgid "Switch to last workspace"
 | 
			
		||||
msgstr "Cambiar ao último espazo de traballo"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:129
 | 
			
		||||
msgid "Move to workspace left"
 | 
			
		||||
msgstr "Mover ao espazo da esquerda"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:132
 | 
			
		||||
msgid "Move to workspace right"
 | 
			
		||||
msgstr "Mover ao espazo da dereita"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:135
 | 
			
		||||
#: data/50-mutter-navigation.xml:123
 | 
			
		||||
msgid "Move to workspace above"
 | 
			
		||||
msgstr "Mover ao espazo de arriba"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:138
 | 
			
		||||
#: data/50-mutter-navigation.xml:126
 | 
			
		||||
msgid "Move to workspace below"
 | 
			
		||||
msgstr "Mover ao espazo de traballo de abaixo"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-system.xml:6
 | 
			
		||||
#: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6
 | 
			
		||||
msgid "System"
 | 
			
		||||
msgstr "Sistema"
 | 
			
		||||
 | 
			
		||||
@@ -192,6 +174,10 @@ msgstr "Mostrar o diálogo de executar orde"
 | 
			
		||||
msgid "Show the activities overview"
 | 
			
		||||
msgstr "Mostrar a vista xeral de actividades"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-wayland.xml:8
 | 
			
		||||
msgid "Restore the keyboard shortcuts"
 | 
			
		||||
msgstr "Restaurar os atallos de teclado"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:6
 | 
			
		||||
msgid "Windows"
 | 
			
		||||
msgstr "Xanelas"
 | 
			
		||||
@@ -217,54 +203,50 @@ msgid "Restore window"
 | 
			
		||||
msgstr "Restaurar xanela"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:18
 | 
			
		||||
msgid "Toggle shaded state"
 | 
			
		||||
msgstr "Trocar o estado ensombrecido"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:20
 | 
			
		||||
msgid "Close window"
 | 
			
		||||
msgstr "Pechar xanela"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:22
 | 
			
		||||
#: data/50-mutter-windows.xml:20
 | 
			
		||||
msgid "Hide window"
 | 
			
		||||
msgstr "Ocultar xanela"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:24
 | 
			
		||||
#: data/50-mutter-windows.xml:22
 | 
			
		||||
msgid "Move window"
 | 
			
		||||
msgstr "Mover xanela"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:26
 | 
			
		||||
#: data/50-mutter-windows.xml:24
 | 
			
		||||
msgid "Resize window"
 | 
			
		||||
msgstr "Redimensionar xanela"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:29
 | 
			
		||||
#: data/50-mutter-windows.xml:27
 | 
			
		||||
msgid "Toggle window on all workspaces or one"
 | 
			
		||||
msgstr "Trocar que a xanela apareza en tódolos espazos de traballo ou nun"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:31
 | 
			
		||||
#: data/50-mutter-windows.xml:29
 | 
			
		||||
msgid "Raise window if covered, otherwise lower it"
 | 
			
		||||
msgstr "Elevar a xanela se está cuberta por outra, en caso contrario baixala"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:33
 | 
			
		||||
#: data/50-mutter-windows.xml:31
 | 
			
		||||
msgid "Raise window above other windows"
 | 
			
		||||
msgstr "Subir a xanela por enriba doutras xanelas"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:35
 | 
			
		||||
#: data/50-mutter-windows.xml:33
 | 
			
		||||
msgid "Lower window below other windows"
 | 
			
		||||
msgstr "Baixar xanela debaixo doutras xanelas"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:37
 | 
			
		||||
#: data/50-mutter-windows.xml:35
 | 
			
		||||
msgid "Maximize window vertically"
 | 
			
		||||
msgstr "Maximizar xanela verticalmente"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:39
 | 
			
		||||
#: data/50-mutter-windows.xml:37
 | 
			
		||||
msgid "Maximize window horizontally"
 | 
			
		||||
msgstr "Maximizar xanela horizontalmente"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:43
 | 
			
		||||
#: data/50-mutter-windows.xml:41
 | 
			
		||||
msgid "View split on left"
 | 
			
		||||
msgstr "Dividir vista á esquerda"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-windows.xml:47
 | 
			
		||||
#: data/50-mutter-windows.xml:45
 | 
			
		||||
msgid "View split on right"
 | 
			
		||||
msgstr "Dividir vista á dereita"
 | 
			
		||||
 | 
			
		||||
@@ -278,11 +260,6 @@ msgstr ""
 | 
			
		||||
"Modificador que se vai usar para as accións modificadas de xestión de xanela"
 | 
			
		||||
 | 
			
		||||
#: 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 "
 | 
			
		||||
@@ -328,10 +305,6 @@ msgid "Workspaces are managed dynamically"
 | 
			
		||||
msgstr "Os espazos de traballo xestiónanse dinamicamente"
 | 
			
		||||
 | 
			
		||||
#: 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."
 | 
			
		||||
@@ -370,10 +343,6 @@ msgid "Delay focus changes until the pointer stops moving"
 | 
			
		||||
msgstr "Retrasar o cambio de enfoque até que o punteiro se deteña ao moverse"
 | 
			
		||||
 | 
			
		||||
#: 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 "
 | 
			
		||||
@@ -388,9 +357,6 @@ msgid "Draggable border width"
 | 
			
		||||
msgstr "Anchura arrastrábel do bordo"
 | 
			
		||||
 | 
			
		||||
#: 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."
 | 
			
		||||
@@ -423,14 +389,54 @@ msgstr ""
 | 
			
		||||
"Cando está verdadeiro, as novas xanelas sempre se porán no centro da "
 | 
			
		||||
"pantalla activa."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:120
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:107
 | 
			
		||||
msgid "Enable experimental features"
 | 
			
		||||
msgstr "Activar as características experimentais"
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"Para activar as características experimentais, engada a palabra chave da "
 | 
			
		||||
"característica á lista. Depende da característica que se deba reiniciar ou "
 | 
			
		||||
"non o compositor. Calquera característica experimental pode non estar "
 | 
			
		||||
"dispoñíbel ou ser configurábel. Non agarde que o que se engada neste "
 | 
			
		||||
"escenario sirva como proba futura. As palabras chave actualmente dispoñíbeis "
 | 
			
		||||
"son: «scale-monitor-framebuffer» — fai que mutter de maneira predeterminada "
 | 
			
		||||
"dispoña os monitores lóxicos nun espacio lóxico de coordenadas de píxeles, "
 | 
			
		||||
"mentres escala framebuffers de monitores no lugar do contido de xanela, para "
 | 
			
		||||
"administrar monitores HiDPI. Non require un reinicio. «remote-desktop» — "
 | 
			
		||||
"permite a compatibilidade con compartición de pantalla. Para admitir o "
 | 
			
		||||
"escritorio remoto con compartición de pantalla tamén debe activar «screen-"
 | 
			
		||||
"cast». • «screen-cast» — permite a compatibilidade coa retransmisión de "
 | 
			
		||||
"pantalla."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:145
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
msgstr "Seleccionar xanela da lapela emerxente"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:125
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:150
 | 
			
		||||
msgid "Cancel tab popup"
 | 
			
		||||
msgstr "Cancelar lapela emerxente"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:155
 | 
			
		||||
msgid "Switch monitor configurations"
 | 
			
		||||
msgstr "Cambiar preferencias do monitor"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:160
 | 
			
		||||
msgid "Rotates the built-in monitor configuration"
 | 
			
		||||
msgstr "Rota a configuración do monitor embebido"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
 | 
			
		||||
msgid "Switch to VT 1"
 | 
			
		||||
msgstr "Cambiar á VT 1"
 | 
			
		||||
@@ -479,53 +485,84 @@ msgstr "Cambiar á VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Cambiar á VT 12"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
 | 
			
		||||
msgid "Re-enable shortcuts"
 | 
			
		||||
msgstr "Reactivar os atallos"
 | 
			
		||||
 | 
			
		||||
#: 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:1800
 | 
			
		||||
#: src/backends/meta-input-settings.c:2260
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid "Mode Switch: Mode %d"
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr "Modo conmutador (Grupo %d)"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
 | 
			
		||||
#. * mapping through the available outputs.
 | 
			
		||||
#.
 | 
			
		||||
#: src/backends/meta-input-settings.c:1822
 | 
			
		||||
#: src/backends/meta-input-settings.c:2283
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "Cambiar monitor"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:1824
 | 
			
		||||
#: src/backends/meta-input-settings.c:2285
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "Mostrar axuda en pantalla"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:675
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:900
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Pantalla embebida"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:698
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:923
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Descoñecido"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:700
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:925
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Pantalla descoñecida"
 | 
			
		||||
 | 
			
		||||
#. 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: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:471
 | 
			
		||||
#: 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”."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -536,17 +573,62 @@ msgstr ""
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Evento de campá"
 | 
			
		||||
 | 
			
		||||
#: src/core/display.c:608
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display “%s”\n"
 | 
			
		||||
msgstr "Produciuse un erro ao abrir a visualización do X Window System «%s»\n"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:190
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Desactivar a conexión ao xestor de sesión"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:196
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Substituír o xestor de xanelas en execución"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:202
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Especificar o ID de xestión de sesión"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:207
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Pantalla X que se vai usar"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:213
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicializar sesión desde o ficheiro de salvagarda"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:219
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Facer que as chamadas a X sexan sincrónicas"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:226
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Executar como compositor de wayland"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:232
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Executar como compositor anidado"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:240
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Executar como un servidor de pantalla completo, fronte a un aniñado"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:246
 | 
			
		||||
msgid "Run with X11 backend"
 | 
			
		||||
msgstr "Executar coa infraestructura de X11"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: src/core/delete.c:127
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:147
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "«%s» non está respondendo."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:129
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:149
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "O Aplicativo non está respondendo."
 | 
			
		||||
 | 
			
		||||
#: 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."
 | 
			
		||||
@@ -554,64 +636,16 @@ msgstr ""
 | 
			
		||||
"Pode elixir esperar un momento para ver se continúa ou forzar ao aplicativo "
 | 
			
		||||
"a pechar completamente."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Forzar a saída"
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "Espe_rar"
 | 
			
		||||
 | 
			
		||||
#: 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 "Produciuse un erro ao abrir a visualización do X Window System «%s»\n"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:189
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Desactivar a conexión ao xestor de sesión"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:195
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Substituír o xestor de xanelas en execución"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:201
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Especificar o ID de xestión de sesión"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:206
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Pantalla X que se vai usar"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:212
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicializar sesión desde o ficheiro de salvagarda"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:218
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Facer que as chamadas a X sexan sincrónicas"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:225
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Executar como compositor de wayland"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:231
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Executar como compositor anidado"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:239
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Executar como un servidor de pantalla completo, fronte a un aniñado"
 | 
			
		||||
 | 
			
		||||
#: 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"
 | 
			
		||||
@@ -638,11 +672,8 @@ msgstr "Engadido de mutter que usar"
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Espazo de traballo %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 replace the current window manager."
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display “%s” already has a window manager; try using the --replace option to "
 | 
			
		||||
"replace the current window manager."
 | 
			
		||||
@@ -650,9 +681,8 @@ msgstr ""
 | 
			
		||||
"A pantalla «%s» ten xa un xestor de xanelas, tente usar a opción --replace "
 | 
			
		||||
"para substituír o xestor de xanelas."
 | 
			
		||||
 | 
			
		||||
#: src/core/screen.c:665
 | 
			
		||||
#: 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 "A pantalla %d na visualización «%s» non é válida\n"
 | 
			
		||||
 | 
			
		||||
@@ -665,10 +695,7 @@ msgstr "Mutter foi compilado sen compatibilidade para o modo detallado\n"
 | 
			
		||||
msgid "Mode Switch: Mode %d"
 | 
			
		||||
msgstr "Modo conmutador: Modo %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."
 | 
			
		||||
#: 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."
 | 
			
		||||
@@ -681,6 +708,21 @@ msgstr ""
 | 
			
		||||
msgid "%s (on %s)"
 | 
			
		||||
msgstr "%s (en %s)"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window one workspace to the left"
 | 
			
		||||
#~ msgstr "Mover xanela un espazo de traballo cara á esquerda"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move window one workspace to the right"
 | 
			
		||||
#~ msgstr "Mover xanela un espazo de traballo cara á dereita"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move to workspace left"
 | 
			
		||||
#~ msgstr "Mover ao espazo da esquerda"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Move to workspace right"
 | 
			
		||||
#~ msgstr "Mover ao espazo da dereita"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Toggle shaded state"
 | 
			
		||||
#~ msgstr "Trocar o estado ensombrecido"
 | 
			
		||||
 | 
			
		||||
#~ msgid "background texture could not be created from file"
 | 
			
		||||
#~ msgstr "a textura do fondo non puido crearse desde o ficheiro"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										133
									
								
								po/he.po
									
									
									
									
									
								
							
							
						
						
									
										133
									
								
								po/he.po
									
									
									
									
									
								
							@@ -11,8 +11,8 @@ msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity.HEAD.he\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2017-03-30 18:41+0300\n"
 | 
			
		||||
"PO-Revision-Date: 2017-03-30 18:46+0300\n"
 | 
			
		||||
"POT-Creation-Date: 2017-11-26 17:12+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2017-11-26 17:14+0200\n"
 | 
			
		||||
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
 | 
			
		||||
"Language-Team: עברית <>\n"
 | 
			
		||||
"Language: he\n"
 | 
			
		||||
@@ -174,7 +174,7 @@ msgstr "העברה למרחב העבודה שמלמעלה"
 | 
			
		||||
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 "מערכת"
 | 
			
		||||
 | 
			
		||||
@@ -186,6 +186,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 "חלונות"
 | 
			
		||||
@@ -271,7 +275,6 @@ 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 "
 | 
			
		||||
@@ -316,7 +319,6 @@ 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."
 | 
			
		||||
@@ -355,7 +357,6 @@ 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 "
 | 
			
		||||
@@ -401,14 +402,52 @@ msgstr ""
 | 
			
		||||
"When true, the new windows will always be put in the center 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. • “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 ""
 | 
			
		||||
"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."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:145
 | 
			
		||||
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:150
 | 
			
		||||
msgid "Cancel tab popup"
 | 
			
		||||
msgstr "Cancel tab popup"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:155
 | 
			
		||||
msgid "Switch monitor configurations"
 | 
			
		||||
msgstr "החלפה בין תצורות צגים"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:160
 | 
			
		||||
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 "מעבר ל־VT 1"
 | 
			
		||||
@@ -457,10 +496,14 @@ msgstr "מעבר ל־VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "מעבר ל־VT 12"
 | 
			
		||||
 | 
			
		||||
#: 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:1848
 | 
			
		||||
#: src/backends/meta-input-settings.c:2260
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr "מצב העברה (קבוצה %d)"
 | 
			
		||||
@@ -468,37 +511,37 @@ 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:2283
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "החלפה בין צגים"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:1872
 | 
			
		||||
#: src/backends/meta-input-settings.c:2285
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "הצגת עזרה על המסך"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:630
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:900
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "תצוגה מובנית"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:653
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:923
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "לא ידוע"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor-manager.c:655
 | 
			
		||||
#: 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:663
 | 
			
		||||
#: 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:474
 | 
			
		||||
#: src/compositor/compositor.c:479
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display “%s”."
 | 
			
		||||
@@ -508,31 +551,6 @@ msgstr "מנהל תצוגת חלונות אחר כבר פועל במסך %i בת
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "אירוע פעמון"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: src/core/delete.c:127
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "„%s“ אינו מגיב."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:129
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "היישום אינו מגיב."
 | 
			
		||||
 | 
			
		||||
#: 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 ""
 | 
			
		||||
"באפשרותך להמתין זמן קצר ולתת ליישום להמשיך או להכריח את היישום להסתיים."
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_אילוץ סגירה"
 | 
			
		||||
 | 
			
		||||
#: src/core/delete.c:141
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "ה_מתנה"
 | 
			
		||||
 | 
			
		||||
#: src/core/display.c:608
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display “%s”\n"
 | 
			
		||||
@@ -574,6 +592,31 @@ msgstr "Run as a nested compositor"
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Run as a full display server, rather than nested"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a window title
 | 
			
		||||
#: 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
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "היישום אינו מגיב."
 | 
			
		||||
 | 
			
		||||
#: 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
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_אילוץ סגירה"
 | 
			
		||||
 | 
			
		||||
#: src/core/meta-close-dialog-default.c:161
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "ה_מתנה"
 | 
			
		||||
 | 
			
		||||
#: src/core/mutter.c:39
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
@@ -601,7 +644,7 @@ msgstr "תוסף ה־mutter לשימוש"
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "מרחב עבודה %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 "
 | 
			
		||||
@@ -610,7 +653,7 @@ msgstr ""
 | 
			
		||||
"Display “%s” already has a window manager; try using the --replace option to "
 | 
			
		||||
"replace the current window manager."
 | 
			
		||||
 | 
			
		||||
#: src/core/screen.c:665
 | 
			
		||||
#: src/core/screen.c:668
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display “%s” is invalid\n"
 | 
			
		||||
msgstr "Screen %d on display “%s” is invalid\n"
 | 
			
		||||
@@ -629,8 +672,8 @@ 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
 | 
			
		||||
#, c-format
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user