Compare commits
	
		
			291 Commits
		
	
	
		
			3.8.3
			...
			wip/remove
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | bb9501dbdf | ||
|   | 1db95bc32b | ||
|   | 93a8933282 | ||
|   | 5a63aaa5ac | ||
|   | a3eb5e562a | ||
|   | 8a76383eca | ||
|   | 734deeb17c | ||
|   | f8b4c28278 | ||
|   | 3e179c07bc | ||
|   | 56aae17b46 | ||
|   | 78741846a4 | ||
|   | 55180f5bb3 | ||
|   | 62b884dd42 | ||
|   | 3283018bfb | ||
|   | 55226ada8a | ||
|   | ff790f7b39 | ||
|   | 899570d213 | ||
|   | 3b2506851c | ||
|   | 9b88059e55 | ||
|   | 59168b2c64 | ||
|   | 47144253e4 | ||
|   | d8c66077f0 | ||
|   | 59a01137e1 | ||
|   | ce3804ee04 | ||
|   | f0bc53ce5a | ||
|   | b8938e9d4d | ||
|   | 7116d9cedb | ||
|   | 66fb86fd0c | ||
|   | 59cfbb07c8 | ||
|   | dc5bc3fea8 | ||
|   | fbbc32422e | ||
|   | fe8829f324 | ||
|   | b4036e061a | ||
|   | 4ee9f3563b | ||
|   | c652a54f59 | ||
|   | 61881477ac | ||
|   | 4373916d9d | ||
|   | 660d7df5ab | ||
|   | b7e3f627f1 | ||
|   | ca5d115715 | ||
|   | 21c46852cd | ||
|   | 10036832dd | ||
|   | 25b5ea8b4f | ||
|   | 20beaf7fe1 | ||
|   | e72af50420 | ||
|   | ef4417b717 | ||
|   | cf943627e2 | ||
|   | 96543cb009 | ||
|   | fbb2207f8c | ||
|   | cce8a4341b | ||
|   | b82784ee46 | ||
|   | 6b8959916c | ||
|   | ecc1830296 | ||
|   | 497916aad7 | ||
|   | e171a31ac5 | ||
|   | a9a10aaa20 | ||
|   | 656d079ffc | ||
|   | d801f699af | ||
|   | 89d01d2c17 | ||
|   | ec284bc56a | ||
|   | db2e00d41c | ||
|   | 0a616c9fcb | ||
|   | fed3cd9e82 | ||
|   | d0d8a3d4ea | ||
|   | bdf5f88349 | ||
|   | 809dbe16d6 | ||
|   | badebfae6b | ||
|   | 6693420005 | ||
|   | 0e3aab8691 | ||
|   | 55840c626c | ||
|   | f0e5656717 | ||
|   | 8af0e10aa4 | ||
|   | 71f574bc52 | ||
|   | 2518d6138f | ||
|   | 36be084655 | ||
|   | d863182810 | ||
|   | 85c2bc29e6 | ||
|   | 4eeeb1557a | ||
|   | dd64f62b2f | ||
|   | 7b84590c71 | ||
|   | 2601b30c7e | ||
|   | d38f89636a | ||
|   | caf6c650a6 | ||
|   | e285628cd7 | ||
|   | d253580d14 | ||
|   | 4edfafb61f | ||
|   | c07957d6ec | ||
|   | 423bd70238 | ||
|   | 2fc9e1af58 | ||
|   | baa6d808c2 | ||
|   | 1e1c26c91a | ||
|   | eba27a7e05 | ||
|   | 4009267c2b | ||
|   | 8a370c0094 | ||
|   | abe0701ce7 | ||
|   | eef6570962 | ||
|   | a2c7c8f26a | ||
|   | 91ce46f6f3 | ||
|   | c5ebe75424 | ||
|   | 08161078f4 | ||
|   | 9def55914c | ||
|   | f044eda079 | ||
|   | 4883b96e0d | ||
|   | ca6a1aac2b | ||
|   | cc3f6c5ca9 | ||
|   | cacdaa0067 | ||
|   | 016e2aec8e | ||
|   | 9c5416d598 | ||
|   | 5f50bc6380 | ||
|   | e44aef6d5a | ||
|   | 2ff904915e | ||
|   | 565c04b989 | ||
|   | 7dfc8fd446 | ||
|   | f96dc97c4f | ||
|   | 40163c737c | ||
|   | 6327b8d15a | ||
|   | 3053cc0de4 | ||
|   | 0b89e34439 | ||
|   | c5bf60eab4 | ||
|   | bdbb852163 | ||
|   | 4a11f126cd | ||
|   | 03f736607b | ||
|   | 5aa3a288dc | ||
|   | ddf566a3c4 | ||
|   | d50ea010ef | ||
|   | 9678a412e2 | ||
|   | 46f4ea7ed7 | ||
|   | e3b1c2dea0 | ||
|   | 5cbac5bf23 | ||
|   | 7050b97d94 | ||
|   | 23e9947f7a | ||
|   | fc605d2561 | ||
|   | ab4c929a07 | ||
|   | c251ab5092 | ||
|   | 57258dc1d4 | ||
|   | f1df49ad17 | ||
|   | 9d8e7371fb | ||
|   | 84a1b394a1 | ||
|   | 4ea8b91e0b | ||
|   | 8e1e0fc344 | ||
|   | 7186d0ce55 | ||
|   | 6393789345 | ||
|   | 2a5c2aa404 | ||
|   | d0210c1a97 | ||
|   | 691c107ce9 | ||
|   | 5b4924c76e | ||
|   | a292d21b6c | ||
|   | 576cd87a5b | ||
|   | e74ed92993 | ||
|   | eeed3d605b | ||
|   | a3037a6dd1 | ||
|   | 207fdd4a34 | ||
|   | cb242318d4 | ||
|   | 29cd09a6ca | ||
|   | 54fc2daa46 | ||
|   | a4cc394c22 | ||
|   | 0a0bcf65ad | ||
|   | d36f544069 | ||
|   | d99c0ad384 | ||
|   | 387b53977d | ||
|   | c63e5f755f | ||
|   | 7476419940 | ||
|   | 25ad3486a4 | ||
|   | 9198de7d45 | ||
|   | 88b2b6cb83 | ||
|   | 8a0b1ceb4c | ||
|   | 54d18c0196 | ||
|   | e24f0a77c4 | ||
|   | 7fc9a807a0 | ||
|   | fdfde62a33 | ||
|   | 4366687b95 | ||
|   | f28fed51da | ||
|   | 2b940f6aba | ||
|   | f42682711b | ||
|   | ad159d3ebd | ||
|   | faa3e2d04d | ||
|   | 604a79ad98 | ||
|   | ce0c6b8d9f | ||
|   | 9552ec89fb | ||
|   | 3a7c1e7b6c | ||
|   | 6980256a42 | ||
|   | 3f2dcf1698 | ||
|   | 44097c1b37 | ||
|   | 551b188c01 | ||
|   | 3a786542c4 | ||
|   | bb2df9b2c6 | ||
|   | 7d1e149905 | ||
|   | 1dcd52838b | ||
|   | 909a6607c5 | ||
|   | 1bde397edf | ||
|   | 015c05fbf6 | ||
|   | 8ad5ccd2f8 | ||
|   | 115cc870c7 | ||
|   | 3112794d83 | ||
|   | 3528b067d0 | ||
|   | 0986b660be | ||
|   | 3bb5086173 | ||
|   | 69467842ab | ||
|   | 57077435ed | ||
|   | 46de0ed462 | ||
|   | 5086626805 | ||
|   | bbbcd8c631 | ||
|   | 3b61b85f2c | ||
|   | cd20f1bc0b | ||
|   | 8b52782ed4 | ||
|   | 849050be95 | ||
|   | 5c27a91684 | ||
|   | 764c472edb | ||
|   | d0529b7482 | ||
|   | 8f4621240a | ||
|   | e039add240 | ||
|   | dbd8d4d598 | ||
|   | 522542c486 | ||
|   | fc67c707e4 | ||
|   | c354e7e81b | ||
|   | bf40409d97 | ||
|   | 57d083730e | ||
|   | dc242e46c2 | ||
|   | 7e1d1003c9 | ||
|   | 3bb33d384f | ||
|   | 214f31257b | ||
|   | 506ddc3d6c | ||
|   | c3e8646af3 | ||
|   | 8c17b670fb | ||
|   | 12d2e1f600 | ||
|   | c20b007985 | ||
|   | ef480e9120 | ||
|   | 8c1c77482d | ||
|   | e633606ca9 | ||
|   | 6fdc23d0b7 | ||
|   | 4862872c78 | ||
|   | ae2e4c5114 | ||
|   | 06b5be2d13 | ||
|   | 56fb8a81b3 | ||
|   | 90a3d613ca | ||
|   | c2af13cf31 | ||
|   | b0cf0b2442 | ||
|   | 1c569c2d0e | ||
|   | e3855c77af | ||
|   | 21fe5be026 | ||
|   | 57bc974a57 | ||
|   | 3b51405255 | ||
|   | 73dbb4b9a5 | ||
|   | 51acc3ee31 | ||
|   | a6f206f07c | ||
|   | 9504fdd2cb | ||
|   | b76c3312e9 | ||
|   | fd7db8e6b3 | ||
|   | b7840bec7d | ||
|   | f743539886 | ||
|   | 15e01152da | ||
|   | 2103ff6a5c | ||
|   | 8ab136b7ea | ||
|   | 5205821fb9 | ||
|   | 7187206ef5 | ||
|   | 96221e6c04 | ||
|   | 7fdfbad6d4 | ||
|   | 2a5b068863 | ||
|   | 0c505faded | ||
|   | b2dd4f33f7 | ||
|   | 47b21b3547 | ||
|   | c119f98bac | ||
|   | d20078574e | ||
|   | 26bd4fde5c | ||
|   | 2af49e503f | ||
|   | 6ea6af6eb4 | ||
|   | 10df80762c | ||
|   | f86032d700 | ||
|   | a8eb33f6fd | ||
|   | bd19de9429 | ||
|   | 2ca2838548 | ||
|   | df8234c5e3 | ||
|   | d03ffd801e | ||
|   | 7a4c808e43 | ||
|   | 4f1d62170b | ||
|   | e10804727d | ||
|   | e430e051b7 | ||
|   | 696d9d2fa9 | ||
|   | f6dd081acd | ||
|   | eddd6f8e9b | ||
|   | dfa4c7d670 | ||
|   | a487d4dd01 | ||
|   | c2ecdd0524 | ||
|   | 50b9042ac2 | ||
|   | f5e75de330 | ||
|   | 1ffe1eae4d | ||
|   | 970a446bd8 | ||
|   | 8880dffbdb | ||
|   | 5b6621811c | ||
|   | c2a9ccb7e2 | ||
|   | 4608cb6027 | 
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -46,7 +46,6 @@ POTFILES | ||||
| po/*.pot | ||||
| 50-metacity-desktop-key.xml | ||||
| 50-metacity-key.xml | ||||
| inlinepixbufs.h | ||||
| libmutter.pc | ||||
| mutter | ||||
| mutter-theme-viewer | ||||
| @@ -56,12 +55,14 @@ org.gnome.mutter.gschema.xml | ||||
| testasyncgetprop | ||||
| testboxes | ||||
| testgradient | ||||
| m4/* | ||||
| mutter-grayscale | ||||
| mutter-mag | ||||
| mutter-message | ||||
| mutter-window-demo | ||||
| focus-window | ||||
| test-attached | ||||
| test-focus | ||||
| test-gravity | ||||
| test-resizing | ||||
| test-size-hints | ||||
| @@ -74,6 +75,8 @@ src/mutter-enum-types.[ch] | ||||
| src/stamp-mutter-enum-types.h | ||||
| src/mutter-marshal.[ch] | ||||
| src/stamp-mutter-marshal.h | ||||
| src/meta-dbus-xrandr.[ch] | ||||
| src/meta-dbus-idle-monitor.[ch] | ||||
| src/mutter-plugins.pc | ||||
| doc/reference/*.args | ||||
| doc/reference/*.bak | ||||
|   | ||||
| @@ -1,8 +1,12 @@ | ||||
|  | ||||
| SUBDIRS=src po doc | ||||
|  | ||||
| ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} | ||||
|  | ||||
| EXTRA_DIST = HACKING MAINTAINERS rationales.txt | ||||
|  | ||||
| DISTCLEANFILES = intltool-extract intltool-merge intltool-update po/stamp-it po/.intltool-merge-cache | ||||
|  | ||||
| DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc | ||||
|  | ||||
| ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} | ||||
|   | ||||
							
								
								
									
										181
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,3 +1,184 @@ | ||||
| 3.11.2 | ||||
| ====== | ||||
| * Fix resize operations using mouse-button-modifier [Lionel; #710251] | ||||
| * Misc. fixes and cleanups [Jasper, Rico, Florian; #711731] | ||||
|  | ||||
| Contributors: | ||||
|   Lionel Landwerlin, Florian Müllner, Jasper St. Pierre, Rico Tzschichholz | ||||
|  | ||||
| 3.11.1 | ||||
| ====== | ||||
| * Don't require at least one output device to be connected [Giovanni; #709009] | ||||
| * Name the guard window [Andrew; #710346] | ||||
| * Use new UPower API [Bastien] | ||||
| * Expose min-backlight-step [Asad; #710380] | ||||
| * Don't focus the no-focus-window for globally active windows [Jasper; #710296] | ||||
| * Misc. fixes and cleanups [Jasper, Rico, Olav, Magdalen; #709776] | ||||
|  | ||||
| Contributors: | ||||
|   Magdalen Berns, Giovanni Campagna, Asad Mehmood, Bastien Nocera, | ||||
|   Jasper St. Pierre, Rico Tzschichholz, Olav Vitters, Andrew Walton | ||||
|  | ||||
| Translations: | ||||
|   Reinout van Schouwen [nl] | ||||
|  | ||||
| 3.10.1 | ||||
| ====== | ||||
| * Don't apply fullscreen workarounds to CSD windows [Giovanni; #708718] | ||||
| * Fix hangs during DND operations [Adel; #709340] | ||||
| * Use nearest-pixel interpolation when possible [Hans; #708389] | ||||
| * Fix tile previews getting stuck on right click during drags [Lionel; #704759] | ||||
| * Misc bug fixes [Giovanni, Jasper; #708420] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Adel Gadllah, Lionel Landwerlin, Hans Petter Jansson, | ||||
|   Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|   Khaled Hosny [ar], Reinout van Schouwen [nl], Carles Ferrando [ca@valencia] | ||||
|  | ||||
| 3.10.0.1 | ||||
| ======== | ||||
| * Fix bug when a window changed size twice in a single frame - this | ||||
|   can happen with GTK+ client-side decorations [Giovanni, Owen; #708367] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Owen Taylor | ||||
|  | ||||
| 3.10.0 | ||||
| ====== | ||||
|  | ||||
| Translations: | ||||
|   Ask H. Larsen [da], Gabor Kelemen [hu], Duarte Loreto [pt], | ||||
|   Yosef Or Boczko [he] | ||||
|  | ||||
| 3.9.92 | ||||
| ====== | ||||
| * Don't create a dummy texture for the texture pipeline template [Neil; #707458] | ||||
| * Remove holes generated by disabling the laptop lid [Giovanni; #707473] | ||||
| * https://bugzilla.gnome.org/show_bug.cgi?id=707474 [Giovanni; #707474] | ||||
| * Don't require plugins to pass event to Clutter [Giovanni; #707482] | ||||
| * Add support for more cursor types [Giovanni; #707919] | ||||
| * Immediately fire idle watches that are already expired [Giovanni; #707302] | ||||
| * Misc bug fixes [Giovanni, Colin, Pavel; #707649, #707563, #708070] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Adel Gadllah, Colin Guthrie, Neil Roberts, | ||||
|   Jasper St. Pierre, Ray Strode, Pavel Vasin | ||||
|  | ||||
| Translations: | ||||
|   Мирослав Николић po/sr, sr@latin.po, Мирослав Николић [sr, sr@latin], | ||||
|   Chao-Hsiung Liao [zh_HK, zh_TW], Yuri Myasoedov [ru], | ||||
|   Ville-Pekka Vainio [fi], Changwoo Ryu [ko], A S Alam [pa], | ||||
|   Mattias Põldaru [et], Rūdolfs Mazurs [lv], Ihar Hrachyshka [be], | ||||
|   Nilamdyuti Goswami [as], Andika Triwidada [id], Baurzhan Muftakhidinov [kk], | ||||
|   Benjamin Steinwender [de] | ||||
|  | ||||
| 3.9.91 | ||||
| ====== | ||||
| * Drop man pages for removed utilities [Kalev; #706579] | ||||
| * Add support for idle tracking [Giovanni; #706005] | ||||
| * Skip CRTC reconfigurations that have no effect [Giovanni; #706672] | ||||
| * Ignore skip-taskbar hints on parentless dialogs [Giovanni; #673399] | ||||
| * Don't save pixbuf data in user data [Tim; #706777] | ||||
| * Don't queue redraws for obscured regions [Adel; #703332] | ||||
| * Turn blending off when drawing entirely opaque regions [Jasper; #706930] | ||||
| * Check event timestamps before reconfiguring [Giovanni; #706735] | ||||
| * Misc bug fixes [Giovanni, Colin, Seán, Jasper, Cosimo; #706582, #706598, | ||||
|   #706787, #706729, #706825, #707081, #707090, #707250, #707267] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Cosimo Cecchi, Adel Gadllah, Colin Guthrie, Kalev Lember, | ||||
|   Tim Lunn, Jasper St. Pierre, Rico Tzschichholz, Seán de Búrca | ||||
|  | ||||
| Translations: | ||||
|   Piotr Drąg [pl], Alexandre Franke [fr], Kjartan Maraas [nb], | ||||
|   Milo Casagrande [it], Balázs Úr [hu], Seán de Búrca [ga], Fran Diéguez [gl], | ||||
|   Daniel Mustieles [es], Aurimas Černius [lt], Gil Forcada [ca] | ||||
|  | ||||
| 3.9.90 | ||||
| ====== | ||||
| * Add support for _GTK_FRAME_EXTENTS [Jasper; #705766] | ||||
| * Fix quick consecutive <super> presses breaking keyboard input [Alban; #666101] | ||||
| * Work towards running as wayland compositor [Giovanni] | ||||
|  - Add DBus API for display configuration | ||||
|    [#705670, #706231, #706233, #706322, #706382] | ||||
|  - Add abstraction layer for cursor tracking [#705911] | ||||
|  - Add support for plugin modality under wayland [#705917] | ||||
| * Disable GTK+ scaling [Alexander; #706388] | ||||
| * Disable blending while updating tower [Robert] | ||||
| * Misc bug fixes and cleanups [Adel, Jasper, Giovanni, Colin, Rico, Florian; | ||||
|   #703332, #704437, #706207] | ||||
|  | ||||
| Contributors: | ||||
|   Robert Bragg, Giovanni Campagna, Alban Crequy, Adel Gadllah, | ||||
|   Alexander Larsson, Florian Müllner, Jasper St. Pierre, Rico Tzschichholz, | ||||
|   Colin Walters | ||||
|  | ||||
| Translations: | ||||
|   Jiro Matsuzawa [ja], Kjartan Maraas [nb], Matej Urbančič [sl], | ||||
|   Marek Černocký [cs], Daniel Mustieles [es], Rafael Ferreira [pt_BR], | ||||
|   Yaron Shahrabani [he], Ján Kyselica [sk] | ||||
|  | ||||
| 3.9.5 | ||||
| ===== | ||||
| * Don't select for touch events on the stage [Jasper; #697192] | ||||
| * Don't queue redraws for obscured regions [Adel; #703332] | ||||
| * Export timestamp of global keybinding events [Bastien; #704858] | ||||
| * Misc bug fixes and cleanups [Jasper, Rico; #703970] | ||||
|  | ||||
| Contributors: | ||||
|   Adel Gadllah, Bastien Nocera, Jasper St. Pierre, Rico Tzschichholz | ||||
|  | ||||
| 3.9.4 | ||||
| ===== | ||||
| * Tweak window shadows [Allan; #702141] | ||||
| * Ignore our own focus events for focus prediction [Jasper; #701017] | ||||
| * Add API to query if the stage is focused [Jasper; #700735] | ||||
| * Add API to query the monitor for a given position [Adel] | ||||
| * Don't force attached dialogs to be border-only [Florian; #702764] | ||||
| * Allow slicing of backgrounds to avoid texture size limits [Ray; #702283] | ||||
| * Miscellaneous bug fixes and cleanups [Adel; #701224, #702564] | ||||
|  | ||||
| Contributors: | ||||
|   Allan Day, Adel Gadllah, Florian Müllner, Jasper St. Pierre, Ray Strode | ||||
|  | ||||
| 3.9.3 | ||||
| ===== | ||||
| * Ensure events are always reported to the grab window [Rui; #701219] | ||||
| * Use new clutter_stage_set_paint_callback() function to prevent dropping | ||||
|   frames with frame synced toolkits [Owen; #698794] | ||||
|  | ||||
| Contributors: | ||||
|   Rui Matos, Owen W. Taylor | ||||
|  | ||||
| 3.9.2 | ||||
| ===== | ||||
| * Add meta_window_can_close() function [Jasper; #699269] | ||||
| * Add support for string-array preferences [Florian; #700223] | ||||
| * Fix a potential race condition with _NET_WM_MOVERESIZE [Jasper; #699777] | ||||
| * Fix shade window action [Stef; #693714] | ||||
| * Remove overlay_group [Giovanni; #700735] | ||||
| * Improve tracking of the focus window [Dan, Jasper; #647706] | ||||
| * Add API to freeze/unfreeze the keyboard [Rui; #697001] | ||||
| * Grab and emit a signal when XK_ISO_Next_Group is pressed [Rui; #697002] | ||||
| * Misc bug fixes and cleanups [Dieter, Jasper, Rui; #699636, #700735, #697000] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Rui Matos, Florian Müllner, Jasper St. Pierre, | ||||
|   Dieter Verfaillie, Stef Walter, Dan Winship | ||||
|  | ||||
| Translations: | ||||
|   Kjartan Maraas [nb], Ján Kyselica [sk] | ||||
|  | ||||
| 3.9.1 | ||||
| ===== | ||||
| * Fix miscellaneous memory leaks [Pavel; #698710] | ||||
| * Misc fixes and cleanups [Stef, Simon; #698179, #697758] | ||||
|  | ||||
| Contributors: | ||||
|   Simon McVittie, Pavel Vasin, Stef Walter | ||||
|  | ||||
| 3.8.1 | ||||
| ===== | ||||
| * Fix crash when getting default font [Bastien; #696814] | ||||
|   | ||||
							
								
								
									
										22
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -1,8 +1,9 @@ | ||||
| AC_PREREQ(2.50) | ||||
| AC_CONFIG_MACRO_DIR([m4]) | ||||
|  | ||||
| m4_define([mutter_major_version], [3]) | ||||
| m4_define([mutter_minor_version], [8]) | ||||
| m4_define([mutter_micro_version], [1]) | ||||
| m4_define([mutter_minor_version], [11]) | ||||
| m4_define([mutter_micro_version], [2]) | ||||
|  | ||||
| m4_define([mutter_version], | ||||
|           [mutter_major_version.mutter_minor_version.mutter_micro_version]) | ||||
| @@ -12,6 +13,7 @@ m4_define([mutter_plugin_api_version], [3]) | ||||
| AC_INIT([mutter], [mutter_version], | ||||
|         [http://bugzilla.gnome.org/enter_bug.cgi?product=mutter]) | ||||
|  | ||||
| AC_CONFIG_MACRO_DIR([m4]) | ||||
| AC_CONFIG_SRCDIR(src/core/display.c) | ||||
| AC_CONFIG_HEADERS(config.h) | ||||
|  | ||||
| @@ -67,14 +69,16 @@ CANBERRA_GTK_VERSION=0.26 | ||||
| CLUTTER_PACKAGE=clutter-1.0 | ||||
|  | ||||
| MUTTER_PC_MODULES=" | ||||
|    gtk+-3.0 >= 3.3.7 | ||||
|    gtk+-3.0 >= 3.9.11 | ||||
|    gio-2.0 >= 2.25.10 | ||||
|    pango >= 1.2.0 | ||||
|    cairo >= 1.10.0 | ||||
|    gsettings-desktop-schemas >= 3.7.3 | ||||
|    xcomposite >= 0.2 xfixes xrender xdamage xi >= 1.6.0 | ||||
|    $CLUTTER_PACKAGE >= 1.13.5 | ||||
|    cogl-1.0 >= 1.13.3 | ||||
|    $CLUTTER_PACKAGE >= 1.15.90 | ||||
|    cogl-1.0 >= 1.15.6 | ||||
|    upower-glib >= 0.99.0 | ||||
|    gnome-desktop-3.0 | ||||
| " | ||||
|  | ||||
| GLIB_GSETTINGS | ||||
| @@ -118,9 +122,6 @@ AM_GLIB_GNU_GETTEXT | ||||
| ## here we get the flags we'll actually use | ||||
| # GRegex requires Glib-2.14.0 | ||||
| PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.14.0) | ||||
| # gtk_window_set_icon_name requires gtk2+-2.6.0 | ||||
| PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-3.0) | ||||
| PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0) | ||||
|  | ||||
| # Unconditionally use this dir to avoid a circular dep with gnomecc | ||||
| GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings" | ||||
| @@ -307,9 +308,6 @@ if test "x$found_xsync" = "xyes"; then | ||||
| fi | ||||
|  | ||||
| MUTTER_LIBS="$MUTTER_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm" | ||||
| MUTTER_MESSAGE_LIBS="$MUTTER_MESSAGE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" | ||||
| MUTTER_WINDOW_DEMO_LIBS="$MUTTER_WINDOW_DEMO_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm" | ||||
| MUTTER_PROPS_LIBS="$MUTTER_PROPS_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" | ||||
|  | ||||
| found_sm=no | ||||
| case "$MUTTER_LIBS" in | ||||
| @@ -439,10 +437,8 @@ doc/man/Makefile | ||||
| doc/reference/Makefile | ||||
| doc/reference/meta-docs.sgml | ||||
| src/Makefile | ||||
| src/wm-tester/Makefile | ||||
| src/libmutter.pc | ||||
| src/mutter-plugins.pc | ||||
| src/tools/Makefile | ||||
| src/compositor/plugins/Makefile | ||||
| po/Makefile.in | ||||
| ]) | ||||
|   | ||||
| @@ -1,4 +1,3 @@ | ||||
| man_MANS = mutter.1 mutter-theme-viewer.1 \ | ||||
| 	   mutter-window-demo.1 mutter-message.1 | ||||
| man_MANS = mutter.1 | ||||
|  | ||||
| EXTRA_DIST = $(man_MANS) | ||||
|   | ||||
| @@ -1,60 +0,0 @@ | ||||
| .\"                                      Hey, EMACS: -*- nroff -*- | ||||
| .\" First parameter, NAME, should be all caps | ||||
| .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection | ||||
| .\" other parameters are allowed: see man(7), man(1) | ||||
| .\" ----- | ||||
| .\" This file was confirmed to be licenced under the GPL | ||||
| .\" by its author and copyright holder, Akira TAGOH, on June 1st 2008: | ||||
| .\" | ||||
| .\" > I'm comfortable with DFSG-free. that sounds great if you think it's | ||||
| .\" > useful and worth containing it in upstream. | ||||
| .\" ... | ||||
| .\" > Right I know. any licenses that is DFSG-free, I'm ok with whatever, | ||||
| .\" > since I have contributed that for Debian. so GPL is no problem for me. | ||||
| .\" ----- | ||||
| .TH MUTTER\-MESSAGE 1 "28 August 2002" | ||||
| .\" Please adjust this date whenever revising the manpage. | ||||
| .\" | ||||
| .\" Some roff macros, for reference: | ||||
| .\" .nh        disable hyphenation | ||||
| .\" .hy        enable hyphenation | ||||
| .\" .ad l      left justify | ||||
| .\" .ad b      justify to both left and right margins | ||||
| .\" .nf        disable filling | ||||
| .\" .fi        enable filling | ||||
| .\" .br        insert line break | ||||
| .\" .sp <n>    insert n+1 empty lines | ||||
| .\" for manpage-specific macros, see man(7) | ||||
| .SH NAME | ||||
| MUTTER\-MESSAGE \- a command to send a message to Mutter | ||||
| .SH SYNOPSIS | ||||
| .B MUTTER\-MESSAGE | ||||
| [restart|reload\-theme|enable\-keybindings|disable\-keybindings] | ||||
| .SH DESCRIPTION | ||||
| This manual page documents briefly the | ||||
| .B mutter\-message\fP. | ||||
| This manual page was written for the Debian distribution | ||||
| because the original program does not have a manual page. | ||||
| .PP | ||||
| .\" TeX users may be more comfortable with the \fB<whatever>\fP and | ||||
| .\" \fI<whatever>\fP escape sequences to invode bold face and italics,  | ||||
| .\" respectively. | ||||
| \fBmutter\-message\fP send a specified message to \fBmutter\fP(1). | ||||
| .SH OPTIONS | ||||
| .TP | ||||
| .B restart | ||||
| Restart \fBmutter\fP(1) which is running. | ||||
| .TP | ||||
| .B reload-theme | ||||
| Reload a theme which is specified on gsettings database. | ||||
| .TP | ||||
| .B enable-keybindings | ||||
| Enable all of keybindings which is specified on gsettings database. | ||||
| .TP | ||||
| .B disable-keybindings | ||||
| Disable all of keybindings which is specified on gsettings database. | ||||
| .SH SEE ALSO | ||||
| .BR mutter (1) | ||||
| .SH AUTHOR | ||||
| This manual page was written by Akira TAGOH <tagoh@debian.org>, | ||||
| for the Debian GNU/Linux system (but may be used by others). | ||||
| @@ -1,43 +0,0 @@ | ||||
| .\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection | ||||
| .\" other parms are allowed: see man(7), man(1) | ||||
| .\" | ||||
| .\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>. | ||||
| .\"  | ||||
| .TH MUTTER-THEME-VIEWER 1 "1 June 2004"  | ||||
| .SH NAME | ||||
| mutter-theme-viewer \- view mutter themes | ||||
| .SH SYNOPSIS | ||||
| .B mutter-theme-viewer | ||||
| [ | ||||
| .I THEMENAME | ||||
| ] | ||||
| .SH DESCRIPTION | ||||
| .\" Putting a newline after each sentence can generate better output. | ||||
| .B mutter-theme-viewer | ||||
| allows you to preview any installed Mutter theme. | ||||
| .PP | ||||
| When designing a new Mutter theme, you can use | ||||
| .B mutter-theme-viewer | ||||
| to measure the performance of a window frame option, and to preview | ||||
| the option. | ||||
| .SH OPTIONS | ||||
| .TP | ||||
| .I THEMENAME | ||||
| Name of the theme to be shown (\fIAtlanta\fR by default). | ||||
| It is case-sensitive. | ||||
| .SH FILES | ||||
| .br | ||||
| .nf | ||||
| .TP | ||||
| .I /usr/share/themes | ||||
| system themes directory | ||||
| .TP | ||||
| .I /usr/share/themes/*/mutter-1/mutter-theme-1.xml | ||||
| theme specification file | ||||
| .SH AUTHOR | ||||
| This manual page was written by Jose M. Moya <josem@die.upm.es>, for | ||||
| the Debian  GNU/Linux system (but may be used by others). | ||||
| .SH "SEE ALSO" | ||||
| .\" Always quote multiple words for .SH | ||||
| .BR mutter (1), | ||||
| .BR mutter-window-demo (1). | ||||
| @@ -1,25 +0,0 @@ | ||||
| .\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection | ||||
| .\" other parms are allowed: see man(7), man(1) | ||||
| .\" | ||||
| .\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>. | ||||
| .\"  | ||||
| .TH MUTTER-WINDOW-DEMO 1 "1 June 2004"  | ||||
| .SH NAME | ||||
| mutter-window-demo \- demo of window features | ||||
| .SH SYNOPSIS | ||||
| .B mutter-window-demo | ||||
| .SH DESCRIPTION | ||||
| .\" Putting a newline after each sentence can generate better output. | ||||
| This program demonstrates various kinds of windows that window | ||||
| managers and window manager themes should handle. | ||||
| .PP | ||||
| Be sure to tear off the menu and toolbar, those are also a special | ||||
| kind of window. | ||||
| .SH AUTHOR | ||||
| This manual page was written by Jose M. Moya <josem@die.upm.es>, for | ||||
| the Debian  GNU/Linux system (but may be used by others). | ||||
| .SH "SEE ALSO" | ||||
| .\" Always quote multiple words for .SH | ||||
| .BR x-window-manager (1), | ||||
| .BR mutter (1), | ||||
| .BR mutter-theme-viewer (1). | ||||
| @@ -49,8 +49,8 @@ FIXXREF_OPTIONS= | ||||
| # Used for dependencies. The docs will be rebuilt if any of these change. | ||||
| # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h | ||||
| # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c | ||||
| HFILE_GLOB=$(top_srcdir)/src/*.h | ||||
| CFILE_GLOB=$(top_srcdir)/src/*.c | ||||
| HFILE_GLOB=$(top_srcdir)/src/*/*.h | ||||
| CFILE_GLOB=$(top_srcdir)/src/*/*.c | ||||
|  | ||||
| # Extra header to include when scanning, which are not under DOC_SOURCE_DIR | ||||
| # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h | ||||
|   | ||||
| @@ -96,8 +96,6 @@ meta_compositor_hide_window | ||||
| meta_compositor_switch_workspace | ||||
| meta_compositor_maximize_window | ||||
| meta_compositor_unmaximize_window | ||||
| meta_compositor_window_mapped | ||||
| meta_compositor_window_unmapped | ||||
| meta_compositor_sync_window_geometry | ||||
| meta_compositor_set_updates_frozen | ||||
| meta_compositor_queue_frame_drawn | ||||
| @@ -207,7 +205,6 @@ meta_key_binding_get_modifiers | ||||
| meta_key_binding_get_mask | ||||
| meta_key_binding_is_builtin | ||||
| meta_keybindings_set_custom_handler | ||||
| meta_keybindings_switch_window | ||||
| meta_screen_ungrab_all_keys | ||||
| meta_screen_grab_all_keys | ||||
| </SECTION> | ||||
| @@ -389,6 +386,23 @@ MetaWindowActorPrivate | ||||
| meta_window_actor_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>meta-cullable</FILE> | ||||
| <TITLE>MetaCullable</TITLE> | ||||
| MetaCullable | ||||
| MetaCullableInterface | ||||
| meta_cullable_cull_out | ||||
| meta_cullable_reset_culling | ||||
| meta_cullable_cull_out_children | ||||
| meta_cullable_reset_culling_children | ||||
| <SUBSECTION Standard> | ||||
| META_TYPE_CULLABLE | ||||
| META_CULLABLE | ||||
| META_IS_CULLABLE | ||||
| META_CULLABLE_GET_IFACE | ||||
| meta_cullable_get_type | ||||
| </SECTION> | ||||
|  | ||||
| <SECTION> | ||||
| <FILE>prefs</FILE> | ||||
| MetaPreference | ||||
| @@ -409,7 +423,6 @@ meta_prefs_get_theme | ||||
| meta_prefs_get_titlebar_font | ||||
| meta_prefs_get_num_workspaces | ||||
| meta_prefs_get_dynamic_workspaces | ||||
| meta_prefs_get_application_based | ||||
| meta_prefs_get_disable_workarounds | ||||
| meta_prefs_get_auto_raise | ||||
| meta_prefs_get_auto_raise_delay | ||||
| @@ -543,7 +556,10 @@ meta_window_is_override_redirect | ||||
| meta_window_is_skip_taskbar | ||||
| meta_window_get_rect | ||||
| meta_window_get_input_rect | ||||
| meta_window_get_frame_rect | ||||
| meta_window_get_outer_rect | ||||
| meta_window_client_rect_to_frame_rect | ||||
| meta_window_frame_rect_to_client_rect | ||||
| meta_window_get_screen | ||||
| meta_window_get_display | ||||
| meta_window_get_xwindow | ||||
|   | ||||
| @@ -21,6 +21,7 @@ environment.</description> | ||||
|   --> | ||||
|   <mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-shell-list" /> | ||||
|   <download-page rdf:resource="http://download.gnome.org/sources/mutter/" /> | ||||
|   <download-page rdf:resource="http://download.gnome.org/sources/mutter-wayland/" /> | ||||
|   <bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=mutter" /> | ||||
|  | ||||
|   <category rdf:resource="http://api.gnome.org/doap-extensions#desktop" /> | ||||
|   | ||||
| @@ -44,6 +44,7 @@ is | ||||
| it | ||||
| ja | ||||
| ka | ||||
| kk | ||||
| kn | ||||
| ko | ||||
| ku | ||||
|   | ||||
| @@ -12,6 +12,7 @@ src/core/display.c | ||||
| src/core/errors.c | ||||
| src/core/keybindings.c | ||||
| src/core/main.c | ||||
| src/core/monitor.c | ||||
| src/core/mutter.c | ||||
| src/core/prefs.c | ||||
| src/core/screen.c | ||||
| @@ -23,12 +24,9 @@ src/core/xprops.c | ||||
| src/mutter.desktop.in | ||||
| src/mutter-wm.desktop.in | ||||
| src/org.gnome.mutter.gschema.xml.in | ||||
| src/tools/mutter-message.c | ||||
| src/ui/frames.c | ||||
| src/ui/menu.c | ||||
| src/ui/metaaccellabel.c | ||||
| src/ui/resizepopup.c | ||||
| src/ui/theme.c | ||||
| src/ui/theme-parser.c | ||||
| src/ui/theme-viewer.c | ||||
|  | ||||
|   | ||||
							
								
								
									
										441
									
								
								po/be.po
									
									
									
									
									
								
							
							
						
						
									
										441
									
								
								po/be.po
									
									
									
									
									
								
							| @@ -1,10 +1,10 @@ | ||||
| # Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2011. | ||||
| # Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2011, 2013. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter.master\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-01 15:50+0000\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2012-10-13 17:44+0300\n" | ||||
| "Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n" | ||||
| "Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n" | ||||
| @@ -206,7 +206,7 @@ msgstr "Падзяліць прагляд справа" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:507 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -214,11 +214,11 @@ msgid "" | ||||
| msgstr "" | ||||
| "Іншы кампазітны кіраўнік вокнаў ужо абслугоўвае экран %i дысплея \"%s\"." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1111 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "не ўдалося стварыць фонавую тэкстуру з файла" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "Падзея з сігналам" | ||||
|  | ||||
| @@ -251,18 +251,18 @@ msgstr "_Пачакаць" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Змусіць да выхаду" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "" | ||||
| "Адсутнічае пашырэнне \"%s\", патрэбнае для ажыццяўлення кампазітнага вываду" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Не ўдалося адкрыць X-дысплей аконнай сістэмы \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -271,41 +271,41 @@ msgstr "" | ||||
| "Нейкая іншая праграма ўжо выкарыстоўвае як скарот клавішу %s з " | ||||
| "мадыфікатарамі %x\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\" - гэта хібны клавіятурны скарот\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Выключыць злучэнне з кіраўніком сеансаў" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Замяніць дзейнага кіраўніка вокнаў" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Вызначыць ідэнтыфікатар для кіравання сеансам" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "Патрэбны X-дысплей" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Ініцыяваць сеанс з файла" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Сінхронна выконваць выклікі X-сістэмы" | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Не ўдалося праглядзець каталог з матывамі аздаблення: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -313,6 +313,19 @@ msgstr "" | ||||
| "Не ўдалося адшукаць матыў аздаблення! Праверце, каб каталог %s існаваў і " | ||||
| "змяшчаў звычайныя матывы.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Убудаваны дысплей" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "Невядомы %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -337,7 +350,7 @@ msgstr "Вывесці нумар версіі праграмы" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Патрэбны плугін Mutter" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -345,12 +358,12 @@ msgstr "" | ||||
| "Асаблівыя паводзіны для некаторых хібных праграм выключаныя. Некаторыя " | ||||
| "праграмы могуць перастаць працаваць, як мае быць.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Не ўдалося разабраць азначэнне шрыфту \"%s\" з GSettings-ключа %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -359,7 +372,7 @@ msgstr "" | ||||
| "Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае " | ||||
| "мадыфікатар мышынай кнопкі\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -368,17 +381,17 @@ msgstr "" | ||||
| "Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае " | ||||
| "клавіятурны скарот \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Прастора працы %d" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Экран %d на дысплеі \"%s\" хібны\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -387,19 +400,19 @@ msgstr "" | ||||
| "Экран %d на дысплеі \"%s\" ужо мае аконнага кіраўніка. Каб замяніць яго " | ||||
| "новым, дадайце опцыю --replace.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "" | ||||
| "Не ўдалося пераняць вылучэнне кіраўніка вокнаў для экрана %d дысплея \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Экран %d на дысплеі \"%s\" ужо мае кіраўніка вокнаў\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Не ўдалося вызваліць экран %d на дысплеі \"%s\"\n" | ||||
| @@ -460,46 +473,45 @@ msgstr "" | ||||
| "Гэтыя вокны не падтрымліваюць функцыі захавання дзейнага ладу працы, і таму " | ||||
| "іх прыйдзецца запусціць уручную пасля наступнага ўваходу ў сістэму." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Не ўдалося адкрыць адладачны журнал: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "Не ўдалося выканаць fdopen() для журнальнага файла %s: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Журнальны файл %s адкрыты\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "" | ||||
| "Праграма \"Mutter\" была скампіляваная без падтрымкі падрабязнага " | ||||
| "пратакаліравання\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "Кіраўнік вокнаў: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Хіба ў кіраўніку вокнаў: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Перасцярога ад кіраўніка вокнаў: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Памылка кіраўніка вокнаў: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7539 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -515,7 +527,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8263 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -525,22 +537,22 @@ msgstr "" | ||||
| "памеру, але разам з гэтым прызначыла для сябе мінімальны памер %d x %d і " | ||||
| "максімальны памер %d x %d. Такія паводзіны не маюць сэнсу.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Праграма прызначыла памылковае значэнне _NET_WM_PID %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (на %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Для %2$s вызначана хібнае акно WM_TRANSIENT_FOR 0x%1$lx.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR акно 0x%lx для %s стварыла б цыкл.\n" | ||||
| @@ -689,7 +701,8 @@ msgstr "" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:17 | ||||
| msgid "Auto maximize nearly monitor sized windows" | ||||
| msgstr "Аўтаматычна максімалізаваць вокны, якія расцягнутыя амаль на ўвесь экран" | ||||
| msgstr "" | ||||
| "Аўтаматычна максімалізаваць вокны, якія расцягнутыя амаль на ўвесь экран" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:18 | ||||
| msgid "" | ||||
| @@ -707,109 +720,104 @@ msgstr "Выбраць акно з выплыўнога акенца" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Закрыць выплыўное акенца" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Правілы выкарыстання: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "_Мінімалізаваць" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Ма_ксімалізаваць" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "Скасаваць ма_ксімалізацыю" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "_Скруціць акно ў загаловак" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "Рас_круціць акно з загалоўка" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "_Перамясціць акно" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "_Змяніць памер акна" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Перамясціць загаловак акна па _экране" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "Заўсёды _наверсе" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "Заўсёды на _бачнай прасторы працы" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "_Толькі на гэтай прасторы працы" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Перамясціць на прастору працы з_лева" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Перамясціць на прастору працы с_права" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Перамясціць на прастору працы з_верху" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Перамясціць на прастору працы з_нізу" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Закрыць акно" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Прастора працы %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Прастора працы 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Прастора працы %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "П_ерамясціць на іншую прастору працы" | ||||
|  | ||||
| @@ -911,49 +919,49 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "верхнюю" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "ніжнюю" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "левую" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "правую" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "апісанне геаметрыі рамкі акна не вызначае %s граніцу" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "" | ||||
| "апісанне геаметрыі рамкі акна не вызначае %s граніцу для аблямоўкі \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "Прапорцыі кнопкі %g не маюць сэнсу" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "Апісанне геаметрыі рамкі акна не вызначае памер кнопак" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Градыент мусіць мець прынамсі два колеры" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -962,7 +970,7 @@ msgstr "" | ||||
| "Уласная спецыфікацыя колеру GTK мусіць змяшчаць назвы асноўнага і запаснога " | ||||
| "колераў у дужках, напрыклад, gtk:custom(foo,bar). Не ўдалося разабраць \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -971,7 +979,7 @@ msgstr "" | ||||
| "Хібны знак \"%c\" у параметры color_name спецыфікацыі gtk:custom, дазволеныя " | ||||
| "толькі A-Za-z0-9-_" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -980,7 +988,7 @@ msgstr "" | ||||
| "Фармат gtk:custom: \"gtk:custom(назва_колеру,запасны_колер)\"; \"%s\" не " | ||||
| "адпавядае фармату" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -989,7 +997,7 @@ msgstr "" | ||||
| "Спецыфікацыя колеру GTK мусіць мець стан у квадратных дужках, напрыклад, gtk:" | ||||
| "fg[NORMAL], дзе NORMAL - гэта стан. Не ўдалося разабраць \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -999,17 +1007,17 @@ msgstr "" | ||||
| "напрыклад, gtk:fg[NORMAL], дзе NORMAL - гэта стан. Не ўдалося разабраць \"%s" | ||||
| "\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Незразумелы стан \"%s\" у спецыфікацыі колеру" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "Незразумелы складнік колеру \"%s\" у спецыфікацыі колеру" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1018,58 +1026,58 @@ msgstr "" | ||||
| "Фармат змяшанага колеру - \"blend/bg_color/fg_color/alpha\". \"%s\" не " | ||||
| "адпавядае фармату." | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Не ўдалося разабраць значэнне альфа \"%s\" ў змяшаным колеры" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "" | ||||
| "Значэнне альфа \"%s\" у змяшаным колеры не ўваходзіць у дыяпазон ад 0.0 да " | ||||
| "1.0" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| msgstr "" | ||||
| "Фармат ценю - \"shade/base_color/factor\". \"%s\" не адпавядае фармату." | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "Не ўдалося разабраць каэфіцыент ценю \"%s\" у зацененым колеры" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Каэфіцыент ценю \"%s\" у зацененым колеры адмоўны" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Не ўдалося разабраць колер \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Каардынатны выраз змяшчае забаронены знак \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "Каардынатны выраз змяшчае незразумелы лік з нефіксаванай коскай \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "Каардынатны выраз змяшчае незразумелы цэлы лік \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -1077,17 +1085,17 @@ msgid "" | ||||
| msgstr "" | ||||
| "Каардынатны выраз змяшчае невядомы аператар у пачатку гэтага тэксту: \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "Каардынатны выраз пусты ці незразумелы" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "Каардынатны выраз вымагае дзялення на нуль" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| @@ -1095,24 +1103,24 @@ msgstr "" | ||||
| "Каардынатны выраз спрабуе ўжыць аператар дзялення па модулі для ліку з " | ||||
| "нефіксаванай коскай" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "" | ||||
| "У каардынатным выразе ўжыты аператар \"%s\" там, дзе мусіў быць аперанд" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "У каардынатным выразе ўжыты аперанд там, дзе мусіў быць аператар" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "Каардынатны выраз заканчваецца аператарам, а не аперандам" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1121,41 +1129,41 @@ msgstr "" | ||||
| "У каардынатным выразе за аператарам \"%c\" ідзе аператар \"%c\", але паміж " | ||||
| "імі няма аперанда" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "У каардынатным выразе невядомая зменная альбо канстанта \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "Прылада для разбору каардынатных выразаў перапоўніла свой буфер." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "" | ||||
| "У каардынатным выразе ўжытыя дужкі, якія закрываюцца, але няма тых, якія б " | ||||
| "адкрываліся" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "" | ||||
| "У каардынатным выразе ўжытыя дужкі, якія адкрываюцца, але няма тых, якія б " | ||||
| "закрываліся" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "У каардынатным выразе няма ні аператараў, ні аперандаў" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Матыў аздаблення змяшчае выраз, які стаў прычынай памылкі: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1164,25 +1172,25 @@ msgstr "" | ||||
| "Для гэтага стылю рамкі трэба вызначыць <button function=\"%s\" state=\"%s\" " | ||||
| "draw_ops=\"whatever\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "" | ||||
| "Няма <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"што-небудзь\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Не ўдалося загрузіць матыў аздаблення \"%s\": %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "Для матыву аздаблення \"%2$s\" не прызначана <%1$s>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1191,7 +1199,7 @@ msgstr "" | ||||
| "Стыль рамкі не вызначаны для вокнаў тыпу \"%s\" для матыву аздаблення \"%s" | ||||
| "\". Дадайце <window type=\"%s\" style_set=\"штосьці\"/>." | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| @@ -1199,7 +1207,7 @@ msgstr "" | ||||
| "Назвы канстантаў, вызначаных карыстальнікам, мусяць пачынацца з вялікай " | ||||
| "літары. \"%s\" не адпавядае гэтаму патрабаванню." | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Канстанта \"%s\" ужо азначана" | ||||
| @@ -1585,207 +1593,8 @@ msgstr "Выкарыстанне тэксту ўнутры элемента <%s> | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> двойчы вызначаны для гэтага матыву аздаблення" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Памылка пошуку правільнага файла для матыву аздаблення %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Вокны" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Мадальнае дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Дапаможная праграма" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Экранная застаўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Верхняя ўбудова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Ніжняя ўбудова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "_Левая ўбудова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "_Правая ўбудова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "_Усе ўбудовы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "_Стол" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Адкрыць чарговае з гэтых вокнаў" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Гэта дэманстрацыйная кнопка са значком \"Адкрыць\"" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Гэта дэманстрацыйная кнопка са значком \"Выйсці\"" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Гэта ўзорнае паведамленне ва ўзорным дыялогавым акенцы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Несапраўдны пункт меню %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Акно толькі з аблямоўкай" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Стужка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Звычайнае акно праграмы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Мадальнае дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Дапаможная палітра" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Адчэпленае меню" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Аблямоўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Прычапленае мадальнае дыялогавае акенца" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Выпрабаванне размяшчэння кнопак %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g мілісекунд, каб намаляваць адну рамку акна" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Правілы карыстання: metacity-theme-viewer [НАЗВА_МАТЫВУ]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Памылка загрузкі матыву аздаблення: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Матыў аздаблення \"%s\" загружаны за %g секунд\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Звычайны шрыфт загалоўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Маленькі шрыфт загалоўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Вялікі шрыфт загалоўка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Размяшчэнне кнопак" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Выпрабаванне" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Месца для загалоўка акна" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Намалявана %d рамак цягам %g секунд кліенцкага часу (%g мілісекунд на рамку) " | ||||
| "і %g секунд каляндарнага часу, уключна з рэсурсамі X-сервера (%g мілісекунд " | ||||
| "на рамку)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "выпрабаванне выразу пазіцыі вярнула TRUE, але паведаміла аб памылцы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "" | ||||
| "выпрабаванне выразу пазіцыі вярнула FALSE, але не паведаміла аб памылцы" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Чакалася памылка, але звесткі не атрыманыя" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Чакалася памылка %d, але атрымана %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Атрымана нечаканая памылка: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "X-значэнне было %d, а чакалася %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "Y-значэнне было %d, а чакалася %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "%d каардынатных выразаў разабраныя за %g секунд (у сярэднім %g секунд)\n" | ||||
|   | ||||
							
								
								
									
										2834
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
							
						
						
									
										2834
									
								
								po/ca@valencia.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										353
									
								
								po/cs.po
									
									
									
									
									
								
							
							
						
						
									
										353
									
								
								po/cs.po
									
									
									
									
									
								
							| @@ -6,22 +6,23 @@ | ||||
| # Petr Tomeš <ptomes@gmail.com>, 2006. | ||||
| # Jakub Friedl <jfriedl@suse.cz>, 2006, 2007. | ||||
| # Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009, 2010, 2011, 2012, 2013. | ||||
| # Marek Černocký <marek@manet.cz>, 2012. | ||||
| # Marek Černocký <marek@manet.cz>, 2012, 2013. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter" | ||||
| "&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-22 10:02+0000\n" | ||||
| "PO-Revision-Date: 2013-03-24 20:55+0200\n" | ||||
| "Last-Translator: Petr Kovar <pknbe@volny.cz>\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-08-20 08:50+0200\n" | ||||
| "Last-Translator: Marek Černocký <marek@manet.cz>\n" | ||||
| "Language-Team: Czech <gnome-cs-list@gnome.org>\n" | ||||
| "Language: cs\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" | ||||
| "X-Generator: Virtaal 0.7.1\n" | ||||
| "X-Generator: Gtranslator 2.91.6\n" | ||||
| "X-Project-Style: gnome\n" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| @@ -186,7 +187,8 @@ msgstr "Přepnout výskyt okna na všech plochách nebo jen na jedné" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:13 | ||||
| msgid "Raise window if covered, otherwise lower it" | ||||
| msgstr "Přenést okno do popředí, pokud je zakryté, jinak jej odsunout do pozadí" | ||||
| msgstr "" | ||||
| "Přenést okno do popředí, pokud je zakryté, jinak jej odsunout do pozadí" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:14 | ||||
| msgid "Raise window above other windows" | ||||
| @@ -214,14 +216,14 @@ msgstr "Zobrazit rozdělení napravo" | ||||
|  | ||||
| #. 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:568 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "Jiný kompozitní správce již běží na obrazovce %i displeje „%s“." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1191 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "textura pozadí nemohla být ze souboru vytvořena" | ||||
|  | ||||
| @@ -259,17 +261,17 @@ msgstr "_Počkat" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Vynutit ukončení" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Schází rozšíření %s vyžadované funkcemi kompozitoru" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Nelze otevřít displej X Window System „%s“\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:935 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -277,9 +279,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Klávesu %s s modifikátory %x již jako zkratku používá nějaký jiný program\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1135 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| #| msgid "\"%s\" is not a valid value for focus attribute" | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "„%s“ není platný akcelerátor\n" | ||||
|  | ||||
| @@ -320,6 +321,19 @@ msgstr "" | ||||
| "Nelze najít motiv! Ujistěte se prosím, že existuje %s a obsahuje obvyklé " | ||||
| "motivy.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Vestavěný displej" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "Neznámý %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -344,7 +358,7 @@ msgstr "Vypíše verzi" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Zásuvný modul Mutter, který se má použít" | ||||
|  | ||||
| #: ../src/core/prefs.c:1095 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -352,12 +366,12 @@ msgstr "" | ||||
| "Bylo zakázáno obcházení chyb aplikací. Některé aplikace se možná nebudou " | ||||
| "chovat správně.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1170 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Nelze zpracovat popis písma „%s“ v klíči GSettings %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1236 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -366,7 +380,7 @@ msgstr "" | ||||
| "„%s“ nalezené v databázi nastavení není platnou hodnotou modifikátoru " | ||||
| "tlačítka myši\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1788 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -375,17 +389,17 @@ msgstr "" | ||||
| "„%s“ nalezené v databázi nastavení není platnou hodnotou klávesové zkratky " | ||||
| "„%s“\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1887 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Plocha %d" | ||||
|  | ||||
| #: ../src/core/screen.c:691 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Obrazovka %d na displeji „%s“ je neplatná\n" | ||||
|  | ||||
| #: ../src/core/screen.c:707 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -394,18 +408,18 @@ msgstr "" | ||||
| "Obrazovka %d na displeji „%s“ již správce oken má; zkuste prosím nahradit " | ||||
| "aktuálního správce oken pomocí přepínače --replace.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:734 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "Nelze získat výběr správce oken na obrazovce %d displeje „%s“\n" | ||||
|  | ||||
| #: ../src/core/screen.c:812 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Obrazovka %d na displeji „%s“ již má správce oken\n" | ||||
|  | ||||
| #: ../src/core/screen.c:998 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Nelze uvolnit obrazovku %d na displeji „%s“\n" | ||||
| @@ -480,8 +494,7 @@ msgstr "Nelze provést fdopen() soubor záznamu %s: %s\n" | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Otevřen soubor záznamu %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:119 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter bylo přeloženo bez podpory podrobného režimu\n" | ||||
|  | ||||
| @@ -489,20 +502,20 @@ msgstr "Mutter bylo přeloženo bez podpory podrobného režimu\n" | ||||
| msgid "Window manager: " | ||||
| msgstr "Správce oken: " | ||||
|  | ||||
| #: ../src/core/util.c:412 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Chyba ve správci oken: " | ||||
|  | ||||
| #: ../src/core/util.c:443 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Varování správce oken: " | ||||
|  | ||||
| #: ../src/core/util.c:471 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Chyba správce oken: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7596 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -518,7 +531,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8320 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -528,22 +541,22 @@ msgstr "" | ||||
| "velikost, ale nastavuje min. velikost %d × %d a max. velikost %d × %d; to " | ||||
| "nedává smysl.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Aplikace nastavila neplatný _NET_WM_PID %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (na %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Neplatné okno WM_TRANSIENT_FOR 0x%lx specifikováno pro %s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "Okno WM_TRANSIENT_FOR 0x%lx by vytvořilo smyčku pro %s.\n" | ||||
| @@ -707,109 +720,104 @@ msgstr "Vybrat okno z překryvné nabídky tabulátoru" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Zrušit překryvné okno tabulátoru" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Použití: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "Mi_nimalizovat" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Ma_ximalizovat" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "Zrušit ma_ximalizaci" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "Sv_inout" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "Rozv_inout" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "_Přesunout" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "Z_měnit velikost" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Přesunout záhlaví okna na _obrazovku" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "_Vždy navrchu" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "Vžd_y na viditelné ploše" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "_Jen na této ploše" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Přesunout na plochu v_levo" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Přesunout na plochu vp_ravo" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Přesunout na plochu na_hoře" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Přesunout na plochu _dole" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Zavřít" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Plocha %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Plocha 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Plocha %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Přes_unout na jinou plochu" | ||||
|  | ||||
| @@ -985,8 +993,8 @@ msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| "where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "Specifikace GTK barvy musí mít stav v hranatých závorkách, např. gtk:fg" | ||||
| "[NORMAL], kde NORMAL je stav; nelze analyzovat „%s“" | ||||
| "Specifikace GTK barvy musí mít stav v hranatých závorkách, např. gtk:" | ||||
| "fg[NORMAL], kde NORMAL je stav; nelze analyzovat „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| @@ -994,8 +1002,8 @@ msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| "fg[NORMAL] where NORMAL is the state; could not parse \"%s\"" | ||||
| msgstr "" | ||||
| "Specifikace GTK barvy musí mít za stavem hranatou závorku, např. gtk:fg" | ||||
| "[NORMAL], kde NORMAL je stav; nelze analyzovat „%s“" | ||||
| "Specifikace GTK barvy musí mít za stavem hranatou závorku, např. gtk:" | ||||
| "fg[NORMAL], kde NORMAL je stav; nelze analyzovat „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| @@ -1165,18 +1173,18 @@ msgid "" | ||||
| msgstr "" | ||||
| "Chybí <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"cokoliv\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5084 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Nelze načíst motiv „%s“: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5220 ../src/ui/theme.c:5227 ../src/ui/theme.c:5234 | ||||
| #: ../src/ui/theme.c:5241 ../src/ui/theme.c:5248 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "Není nastaveno <%s> motivu „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:5256 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1185,7 +1193,7 @@ msgstr "" | ||||
| "U typu okna „%s“ motivu „%s“ není nastaven typ rámu, přidejte prosím prvek " | ||||
| "<window type=\"%s\" style_set=\"cokoliv\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5663 ../src/ui/theme.c:5725 ../src/ui/theme.c:5788 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| @@ -1193,7 +1201,7 @@ msgstr "" | ||||
| "Uživatelem definované konstanty musí začínat velkým písmenem; „%s“ toto " | ||||
| "nesplňuje" | ||||
|  | ||||
| #: ../src/ui/theme.c:5671 ../src/ui/theme.c:5733 ../src/ui/theme.c:5796 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Konstanta „%s“ již byla definována" | ||||
| @@ -1572,205 +1580,4 @@ msgstr "<%s> u tohoto motivu definováno dvakrát" | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Nelze nalézt platný soubor motivu %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Okna" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Dialogové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Modální dialogové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Nástroje" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Spouštěcí obrazovka" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Horní dok" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "Dolní do_k" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "_Levý dok" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "P_ravý dok" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "_Všechny doky" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "Pra_covní prostředí" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Otevřít další takové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Toto je demonstrační tlačítko s ikonou „otevřít“" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Toto je demonstrační tlačítko s ikonou „ukončit“" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Toto je ukázková zpráva v ukázkovém dialogu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Falešná položka nabídky %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Okno jen s okrajem" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Lišta" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Normální okno aplikace" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Dialogové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Modální dialogové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Paleta nástrojů" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Odtržení nabídky" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Okraj" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Připojené modální dialogové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Test rozložení tlačítek %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g milisekund na nakreslení jednoho rámu okna" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Použití: metacity-theme-viewer [NÁZEVMOTIVU]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Chyba při načítání motivu: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Načten motiv „%s“ za %g sekund\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Normální písmo nadpisu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Malé písmo nadpisu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Velké písmo nadpisu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Rozložení tlačítek" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Test výkonnosti" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Sem patří nadpis okna" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Nakresleno %d rámů za %g sekund na straně klienta (%g milisekund na rám) a " | ||||
| "%g sekund reálného času včetně zdrojů serveru X (%g milisekund na rám)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "test výrazu umístění vrátil TRUE, ale nastavil chybu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "test výrazu umístění vrátil FALSE, ale nenastavil chybu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Byla očekávána chyba, ale nebyla přijata" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Byla očekávána chyba %d, ale bylo přijato %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Chyba nebyla očekávána, ale byla vrácena: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "Hodnota x byla %d, bylo očekáváno %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "Hodnota y byla %d, bylo očekáváno %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "Zpracováno %d výrazů souřadnic za %g sekund (průměr %g sekund)\n" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Minimize window" | ||||
| #~ msgstr "Minimalizovat okno" | ||||
| msgstr "Nelze nalézt platný soubor motivu %s\n" | ||||
							
								
								
									
										231
									
								
								po/et.po
									
									
									
									
									
								
							
							
						
						
									
										231
									
								
								po/et.po
									
									
									
									
									
								
							| @@ -14,8 +14,8 @@ msgstr "" | ||||
| "Project-Id-Version: mutter MASTER\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-12 18:53+0000\n" | ||||
| "PO-Revision-Date: 2013-03-12 20:55+0300\n" | ||||
| "POT-Creation-Date: 2013-09-10 15:25+0000\n" | ||||
| "PO-Revision-Date: 2013-09-11 23:20+0300\n" | ||||
| "Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n" | ||||
| "Language-Team: Estonian <>\n" | ||||
| "Language: et\n" | ||||
| @@ -23,6 +23,7 @@ msgstr "" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n!=1);\n" | ||||
| "X-Generator: Poedit 1.5.4\n" | ||||
|  | ||||
| msgid "Navigation" | ||||
| msgstr "Navigeerimine" | ||||
| @@ -249,6 +250,17 @@ msgid "" | ||||
| msgstr "" | ||||
| "Teemat ei leitud! Veendu, et %s on olemas ja sisaldab harilikke teemasid.\n" | ||||
|  | ||||
| msgid "Built-in display" | ||||
| msgstr "Sisseehitatud kuva" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "Tundmatu %s" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "mutter %s\n" | ||||
| @@ -381,7 +393,6 @@ msgstr "Tõrge logifaili %s avamisel funktsiooniga fdopen(): %s\n" | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Avati logifail %s\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter kompileeriti ilma jutuka režiimi toeta\n" | ||||
|  | ||||
| @@ -572,10 +583,6 @@ msgstr "Akna valimine tabulaatori hüpikaknalt" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Tabulaatori hüpikakna katkestamine" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Kasutamine: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| msgid "Mi_nimize" | ||||
| msgstr "_Minimeeri" | ||||
| @@ -1281,159 +1288,151 @@ msgstr "Selle teema jaoks on <%s> määratud kaks korda" | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Tõrge %s teema jaoks korrektse faili leidmisel\n" | ||||
|  | ||||
| msgid "_Windows" | ||||
| msgstr "_Aknad" | ||||
| #~ msgid "Usage: %s\n" | ||||
| #~ msgstr "Kasutamine: %s\n" | ||||
|  | ||||
| msgid "_Dialog" | ||||
| msgstr "_Dialoog" | ||||
| #~ msgid "_Windows" | ||||
| #~ msgstr "_Aknad" | ||||
|  | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Modaaldialoog" | ||||
| #~ msgid "_Dialog" | ||||
| #~ msgstr "_Dialoog" | ||||
|  | ||||
| msgid "_Utility" | ||||
| msgstr "_Utiliit" | ||||
| #~ msgid "_Modal dialog" | ||||
| #~ msgstr "_Modaaldialoog" | ||||
|  | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Käivitusekraan" | ||||
| #~ msgid "_Utility" | ||||
| #~ msgstr "_Utiliit" | ||||
|  | ||||
| msgid "_Top dock" | ||||
| msgstr "Ü_lemine dokk" | ||||
| #~ msgid "_Splashscreen" | ||||
| #~ msgstr "_Käivitusekraan" | ||||
|  | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Alumine dokk" | ||||
| #~ msgid "_Top dock" | ||||
| #~ msgstr "Ü_lemine dokk" | ||||
|  | ||||
| msgid "_Left dock" | ||||
| msgstr "_Vasak dokk" | ||||
| #~ msgid "_Bottom dock" | ||||
| #~ msgstr "_Alumine dokk" | ||||
|  | ||||
| msgid "_Right dock" | ||||
| msgstr "_Parem dokk" | ||||
| #~ msgid "_Left dock" | ||||
| #~ msgstr "_Vasak dokk" | ||||
|  | ||||
| msgid "_All docks" | ||||
| msgstr "_Kõik dokid" | ||||
| #~ msgid "_Right dock" | ||||
| #~ msgstr "_Parem dokk" | ||||
|  | ||||
| msgid "Des_ktop" | ||||
| msgstr "_Töölaud" | ||||
| #~ msgid "_All docks" | ||||
| #~ msgstr "_Kõik dokid" | ||||
|  | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Ava neist akendest järgmine" | ||||
| #~ msgid "Des_ktop" | ||||
| #~ msgstr "_Töölaud" | ||||
|  | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "See on näidisnupp koos 'ava' ikooniga" | ||||
| #~ msgid "Open another one of these windows" | ||||
| #~ msgstr "Ava neist akendest järgmine" | ||||
|  | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "See on näidisnupp koos 'lõpeta' ikooniga" | ||||
| #~ msgid "This is a demo button with an 'open' icon" | ||||
| #~ msgstr "See on näidisnupp koos 'ava' ikooniga" | ||||
|  | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "See on näidisteade näidisdialoogis" | ||||
| #~ msgid "This is a demo button with a 'quit' icon" | ||||
| #~ msgstr "See on näidisnupp koos 'lõpeta' ikooniga" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Võltsitud menüüpunkt %d\n" | ||||
| #~ msgid "This is a sample message in a sample dialog" | ||||
| #~ msgstr "See on näidisteade näidisdialoogis" | ||||
|  | ||||
| msgid "Border-only window" | ||||
| msgstr "Ainult raamiga aken" | ||||
| #~ msgid "Fake menu item %d\n" | ||||
| #~ msgstr "Võltsitud menüüpunkt %d\n" | ||||
|  | ||||
| msgid "Bar" | ||||
| msgstr "Riba" | ||||
| #~ msgid "Border-only window" | ||||
| #~ msgstr "Ainult raamiga aken" | ||||
|  | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Tavaline rakenduseaken" | ||||
| #~ msgid "Bar" | ||||
| #~ msgstr "Riba" | ||||
|  | ||||
| msgid "Dialog Box" | ||||
| msgstr "Dialoogikast" | ||||
| #~ msgid "Normal Application Window" | ||||
| #~ msgstr "Tavaline rakenduseaken" | ||||
|  | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Modaalne dialoogikast" | ||||
| #~ msgid "Dialog Box" | ||||
| #~ msgstr "Dialoogikast" | ||||
|  | ||||
| msgid "Utility Palette" | ||||
| msgstr "Rakendite palett" | ||||
| #~ msgid "Modal Dialog Box" | ||||
| #~ msgstr "Modaalne dialoogikast" | ||||
|  | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Ärarebitav menüü" | ||||
| #~ msgid "Utility Palette" | ||||
| #~ msgstr "Rakendite palett" | ||||
|  | ||||
| msgid "Border" | ||||
| msgstr "Raam" | ||||
| #~ msgid "Torn-off Menu" | ||||
| #~ msgstr "Ärarebitav menüü" | ||||
|  | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Kinnistatud modaaldialoog" | ||||
| #~ msgid "Border" | ||||
| #~ msgstr "Raam" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Nuppude paigutuse test %d" | ||||
| #~ msgid "Attached Modal Dialog" | ||||
| #~ msgstr "Kinnistatud modaaldialoog" | ||||
|  | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g millisekundit kulub ühe akna raami joonistamiseks" | ||||
| #~ msgid "Button layout test %d" | ||||
| #~ msgstr "Nuppude paigutuse test %d" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Kasutamine: metacity-theme-viewer [TEEMANIMI]\n" | ||||
| #~ msgid "%g milliseconds to draw one window frame" | ||||
| #~ msgstr "%g millisekundit kulub ühe akna raami joonistamiseks" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Viga teema laadimisel: %s\n" | ||||
| #~ msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| #~ msgstr "Kasutamine: metacity-theme-viewer [TEEMANIMI]\n" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Teema \"%s\" laaditi %g sekundiga\n" | ||||
| #~ msgid "Error loading theme: %s\n" | ||||
| #~ msgstr "Viga teema laadimisel: %s\n" | ||||
|  | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Tiitli tavasuurusega kirjatüüp" | ||||
| #~ msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| #~ msgstr "Teema \"%s\" laaditi %g sekundiga\n" | ||||
|  | ||||
| msgid "Small Title Font" | ||||
| msgstr "Tiitli väike kirjatüüp" | ||||
| #~ msgid "Normal Title Font" | ||||
| #~ msgstr "Tiitli tavasuurusega kirjatüüp" | ||||
|  | ||||
| msgid "Large Title Font" | ||||
| msgstr "Tiitli suur kirjatüüp" | ||||
| #~ msgid "Small Title Font" | ||||
| #~ msgstr "Tiitli väike kirjatüüp" | ||||
|  | ||||
| msgid "Button Layouts" | ||||
| msgstr "Nuppude paigutus" | ||||
| #~ msgid "Large Title Font" | ||||
| #~ msgstr "Tiitli suur kirjatüüp" | ||||
|  | ||||
| msgid "Benchmark" | ||||
| msgstr "Jõudlus" | ||||
| #~ msgid "Button Layouts" | ||||
| #~ msgstr "Nuppude paigutus" | ||||
|  | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Siia tuleb akna pealkiri" | ||||
| #~ msgid "Benchmark" | ||||
| #~ msgstr "Jõudlus" | ||||
|  | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Joonistati %d kaadrit %g kliendi-kella sekundiga (%g millisekundit kaadrile) " | ||||
| "ja %g sekundiga seinakella järgi, millesse on kaasatud X-serveri " | ||||
| "ressursikasutus (%g millisekundit kaadrile)\n" | ||||
| #~ msgid "Window Title Goes Here" | ||||
| #~ msgstr "Siia tuleb akna pealkiri" | ||||
|  | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "asukoha avaldise kontroll tagastas TÕENE, aga määras vea" | ||||
| #~ msgid "" | ||||
| #~ "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and " | ||||
| #~ "%g seconds wall clock time including X server resources (%g milliseconds " | ||||
| #~ "per frame)\n" | ||||
| #~ msgstr "" | ||||
| #~ "Joonistati %d kaadrit %g kliendi-kella sekundiga (%g millisekundit " | ||||
| #~ "kaadrile) ja %g sekundiga seinakella järgi, millesse on kaasatud X-" | ||||
| #~ "serveri ressursikasutus (%g millisekundit kaadrile)\n" | ||||
|  | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "asukoha avaldise kontroll tagastas VÄÄR, aga ei määranud viga" | ||||
| #~ msgid "position expression test returned TRUE but set error" | ||||
| #~ msgstr "asukoha avaldise kontroll tagastas TÕENE, aga määras vea" | ||||
|  | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Oodati viga, aga ühtegi ei edastatud" | ||||
| #~ msgid "position expression test returned FALSE but didn't set error" | ||||
| #~ msgstr "asukoha avaldise kontroll tagastas VÄÄR, aga ei määranud viga" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Oodati viga %d, aga edastati viga %d" | ||||
| #~ msgid "Error was expected but none given" | ||||
| #~ msgstr "Oodati viga, aga ühtegi ei edastatud" | ||||
|  | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Viga ei oodatud, aga üks edastati: %s" | ||||
| #~ msgid "Error %d was expected but %d given" | ||||
| #~ msgstr "Oodati viga %d, aga edastati viga %d" | ||||
|  | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "x väärtus oli %d, oodati väärtust %d" | ||||
| #~ msgid "Error not expected but one was returned: %s" | ||||
| #~ msgstr "Viga ei oodatud, aga üks edastati: %s" | ||||
|  | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "y väärtus oli %d, oodati väärtust %d" | ||||
| #~ msgid "x value was %d, %d was expected" | ||||
| #~ msgstr "x väärtus oli %d, oodati väärtust %d" | ||||
|  | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "%d koordinaatide avaldis töödeldi %g sekundiga (keskmine %g sekundit)\n" | ||||
| #~ msgid "y value was %d, %d was expected" | ||||
| #~ msgstr "y väärtus oli %d, oodati väärtust %d" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| #~ msgstr "" | ||||
| #~ "%d koordinaatide avaldis töödeldi %g sekundiga (keskmine %g sekundit)\n" | ||||
|  | ||||
| #~ msgid "Minimize window" | ||||
| #~ msgstr "Akna minimeerimine" | ||||
|   | ||||
							
								
								
									
										398
									
								
								po/hu.po
									
									
									
									
									
								
							
							
						
						
									
										398
									
								
								po/hu.po
									
									
									
									
									
								
							| @@ -6,19 +6,21 @@ | ||||
| # Gabor Sari <saga at externet dot hu>, 2003. | ||||
| # Laszlo Dvornik <dvornik at gnome dot hu>, 2004. | ||||
| # Gabor Kelemen <kelemeng at gnome dot hu>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. | ||||
| # Balázs Úr <urbalazs at gmail dot com>, 2013. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter master\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-03-21 00:15+0100\n" | ||||
| "PO-Revision-Date: 2013-03-21 00:14+0100\n" | ||||
| "Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-08-25 10:26+0200\n" | ||||
| "Last-Translator: Balázs Úr <urbalazs at gmail dot com>\n" | ||||
| "Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n" | ||||
| "Language: hu\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: Lokalize 1.4\n" | ||||
| "X-Generator: Lokalize 1.2\n" | ||||
| "Plural-Forms:  nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| @@ -211,7 +213,7 @@ msgstr "Jobb oldali felosztás megjelenítése" | ||||
|  | ||||
| #. 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:568 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -220,7 +222,7 @@ msgstr "" | ||||
| "Már fut egy másik kompozitáláskezelő a(z) %i képernyőn a(z) „%s” " | ||||
| "megjelenítőn." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1191 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "nem hozható létre a háttér textúrája fájlból" | ||||
|  | ||||
| @@ -258,17 +260,17 @@ msgstr "Vá_rakozás" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Erőltetett kilépés" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Hiányzik a kompozit ablakkezeléshez szükséges %s kiterjesztés" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Nem sikerült megnyitni a(z) „%s” X Window rendszer képernyőt\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:935 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -277,7 +279,7 @@ msgstr "" | ||||
| "Valamely másik program már használja a(z) %s billentyűt %x módosítókkal " | ||||
| "összekötve\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1135 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "„%s” érvénytelen hívóbetű\n" | ||||
| @@ -319,6 +321,20 @@ msgstr "" | ||||
| "Nem található téma! Bizonyosodjon meg róla hogy a(z) %s létezik és " | ||||
| "tartalmazza a szokásos témákat.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Beépített kijelző" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| #| msgid "Unknown element %s" | ||||
| msgid "Unknown %s" | ||||
| msgstr "Ismeretlen %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -342,7 +358,7 @@ msgstr "Verzió kinyomtatása" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Használandó Mutter bővítmény" | ||||
|  | ||||
| #: ../src/core/prefs.c:1095 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -350,14 +366,14 @@ msgstr "" | ||||
| "A hibás alkalmazások hibáinak megkerülése nincs engedélyezve. Néhány " | ||||
| "alkalmazás lehet, hogy nem fog helyesen működni.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1170 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "" | ||||
| "Nem sikerült feldolgozni a(z) „%s” betűkészlet leírását a(z) „%s” GSettings " | ||||
| "kulcsból\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1236 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -366,7 +382,7 @@ msgstr "" | ||||
| "A konfigurációs adatbázisban talált „%s” érvénytelen érték az egérgomb " | ||||
| "módosítóhoz\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1788 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -375,17 +391,17 @@ msgstr "" | ||||
| "A konfigurációs adatbázisban talált „%s” nem érvényes érték a következő " | ||||
| "billentyűkombinációhoz: „%s”\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1887 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "%d. munkaterület" | ||||
|  | ||||
| #: ../src/core/screen.c:691 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "A(z) %d képernyő a(z) „%s” megjelenítőn érvénytelen\n" | ||||
|  | ||||
| #: ../src/core/screen.c:707 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -394,7 +410,7 @@ msgstr "" | ||||
| "A(z) %d képernyő a(z) „%s” megjelenítőn már rendelkezik egy ablakkezelővel; " | ||||
| "próbálja a --replace opcióval helyettesíteni a jelenlegi ablakkezelőt.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:734 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| @@ -402,12 +418,12 @@ msgstr "" | ||||
| "Nem sikerült beolvasni az ablakkezelő kiválasztását a(z) %d képernyőn a(z) " | ||||
| "„%s” megjelenítőn\n" | ||||
|  | ||||
| #: ../src/core/screen.c:812 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "A(z) %d képernyőnek a(z) „%s” megjelenítőn már van ablakkezelője\n" | ||||
|  | ||||
| #: ../src/core/screen.c:998 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Nem sikerült elengedni a(z) %d képernyőt a(z) „%s” kijelzőn\n" | ||||
| @@ -484,8 +500,7 @@ msgstr "Nem sikerült megnyitni az fdopen()-nel a(z) „%s” naplófájlt: %s\n | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "%s naplófájl megnyitva\n" | ||||
|  | ||||
| #: ../src/core/util.c:119 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "A Mutter ablakkezelőt a részletes mód támogatása nélkül fordították\n" | ||||
|  | ||||
| @@ -493,20 +508,20 @@ msgstr "A Mutter ablakkezelőt a részletes mód támogatása nélkül fordítot | ||||
| msgid "Window manager: " | ||||
| msgstr "Ablakkezelő: " | ||||
|  | ||||
| #: ../src/core/util.c:412 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Hiba az ablakkezelőben: " | ||||
|  | ||||
| #: ../src/core/util.c:443 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Figyelmeztetés az ablakkezelőtől: " | ||||
|  | ||||
| #: ../src/core/util.c:471 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Hibaüzenet az ablakkezelőtől: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7596 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -522,7 +537,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8320 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -532,24 +547,24 @@ msgstr "" | ||||
| "de mégis %d x %d minimális és %d x %d maximális értéket ad meg, amelynek így " | ||||
| "nincs értelme.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Az alkalmazás hibás _NET_WM_PID-értéket állított be: %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (ezen: %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "" | ||||
| "Érvénytelen WM_TRANSIENT_FOR ablak (0x%lx) került megadásra a következőhöz: " | ||||
| "%s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "" | ||||
| @@ -647,7 +662,7 @@ msgstr "" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:9 | ||||
| msgid "Workspaces only on primary" | ||||
| msgstr "Munkaterületek csak az elsődlegese" | ||||
| msgstr "Munkaterületek csak az elsődlegesen" | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:10 | ||||
| msgid "" | ||||
| @@ -716,109 +731,104 @@ msgstr "Ablakok kiválasztása tab billentyűre felugró ablakból" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Tab felugró kikapcsolása" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Használat: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "Mi_nimalizálás" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Ma_ximalizálás" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "_Eredeti méret" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "_Felgördítés" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "_Legördítés" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "Át_helyezés" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "Át_méretezés" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "_Címsor mozgatása a képernyőn" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "Mindig _felül" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "Mindig a látható m_unkaterületen" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "_Csak ezen a munkaterületen" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Áthelyezés a bal ol_dali munkaterületre" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Áthelyezés a j_obb oldali munkaterületre" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Áthelyezés a fel_ső munkaterületre" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Áthelyezés az _alsó munkaterületre" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Bezárás" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "%d%n. munkaterület" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "1_0. munkaterület" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "%s%d. munkaterület" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Áthelyezés mási_k munkaterületre" | ||||
|  | ||||
| @@ -1179,18 +1189,18 @@ msgid "" | ||||
| msgstr "" | ||||
| "Hiányzó <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"bármi\"/> elem" | ||||
|  | ||||
| #: ../src/ui/theme.c:5084 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Hiba a(z) „%s” téma betöltése közben: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5220 ../src/ui/theme.c:5227 ../src/ui/theme.c:5234 | ||||
| #: ../src/ui/theme.c:5241 ../src/ui/theme.c:5248 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "Nincs <%s> beállítva a(z) „%s” témához" | ||||
|  | ||||
| #: ../src/ui/theme.c:5256 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1199,7 +1209,7 @@ msgstr "" | ||||
| "Nincs keretstílus beállítva a(z) „%s” ablaktípushoz a(z) „%s” témában, adjon " | ||||
| "hozzá egy <window type=\"%s\" style_set=\"bármi\"/> elemet" | ||||
|  | ||||
| #: ../src/ui/theme.c:5663 ../src/ui/theme.c:5725 ../src/ui/theme.c:5788 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| @@ -1207,7 +1217,7 @@ msgstr "" | ||||
| "A felhasználó által meghatározott konstansoknak nagybetűvel kell kezdődniük, " | ||||
| "a(z) „%s” nem ilyen" | ||||
|  | ||||
| #: ../src/ui/theme.c:5671 ../src/ui/theme.c:5733 ../src/ui/theme.c:5796 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "A(z) „%s” konstans már definiálva van" | ||||
| @@ -1600,206 +1610,154 @@ msgstr "<%s> kétszer lett megadva ehhez a témához" | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Nem található érvényes fájl a következő témához: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Ablakok" | ||||
| #~ msgid "Usage: %s\n" | ||||
| #~ msgstr "Használat: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Párbeszédablak" | ||||
| #~ msgid "_Windows" | ||||
| #~ msgstr "_Ablakok" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Kizárólagos párbeszédablak" | ||||
| #~ msgid "_Dialog" | ||||
| #~ msgstr "_Párbeszédablak" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Segédprogram" | ||||
| #~ msgid "_Modal dialog" | ||||
| #~ msgstr "_Kizárólagos párbeszédablak" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Indítóképernyő" | ||||
| #~ msgid "_Utility" | ||||
| #~ msgstr "_Segédprogram" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Felső dokk" | ||||
| #~ msgid "_Splashscreen" | ||||
| #~ msgstr "_Indítóképernyő" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Alsó dokk" | ||||
| #~ msgid "_Top dock" | ||||
| #~ msgstr "_Felső dokk" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "_Bal dokk" | ||||
| #~ msgid "_Bottom dock" | ||||
| #~ msgstr "_Alsó dokk" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "_Jobb dokk" | ||||
| #~ msgid "_Left dock" | ||||
| #~ msgstr "_Bal dokk" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "Össz_es dokk" | ||||
| #~ msgid "_Right dock" | ||||
| #~ msgstr "_Jobb dokk" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "_Asztal" | ||||
| #~ msgid "_All docks" | ||||
| #~ msgstr "Össz_es dokk" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Egy újabb példány megnyitása ezekből az ablakokból" | ||||
| #~ msgid "Des_ktop" | ||||
| #~ msgstr "_Asztal" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Ez egy mintagomb a „Megnyitás” ikonnal" | ||||
| #~ msgid "Open another one of these windows" | ||||
| #~ msgstr "Egy újabb példány megnyitása ezekből az ablakokból" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Ez egy mintagomb a „Kilépés” ikonnal" | ||||
| #~ msgid "This is a demo button with an 'open' icon" | ||||
| #~ msgstr "Ez egy mintagomb a „Megnyitás” ikonnal" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Ez egy mintaüzenet egy minta párbeszédben" | ||||
| #~ msgid "This is a demo button with a 'quit' icon" | ||||
| #~ msgstr "Ez egy mintagomb a „Kilépés” ikonnal" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "%d. hamis menüelem\n" | ||||
| #~ msgid "This is a sample message in a sample dialog" | ||||
| #~ msgstr "Ez egy mintaüzenet egy minta párbeszédben" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Csak keretes ablak" | ||||
| #~ msgid "Fake menu item %d\n" | ||||
| #~ msgstr "%d. hamis menüelem\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Sáv" | ||||
| #~ msgid "Border-only window" | ||||
| #~ msgstr "Csak keretes ablak" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Normál alkalmazásablak" | ||||
| #~ msgid "Bar" | ||||
| #~ msgstr "Sáv" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Párbeszédablak" | ||||
| #~ msgid "Normal Application Window" | ||||
| #~ msgstr "Normál alkalmazásablak" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Kizárólagos párbeszéd doboz" | ||||
| #~ msgid "Dialog Box" | ||||
| #~ msgstr "Párbeszédablak" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Eszközpaletta" | ||||
| #~ msgid "Modal Dialog Box" | ||||
| #~ msgstr "Kizárólagos párbeszéd doboz" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Leválasztott menü" | ||||
| #~ msgid "Utility Palette" | ||||
| #~ msgstr "Eszközpaletta" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Szegély" | ||||
| #~ msgid "Torn-off Menu" | ||||
| #~ msgstr "Leválasztott menü" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Csatolt kizárólagos párbeszédablak" | ||||
| #~ msgid "Border" | ||||
| #~ msgstr "Szegély" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Gombelrendezés teszt %d" | ||||
| #~ msgid "Attached Modal Dialog" | ||||
| #~ msgstr "Csatolt kizárólagos párbeszédablak" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g ezredmásodpercig tartott egy ablakkeret kirajzolása" | ||||
| #~ msgid "Button layout test %d" | ||||
| #~ msgstr "Gombelrendezés teszt %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Használat: metacity-theme-viewer [TÉMANÉV]\n" | ||||
| #~ msgid "%g milliseconds to draw one window frame" | ||||
| #~ msgstr "%g ezredmásodpercig tartott egy ablakkeret kirajzolása" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Hiba történt a téma betöltése közben: %s\n" | ||||
| #~ msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| #~ msgstr "Használat: metacity-theme-viewer [TÉMANÉV]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "A(z) „%s” téma %g másodperc alatt betöltve\n" | ||||
| #~ msgid "Error loading theme: %s\n" | ||||
| #~ msgstr "Hiba történt a téma betöltése közben: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Normál cím betűtípus" | ||||
| #~ msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| #~ msgstr "A(z) „%s” téma %g másodperc alatt betöltve\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Kicsi cím betűtípus" | ||||
| #~ msgid "Normal Title Font" | ||||
| #~ msgstr "Normál cím betűtípus" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Nagy cím betűtípus" | ||||
| #~ msgid "Small Title Font" | ||||
| #~ msgstr "Kicsi cím betűtípus" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Gombelrendezések" | ||||
| #~ msgid "Large Title Font" | ||||
| #~ msgstr "Nagy cím betűtípus" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Teljesítményteszt" | ||||
| #~ msgid "Button Layouts" | ||||
| #~ msgstr "Gombelrendezések" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Ide kerül az ablak címe" | ||||
| #~ msgid "Benchmark" | ||||
| #~ msgstr "Teljesítményteszt" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "%d keret kirajzolása %g kliens-oldali másodperc alatt (%g ezredmásodperc " | ||||
| "képkeretenként) és %g összes idő beleértve az X szerver erőforrásokat (%g " | ||||
| "ezredmásodperc képkeretenként)\n" | ||||
| #~ msgid "Window Title Goes Here" | ||||
| #~ msgstr "Ide kerül az ablak címe" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "a pozíció kifejezés teszt IGAZ értéket adott vissza, de hiba történt" | ||||
| #~ msgid "" | ||||
| #~ "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and " | ||||
| #~ "%g seconds wall clock time including X server resources (%g milliseconds " | ||||
| #~ "per frame)\n" | ||||
| #~ msgstr "" | ||||
| #~ "%d keret kirajzolása %g kliens-oldali másodperc alatt (%g ezredmásodperc " | ||||
| #~ "képkeretenként) és %g összes idő beleértve az X szerver erőforrásokat (%g " | ||||
| #~ "ezredmásodperc képkeretenként)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "" | ||||
| "a pozíció kifejezés teszt HAMIS értéket adott vissza, de nem történt hiba" | ||||
| #~ msgid "position expression test returned TRUE but set error" | ||||
| #~ msgstr "" | ||||
| #~ "a pozíció kifejezés teszt IGAZ értéket adott vissza, de hiba történt" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Hibát vártunk, de nem történt egy sem" | ||||
| #~ msgid "position expression test returned FALSE but didn't set error" | ||||
| #~ msgstr "" | ||||
| #~ "a pozíció kifejezés teszt HAMIS értéket adott vissza, de nem történt hiba" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "A(z) %d hibát vártuk, de a(z) %d hiba következett be" | ||||
| #~ msgid "Error was expected but none given" | ||||
| #~ msgstr "Hibát vártunk, de nem történt egy sem" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Nem várt hiba következett be: %s" | ||||
| #~ msgid "Error %d was expected but %d given" | ||||
| #~ msgstr "A(z) %d hibát vártuk, de a(z) %d hiba következett be" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "x értéke %d volt, de a várt érték %d volt" | ||||
| #~ msgid "Error not expected but one was returned: %s" | ||||
| #~ msgstr "Nem várt hiba következett be: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "y értéke %d volt, de a várt érték %d volt" | ||||
| #~ msgid "x value was %d, %d was expected" | ||||
| #~ msgstr "x értéke %d volt, de a várt érték %d volt" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "A %d koordináta kifejezések %g másodperc alatt lettek feldolgozva (átlagosan " | ||||
| "%g másodperc)\n" | ||||
| #~ msgid "y value was %d, %d was expected" | ||||
| #~ msgstr "y értéke %d volt, de a várt érték %d volt" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| #~ msgstr "" | ||||
| #~ "A %d koordináta kifejezések %g másodperc alatt lettek feldolgozva " | ||||
| #~ "(átlagosan %g másodperc)\n" | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "Minimize window" | ||||
|   | ||||
							
								
								
									
										327
									
								
								po/id.po
									
									
									
									
									
								
							
							
						
						
									
										327
									
								
								po/id.po
									
									
									
									
									
								
							| @@ -11,15 +11,15 @@ msgstr "" | ||||
| "Project-Id-Version: mutter master\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-28 10:28+0000\n" | ||||
| "PO-Revision-Date: 2013-03-30 11:24+0700\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-09-14 15:44+0700\n" | ||||
| "Last-Translator: Andika Triwidada <andika@gmail.com>\n" | ||||
| "Language-Team: Indonesian <gnome@i15n.org>\n" | ||||
| "Language: id\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: Poedit 1.5.5\n" | ||||
| "X-Generator: Poedit 1.5.7\n" | ||||
| "Plural-Forms: nplurals=1; plural=0;\n" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| @@ -212,7 +212,7 @@ msgstr "Tampilan dipisah ke kanan" | ||||
|  | ||||
| #. 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:568 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -220,7 +220,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Manajer komposit lain telah berjalan pada layar %i pada tampilan \"%s\"." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1065 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "tekstur latar tak bisa dibuat dari berkas" | ||||
|  | ||||
| @@ -257,24 +257,24 @@ msgstr "_Tunggu" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Matikan Paksa" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Kehilangan ekstensi %s yang diperlukan untuk pengkomposisian" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Gagal membuka tampilan X Window System '%s'\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:935 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| "binding\n" | ||||
| msgstr "Ada program lain yang menggunakan tombol %s dengan kombinasi %x\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1135 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\" bukan akselerator yang valid\n" | ||||
| @@ -314,6 +314,19 @@ msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| msgstr "Tak menemukan tema! Pastikan %s ada dan berisi tema yang biasa.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Tampilan bawaan" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "%s tidak dikenal" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -338,7 +351,7 @@ msgstr "Cetak versi" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Pengaya Mutter yang dipakai" | ||||
|  | ||||
| #: ../src/core/prefs.c:1095 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -346,12 +359,12 @@ msgstr "" | ||||
| "Pencegahan kesalahan bagi aplikasi yang rusak sedang dinonaktifkan. Mungkin " | ||||
| "nanti ada beberapa aplikasi yang akan bertingkah aneh.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1170 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Tak dapat mengurai deskripsi fonta \"%s\" dari kunci GSettings %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1236 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -360,7 +373,7 @@ msgstr "" | ||||
| "\"%s\" yang ada pada database konfigurasi bukanlah nilai yang benar untuk " | ||||
| "tombol mouse.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1788 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -369,17 +382,17 @@ msgstr "" | ||||
| "\"%s\" yang ada pada database konfigurasi bernilai tidak benar untuk " | ||||
| "kombinasi tombol \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1887 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Area kerja %d" | ||||
|  | ||||
| #: ../src/core/screen.c:691 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Layar %d pada tampilan '%s' tidak benar\n" | ||||
|  | ||||
| #: ../src/core/screen.c:707 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -388,7 +401,7 @@ msgstr "" | ||||
| "Layar %d pada tampilan \"%s\" sudah memiliki pengatur jendela. Cobalah " | ||||
| "gunakan pilihan --replace untuk mengganti pengatur jendela yang aktif.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:734 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| @@ -396,12 +409,12 @@ msgstr "" | ||||
| "Tidak dapat mendapatkan pilihan pengatur jendela pada layar %d tampilan \"%s" | ||||
| "\"\n" | ||||
|  | ||||
| #: ../src/core/screen.c:812 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Layar %d pada tampilan \"%s\" sudah ada pengatur jendelanya\n" | ||||
|  | ||||
| #: ../src/core/screen.c:998 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Layar %d pada tampilan \"%s\" tidak dapat dilepas\n" | ||||
| @@ -476,8 +489,7 @@ msgstr "Gagal melakukan fdopen pada berkas log %s: %s\n" | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Berkas log yang dibuka %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:119 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Muter dikompilasi tanpa dukungan mode riuh\n" | ||||
|  | ||||
| @@ -485,20 +497,20 @@ msgstr "Muter dikompilasi tanpa dukungan mode riuh\n" | ||||
| msgid "Window manager: " | ||||
| msgstr "Pengatur jendela: " | ||||
|  | ||||
| #: ../src/core/util.c:412 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Bug pada pengatur jendela: " | ||||
|  | ||||
| #: ../src/core/util.c:443 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Peringatan pengatur jendela: " | ||||
|  | ||||
| #: ../src/core/util.c:471 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Eror pengatur jendela: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7596 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -514,7 +526,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8320 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -524,22 +536,22 @@ msgstr "" | ||||
| "ukurannya, sedangkan ukuran minimalnya adalah %d x %d dan maksimal %d x %d " | ||||
| "yang tidak masuk di akal.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Aplikasi telah membuat _NET_WM_PID %lu bohongan\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (pada %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "WM_TRANSIENT_FOR salah jendela 0x%lx ditentukan untuk %s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "Jendela WM_TRANSIENT_FOR 0x%lx untuk %s akan membuat loop.\n" | ||||
| @@ -703,109 +715,104 @@ msgstr "Pilih jendela dari popup tab" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Batalkan popup tab" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Cara pakai: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "Kecilka_n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Pe_rbesar" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "Kem_balikan" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "G_ulung" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "B_uka" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "_Pindahkan" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "Ganti·Uku_ran" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Pindahkan Judul Pada _layar" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "Selalu di A_tas" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "T_ampak pada Area Kerja Aktif" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "_Tampak pada Area Kerja Ini Saja" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Pindahkan ke Area Kerja _Kiri" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Pindahkan ke A_rea Kerja Kanan" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Pindahkan ke Area Kerja Ata_s" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Pindahkan ke Area Kerja _Bawah" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Tutup" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Area Kerja %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Area Kerja 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Area Kerja %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Pindahkan ke Area Kerja _Lain" | ||||
|  | ||||
| @@ -1163,18 +1170,18 @@ msgid "" | ||||
| msgstr "" | ||||
| "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> tidak ada" | ||||
|  | ||||
| #: ../src/ui/theme.c:5084 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Gagal membuka tema \"%s\": %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5220 ../src/ui/theme.c:5227 ../src/ui/theme.c:5234 | ||||
| #: ../src/ui/theme.c:5241 ../src/ui/theme.c:5248 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "Tidak ada <%s> yang ditentukan untuk tema \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:5256 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1183,14 +1190,14 @@ msgstr "" | ||||
| "Tidak ada gaya frame untuk tipe window \"%s\" pada tema \"%s\". Tambah dulu " | ||||
| "elemen <window type=\"%s\" style_set=\"whatever\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5663 ../src/ui/theme.c:5725 ../src/ui/theme.c:5788 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "" | ||||
| "Konstanta buatan pengguna harus dimulai dengan huruf besar: \"%s\" tidak" | ||||
|  | ||||
| #: ../src/ui/theme.c:5671 ../src/ui/theme.c:5733 ../src/ui/theme.c:5796 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Konstanta \"%s\" telah didefinisikan sebelumnya" | ||||
| @@ -1578,201 +1585,3 @@ msgstr "<%s> disebutkan dua kali pada tema ini" | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Gagal menemukan berkas yang sah untuk tema %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Jendela" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Dialog" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "Dialog _modal" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Utilitas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "Layar _pembuka" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "Dok a_tas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "Dok _bawah" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "Dok k_iri" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "Dok kana_n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "Semu_a dok" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "Des_ktop" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Buka lagi jendela semacam ini" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Ini contoh tombol dengan ikon 'open'" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Ini contoh tombol dengan ikon 'quit'" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Ini contoh pesan pada suatu dialog" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Item menu %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Jendela dengan garis pembatas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Kotak" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Jendela Aplikasi Normal" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Kotak Dialog" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Kotak Dialog Modal" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Kotak Perkakas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Menu Dapat Dilepas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Batas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Dialog Modal yang Dilampirkan" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Tes komposisi tombol %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "lama waktu menggambar satu bingkai jendela %g milidetik" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Cara pakai: metacity-theme-viewer [NAMA TEMA]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Ada error saat membaca tema: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Tema \"%s\" dibuka dalam %g detik\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Judul dengan huruf normal" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Judul dengan huruf ukuran kecil" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Judul Raksasa" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Komposisi Tombol" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Pengukuran" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Ini tempat judul jendela" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "%d frame dibuat dalam %g detik dalam waktu klien (%g milidetik per frame) " | ||||
| "dan %g detik dalam waktu sebenarnya (%g milidetik per frame)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "tes ekspresi posisi berakhir TRUE tapi justru ada error" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "tes ekspresi posisi berakhir FALSE tapi tidak ada error" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Seharusnya ada error, tapi ini kok tidak ada" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Seharunya ada error %d, tapi yang terjadi %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Seharusnya tidak ada error, tapi ini tiba-tiba ada error: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "nilai x sebelumnya %d, padahal seharusnya %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "nilai y sebelumnya %d, padahal seharusnya %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "ekspresi koordinat %d diambil dalam %g detik (rata-rata %g detik)\n" | ||||
|  | ||||
|   | ||||
							
								
								
									
										440
									
								
								po/it.po
									
									
									
									
									
								
							
							
						
						
									
										440
									
								
								po/it.po
									
									
									
									
									
								
							| @@ -12,8 +12,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-03-12 18:34+0100\n" | ||||
| "PO-Revision-Date: 2013-03-12 18:35+0100\n" | ||||
| "POT-Creation-Date: 2013-08-24 19:11+0200\n" | ||||
| "PO-Revision-Date: 2013-08-24 19:11+0200\n" | ||||
| "Last-Translator: Milo Casagrande <milo@ubuntu.com>\n" | ||||
| "Language-Team: Italian <tp@lists.linux.it>\n" | ||||
| "Language: it\n" | ||||
| @@ -21,6 +21,7 @@ msgstr "" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8-bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n!=1);\n" | ||||
| "X-Generator: Gtranslator 2.91.6\n" | ||||
|  | ||||
| #: ../src/50-mutter-navigation.xml.in.h:1 | ||||
| msgid "Navigation" | ||||
| @@ -216,7 +217,7 @@ msgstr "Massimizza a destra" | ||||
|  | ||||
| #. 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:502 | ||||
| #: ../src/compositor/compositor.c:596 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -225,11 +226,11 @@ msgstr "" | ||||
| "Un altro compositing manager è già in esecuzione sullo schermo %i sul " | ||||
| "display «%s»." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1180 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "La texture dello sfondo non può essere creata dal file" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "Evento campanella" | ||||
|  | ||||
| @@ -265,17 +266,17 @@ msgstr "_Attendi" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Forza uscita" | ||||
|  | ||||
| #: ../src/core/display.c:402 | ||||
| #: ../src/core/display.c:422 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Estensione %s richiesta per il compositing mancante" | ||||
|  | ||||
| #: ../src/core/display.c:494 | ||||
| #: ../src/core/display.c:514 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Apertura del display «%s» di X Window System non riuscita\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -284,41 +285,41 @@ msgstr "" | ||||
| "Qualche altro programma sta già usando il tasto %s con i modificatori %x " | ||||
| "come una associazione di tasti\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "«%s» non è una scorciatoia valida\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Disabilita la connessione al gestore di sessione" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Sostituisce il window manager in esecuzione" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Specifica l'ID di gestione sessione" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "Display X da usare" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Inizializza la sessione da file salvato" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Rende le chiamate X sincrone" | ||||
|  | ||||
| #: ../src/core/main.c:533 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Scansione della directory dei temi non riuscita: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:549 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -326,6 +327,19 @@ msgstr "" | ||||
| "Non è stato trovato alcun tema. Assicurarsi che %s esista e contenga i temi " | ||||
| "standard.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:702 | ||||
| msgid "Built-in display" | ||||
| msgstr "Display integrato" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:730 | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "Sconosciuto %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -349,7 +363,7 @@ msgstr "Stampa la versione" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Plugin Mutter da usare" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -357,14 +371,14 @@ msgstr "" | ||||
| "Disabilitate le funzionalità palliative per la applicazioni difettose. " | ||||
| "Alcune applicazioni potrebbero avere comportamenti errati.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "" | ||||
| "Impossibile analizzare la descrizione del tipo di carattere «%s» dalla " | ||||
| "chiave GSettings %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -373,7 +387,7 @@ msgstr "" | ||||
| "Il valore «%s» trovato nel database di configurazione non è valido per il " | ||||
| "modificatore del tasto del mouse\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -382,17 +396,17 @@ msgstr "" | ||||
| "Il valore «%s» nel database di configurazione non è valido per " | ||||
| "l'associazione di tasti «%s»\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Spazio di lavoro %d" | ||||
|  | ||||
| #: ../src/core/screen.c:674 | ||||
| #: ../src/core/screen.c:537 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Lo schermo %d nel display «%s» non è valido\n" | ||||
|  | ||||
| #: ../src/core/screen.c:690 | ||||
| #: ../src/core/screen.c:553 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -401,7 +415,7 @@ msgstr "" | ||||
| "Lo schermo %d sul display «%s» ha già un window manager; provare a " | ||||
| "utilizzare l'opzione --replace per sostituirlo.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:717 | ||||
| #: ../src/core/screen.c:580 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| @@ -409,12 +423,12 @@ msgstr "" | ||||
| "Impossibile acquisire la selezione del window manager per lo schermo %d nel " | ||||
| "display «%s»\n" | ||||
|  | ||||
| #: ../src/core/screen.c:795 | ||||
| #: ../src/core/screen.c:658 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Lo schermo %d sul display «%s» ha già un window manager\n" | ||||
|  | ||||
| #: ../src/core/screen.c:980 | ||||
| #: ../src/core/screen.c:850 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Impossibile rilasciare lo schermo %d sul display «%s»\n" | ||||
| @@ -476,45 +490,44 @@ msgstr "" | ||||
| "Queste finestre non supportano la funzione "salva impostazioni " | ||||
| "attuali" e dovranno essere riavviate manualmente al prossimo accesso." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Apertura nel file di registro di debug non riuscita: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "Esecuzione di fdopen() sul file di registro %s non riuscita: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "File di registro %s aperto\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "" | ||||
| "Mutter è stato compilato escludendo il supporto per la modalità prolissa\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "Window manager: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Bug nel window manager: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Avviso del window manager: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Errore del window manager: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7538 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -530,7 +543,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8262 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -540,26 +553,26 @@ msgstr "" | ||||
| "ridimensionabile, ma ha impostato la dimensione minima %d x %d e la " | ||||
| "dimensione massima %d x %d; ciò non ha senso.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "L'applicazione ha impostato un _NET_WM_PID errato %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (su %s)" | ||||
|  | ||||
| # Sì, direi che è oscuro  -Luca | ||||
| # | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Specificato un WM_TRANSIENT_FOR finestra 0x%lx non valido per %s.\n" | ||||
|  | ||||
| # Sì, direi che è oscuro  -Luca | ||||
| # | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR finestra 0x%lx per %s potrebbe creare un loop.\n" | ||||
| @@ -731,125 +744,120 @@ msgstr "Seleziona finestra dal tab popup" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Annulla tab popup" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Uso: %s\n" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "_Minimizza" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Ma_ssimizza" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "Dema_ssimizza" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "Arr_otola" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "Sr_otola" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "M_uovi" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "_Ridimensiona" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Muovi barra del titolo su _schermo" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "Sempre in _primo piano" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "Sempre su spazio di lavoro _visibile" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "Solo su _questo spazio di lavoro" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Sposta su spazio di lavoro a s_inistra" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Sposta su spazio di lavoro a d_estra" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Sposta su spazio di lavoro in alt_o" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Sposta su spazio di lavoro in _basso" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Chiudi" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Spazio di lavoro %d%n" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Spazio di lavoro 1_0" | ||||
|  | ||||
| # mantenere in sync con libwnck | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Spazio di lavoro %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Sposta su _altro spazio di lavoro" | ||||
|  | ||||
| @@ -951,49 +959,49 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d × %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "alto" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "basso" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "sinistra" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "destra" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "la geometria della cornice non specifica la dimensione «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "" | ||||
| "la geometria della cornice non specifica la dimensione «%s» per il bordo «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "Le proporzioni %g del pulsante non sono ragionevoli" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "La geometria della cornice non specifica la dimensione dei pulsanti" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "I gradienti dovrebbero avere almeno due colori" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -1003,7 +1011,7 @@ msgstr "" | ||||
| "colore e un ripiego tra parentesi, per es. gtk:custom(foo,bar); impossibile " | ||||
| "analizzare \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -1012,7 +1020,7 @@ msgstr "" | ||||
| "Carattere \"%c\" non valido nel parametro color_name di gtk:custom, sono " | ||||
| "validi solo A-Za-z0-9-_" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -1021,7 +1029,7 @@ msgstr "" | ||||
| "Il formato per Gtk:custom è \"gtk:custom(color_name,fallback)\", «%s» non è " | ||||
| "adatto a tale formato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -1030,7 +1038,7 @@ msgstr "" | ||||
| "La specificazione del colore GTK deve avere lo stato fra parentesi, per es. " | ||||
| "gtk:fg[NORMAL] dove NORMAL è lo stato; impossibile analizzare \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -1040,18 +1048,18 @@ msgstr "" | ||||
| "lo stato, per es. gtk:fg[NORMAL] dove NORMAL è lo stato; impossibile " | ||||
| "analizzare \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Stato «%s» incomprensibile nella specificazione del colore" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "" | ||||
| "Componente di colore «%s» incomprensibile nella specificazione del colore" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1060,17 +1068,17 @@ msgstr "" | ||||
| "Il formato della sfumature è «blend/bg_color/fg_color/alpha», «%s» non è " | ||||
| "adatto a tale formato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Impossibile analizzare il valore alpha «%s» nel colore sfumato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "Il valore alpha «%s» nel colore sfumato non è compreso tra 0.0 e 1.0" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| @@ -1078,31 +1086,31 @@ msgstr "" | ||||
| "Il formato dell'ombreggiatura è «shade/base_color/factor», «%s» non è adatto " | ||||
| "a tale formato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "" | ||||
| "Impossibile analizzare il fattore di ombreggiatura «%s» nel colore " | ||||
| "ombreggiato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Il fattore di ombreggiatura «%s» nel colore ombreggiato è negativo" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Impossibile analizzare il colore «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate contiene il carattere «%s» che non è " | ||||
| "consentito" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| @@ -1111,14 +1119,14 @@ msgstr "" | ||||
| "L'espressione delle coordinate contiene il numero in virgola mobile «%s» che " | ||||
| "non può essere analizzato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate contiene l'intero «%s» che non può essere " | ||||
| "analizzato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -1127,18 +1135,18 @@ msgstr "" | ||||
| "L'espressione delle coordinate contiene un operatore sconosciuto all'inizio " | ||||
| "di questo testo: \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "L'espressione delle coordinate è vuota o incomprensibile" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate ha come risultato una divisione per zero" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| @@ -1146,27 +1154,27 @@ msgstr "" | ||||
| "L'espressione delle coordinate tenta di usare un operatore mod su un numero " | ||||
| "in virgola mobile" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate ha un operatore «%s» dove è atteso un operando" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate ha un operando dove è atteso un operatore" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate finisce con un operatore invece che un " | ||||
| "operando" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1175,45 +1183,45 @@ msgstr "" | ||||
| "L'espressione delle coordinate ha l'operatore «%c» seguito dall'operatore " | ||||
| "«%c» senza un operando fra i due" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate ha la variabile o la costante «%s» sconosciuta" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "" | ||||
| "L'analizzatore dell'espressione delle coordinate ha superato il proprio " | ||||
| "buffer." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate ha una parentesi di chiusura senza la " | ||||
| "relativa di apertura" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate ha una parentesi di apertura senza la " | ||||
| "relativa di chiusura" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "" | ||||
| "L'espressione delle coordinate non sembra avere né operatori né operandi" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Il tema contiene un'espressione che ha come risultato un errore: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1222,7 +1230,7 @@ msgstr "" | ||||
| "È necessario specificare <button function=\"%s\" state=\"%s\" draw_ops=" | ||||
| "\"whatever\"/> per questo stile di cornice" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| @@ -1230,18 +1238,18 @@ msgstr "" | ||||
| "Risulta mancante <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=" | ||||
| "\"whatever\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Caricamento del tema «%s» non riuscito: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "Nessun <%s> impostato per il tema «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1250,7 +1258,7 @@ msgstr "" | ||||
| "Nessuno stile di cornice impostato per il tipo di finestra «%s» nel tema " | ||||
| "«%s», aggiungere un elemento <window type=\"%s\" style_set=\"whatever\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| @@ -1258,7 +1266,7 @@ msgstr "" | ||||
| "Le costanti definite dall'utente devono iniziare con una lettera maiuscola, " | ||||
| "«%s» non lo fa" | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "La costante «%s» è già definita" | ||||
| @@ -1661,207 +1669,7 @@ msgstr "Il testo non è consentito all'interno dell'elemento <%s>" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> specificato due volte per questo tema" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Ricerca di un file valido per il tema «%s» non riuscita\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Finestre" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Dialogo" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "Dialogo _modale" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Utilità" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Schermata d'avvio" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "Dock superi_ore" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "Dock in_feriore" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "Dock _sinistro" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "Dock _destro" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "Tutti i doc_k" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "Scri_vania" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Apre un'altra di queste finestre" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Questo è un pulsante di prova con un'icona «Apri»" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Questo è un pulsante di prova con un'icona «Esci»" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Questo è un messaggio d'esempio in una finestra di dialogo d'esempio" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Voce di menu finta n.%d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Finestra solo-bordo" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Barra" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Finestra applicazione normale" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Casella di dialogo" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Casella di dialogo modale" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Tavolozza di utilità" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Menù staccato" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Bordo" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Dialogo modale attaccato" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Test n.%d disposizione pulsanti" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g millisecondi per disegnare una cornice di finestra" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Uso: metacity-theme-viewer [NOME_TEMA]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Errore nel caricare il tema: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Tema «%s» caricato in %g secondi\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Carattere titolo normale" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Carattere titolo piccolo" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Carattere titolo grande" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Disposizione pulsanti" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Prestazioni" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Qui va il titolo della finestra" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Disegnate %d cornici in %g secondi lato client (%g millisecondi per cornice) " | ||||
| "e %g secondi di wall clock time, incluse le risorse del server X (%g " | ||||
| "millisecondi per cornice)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "test espressione posizione ha restituito TRUE, ma impostato errore" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "" | ||||
| "test espressione posizione ha restituito FALSE, ma non ha impostato errore" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Errore atteso, ma non fornito" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Atteso errore %d, ma fornito %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Errore non atteso, ma è stato restituito: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "valore x era %d, era atteso %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "valore y era %d, era atteso %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "%d espressioni di coordinate analizzate in %g secondi (%g secondi in media)\n" | ||||
|   | ||||
							
								
								
									
										32
									
								
								po/ja.po
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								po/ja.po
									
									
									
									
									
								
							| @@ -12,8 +12,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter master\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-22 10:02+0000\n" | ||||
| "PO-Revision-Date: 2013-03-25 17:02+0000\n" | ||||
| "POT-Creation-Date: 2013-07-30 12:29+0000\n" | ||||
| "PO-Revision-Date: 2013-07-30 23:01+0900\n" | ||||
| "Last-Translator: Jiro Matsuzawa <jmatsuzawa@gnome.org>\n" | ||||
| "Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n" | ||||
| "Language: ja\n" | ||||
| @@ -133,7 +133,7 @@ msgstr "コマンド実行プロンプトを表示する" | ||||
|  | ||||
| #: ../src/50-mutter-system.xml.in.h:3 | ||||
| msgid "Show the activities overview" | ||||
| msgstr "アクティビティを表示する" | ||||
| msgstr "アクティビティ画面を表示する" | ||||
|  | ||||
| #: ../src/50-mutter-windows.xml.in.h:1 | ||||
| msgid "Windows" | ||||
| @@ -213,12 +213,12 @@ msgstr "画面右半分に表示する" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:568 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "Another compositing manager is already running on screen %i on display \"%s\"." | ||||
| msgstr "既に別の合成マネージャーがディスプレイ \"%2$s\" 上のスクリーン %1$i で起動中です" | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1191 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -252,22 +252,22 @@ msgstr "待機する(_W)" | ||||
| msgid "_Force Quit" | ||||
| msgstr "強制終了する(_F)" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "ウィンドウの合成に必要な %s という拡張モジュールが存在しません" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "X Window System のディスプレイ '%s' のオープンに失敗しました\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:935 | ||||
| #: ../src/core/keybindings.c:1138 | ||||
| #, c-format | ||||
| msgid "Some other program is already using the key %s with modifiers %x as a binding\n" | ||||
| msgstr "既にバインディングとして別のプログラムでキー %s (修飾キー %x) を使っています\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1135 | ||||
| #: ../src/core/keybindings.c:1335 | ||||
| #, fuzzy, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\" はフォーカス属性のためには有効な値ではありません" | ||||
| @@ -328,26 +328,26 @@ msgstr "バージョンを表示する" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "使用する Mutter のプラグイン" | ||||
|  | ||||
| #: ../src/core/prefs.c:1095 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "Workarounds for broken applications disabled. Some applications may not behave properly.\n" | ||||
| msgstr "仕様に準拠していないアプリケーションに対する次善策は無効になっています。一部のアプリケーションは正常に動作しない可能性があります\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1170 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "GSettings の %2$s キーからフォント名 \"%1$s\" を解析できませんでした\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1236 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n" | ||||
| msgstr "設定データベース中の \"%s\" はマウスボタンの修飾キーとして妥当な値ではありません\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1788 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n" | ||||
| msgstr "設定データベース中の \"%s\" はキーバインド \"%s\" に有効な値ではありません\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1887 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "ワークスペース %d" | ||||
| @@ -465,7 +465,7 @@ msgid "Window manager error: " | ||||
| msgstr "ウィンドウマネージャーのエラー: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7596 | ||||
| #: ../src/core/window.c:7513 | ||||
| #, c-format | ||||
| msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n" | ||||
| msgstr "ウィンドウ %s は ICCCM で指定されていたような WM_CLIENT_LEADER ウィンドウの代わりに自分自身で SM_CLIENT_ID を設定しています\n" | ||||
| @@ -477,7 +477,7 @@ msgstr "ウィンドウ %s は ICCCM で指定されていたような WM_CLIENT | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8320 | ||||
| #: ../src/core/window.c:8237 | ||||
| #, c-format | ||||
| msgid "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n" | ||||
| msgstr "ウィンドウ %s はリサイズ可能ではない MWM ヒント指示を設定していますが、最小サイズ %d x %d と最大サイズ %d x %dも設定しています。これはあまり意味がありません\n" | ||||
|   | ||||
							
								
								
									
										458
									
								
								po/ko.po
									
									
									
									
									
								
							
							
						
						
									
										458
									
								
								po/ko.po
									
									
									
									
									
								
							| @@ -18,8 +18,8 @@ msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-01 15:50+0000\n" | ||||
| "PO-Revision-Date: 2013-03-13 03:52+0900\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-09-09 04:46+0900\n" | ||||
| "Last-Translator: Changwoo Ryu <cwryu@debian.org>\n" | ||||
| "Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n" | ||||
| "Language: Korean\n" | ||||
| @@ -218,7 +218,7 @@ msgstr "오른쪽 절반 뷰" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:507 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -227,11 +227,11 @@ msgstr "" | ||||
| "다른 창 구성 관리 프로그램이 이미 디스플레이 \"%2$s\" 화면 %1$i번에서 실행 중" | ||||
| "입니다." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1111 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "파일에서 배경 텍스처를 만들 수 없습니다" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "삑소리 이벤트" | ||||
|  | ||||
| @@ -263,17 +263,17 @@ msgstr "기다리기(_W)" | ||||
| msgid "_Force Quit" | ||||
| msgstr "강제로 끝내기(_F)" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "콤포짓에 필요한 %s 확장 기능이 없습니다" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "X 윈도 시스템 디스플레이 '%s'을(를) 여는데 실패하였습니다\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -282,41 +282,41 @@ msgstr "" | ||||
| "다른 프로그램에서 이미 단축키로 변경 키 %2$x와(과) 키 %1$s을(를) 사용하고 있" | ||||
| "습니다\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\"은(는) 올바른 단축키가 아닙니다\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "세션 관리자와 연결 하지 않습니다" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "실행 중인 창 관리자를 바꿉니다" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "세션 관리 ID를 지정합니다" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "사용할 X 디스플레이" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "저장 파일에서 세션을 초기화 합니다" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "동기 X 호출을 합니다" | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "테마 디렉터리를 읽는 데 실패했습니다: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -324,6 +324,19 @@ msgstr "" | ||||
| "테마를 찾을 수 없습니다! %s이(가) 있고 올바른 테마가 들어 있는지 확인하십시" | ||||
| "오.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "내장 디스플레이" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "알 수 없는 %s인치" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -347,18 +360,20 @@ msgstr "버전을 출력합니다" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "사용할 머터 플러그인" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| msgstr "응용 프로그램에 대한 임시 방편을 막았습니다. 몇몇 응용 프로그램이 제대로 동작하지 않을것입니다.\n" | ||||
| msgstr "" | ||||
| "응용 프로그램에 대한 임시 방편을 막았습니다. 몇몇 응용 프로그램이 제대로 동작" | ||||
| "하지 않을것입니다.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "GSettings 키 %2$s에서 글꼴 지정 \"%1$s\"을(를) 분석할 수 없습니다\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -367,7 +382,7 @@ msgstr "" | ||||
| "설정 데이터베이스에서 찾은 \"%s\"이(가) 마우스 단추 변경 키의 올바른 값이 아" | ||||
| "닙니다\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -376,17 +391,17 @@ msgstr "" | ||||
| "설정 데이터베이스에서 찾은 \"%s\"이(가) 단축키 \"%s\"에 대한 올바른 값이 아닙" | ||||
| "니다\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "작업 공간 %d" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "디스플레이 '%2$s'의 화면 %1$d은(는) 잘못되었습니다\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -395,19 +410,19 @@ msgstr "" | ||||
| "디스플레이 \"%2$s\"의 화면 %1$d에 이미 창 관리자가 실행되고 있습니다. 현재 " | ||||
| "창 관리자를 무시하는 --replace 옵션을 써보십시오.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "디스플레이 \"%2$s\"의 화면 %1$d에 창 관리 선택을 가질 수 없습니다\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "" | ||||
| "디스플레이 \"%2$s\"의 화면 %1$d은(는) 이미 창 관리자가 실행되고 있습니다\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "디스플레이 \"%2$s\"의 화면 %1$d을(를) 떼어 놓을수 없습니다\n" | ||||
| @@ -467,44 +482,43 @@ msgstr "" | ||||
| "이 창은 "현재 설정 저장"을 지원하지 않기 때문에 다음 번에 로그인 " | ||||
| "할 때 수동으로 다시 시작해야 합니다." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "디버그 로그 열기 실패: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "로그 파일 %s을(를) fdopen()하기 실패: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "로그 파일 %s을(를) 엽니다\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "머터가 자세한 모드 지원 없이 컴파일 되었습니다\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "창 관리자: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "창 관리자의 벌레: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "창 관리자 주의: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "장 관리자 오류: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7539 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -520,7 +534,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8263 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -529,23 +543,23 @@ msgstr "" | ||||
| "%s 창에서 크기 변경이 불가능하다는 MWM 힌트를 설정했지만, 최소 크기 %d x %d " | ||||
| "및 최대 크기 %d x %d(으)로 설정했습니다. 앞뒤가 맞지 않습니다.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "응용 프로그램이 가짜 _NET_WM_PID %lu을(를) 설정하였습니다\n" | ||||
|  | ||||
| # <창제목> (on <기계>) | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (%s에서)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "%2$s에 대해 WM_TRANSIENT_FOR 0x%1$lx 창이 잘못되었습니다.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "%2$s에 대해 WM_TRANSIENT_FOR 0x%1$lx 창은 무한 반복입니다.\n" | ||||
| @@ -574,9 +588,7 @@ msgstr "창 0x%2$lx의 등록 정보 %1$s은(는) 잘못된 UTF-8이 들어 있 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n" | ||||
| msgstr "" | ||||
| "창 0x%2$lx의 등록 정보 %1$s은(는) 목록안의 항목 %3$d에 잘못된 UTF-8을 포함하" | ||||
| "고 있습니다\n" | ||||
| msgstr "창 0x%2$lx의 등록 정보 %1$s은(는) 목록안의 항목 %3$d에 잘못된 UTF-8 문자가 들어 있습니다\n" | ||||
|  | ||||
| #: ../src/mutter.desktop.in.h:1 ../src/mutter-wm.desktop.in.h:1 | ||||
| msgid "Mutter" | ||||
| @@ -705,109 +717,104 @@ msgstr "탭 팝업에서 창 선택" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "탭 팝업 취소" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "사용법: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "최소화(_N)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "최대화(_X)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "최대화 취소(_X)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "말아올리기(_U)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "펼치기(_U)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "옮기기(_M)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "크기 조정(_R)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "창 제목막대 화면에 표시(_S)" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "항상 위(_T)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "항상 현재 작업 공간에 놓기(_A)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "이 작업 공간에만 놓기(_O)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "왼쪽 작업 공간으로 옮기기(_L)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "오른쪽 작업 공간으로 옮기기(_I)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "위쪽 작업 공간으로 옮기기(_U)" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "아래쪽 작업 공간으로 옮기기(_D)" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "닫기(_C)" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "작업 공간 %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "작업 공간 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "작업 공간 %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "다른 작업 공간으로 옮기기(_W)" | ||||
|  | ||||
| @@ -909,50 +916,50 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "맨 위" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "맨 아래" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "왼쪽" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "오른쪽" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "프레임 위치가 \"%s\"차원으로 지정되지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "" | ||||
| "프레임 위치가 가장자리 \"%2$s\" 가장자리의 \"%1$s\"차원으로 지정되지 않았습니" | ||||
| "다." | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "단추의 가로세로 비 %g이(가) 적당하지 않습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "프레임 위치가 단추의 크기로 지정되지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "서서히 변하는 색으로 지정하려면 최소 2색이 필요합니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -961,7 +968,7 @@ msgstr "" | ||||
| "GTK 사용자 지정 색상 지정은 색 이름과 대체할 색을 괄호 안에 써야 합니다. 예" | ||||
| "를 들어: gtk:custom(foo,bar). \"%s\"을(를) 분석할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -970,7 +977,7 @@ msgstr "" | ||||
| "gtk:custom의 color_name 파라미터 안에 잘못된 문자 '%c'. A-Za-z0-9-_ 문자만 허" | ||||
| "용합니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -979,7 +986,7 @@ msgstr "" | ||||
| "gtk:custom 형식은 \"gtk:custom(색이름,대체색)\"입니다, \"%s\"(은)는 형식에 맞" | ||||
| "지 않습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -988,7 +995,7 @@ msgstr "" | ||||
| "GTK 색상 지정은 중괄호안에 있어야 합니다. 예를 들어: gtk:fg[NORMAL], 여기서 " | ||||
| "NORMAL이 값입니다. \"%s\"을(를) 분석할 수 없습니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -997,17 +1004,17 @@ msgstr "" | ||||
| "GTK 색상 지정은 값 뒤에 중괄호로 닫혀 있어야 합니다. 예를 들어: gtk:fg" | ||||
| "[NORMAL], 여기서 NORMAL은 값입니다. \"%s\"을(를) 분석할 수 없습니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "색상 지정의 \"%s\" 값을 이해할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "색상 지정의 색상 구성요소 \"%s\"을(를) 이해할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1016,17 +1023,17 @@ msgstr "" | ||||
| "섞기 형식은 \"blend/bg_color/fg_color/alpha\"입니다, \"%s\"은(는) 형식에 맞" | ||||
| "지 않습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "색상 섞기에서 알파 값 \"%s\"을(를) 분석할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "색상 섞기에서 알파 값 \"%s\"은(는) 0.0 과 1.0사이의 값이 아닙니다" | ||||
| msgstr "색상 섞기에서 알파 값 \"%s\"은(는) 0.0과 1.0 사이의 값이 아닙니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| @@ -1034,79 +1041,78 @@ msgstr "" | ||||
| "그림자 형식은 \"shade/base_color/format\"입니다, \"%s\"(은)는 형식에 맞지 않" | ||||
| "습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "그림자색에서 그림자 인자 \"%s\"(을)를 해석할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "그림자색에서 그림자 인자 \"%s\"(은)는 음수입니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "색상 \"%s\"을(를) 해석할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "좌표식에 허용되지 않는 문자 '%s'(이)가 포함되어 있습니다" | ||||
| msgstr "좌표식에 허용되지 않는 문자 '%s'(이)가 들어 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "좌표식에 분석할 수 없는 부동소수점 숫자 '%s'이(가) 포함되어 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "좌표식에 분석할 수 없는 정수 '%s'이(가) 포함되어 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| "\"%s\"" | ||||
| msgstr "" | ||||
| "좌표식에 이 글자 시작부분에 알 수 없는 연산자가 포함되어 있습니다: \"%s\"" | ||||
| msgstr "좌표식에 이 글자 시작부분에 알 수 없는 연산자가 들어 있습니다: \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "좌표식이 비어있거나 이해할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "좌표식의 결과 값이 0로 나누었습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| msgstr "좌표식에서 부동소수점 수에 나머지 연산을 하려 합니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "좌표식에서 피연산자가 들어갈 곳에 연산자 \"%s\"이(가) 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "좌표식에서 연산자가 들어갈 곳에 피연산자가 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "좌표식에서 피연산자 대신에 연산자로 끝나있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1115,37 +1121,37 @@ msgstr "" | ||||
| "좌표식에서 피연산자가 없는 연산자 \"%2$c\"다음에 연산자 \"%1$c\"이(가) 있습니" | ||||
| "다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "좌표식에 알 수 없는 변수나 상수 \"%s\"이(가) 있습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "좌표 계산 파서의 버퍼가 크기를 넘어갔습니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "좌표식에 닫는 괄호는 있지만 여는 괄호가 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "좌표식에 여는 괄호는 있지만 닫는 괄호가 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "좌표식에 어떠한 연산자나 피연산자가 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "테마가 오류 값을 내는 표현식이 들어 있습니다: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1154,7 +1160,7 @@ msgstr "" | ||||
| "이 프레임 스타일에는 <button function=\"%s\" style=\"%s\" draw_ops=\"whatever" | ||||
| "\"/>가 지정되어야 합니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| @@ -1162,18 +1168,18 @@ msgstr "" | ||||
| "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" state=\"whatever\"/> 가 없습니" | ||||
| "다" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "테마 \"%s\"을(를) 읽을 수 없습니다: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "테마 \"%2$s\"의 <%1$s>(이)가 설정되지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1182,14 +1188,14 @@ msgstr "" | ||||
| "테마 \"%2$s\"의 창 형식 \"%1$s\"에 대한 프레임 스타일이 없습니다,<window " | ||||
| "type=\"%3$s\" style_set=\"whatever\"/> 엘리먼트를 추가하십시오" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "" | ||||
| "사용자 정의 상수는 대문자로 시작되어야 합니다. \"%s\"은(는) 그렇지 않습니다." | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "상수 \"%s\"은(는) 이미 지정되어 있습니다" | ||||
| @@ -1324,9 +1330,7 @@ msgstr "<%s> 엘리먼트는 <%s> 아래에 허용되지 않습니다" | ||||
| msgid "" | ||||
| "Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio\" " | ||||
| "for buttons" | ||||
| msgstr "" | ||||
| "단추의 button_width/button_height 와 \"aspect_ratio\"를 한꺼번에 지정할 수 없" | ||||
| "습니다" | ||||
| msgstr "단추의 \"button_width\"/\"button_height\"와 \"aspect_ratio\"를 한꺼번에 지정할 수 없습니다" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:1450 | ||||
| #, c-format | ||||
| @@ -1387,7 +1391,7 @@ msgstr "\"%s\"라 불리는 <draw_ops>는 정의되지 않았습니다" | ||||
| #: ../src/ui/theme-parser.c:2706 ../src/ui/theme-parser.c:2802 | ||||
| #, c-format | ||||
| msgid "Including draw_ops \"%s\" here would create a circular reference" | ||||
| msgstr "draw_ops를 포함하는 \"%s\"이(가) 자기 자신을 참조하고 있습니다" | ||||
| msgstr "여기서 draw_ops \"%s\"을(를) 포함하면 순환 참조가 됩니다." | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:2917 | ||||
| #, c-format | ||||
| @@ -1569,205 +1573,7 @@ msgstr "<%s> 엘리먼트 안에 텍스트가 허용되지 않습니다" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "이 테마에서 <%s> 태그가 두 번 지정되었습니다" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "%s 테마의 올바른 파일을 찾는 데 실패했습니다\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "창(_W)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "대화 상자(_D)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "모달 대화 상자(_M)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "도구(_U)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "스플래시 화면(_S)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "위 도크(_T)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "아래 도크(_B)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "왼쪽 도크(_L)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "오른쪽 도크(_R)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "모든 도크(_A)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "데스크톱(_K)" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "이 창을 하나 더 엽니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "'열기' 아이콘이 들어 있는 데모 단추입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "'끝내기' 아이콘이 들어 있는 데모 단추입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "예제 대화 상자의 예제 메시지입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "가짜 메뉴 항목 %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "테두리만 있는 창" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "모음" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "보통 프로그램 창" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "대화 상자" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "모달 대화 상자" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "도구 팔레트" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "떼어내기 메뉴" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "테두리" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "부착한 모달 대화 상자" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "단추 배치 테스트 %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "창 프레임 하나를 그리는 데 %g ms" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "사용법: metacity-theme-viewer [테마이름]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "테마를 읽어들이는 데 오류가 발생했습니다: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "\"%s\" 테마를 읽어들이는 데 %g초\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "보통 제목 글꼴" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "작은 제목 글꼴" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "큰 제목 글꼴" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "단추 배치" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "벤치마크" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "창 제목이 여기에 들어갑니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "%d개 프레임을 그리는 데 클라이언트 입장에서 %g초가 걸렸습니다(한 프레임에 %g " | ||||
| "ms). 그리고 X 서버 리소스까지 포함해 실제 시간으로 %g 초가 걸렸습니다(한 프레" | ||||
| "임에 %g ms).\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "위치 표현식 테스트가 참을 리턴했지만 오류가 발생했습니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "위치 표현식 테스트가 거짓을 리턴했지만 오류가 발생하지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "오류가 발생해야 하지만 발생하지 않았습니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "오류 %d번이 발생해야 하지만 오류 %d번이 발생했습니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "오류가 발생하면 안 되지만 오류 한 개가 발생했습니다: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "가로값이 %d입니다. 와야 하는 값은 %d입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "세로값이 %d입니다. 와야 하는 값은 %d입니다" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "좌표 표현식 %d개를 %g초에 파싱했습니다(평균 %g초)\n" | ||||
|   | ||||
							
								
								
									
										443
									
								
								po/lt.po
									
									
									
									
									
								
							
							
						
						
									
										443
									
								
								po/lt.po
									
									
									
									
									
								
							| @@ -13,8 +13,8 @@ msgstr "" | ||||
| "Project-Id-Version: lt\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" | ||||
| "product=mutter&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-01 15:50+0000\n" | ||||
| "PO-Revision-Date: 2013-03-02 22:57+0200\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-08-28 23:06+0300\n" | ||||
| "Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n" | ||||
| "Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n" | ||||
| "Language: lt\n" | ||||
| @@ -216,18 +216,18 @@ msgstr "Rodyti skyrimą dešinėje" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:507 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "Kita kompozicijos valdyklė jau veikia ekrane %i vaizduoklyje „%s“." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1111 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "nepavyko sukurti fono tekstūros iš failo" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "Skambučio įvykis" | ||||
|  | ||||
| @@ -259,17 +259,17 @@ msgstr "_Laukti" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Priverstinai išeiti" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Trūksta %s priedo, reikalingo komponavimui" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Nepavyko atverti X Window sistemos ekrano „%s“\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -278,42 +278,41 @@ msgstr "" | ||||
| "Kažkokia kita programa jau naudoja %s klavišą su modifikatoriais %x kaip " | ||||
| "susiejimą\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| #| msgid "\"%s\" is not a valid value for focus attribute" | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "„%s“ yra nepriimtinas spartusis klavišas\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Išjungti susijungimą su sesijos valdykle" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Pakeisti veikiančią langų valdyklę" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Nurodyti sesijos valdymo ID" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "Naudotinas X ekranas" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Inicializuoti sesiją iš išsaugojimo failo" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Sinchronizuoti X iškvietimus" | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Nepavyko nuskanuoti temų aplanko: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -321,6 +320,20 @@ msgstr "" | ||||
| "Nepavyko rasti temos! Įsitikinkite, kad %s egzistuoja ir kad ten yra " | ||||
| "įprastos temos.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Integruotas vaizduoklis" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| #| msgid "Unknown element %s" | ||||
| msgid "Unknown %s" | ||||
| msgstr "Nežinomas %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -346,7 +359,7 @@ msgstr "Parodyti versiją" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Naudojamas Mutter įskiepis" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -354,12 +367,12 @@ msgstr "" | ||||
| "Apsauga nuo sugadintų programų atjungta. Kai kurios programos gali pradėti " | ||||
| "keistai elgtis.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Nepavyko perskaityti šrifto aprašymo „%s“ saugomo GSettings rakte %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -368,7 +381,7 @@ msgstr "" | ||||
| "„%s“ reikšmė rasta nustatymų duomenų bazėje yra netinkama pelės mygtuko " | ||||
| "keitiklio aprašymui\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -377,17 +390,17 @@ msgstr "" | ||||
| "„%s“ reikšmė rasta konfiguracijos duomenų bazė yra netinkama klavišų " | ||||
| "kombinacijai „%s“\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Darbalaukis %d" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Ekranas %d vaizduoklyje „%s“ netinkamas\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -396,19 +409,19 @@ msgstr "" | ||||
| "Ekranas %d vaizduoklyje „%s“ jau turi langų valdyklę; pabandykite " | ||||
| "pasinaudoti parinktimi --replace, jei norite pakeisti esamą langų valdyklę.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "" | ||||
| "Nepavyko aptikti langų valdyklės pasirinkimo ekrano %d vaizduoklyje „%s“\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Ekranas %d vaizduoklyje „%s“ jau turi langų valdyklę\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Nepavyko pasitraukti iš ekrano %d vaizduoklyje „%s“\n" | ||||
| @@ -468,44 +481,43 @@ msgstr "" | ||||
| "Šie langai nepalaiko "išsaugoti esamus nustatymus" komandos ir " | ||||
| "turi būti paleisti rankiniu būdu, kai prisijungsite kitą kartą." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Nepavyko atverti derinimo žurnalo: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "Funkcija fdopen() su žurnalo failu %s nesėkminga: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Atvertas žurnalo failas %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter buvo sukompiliuota be išsamaus veikimo veiksenos\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "Langų valdyklė:" | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Klaida langų valdyklėje:" | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Langų valdyklės perspėjimas:" | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Langų valdyklės klaida:" | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7539 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -521,7 +533,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8263 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -531,22 +543,22 @@ msgstr "" | ||||
| "tuo pat metu nustatė ir leistinas mažiausio dydžio %d x %d bei didžiausio " | ||||
| "dydžio %d x %d reikšmes; tai yra beprasmiška.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Programa nustatė netinkamą _NET_WM_PID %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (kompiuteryje %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Nekorektiškas WM_TRANSIENT_FOR langas 0x%lx nurodytas %s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR langas 0x%lx nurodytas %s sukurtų ciklą.\n" | ||||
| @@ -710,109 +722,104 @@ msgstr "Pasirinkti langą iš tab iššokimo" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Atšaukti tab iššokimą" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Naudojimas: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "Sumaži_nti" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Iš_didinti" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "_Grąžinti iš išdidinimo" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "Su_vynioti" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "_Išvynioti" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "Pe_rkelti" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "_Keisti dydį" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Perkelti lango juostą ant _ekrano" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "Visada _viršuje" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "_Visada matomame darbalaukyje" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "_Tik šiame darbalaukyje" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Perkelti _langą į kairįjį darbalaukį" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Pe_rkelti langą į dešinįjį darbalaukį" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Perkelti langą į a_ukštesnįjį darbalaukį" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Perkelti langą į ž_emesnįjį darbalaukį" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Užverti" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Darbalaukis %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "1_0-tas darbalaukis" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Darbalaukis %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Perkelti langą į kitą _darbalaukį" | ||||
|  | ||||
| @@ -914,48 +921,48 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "viršus" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "apačia" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "kairė" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "dešinė" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "rėmelio aprašyme nenurodytas „%s“ matmuo" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "rėmelio aprašyme nenurodytas paraštės „%2$s“ „%1$s“ matmuo" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "Mygtuko dydžio santykis %g yra nenuosaikus" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "Rėmelio aprašyme nenurodytas mygtukų dydis" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Aprašant persiliejančias spalvas reikia nurodyti bent dvi spalvas" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -965,7 +972,7 @@ msgstr "" | ||||
| "uždarančius laužtinius skliaustus, pvz.: gtk:custom(foo,bar); nepavyko " | ||||
| "perskaityti „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -974,7 +981,7 @@ msgstr "" | ||||
| "Netinkamas simbolis „%c“ gtk:custom parametre color_name, leidžiama tik A-Za-" | ||||
| "z0-9_" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -983,7 +990,7 @@ msgstr "" | ||||
| "Gtk:custom formatas yra „gtk:custom(color_name,fallback)“, „%s“ neatitinka " | ||||
| "šio formato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -993,7 +1000,7 @@ msgstr "" | ||||
| "skliaustų, pvz.: gtk:fg[NORMAL], kur NORMAL yra būsena; nepavyko apdoroti " | ||||
| "\"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -1003,17 +1010,17 @@ msgstr "" | ||||
| "skliaustus, pvz.: gtk:fg[NORMAL], kur NORMAL yra būsena; nepavyko apdoroti " | ||||
| "\"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Nesuprantama spalvų aprašymo būsena \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "Spalvų aprašyme nurodytas nesuprantamas spalvos komponentas \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1022,19 +1029,19 @@ msgstr "" | ||||
| "Išplaukimo formatas yra \"blend/bg_color/fg_color/alpha\", \"%s\" neatitinka " | ||||
| "šio formato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "" | ||||
| "Nepavyko aprodoti skaidrumo reikšmės \"%s\" priskirtos išplaukiančiai spalva" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "" | ||||
| "Skaidrumo reikšmė \"%s\" tarp išplaukiančios spalvos yra ne tarp 0.0 ir 1.0" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| @@ -1042,27 +1049,27 @@ msgstr "" | ||||
| "Šešėlio formatas yra \"shade/base_color/factor\", \"%s\" neatitinka šio " | ||||
| "formato" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "Nepavyko apdoroti šešėlinės spalvos šešėlių rodiklio \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Šešėlio rodiklis \"%s\" tarp šešėlinės spalvos yra neigiamas" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Nepavyko apdoroti spalvos \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Koordinačių išraiška turi neleistiną simbolį '%s'" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| @@ -1071,13 +1078,13 @@ msgstr "" | ||||
| "Koordinačių išraiška turi skaičių su slankiu kableliu '%s', kuris negali " | ||||
| "būti apdorotas" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "" | ||||
| "Koordinačių išraiška turi sveiką skaičių '%s', kuris negali būti apdorotas" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -1086,17 +1093,17 @@ msgstr "" | ||||
| "Koordinačių išraiškoje nurodytas nežinomas operatorius šio teksto pradžioje: " | ||||
| "\"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "Koordinačių išraiška tuščia arba nesuprantama" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "Koordinačių išraiška sukelia dalybą iš nulio" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| @@ -1104,7 +1111,7 @@ msgstr "" | ||||
| "Koordinačių išraiška bando panaudoti liekanos operatorių (mod) slankaus " | ||||
| "kablelio skaičiui" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| @@ -1112,17 +1119,17 @@ msgstr "" | ||||
| "Koordinačių išraiškoje įvestas operatorius \"%s\" ten, kur turi būti vedamas " | ||||
| "operandas" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "Koordinačių išraiškoje operandas įrašytas operatoriaus vietoje" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "Koordinačių išraiška pasibaigė operatoriumi, o ne operandu" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1131,41 +1138,41 @@ msgstr "" | ||||
| "Koordinačių išraiškoje operatorius \"%c\" eina po operatoriaus \"%c\" be " | ||||
| "tarpinio operando" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "Koordinačių išraiška saugo nežinomą kintamąjį arba konstantą \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "Koordinačių išraiškų skaitytuvas perpildė buferį." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "" | ||||
| "Koordinačių išraiškoje įvesti uždarantys skliaustai, nors atidarančių " | ||||
| "skliaustų nerasta" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "" | ||||
| "Koordinačių išraiškoje po atidarančių skliaustų neįvesti uždarantys " | ||||
| "skliaustai" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "Koordinačių išraiška neturi jokių operatorių ar operandų" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Temoje esanti išraiška sukėlė klaidą: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1174,25 +1181,25 @@ msgstr "" | ||||
| "Šiam rėmelio stiliui turi būti nurodytas <button function=\"%s\" state=\"%s" | ||||
| "\" draw_ops=\"kažkokswhatever\"/> požymis" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "" | ||||
| "Trūksta <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"kažkoks\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Nepavyko paleisti temos \"%s\": %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "Temoje \"%2$s\" trūksta <%1$s> nustatymų" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1201,7 +1208,7 @@ msgstr "" | ||||
| "Rėmelio stilius nenurodytas lango tipui \"%s\" temoje \"%s\", pridėkite " | ||||
| "<window type=\"%s\" style_set=\"kažkoks\"/> elementą" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| @@ -1209,7 +1216,7 @@ msgstr "" | ||||
| "Naudotojo nustatytos konstantos turi prasidėti didžiąja raide; „%s“ nėra " | ||||
| "didžioji" | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Konstanta „%s“ jau aprašyta" | ||||
| @@ -1593,210 +1600,8 @@ msgstr "Elemente <%s> tekstas negalimas" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> elementas temos aprašyme nurodytas du kartus" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Nepavyko rasti tinkamo temos %s failo\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Langai" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Dialogas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Modalinis dialogas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Įrankis" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Pristatymo langas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Viršutinis dokas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Apatinis dokas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "_Kairysis dokas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "_Kairysis dokas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "Visi dok_ai" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "Dar_bastalis" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Atverti dar vieną tokį langą" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Tai yra bandomasis mygtukas su „atverti“ piktograma" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Tai yra bandomasis mygtukas su „uždaryti“ piktograma" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Tai yra pavydžio pranešimas pavyzdžio dialoge" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Netikras meniu punktas %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Tik rėmelį turintis langas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Juosta" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Normalus programos langas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Dialogo langas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Modalinis dialogo langas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Įrankių paletė" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Atkabinamas meniu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Paraštė" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Prikabintas modalinis dialogas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Mygtukų išdėstymo testas %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "vienam lango kadrui išvesti yra skirta %g milisekundžių" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Panaudojimas: metacity-theme-viewer [TEMOS PAVADINIMAS]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Klaida įkeliant temą: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Tema „%s“ įkelta per %g sekundžių\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Normalus antraštės šriftas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Smulkus antraštės šriftas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Didelis antraštės šriftas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Mygtukų išdėstymai" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Greičio testas" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Čia rodomo lango antraštė" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "%d kadrai buvo išvesti per %g klientines sekundes (%g milisekunčių kadrui) " | ||||
| "ir per %g bendrinio laiko sekundes įskaitant X serverio resursus (%g " | ||||
| "milisekundžių kadrui)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "" | ||||
| "padėties išraiškos testas grąžino teigiamą reikšmę, bet kartu nustatė " | ||||
| "klaidos pranešimą" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "" | ||||
| "padėties išraiškos testas grąžino neigiamą reikšmę, bet nenustatė klaidos " | ||||
| "pranešimo" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Tikėtasi sulaukti klaidos pranešimo, tačiau nieko nesulaukta" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Tikėtasi klaidos %d, tačiau gauta %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Klaidos nesitikėta, tačiau grąžinta klaida: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "x reikšmė buvo %d, tikėtasi %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "y reikšmė buvo %d, tikėtasi %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "Koordinačių %d išraiška apdorota per %g sekundžių (%g sekundžių vidurkis)\n" | ||||
|   | ||||
							
								
								
									
										331
									
								
								po/nb.po
									
									
									
									
									
								
							
							
						
						
									
										331
									
								
								po/nb.po
									
									
									
									
									
								
							| @@ -4,10 +4,10 @@ | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter 3.8.x\n" | ||||
| "Project-Id-Version: mutter 3.9.x\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-04-03 14:10+0200\n" | ||||
| "PO-Revision-Date: 2013-04-03 14:11+0200\n" | ||||
| "POT-Creation-Date: 2013-08-22 16:11+0200\n" | ||||
| "PO-Revision-Date: 2013-08-22 16:12+0200\n" | ||||
| "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" | ||||
| "Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n" | ||||
| "Language: \n" | ||||
| @@ -205,14 +205,14 @@ msgstr "Visning delt til høyre" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:568 | ||||
| #: ../src/compositor/compositor.c:596 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "En annen compositing manager kjører skjerm %i på display «%s»." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1064 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "bakgrunnstekstur kunne ikke lages fra fil" | ||||
|  | ||||
| @@ -250,17 +250,17 @@ msgstr "_Vent" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Tvungen nedstenging" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Feil under åpning av X Window System skjerm «%s»\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:935 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -269,7 +269,7 @@ msgstr "" | ||||
| "Et annet program bruker allerede nøkkelen %s med modifikatorer %x som " | ||||
| "binding\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1135 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "«%s» er ikke en gyldig aksellerator\n" | ||||
| @@ -311,6 +311,19 @@ msgstr "" | ||||
| "Kunne ikke finne et tema! Sjekk at %s eksisterer og inneholder de vanlige " | ||||
| "temaene.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:702 | ||||
| msgid "Built-in display" | ||||
| msgstr "Innebygget skjerm" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:730 | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "Ukjent %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -333,7 +346,7 @@ msgstr "Skriv versjonsnummer" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Mutter-tillegg som skal brukes" | ||||
|  | ||||
| #: ../src/core/prefs.c:1095 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -341,12 +354,12 @@ msgstr "" | ||||
| "Funksjonalitet for å gå rundt ødelagte programmer er deaktivert. Noen " | ||||
| "programmer vil kanskje ikke oppføre seg korrekt.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1170 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Kunne ikke tolke skriftbeskrivelsen «%s» fra GSettings-nøkkel %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1236 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -355,7 +368,7 @@ msgstr "" | ||||
| "«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for endring av " | ||||
| "musknapp\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1788 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -364,17 +377,17 @@ msgstr "" | ||||
| "«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for " | ||||
| "tastaturbinding «%s»\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1887 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Arbeidsområde %d" | ||||
|  | ||||
| #: ../src/core/screen.c:691 | ||||
| #: ../src/core/screen.c:537 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Skjerm %d på display «%s» er ugyldig\n" | ||||
|  | ||||
| #: ../src/core/screen.c:707 | ||||
| #: ../src/core/screen.c:553 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -383,19 +396,19 @@ msgstr "" | ||||
| "Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke " | ||||
| "flagget --replace for å erstatte aktiv vindushåndterer.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:734 | ||||
| #: ../src/core/screen.c:580 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "" | ||||
| "Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\n" | ||||
|  | ||||
| #: ../src/core/screen.c:812 | ||||
| #: ../src/core/screen.c:658 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n" | ||||
|  | ||||
| #: ../src/core/screen.c:998 | ||||
| #: ../src/core/screen.c:850 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Kunne ikke slippe skjerm %d på display «%s»\n" | ||||
| @@ -470,8 +483,7 @@ msgstr "Feil under fdopen() av loggfil %s: %s\n" | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Åpnet loggfil %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:119 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mutter er kompilert uten støtte for «verbose» modus\n" | ||||
|  | ||||
| @@ -479,20 +491,20 @@ msgstr "Mutter er kompilert uten støtte for «verbose» modus\n" | ||||
| msgid "Window manager: " | ||||
| msgstr "Vindushåndterer: " | ||||
|  | ||||
| #: ../src/core/util.c:412 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Feil i vindushåndterer: " | ||||
|  | ||||
| #: ../src/core/util.c:443 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Advarsel fra vindushåndterer: " | ||||
|  | ||||
| #: ../src/core/util.c:471 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Feil i vindushåndterer: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7596 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -508,7 +520,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8320 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -518,22 +530,22 @@ msgstr "" | ||||
| "men setter minste størrelse %d x %d og maks størrelse %d x %d; dette virker " | ||||
| "ikke fornuftig.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Programmet satte en feil _NET_WM_PID %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (på %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Ugyldig WM_TRANSIENT_FOR vindu 0x%lx oppgitt for %s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR vindu 0x%lx for %s ville skapt en løkke.\n" | ||||
| @@ -684,7 +696,9 @@ msgstr "Maksimer vinduer automatisk hvis de er nesten like store som skjermen" | ||||
| msgid "" | ||||
| "If enabled, new windows that are initially the size of the monitor " | ||||
| "automatically get maximized." | ||||
| msgstr "Nye vinduer som i utgangspunktet er samme størrelse som skjermen vil automatisk bli maksimert hvis denne slås på." | ||||
| msgstr "" | ||||
| "Nye vinduer som i utgangspunktet er samme størrelse som skjermen vil " | ||||
| "automatisk bli maksimert hvis denne slås på." | ||||
|  | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:19 | ||||
| msgid "Select window from tab popup" | ||||
| @@ -694,109 +708,104 @@ msgstr "Fjern vindu fra tabulatordialog" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Avbryt tabulatordialog" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr " Bruk: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "Mi_nimer" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Ma_ksimer" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "G_jenopprett" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "Rull _opp" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "R_ull ned" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "_Flytt" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "End_re størrelse" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Flytt tittellinje på _skjermen" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "All_tid øverst" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "_Alltid på synlig arbeidsområde" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "K_un på dette arbeidsområdet" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Flytt til arbeidsområdet ti_l venstre" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Flytt til a_rbeidsområdet til høyre" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Flytt til arbeidsområdet _over" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Flytt til arbeidsområdet ne_denfor" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Lukk" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Arbeidsområde %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Arbeidsområde 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Arbeidsområde %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Flytt til et annet ar_beidsområde" | ||||
|  | ||||
| @@ -1149,18 +1158,18 @@ msgid "" | ||||
| msgstr "" | ||||
| "Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5084 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Klarte ikke å laste tema «%s»: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5220 ../src/ui/theme.c:5227 ../src/ui/theme.c:5234 | ||||
| #: ../src/ui/theme.c:5241 ../src/ui/theme.c:5248 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "<%s> er ikke satt for tema «%s»" | ||||
|  | ||||
| #: ../src/ui/theme.c:5256 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1169,14 +1178,14 @@ msgstr "" | ||||
| "Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window " | ||||
| "type=«%s» style_set=«ett-eller-annet»/>-element" | ||||
|  | ||||
| #: ../src/ui/theme.c:5663 ../src/ui/theme.c:5725 ../src/ui/theme.c:5788 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "" | ||||
| "Brukerdefinerte konstanter må begynne med stor bokstav; «%s» gjør ikke det" | ||||
|  | ||||
| #: ../src/ui/theme.c:5671 ../src/ui/theme.c:5733 ../src/ui/theme.c:5796 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Konstant «%s» er allerede definert" | ||||
| @@ -1561,201 +1570,3 @@ msgstr "<%s> spesifisert to ganger for dette temaet" | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Fant ikke en gyldig fil for tema %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Vinduer" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Dialog" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Modal dialog" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Verktøy" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "Opp_startskjerm" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Toppdokk" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Bunndokk" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "_Venstre dokk" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "Høy_re dokk" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "_Alle dokker" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "S_krivebord" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Åpne et til av disse vinduene" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Dette er en demoknapp med et «åpne»-ikon" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Dette er en demoknapp med et «avslutt»-ikon" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Dette er en eksempelbeskjed i en eksempeldialog" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Falsk menyoppføring %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Vindu uten innhold" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Linje" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Normalt programvindu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Dialogboks" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Modal dialogboks" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Verktøypalett" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Avrevet meny" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Kant" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Festet modal dialog" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Test av knappeplassering %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g millisekunder for å tegne en vindusramme" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Bruk: metacity-theme-viewer [TEMANAVN]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Feil under lasting av tema: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Lastet tema «%s» på %g sekunder\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Normal tittelskrift" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Liten tittelskrift" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Stor tittelskrift" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Knappeplasseringer" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Ytelsestest" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Vindutittel skal her" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Tegnet %d rammer på %g sekunder hos klienten (%g millisekunder per ramme) og " | ||||
| "%g sekunder på klokken inklusive ressurser på X-tjener (%g millisekunder per " | ||||
| "ramme)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "test av posisjonsuttrykk returnerte TRUE, men satte en feilkode" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "test av posisjonsuttrykk returnerte FALSE, men satte ikke en feilkode" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Feil var ventet men ingen ble gitt" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Feil %d var ventet men %d ble gitt" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Feil ikke ventet men en ble returnert: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "x-verdi var %d, %d var ventet" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "y-verdi var %d, %d var ventet" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "%d koordinatuttrykk lest på %g sekunder (%g sekunder i snitt)\n" | ||||
|   | ||||
							
								
								
									
										440
									
								
								po/pl.po
									
									
									
									
									
								
							
							
						
						
									
										440
									
								
								po/pl.po
									
									
									
									
									
								
							| @@ -15,8 +15,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-03-02 01:52+0100\n" | ||||
| "PO-Revision-Date: 2013-03-02 01:53+0100\n" | ||||
| "POT-Creation-Date: 2013-08-22 01:49+0200\n" | ||||
| "PO-Revision-Date: 2013-08-22 01:50+0200\n" | ||||
| "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n" | ||||
| "Language-Team: Polish <gnomepl@aviary.pl>\n" | ||||
| "Language: pl\n" | ||||
| @@ -220,7 +220,7 @@ msgstr "Podział widoku po prawej" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:507 | ||||
| #: ../src/compositor/compositor.c:596 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -228,11 +228,11 @@ msgid "" | ||||
| msgstr "" | ||||
| "Inny menedżer składania jest już uruchomiony na podekranie %i ekranu \"%s\"." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1111 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "nie można utworzyć tekstury tła z pliku" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "Zdarzenie sygnału dźwiękowego" | ||||
|  | ||||
| @@ -264,18 +264,18 @@ msgstr "_Czekaj" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Zakończ" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Brak rozszerzenia %s, wymaganego przez składanie" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "" | ||||
| "Otwarcie połączenia z ekranem \"%s\" systemu X Window się nie powiodło\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -284,41 +284,41 @@ msgstr "" | ||||
| "Skrótu klawiszowego z klawiszem %s i modyfikatorami %x używa już inny " | ||||
| "program\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "\"%s\" nie jest prawidłowym skrótem\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Rozłącza połączenie z menedżerem sesji" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Zastępuje uruchomionego menedżera okien" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Podaje identyfikator zarządzania sesją" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "Używany ekran X" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Inicjuje sesję z zapisanego pliku" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Synchroniczne wywołania X" | ||||
|  | ||||
| #: ../src/core/main.c:533 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Przejrzenie katalogu z motywami się nie powiodło: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:549 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -326,6 +326,19 @@ msgstr "" | ||||
| "Nie można odnaleźć żadnego motywu. Proszę sprawdzić, czy katalog %s istnieje " | ||||
| "i zawiera standardowe motywy.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:702 | ||||
| msgid "Built-in display" | ||||
| msgstr "Wbudowany ekran" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:730 | ||||
| #, c-format | ||||
| msgid "Unknown %s" | ||||
| msgstr "Nieznany %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -350,7 +363,7 @@ msgstr "Wyświetla wersję" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Używana wtyczka programu Mutter" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -358,14 +371,14 @@ msgstr "" | ||||
| "Obejścia dla błędnie działających programów są wyłączone. Niektóre z nich " | ||||
| "mogą się zachowywać w sposób nieprzewidywalny.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "" | ||||
| "Nie można przetworzyć opisu czcionki \"%s\", powiązanego z kluczem GSettings " | ||||
| "%s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -374,7 +387,7 @@ msgstr "" | ||||
| "Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje " | ||||
| "prawidłowo modyfikatora przycisku myszy\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -383,17 +396,17 @@ msgstr "" | ||||
| "Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje " | ||||
| "prawidłowo skrótu klawiszowego \"%s\"\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Obszar roboczy %d" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:537 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Podekran %d ekranu \"%s\" jest nieprawidłowy\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:553 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -402,7 +415,7 @@ msgstr "" | ||||
| "Na podekranie %d ekranu \"%s\" działa już menedżer okien. Aby zastąpić " | ||||
| "działającego menedżera okien, proszę spróbować użyć opcji --replace.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:580 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| @@ -410,12 +423,12 @@ msgstr "" | ||||
| "Nie można uzyskać zaznaczenia menedżera okien na podekranie %d ekranu \"%s" | ||||
| "\"\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:658 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Na podekranie %d ekranu \"%s\" działa już menedżer okien\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:850 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Nie można zwolnić podekranu %d ekranu \"%s\"\n" | ||||
| @@ -477,45 +490,44 @@ msgstr "" | ||||
| "Te okna nie obsługują opcji zapisu aktualnego stanu (\"save current setup" | ||||
| "\"), więc przy następnym zalogowaniu będą musiały zostać uruchomione ręcznie." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Otwarcie dziennika z zapisem wykonania się nie powiodło: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "Wykonać fdopen() na pliku dziennika %s się nie powiodło: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Otwarty plik dziennika %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "" | ||||
| "Program Mutter został skompilowany bez obsługi trybu z obszerną informacją\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "Menedżer okien: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Błąd w programie menedżera okien: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Ostrzeżenie menedżera okien: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Błąd menedżera okien: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7539 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -531,7 +543,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8263 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -541,23 +553,23 @@ msgstr "" | ||||
| "niezmienny, lecz jednocześnie ustawia minimalny rozmiar na %d x %d, a " | ||||
| "maksymalny rozmiar na %d x %d. To nie ma żadnego sensu.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Program ustawił błędną wartość _NET_WM_PID %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (na %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "" | ||||
| "Nieprawidłowa wartość WM_TRANSIENT_FOR dla okna 0x%lx określona w %s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR okna 0x%lx dla %s utworzyłoby pętlę.\n" | ||||
| @@ -730,109 +742,104 @@ msgstr "Wybór okna z wyskakującego okna dla tabulacji" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Anulowanie wyskakującego okna dla tabulacji" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Użycie: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "Zm_inimalizuj" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "Zm_aksymalizuj" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "Cofnij m_aksymalizację" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "_Zwiń" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "Ro_zwiń" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "Prz_esuń" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "Zmień _rozmiar" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Przeno_szenie paska tytułowego na ekranie" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "Zawsze na _wierzchu" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "_Zawsze na widocznym obszarze roboczym" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "_Tylko na tym obszarze roboczym" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Przenieś na _lewy obszar roboczy" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Przen_ieś na prawy obszar roboczy" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "_Przenieś na górny obszar roboczy" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Przenieś na _dolny obszar roboczy" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "Za_mknij" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Obszar roboczy %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Obszar roboczy 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Obszar roboczy %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Przeniesienie na inny _obszar roboczy" | ||||
|  | ||||
| @@ -934,49 +941,49 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "góra" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "dół" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "lewa" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "prawa" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "Rozmiar ramki nie określa wymiaru \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "Rozmiar ramki nie określa wymiaru \"%s\" dla krawędzi \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "" | ||||
| "Współczynnik proporcji przycisku %g nie mieści się w rozsądnych granicach" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "Rozmiar ramki nie określa liczby przycisków" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Gradienty powinny się składać co najmniej z dwóch kolorów" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -986,7 +993,7 @@ msgstr "" | ||||
| "kolor zastępczy w nawiasach, np. gtk:custom(foo,bar); nie można przetworzyć " | ||||
| "\"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -995,7 +1002,7 @@ msgstr "" | ||||
| "Nieprawidłowy znak \"%c\" w parametrze nazwa_koloru opcji gtk:custom, tylko " | ||||
| "znaki A-Za-z0-9-_ są prawidłowe" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -1004,7 +1011,7 @@ msgstr "" | ||||
| "Formatem Gtk:custom jest \"gtk:custom(nazwa_koloru,kolor_zastępczy)\", \"%s" | ||||
| "\" nie pasuje do formatu" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -1014,7 +1021,7 @@ msgstr "" | ||||
| "kwadratowych, np. gtk:fg[NORMAL], gdzie NORMAL jest nazwą stanu; nie można " | ||||
| "przetworzyć \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -1024,17 +1031,17 @@ msgstr "" | ||||
| "nawias kwadratowy, np. gtk:fg[NORMAL], gdzie NORMAL jest nazwą stanu; nie " | ||||
| "można przetworzyć \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Niezrozumiały stan \"%s\" w specyfikacji koloru" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "Niezrozumiała definicja koloru \"%s\" w specyfikacji koloru" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1043,19 +1050,19 @@ msgstr "" | ||||
| "Formatem przenikania jest \"blend/bg_color/fg_color/alpha\", \"%s\" nie " | ||||
| "pasuje do formatu" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Nie można przetworzyć wartości alfa \"%s\" w przenikającym kolorze" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "" | ||||
| "Wartość alfa \"%s\" w przenikającym kolorze nie zawiera się pomiędzy 0,0 i " | ||||
| "1,0" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| @@ -1063,29 +1070,29 @@ msgstr "" | ||||
| "Formatem przenikania jest \"shade/base_color/factor\", \"%s\" nie pasuje do " | ||||
| "formatu" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "" | ||||
| "Nie można przetworzyć współczynnika przenikania \"%s\" w przenikającym " | ||||
| "kolorze" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Współczynnik przenikania \"%s\" w przenikającym kolorze jest ujemny" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Nie można przetworzyć koloru \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Wyrażenie określające współrzędne zawiera niedozwolony znak \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| @@ -1094,14 +1101,14 @@ msgstr "" | ||||
| "Wyrażenie określające współrzędne zawiera liczbę zmiennoprzecinkową \"%s\", " | ||||
| "której nie można przetworzyć" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "" | ||||
| "Wyrażenie określające współrzędne zawiera liczbę całkowitą \"%s\", której " | ||||
| "nie można przetworzyć" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -1110,18 +1117,18 @@ msgstr "" | ||||
| "Wyrażenie określające współrzędne zawiera nieznany operator na początku " | ||||
| "tekstu: \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "" | ||||
| "Wyrażenie określające współrzędne jest puste lub nie można go rozpoznać" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "Wyrażenie opisujące położenie zawiera dzielenie przez zero" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| @@ -1129,7 +1136,7 @@ msgstr "" | ||||
| "Wyrażenie opisujące położenie używa operatora dzielenia modulo z liczbą " | ||||
| "zmiennoprzecinkową" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| @@ -1137,19 +1144,19 @@ msgstr "" | ||||
| "Wyrażenie opisujące położenie zawiera operator \"%s\" w miejscu, w którym " | ||||
| "oczekiwano operandu" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "" | ||||
| "Wyrażenie opisujące położenie zawiera operand w miejscu, w którym oczekiwano " | ||||
| "operatora" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "Wyrażenie opisujące położenie kończy się operatorem zamiast operandem" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1158,43 +1165,43 @@ msgstr "" | ||||
| "Wyrażenie opisujące położenie zawiera operator \"%c\" bezpośrednio po " | ||||
| "operatorze \"%c\" bez rozdzielającego ich operandu" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "" | ||||
| "Wyrażenie opisujące położenie zawiera nieznaną zmienną lub stałą \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "Parser wyrażeń określających współrzędne przepełnił swój bufor." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "" | ||||
| "Wyrażenie opisujące położenie zawiera nawias zamykający bez odpowiadającego " | ||||
| "mu nawiasu otwierającego" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "" | ||||
| "Wyrażenie opisujące położenie zawiera nawias otwierający bez odpowiadającego " | ||||
| "mu nawiasu zamykającego" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "" | ||||
| "Wyrażenie opisujące położenie nie zawiera żadnych operatorów ani operandów" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Motyw zawiera wyrażenie, przy którego obliczaniu wystąpił błąd: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1203,25 +1210,25 @@ msgstr "" | ||||
| "Przy tym stylu ramki należy podać <button function=\"%s\" state=\"%s\" " | ||||
| "draw_ops=\"cokolwiek\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "" | ||||
| "Brak <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"cokolwiek\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Wczytanie motywu \"%s\" się nie powiodło: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "Nie określono elementu <%s> dla motywu \"%s\"" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1230,7 +1237,7 @@ msgstr "" | ||||
| "Przy typie okna \"%s\" w motywie \"%s\" nie ustawiono stylu ramki. Należy " | ||||
| "dodać element <window type=\"%s\" style_set=\"cokolwiek\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| @@ -1238,7 +1245,7 @@ msgstr "" | ||||
| "Stałe definiowane przez użytkownika powinny rozpoczynać się wielką literą, " | ||||
| "natomiast \"%s\" nie spełnia tego warunku" | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Stała \"%s\" została już określona" | ||||
| @@ -1626,208 +1633,7 @@ msgstr "Wewnątrz elementu <%s> nie jest dopuszczalny tekst" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> określono dwukrotnie dla tego motywu" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Odnalezienie prawidłowego pliku dla motywu %s się nie powiodło\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Okna" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "Okno _dialogowe" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Modalne okno dialogowe" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Narzędzie" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Ekran powitalny" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Górny dok" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Dolny dok" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "_Lewy dok" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "_Prawy dok" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "_Wszystkie doki" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "Pu_lpit" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Otwiera kolejne okno tego typu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "To jest przycisk demonstracyjny z ikoną \"otwórz\"" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "To jest przycisk demonstracyjny z ikoną \"zakończ\"" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "To jest przykładowy komunikat w prostym oknie dialogowym" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Imitacja elementu menu %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Okno zawierające tylko krawędzie" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Pasek" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Zwykłe okno programu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Okno dialogowe" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Modalne okno dialogowe" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Paleta narzędziowa" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Menu oderwane" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Krawędź" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Dołączone modalne okno dialogowe" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Test układu przycisków %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g milisekundy do narysowania jednej ramki okna" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Użycie: metacity-theme-viewer [NAZWA_MOTYWU]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Błąd podczas wczytywania motywu: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Wczytano motyw \"%s\" w ciągu %g sekund\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Zwykła czcionka tytułu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Mała czcionka tytułu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Duża czcionka tytułu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Układy przycisków" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Test wydajności" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Tutaj znajduje się tytuł okna" | ||||
|  | ||||
| # FIXME - bełkot | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Narysowano %d ramek w ciągu %g sekund klienta (%g milisekund na ramkę) oraz " | ||||
| "%g sekund rzeczywistych, włączając w to zasoby serwera X (%g milisekund na " | ||||
| "ramkę)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "Test wyrażenia pozycji zwrócił wartość PRAWDA, lecz ustawił błąd" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "Test wyrażenia pozycji zwrócił wartość FAŁSZ, lecz nie ustawił błędu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Oczekiwano błędu, lecz nie otrzymano żadnego" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Oczekiwano błędu %d, lecz otrzymano %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Nie oczekiwano błędu, lecz został on zwrócony: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "Wartością X było %d, oczekiwano wartości %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "Wartością Y było %d, oczekiwano wartości %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "Wyrażenia współrzędnych %d zostało przetworzone w %g sekund (średnio %g " | ||||
| "sekund)\n" | ||||
|   | ||||
							
								
								
									
										498
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
							
						
						
									
										498
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										443
									
								
								po/sr.po
									
									
									
									
									
								
							
							
						
						
									
										443
									
								
								po/sr.po
									
									
									
									
									
								
							| @@ -10,8 +10,8 @@ msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter" | ||||
| "&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-01 15:50+0000\n" | ||||
| "PO-Revision-Date: 2013-03-11 11:40+0200\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-09-06 09:19+0200\n" | ||||
| "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" | ||||
| "Language-Team: Serbian <gnom@prevod.org>\n" | ||||
| "Language: sr\n" | ||||
| @@ -212,7 +212,7 @@ msgstr "Прикажите поделу на десно" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:507 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -220,11 +220,11 @@ msgid "" | ||||
| msgstr "" | ||||
| "Неки други композитни управник је већ покренут на приказу %i еркана „%s“." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1111 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "склоп позадине не може бити створен из датотеке" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "Звонца" | ||||
|  | ||||
| @@ -258,17 +258,17 @@ msgstr "_Сачекај" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Приморај излаз" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Недостаје потребан композитни додатак %s" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Нисам успео да отворим екран „%s“ Икс система прозора\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -277,42 +277,41 @@ msgstr "" | ||||
| "Неки други програм већ користи тастер %s са измењивачима %x за неку " | ||||
| "функцију\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| #| msgid "\"%s\" is not a valid value for focus attribute" | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "„%s“ није исправна пречица\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Искључује везу са управником сесије" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Мења текућег управника прозорима" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Наводи ИБ управника сесије" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "Икс екран који ће бити коришћен" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Покреће сесију из датотеке чувања" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Чини Икс позиве усклађеним" | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Нисам успео да прочитам директоријум тема: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -320,6 +319,20 @@ msgstr "" | ||||
| "Не могу да пронађем тему! Проверите да „%s“ постоји и да садржи уобичајене " | ||||
| "теме.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Уграђени дисплеј" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| #| msgid "Unknown element %s" | ||||
| msgid "Unknown %s" | ||||
| msgstr "Непознат %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -343,7 +356,7 @@ msgstr "Исписује издање" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Прикључци Матера за коришћење" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -351,12 +364,12 @@ msgstr "" | ||||
| "Решења за оштећене програме су искључена. Неке апликације се могу понашати " | ||||
| "чудно.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Не могу да обрадим опис „%s“ из кључа „%s“ у Гномовим подешавањима\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -365,24 +378,24 @@ msgstr "" | ||||
| "„%s“ је пронађен у бази подешавања што није исправна вредност која мења " | ||||
| "понашање тастера миша\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| "\"%s\"\n" | ||||
| msgstr "„%s“ из базе са подешавањима није исправна комбинација тастера „%s“\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "%d. радни простор" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Приказ „%d“ на екрану „%s“ није исправан\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -391,18 +404,18 @@ msgstr "" | ||||
| "Приказ „%d“ на екрану „%s“ већ има управника прозора; покушајте да користите " | ||||
| "опцију „--replace“ да замените тренутног управника прозора.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "Не могу да добијем избор управника прозора на приказу %d еркана „%s“\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Приказ %d на екрану „%s“ већ има управника прозора\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Не могу да отпустим приказ %d на екрану „%s“\n" | ||||
| @@ -462,44 +475,43 @@ msgstr "" | ||||
| "Ови прозори не подржавају могућност „сачувај тренутна подешавања“ па ћете " | ||||
| "морати ручно да их поново покренете када се следећи пут пријавите." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Нисам успео да отворим дневник грешака: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "Нисам успео да „fdopen()“ датотеку дневника „%s“: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Отворена је датотека дневника „%s“\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Матер је преведен без подршке за опширан режим\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "Управник прозора: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Грешка у управнику прозора: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Упозорење управника прозора: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Грешка управника прозора: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7539 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -515,7 +527,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8263 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -525,22 +537,22 @@ msgstr "" | ||||
| "али је поставио најмању величину %d x %d и највећу величину %d x %d што нема " | ||||
| "много смисла.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Програм је поставио нетачан _NET_WM_PID %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (на %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Неисправан прозор 0x%lx наведен као WM_TRANSIENT_FOR за %s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR прозор 0x%lx за %s ће направити петљу.\n" | ||||
| @@ -705,109 +717,104 @@ msgstr "Бира прозор из језичка искакања" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Отказивање језичка искакања" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Употреба: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "У_мањи" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "У_већај" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "Поништи у_већање" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "_Замотај" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "_Одмотај" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "_Премести" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "П_ромени величину" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Премести траку _наслова на екран" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "Увек _изнад осталих" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "_Увек на видљивом радном простору" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "Само на _овом радном простору" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Премести на радни простор ле_во" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Премести на радни простор де_сно" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Премести на радни простор го_ре" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Премести на радни простор до_ле" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Затвори" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Радни простор %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "1_0. радни простор" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "%s%d. радни простор" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Премести на други _радни простор" | ||||
|  | ||||
| @@ -909,48 +916,48 @@ msgstr "Мод5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "горњу" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "доњу" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "леву" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "десну" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "геометрија оквира не подешава „%s“ димензију" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "геометрија оквира не подешава „%s“ димензију за ивицу „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "Однос размере дугмета %g није разуман" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "Геометрија оквира не подешава величину дугмића" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Преливи морају имати најмање две боје" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -959,7 +966,7 @@ msgstr "" | ||||
| "Спецификација произвољне ГТК боје мора имати назив боје и пребацивање у " | ||||
| "загради, на пример gtk:custom(foo,bar); не могу да обрадим „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -968,7 +975,7 @@ msgstr "" | ||||
| "Неисправан знак „%c“ параметра назив_боје у gtk:custom, иасправни су само A-" | ||||
| "Za-z0-9-_" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -977,7 +984,7 @@ msgstr "" | ||||
| "Гтк:произвољни формат је „gtk:custom(назив_боје,пребацивање)“, „%s“ се не " | ||||
| "уклапа у формат" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -986,7 +993,7 @@ msgstr "" | ||||
| "Спецификација ГТК боје мора имати наведено стање у загради, на пример „gtk:fg" | ||||
| "[NORMAL]“ где је „NORMAL“ стање; не могу да обрадим „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -995,17 +1002,17 @@ msgstr "" | ||||
| "Спецификација ГТК боје мора имати наведено стање у загради, на пример „gtk:fg" | ||||
| "[NORMAL]“ где је „NORMAL“ стање; не могу да обрадим „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Нисам разумео стање „%s“ у спецификацији боје" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "Нисам разумео део боје „%s“ у спецификацији боје" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1014,55 +1021,55 @@ msgstr "" | ||||
| "Формат смеше је „blend/bg_color/fg_color/alpha“, „%s“ се не уклапа у тражени " | ||||
| "формат записа" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Не могу да обрадим алфа вредност „%s“ у смешаној боји" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "Алфа вредност „%s“ у смешаној боји није између 0.0 и 1.0" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| msgstr "Формат сенке је „shade/base_color/factor“, „%s“ се не уклапа у формат" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "Не могу да обрадим фактор сенке „%s“ у осенченој боји" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Фактор сенке „%s“ у осенченој боји је негативан" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Не могу да обрадим боју „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Израз координата садржи знак „%s“ који није дозвољен" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "Израз координата садржи децимални број „%s“ који не може бити обрађен" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "Израз координата садржи цели број „%s“ који не може бити обрађен" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -1070,17 +1077,17 @@ msgid "" | ||||
| msgstr "" | ||||
| "Израз са координатама садржи непознати оператор на почетку овог текста: „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "Израз са координатама је био празан или неразумљив" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "Израз са координатама резултира у дељењу нулом" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| @@ -1088,23 +1095,23 @@ msgstr "" | ||||
| "Израз са координатам покушава да користи оператор остатка при дељењу за " | ||||
| "децимални број" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "Израз са координатама има оператор „%s“ где је очекиван операнд" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "Израз са координатама имаше операнд где је очекиван оператор" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "Израз са координарама је завршио са оператором уместо са операндом" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1113,37 +1120,37 @@ msgstr "" | ||||
| "Израз са координатама има оператор „%c“, а затим оператор „%c“ без операнда " | ||||
| "између" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "Израз са координатама има непознату променљиву или константи „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "Израз са координатама је био превелики за смештај и обраду." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "Израз са координатама има затворене заграде без отворених заграда" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "Израз са координатама има отворену заграду без затворене заграде" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "Израз са координатама изгледа да нема ни један оператор или операнд" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Тема садржи израз који резултира грешком: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1152,25 +1159,25 @@ msgstr "" | ||||
| "<button function=„%s“ state=„%s“ draw_ops=\"whatever\"/> мора бити наведен " | ||||
| "за овај стил оквира" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "" | ||||
| "Недостаје <frame state=„%s“ resize=„%s“ focus=„%s“ style=\"whatever\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Нисам успео да учитам тему „%s“: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "Није дефинисан елемент <%s> за тему „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1179,14 +1186,14 @@ msgstr "" | ||||
| "Није подешен стил оквира за прозор типа „%s“ у теми „%s“. Додајте <window " | ||||
| "type=„%s“ style_set=\"whatever\"/> елемент" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "" | ||||
| "Кориснички дефинисане константе морају почети великим словом; „%s“ не почиње" | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Константа „%s“ је већ дефинисана" | ||||
| @@ -1569,209 +1576,7 @@ msgstr "Није дозвољен текст унутар елемента <%s>" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> је наведен два пута у овој теми" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Нисам успео да пронађем исправну датотеку за тему „%s“\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Прозори" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Прозорче" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Важно прозорче" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Алатка" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Уводни екран" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Горње припајање" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Доње припајање" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "_Лево припајање" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "Д_есно припајање" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "_Сва припајања" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "_Радна површ" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Отвори неки други од ових прозора" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Ово је пробно дугме са „отвори“ иконом" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Ово је пробно дугме са „изађи“ иконицом" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Ово је пример поруке у пробном прозорчету" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Лажна ставка изборника %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Прозор само са ивицом" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Трака" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Обичан прозор програма" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Прозорче" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Важно прозорче" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Палета алата" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Откинути изборник" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Ивица" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Приложено важно прозорче" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Проба распореда дугмића %d" | ||||
|  | ||||
| # bug: plural-forms | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g милисекунди за исцртавање оквира једног прозора" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Употреба: metacity-theme-viewer [НАЗИВ_ТЕМЕ]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Грешка приликом учитавања теме: %s\n" | ||||
|  | ||||
| # bug: plural-forms | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Учитана је тема „%s“ за %g секунде\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Обичан словни лик наслова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Мали словни лик наслова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Велики словни лик наслова" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Распоред дугмића" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Провера брзине" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Овде иде наслов прозора" | ||||
|  | ||||
| # bug: plural-forms | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Нацртао је %d оквира за %g клијентских секунди (%g милисекунди по оквиру) и " | ||||
| "%g секунди времена на зидном часовнику укључујући и ресурсе Икс сервера (%g " | ||||
| "милисекунди по оквиру)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "провера израза положаја је вратила тачно, али је поставила грешку" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "провера израза положаја је вратила нетачно, али није поставила грешку" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Очекивана је грешка, али није дата" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Очекивана је грешка „%d“, али је дата „%d“" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Грешка није очекивана, али је враћена једна: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "x вредност је била „%d“, а очекивана је „%d“" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "y вредност је била „%d“, а очекивана је „%d“" | ||||
|  | ||||
| # bug: plural-forms | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "%d израза координата је обрађено за %g секунде (просек %g секунде)\n" | ||||
|   | ||||
							
								
								
									
										443
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
							
						
						
									
										443
									
								
								po/sr@latin.po
									
									
									
									
									
								
							| @@ -10,8 +10,8 @@ msgstr "" | ||||
| "Project-Id-Version: mutter\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter" | ||||
| "&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2013-03-01 15:50+0000\n" | ||||
| "PO-Revision-Date: 2013-03-11 11:40+0200\n" | ||||
| "POT-Creation-Date: 2013-08-18 20:03+0000\n" | ||||
| "PO-Revision-Date: 2013-09-06 09:19+0200\n" | ||||
| "Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n" | ||||
| "Language-Team: Serbian <gnom@prevod.org>\n" | ||||
| "Language: sr\n" | ||||
| @@ -212,7 +212,7 @@ msgstr "Prikažite podelu na desno" | ||||
|  | ||||
| #. This probably means that a non-WM compositor like xcompmgr is running; | ||||
| #. * we have no way to get it to exit | ||||
| #: ../src/compositor/compositor.c:507 | ||||
| #: ../src/compositor/compositor.c:589 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -220,11 +220,11 @@ msgid "" | ||||
| msgstr "" | ||||
| "Neki drugi kompozitni upravnik je već pokrenut na prikazu %i erkana „%s“." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1111 | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| msgstr "sklop pozadine ne može biti stvoren iz datoteke" | ||||
|  | ||||
| #: ../src/core/bell.c:320 | ||||
| #: ../src/core/bell.c:322 | ||||
| msgid "Bell event" | ||||
| msgstr "Zvonca" | ||||
|  | ||||
| @@ -258,17 +258,17 @@ msgstr "_Sačekaj" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Primoraj izlaz" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Nedostaje potreban kompozitni dodatak %s" | ||||
|  | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Nisam uspeo da otvorim ekran „%s“ Iks sistema prozora\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:929 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -277,42 +277,41 @@ msgstr "" | ||||
| "Neki drugi program već koristi taster %s sa izmenjivačima %x za neku " | ||||
| "funkciju\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1129 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| #| msgid "\"%s\" is not a valid value for focus attribute" | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "„%s“ nije ispravna prečica\n" | ||||
|  | ||||
| #: ../src/core/main.c:196 | ||||
| #: ../src/core/main.c:197 | ||||
| msgid "Disable connection to session manager" | ||||
| msgstr "Isključuje vezu sa upravnikom sesije" | ||||
|  | ||||
| #: ../src/core/main.c:202 | ||||
| #: ../src/core/main.c:203 | ||||
| msgid "Replace the running window manager" | ||||
| msgstr "Menja tekućeg upravnika prozorima" | ||||
|  | ||||
| #: ../src/core/main.c:208 | ||||
| #: ../src/core/main.c:209 | ||||
| msgid "Specify session management ID" | ||||
| msgstr "Navodi IB upravnika sesije" | ||||
|  | ||||
| #: ../src/core/main.c:213 | ||||
| #: ../src/core/main.c:214 | ||||
| msgid "X Display to use" | ||||
| msgstr "Iks ekran koji će biti korišćen" | ||||
|  | ||||
| #: ../src/core/main.c:219 | ||||
| #: ../src/core/main.c:220 | ||||
| msgid "Initialize session from savefile" | ||||
| msgstr "Pokreće sesiju iz datoteke čuvanja" | ||||
|  | ||||
| #: ../src/core/main.c:225 | ||||
| #: ../src/core/main.c:226 | ||||
| msgid "Make X calls synchronous" | ||||
| msgstr "Čini Iks pozive usklađenim" | ||||
|  | ||||
| #: ../src/core/main.c:494 | ||||
| #: ../src/core/main.c:534 | ||||
| #, c-format | ||||
| msgid "Failed to scan themes directory: %s\n" | ||||
| msgstr "Nisam uspeo da pročitam direktorijum tema: %s\n" | ||||
|  | ||||
| #: ../src/core/main.c:510 | ||||
| #: ../src/core/main.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not find a theme! Be sure %s exists and contains the usual themes.\n" | ||||
| @@ -320,6 +319,20 @@ msgstr "" | ||||
| "Ne mogu da pronađem temu! Proverite da „%s“ postoji i da sadrži uobičajene " | ||||
| "teme.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:711 | ||||
| msgid "Built-in display" | ||||
| msgstr "Ugrađeni displej" | ||||
|  | ||||
| #. TRANSLATORS: this is a monitor name (in case we don't know | ||||
| #. the vendor), it's Unknown followed by a size in inches, | ||||
| #. like 'Unknown 15"' | ||||
| #. | ||||
| #: ../src/core/monitor.c:739 | ||||
| #, c-format | ||||
| #| msgid "Unknown element %s" | ||||
| msgid "Unknown %s" | ||||
| msgstr "Nepoznat %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -343,7 +356,7 @@ msgstr "Ispisuje izdanje" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Priključci Matera za korišćenje" | ||||
|  | ||||
| #: ../src/core/prefs.c:1087 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -351,12 +364,12 @@ msgstr "" | ||||
| "Rešenja za oštećene programe su isključena. Neke aplikacije se mogu ponašati " | ||||
| "čudno.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1162 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Ne mogu da obradim opis „%s“ iz ključa „%s“ u Gnomovim podešavanjima\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1228 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -365,24 +378,24 @@ msgstr "" | ||||
| "„%s“ je pronađen u bazi podešavanja što nije ispravna vrednost koja menja " | ||||
| "ponašanje tastera miša\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1780 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| "\"%s\"\n" | ||||
| msgstr "„%s“ iz baze sa podešavanjima nije ispravna kombinacija tastera „%s“\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1879 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "%d. radni prostor" | ||||
|  | ||||
| #: ../src/core/screen.c:673 | ||||
| #: ../src/core/screen.c:534 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Prikaz „%d“ na ekranu „%s“ nije ispravan\n" | ||||
|  | ||||
| #: ../src/core/screen.c:689 | ||||
| #: ../src/core/screen.c:550 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Screen %d on display \"%s\" already has a window manager; try using the --" | ||||
| @@ -391,18 +404,18 @@ msgstr "" | ||||
| "Prikaz „%d“ na ekranu „%s“ već ima upravnika prozora; pokušajte da koristite " | ||||
| "opciju „--replace“ da zamenite trenutnog upravnika prozora.\n" | ||||
|  | ||||
| #: ../src/core/screen.c:716 | ||||
| #: ../src/core/screen.c:577 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Could not acquire window manager selection on screen %d display \"%s\"\n" | ||||
| msgstr "Ne mogu da dobijem izbor upravnika prozora na prikazu %d erkana „%s“\n" | ||||
|  | ||||
| #: ../src/core/screen.c:794 | ||||
| #: ../src/core/screen.c:655 | ||||
| #, c-format | ||||
| msgid "Screen %d on display \"%s\" already has a window manager\n" | ||||
| msgstr "Prikaz %d na ekranu „%s“ već ima upravnika prozora\n" | ||||
|  | ||||
| #: ../src/core/screen.c:979 | ||||
| #: ../src/core/screen.c:846 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Ne mogu da otpustim prikaz %d na ekranu „%s“\n" | ||||
| @@ -462,44 +475,43 @@ msgstr "" | ||||
| "Ovi prozori ne podržavaju mogućnost „sačuvaj trenutna podešavanja“ pa ćete " | ||||
| "morati ručno da ih ponovo pokrenete kada se sledeći put prijavite." | ||||
|  | ||||
| #: ../src/core/util.c:80 | ||||
| #: ../src/core/util.c:84 | ||||
| #, c-format | ||||
| msgid "Failed to open debug log: %s\n" | ||||
| msgstr "Nisam uspeo da otvorim dnevnik grešaka: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:90 | ||||
| #: ../src/core/util.c:94 | ||||
| #, c-format | ||||
| msgid "Failed to fdopen() log file %s: %s\n" | ||||
| msgstr "Nisam uspeo da „fdopen()“ datoteku dnevnika „%s“: %s\n" | ||||
|  | ||||
| #: ../src/core/util.c:96 | ||||
| #: ../src/core/util.c:100 | ||||
| #, c-format | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Otvorena je datoteka dnevnika „%s“\n" | ||||
|  | ||||
| #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149 | ||||
| #, c-format | ||||
| #: ../src/core/util.c:119 | ||||
| msgid "Mutter was compiled without support for verbose mode\n" | ||||
| msgstr "Mater je preveden bez podrške za opširan režim\n" | ||||
|  | ||||
| #: ../src/core/util.c:259 | ||||
| #: ../src/core/util.c:264 | ||||
| msgid "Window manager: " | ||||
| msgstr "Upravnik prozora: " | ||||
|  | ||||
| #: ../src/core/util.c:407 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Greška u upravniku prozora: " | ||||
|  | ||||
| #: ../src/core/util.c:438 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Upozorenje upravnika prozora: " | ||||
|  | ||||
| #: ../src/core/util.c:466 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Greška upravnika prozora: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7539 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -515,7 +527,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8263 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -525,22 +537,22 @@ msgstr "" | ||||
| "ali je postavio najmanju veličinu %d x %d i najveću veličinu %d x %d što nema " | ||||
| "mnogo smisla.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:318 | ||||
| #: ../src/core/window-props.c:347 | ||||
| #, c-format | ||||
| msgid "Application set a bogus _NET_WM_PID %lu\n" | ||||
| msgstr "Program je postavio netačan _NET_WM_PID %lu\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, c-format | ||||
| msgid "%s (on %s)" | ||||
| msgstr "%s (na %s)" | ||||
|  | ||||
| #: ../src/core/window-props.c:1517 | ||||
| #: ../src/core/window-props.c:1546 | ||||
| #, c-format | ||||
| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" | ||||
| msgstr "Neispravan prozor 0x%lx naveden kao WM_TRANSIENT_FOR za %s.\n" | ||||
|  | ||||
| #: ../src/core/window-props.c:1528 | ||||
| #: ../src/core/window-props.c:1557 | ||||
| #, c-format | ||||
| msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" | ||||
| msgstr "WM_TRANSIENT_FOR prozor 0x%lx za %s će napraviti petlju.\n" | ||||
| @@ -705,109 +717,104 @@ msgstr "Bira prozor iz jezička iskakanja" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Otkazivanje jezička iskakanja" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Upotreba: %s\n" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:69 | ||||
| #: ../src/ui/menu.c:67 | ||||
| msgid "Mi_nimize" | ||||
| msgstr "U_manji" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:71 | ||||
| #: ../src/ui/menu.c:69 | ||||
| msgid "Ma_ximize" | ||||
| msgstr "U_većaj" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:73 | ||||
| #: ../src/ui/menu.c:71 | ||||
| msgid "Unma_ximize" | ||||
| msgstr "Poništi u_većanje" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:75 | ||||
| #: ../src/ui/menu.c:73 | ||||
| msgid "Roll _Up" | ||||
| msgstr "_Zamotaj" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:77 | ||||
| #: ../src/ui/menu.c:75 | ||||
| msgid "_Unroll" | ||||
| msgstr "_Odmotaj" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:79 | ||||
| #: ../src/ui/menu.c:77 | ||||
| msgid "_Move" | ||||
| msgstr "_Premesti" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:81 | ||||
| #: ../src/ui/menu.c:79 | ||||
| msgid "_Resize" | ||||
| msgstr "P_romeni veličinu" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:83 | ||||
| #: ../src/ui/menu.c:81 | ||||
| msgid "Move Titlebar On_screen" | ||||
| msgstr "Premesti traku _naslova na ekran" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:86 ../src/ui/menu.c:88 | ||||
| #: ../src/ui/menu.c:84 ../src/ui/menu.c:86 | ||||
| msgid "Always on _Top" | ||||
| msgstr "Uvek _iznad ostalih" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:90 | ||||
| #: ../src/ui/menu.c:88 | ||||
| msgid "_Always on Visible Workspace" | ||||
| msgstr "_Uvek na vidljivom radnom prostoru" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:92 | ||||
| #: ../src/ui/menu.c:90 | ||||
| msgid "_Only on This Workspace" | ||||
| msgstr "Samo na _ovom radnom prostoru" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:94 | ||||
| #: ../src/ui/menu.c:92 | ||||
| msgid "Move to Workspace _Left" | ||||
| msgstr "Premesti na radni prostor le_vo" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:96 | ||||
| #: ../src/ui/menu.c:94 | ||||
| msgid "Move to Workspace R_ight" | ||||
| msgstr "Premesti na radni prostor de_sno" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:98 | ||||
| #: ../src/ui/menu.c:96 | ||||
| msgid "Move to Workspace _Up" | ||||
| msgstr "Premesti na radni prostor go_re" | ||||
|  | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:100 | ||||
| #: ../src/ui/menu.c:98 | ||||
| msgid "Move to Workspace _Down" | ||||
| msgstr "Premesti na radni prostor do_le" | ||||
|  | ||||
| #. separator | ||||
| #. Translators: Translate this string the same way as you do in libwnck! | ||||
| #: ../src/ui/menu.c:104 | ||||
| #: ../src/ui/menu.c:102 | ||||
| msgid "_Close" | ||||
| msgstr "_Zatvori" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Radni prostor %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "1_0. radni prostor" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "%s%d. radni prostor" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "Premesti na drugi _radni prostor" | ||||
|  | ||||
| @@ -909,48 +916,48 @@ msgstr "Mod5" | ||||
| msgid "%d x %d" | ||||
| msgstr "%d x %d" | ||||
|  | ||||
| #: ../src/ui/theme.c:235 | ||||
| #: ../src/ui/theme.c:236 | ||||
| msgid "top" | ||||
| msgstr "gornju" | ||||
|  | ||||
| #: ../src/ui/theme.c:237 | ||||
| #: ../src/ui/theme.c:238 | ||||
| msgid "bottom" | ||||
| msgstr "donju" | ||||
|  | ||||
| #: ../src/ui/theme.c:239 | ||||
| #: ../src/ui/theme.c:240 | ||||
| msgid "left" | ||||
| msgstr "levu" | ||||
|  | ||||
| #: ../src/ui/theme.c:241 | ||||
| #: ../src/ui/theme.c:242 | ||||
| msgid "right" | ||||
| msgstr "desnu" | ||||
|  | ||||
| #: ../src/ui/theme.c:269 | ||||
| #: ../src/ui/theme.c:270 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify \"%s\" dimension" | ||||
| msgstr "geometrija okvira ne podešava „%s“ dimenziju" | ||||
|  | ||||
| #: ../src/ui/theme.c:288 | ||||
| #: ../src/ui/theme.c:289 | ||||
| #, c-format | ||||
| msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" | ||||
| msgstr "geometrija okvira ne podešava „%s“ dimenziju za ivicu „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:325 | ||||
| #: ../src/ui/theme.c:326 | ||||
| #, c-format | ||||
| msgid "Button aspect ratio %g is not reasonable" | ||||
| msgstr "Odnos razmere dugmeta %g nije razuman" | ||||
|  | ||||
| #: ../src/ui/theme.c:337 | ||||
| #: ../src/ui/theme.c:338 | ||||
| #, c-format | ||||
| msgid "Frame geometry does not specify size of buttons" | ||||
| msgstr "Geometrija okvira ne podešava veličinu dugmića" | ||||
|  | ||||
| #: ../src/ui/theme.c:1050 | ||||
| #: ../src/ui/theme.c:1051 | ||||
| #, c-format | ||||
| msgid "Gradients should have at least two colors" | ||||
| msgstr "Prelivi moraju imati najmanje dve boje" | ||||
|  | ||||
| #: ../src/ui/theme.c:1202 | ||||
| #: ../src/ui/theme.c:1203 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK custom color specification must have color name and fallback in " | ||||
| @@ -959,7 +966,7 @@ msgstr "" | ||||
| "Specifikacija proizvoljne GTK boje mora imati naziv boje i prebacivanje u " | ||||
| "zagradi, na primer gtk:custom(foo,bar); ne mogu da obradim „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1218 | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| @@ -968,7 +975,7 @@ msgstr "" | ||||
| "Neispravan znak „%c“ parametra naziv_boje u gtk:custom, iaspravni su samo A-" | ||||
| "Za-z0-9-_" | ||||
|  | ||||
| #: ../src/ui/theme.c:1232 | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| @@ -977,7 +984,7 @@ msgstr "" | ||||
| "Gtk:proizvoljni format je „gtk:custom(naziv_boje,prebacivanje)“, „%s“ se ne " | ||||
| "uklapa u format" | ||||
|  | ||||
| #: ../src/ui/theme.c:1277 | ||||
| #: ../src/ui/theme.c:1278 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " | ||||
| @@ -986,7 +993,7 @@ msgstr "" | ||||
| "Specifikacija GTK boje mora imati navedeno stanje u zagradi, na primer „gtk:fg" | ||||
| "[NORMAL]“ gde je „NORMAL“ stanje; ne mogu da obradim „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1291 | ||||
| #: ../src/ui/theme.c:1292 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "GTK color specification must have a close bracket after the state, e.g. gtk:" | ||||
| @@ -995,17 +1002,17 @@ msgstr "" | ||||
| "Specifikacija GTK boje mora imati navedeno stanje u zagradi, na primer „gtk:fg" | ||||
| "[NORMAL]“ gde je „NORMAL“ stanje; ne mogu da obradim „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1302 | ||||
| #: ../src/ui/theme.c:1303 | ||||
| #, c-format | ||||
| msgid "Did not understand state \"%s\" in color specification" | ||||
| msgstr "Nisam razumeo stanje „%s“ u specifikaciji boje" | ||||
|  | ||||
| #: ../src/ui/theme.c:1315 | ||||
| #: ../src/ui/theme.c:1316 | ||||
| #, c-format | ||||
| msgid "Did not understand color component \"%s\" in color specification" | ||||
| msgstr "Nisam razumeo deo boje „%s“ u specifikaciji boje" | ||||
|  | ||||
| #: ../src/ui/theme.c:1344 | ||||
| #: ../src/ui/theme.c:1345 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " | ||||
| @@ -1014,55 +1021,55 @@ msgstr "" | ||||
| "Format smeše je „blend/bg_color/fg_color/alpha“, „%s“ se ne uklapa u traženi " | ||||
| "format zapisa" | ||||
|  | ||||
| #: ../src/ui/theme.c:1355 | ||||
| #: ../src/ui/theme.c:1356 | ||||
| #, c-format | ||||
| msgid "Could not parse alpha value \"%s\" in blended color" | ||||
| msgstr "Ne mogu da obradim alfa vrednost „%s“ u smešanoj boji" | ||||
|  | ||||
| #: ../src/ui/theme.c:1365 | ||||
| #: ../src/ui/theme.c:1366 | ||||
| #, c-format | ||||
| msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" | ||||
| msgstr "Alfa vrednost „%s“ u smešanoj boji nije između 0.0 i 1.0" | ||||
|  | ||||
| #: ../src/ui/theme.c:1412 | ||||
| #: ../src/ui/theme.c:1413 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" | ||||
| msgstr "Format senke je „shade/base_color/factor“, „%s“ se ne uklapa u format" | ||||
|  | ||||
| #: ../src/ui/theme.c:1423 | ||||
| #: ../src/ui/theme.c:1424 | ||||
| #, c-format | ||||
| msgid "Could not parse shade factor \"%s\" in shaded color" | ||||
| msgstr "Ne mogu da obradim faktor senke „%s“ u osenčenoj boji" | ||||
|  | ||||
| #: ../src/ui/theme.c:1433 | ||||
| #: ../src/ui/theme.c:1434 | ||||
| #, c-format | ||||
| msgid "Shade factor \"%s\" in shaded color is negative" | ||||
| msgstr "Faktor senke „%s“ u osenčenoj boji je negativan" | ||||
|  | ||||
| #: ../src/ui/theme.c:1462 | ||||
| #: ../src/ui/theme.c:1463 | ||||
| #, c-format | ||||
| msgid "Could not parse color \"%s\"" | ||||
| msgstr "Ne mogu da obradim boju „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1779 | ||||
| #: ../src/ui/theme.c:1780 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains character '%s' which is not allowed" | ||||
| msgstr "Izraz koordinata sadrži znak „%s“ koji nije dozvoljen" | ||||
|  | ||||
| #: ../src/ui/theme.c:1806 | ||||
| #: ../src/ui/theme.c:1807 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contains floating point number '%s' which could not be " | ||||
| "parsed" | ||||
| msgstr "Izraz koordinata sadrži decimalni broj „%s“ koji ne može biti obrađen" | ||||
|  | ||||
| #: ../src/ui/theme.c:1820 | ||||
| #: ../src/ui/theme.c:1821 | ||||
| #, c-format | ||||
| msgid "Coordinate expression contains integer '%s' which could not be parsed" | ||||
| msgstr "Izraz koordinata sadrži celi broj „%s“ koji ne može biti obrađen" | ||||
|  | ||||
| #: ../src/ui/theme.c:1941 | ||||
| #: ../src/ui/theme.c:1942 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression contained unknown operator at the start of this text: " | ||||
| @@ -1070,17 +1077,17 @@ msgid "" | ||||
| msgstr "" | ||||
| "Izraz sa koordinatama sadrži nepoznati operator na početku ovog teksta: „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:1998 | ||||
| #: ../src/ui/theme.c:1999 | ||||
| #, c-format | ||||
| msgid "Coordinate expression was empty or not understood" | ||||
| msgstr "Izraz sa koordinatama je bio prazan ili nerazumljiv" | ||||
|  | ||||
| #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155 | ||||
| #: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 | ||||
| #, c-format | ||||
| msgid "Coordinate expression results in division by zero" | ||||
| msgstr "Izraz sa koordinatama rezultira u deljenju nulom" | ||||
|  | ||||
| #: ../src/ui/theme.c:2163 | ||||
| #: ../src/ui/theme.c:2164 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression tries to use mod operator on a floating-point number" | ||||
| @@ -1088,23 +1095,23 @@ msgstr "" | ||||
| "Izraz sa koordinatam pokušava da koristi operator ostatka pri deljenju za " | ||||
| "decimalni broj" | ||||
|  | ||||
| #: ../src/ui/theme.c:2219 | ||||
| #: ../src/ui/theme.c:2220 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has an operator \"%s\" where an operand was expected" | ||||
| msgstr "Izraz sa koordinatama ima operator „%s“ gde je očekivan operand" | ||||
|  | ||||
| #: ../src/ui/theme.c:2228 | ||||
| #: ../src/ui/theme.c:2229 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an operand where an operator was expected" | ||||
| msgstr "Izraz sa koordinatama imaše operand gde je očekivan operator" | ||||
|  | ||||
| #: ../src/ui/theme.c:2236 | ||||
| #: ../src/ui/theme.c:2237 | ||||
| #, c-format | ||||
| msgid "Coordinate expression ended with an operator instead of an operand" | ||||
| msgstr "Izraz sa koordinarama je završio sa operatorom umesto sa operandom" | ||||
|  | ||||
| #: ../src/ui/theme.c:2246 | ||||
| #: ../src/ui/theme.c:2247 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Coordinate expression has operator \"%c\" following operator \"%c\" with no " | ||||
| @@ -1113,37 +1120,37 @@ msgstr "" | ||||
| "Izraz sa koordinatama ima operator „%c“, a zatim operator „%c“ bez operanda " | ||||
| "između" | ||||
|  | ||||
| #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442 | ||||
| #: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had unknown variable or constant \"%s\"" | ||||
| msgstr "Izraz sa koordinatama ima nepoznatu promenljivu ili konstanti „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:2496 | ||||
| #: ../src/ui/theme.c:2497 | ||||
| #, c-format | ||||
| msgid "Coordinate expression parser overflowed its buffer." | ||||
| msgstr "Izraz sa koordinatama je bio preveliki za smeštaj i obradu." | ||||
|  | ||||
| #: ../src/ui/theme.c:2525 | ||||
| #: ../src/ui/theme.c:2526 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had a close parenthesis with no open parenthesis" | ||||
| msgstr "Izraz sa koordinatama ima zatvorene zagrade bez otvorenih zagrada" | ||||
|  | ||||
| #: ../src/ui/theme.c:2589 | ||||
| #: ../src/ui/theme.c:2590 | ||||
| #, c-format | ||||
| msgid "Coordinate expression had an open parenthesis with no close parenthesis" | ||||
| msgstr "Izraz sa koordinatama ima otvorenu zagradu bez zatvorene zagrade" | ||||
|  | ||||
| #: ../src/ui/theme.c:2600 | ||||
| #: ../src/ui/theme.c:2601 | ||||
| #, c-format | ||||
| msgid "Coordinate expression doesn't seem to have any operators or operands" | ||||
| msgstr "Izraz sa koordinatama izgleda da nema ni jedan operator ili operand" | ||||
|  | ||||
| #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853 | ||||
| #: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 | ||||
| #, c-format | ||||
| msgid "Theme contained an expression that resulted in an error: %s\n" | ||||
| msgstr "Tema sadrži izraz koji rezultira greškom: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:4499 | ||||
| #: ../src/ui/theme.c:4500 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " | ||||
| @@ -1152,25 +1159,25 @@ msgstr "" | ||||
| "<button function=„%s“ state=„%s“ draw_ops=\"whatever\"/> mora biti naveden " | ||||
| "za ovaj stil okvira" | ||||
|  | ||||
| #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035 | ||||
| #: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "" | ||||
| "Nedostaje <frame state=„%s“ resize=„%s“ focus=„%s“ style=\"whatever\"/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5083 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Nisam uspeo da učitam temu „%s“: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233 | ||||
| #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247 | ||||
| #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232 | ||||
| #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 | ||||
| #, c-format | ||||
| msgid "No <%s> set for theme \"%s\"" | ||||
| msgstr "Nije definisan element <%s> za temu „%s“" | ||||
|  | ||||
| #: ../src/ui/theme.c:5255 | ||||
| #: ../src/ui/theme.c:5254 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "No frame style set for window type \"%s\" in theme \"%s\", add a <window " | ||||
| @@ -1179,14 +1186,14 @@ msgstr "" | ||||
| "Nije podešen stil okvira za prozor tipa „%s“ u temi „%s“. Dodajte <window " | ||||
| "type=„%s“ style_set=\"whatever\"/> element" | ||||
|  | ||||
| #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787 | ||||
| #: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "User-defined constants must begin with a capital letter; \"%s\" does not" | ||||
| msgstr "" | ||||
| "Korisnički definisane konstante moraju početi velikim slovom; „%s“ ne počinje" | ||||
|  | ||||
| #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795 | ||||
| #: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 | ||||
| #, c-format | ||||
| msgid "Constant \"%s\" has already been defined" | ||||
| msgstr "Konstanta „%s“ je već definisana" | ||||
| @@ -1569,209 +1576,7 @@ msgstr "Nije dozvoljen tekst unutar elementa <%s>" | ||||
| msgid "<%s> specified twice for this theme" | ||||
| msgstr "<%s> je naveden dva puta u ovoj temi" | ||||
|  | ||||
| #: ../src/ui/theme-parser.c:4334 | ||||
| #: ../src/ui/theme-parser.c:4336 | ||||
| #, c-format | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Nisam uspeo da pronađem ispravnu datoteku za temu „%s“\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Prozori" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Prozorče" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Važno prozorče" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Alatka" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "_Uvodni ekran" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Gornje pripajanje" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Donje pripajanje" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "_Levo pripajanje" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "D_esno pripajanje" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "_Sva pripajanja" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "_Radna površ" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Otvori neki drugi od ovih prozora" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Ovo je probno dugme sa „otvori“ ikonom" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Ovo je probno dugme sa „izađi“ ikonicom" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Ovo je primer poruke u probnom prozorčetu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Lažna stavka izbornika %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Prozor samo sa ivicom" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Traka" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Običan prozor programa" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Prozorče" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Važno prozorče" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Paleta alata" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Otkinuti izbornik" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Ivica" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Priloženo važno prozorče" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Proba rasporeda dugmića %d" | ||||
|  | ||||
| # bug: plural-forms | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g milisekundi za iscrtavanje okvira jednog prozora" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Upotreba: metacity-theme-viewer [NAZIV_TEME]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Greška prilikom učitavanja teme: %s\n" | ||||
|  | ||||
| # bug: plural-forms | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Učitana je tema „%s“ za %g sekunde\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Običan slovni lik naslova" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Mali slovni lik naslova" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Veliki slovni lik naslova" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Raspored dugmića" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Provera brzine" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Ovde ide naslov prozora" | ||||
|  | ||||
| # bug: plural-forms | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " | ||||
| "seconds wall clock time including X server resources (%g milliseconds per " | ||||
| "frame)\n" | ||||
| msgstr "" | ||||
| "Nacrtao je %d okvira za %g klijentskih sekundi (%g milisekundi po okviru) i " | ||||
| "%g sekundi vremena na zidnom časovniku uključujući i resurse Iks servera (%g " | ||||
| "milisekundi po okviru)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "provera izraza položaja je vratila tačno, ali je postavila grešku" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1275 | ||||
| msgid "position expression test returned FALSE but didn't set error" | ||||
| msgstr "provera izraza položaja je vratila netačno, ali nije postavila grešku" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Očekivana je greška, ali nije data" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Očekivana je greška „%d“, ali je data „%d“" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Greška nije očekivana, ali je vraćena jedna: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "x vrednost je bila „%d“, a očekivana je „%d“" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "y vrednost je bila „%d“, a očekivana je „%d“" | ||||
|  | ||||
| # bug: plural-forms | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "%d izraza koordinata je obrađeno za %g sekunde (prosek %g sekunde)\n" | ||||
|   | ||||
							
								
								
									
										1197
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
							
						
						
									
										1197
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										648
									
								
								po/zh_HK.po
									
									
									
									
									
								
							
							
						
						
									
										648
									
								
								po/zh_HK.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										648
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
							
						
						
									
										648
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -3,7 +3,7 @@ | ||||
|  | ||||
| lib_LTLIBRARIES = libmutter.la | ||||
|  | ||||
| SUBDIRS=wm-tester tools compositor/plugins | ||||
| SUBDIRS=compositor/plugins | ||||
|  | ||||
| INCLUDES=								\ | ||||
| 	-DCLUTTER_ENABLE_EXPERIMENTAL_API				\ | ||||
| @@ -30,7 +30,9 @@ INCLUDES=								\ | ||||
| 	-DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\" | ||||
|  | ||||
| mutter_built_sources = \ | ||||
| 	mutter-enum-types.h \ | ||||
| 	$(dbus_idle_built_sources)	\ | ||||
| 	$(dbus_xrandr_built_sources)	\ | ||||
| 	mutter-enum-types.h		\ | ||||
| 	mutter-enum-types.c | ||||
|  | ||||
| libmutter_la_SOURCES =				\ | ||||
| @@ -53,7 +55,8 @@ libmutter_la_SOURCES =				\ | ||||
| 	compositor/meta-background-actor.c	\ | ||||
| 	compositor/meta-background-actor-private.h	\ | ||||
| 	compositor/meta-background-group.c	\ | ||||
| 	compositor/meta-background-group-private.h	\ | ||||
| 	compositor/meta-cullable.c		\ | ||||
| 	compositor/meta-cullable.h		\ | ||||
| 	compositor/meta-module.c		\ | ||||
| 	compositor/meta-module.h		\ | ||||
| 	compositor/meta-plugin.c		\ | ||||
| @@ -94,6 +97,8 @@ libmutter_la_SOURCES =				\ | ||||
| 	ui/draw-workspace.h			\ | ||||
| 	core/edge-resistance.c			\ | ||||
| 	core/edge-resistance.h			\ | ||||
| 	core/edid-parse.c			\ | ||||
| 	core/edid.h				\ | ||||
| 	core/errors.c				\ | ||||
| 	meta/errors.h				\ | ||||
| 	core/frame.c				\ | ||||
| @@ -110,6 +115,15 @@ libmutter_la_SOURCES =				\ | ||||
| 	core/keybindings.c			\ | ||||
| 	core/keybindings-private.h		\ | ||||
| 	core/main.c				\ | ||||
| 	core/meta-cursor-tracker.c		\ | ||||
| 	core/meta-cursor-tracker-private.h	\ | ||||
| 	core/meta-idle-monitor.c		\ | ||||
| 	core/meta-idle-monitor-private.h	\ | ||||
| 	core/meta-xrandr-shared.h		\ | ||||
| 	core/monitor.c				\ | ||||
| 	core/monitor-config.c			\ | ||||
| 	core/monitor-private.h			\ | ||||
| 	core/monitor-xrandr.c			\ | ||||
| 	core/mutter-Xatomtype.h			\ | ||||
| 	core/place.c				\ | ||||
| 	core/place.h				\ | ||||
| @@ -139,7 +153,6 @@ libmutter_la_SOURCES =				\ | ||||
| 	meta/common.h				\ | ||||
| 	core/core.h				\ | ||||
| 	ui/ui.h					\ | ||||
| 	inlinepixbufs.h				\ | ||||
| 	ui/frames.c				\ | ||||
| 	ui/frames.h				\ | ||||
| 	ui/menu.c				\ | ||||
| @@ -156,9 +169,9 @@ libmutter_la_SOURCES =				\ | ||||
| 	ui/theme.c				\ | ||||
| 	meta/theme.h				\ | ||||
| 	ui/theme-private.h			\ | ||||
| 	ui/ui.c					\ | ||||
| 	meta/preview-widget.h			\ | ||||
| 	ui/preview-widget.c			\ | ||||
| 	ui/ui.c | ||||
|  | ||||
| nodist_libmutter_la_SOURCES =			\ | ||||
| 	$(mutter_built_sources) | ||||
|  | ||||
| libmutter_la_LDFLAGS = -no-undefined | ||||
| @@ -181,6 +194,8 @@ libmutterinclude_base_headers =		\ | ||||
| 	meta/meta-background-actor.h		\ | ||||
| 	meta/meta-background-group.h		\ | ||||
| 	meta/meta-background.h			\ | ||||
| 	meta/meta-cursor-tracker.h		\ | ||||
| 	meta/meta-idle-monitor.h		\ | ||||
| 	meta/meta-plugin.h			\ | ||||
| 	meta/meta-shaped-texture.h		\ | ||||
| 	meta/meta-shadow-factory.h		\ | ||||
| @@ -196,7 +211,6 @@ libmutterinclude_base_headers =		\ | ||||
| # Excluded from scanning for introspection but installed | ||||
| # atomnames.h: macros cause problems for scanning process | ||||
| libmutterinclude_extra_headers =		\ | ||||
| 	meta/preview-widget.h			\ | ||||
| 	meta/atomnames.h | ||||
|  | ||||
| libmutterincludedir = $(includedir)/mutter/meta | ||||
| @@ -205,10 +219,7 @@ libmutterinclude_HEADERS =			\ | ||||
| 	$(libmutterinclude_base_headers)	\ | ||||
| 	$(libmutterinclude_extra_headers) | ||||
|  | ||||
| mutter_theme_viewer_SOURCES=  \ | ||||
| 	ui/theme-viewer.c | ||||
|  | ||||
| bin_PROGRAMS=mutter mutter-theme-viewer | ||||
| bin_PROGRAMS=mutter | ||||
|  | ||||
| mutter_SOURCES = core/mutter.c | ||||
| mutter_LDADD = $(MUTTER_LIBS) libmutter.la | ||||
| @@ -241,13 +252,11 @@ Meta-$(api_version).gir: libmutter.la | ||||
| @META_GIR@_FILES =				\ | ||||
| 	mutter-enum-types.h			\ | ||||
| 	$(libmutterinclude_base_headers)	\ | ||||
| 	$(filter %.c,$(libmutter_la_SOURCES)) | ||||
| 	$(filter %.c,$(libmutter_la_SOURCES) $(nodist_libmutter_la_SOURCES)) | ||||
| @META_GIR@_SCANNERFLAGS = --warn-all --warn-error | ||||
|  | ||||
| endif | ||||
|  | ||||
| mutter_theme_viewer_LDADD= $(MUTTER_LIBS) libmutter.la | ||||
|  | ||||
| testboxes_SOURCES = core/testboxes.c | ||||
| testgradient_SOURCES = ui/testgradient.c | ||||
| testasyncgetprop_SOURCES = core/testasyncgetprop.c | ||||
| @@ -284,14 +293,7 @@ gsettings_SCHEMAS = org.gnome.mutter.gschema.xml | ||||
| convertdir = $(datadir)/GConf/gsettings | ||||
| convert_DATA = mutter-schemas.convert | ||||
|  | ||||
| IMAGES=stock_maximize.png stock_minimize.png stock_delete.png | ||||
| VARIABLES=stock_maximize_data $(srcdir)/stock_maximize.png \ | ||||
|           stock_minimize_data $(srcdir)/stock_minimize.png \ | ||||
|           stock_delete_data $(srcdir)/stock_delete.png | ||||
|  | ||||
| BUILT_SOURCES = inlinepixbufs.h | ||||
| CLEANFILES =					\ | ||||
| 	inlinepixbufs.h				\ | ||||
| 	mutter.desktop				\ | ||||
| 	mutter-wm.desktop			\ | ||||
| 	org.gnome.mutter.gschema.xml		\ | ||||
| @@ -300,9 +302,6 @@ CLEANFILES =					\ | ||||
| 	$(typelib_DATA)				\ | ||||
| 	$(gir_DATA) | ||||
|  | ||||
| inlinepixbufs.h: $(IMAGES) | ||||
| 	$(GDK_PIXBUF_CSOURCE) --raw --build-list $(VARIABLES) >$(srcdir)/inlinepixbufs.h | ||||
|  | ||||
| pkgconfigdir = $(libdir)/pkgconfig | ||||
|  | ||||
| pkgconfig_DATA = libmutter.pc mutter-plugins.pc | ||||
| @@ -314,13 +313,15 @@ EXTRA_DIST=$(desktopfiles_files) 	\ | ||||
| 	$(wmproperties_in_files)	\ | ||||
| 	$(xml_in_files)			\ | ||||
| 	org.gnome.mutter.gschema.xml.in \ | ||||
| 	idle-monitor.xml \ | ||||
| 	xrandr.xml \ | ||||
| 	mutter-schemas.convert \ | ||||
| 	libmutter.pc.in \ | ||||
| 	mutter-plugins.pc.in  \ | ||||
| 	mutter-enum-types.h.in \ | ||||
| 	mutter-enum-types.c.in | ||||
|  | ||||
| BUILT_SOURCES += $(mutter_built_sources) | ||||
| BUILT_SOURCES = $(mutter_built_sources) | ||||
| MUTTER_STAMP_FILES = stamp-mutter-enum-types.h | ||||
| CLEANFILES += $(MUTTER_STAMP_FILES) | ||||
|  | ||||
| @@ -342,3 +343,22 @@ mutter-enum-types.c: stamp-mutter-enum-types.h mutter-enum-types.c.in | ||||
| 	  $(libmutterinclude_base_headers) ) >> xgen-tetc && \ | ||||
| 	cp xgen-tetc mutter-enum-types.c && \ | ||||
| 	rm -f xgen-tetc | ||||
|  | ||||
| dbus_xrandr_built_sources = meta-dbus-xrandr.c meta-dbus-xrandr.h | ||||
|  | ||||
| $(dbus_xrandr_built_sources) : Makefile.am xrandr.xml | ||||
| 	$(AM_V_GEN)gdbus-codegen							\ | ||||
| 		--interface-prefix org.gnome.Mutter					\ | ||||
| 		--c-namespace MetaDBus							\ | ||||
| 		--generate-c-code meta-dbus-xrandr					\ | ||||
| 		$(srcdir)/xrandr.xml | ||||
|  | ||||
| dbus_idle_built_sources = meta-dbus-idle-monitor.c meta-dbus-idle-monitor.h | ||||
|  | ||||
| $(dbus_idle_built_sources) : Makefile.am idle-monitor.xml | ||||
| 	$(AM_V_GEN)gdbus-codegen							\ | ||||
| 		--interface-prefix org.gnome.Mutter					\ | ||||
| 		--c-namespace MetaDBus							\ | ||||
| 		--generate-c-code meta-dbus-idle-monitor				\ | ||||
| 		--c-generate-object-manager						\ | ||||
| 		$(srcdir)/idle-monitor.xml | ||||
|   | ||||
| @@ -50,7 +50,7 @@ meta_create_color_texture_4ub (guint8           red, | ||||
|   CoglColor color; | ||||
|   guint8 pixel[4]; | ||||
|  | ||||
|   cogl_color_set_from_4ub (&color, red, green, blue, alpha); | ||||
|   cogl_color_init_from_4ub (&color, red, green, blue, alpha); | ||||
|   cogl_color_premultiply (&color); | ||||
|  | ||||
|   pixel[0] = cogl_color_get_red_byte (&color); | ||||
| @@ -73,10 +73,8 @@ meta_create_color_texture_4ub (guint8           red, | ||||
|  * @src_texture: (allow-none): texture to use initially for the layer | ||||
|  * | ||||
|  * Creates a pipeline with a single layer. Using a common template | ||||
|  * allows sharing a shader for different uses in Mutter. To share the same | ||||
|  * shader with all other pipelines that are just texture plus opacity | ||||
|  * would require Cogl fixes. | ||||
|  * (See http://bugzilla.clutter-project.org/show_bug.cgi?id=2425) | ||||
|  * makes it easier for Cogl to share a shader for different uses in | ||||
|  * Mutter. | ||||
|  * | ||||
|  * Return value: (transfer full): a newly created #CoglPipeline | ||||
|  */ | ||||
| @@ -86,22 +84,21 @@ meta_create_texture_pipeline (CoglTexture *src_texture) | ||||
|   static CoglPipeline *texture_pipeline_template = NULL; | ||||
|   CoglPipeline *pipeline; | ||||
|  | ||||
|   /* We use a pipeline that has a dummy texture as a base for all | ||||
|      texture pipelines. The idea is that only the Cogl texture object | ||||
|      would be different in the children so it is likely that Cogl will | ||||
|      be able to share GL programs between all the textures. */ | ||||
|   /* The only state used in the pipeline that would affect the shader | ||||
|      generation is the texture type on the layer. Therefore we create | ||||
|      a template pipeline which sets this state and all texture | ||||
|      pipelines are created as a copy of this. That way Cogl can find | ||||
|      the shader state for the pipeline more quickly by looking at the | ||||
|      pipeline ancestry instead of resorting to the shader cache. */ | ||||
|   if (G_UNLIKELY (texture_pipeline_template == NULL)) | ||||
|     { | ||||
|       CoglTexture *dummy_texture; | ||||
|       CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|  | ||||
|       dummy_texture = meta_create_color_texture_4ub (0xff, 0xff, 0xff, 0xff, | ||||
|                                                      COGL_TEXTURE_NONE); | ||||
|  | ||||
|       CoglContext *ctx = | ||||
|         clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|  | ||||
|       texture_pipeline_template = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_layer_texture (texture_pipeline_template, 0, dummy_texture); | ||||
|       cogl_object_unref (dummy_texture); | ||||
|       cogl_pipeline_set_layer_null_texture (texture_pipeline_template, | ||||
|                                             0, /* layer */ | ||||
|                                             COGL_TEXTURE_TYPE_2D); | ||||
|     } | ||||
|  | ||||
|   pipeline = cogl_pipeline_copy (texture_pipeline_template); | ||||
|   | ||||
| @@ -17,8 +17,6 @@ struct _MetaCompositor | ||||
| { | ||||
|   MetaDisplay    *display; | ||||
|  | ||||
|   Atom            atom_x_root_pixmap; | ||||
|   Atom            atom_net_wm_window_opacity; | ||||
|   guint           repaint_func_id; | ||||
|  | ||||
|   ClutterActor   *shadow_src; | ||||
| @@ -66,8 +64,6 @@ void meta_switch_workspace_completed (MetaScreen    *screen); | ||||
|  | ||||
| gboolean meta_begin_modal_for_plugin (MetaScreen       *screen, | ||||
|                                       MetaPlugin       *plugin, | ||||
|                                       Window            grab_window, | ||||
|                                       Cursor            cursor, | ||||
|                                       MetaModalOptions  options, | ||||
|                                       guint32           timestamp); | ||||
| void     meta_end_modal_for_plugin   (MetaScreen       *screen, | ||||
|   | ||||
| @@ -42,28 +42,17 @@ | ||||
|  * the call, so it may be necessary to readjust the display based on the | ||||
|  * old_rect to start the animation. | ||||
|  * | ||||
|  * meta_compositor_window_mapped() and meta_compositor_window_unmapped() are | ||||
|  * notifications when the toplevel window (frame or client window) is mapped or | ||||
|  * unmapped. That is, when the result of meta_window_toplevel_is_mapped() | ||||
|  * changes. The main use of this is to drop resources when a window is unmapped. | ||||
|  * A window will always be mapped before meta_compositor_show_window() | ||||
|  * is called and will not be unmapped until after meta_compositor_hide_window() | ||||
|  * is called. If the live_hidden_windows preference is set, windows will never | ||||
|  * be unmapped. | ||||
|  * | ||||
|  * # Containers # | ||||
|  * | ||||
|  * There's three containers in the stage that can be used to place actors, here | ||||
|  * There's two containers in the stage that are used to place window actors, here | ||||
|  * are listed in the order in which they are painted: | ||||
|  * | ||||
|  * - window group, accessible with meta_get_window_group_for_screen() | ||||
|  * - top window group, accessible with meta_get_top_window_group_for_screen() | ||||
|  * - overlay group, accessible with meta_get_overlay_group_for_screen() | ||||
|  * | ||||
|  * Mutter will place actors representing windows in the window group, except for | ||||
|  * override-redirect windows (ie. popups and menus) which will be placed in the | ||||
|  * top window group. Mutter won't put any actors in the overlay group, but it's | ||||
|  * intended for compositors to place there panel, dashes, status bars, etc. | ||||
|  * top window group. | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
| @@ -177,31 +166,6 @@ process_damage (MetaCompositor     *compositor, | ||||
|   meta_window_actor_process_damage (window_actor, event); | ||||
| } | ||||
|  | ||||
| static void | ||||
| process_property_notify (MetaCompositor	*compositor, | ||||
|                          XPropertyEvent *event, | ||||
|                          MetaWindow     *window) | ||||
| { | ||||
|   MetaWindowActor *window_actor; | ||||
|  | ||||
|   if (window == NULL) | ||||
|     return; | ||||
|  | ||||
|   window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window)); | ||||
|   if (window_actor == NULL) | ||||
|     return; | ||||
|  | ||||
|   /* Check for the opacity changing */ | ||||
|   if (event->atom == compositor->atom_net_wm_window_opacity) | ||||
|     { | ||||
|       meta_window_actor_update_opacity (window_actor); | ||||
|       DEBUG_TRACE ("process_property_notify: net_wm_window_opacity\n"); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   DEBUG_TRACE ("process_property_notify: unknown\n"); | ||||
| } | ||||
|  | ||||
| static Window | ||||
| get_output_window (MetaScreen *screen) | ||||
| { | ||||
| @@ -255,23 +219,6 @@ meta_get_stage_for_screen (MetaScreen *screen) | ||||
|   return info->stage; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_get_overlay_group_for_screen: | ||||
|  * @screen: a #MetaScreen | ||||
|  * | ||||
|  * Returns: (transfer none): The overlay group corresponding to @screen | ||||
|  */ | ||||
| ClutterActor * | ||||
| meta_get_overlay_group_for_screen (MetaScreen *screen) | ||||
| { | ||||
|   MetaCompScreen *info = meta_screen_get_compositor_data (screen); | ||||
|  | ||||
|   if (!info) | ||||
|     return NULL; | ||||
|  | ||||
|   return info->overlay_group; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_get_window_group_for_screen: | ||||
|  * @screen: a #MetaScreen | ||||
| @@ -388,11 +335,49 @@ meta_empty_stage_input_region (MetaScreen *screen) | ||||
|   meta_set_stage_input_region (screen, region); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_focus_stage_window (MetaScreen *screen, | ||||
|                          guint32     timestamp) | ||||
| { | ||||
|   ClutterStage *stage; | ||||
|   Window window; | ||||
|  | ||||
|   stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen)); | ||||
|   if (!stage) | ||||
|     return; | ||||
|  | ||||
|   window = clutter_x11_get_stage_window (stage); | ||||
|  | ||||
|   if (window == None) | ||||
|     return; | ||||
|  | ||||
|   meta_display_set_input_focus_xwindow (screen->display, | ||||
|                                         screen, | ||||
|                                         window, | ||||
|                                         timestamp); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_stage_is_focused (MetaScreen *screen) | ||||
| { | ||||
|   ClutterStage *stage; | ||||
|   Window window; | ||||
|  | ||||
|   stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen)); | ||||
|   if (!stage) | ||||
|     return FALSE; | ||||
|  | ||||
|   window = clutter_x11_get_stage_window (stage); | ||||
|  | ||||
|   if (window == None) | ||||
|     return FALSE; | ||||
|  | ||||
|   return (screen->display->focus_xwindow == window); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_begin_modal_for_plugin (MetaScreen       *screen, | ||||
|                              MetaPlugin       *plugin, | ||||
|                              Window            grab_window, | ||||
|                              Cursor            cursor, | ||||
|                              MetaModalOptions  options, | ||||
|                              guint32           timestamp) | ||||
| { | ||||
| @@ -403,10 +388,19 @@ meta_begin_modal_for_plugin (MetaScreen       *screen, | ||||
|   MetaDisplay    *display    = meta_screen_get_display (screen); | ||||
|   Display        *xdpy       = meta_display_get_xdisplay (display); | ||||
|   MetaCompositor *compositor = display->compositor; | ||||
|   ClutterStage *stage; | ||||
|   Window grab_window; | ||||
|   Cursor cursor = None; | ||||
|   gboolean pointer_grabbed = FALSE; | ||||
|   gboolean keyboard_grabbed = FALSE; | ||||
|   int result; | ||||
|  | ||||
|   stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen)); | ||||
|   if (!stage) | ||||
|     return FALSE; | ||||
|  | ||||
|   grab_window = clutter_x11_get_stage_window (stage); | ||||
|  | ||||
|   if (compositor->modal_plugin != NULL || display->grab_op != META_GRAB_OP_NONE) | ||||
|     return FALSE; | ||||
|  | ||||
| @@ -514,20 +508,20 @@ meta_check_end_modal (MetaScreen *screen) | ||||
|     { | ||||
|       meta_end_modal_for_plugin (screen, | ||||
|                                    compositor->modal_plugin, | ||||
|                                    CurrentTime); | ||||
|  | ||||
|                                  CurrentTime); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| after_stage_paint (gpointer data) | ||||
| static void | ||||
| after_stage_paint (ClutterStage *stage, | ||||
|                    gpointer      data) | ||||
| { | ||||
|   MetaCompScreen *info = (MetaCompScreen*) data; | ||||
|   GList *l; | ||||
|  | ||||
|   for (l = info->windows; l; l = l->next) | ||||
|     meta_window_actor_post_paint (l->data); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -608,9 +602,10 @@ meta_compositor_manage_screen (MetaCompositor *compositor, | ||||
|  | ||||
|   info->stage = clutter_stage_new (); | ||||
|  | ||||
|   clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_POST_PAINT, | ||||
|                                          after_stage_paint, | ||||
|                                          info, NULL); | ||||
|   clutter_stage_set_paint_callback (CLUTTER_STAGE (info->stage), | ||||
|                                     after_stage_paint, | ||||
|                                     info, | ||||
|                                     NULL); | ||||
|  | ||||
|   clutter_stage_set_sync_delay (CLUTTER_STAGE (info->stage), META_SYNC_DELAY); | ||||
|  | ||||
| @@ -638,6 +633,9 @@ meta_compositor_manage_screen (MetaCompositor *compositor, | ||||
|     XISetMask (mask.mask, XI_FocusIn); | ||||
|     XISetMask (mask.mask, XI_FocusOut); | ||||
|     XISetMask (mask.mask, XI_Motion); | ||||
|     XIClearMask (mask.mask, XI_TouchBegin); | ||||
|     XIClearMask (mask.mask, XI_TouchEnd); | ||||
|     XIClearMask (mask.mask, XI_TouchUpdate); | ||||
|     XISelectEvents (xdisplay, xwin, &mask, 1); | ||||
|  | ||||
|     event_mask = ExposureMask | PropertyChangeMask | StructureNotifyMask; | ||||
| @@ -649,21 +647,10 @@ meta_compositor_manage_screen (MetaCompositor *compositor, | ||||
|  | ||||
|   info->window_group = meta_window_group_new (screen); | ||||
|   info->top_window_group = meta_window_group_new (screen); | ||||
|   info->overlay_group = clutter_actor_new (); | ||||
|  | ||||
|   clutter_actor_add_child (info->stage, info->window_group); | ||||
|   clutter_actor_add_child (info->stage, info->top_window_group); | ||||
|   clutter_actor_add_child (info->stage, info->overlay_group); | ||||
|  | ||||
|   info->plugin_mgr = meta_plugin_manager_new (screen); | ||||
|  | ||||
|   /* | ||||
|    * Delay the creation of the overlay window as long as we can, to avoid | ||||
|    * blanking out the screen. This means that during the plugin loading, the | ||||
|    * overlay window is not accessible; if the plugin needs to access it | ||||
|    * directly, it should hook into the "show" signal on stage, and do | ||||
|    * its stuff there. | ||||
|    */ | ||||
|   info->output = get_output_window (screen); | ||||
|   XReparentWindow (xdisplay, xwin, info->output, 0, 0); | ||||
|  | ||||
| @@ -684,7 +671,7 @@ meta_compositor_manage_screen (MetaCompositor *compositor, | ||||
|       info->pending_input_region = None; | ||||
|     } | ||||
|  | ||||
|   clutter_actor_show (info->overlay_group); | ||||
|   info->plugin_mgr = meta_plugin_manager_new (screen); | ||||
|  | ||||
|   /* Map overlay window before redirecting windows offscreen so we catch their | ||||
|    * contents until we show the stage. | ||||
| @@ -728,7 +715,7 @@ meta_shape_cow_for_window (MetaScreen *screen, | ||||
|       int width, height; | ||||
|       MetaRectangle rect; | ||||
|  | ||||
|       meta_window_get_outer_rect (metaWindow, &rect); | ||||
|       meta_window_get_frame_rect (metaWindow, &rect); | ||||
|  | ||||
|       window_bounds.x = rect.x; | ||||
|       window_bounds.y = rect.y; | ||||
| @@ -856,6 +843,18 @@ meta_compositor_window_shape_changed (MetaCompositor *compositor, | ||||
|   meta_window_actor_update_shape (window_actor); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_compositor_window_opacity_changed (MetaCompositor *compositor, | ||||
|                                         MetaWindow     *window) | ||||
| { | ||||
|   MetaWindowActor *window_actor; | ||||
|   window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window)); | ||||
|   if (!window_actor) | ||||
|     return; | ||||
|  | ||||
|   meta_window_actor_update_opacity (window_actor); | ||||
| } | ||||
|  | ||||
| /* Clutter makes the assumption that there is only one X window | ||||
|  * per stage, which is a valid assumption to make for a generic | ||||
|  * application toolkit. As such, it will ignore any events sent | ||||
| @@ -916,10 +915,7 @@ meta_compositor_process_event (MetaCompositor *compositor, | ||||
| { | ||||
|   if (compositor->modal_plugin && is_grabbed_event (compositor->display, event)) | ||||
|     { | ||||
|       MetaPluginClass *klass = META_PLUGIN_GET_CLASS (compositor->modal_plugin); | ||||
|  | ||||
|       if (klass->xevent_filter) | ||||
|         klass->xevent_filter (compositor->modal_plugin, event); | ||||
|       _meta_plugin_xevent_filter (compositor->modal_plugin, event); | ||||
|  | ||||
|       /* We always consume events even if the plugin says it didn't handle them; | ||||
|        * exclusive is exclusive */ | ||||
| @@ -965,28 +961,19 @@ meta_compositor_process_event (MetaCompositor *compositor, | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|   switch (event->type) | ||||
|   if (event->type == meta_display_get_damage_event_base (compositor->display) + XDamageNotify) | ||||
|     { | ||||
|     case PropertyNotify: | ||||
|       process_property_notify (compositor, (XPropertyEvent *) event, window); | ||||
|       break; | ||||
|  | ||||
|     default: | ||||
|       if (event->type == meta_display_get_damage_event_base (compositor->display) + XDamageNotify) | ||||
|       /* Core code doesn't handle damage events, so we need to extract the MetaWindow | ||||
|        * ourselves | ||||
|        */ | ||||
|       if (window == NULL) | ||||
|         { | ||||
|           /* Core code doesn't handle damage events, so we need to extract the MetaWindow | ||||
|            * ourselves | ||||
|            */ | ||||
|           if (window == NULL) | ||||
|             { | ||||
|               Window xwin = ((XDamageNotifyEvent *) event)->drawable; | ||||
|               window = meta_display_lookup_x_window (compositor->display, xwin); | ||||
|             } | ||||
|  | ||||
| 	  DEBUG_TRACE ("meta_compositor_process_event (process_damage)\n"); | ||||
|           process_damage (compositor, (XDamageNotifyEvent *) event, window); | ||||
|           Window xwin = ((XDamageNotifyEvent *) event)->drawable; | ||||
|           window = meta_display_lookup_x_window (compositor->display, xwin); | ||||
|         } | ||||
|       break; | ||||
|  | ||||
|       DEBUG_TRACE ("meta_compositor_process_event (process_damage)\n"); | ||||
|       process_damage (compositor, (XDamageNotifyEvent *) event, window); | ||||
|     } | ||||
|  | ||||
|   /* Clutter needs to know about MapNotify events otherwise it will | ||||
| @@ -1124,6 +1111,7 @@ sync_actor_stacking (MetaCompScreen *info) | ||||
|    * we go ahead and do it */ | ||||
|  | ||||
|   children = clutter_actor_get_children (info->window_group); | ||||
|   has_windows = FALSE; | ||||
|   reordered = FALSE; | ||||
|  | ||||
|   /* We allow for actors in the window group other than the actors we | ||||
| @@ -1285,30 +1273,6 @@ meta_compositor_sync_stack (MetaCompositor  *compositor, | ||||
|   sync_actor_stacking (info); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_compositor_window_mapped (MetaCompositor *compositor, | ||||
|                                MetaWindow     *window) | ||||
| { | ||||
|   MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window)); | ||||
|   DEBUG_TRACE ("meta_compositor_window_mapped\n"); | ||||
|   if (!window_actor) | ||||
|     return; | ||||
|  | ||||
|   meta_window_actor_mapped (window_actor); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_compositor_window_unmapped (MetaCompositor *compositor, | ||||
|                                  MetaWindow     *window) | ||||
| { | ||||
|   MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window)); | ||||
|   DEBUG_TRACE ("meta_compositor_window_unmapped\n"); | ||||
|   if (!window_actor) | ||||
|     return; | ||||
|  | ||||
|   meta_window_actor_unmapped (window_actor); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_compositor_sync_window_geometry (MetaCompositor *compositor, | ||||
| 				      MetaWindow *window, | ||||
| @@ -1489,13 +1453,7 @@ on_shadow_factory_changed (MetaShadowFactory *factory, | ||||
| MetaCompositor * | ||||
| meta_compositor_new (MetaDisplay *display) | ||||
| { | ||||
|   char *atom_names[] = { | ||||
|     "_XROOTPMAP_ID", | ||||
|     "_NET_WM_WINDOW_OPACITY", | ||||
|   }; | ||||
|   Atom                   atoms[G_N_ELEMENTS(atom_names)]; | ||||
|   MetaCompositor        *compositor; | ||||
|   Display               *xdisplay = meta_display_get_xdisplay (display); | ||||
|  | ||||
|   if (!composite_at_least_version (display, 0, 3)) | ||||
|     return NULL; | ||||
| @@ -1507,18 +1465,11 @@ meta_compositor_new (MetaDisplay *display) | ||||
|   if (g_getenv("META_DISABLE_MIPMAPS")) | ||||
|     compositor->no_mipmaps = TRUE; | ||||
|  | ||||
|   meta_verbose ("Creating %d atoms\n", (int) G_N_ELEMENTS (atom_names)); | ||||
|   XInternAtoms (xdisplay, atom_names, G_N_ELEMENTS (atom_names), | ||||
|                 False, atoms); | ||||
|  | ||||
|   g_signal_connect (meta_shadow_factory_get_default (), | ||||
|                     "changed", | ||||
|                     G_CALLBACK (on_shadow_factory_changed), | ||||
|                     compositor); | ||||
|  | ||||
|   compositor->atom_x_root_pixmap = atoms[0]; | ||||
|   compositor->atom_net_wm_window_opacity = atoms[1]; | ||||
|  | ||||
|   compositor->repaint_func_id = clutter_threads_add_repaint_func (meta_repaint_func, | ||||
|                                                                   compositor, | ||||
|                                                                   NULL); | ||||
| @@ -1566,8 +1517,10 @@ void | ||||
| meta_enable_unredirect_for_screen (MetaScreen *screen) | ||||
| { | ||||
|   MetaCompScreen *info = meta_screen_get_compositor_data (screen); | ||||
|   if (info != NULL) | ||||
|    info->disable_unredirect_count = MAX(0, info->disable_unredirect_count - 1); | ||||
|   if (info != NULL && info->disable_unredirect_count == 0) | ||||
|     g_warning ("Called enable_unredirect_for_screen while unredirection is enabled."); | ||||
|   if (info != NULL && info->disable_unredirect_count > 0) | ||||
|    info->disable_unredirect_count = info->disable_unredirect_count - 1; | ||||
| } | ||||
|  | ||||
| #define FLASH_TIME_MS 50 | ||||
|   | ||||
| @@ -6,9 +6,6 @@ | ||||
| #include <meta/screen.h> | ||||
| #include <meta/meta-background-actor.h> | ||||
|  | ||||
| void meta_background_actor_set_visible_region  (MetaBackgroundActor *self, | ||||
|                                                 cairo_region_t      *visible_region); | ||||
|  | ||||
| cairo_region_t *meta_background_actor_get_visible_region (MetaBackgroundActor *self); | ||||
| cairo_region_t *meta_background_actor_get_clip_region (MetaBackgroundActor *self); | ||||
|  | ||||
| #endif /* META_BACKGROUND_ACTOR_PRIVATE_H */ | ||||
|   | ||||
| @@ -41,20 +41,35 @@ | ||||
| #include <meta/errors.h> | ||||
| #include <meta/meta-background.h> | ||||
| #include "meta-background-actor-private.h" | ||||
| #include "meta-cullable.h" | ||||
|  | ||||
| struct _MetaBackgroundActorPrivate | ||||
| { | ||||
|   cairo_region_t *visible_region; | ||||
|   cairo_region_t *clip_region; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR); | ||||
| static void cullable_iface_init (MetaCullableInterface *iface); | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_CODE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR, | ||||
|                          G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); | ||||
|  | ||||
| static void | ||||
| set_clip_region (MetaBackgroundActor *self, | ||||
|                  cairo_region_t      *clip_region) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|  | ||||
|   g_clear_pointer (&priv->clip_region, (GDestroyNotify) cairo_region_destroy); | ||||
|   if (clip_region) | ||||
|     priv->clip_region = cairo_region_copy (clip_region); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_dispose (GObject *object) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object); | ||||
|  | ||||
|   meta_background_actor_set_visible_region (self, NULL); | ||||
|   set_clip_region (self, NULL); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_background_actor_parent_class)->dispose (object); | ||||
| } | ||||
| @@ -104,26 +119,6 @@ meta_background_actor_get_preferred_height (ClutterActor *actor, | ||||
|     *natural_height_p = height; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_background_actor_get_paint_volume (ClutterActor       *actor, | ||||
|                                         ClutterPaintVolume *volume) | ||||
| { | ||||
|   ClutterContent *content; | ||||
|   gfloat width, height; | ||||
|  | ||||
|   content = clutter_actor_get_content (actor); | ||||
|  | ||||
|   if (!content) | ||||
|     return FALSE; | ||||
|  | ||||
|   clutter_content_get_preferred_size (content, &width, &height); | ||||
|  | ||||
|   clutter_paint_volume_set_width (volume, width); | ||||
|   clutter_paint_volume_set_height (volume, height); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_actor_class_init (MetaBackgroundActorClass *klass) | ||||
| { | ||||
| @@ -136,7 +131,6 @@ meta_background_actor_class_init (MetaBackgroundActorClass *klass) | ||||
|  | ||||
|   actor_class->get_preferred_width = meta_background_actor_get_preferred_width; | ||||
|   actor_class->get_preferred_height = meta_background_actor_get_preferred_height; | ||||
|   actor_class->get_paint_volume = meta_background_actor_get_paint_volume; | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -166,35 +160,31 @@ meta_background_actor_new (void) | ||||
|   return CLUTTER_ACTOR (self); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_set_visible_region: | ||||
|  * @self: a #MetaBackgroundActor | ||||
|  * @visible_region: (allow-none): the area of the actor (in allocate-relative | ||||
|  *   coordinates) that is visible. | ||||
|  * | ||||
|  * Sets the area of the background that is unobscured by overlapping windows. | ||||
|  * This is used to optimize and only paint the visible portions. | ||||
|  */ | ||||
| void | ||||
| meta_background_actor_set_visible_region (MetaBackgroundActor *self, | ||||
|                                           cairo_region_t      *visible_region) | ||||
| static void | ||||
| meta_background_actor_cull_out (MetaCullable   *cullable, | ||||
|                                 cairo_region_t *unobscured_region, | ||||
|                                 cairo_region_t *clip_region) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv; | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (cullable); | ||||
|   set_clip_region (self, clip_region); | ||||
| } | ||||
|  | ||||
|   g_return_if_fail (META_IS_BACKGROUND_ACTOR (self)); | ||||
| static void | ||||
| meta_background_actor_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   MetaBackgroundActor *self = META_BACKGROUND_ACTOR (cullable); | ||||
|   set_clip_region (self, NULL); | ||||
| } | ||||
|  | ||||
|   priv = self->priv; | ||||
|  | ||||
|   g_clear_pointer (&priv->visible_region, | ||||
|                    (GDestroyNotify) | ||||
|                    cairo_region_destroy); | ||||
|  | ||||
|   if (visible_region) | ||||
|     priv->visible_region = cairo_region_copy (visible_region); | ||||
| static void | ||||
| cullable_iface_init (MetaCullableInterface *iface) | ||||
| { | ||||
|   iface->cull_out = meta_background_actor_cull_out; | ||||
|   iface->reset_culling = meta_background_actor_reset_culling; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_actor_get_visible_region: | ||||
|  * meta_background_actor_get_clip_region: | ||||
|  * @self: a #MetaBackgroundActor | ||||
|  * | ||||
|  * Return value (transfer full): a #cairo_region_t that represents the part of | ||||
| @@ -202,16 +192,16 @@ meta_background_actor_set_visible_region (MetaBackgroundActor *self, | ||||
|  * #MetaWindowActor objects. | ||||
|  */ | ||||
| cairo_region_t * | ||||
| meta_background_actor_get_visible_region (MetaBackgroundActor *self) | ||||
| meta_background_actor_get_clip_region (MetaBackgroundActor *self) | ||||
| { | ||||
|   MetaBackgroundActorPrivate *priv = self->priv; | ||||
|   ClutterActorBox content_box; | ||||
|   cairo_rectangle_int_t content_area = { 0 }; | ||||
|   cairo_region_t *visible_region; | ||||
|   cairo_region_t *clip_region; | ||||
|  | ||||
|   g_return_val_if_fail (META_IS_BACKGROUND_ACTOR (self), NULL); | ||||
|  | ||||
|   if (!priv->visible_region) | ||||
|   if (!priv->clip_region) | ||||
|       return NULL; | ||||
|  | ||||
|   clutter_actor_get_content_box (CLUTTER_ACTOR (self), &content_box); | ||||
| @@ -221,8 +211,8 @@ meta_background_actor_get_visible_region (MetaBackgroundActor *self) | ||||
|   content_area.width = content_box.x2 - content_box.x1; | ||||
|   content_area.height = content_box.y2 - content_box.y1; | ||||
|  | ||||
|   visible_region = cairo_region_create_rectangle (&content_area); | ||||
|   cairo_region_intersect (visible_region, priv->visible_region); | ||||
|   clip_region = cairo_region_create_rectangle (&content_area); | ||||
|   cairo_region_intersect (clip_region, priv->clip_region); | ||||
|  | ||||
|   return visible_region; | ||||
|   return clip_region; | ||||
| } | ||||
|   | ||||
| @@ -1,11 +0,0 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| #ifndef META_BACKGROUND_GROUP_PRIVATE_H | ||||
| #define META_BACKGROUND_GROUP_PRIVATE_H | ||||
|  | ||||
| #include <meta/screen.h> | ||||
| #include <meta/meta-background-group.h> | ||||
|  | ||||
| void meta_background_group_set_visible_region  (MetaBackgroundGroup *self, | ||||
|                                                 cairo_region_t      *visible_region); | ||||
| #endif /* META_BACKGROUND_GROUP_PRIVATE_H */ | ||||
| @@ -16,87 +16,43 @@ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include "compositor-private.h" | ||||
| #include "clutter-utils.h" | ||||
| #include "meta-background-actor-private.h" | ||||
| #include "meta-background-group-private.h" | ||||
| #include <meta/meta-background-group.h> | ||||
| #include "meta-cullable.h" | ||||
|  | ||||
| G_DEFINE_TYPE (MetaBackgroundGroup, meta_background_group, CLUTTER_TYPE_ACTOR); | ||||
| static void cullable_iface_init (MetaCullableInterface *iface); | ||||
|  | ||||
| struct _MetaBackgroundGroupPrivate | ||||
| { | ||||
|   gpointer dummy; | ||||
| }; | ||||
|  | ||||
| static void | ||||
| meta_background_group_dispose (GObject *object) | ||||
| { | ||||
|   G_OBJECT_CLASS (meta_background_group_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| meta_background_group_get_paint_volume (ClutterActor       *actor, | ||||
|                                         ClutterPaintVolume *volume) | ||||
| { | ||||
|   return clutter_paint_volume_set_from_allocation (volume, actor); | ||||
| } | ||||
| G_DEFINE_TYPE_WITH_CODE (MetaBackgroundGroup, meta_background_group, CLUTTER_TYPE_ACTOR, | ||||
|                          G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); | ||||
|  | ||||
| static void | ||||
| meta_background_group_class_init (MetaBackgroundGroupClass *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|   ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); | ||||
| } | ||||
|  | ||||
|   actor_class->get_paint_volume = meta_background_group_get_paint_volume; | ||||
|   object_class->dispose = meta_background_group_dispose; | ||||
| static void | ||||
| meta_background_group_cull_out (MetaCullable   *cullable, | ||||
|                                 cairo_region_t *unobscured_region, | ||||
|                                 cairo_region_t *clip_region) | ||||
| { | ||||
|   meta_cullable_cull_out_children (cullable, unobscured_region, clip_region); | ||||
| } | ||||
|  | ||||
|   g_type_class_add_private (klass, sizeof (MetaBackgroundGroupPrivate)); | ||||
| static void | ||||
| meta_background_group_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   meta_cullable_reset_culling_children (cullable); | ||||
| } | ||||
|  | ||||
| static void | ||||
| cullable_iface_init (MetaCullableInterface *iface) | ||||
| { | ||||
|   iface->cull_out = meta_background_group_cull_out; | ||||
|   iface->reset_culling = meta_background_group_reset_culling; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_group_init (MetaBackgroundGroup *self) | ||||
| { | ||||
|   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, | ||||
|                                             META_TYPE_BACKGROUND_GROUP, | ||||
|                                             MetaBackgroundGroupPrivate); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_background_group_set_visible_region: | ||||
|  * @self: a #MetaBackgroundGroup | ||||
|  * @visible_region: (allow-none): the parts of the background to paint | ||||
|  * | ||||
|  * Sets the area of the backgrounds that is unobscured by overlapping windows. | ||||
|  * This is used to optimize and only paint the visible portions. | ||||
|  */ | ||||
| void | ||||
| meta_background_group_set_visible_region (MetaBackgroundGroup *self, | ||||
|                                           cairo_region_t      *region) | ||||
| { | ||||
|   GList *children, *l; | ||||
|  | ||||
|   children = clutter_actor_get_children (CLUTTER_ACTOR (self)); | ||||
|   for (l = children; l; l = l->next) | ||||
|     { | ||||
|       ClutterActor *actor = l->data; | ||||
|  | ||||
|       if (META_IS_BACKGROUND_ACTOR (actor)) | ||||
|         { | ||||
|           meta_background_actor_set_visible_region (META_BACKGROUND_ACTOR (actor), region); | ||||
|         } | ||||
|       else if (META_IS_BACKGROUND_GROUP (actor)) | ||||
|         { | ||||
|           int x, y; | ||||
|  | ||||
|           if (!meta_actor_is_untransformed (actor, &x, &y)) | ||||
|             continue; | ||||
|  | ||||
|           cairo_region_translate (region, -x, -y); | ||||
|           meta_background_group_set_visible_region (META_BACKGROUND_GROUP (actor), region); | ||||
|           cairo_region_translate (region, x, y); | ||||
|         } | ||||
|     } | ||||
|   g_list_free (children); | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
|   | ||||
| @@ -412,13 +412,13 @@ meta_background_paint_content (ClutterContent   *content, | ||||
|    */ | ||||
|   if (META_IS_BACKGROUND_ACTOR (actor)) | ||||
|     { | ||||
|       cairo_region_t *visible_region; | ||||
|       visible_region = meta_background_actor_get_visible_region (META_BACKGROUND_ACTOR (actor)); | ||||
|       cairo_region_t *clip_region; | ||||
|       clip_region = meta_background_actor_get_clip_region (META_BACKGROUND_ACTOR (actor)); | ||||
|  | ||||
|       if (visible_region != NULL) | ||||
|       if (clip_region != NULL) | ||||
|         { | ||||
|           cairo_region_intersect (paintable_region, visible_region); | ||||
|           cairo_region_destroy (visible_region); | ||||
|           cairo_region_intersect (paintable_region, clip_region); | ||||
|           cairo_region_destroy (clip_region); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -472,6 +472,17 @@ meta_background_dispose (GObject *object) | ||||
|   G_OBJECT_CLASS (meta_background_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_background_finalize (GObject *object) | ||||
| { | ||||
|   MetaBackground        *self = META_BACKGROUND (object); | ||||
|   MetaBackgroundPrivate *priv = self->priv; | ||||
|  | ||||
|   g_free (priv->filename); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_background_parent_class)->finalize (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ensure_pipeline (MetaBackground *self) | ||||
| { | ||||
| @@ -643,6 +654,7 @@ meta_background_class_init (MetaBackgroundClass *klass) | ||||
|   g_type_class_add_private (klass, sizeof (MetaBackgroundPrivate)); | ||||
|  | ||||
|   object_class->dispose = meta_background_dispose; | ||||
|   object_class->finalize = meta_background_finalize; | ||||
|   object_class->set_property = meta_background_set_property; | ||||
|   object_class->get_property = meta_background_get_property; | ||||
|  | ||||
| @@ -1019,7 +1031,6 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|                                   GAsyncResult    *result, | ||||
|                                   GError         **error) | ||||
| { | ||||
|   static CoglUserDataKey key; | ||||
|   GTask *task; | ||||
|   LoadFileTaskData *task_data; | ||||
|   CoglTexture *texture; | ||||
| @@ -1048,7 +1059,7 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|  | ||||
|   texture = cogl_texture_new_from_data (width, | ||||
|                                         height, | ||||
|                                         COGL_TEXTURE_NO_SLICING, | ||||
|                                         COGL_TEXTURE_NO_ATLAS, | ||||
|                                         has_alpha ? | ||||
|                                         COGL_PIXEL_FORMAT_RGBA_8888 : | ||||
|                                         COGL_PIXEL_FORMAT_RGB_888, | ||||
| @@ -1065,12 +1076,6 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|       goto out; | ||||
|     } | ||||
|  | ||||
|   cogl_object_set_user_data (COGL_OBJECT (texture), | ||||
|                              &key, | ||||
|                              g_object_ref (pixbuf), | ||||
|                              (CoglUserDataDestroyCallback) | ||||
|                              g_object_unref); | ||||
|  | ||||
|   ensure_pipeline (self); | ||||
|   unset_texture (self); | ||||
|   set_style (self, task_data->style); | ||||
|   | ||||
							
								
								
									
										191
									
								
								src/compositor/meta-cullable.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								src/compositor/meta-cullable.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| /* | ||||
|  * Copyright (C) 2013 Red Hat | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  * | ||||
|  * Written by: | ||||
|  *     Owen Taylor <otaylor@redhat.com> | ||||
|  *     Ray Strode <rstrode@redhat.com> | ||||
|  *     Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
| #include "meta-cullable.h" | ||||
| #include "clutter-utils.h" | ||||
|  | ||||
| G_DEFINE_INTERFACE (MetaCullable, meta_cullable, CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| /** | ||||
|  * SECTION:meta-cullable | ||||
|  * @title: MetaCullable | ||||
|  * @short_description: CPU culling operations for efficient drawing | ||||
|  * | ||||
|  * When we are painting a stack of 5-10 large actors, the standard | ||||
|  * bottom-to-top method of drawing every actor results in a tremendous | ||||
|  * amount of overdraw. If these actors are painting textures like | ||||
|  * windows, it can easily max out the available memory bandwidth on a | ||||
|  * low-end graphics chipset. It's even worse if window textures are | ||||
|  * being accessed over the AGP bus. | ||||
|  * | ||||
|  * #MetaCullable is our solution. The basic technique applied here is to | ||||
|  * do a pre-pass before painting where we walk each actor from top to bottom | ||||
|  * and ask each actor to "cull itself out". We pass in a region it can copy | ||||
|  * to clip its drawing to, and the actor can subtract its fully opaque pixels | ||||
|  * so that actors underneath know not to draw there as well. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * meta_cullable_cull_out_children: | ||||
|  * @cullable: The #MetaCullable | ||||
|  * @unobscured_region: The unobscured region, as passed into cull_out() | ||||
|  * @clip_region: The clip region, as passed into cull_out() | ||||
|  * | ||||
|  * This is a helper method for actors that want to recurse over their | ||||
|  * child actors, and cull them out. | ||||
|  * | ||||
|  * See #MetaCullable and meta_cullable_cull_out() for more details. | ||||
|  */ | ||||
| void | ||||
| meta_cullable_cull_out_children (MetaCullable   *cullable, | ||||
|                                  cairo_region_t *unobscured_region, | ||||
|                                  cairo_region_t *clip_region) | ||||
| { | ||||
|   ClutterActor *actor = CLUTTER_ACTOR (cullable); | ||||
|   ClutterActor *child; | ||||
|   ClutterActorIter iter; | ||||
|  | ||||
|   clutter_actor_iter_init (&iter, actor); | ||||
|   while (clutter_actor_iter_prev (&iter, &child)) | ||||
|     { | ||||
|       int x, y; | ||||
|  | ||||
|       if (!CLUTTER_ACTOR_IS_VISIBLE (child)) | ||||
|         continue; | ||||
|  | ||||
|       /* If an actor has effects applied, then that can change the area | ||||
|        * it paints and the opacity, so we no longer can figure out what | ||||
|        * portion of the actor is obscured and what portion of the screen | ||||
|        * it obscures, so we skip the actor. | ||||
|        * | ||||
|        * This has a secondary beneficial effect: if a ClutterOffscreenEffect | ||||
|        * is applied to an actor, then our clipped redraws interfere with the | ||||
|        * caching of the FBO - even if we only need to draw a small portion | ||||
|        * of the window right now, ClutterOffscreenEffect may use other portions | ||||
|        * of the FBO later. So, skipping actors with effects applied also | ||||
|        * prevents these bugs. | ||||
|        * | ||||
|        * Theoretically, we should check clutter_actor_get_offscreen_redirect() | ||||
|        * as well for the same reason, but omitted for simplicity in the | ||||
|        * hopes that no-one will do that. | ||||
|        */ | ||||
|       if (clutter_actor_has_effects (child)) | ||||
|         continue; | ||||
|  | ||||
|       if (!META_IS_CULLABLE (child)) | ||||
|         continue; | ||||
|  | ||||
|       if (!meta_actor_is_untransformed (child, &x, &y)) | ||||
|         continue; | ||||
|  | ||||
|       /* Temporarily move to the coordinate system of the actor */ | ||||
|       cairo_region_translate (unobscured_region, - x, - y); | ||||
|       cairo_region_translate (clip_region, - x, - y); | ||||
|  | ||||
|       meta_cullable_cull_out (META_CULLABLE (child), unobscured_region, clip_region); | ||||
|  | ||||
|       cairo_region_translate (unobscured_region, x, y); | ||||
|       cairo_region_translate (clip_region, x, y); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_cullable_reset_culling_children: | ||||
|  * @cullable: The #MetaCullable | ||||
|  * | ||||
|  * This is a helper method for actors that want to recurse over their | ||||
|  * child actors, and cull them out. | ||||
|  * | ||||
|  * See #MetaCullable and meta_cullable_reset_culling() for more details. | ||||
|  */ | ||||
| void | ||||
| meta_cullable_reset_culling_children (MetaCullable *cullable) | ||||
| { | ||||
|   ClutterActor *actor = CLUTTER_ACTOR (cullable); | ||||
|   ClutterActor *child; | ||||
|   ClutterActorIter iter; | ||||
|  | ||||
|   clutter_actor_iter_init (&iter, actor); | ||||
|   while (clutter_actor_iter_next (&iter, &child)) | ||||
|     { | ||||
|       if (!META_IS_CULLABLE (child)) | ||||
|         continue; | ||||
|  | ||||
|       meta_cullable_reset_culling (META_CULLABLE (child)); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_cullable_default_init (MetaCullableInterface *iface) | ||||
| { | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_cullable_cull_out: | ||||
|  * @cullable: The #MetaCullable | ||||
|  * @unobscured_region: The unobscured region, in @cullable's space. | ||||
|  * @clip_region: The clip region, in @cullable's space. | ||||
|  * | ||||
|  * When #MetaWindowGroup is painted, we walk over its direct cullable | ||||
|  * children from top to bottom and ask themselves to "cull out". Cullables | ||||
|  * can use @unobscured_region and @clip_region to clip their drawing. Actors | ||||
|  * interested in eliminating overdraw should copy the @clip_region and only | ||||
|  * paint those parts, as everything else has been obscured by actors above it. | ||||
|  * | ||||
|  * Actors that may have fully opaque parts should also subtract out a region | ||||
|  * that is fully opaque from @unobscured_region and @clip_region. | ||||
|  * | ||||
|  * @unobscured_region and @clip_region are extremely similar. The difference | ||||
|  * is that @clip_region starts off with the stage's clip, if Clutter detects | ||||
|  * that we're doing a clipped redraw. @unobscured_region, however, starts off | ||||
|  * with the full stage size, so actors that may want to record what parts of | ||||
|  * their window are unobscured for e.g. scheduling repaints can do so. | ||||
|  * | ||||
|  * Actors that have children can also use the meta_cullable_cull_out_children() | ||||
|  * helper method to do a simple cull across all their children. | ||||
|  */ | ||||
| void | ||||
| meta_cullable_cull_out (MetaCullable   *cullable, | ||||
|                         cairo_region_t *unobscured_region, | ||||
|                         cairo_region_t *clip_region) | ||||
| { | ||||
|   META_CULLABLE_GET_IFACE (cullable)->cull_out (cullable, unobscured_region, clip_region); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_cullable_reset_culling: | ||||
|  * @cullable: The #MetaCullable | ||||
|  * | ||||
|  * Actors that copied data in their cull_out() implementation can now | ||||
|  * reset their data, as the paint is now over. Additional paints may be | ||||
|  * done by #ClutterClone or similar, and they should not be affected by | ||||
|  * the culling operation. | ||||
|  */ | ||||
| void | ||||
| meta_cullable_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   META_CULLABLE_GET_IFACE (cullable)->reset_culling (cullable); | ||||
| } | ||||
							
								
								
									
										68
									
								
								src/compositor/meta-cullable.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/compositor/meta-cullable.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (C) 2013 Red Hat | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  * | ||||
|  * Written by: | ||||
|  *     Owen Taylor <otaylor@redhat.com> | ||||
|  *     Ray Strode <rstrode@redhat.com> | ||||
|  *     Jasper St. Pierre <jstpierre@mecheye.net> | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_CULLABLE_H__ | ||||
| #define __META_CULLABLE_H__ | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define META_TYPE_CULLABLE             (meta_cullable_get_type ()) | ||||
| #define META_CULLABLE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_CULLABLE, MetaCullable)) | ||||
| #define META_IS_CULLABLE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_CULLABLE)) | ||||
| #define META_CULLABLE_GET_IFACE(obj)   (G_TYPE_INSTANCE_GET_INTERFACE ((obj),  META_TYPE_CULLABLE, MetaCullableInterface)) | ||||
|  | ||||
| typedef struct _MetaCullable MetaCullable; | ||||
| typedef struct _MetaCullableInterface MetaCullableInterface; | ||||
|  | ||||
| struct _MetaCullableInterface | ||||
| { | ||||
|   GTypeInterface g_iface; | ||||
|  | ||||
|   void (* cull_out)      (MetaCullable   *cullable, | ||||
|                           cairo_region_t *unobscured_region, | ||||
|                           cairo_region_t *clip_region); | ||||
|   void (* reset_culling) (MetaCullable  *cullable); | ||||
| }; | ||||
|  | ||||
| GType meta_cullable_get_type (void); | ||||
|  | ||||
| void meta_cullable_cull_out (MetaCullable   *cullable, | ||||
|                              cairo_region_t *unobscured_region, | ||||
|                              cairo_region_t *clip_region); | ||||
| void meta_cullable_reset_culling (MetaCullable *cullable); | ||||
|  | ||||
| /* Utility methods for implementations */ | ||||
| void meta_cullable_cull_out_children (MetaCullable   *cullable, | ||||
|                                       cairo_region_t *unobscured_region, | ||||
|                                       cairo_region_t *clip_region); | ||||
| void meta_cullable_reset_culling_children (MetaCullable *cullable); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __META_CULLABLE_H__ */ | ||||
|  | ||||
| @@ -192,10 +192,7 @@ meta_module_class_init (MetaModuleClass *klass) | ||||
| static void | ||||
| meta_module_init (MetaModule *self) | ||||
| { | ||||
|   MetaModulePrivate *priv; | ||||
|  | ||||
|   self->priv = priv = META_MODULE_GET_PRIVATE (self); | ||||
|  | ||||
|   self->priv = META_MODULE_GET_PRIVATE (self); | ||||
| } | ||||
|  | ||||
| GType | ||||
|   | ||||
| @@ -85,12 +85,20 @@ meta_plugin_manager_load (const gchar       *plugin_name) | ||||
|   g_free (path); | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_confirm_display_change (MetaMonitorManager *monitors, | ||||
|                            MetaPluginManager  *plugin_mgr) | ||||
| { | ||||
|   meta_plugin_manager_confirm_display_change (plugin_mgr); | ||||
| } | ||||
|  | ||||
| MetaPluginManager * | ||||
| meta_plugin_manager_new (MetaScreen *screen) | ||||
| { | ||||
|   MetaPluginManager *plugin_mgr; | ||||
|   MetaPluginClass *klass; | ||||
|   MetaPlugin *plugin; | ||||
|   MetaMonitorManager *monitors; | ||||
|  | ||||
|   plugin_mgr = g_new0 (MetaPluginManager, 1); | ||||
|   plugin_mgr->screen = screen; | ||||
| @@ -101,6 +109,10 @@ meta_plugin_manager_new (MetaScreen *screen) | ||||
|   if (klass->start) | ||||
|     klass->start (plugin); | ||||
|  | ||||
|   monitors = meta_monitor_manager_get (); | ||||
|   g_signal_connect (monitors, "confirm-display-change", | ||||
|                     G_CALLBACK (on_confirm_display_change), plugin_mgr); | ||||
|  | ||||
|   return plugin_mgr; | ||||
| } | ||||
|  | ||||
| @@ -294,29 +306,23 @@ meta_plugin_manager_filter_keybinding (MetaPluginManager *plugin_mgr, | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * The public method that the compositor hooks into for desktop switching. | ||||
|  * | ||||
|  * Returns TRUE if the plugin handled the event type (i.e., | ||||
|  * if the return value is FALSE, there will be no subsequent call to the | ||||
|  * manager completed() callback, and the compositor must ensure that any | ||||
|  * appropriate post-effect cleanup is carried out. | ||||
|  */ | ||||
| gboolean | ||||
| meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr, | ||||
|                                    XEvent            *xev) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|  | ||||
|   return _meta_plugin_xevent_filter (plugin, xev); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_manager_confirm_display_change (MetaPluginManager *plugin_mgr) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   /* We need to make sure that clutter gets certain events, like | ||||
|    * ConfigureNotify on the stage window. If there is a plugin that | ||||
|    * provides an xevent_filter function, then it's the responsibility | ||||
|    * of that plugin to pass events to Clutter. Otherwise, we send the | ||||
|    * event directly to Clutter ourselves. | ||||
|    */ | ||||
|   if (klass->xevent_filter) | ||||
|     return klass->xevent_filter (plugin, xev); | ||||
|   if (klass->confirm_display_change) | ||||
|     return klass->confirm_display_change (plugin); | ||||
|   else | ||||
|     return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE; | ||||
|     return meta_plugin_complete_display_change (plugin, TRUE); | ||||
| } | ||||
|   | ||||
| @@ -72,5 +72,9 @@ gboolean meta_plugin_manager_filter_keybinding (MetaPluginManager  *mgr, | ||||
|  | ||||
| gboolean meta_plugin_manager_xevent_filter (MetaPluginManager *mgr, | ||||
|                                             XEvent            *xev); | ||||
| gboolean _meta_plugin_xevent_filter (MetaPlugin *plugin, | ||||
|                                      XEvent     *xev); | ||||
|  | ||||
| void     meta_plugin_manager_confirm_display_change (MetaPluginManager *mgr); | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -41,6 +41,7 @@ | ||||
|  | ||||
| #include "compositor-private.h" | ||||
| #include "meta-window-actor-private.h" | ||||
| #include "monitor-private.h" | ||||
|  | ||||
| G_DEFINE_ABSTRACT_TYPE (MetaPlugin, meta_plugin, G_TYPE_OBJECT); | ||||
|  | ||||
| @@ -137,9 +138,7 @@ meta_plugin_class_init (MetaPluginClass *klass) | ||||
| static void | ||||
| meta_plugin_init (MetaPlugin *self) | ||||
| { | ||||
|   MetaPluginPrivate *priv; | ||||
|  | ||||
|   self->priv = priv = META_PLUGIN_GET_PRIVATE (self); | ||||
|   self->priv = META_PLUGIN_GET_PRIVATE (self); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| @@ -184,6 +183,18 @@ _meta_plugin_effect_started (MetaPlugin *plugin) | ||||
|   priv->running++; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| _meta_plugin_xevent_filter (MetaPlugin *plugin, | ||||
|                             XEvent     *xev) | ||||
| { | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|  | ||||
|   if (klass->xevent_filter && klass->xevent_filter (plugin, xev)) | ||||
|     return TRUE; | ||||
|   else | ||||
|     return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_switch_workspace_completed (MetaPlugin *plugin) | ||||
| { | ||||
| @@ -266,10 +277,6 @@ meta_plugin_destroy_completed (MetaPlugin      *plugin, | ||||
| /** | ||||
|  * meta_plugin_begin_modal: | ||||
|  * @plugin: a #MetaPlugin | ||||
|  * @grab_window: the X window to grab the keyboard and mouse on | ||||
|  * @cursor: the cursor to use for the pointer grab, or None, | ||||
|  *          to use the normal cursor for the grab window and | ||||
|  *          its descendants. | ||||
|  * @options: flags that modify the behavior of the modal grab | ||||
|  * @timestamp: the timestamp used for establishing grabs | ||||
|  * | ||||
| @@ -290,15 +297,13 @@ meta_plugin_destroy_completed (MetaPlugin      *plugin, | ||||
|  */ | ||||
| gboolean | ||||
| meta_plugin_begin_modal (MetaPlugin       *plugin, | ||||
|                          Window            grab_window, | ||||
|                          Cursor            cursor, | ||||
|                          MetaModalOptions  options, | ||||
|                          guint32           timestamp) | ||||
| { | ||||
|   MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; | ||||
|  | ||||
|   return meta_begin_modal_for_plugin (priv->screen, plugin, | ||||
|                                       grab_window, cursor, options, timestamp); | ||||
|                                       options, timestamp); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -338,3 +343,13 @@ meta_plugin_get_screen (MetaPlugin *plugin) | ||||
|  | ||||
|   return priv->screen; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_plugin_complete_display_change (MetaPlugin *plugin, | ||||
|                                      gboolean    ok) | ||||
| { | ||||
|   MetaMonitorManager *manager; | ||||
|  | ||||
|   manager = meta_monitor_manager_get (); | ||||
|   meta_monitor_manager_confirm_configuration (manager, ok); | ||||
| } | ||||
|   | ||||
| @@ -123,12 +123,12 @@ static guint signals[LAST_SIGNAL] = { 0 }; | ||||
| /* The first element in this array also defines the default parameters | ||||
|  * for newly created classes */ | ||||
| MetaShadowClassInfo default_shadow_classes[] = { | ||||
|   { "normal",       { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } }, | ||||
|   { "dialog",       { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } }, | ||||
|   { "modal_dialog", { 6, -1, 0, 1, 255 }, { 3, -1, 0, 3, 128 } }, | ||||
|   { "utility",      { 3, -1, 0, 1, 255 }, { 3, -1, 0, 1, 128 } }, | ||||
|   { "border",       { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } }, | ||||
|   { "menu",         { 6, -1, 0, 3, 255 }, { 3, -1, 0, 0, 128 } }, | ||||
|   { "normal",       { 6, -1, 0, 3, 128 }, { 3, -1, 0, 3, 32 } }, | ||||
|   { "dialog",       { 6, -1, 0, 3, 128 }, { 3, -1, 0, 3, 32 } }, | ||||
|   { "modal_dialog", { 6, -1, 0, 1, 128 }, { 3, -1, 0, 3, 32 } }, | ||||
|   { "utility",      { 3, -1, 0, 1, 128 }, { 3, -1, 0, 1, 32 } }, | ||||
|   { "border",       { 6, -1, 0, 3, 128 }, { 3, -1, 0, 3, 32 } }, | ||||
|   { "menu",         { 6, -1, 0, 3, 128 }, { 3, -1, 0, 0, 32 } }, | ||||
|  | ||||
|   { "popup-menu",    { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } }, | ||||
|  | ||||
|   | ||||
| @@ -30,6 +30,7 @@ | ||||
| #include <config.h> | ||||
|  | ||||
| #include <meta/meta-shaped-texture.h> | ||||
| #include "clutter-utils.h" | ||||
| #include "meta-texture-tower.h" | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| @@ -68,10 +69,10 @@ struct _MetaShapedTexturePrivate | ||||
|   Pixmap pixmap; | ||||
|   CoglTexturePixmapX11 *texture; | ||||
|   CoglTexture *mask_texture; | ||||
|   CoglPipeline *pipeline; | ||||
|   CoglPipeline *pipeline_unshaped; | ||||
|  | ||||
|   cairo_region_t *clip_region; | ||||
|   cairo_region_t *opaque_region; | ||||
|   cairo_region_t *input_shape_region; | ||||
|  | ||||
|   guint tex_width, tex_height; | ||||
|  | ||||
| @@ -118,9 +119,8 @@ meta_shaped_texture_dispose (GObject *object) | ||||
|     meta_texture_tower_free (priv->paint_tower); | ||||
|   priv->paint_tower = NULL; | ||||
|  | ||||
|   g_clear_pointer (&priv->pipeline, cogl_object_unref); | ||||
|   g_clear_pointer (&priv->pipeline_unshaped, cogl_object_unref); | ||||
|   g_clear_pointer (&priv->texture, cogl_object_unref); | ||||
|   g_clear_pointer (&priv->opaque_region, cairo_region_destroy); | ||||
|  | ||||
|   meta_shaped_texture_set_mask_texture (self, NULL); | ||||
|   meta_shaped_texture_set_clip_region (self, NULL); | ||||
| @@ -128,19 +128,90 @@ meta_shaped_texture_dispose (GObject *object) | ||||
|   G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static CoglPipeline * | ||||
| get_unmasked_pipeline (CoglContext *ctx) | ||||
| { | ||||
|   return cogl_pipeline_new (ctx); | ||||
| } | ||||
|  | ||||
| static CoglPipeline * | ||||
| get_masked_pipeline (CoglContext *ctx) | ||||
| { | ||||
|   static CoglPipeline *template = NULL; | ||||
|   if (G_UNLIKELY (template == NULL)) | ||||
|     { | ||||
|       template = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_layer_combine (template, 1, | ||||
|                                        "RGBA = MODULATE (PREVIOUS, TEXTURE[A])", | ||||
|                                        NULL); | ||||
|     } | ||||
|  | ||||
|   return cogl_pipeline_copy (template); | ||||
| } | ||||
|  | ||||
| static CoglPipeline * | ||||
| get_unblended_pipeline (CoglContext *ctx) | ||||
| { | ||||
|   static CoglPipeline *template = NULL; | ||||
|   if (G_UNLIKELY (template == NULL)) | ||||
|     { | ||||
|       CoglColor color; | ||||
|       template = cogl_pipeline_new (ctx); | ||||
|       cogl_color_init_from_4ub (&color, 255, 255, 255, 255); | ||||
|       cogl_pipeline_set_blend (template, | ||||
|                                "RGBA = ADD (SRC_COLOR, 0)", | ||||
|                                NULL); | ||||
|       cogl_pipeline_set_color (template, &color); | ||||
|     } | ||||
|  | ||||
|   return cogl_pipeline_copy (template); | ||||
| } | ||||
|  | ||||
| static void | ||||
| paint_clipped_rectangle (CoglFramebuffer       *fb, | ||||
|                          CoglPipeline          *pipeline, | ||||
|                          cairo_rectangle_int_t *rect, | ||||
|                          ClutterActorBox       *alloc) | ||||
| { | ||||
|   float coords[8]; | ||||
|   float x1, y1, x2, y2; | ||||
|  | ||||
|   x1 = rect->x; | ||||
|   y1 = rect->y; | ||||
|   x2 = rect->x + rect->width; | ||||
|   y2 = rect->y + rect->height; | ||||
|  | ||||
|   coords[0] = rect->x / (alloc->x2 - alloc->x1); | ||||
|   coords[1] = rect->y / (alloc->y2 - alloc->y1); | ||||
|   coords[2] = (rect->x + rect->width) / (alloc->x2 - alloc->x1); | ||||
|   coords[3] = (rect->y + rect->height) / (alloc->y2 - alloc->y1); | ||||
|  | ||||
|   coords[4] = coords[0]; | ||||
|   coords[5] = coords[1]; | ||||
|   coords[6] = coords[2]; | ||||
|   coords[7] = coords[3]; | ||||
|  | ||||
|   cogl_framebuffer_draw_multitextured_rectangle (fb, pipeline, | ||||
|                                                  x1, y1, x2, y2, | ||||
|                                                  &coords[0], 8); | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| static void | ||||
| meta_shaped_texture_paint (ClutterActor *actor) | ||||
| { | ||||
|   MetaShapedTexture *stex = (MetaShapedTexture *) actor; | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   CoglTexture *paint_tex; | ||||
|   guint tex_width, tex_height; | ||||
|   guchar opacity; | ||||
|   CoglContext *ctx; | ||||
|   CoglFramebuffer *fb; | ||||
|   CoglPipeline *pipeline = NULL; | ||||
|   CoglTexture *paint_tex; | ||||
|   ClutterActorBox alloc; | ||||
|  | ||||
|   static CoglPipeline *pipeline_template = NULL; | ||||
|   static CoglPipeline *pipeline_unshaped_template = NULL; | ||||
|  | ||||
|   CoglPipeline *pipeline; | ||||
|   cairo_region_t *blended_region = NULL; | ||||
|   CoglPipelineFilter filter; | ||||
|  | ||||
|   if (priv->clip_region && cairo_region_is_empty (priv->clip_region)) | ||||
|     return; | ||||
| @@ -177,105 +248,144 @@ meta_shaped_texture_paint (ClutterActor *actor) | ||||
|   if (tex_width == 0 || tex_height == 0) /* no contents yet */ | ||||
|     return; | ||||
|  | ||||
|   /* Use nearest-pixel interpolation if the texture is unscaled. This | ||||
|    * improves performance, especially with software rendering. | ||||
|    */ | ||||
|  | ||||
|   filter = COGL_PIPELINE_FILTER_LINEAR; | ||||
|  | ||||
|   if (!clutter_actor_is_in_clone_paint (actor)) | ||||
|     { | ||||
|       int x_origin, y_origin; | ||||
|  | ||||
|       if (meta_actor_is_untransformed (actor, | ||||
|                                        &x_origin, | ||||
|                                        &y_origin)) | ||||
|         filter = COGL_PIPELINE_FILTER_NEAREST; | ||||
|     } | ||||
|  | ||||
|   ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|   fb = cogl_get_draw_framebuffer (); | ||||
|  | ||||
|   opacity = clutter_actor_get_paint_opacity (actor); | ||||
|   clutter_actor_get_allocation_box (actor, &alloc); | ||||
|  | ||||
|   if (priv->opaque_region != NULL && opacity == 255) | ||||
|     { | ||||
|       CoglPipeline *opaque_pipeline; | ||||
|       cairo_region_t *region; | ||||
|       int n_rects; | ||||
|       int i; | ||||
|  | ||||
|       if (priv->clip_region != NULL) | ||||
|         { | ||||
|           region = cairo_region_copy (priv->clip_region); | ||||
|           cairo_region_intersect (region, priv->opaque_region); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           region = cairo_region_reference (priv->opaque_region); | ||||
|         } | ||||
|  | ||||
|       if (cairo_region_is_empty (region)) | ||||
|         goto paint_blended; | ||||
|  | ||||
|       opaque_pipeline = get_unblended_pipeline (ctx); | ||||
|       cogl_pipeline_set_layer_texture (opaque_pipeline, 0, paint_tex); | ||||
|       cogl_pipeline_set_layer_filters (opaque_pipeline, 0, filter, filter); | ||||
|  | ||||
|       n_rects = cairo_region_num_rectangles (region); | ||||
|       for (i = 0; i < n_rects; i++) | ||||
|         { | ||||
|           cairo_rectangle_int_t rect; | ||||
|           cairo_region_get_rectangle (region, i, &rect); | ||||
|           paint_clipped_rectangle (fb, opaque_pipeline, &rect, &alloc); | ||||
|         } | ||||
|  | ||||
|       cogl_object_unref (opaque_pipeline); | ||||
|  | ||||
|       if (priv->clip_region != NULL) | ||||
|         { | ||||
|           blended_region = cairo_region_copy (priv->clip_region); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           cairo_rectangle_int_t rect = { 0, 0, tex_width, tex_height }; | ||||
|           blended_region = cairo_region_create_rectangle (&rect); | ||||
|         } | ||||
|  | ||||
|       cairo_region_subtract (blended_region, priv->opaque_region); | ||||
|  | ||||
|     paint_blended: | ||||
|       cairo_region_destroy (region); | ||||
|     } | ||||
|  | ||||
|   if (blended_region == NULL && priv->clip_region != NULL) | ||||
|     blended_region = cairo_region_reference (priv->clip_region); | ||||
|  | ||||
|   if (blended_region != NULL && cairo_region_is_empty (blended_region)) | ||||
|     goto out; | ||||
|  | ||||
|   if (priv->mask_texture == NULL) | ||||
|     { | ||||
|       /* Use a single-layer texture if we don't have a mask. */ | ||||
|  | ||||
|       if (priv->pipeline_unshaped == NULL) | ||||
|         { | ||||
|           if (G_UNLIKELY (pipeline_unshaped_template == NULL)) | ||||
|             { | ||||
|               CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|               pipeline_unshaped_template = cogl_pipeline_new (ctx); | ||||
|             } | ||||
|  | ||||
|           priv->pipeline_unshaped = cogl_pipeline_copy (pipeline_unshaped_template); | ||||
|         } | ||||
|         pipeline = priv->pipeline_unshaped; | ||||
|       pipeline = get_unmasked_pipeline (ctx); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (priv->pipeline == NULL) | ||||
| 	{ | ||||
| 	   if (G_UNLIKELY (pipeline_template == NULL)) | ||||
| 	    { | ||||
|               CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
| 	      pipeline_template =  cogl_pipeline_new (ctx); | ||||
| 	      cogl_pipeline_set_layer_combine (pipeline_template, 1, | ||||
| 					   "RGBA = MODULATE (PREVIOUS, TEXTURE[A])", | ||||
| 					   NULL); | ||||
| 	    } | ||||
| 	  priv->pipeline = cogl_pipeline_copy (pipeline_template); | ||||
| 	} | ||||
|       pipeline = priv->pipeline; | ||||
|  | ||||
|       pipeline = get_masked_pipeline (ctx); | ||||
|       cogl_pipeline_set_layer_texture (pipeline, 1, priv->mask_texture); | ||||
|       cogl_pipeline_set_layer_filters (pipeline, 1, filter, filter); | ||||
|     } | ||||
|  | ||||
|   cogl_pipeline_set_layer_texture (pipeline, 0, paint_tex); | ||||
|   cogl_pipeline_set_layer_filters (pipeline, 0, filter, filter); | ||||
|  | ||||
|   { | ||||
|     CoglColor color; | ||||
|     guchar opacity = clutter_actor_get_paint_opacity (actor); | ||||
|     cogl_color_set_from_4ub (&color, opacity, opacity, opacity, opacity); | ||||
|     cogl_color_init_from_4ub (&color, opacity, opacity, opacity, opacity); | ||||
|     cogl_pipeline_set_color (pipeline, &color); | ||||
|   } | ||||
|  | ||||
|   cogl_set_source (pipeline); | ||||
|  | ||||
|   clutter_actor_get_allocation_box (actor, &alloc); | ||||
|  | ||||
|   if (priv->clip_region) | ||||
|   if (blended_region != NULL) | ||||
|     { | ||||
|       int n_rects; | ||||
|       int i; | ||||
|       cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height }; | ||||
|  | ||||
|       /* Limit to how many separate rectangles we'll draw; beyond this just | ||||
|        * fall back and draw the whole thing */ | ||||
| #     define MAX_RECTS 16 | ||||
|  | ||||
|       n_rects = cairo_region_num_rectangles (priv->clip_region); | ||||
|       n_rects = cairo_region_num_rectangles (blended_region); | ||||
|       if (n_rects <= MAX_RECTS) | ||||
| 	{ | ||||
| 	  float coords[8]; | ||||
|           float x1, y1, x2, y2; | ||||
|           int i; | ||||
|           cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height }; | ||||
|  | ||||
| 	  for (i = 0; i < n_rects; i++) | ||||
| 	    { | ||||
| 	      cairo_rectangle_int_t rect; | ||||
|  | ||||
| 	      cairo_region_get_rectangle (priv->clip_region, i, &rect); | ||||
| 	      cairo_region_get_rectangle (blended_region, i, &rect); | ||||
|  | ||||
| 	      if (!gdk_rectangle_intersect (&tex_rect, &rect, &rect)) | ||||
| 		continue; | ||||
|  | ||||
| 	      x1 = rect.x; | ||||
| 	      y1 = rect.y; | ||||
| 	      x2 = rect.x + rect.width; | ||||
| 	      y2 = rect.y + rect.height; | ||||
|  | ||||
| 	      coords[0] = rect.x / (alloc.x2 - alloc.x1); | ||||
| 	      coords[1] = rect.y / (alloc.y2 - alloc.y1); | ||||
| 	      coords[2] = (rect.x + rect.width) / (alloc.x2 - alloc.x1); | ||||
| 	      coords[3] = (rect.y + rect.height) / (alloc.y2 - alloc.y1); | ||||
|  | ||||
|               coords[4] = coords[0]; | ||||
|               coords[5] = coords[1]; | ||||
|               coords[6] = coords[2]; | ||||
|               coords[7] = coords[3]; | ||||
|  | ||||
|               cogl_rectangle_with_multitexture_coords (x1, y1, x2, y2, | ||||
|                                                        &coords[0], 8); | ||||
|               paint_clipped_rectangle (fb, pipeline, &rect, &alloc); | ||||
|             } | ||||
|  | ||||
| 	  return; | ||||
|           goto out; | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|   cogl_rectangle (0, 0, | ||||
| 		  alloc.x2 - alloc.x1, | ||||
| 		  alloc.y2 - alloc.y1); | ||||
|   cogl_framebuffer_draw_rectangle (fb, pipeline, | ||||
|                                    0, 0, | ||||
|                                    alloc.x2 - alloc.x1, | ||||
|                                    alloc.y2 - alloc.y1); | ||||
|  | ||||
|  out: | ||||
|   if (pipeline != NULL) | ||||
|     cogl_object_unref (pipeline); | ||||
|   if (blended_region != NULL) | ||||
|     cairo_region_destroy (blended_region); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -285,38 +395,61 @@ meta_shaped_texture_pick (ClutterActor       *actor, | ||||
|   MetaShapedTexture *stex = (MetaShapedTexture *) actor; | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|   if (!clutter_actor_should_pick_paint (actor) || | ||||
|       (priv->clip_region && cairo_region_is_empty (priv->clip_region))) | ||||
|     return; | ||||
|  | ||||
|   /* If there is no region then use the regular pick */ | ||||
|   if (priv->mask_texture == NULL) | ||||
|     CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class) | ||||
|       ->pick (actor, color); | ||||
|   else if (clutter_actor_should_pick_paint (actor)) | ||||
|   if (priv->input_shape_region == NULL) | ||||
|     CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class)->pick (actor, color); | ||||
|   else | ||||
|     { | ||||
|       CoglTexture *paint_tex; | ||||
|       ClutterActorBox alloc; | ||||
|       guint tex_width, tex_height; | ||||
|       int n_rects; | ||||
|       float *rectangles; | ||||
|       int i; | ||||
|       CoglPipeline *pipeline; | ||||
|       CoglContext *ctx; | ||||
|       CoglFramebuffer *fb; | ||||
|       CoglColor cogl_color; | ||||
|  | ||||
|       paint_tex = COGL_TEXTURE (priv->texture); | ||||
|       /* Note: We don't bother trying to intersect the pick and clip regions | ||||
|        * since needing to copy the region, do the intersection, and probably | ||||
|        * increase the number of rectangles seems more likely to have a negative | ||||
|        * effect. | ||||
|        * | ||||
|        * NB: Most of the time when just using rectangles for picking then | ||||
|        * picking shouldn't involve any rendering, and minimizing the number of | ||||
|        * rectangles has more benefit than reducing the area of the pick | ||||
|        * region. | ||||
|        */ | ||||
|  | ||||
|       if (paint_tex == NULL) | ||||
|         return; | ||||
|       n_rects = cairo_region_num_rectangles (priv->input_shape_region); | ||||
|       rectangles = g_alloca (sizeof (float) * 4 * n_rects); | ||||
|  | ||||
|       tex_width = cogl_texture_get_width (paint_tex); | ||||
|       tex_height = cogl_texture_get_height (paint_tex); | ||||
|       for (i = 0; i < n_rects; i++) | ||||
|         { | ||||
|           cairo_rectangle_int_t rect; | ||||
|           int pos = i * 4; | ||||
|  | ||||
|       if (tex_width == 0 || tex_height == 0) /* no contents yet */ | ||||
|         return; | ||||
|           cairo_region_get_rectangle (priv->input_shape_region, i, &rect); | ||||
|  | ||||
|       cogl_set_source_color4ub (color->red, color->green, color->blue, | ||||
|                                  color->alpha); | ||||
|           rectangles[pos] = rect.x; | ||||
|           rectangles[pos + 1] = rect.y; | ||||
|           rectangles[pos + 2] = rect.x + rect.width; | ||||
|           rectangles[pos + 3] = rect.y + rect.height; | ||||
|         } | ||||
|  | ||||
|       clutter_actor_get_allocation_box (actor, &alloc); | ||||
|       ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|       fb = cogl_get_draw_framebuffer (); | ||||
|  | ||||
|       /* Paint the mask rectangle in the given color */ | ||||
|       cogl_set_source_texture (priv->mask_texture); | ||||
|       cogl_rectangle_with_texture_coords (0, 0, | ||||
|                                           alloc.x2 - alloc.x1, | ||||
|                                           alloc.y2 - alloc.y1, | ||||
|                                           0, 0, 1, 1); | ||||
|       cogl_color_init_from_4ub (&cogl_color, color->red, color->green, color->blue, color->alpha); | ||||
|  | ||||
|       pipeline = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_color (pipeline, &cogl_color); | ||||
|  | ||||
|       cogl_framebuffer_draw_rectangles (fb, pipeline, | ||||
|                                         rectangles, n_rects); | ||||
|       cogl_object_unref (pipeline); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -416,12 +549,32 @@ meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex, | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| void | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_update_area: | ||||
|  * @stex: #MetaShapedTexture | ||||
|  * @x: the x coordinate of the damaged area | ||||
|  * @y: the y coordinate of the damaged area | ||||
|  * @width: the width of the damaged area | ||||
|  * @height: the height of the damaged area | ||||
|  * @unobscured_region: The unobscured region of the window or %NULL if | ||||
|  * there is no valid one (like when the actor is transformed or | ||||
|  * has a mapped clone) | ||||
|  * | ||||
|  * Repairs the damaged area indicated by @x, @y, @width and @height | ||||
|  * and queues a redraw for the intersection @visibible_region and | ||||
|  * the damage area. If @visibible_region is %NULL a redraw will always | ||||
|  * get queued. | ||||
|  * | ||||
|  * Return value: Whether a redraw have been queued or not | ||||
|  */ | ||||
| gboolean | ||||
| meta_shaped_texture_update_area (MetaShapedTexture *stex, | ||||
| 				 int                x, | ||||
| 				 int                y, | ||||
| 				 int                width, | ||||
| 				 int                height) | ||||
| 				 int                height, | ||||
| 				 cairo_region_t    *unobscured_region) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   const cairo_rectangle_int_t clip = { x, y, width, height }; | ||||
| @@ -429,14 +582,41 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex, | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->texture == NULL) | ||||
|     return; | ||||
|     return FALSE; | ||||
|  | ||||
|   cogl_texture_pixmap_x11_update_area (priv->texture, | ||||
|                                        x, y, width, height); | ||||
|  | ||||
|   meta_texture_tower_update_area (priv->paint_tower, x, y, width, height); | ||||
|  | ||||
|   if (unobscured_region) | ||||
|     { | ||||
|       cairo_region_t *intersection; | ||||
|  | ||||
|       if (cairo_region_is_empty (unobscured_region)) | ||||
|         return FALSE; | ||||
|  | ||||
|       intersection = cairo_region_copy (unobscured_region); | ||||
|       cairo_region_intersect_rectangle (intersection, &clip); | ||||
|  | ||||
|       if (!cairo_region_is_empty (intersection)) | ||||
|         { | ||||
|           cairo_rectangle_int_t damage_rect; | ||||
|           cairo_region_get_extents (intersection, &damage_rect); | ||||
|           clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &damage_rect); | ||||
|           cairo_region_destroy (intersection); | ||||
|  | ||||
|           return TRUE; | ||||
|         } | ||||
|  | ||||
|       cairo_region_destroy (intersection); | ||||
|  | ||||
|       return FALSE; | ||||
|     } | ||||
|  | ||||
|   clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &clip); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -455,12 +635,6 @@ set_cogl_texture (MetaShapedTexture    *stex, | ||||
|  | ||||
|   priv->texture = cogl_tex; | ||||
|  | ||||
|   if (priv->pipeline != NULL) | ||||
|     cogl_pipeline_set_layer_texture (priv->pipeline, 0, COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|   if (priv->pipeline_unshaped != NULL) | ||||
|     cogl_pipeline_set_layer_texture (priv->pipeline_unshaped, 0, COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|   if (cogl_tex != NULL) | ||||
|     { | ||||
|       width = cogl_texture_get_width (COGL_TEXTURE (cogl_tex)); | ||||
| @@ -533,11 +707,46 @@ meta_shaped_texture_get_texture (MetaShapedTexture *stex) | ||||
|   return COGL_TEXTURE (stex->priv->texture); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_set_input_shape_region: | ||||
|  * @stex: a #MetaShapedTexture | ||||
|  * @shape_region: the region of the texture that should respond to | ||||
|  *    input. | ||||
|  * | ||||
|  * Determines what region of the texture should accept input. For | ||||
|  * X based windows this is defined by the ShapeInput region of the | ||||
|  * window. | ||||
|  */ | ||||
| void | ||||
| meta_shaped_texture_set_input_shape_region (MetaShapedTexture *stex, | ||||
|                                             cairo_region_t    *shape_region) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->input_shape_region != NULL) | ||||
|     { | ||||
|       cairo_region_destroy (priv->input_shape_region); | ||||
|       priv->input_shape_region = NULL; | ||||
|     } | ||||
|  | ||||
|   if (shape_region != NULL) | ||||
|     { | ||||
|       cairo_region_reference (shape_region); | ||||
|       priv->input_shape_region = shape_region; | ||||
|     } | ||||
|  | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_set_clip_region: | ||||
|  * @stex: a #MetaShapedTexture | ||||
|  * @clip_region: (transfer full): the region of the texture that | ||||
|  *   is visible and should be painted. | ||||
|  * @clip_region: the region of the texture that is visible and | ||||
|  *   should be painted. | ||||
|  * | ||||
|  * Provides a hint to the texture about what areas of the texture | ||||
|  * are not completely obscured and thus need to be painted. This | ||||
| @@ -558,10 +767,7 @@ meta_shaped_texture_set_clip_region (MetaShapedTexture *stex, | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->clip_region) | ||||
|     { | ||||
|       cairo_region_destroy (priv->clip_region); | ||||
|       priv->clip_region = NULL; | ||||
|     } | ||||
|     cairo_region_destroy (priv->clip_region); | ||||
|  | ||||
|   if (clip_region) | ||||
|     priv->clip_region = cairo_region_copy (clip_region); | ||||
| @@ -569,6 +775,36 @@ meta_shaped_texture_set_clip_region (MetaShapedTexture *stex, | ||||
|     priv->clip_region = NULL; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_set_opaque_region: | ||||
|  * @stex: a #MetaShapedTexture | ||||
|  * @opaque_region: (transfer full): the region of the texture that | ||||
|  *   can have blending turned off. | ||||
|  * | ||||
|  * As most windows have a large portion that does not require blending, | ||||
|  * we can easily turn off blending if we know the areas that do not | ||||
|  * require blending. This sets the region where we will not blend for | ||||
|  * optimization purposes. | ||||
|  */ | ||||
| void | ||||
| meta_shaped_texture_set_opaque_region (MetaShapedTexture *stex, | ||||
|                                        cairo_region_t    *opaque_region) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->opaque_region) | ||||
|     cairo_region_destroy (priv->opaque_region); | ||||
|  | ||||
|   if (opaque_region) | ||||
|     priv->opaque_region = cairo_region_reference (opaque_region); | ||||
|   else | ||||
|     priv->opaque_region = NULL; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_shaped_texture_get_image: | ||||
|  * @stex: A #MetaShapedTexture | ||||
|   | ||||
| @@ -62,6 +62,7 @@ struct _MetaTextureTower | ||||
|   CoglTexture *textures[MAX_TEXTURE_LEVELS]; | ||||
|   CoglOffscreen *fbos[MAX_TEXTURE_LEVELS]; | ||||
|   Box invalid[MAX_TEXTURE_LEVELS]; | ||||
|   CoglPipeline *pipeline_template; | ||||
| }; | ||||
|  | ||||
| /** | ||||
| @@ -93,6 +94,9 @@ meta_texture_tower_free (MetaTextureTower *tower) | ||||
| { | ||||
|   g_return_if_fail (tower != NULL); | ||||
|  | ||||
|   if (tower->pipeline_template != NULL) | ||||
|     cogl_object_unref (tower->pipeline_template); | ||||
|  | ||||
|   meta_texture_tower_set_base_texture (tower, NULL); | ||||
|  | ||||
|   g_slice_free (MetaTextureTower, tower); | ||||
| @@ -383,7 +387,7 @@ texture_tower_create_texture (MetaTextureTower *tower, | ||||
|   tower->invalid[level].y2 = height; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| static void | ||||
| texture_tower_revalidate_fbo (MetaTextureTower *tower, | ||||
|                               int               level) | ||||
| { | ||||
| @@ -394,174 +398,50 @@ texture_tower_revalidate_fbo (MetaTextureTower *tower, | ||||
|   int dest_texture_width = cogl_texture_get_width (dest_texture); | ||||
|   int dest_texture_height = cogl_texture_get_height (dest_texture); | ||||
|   Box *invalid = &tower->invalid[level]; | ||||
|   CoglMatrix modelview; | ||||
|   CoglFramebuffer *fb; | ||||
|   CoglError *catch_error = NULL; | ||||
|   CoglPipeline *pipeline; | ||||
|  | ||||
|   if (tower->fbos[level] == NULL) | ||||
|     tower->fbos[level] = cogl_offscreen_new_to_texture (dest_texture); | ||||
|     tower->fbos[level] = cogl_offscreen_new_with_texture (dest_texture); | ||||
|  | ||||
|   if (tower->fbos[level] == NULL) | ||||
|     return FALSE; | ||||
|   fb = COGL_FRAMEBUFFER (tower->fbos[level]); | ||||
|  | ||||
|   cogl_push_framebuffer (COGL_FRAMEBUFFER (tower->fbos[level])); | ||||
|  | ||||
|   cogl_ortho (0, dest_texture_width, dest_texture_height, 0, -1., 1.); | ||||
|  | ||||
|   cogl_matrix_init_identity (&modelview); | ||||
|   cogl_set_modelview_matrix (&modelview); | ||||
|  | ||||
|   cogl_set_source_texture (tower->textures[level - 1]); | ||||
|   cogl_rectangle_with_texture_coords (invalid->x1, invalid->y1, | ||||
|                                       invalid->x2, invalid->y2, | ||||
|                                       (2. * invalid->x1) / source_texture_width, | ||||
|                                       (2. * invalid->y1) / source_texture_height, | ||||
|                                       (2. * invalid->x2) / source_texture_width, | ||||
|                                       (2. * invalid->y2) / source_texture_height); | ||||
|  | ||||
|   cogl_pop_framebuffer (); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| fill_copy (guchar       *buf, | ||||
|            const guchar *source, | ||||
|            int           width) | ||||
| { | ||||
|   memcpy (buf, source, width * 4); | ||||
| } | ||||
|  | ||||
| static void | ||||
| fill_scale_down (guchar       *buf, | ||||
|                  const guchar *source, | ||||
|                  int           width) | ||||
| { | ||||
|   while (width > 1) | ||||
|   if (!cogl_framebuffer_allocate (fb, &catch_error)) | ||||
|     { | ||||
|       buf[0] = (source[0] + source[4]) / 2; | ||||
|       buf[1] = (source[1] + source[5]) / 2; | ||||
|       buf[2] = (source[2] + source[6]) / 2; | ||||
|       buf[3] = (source[3] + source[7]) / 2; | ||||
|  | ||||
|       buf += 4; | ||||
|       source += 8; | ||||
|       width -= 2; | ||||
|       cogl_error_free (catch_error); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   if (width > 0) | ||||
|   cogl_framebuffer_orthographic (fb, 0, 0, dest_texture_width, dest_texture_height, -1., 1.); | ||||
|  | ||||
|   if (!tower->pipeline_template) | ||||
|     { | ||||
|       buf[0] = source[0] / 2; | ||||
|       buf[1] = source[1] / 2; | ||||
|       buf[2] = source[2] / 2; | ||||
|       buf[3] = source[3] / 2; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| texture_tower_revalidate_client (MetaTextureTower *tower, | ||||
|                                  int               level) | ||||
| { | ||||
|   CoglTexture *source_texture = tower->textures[level - 1]; | ||||
|   int source_texture_width = cogl_texture_get_width (source_texture); | ||||
|   int source_texture_height = cogl_texture_get_height (source_texture); | ||||
|   guint source_rowstride; | ||||
|   guchar *source_data; | ||||
|   CoglTexture *dest_texture = tower->textures[level]; | ||||
|   int dest_texture_width = cogl_texture_get_width (dest_texture); | ||||
|   int dest_texture_height = cogl_texture_get_height (dest_texture); | ||||
|   int dest_x = tower->invalid[level].x1; | ||||
|   int dest_y = tower->invalid[level].y1; | ||||
|   int dest_width = tower->invalid[level].x2 - tower->invalid[level].x1; | ||||
|   int dest_height = tower->invalid[level].y2 - tower->invalid[level].y1; | ||||
|   guchar *dest_data; | ||||
|   guchar *source_tmp1 = NULL, *source_tmp2 = NULL; | ||||
|   int i, j; | ||||
|  | ||||
|   source_rowstride = source_texture_width * 4; | ||||
|  | ||||
|   source_data = g_malloc (source_texture_height * source_rowstride); | ||||
|   cogl_texture_get_data (source_texture, TEXTURE_FORMAT, source_rowstride, | ||||
|                          source_data); | ||||
|  | ||||
|   dest_data = g_malloc (dest_height * dest_width * 4); | ||||
|  | ||||
|   if (dest_texture_height < source_texture_height) | ||||
|     { | ||||
|       source_tmp1 = g_malloc (dest_width * 4); | ||||
|       source_tmp2 = g_malloc (dest_width * 4); | ||||
|       CoglContext *ctx = | ||||
|         clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|       tower->pipeline_template = cogl_pipeline_new (ctx); | ||||
|       cogl_pipeline_set_blend (tower->pipeline_template, "RGBA = ADD (SRC_COLOR, 0)", NULL); | ||||
|     } | ||||
|  | ||||
|   for (i = 0; i < dest_height; i++) | ||||
|     { | ||||
|       guchar *dest_row = dest_data + i * dest_width * 4; | ||||
|       if (dest_texture_height < source_texture_height) | ||||
|         { | ||||
|           guchar *source1, *source2; | ||||
|           guchar *dest; | ||||
|   pipeline = cogl_pipeline_copy (tower->pipeline_template); | ||||
|   cogl_pipeline_set_layer_texture (pipeline, 0, tower->textures[level - 1]); | ||||
|  | ||||
|           if (dest_texture_width < source_texture_width) | ||||
|             { | ||||
|               fill_scale_down (source_tmp1, | ||||
|                                source_data + ((i + dest_y) * 2) * source_rowstride + dest_x * 2 * 4, | ||||
|                                dest_width * 2); | ||||
|               fill_scale_down (source_tmp2, | ||||
|                                source_data + ((i + dest_y) * 2 + 1) * source_rowstride + dest_x * 2 * 4, | ||||
|                                dest_width * 2); | ||||
|             } | ||||
|           else | ||||
|             { | ||||
|               fill_copy (source_tmp1, | ||||
|                          source_data + ((i + dest_y) * 2) * source_rowstride + dest_x * 4, | ||||
|                          dest_width); | ||||
|               fill_copy (source_tmp2, | ||||
|                          source_data + ((i + dest_y) * 2 + 1) * source_rowstride + dest_x * 4, | ||||
|                          dest_width); | ||||
|             } | ||||
|   cogl_framebuffer_draw_textured_rectangle (fb, pipeline, | ||||
|                                             invalid->x1, invalid->y1, | ||||
|                                             invalid->x2, invalid->y2, | ||||
|                                             (2. * invalid->x1) / source_texture_width, | ||||
|                                             (2. * invalid->y1) / source_texture_height, | ||||
|                                             (2. * invalid->x2) / source_texture_width, | ||||
|                                             (2. * invalid->y2) / source_texture_height); | ||||
|  | ||||
|           source1 = source_tmp1; | ||||
|           source2 = source_tmp2; | ||||
|  | ||||
|           dest = dest_row; | ||||
|           for (j = 0; j < dest_width * 4; j++) | ||||
|             *(dest++) = (*(source1++) + *(source2++)) / 2; | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           if (dest_texture_width < source_texture_width) | ||||
|             fill_scale_down (dest_row, | ||||
|                              source_data + (i + dest_y) * source_rowstride + dest_x * 2 * 4, | ||||
|                              dest_width * 2); | ||||
|           else | ||||
|             fill_copy (dest_row, | ||||
|                        source_data + (i + dest_y) * source_rowstride, | ||||
|                        dest_width); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   cogl_texture_set_region (dest_texture, | ||||
|                            0, 0, | ||||
|                            dest_x, dest_y, | ||||
|                            dest_width, dest_height, | ||||
|                            dest_width, dest_height, | ||||
|                            TEXTURE_FORMAT, | ||||
|                            4 * dest_width, | ||||
|                            dest_data); | ||||
|  | ||||
|   if (dest_texture_height < source_texture_height) | ||||
|     { | ||||
|       g_free (source_tmp1); | ||||
|       g_free (source_tmp2); | ||||
|     } | ||||
|  | ||||
|   g_free (source_data); | ||||
|   g_free (dest_data); | ||||
|   cogl_object_unref (pipeline); | ||||
| } | ||||
|  | ||||
| static void | ||||
| texture_tower_revalidate (MetaTextureTower *tower, | ||||
|                           int               level) | ||||
| { | ||||
|   if (!texture_tower_revalidate_fbo (tower, level)) | ||||
|     texture_tower_revalidate_client (tower, level); | ||||
|   texture_tower_revalidate_fbo (tower, level); | ||||
| } | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -55,13 +55,8 @@ void     meta_window_actor_set_updates_frozen  (MetaWindowActor *self, | ||||
| void     meta_window_actor_queue_frame_drawn   (MetaWindowActor *self, | ||||
|                                                 gboolean         no_delay_frame); | ||||
|  | ||||
| cairo_region_t *meta_window_actor_get_obscured_region (MetaWindowActor *self); | ||||
|  | ||||
| void meta_window_actor_set_visible_region         (MetaWindowActor *self, | ||||
|                                                    cairo_region_t  *visible_region); | ||||
| void meta_window_actor_set_visible_region_beneath (MetaWindowActor *self, | ||||
|                                                    cairo_region_t  *beneath_region); | ||||
| void meta_window_actor_reset_visible_regions      (MetaWindowActor *self); | ||||
| void meta_window_actor_set_unobscured_region      (MetaWindowActor *self, | ||||
|                                                    cairo_region_t  *unobscured_region); | ||||
|  | ||||
| void meta_window_actor_effect_completed (MetaWindowActor *actor, | ||||
|                                          gulong           event); | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -11,8 +11,8 @@ | ||||
| #include "compositor-private.h" | ||||
| #include "meta-window-actor-private.h" | ||||
| #include "meta-window-group.h" | ||||
| #include "meta-background-actor-private.h" | ||||
| #include "meta-background-group-private.h" | ||||
| #include "window-private.h" | ||||
| #include "meta-cullable.h" | ||||
|  | ||||
| struct _MetaWindowGroupClass | ||||
| { | ||||
| @@ -26,7 +26,10 @@ struct _MetaWindowGroup | ||||
|   MetaScreen *screen; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaWindowGroup, meta_window_group, CLUTTER_TYPE_ACTOR); | ||||
| static void cullable_iface_init (MetaCullableInterface *iface); | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_CODE (MetaWindowGroup, meta_window_group, CLUTTER_TYPE_ACTOR, | ||||
|                          G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); | ||||
|  | ||||
| /* Help macros to scale from OpenGL <-1,1> coordinates system to | ||||
|  * window coordinates ranging [0,window-size]. Borrowed from clutter-utils.c | ||||
| @@ -86,20 +89,55 @@ painting_untransformed (MetaWindowGroup *window_group, | ||||
|   return meta_actor_vertices_are_untransformed (vertices, width, height, x_origin, y_origin); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_window_group_cull_out (MetaCullable   *cullable, | ||||
|                             cairo_region_t *unobscured_region, | ||||
|                             cairo_region_t *clip_region) | ||||
| { | ||||
|   meta_cullable_cull_out_children (cullable, unobscured_region, clip_region); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_window_group_reset_culling (MetaCullable *cullable) | ||||
| { | ||||
|   meta_cullable_reset_culling_children (cullable); | ||||
| } | ||||
|  | ||||
| static void | ||||
| cullable_iface_init (MetaCullableInterface *iface) | ||||
| { | ||||
|   iface->cull_out = meta_window_group_cull_out; | ||||
|   iface->reset_culling = meta_window_group_reset_culling; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_window_group_paint (ClutterActor *actor) | ||||
| { | ||||
|   cairo_region_t *visible_region; | ||||
|   ClutterActor *stage; | ||||
|   cairo_rectangle_int_t visible_rect; | ||||
|   GList *children, *l; | ||||
|   cairo_region_t *clip_region; | ||||
|   cairo_region_t *unobscured_region; | ||||
|   ClutterActorIter iter; | ||||
|   ClutterActor *child; | ||||
|   cairo_rectangle_int_t visible_rect, clip_rect; | ||||
|   int paint_x_offset, paint_y_offset; | ||||
|   int paint_x_origin, paint_y_origin; | ||||
|   int actor_x_origin, actor_y_origin; | ||||
|   int paint_x_offset, paint_y_offset; | ||||
|  | ||||
|   MetaWindowGroup *window_group = META_WINDOW_GROUP (actor); | ||||
|   ClutterActor *stage = clutter_actor_get_stage (actor); | ||||
|   MetaCompScreen *info = meta_screen_get_compositor_data (window_group->screen); | ||||
|  | ||||
|   /* Start off by treating all windows as completely unobscured, so damage anywhere | ||||
|    * in a window queues redraws, but confine it more below. */ | ||||
|   clutter_actor_iter_init (&iter, actor); | ||||
|   while (clutter_actor_iter_next (&iter, &child)) | ||||
|     { | ||||
|       if (META_IS_WINDOW_ACTOR (child)) | ||||
|         { | ||||
|           MetaWindowActor *window_actor = META_WINDOW_ACTOR (child); | ||||
|           meta_window_actor_set_unobscured_region (window_actor, NULL); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   /* Normally we expect an actor to be drawn at it's position on the screen. | ||||
|    * However, if we're inside the paint of a ClutterClone, that won't be the | ||||
|    * case and we need to compensate. We look at the position of the window | ||||
| @@ -120,15 +158,11 @@ meta_window_group_paint (ClutterActor *actor) | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   paint_x_offset = paint_x_origin - actor_x_origin; | ||||
|   paint_y_offset = paint_y_origin - actor_y_origin; | ||||
|   visible_rect.x = visible_rect.y = 0; | ||||
|   visible_rect.width = clutter_actor_get_width (CLUTTER_ACTOR (stage)); | ||||
|   visible_rect.height = clutter_actor_get_height (CLUTTER_ACTOR (stage)); | ||||
|  | ||||
|   /* We walk the list from top to bottom (opposite of painting order), | ||||
|    * and subtract the opaque area of each window out of the visible | ||||
|    * region that we pass to the windows below. | ||||
|    */ | ||||
|   children = clutter_actor_get_children (actor); | ||||
|   children = g_list_reverse (children); | ||||
|   unobscured_region = cairo_region_create_rectangle (&visible_rect); | ||||
|  | ||||
|   /* Get the clipped redraw bounds from Clutter so that we can avoid | ||||
|    * painting shadows on windows that don't need to be painted in this | ||||
| @@ -136,125 +170,59 @@ meta_window_group_paint (ClutterActor *actor) | ||||
|    * sizes, we could intersect this with an accurate union of the | ||||
|    * monitors to avoid painting shadows that are visible only in the | ||||
|    * holes. */ | ||||
|   stage = clutter_actor_get_stage (actor); | ||||
|   clutter_stage_get_redraw_clip_bounds (CLUTTER_STAGE (stage), | ||||
|                                         &visible_rect); | ||||
|                                         &clip_rect); | ||||
|  | ||||
|   visible_region = cairo_region_create_rectangle (&visible_rect); | ||||
|   clip_region = cairo_region_create_rectangle (&clip_rect); | ||||
|  | ||||
|   paint_x_offset = paint_x_origin - actor_x_origin; | ||||
|   paint_y_offset = paint_y_origin - actor_y_origin; | ||||
|   cairo_region_translate (clip_region, -paint_x_offset, -paint_y_offset); | ||||
|  | ||||
|   if (info->unredirected_window != NULL) | ||||
|     { | ||||
|       cairo_rectangle_int_t unredirected_rect; | ||||
|       MetaWindow *window = meta_window_actor_get_meta_window (info->unredirected_window); | ||||
|  | ||||
|       meta_window_get_outer_rect (window, (MetaRectangle *)&unredirected_rect); | ||||
|       cairo_region_subtract_rectangle (visible_region, &unredirected_rect); | ||||
|       meta_window_get_frame_rect (window, (MetaRectangle *)&unredirected_rect); | ||||
|       cairo_region_subtract_rectangle (unobscured_region, &unredirected_rect); | ||||
|       cairo_region_subtract_rectangle (clip_region, &unredirected_rect); | ||||
|     } | ||||
|  | ||||
|   for (l = children; l; l = l->next) | ||||
|     { | ||||
|       if (!CLUTTER_ACTOR_IS_VISIBLE (l->data)) | ||||
|         continue; | ||||
|   meta_cullable_cull_out (META_CULLABLE (window_group), unobscured_region, clip_region); | ||||
|  | ||||
|       if (l->data == info->unredirected_window) | ||||
|         continue; | ||||
|  | ||||
|       /* If an actor has effects applied, then that can change the area | ||||
|        * it paints and the opacity, so we no longer can figure out what | ||||
|        * portion of the actor is obscured and what portion of the screen | ||||
|        * it obscures, so we skip the actor. | ||||
|        * | ||||
|        * This has a secondary beneficial effect: if a ClutterOffscreenEffect | ||||
|        * is applied to an actor, then our clipped redraws interfere with the | ||||
|        * caching of the FBO - even if we only need to draw a small portion | ||||
|        * of the window right now, ClutterOffscreenEffect may use other portions | ||||
|        * of the FBO later. So, skipping actors with effects applied also | ||||
|        * prevents these bugs. | ||||
|        * | ||||
|        * Theoretically, we should check clutter_actor_get_offscreen_redirect() | ||||
|        * as well for the same reason, but omitted for simplicity in the | ||||
|        * hopes that no-one will do that. | ||||
|        */ | ||||
|       if (clutter_actor_has_effects (l->data)) | ||||
|         continue; | ||||
|  | ||||
|       if (META_IS_WINDOW_ACTOR (l->data)) | ||||
|         { | ||||
|           MetaWindowActor *window_actor = l->data; | ||||
|           int x, y; | ||||
|  | ||||
|           if (!meta_actor_is_untransformed (CLUTTER_ACTOR (window_actor), &x, &y)) | ||||
|             continue; | ||||
|  | ||||
|           x += paint_x_offset; | ||||
|           y += paint_y_offset; | ||||
|  | ||||
|           /* Temporarily move to the coordinate system of the actor */ | ||||
|           cairo_region_translate (visible_region, - x, - y); | ||||
|  | ||||
|           meta_window_actor_set_visible_region (window_actor, visible_region); | ||||
|  | ||||
|           if (clutter_actor_get_paint_opacity (CLUTTER_ACTOR (window_actor)) == 0xff) | ||||
|             { | ||||
|               cairo_region_t *obscured_region = meta_window_actor_get_obscured_region (window_actor); | ||||
|               if (obscured_region) | ||||
|                 cairo_region_subtract (visible_region, obscured_region); | ||||
|             } | ||||
|  | ||||
|           meta_window_actor_set_visible_region_beneath (window_actor, visible_region); | ||||
|           cairo_region_translate (visible_region, x, y); | ||||
|         } | ||||
|       else if (META_IS_BACKGROUND_ACTOR (l->data) || | ||||
|                META_IS_BACKGROUND_GROUP (l->data)) | ||||
|         { | ||||
|           ClutterActor *background_actor = l->data; | ||||
|           int x, y; | ||||
|  | ||||
|           if (!meta_actor_is_untransformed (CLUTTER_ACTOR (background_actor), &x, &y)) | ||||
|             continue; | ||||
|  | ||||
|           x += paint_x_offset; | ||||
|           y += paint_y_offset; | ||||
|  | ||||
|           cairo_region_translate (visible_region, - x, - y); | ||||
|  | ||||
|           if (META_IS_BACKGROUND_GROUP (background_actor)) | ||||
|             meta_background_group_set_visible_region (META_BACKGROUND_GROUP (background_actor), visible_region); | ||||
|           else | ||||
|             meta_background_actor_set_visible_region (META_BACKGROUND_ACTOR (background_actor), visible_region); | ||||
|           cairo_region_translate (visible_region, x, y); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   cairo_region_destroy (visible_region); | ||||
|   cairo_region_destroy (unobscured_region); | ||||
|   cairo_region_destroy (clip_region); | ||||
|  | ||||
|   CLUTTER_ACTOR_CLASS (meta_window_group_parent_class)->paint (actor); | ||||
|  | ||||
|   /* Now that we are done painting, unset the visible regions (they will | ||||
|    * mess up painting clones of our actors) | ||||
|    */ | ||||
|   for (l = children; l; l = l->next) | ||||
|     { | ||||
|       if (META_IS_WINDOW_ACTOR (l->data)) | ||||
|         { | ||||
|           MetaWindowActor *window_actor = l->data; | ||||
|           meta_window_actor_reset_visible_regions (window_actor); | ||||
|         } | ||||
|       else if (META_IS_BACKGROUND_ACTOR (l->data)) | ||||
|         { | ||||
|           MetaBackgroundActor *background_actor = l->data; | ||||
|           meta_background_actor_set_visible_region (background_actor, NULL); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   g_list_free (children); | ||||
|   meta_cullable_reset_culling (META_CULLABLE (window_group)); | ||||
| } | ||||
|  | ||||
| /* Adapted from clutter_actor_update_default_paint_volume() */ | ||||
| static gboolean | ||||
| meta_window_group_get_paint_volume (ClutterActor       *actor, | ||||
| meta_window_group_get_paint_volume (ClutterActor       *self, | ||||
|                                     ClutterPaintVolume *volume) | ||||
| { | ||||
|   return clutter_paint_volume_set_from_allocation (volume, actor); | ||||
|   ClutterActorIter iter; | ||||
|   ClutterActor *child; | ||||
|  | ||||
|   clutter_actor_iter_init (&iter, self); | ||||
|   while (clutter_actor_iter_next (&iter, &child)) | ||||
|     { | ||||
|       const ClutterPaintVolume *child_volume; | ||||
|  | ||||
|       if (!CLUTTER_ACTOR_IS_MAPPED (child)) | ||||
|         continue; | ||||
|  | ||||
|       child_volume = clutter_actor_get_transformed_paint_volume (child, self); | ||||
|       if (child_volume == NULL) | ||||
|         return FALSE; | ||||
|  | ||||
|       clutter_paint_volume_union (volume, child_volume); | ||||
|     } | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
| @@ -11,29 +11,9 @@ | ||||
|  * MetaWindowGroup: | ||||
|  * | ||||
|  * This class is a subclass of ClutterActor with special handling for | ||||
|  * MetaWindowActor/MetaBackgroundActor/MetaBackgroundGroup when painting | ||||
|  * children. | ||||
|  * | ||||
|  * When we are painting a stack of 5-10 maximized windows, the | ||||
|  * standard bottom-to-top method of drawing every actor results in a | ||||
|  * tremendous amount of overdraw and can easily max out the available | ||||
|  * memory bandwidth on a low-end graphics chipset. It's even worse if | ||||
|  * window textures are being accessed over the AGP bus. | ||||
|  * | ||||
|  * The basic technique applied here is to do a pre-pass before painting | ||||
|  * where we walk window from top to bottom and compute the visible area | ||||
|  * at each step by subtracting out the windows above it. The visible | ||||
|  * area is passed to MetaWindowActor which uses it to clip the portion of | ||||
|  * the window which drawn and avoid redrawing the shadow if it is completely | ||||
|  * obscured. | ||||
|  * | ||||
|  * A caveat is that this is ineffective if applications are using ARGB | ||||
|  * visuals, since we have no way of knowing whether a window obscures | ||||
|  * the windows behind it or not. Alternate approaches using the depth | ||||
|  * or stencil buffer rather than client side regions might be able to | ||||
|  * handle alpha windows, but the combination of glAlphaFunc and stenciling | ||||
|  * tends not to be efficient except on newer cards. (And on newer cards | ||||
|  * we have lots of memory and bandwidth.) | ||||
|  * #MetaCullable when painting children. It uses code similar to | ||||
|  * meta_cullable_cull_out_children(), but also has additional special | ||||
|  * cases for the undirected window, and similar. | ||||
|  */ | ||||
|  | ||||
| #define META_TYPE_WINDOW_GROUP            (meta_window_group_get_type ()) | ||||
|   | ||||
| @@ -24,6 +24,8 @@ | ||||
| #include <meta/meta-plugin.h> | ||||
| #include <meta/window.h> | ||||
| #include <meta/util.h> | ||||
| #include <meta/meta-background-group.h> | ||||
| #include <meta/meta-background-actor.h> | ||||
|  | ||||
| #include <libintl.h> | ||||
| #define _(x) dgettext (GETTEXT_PACKAGE, x) | ||||
| @@ -98,6 +100,8 @@ static void kill_window_effects   (MetaPlugin      *plugin, | ||||
|                                    MetaWindowActor *actor); | ||||
| static void kill_switch_workspace (MetaPlugin      *plugin); | ||||
|  | ||||
| static void confirm_display_change (MetaPlugin *plugin); | ||||
|  | ||||
| static const MetaPluginInfo * plugin_info (MetaPlugin *plugin); | ||||
|  | ||||
| META_PLUGIN_DECLARE(MetaDefaultPlugin, meta_default_plugin); | ||||
| @@ -113,6 +117,8 @@ struct _MetaDefaultPluginPrivate | ||||
|   ClutterActor          *desktop1; | ||||
|   ClutterActor          *desktop2; | ||||
|  | ||||
|   ClutterActor          *background_group; | ||||
|  | ||||
|   MetaPluginInfo         info; | ||||
| }; | ||||
|  | ||||
| @@ -203,6 +209,7 @@ meta_default_plugin_class_init (MetaDefaultPluginClass *klass) | ||||
|   plugin_class->plugin_info      = plugin_info; | ||||
|   plugin_class->kill_window_effects   = kill_window_effects; | ||||
|   plugin_class->kill_switch_workspace = kill_switch_workspace; | ||||
|   plugin_class->confirm_display_change = confirm_display_change; | ||||
|  | ||||
|   g_type_class_add_private (gobject_class, sizeof (MetaDefaultPluginPrivate)); | ||||
| } | ||||
| @@ -299,9 +306,58 @@ show_stage (MetaPlugin *plugin) | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_monitors_changed (MetaScreen *screen, | ||||
|                      MetaPlugin *plugin) | ||||
| { | ||||
|   MetaDefaultPlugin *self = META_DEFAULT_PLUGIN (plugin); | ||||
|   int i, n; | ||||
|  | ||||
|   clutter_actor_destroy_all_children (self->priv->background_group); | ||||
|  | ||||
|   n = meta_screen_get_n_monitors (screen); | ||||
|   for (i = 0; i < n; i++) | ||||
|     { | ||||
|       MetaRectangle rect; | ||||
|       ClutterActor *background; | ||||
|       ClutterColor color; | ||||
|  | ||||
|       meta_screen_get_monitor_geometry (screen, i, &rect); | ||||
|  | ||||
|       background = meta_background_actor_new (); | ||||
|  | ||||
|       clutter_actor_set_position (background, rect.x, rect.y); | ||||
|       clutter_actor_set_size (background, rect.width, rect.height); | ||||
|  | ||||
|       /* Don't use rand() here, mesa calls srand() internally when | ||||
|          parsing the driconf XML, but it's nice if the colors are | ||||
|          reproducible. | ||||
|       */ | ||||
|       clutter_color_init (&color, | ||||
|                           g_random_int () % 255, | ||||
|                           g_random_int () % 255, | ||||
|                           g_random_int () % 255, | ||||
|                           255); | ||||
|       clutter_actor_set_background_color (background, &color); | ||||
|  | ||||
|       clutter_actor_add_child (self->priv->background_group, background); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| start (MetaPlugin *plugin) | ||||
| { | ||||
|   MetaDefaultPlugin *self = META_DEFAULT_PLUGIN (plugin); | ||||
|   MetaScreen *screen = meta_plugin_get_screen (plugin); | ||||
|  | ||||
|   self->priv->background_group = meta_background_group_new (); | ||||
|   clutter_actor_insert_child_below (meta_get_window_group_for_screen (screen), | ||||
|                                     self->priv->background_group, NULL); | ||||
|  | ||||
|   g_signal_connect (screen, "monitors-changed", | ||||
|                     G_CALLBACK (on_monitors_changed), plugin); | ||||
|   on_monitors_changed (screen, plugin); | ||||
|  | ||||
|   meta_later_add (META_LATER_BEFORE_REDRAW, | ||||
|                   (GSourceFunc) show_stage, | ||||
|                   plugin, | ||||
| @@ -782,3 +838,33 @@ plugin_info (MetaPlugin *plugin) | ||||
|  | ||||
|   return &priv->info; | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_dialog_closed (GPid     pid, | ||||
|                   gint     status, | ||||
|                   gpointer user_data) | ||||
| { | ||||
|   MetaPlugin *plugin = user_data; | ||||
|   gboolean ok; | ||||
|  | ||||
|   ok = g_spawn_check_exit_status (status, NULL); | ||||
|   meta_plugin_complete_display_change (plugin, ok); | ||||
| } | ||||
|  | ||||
| static void | ||||
| confirm_display_change (MetaPlugin *plugin) | ||||
| { | ||||
|   GPid pid; | ||||
|  | ||||
|   pid = meta_show_dialog ("--question", | ||||
|                           "Does the display look OK?", | ||||
|                           "20", | ||||
|                           NULL, | ||||
|                           "_Keep This Configuration", | ||||
|                           "_Restore Previous Configuration", | ||||
|                           "preferences-desktop-display", | ||||
|                           0, | ||||
|                           NULL, NULL); | ||||
|  | ||||
|   g_child_watch_add (pid, on_dialog_closed, plugin); | ||||
| } | ||||
|   | ||||
| @@ -59,6 +59,8 @@ struct _MetaBarrierPrivate | ||||
|   PointerBarrier xbarrier; | ||||
| }; | ||||
|  | ||||
| static void meta_barrier_event_unref (MetaBarrierEvent *event); | ||||
|  | ||||
| static void | ||||
| meta_barrier_get_property (GObject    *object, | ||||
|                            guint       prop_id, | ||||
| @@ -359,6 +361,8 @@ meta_barrier_fire_event (MetaBarrier    *barrier, | ||||
|     default: | ||||
|       g_assert_not_reached (); | ||||
|     } | ||||
|  | ||||
|   meta_barrier_event_unref (event); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
|   | ||||
| @@ -118,8 +118,6 @@ typedef struct | ||||
| { | ||||
|   MetaRectangle        orig; | ||||
|   MetaRectangle        current; | ||||
|   MetaFrameBorders    *borders; | ||||
|   gboolean             must_free_borders; | ||||
|   ActionType           action_type; | ||||
|   gboolean             is_user_action; | ||||
|  | ||||
| @@ -195,7 +193,6 @@ static gboolean constrain_partially_onscreen (MetaWindow         *window, | ||||
|  | ||||
| static void setup_constraint_info        (ConstraintInfo      *info, | ||||
|                                           MetaWindow          *window, | ||||
|                                           MetaFrameBorders    *orig_borders, | ||||
|                                           MetaMoveResizeFlags  flags, | ||||
|                                           int                  resize_gravity, | ||||
|                                           const MetaRectangle *orig, | ||||
| @@ -204,13 +201,12 @@ static void place_window_if_needed       (MetaWindow     *window, | ||||
|                                           ConstraintInfo *info); | ||||
| static void update_onscreen_requirements (MetaWindow     *window, | ||||
|                                           ConstraintInfo *info); | ||||
| static void extend_by_frame              (MetaRectangle           *rect, | ||||
|                                           const MetaFrameBorders  *borders); | ||||
| static void unextend_by_frame            (MetaRectangle           *rect, | ||||
|                                           const MetaFrameBorders  *borders); | ||||
| static inline void get_size_limits       (const MetaWindow        *window, | ||||
|                                           const MetaFrameBorders  *borders, | ||||
|                                           gboolean include_frame, | ||||
| static void extend_by_frame              (MetaWindow     *window, | ||||
|                                           MetaRectangle  *rect); | ||||
| static void unextend_by_frame            (MetaWindow     *window, | ||||
|                                           MetaRectangle  *rect); | ||||
| static inline void get_size_limits       (MetaWindow    *window, | ||||
|                                           gboolean       include_frame, | ||||
|                                           MetaRectangle *min_size, | ||||
|                                           MetaRectangle *max_size); | ||||
|  | ||||
| @@ -280,7 +276,6 @@ do_all_constraints (MetaWindow         *window, | ||||
|  | ||||
| void | ||||
| meta_window_constrain (MetaWindow          *window, | ||||
|                        MetaFrameBorders    *orig_borders, | ||||
|                        MetaMoveResizeFlags  flags, | ||||
|                        int                  resize_gravity, | ||||
|                        const MetaRectangle *orig, | ||||
| @@ -303,7 +298,6 @@ meta_window_constrain (MetaWindow          *window, | ||||
|  | ||||
|   setup_constraint_info (&info, | ||||
|                          window,  | ||||
|                          orig_borders, | ||||
|                          flags, | ||||
|                          resize_gravity, | ||||
|                          orig, | ||||
| @@ -333,19 +327,11 @@ meta_window_constrain (MetaWindow          *window, | ||||
|    * if this was a user move or user move-and-resize operation. | ||||
|    */ | ||||
|   update_onscreen_requirements (window, &info); | ||||
|  | ||||
|   /* Ew, what an ugly way to do things.  Destructors (in a real OOP language, | ||||
|    * not gobject-style--gobject would be more pain than it's worth) or | ||||
|    * smart pointers would be so much nicer here.  *shrug* | ||||
|    */ | ||||
|   if (info.must_free_borders) | ||||
|     g_free (info.borders); | ||||
| } | ||||
|  | ||||
| static void | ||||
| setup_constraint_info (ConstraintInfo      *info, | ||||
|                        MetaWindow          *window, | ||||
|                        MetaFrameBorders    *orig_borders, | ||||
|                        MetaMoveResizeFlags  flags, | ||||
|                        int                  resize_gravity, | ||||
|                        const MetaRectangle *orig, | ||||
| @@ -357,18 +343,6 @@ setup_constraint_info (ConstraintInfo      *info, | ||||
|   info->orig    = *orig; | ||||
|   info->current = *new; | ||||
|  | ||||
|   /* Create a fake frame geometry if none really exists */ | ||||
|   if (orig_borders && !window->fullscreen) | ||||
|     { | ||||
|       info->borders = orig_borders; | ||||
|       info->must_free_borders = FALSE; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       info->borders = g_new0 (MetaFrameBorders, 1); | ||||
|       info->must_free_borders = TRUE; | ||||
|     } | ||||
|  | ||||
|   if (flags & META_IS_MOVE_ACTION && flags & META_IS_RESIZE_ACTION) | ||||
|     info->action_type = ACTION_MOVE_AND_RESIZE; | ||||
|   else if (flags & META_IS_RESIZE_ACTION) | ||||
| @@ -447,12 +421,14 @@ setup_constraint_info (ConstraintInfo      *info, | ||||
|  | ||||
|   /* Workaround braindead legacy apps that don't know how to | ||||
|    * fullscreen themselves properly - don't get fooled by | ||||
|    * windows which hide their titlebar when maximized; that's | ||||
|    * not the same as fullscreen, even if there are no struts | ||||
|    * making the workarea smaller than the monitor. | ||||
|    * windows which hide their titlebar when maximized or which are | ||||
|    * client decorated; that's not the same as fullscreen, even | ||||
|    * if there are no struts making the workarea smaller than | ||||
|    * the monitor. | ||||
|    */ | ||||
|   if (meta_prefs_get_force_fullscreen() && | ||||
|       !window->hide_titlebar_when_maximized && | ||||
|       window->decorated && | ||||
|       meta_rectangle_equal (new, &monitor_info->rect) && | ||||
|       window->has_fullscreen_func && | ||||
|       !window->fullscreen) | ||||
| @@ -517,11 +493,12 @@ place_window_if_needed(MetaWindow     *window, | ||||
|       !window->minimized && | ||||
|       !window->fullscreen) | ||||
|     { | ||||
|       MetaRectangle placed_rect = info->orig; | ||||
|       MetaRectangle placed_rect; | ||||
|       MetaWorkspace *cur_workspace; | ||||
|       const MetaMonitorInfo *monitor_info; | ||||
|  | ||||
|       meta_window_place (window, info->borders, info->orig.x, info->orig.y, | ||||
|       meta_window_get_frame_rect (window, &placed_rect); | ||||
|       meta_window_place (window, info->orig.x, info->orig.y, | ||||
|                          &placed_rect.x, &placed_rect.y); | ||||
|       did_placement = TRUE; | ||||
|  | ||||
| @@ -539,6 +516,7 @@ place_window_if_needed(MetaWindow     *window, | ||||
|         meta_workspace_get_onmonitor_region (cur_workspace,  | ||||
|                                              monitor_info->number); | ||||
|  | ||||
|       meta_window_frame_rect_to_client_rect (window, &placed_rect, &placed_rect); | ||||
|  | ||||
|       info->current.x = placed_rect.x; | ||||
|       info->current.y = placed_rect.y; | ||||
| @@ -584,10 +562,6 @@ place_window_if_needed(MetaWindow     *window, | ||||
|                 (window->maximize_vertically_after_placement ? | ||||
|                  META_MAXIMIZE_VERTICAL : 0), &info->current); | ||||
|  | ||||
|           /* maximization may have changed frame geometry */ | ||||
|           if (!window->fullscreen) | ||||
|             meta_frame_calc_borders (window->frame, info->borders); | ||||
|  | ||||
|           if (window->fullscreen_after_placement) | ||||
|             { | ||||
|               window->saved_rect = info->current; | ||||
| @@ -647,7 +621,7 @@ update_onscreen_requirements (MetaWindow     *window, | ||||
|   /* The require onscreen/on-single-monitor and titlebar_visible | ||||
|    * stuff is relative to the outer window, not the inner | ||||
|    */ | ||||
|   extend_by_frame (&info->current, info->borders); | ||||
|   extend_by_frame (window, &info->current); | ||||
|  | ||||
|   /* Update whether we want future constraint runs to require the | ||||
|    * window to be on fully onscreen. | ||||
| @@ -680,10 +654,13 @@ update_onscreen_requirements (MetaWindow     *window, | ||||
|    */ | ||||
|   if (window->frame && window->decorated) | ||||
|     { | ||||
|       MetaFrameBorders borders; | ||||
|       MetaRectangle titlebar_rect; | ||||
|  | ||||
|       meta_frame_calc_borders (window->frame, &borders); | ||||
|  | ||||
|       titlebar_rect = info->current; | ||||
|       titlebar_rect.height = info->borders->visible.top; | ||||
|       titlebar_rect.height = borders.visible.top; | ||||
|       old = window->require_titlebar_visible; | ||||
|       window->require_titlebar_visible = | ||||
|         meta_rectangle_overlaps_with_region (info->usable_screen_region, | ||||
| @@ -696,39 +673,33 @@ update_onscreen_requirements (MetaWindow     *window, | ||||
|     } | ||||
|  | ||||
|   /* Don't forget to restore the position of the window */ | ||||
|   unextend_by_frame (&info->current, info->borders); | ||||
|   unextend_by_frame (window, &info->current); | ||||
| } | ||||
|  | ||||
| static void | ||||
| extend_by_frame (MetaRectangle           *rect, | ||||
|                  const MetaFrameBorders *borders) | ||||
| extend_by_frame (MetaWindow    *window, | ||||
|                  MetaRectangle *rect) | ||||
| { | ||||
|   rect->x -= borders->visible.left; | ||||
|   rect->y -= borders->visible.top; | ||||
|   rect->width  += borders->visible.left + borders->visible.right; | ||||
|   rect->height += borders->visible.top + borders->visible.bottom; | ||||
|   meta_window_client_rect_to_frame_rect (window, rect, rect); | ||||
| } | ||||
|  | ||||
| static void | ||||
| unextend_by_frame (MetaRectangle           *rect, | ||||
|                    const MetaFrameBorders *borders) | ||||
| unextend_by_frame (MetaWindow    *window, | ||||
|                    MetaRectangle *rect) | ||||
| { | ||||
|   rect->x += borders->visible.left; | ||||
|   rect->y += borders->visible.top; | ||||
|   rect->width  -= borders->visible.left + borders->visible.right; | ||||
|   rect->height -= borders->visible.top + borders->visible.bottom; | ||||
|   meta_window_frame_rect_to_client_rect (window, rect, rect); | ||||
| } | ||||
|  | ||||
| static inline void | ||||
| get_size_limits (const MetaWindow        *window, | ||||
|                  const MetaFrameBorders *borders, | ||||
|                  gboolean                 include_frame, | ||||
| get_size_limits (MetaWindow    *window, | ||||
|                  gboolean       include_frame, | ||||
|                  MetaRectangle *min_size, | ||||
|                  MetaRectangle *max_size) | ||||
| { | ||||
|   /* We pack the results into MetaRectangle structs just for convienience; we | ||||
|    * don't actually use the position of those rects. | ||||
|    */ | ||||
|   min_size->x = min_size->y = max_size->x = max_size->y = 0; | ||||
|   min_size->width  = window->size_hints.min_width; | ||||
|   min_size->height = window->size_hints.min_height; | ||||
|   max_size->width  = window->size_hints.max_width; | ||||
| @@ -736,22 +707,8 @@ get_size_limits (const MetaWindow        *window, | ||||
|  | ||||
|   if (include_frame) | ||||
|     { | ||||
|       int fw = borders->visible.left + borders->visible.right; | ||||
|       int fh = borders->visible.top + borders->visible.bottom; | ||||
|  | ||||
|       min_size->width  += fw; | ||||
|       min_size->height += fh; | ||||
|       /* Do check to avoid overflow (e.g. max_size->width & max_size->height | ||||
|        * may be set to G_MAXINT by meta_set_normal_hints()). | ||||
|        */ | ||||
|       if (max_size->width < (G_MAXINT - fw)) | ||||
|         max_size->width += fw; | ||||
|       else | ||||
|         max_size->width = G_MAXINT; | ||||
|       if (max_size->height < (G_MAXINT - fh)) | ||||
|         max_size->height += fh; | ||||
|       else | ||||
|         max_size->height = G_MAXINT; | ||||
|       meta_window_client_rect_to_frame_rect (window, min_size, min_size); | ||||
|       meta_window_client_rect_to_frame_rect (window, max_size, max_size); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -763,18 +720,28 @@ constrain_modal_dialog (MetaWindow         *window, | ||||
| { | ||||
|   int x, y; | ||||
|   MetaWindow *parent = meta_window_get_transient_for (window); | ||||
|   MetaRectangle child_rect, parent_rect; | ||||
|   gboolean constraint_already_satisfied; | ||||
|  | ||||
|   if (!meta_window_is_attached_dialog (window)) | ||||
|     return TRUE; | ||||
|  | ||||
|   x = parent->rect.x + (parent->rect.width / 2  - info->current.width / 2); | ||||
|   y = parent->rect.y + (parent->rect.height / 2 - info->current.height / 2); | ||||
|   if (parent->frame) | ||||
|     { | ||||
|       x += parent->frame->rect.x; | ||||
|       y += parent->frame->rect.y; | ||||
|     } | ||||
|   /* We want to center the dialog on the parent, including the decorations | ||||
|      for both of them. info->current is in client X window coordinates, so we need | ||||
|      to convert them to frame coordinates, apply the centering and then | ||||
|      convert back to client. | ||||
|   */ | ||||
|  | ||||
|   child_rect = info->current; | ||||
|   extend_by_frame (window, &child_rect); | ||||
|  | ||||
|   meta_window_get_frame_rect (parent, &parent_rect); | ||||
|  | ||||
|   child_rect.x = parent_rect.x + (parent_rect.width / 2  - child_rect.width / 2); | ||||
|   child_rect.y = parent_rect.y + (parent_rect.height / 2 - child_rect.height / 2); | ||||
|   unextend_by_frame (window, &child_rect); | ||||
|   x = child_rect.x; | ||||
|   y = child_rect.y; | ||||
|  | ||||
|   constraint_already_satisfied = (x == info->current.x) && (y == info->current.y); | ||||
|  | ||||
| @@ -839,19 +806,19 @@ constrain_maximization (MetaWindow         *window, | ||||
|       active_workspace_struts = window->screen->active_workspace->all_struts; | ||||
|  | ||||
|       target_size = info->current; | ||||
|       extend_by_frame (&target_size, info->borders); | ||||
|       extend_by_frame (window, &target_size); | ||||
|       meta_rectangle_expand_to_avoiding_struts (&target_size, | ||||
|                                                 &info->entire_monitor, | ||||
|                                                 direction, | ||||
|                                                 active_workspace_struts); | ||||
|    } | ||||
|   /* Now make target_size = maximized size of client window */ | ||||
|   unextend_by_frame (&target_size, info->borders); | ||||
|   unextend_by_frame (window, &target_size); | ||||
|  | ||||
|   /* Check min size constraints; max size constraints are ignored for maximized | ||||
|    * windows, as per bug 327543. | ||||
|    */ | ||||
|   get_size_limits (window, info->borders, FALSE, &min_size, &max_size); | ||||
|   get_size_limits (window, FALSE, &min_size, &max_size); | ||||
|   hminbad = target_size.width < min_size.width && window->maximized_horizontally; | ||||
|   vminbad = target_size.height < min_size.height && window->maximized_vertically; | ||||
|   if (hminbad || vminbad) | ||||
| @@ -905,12 +872,12 @@ constrain_tiling (MetaWindow         *window, | ||||
|    * use an external function for the actual calculation | ||||
|    */ | ||||
|   meta_window_get_current_tile_area (window, &target_size); | ||||
|   unextend_by_frame (&target_size, info->borders); | ||||
|   unextend_by_frame (window, &target_size); | ||||
|  | ||||
|   /* Check min size constraints; max size constraints are ignored as for | ||||
|    * maximized windows. | ||||
|    */ | ||||
|   get_size_limits (window, info->borders, FALSE, &min_size, &max_size); | ||||
|   get_size_limits (window, FALSE, &min_size, &max_size); | ||||
|   hminbad = target_size.width < min_size.width; | ||||
|   vminbad = target_size.height < min_size.height; | ||||
|   if (hminbad || vminbad) | ||||
| @@ -953,7 +920,7 @@ constrain_fullscreen (MetaWindow         *window, | ||||
|  | ||||
|   monitor = info->entire_monitor; | ||||
|  | ||||
|   get_size_limits (window, info->borders, FALSE, &min_size, &max_size); | ||||
|   get_size_limits (window, FALSE, &min_size, &max_size); | ||||
|   too_big =   !meta_rectangle_could_fit_rect (&monitor, &min_size); | ||||
|   too_small = !meta_rectangle_could_fit_rect (&max_size, &monitor); | ||||
|   if (too_big || too_small) | ||||
| @@ -1062,7 +1029,7 @@ constrain_size_limits (MetaWindow         *window, | ||||
|     return TRUE; | ||||
|  | ||||
|   /* Determine whether constraint is already satisfied; exit if it is */ | ||||
|   get_size_limits (window, info->borders, FALSE, &min_size, &max_size); | ||||
|   get_size_limits (window, FALSE, &min_size, &max_size); | ||||
|   /* We ignore max-size limits for maximized windows; see #327543 */ | ||||
|   if (window->maximized_horizontally) | ||||
|     max_size.width = MAX (max_size.width, info->current.width); | ||||
| @@ -1254,8 +1221,8 @@ do_screen_and_monitor_relative_constraints ( | ||||
|  | ||||
|   /* Determine whether constraint applies; exit if it doesn't */ | ||||
|   how_far_it_can_be_smushed = info->current; | ||||
|   get_size_limits (window, info->borders, TRUE, &min_size, &max_size); | ||||
|   extend_by_frame (&info->current, info->borders); | ||||
|   get_size_limits (window, TRUE, &min_size, &max_size); | ||||
|   extend_by_frame (window, &info->current); | ||||
|  | ||||
|   if (info->action_type != ACTION_MOVE) | ||||
|     { | ||||
| @@ -1275,7 +1242,7 @@ do_screen_and_monitor_relative_constraints ( | ||||
|                                         &info->current); | ||||
|   if (exit_early || constraint_satisfied || check_only) | ||||
|     { | ||||
|       unextend_by_frame (&info->current, info->borders); | ||||
|       unextend_by_frame (window, &info->current); | ||||
|       return constraint_satisfied; | ||||
|     } | ||||
|  | ||||
| @@ -1299,7 +1266,7 @@ do_screen_and_monitor_relative_constraints ( | ||||
|                                       info->fixed_directions, | ||||
|                                       &info->current); | ||||
|  | ||||
|   unextend_by_frame (&info->current, info->borders); | ||||
|   unextend_by_frame (window, &info->current); | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| @@ -1412,8 +1379,11 @@ constrain_titlebar_visible (MetaWindow         *window, | ||||
|    */ | ||||
|   if (window->frame) | ||||
|     { | ||||
|       bottom_amount = info->current.height + info->borders->visible.bottom; | ||||
|       vert_amount_onscreen = info->borders->visible.top; | ||||
|       MetaFrameBorders borders; | ||||
|       meta_frame_calc_borders (window->frame, &borders); | ||||
|  | ||||
|       bottom_amount = info->current.height + borders.visible.bottom; | ||||
|       vert_amount_onscreen = borders.visible.top; | ||||
|     } | ||||
|   else | ||||
|     bottom_amount = vert_amount_offscreen; | ||||
| @@ -1487,8 +1457,11 @@ constrain_partially_onscreen (MetaWindow         *window, | ||||
|    */ | ||||
|   if (window->frame) | ||||
|     { | ||||
|       bottom_amount = info->current.height + info->borders->visible.bottom; | ||||
|       vert_amount_onscreen = info->borders->visible.top; | ||||
|       MetaFrameBorders borders; | ||||
|       meta_frame_calc_borders (window->frame, &borders); | ||||
|  | ||||
|       bottom_amount = info->current.height + borders.visible.bottom; | ||||
|       vert_amount_onscreen = borders.visible.top; | ||||
|     } | ||||
|   else | ||||
|     bottom_amount = vert_amount_offscreen; | ||||
|   | ||||
| @@ -39,7 +39,6 @@ typedef enum | ||||
| } MetaMoveResizeFlags; | ||||
|  | ||||
| void meta_window_constrain (MetaWindow          *window, | ||||
|                             MetaFrameBorders    *orig_borders, | ||||
|                             MetaMoveResizeFlags  flags, | ||||
|                             int                  resize_gravity, | ||||
|                             const MetaRectangle *orig, | ||||
|   | ||||
| @@ -89,7 +89,7 @@ meta_core_get (Display *xdisplay, | ||||
|   if (request != META_CORE_WINDOW_HAS_FRAME && | ||||
|       (window == NULL || window->frame == NULL)) { | ||||
|     meta_bug ("No such frame window 0x%lx!\n", xwindow); | ||||
|     return; | ||||
|     goto out; | ||||
|   } | ||||
|  | ||||
|   while (request != META_CORE_GET_END) { | ||||
| @@ -99,7 +99,7 @@ meta_core_get (Display *xdisplay, | ||||
|     switch (request) { | ||||
|       case META_CORE_WINDOW_HAS_FRAME: | ||||
|         *((gboolean*)answer) = window != NULL && window->frame != NULL; | ||||
|         if (!*((gboolean*)answer)) return; /* see above */ | ||||
|         if (!*((gboolean*)answer)) goto out; /* see above */ | ||||
|         break;  | ||||
|       case META_CORE_GET_CLIENT_WIDTH: | ||||
|         *((gint*)answer) = window->rect.width; | ||||
| @@ -160,6 +160,7 @@ meta_core_get (Display *xdisplay, | ||||
|     request = va_arg (args, MetaCoreGetType); | ||||
|   }  | ||||
|  | ||||
|  out: | ||||
|   va_end (args); | ||||
| } | ||||
|  | ||||
| @@ -170,6 +171,7 @@ meta_core_queue_frame_resize (Display *xdisplay, | ||||
|   MetaWindow *window = get_window (xdisplay, frame_xwindow); | ||||
|  | ||||
|   meta_window_queue (window, META_QUEUE_MOVE_RESIZE); | ||||
|   meta_window_frame_size_changed (window); | ||||
| } | ||||
|  | ||||
| void | ||||
| @@ -278,8 +280,7 @@ meta_core_lower_beneath_grab_window (Display *xdisplay, | ||||
|     return; | ||||
|  | ||||
|   changes.stack_mode = Below; | ||||
|   changes.sibling = grab_window->frame ? grab_window->frame->xwindow | ||||
|                                        : grab_window->xwindow; | ||||
|   changes.sibling = meta_window_get_toplevel_xwindow (grab_window); | ||||
|  | ||||
|   meta_stack_tracker_record_lower_below (screen->stack_tracker, | ||||
|                                          xwindow, | ||||
| @@ -468,26 +469,6 @@ meta_core_change_workspace (Display *xdisplay, | ||||
|                                                                     new_workspace)); | ||||
| } | ||||
|  | ||||
| int | ||||
| meta_core_get_num_workspaces (Screen  *xscreen) | ||||
| { | ||||
|   MetaScreen *screen; | ||||
|  | ||||
|   screen = meta_screen_for_x_screen (xscreen); | ||||
|  | ||||
|   return meta_screen_get_n_workspaces (screen); | ||||
| } | ||||
|  | ||||
| int | ||||
| meta_core_get_active_workspace (Screen *xscreen) | ||||
| { | ||||
|   MetaScreen *screen; | ||||
|  | ||||
|   screen = meta_screen_for_x_screen (xscreen); | ||||
|  | ||||
|   return meta_workspace_index (screen->active_workspace); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_core_show_window_menu (Display *xdisplay, | ||||
|                             Window   frame_xwindow, | ||||
|   | ||||
| @@ -153,8 +153,6 @@ void meta_core_change_workspace (Display *xdisplay, | ||||
|                                  Window   frame_xwindow, | ||||
|                                  int      new_workspace); | ||||
|  | ||||
| int meta_core_get_num_workspaces (Screen  *xscreen); | ||||
| int meta_core_get_active_workspace (Screen *xscreen); | ||||
| int meta_core_get_frame_workspace (Display *xdisplay, | ||||
|                                    Window frame_xwindow); | ||||
| const char* meta_core_get_workspace_name_with_index (Display *xdisplay, | ||||
|   | ||||
| @@ -103,19 +103,20 @@ struct _MetaDisplay | ||||
| #include <meta/atomnames.h> | ||||
| #undef item | ||||
|  | ||||
|   /* This is the actual window from focus events, | ||||
|    * not the one we last set | ||||
|   /* The window and serial of the most recent FocusIn event. */ | ||||
|   Window server_focus_window; | ||||
|   gulong server_focus_serial; | ||||
|  | ||||
|   /* Our best guess as to the "currently" focused window (that is, the | ||||
|    * window that we expect will be focused at the point when the X | ||||
|    * server processes our next request), and the serial of the request | ||||
|    * or event that caused this. | ||||
|    */ | ||||
|   MetaWindow *focus_window; | ||||
|  | ||||
|   /* window we are expecting a FocusIn event for or the current focus | ||||
|    * window if we are not expecting any FocusIn/FocusOut events; not | ||||
|    * perfect because applications can call XSetInputFocus directly. | ||||
|    * (It could also be messed up if a timestamp later than current | ||||
|    * time is sent to meta_display_set_input_focus_window, though that | ||||
|    * would be a programming error).  See bug 154598 for more info. | ||||
|    */ | ||||
|   MetaWindow *expected_focus_window; | ||||
|   /* For windows we've focused that don't necessarily have an X window, | ||||
|    * like the no_focus_window or the stage X window. */ | ||||
|   Window focus_xwindow; | ||||
|   gulong focus_serial; | ||||
|  | ||||
|   /* last timestamp passed to XSetInputFocus */ | ||||
|   guint32 last_focus_time; | ||||
| @@ -239,6 +240,8 @@ struct _MetaDisplay | ||||
|   unsigned int meta_mask; | ||||
|   MetaKeyCombo overlay_key_combo; | ||||
|   gboolean overlay_key_only_pressed; | ||||
|   MetaKeyCombo *iso_next_group_combos; | ||||
|   int n_iso_next_group_combos; | ||||
|    | ||||
|   /* Monitor cache */ | ||||
|   unsigned int monitor_cache_invalidated : 1; | ||||
| @@ -457,7 +460,9 @@ void meta_display_remove_autoraise_callback (MetaDisplay *display); | ||||
| void meta_display_overlay_key_activate (MetaDisplay *display); | ||||
| void meta_display_accelerator_activate (MetaDisplay *display, | ||||
|                                         guint        action, | ||||
|                                         guint        deviceid); | ||||
|                                         guint        deviceid, | ||||
|                                         guint        timestamp); | ||||
| gboolean meta_display_modifiers_accelerator_activate (MetaDisplay *display); | ||||
|  | ||||
| /* In above-tab-keycode.c */ | ||||
| guint meta_display_get_above_tab_keycode (MetaDisplay *display); | ||||
| @@ -467,4 +472,9 @@ gboolean meta_display_process_barrier_event (MetaDisplay    *display, | ||||
|                                              XIBarrierEvent *event); | ||||
| #endif /* HAVE_XI23 */ | ||||
|  | ||||
| void meta_display_set_input_focus_xwindow (MetaDisplay *display, | ||||
|                                            MetaScreen  *screen, | ||||
|                                            Window       window, | ||||
|                                            guint32      timestamp); | ||||
|  | ||||
| #endif | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -985,7 +985,7 @@ compute_resistance_and_snapping_edges (MetaDisplay *display) | ||||
|         { | ||||
|           MetaRectangle *new_rect; | ||||
|           new_rect = g_new (MetaRectangle, 1); | ||||
|           meta_window_get_outer_rect (cur_window, new_rect); | ||||
|           meta_window_get_frame_rect (cur_window, new_rect); | ||||
|           obscuring_windows = g_slist_prepend (obscuring_windows, new_rect); | ||||
|           window_stacking =  | ||||
|             g_slist_prepend (window_stacking, GINT_TO_POINTER (stack_position)); | ||||
| @@ -1010,7 +1010,7 @@ compute_resistance_and_snapping_edges (MetaDisplay *display) | ||||
|     { | ||||
|       MetaRectangle  cur_rect; | ||||
|       MetaWindow    *cur_window = cur_window_iter->data; | ||||
|       meta_window_get_outer_rect (cur_window, &cur_rect); | ||||
|       meta_window_get_frame_rect (cur_window, &cur_rect); | ||||
|  | ||||
|       /* Check if we want to use this window's edges for edge | ||||
|        * resistance (note that dock edges are considered screen edges | ||||
| @@ -1151,7 +1151,7 @@ meta_window_edge_resistance_for_move (MetaWindow  *window, | ||||
|   MetaRectangle old_outer, proposed_outer, new_outer; | ||||
|   gboolean is_resize; | ||||
|  | ||||
|   meta_window_get_outer_rect (window, &old_outer); | ||||
|   meta_window_get_frame_rect (window, &old_outer); | ||||
|  | ||||
|   proposed_outer = old_outer; | ||||
|   proposed_outer.x += (*new_x - old_x); | ||||
| @@ -1237,7 +1237,7 @@ meta_window_edge_resistance_for_resize (MetaWindow  *window, | ||||
|   int proposed_outer_width, proposed_outer_height; | ||||
|   gboolean is_resize; | ||||
|  | ||||
|   meta_window_get_outer_rect (window, &old_outer); | ||||
|   meta_window_get_frame_rect (window, &old_outer); | ||||
|   proposed_outer_width  = old_outer.width  + (*new_width  - old_width); | ||||
|   proposed_outer_height = old_outer.height + (*new_height - old_height); | ||||
|   meta_rectangle_resize_with_gravity (&old_outer,  | ||||
|   | ||||
							
								
								
									
										539
									
								
								src/core/edid-parse.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										539
									
								
								src/core/edid-parse.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,539 @@ | ||||
| /* | ||||
|  * Copyright 2007 Red Hat, Inc. | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * on the rights to use, copy, modify, merge, publish, distribute, sub | ||||
|  * license, and/or sell copies of the Software, and to permit persons to whom | ||||
|  * the Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice (including the next | ||||
|  * paragraph) shall be included in all copies or substantial portions of the | ||||
|  * Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL | ||||
|  * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | ||||
|  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
|  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| /* Author: Soren Sandmann <sandmann@redhat.com> */ | ||||
|  | ||||
| #include "edid.h" | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <math.h> | ||||
| #include <glib.h> | ||||
|  | ||||
| static int | ||||
| get_bit (int in, int bit) | ||||
| { | ||||
|   return (in & (1 << bit)) >> bit; | ||||
| } | ||||
|  | ||||
| static int | ||||
| get_bits (int in, int begin, int end) | ||||
| { | ||||
|   int mask = (1 << (end - begin + 1)) - 1; | ||||
|  | ||||
|   return (in >> begin) & mask; | ||||
| } | ||||
|  | ||||
| static int | ||||
| decode_header (const uchar *edid) | ||||
| { | ||||
|   if (memcmp (edid, "\x00\xff\xff\xff\xff\xff\xff\x00", 8) == 0) | ||||
|     return TRUE; | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static int | ||||
| decode_vendor_and_product_identification (const uchar *edid, MonitorInfo *info) | ||||
| { | ||||
|   int is_model_year; | ||||
|  | ||||
|   /* Manufacturer Code */ | ||||
|   info->manufacturer_code[0]  = get_bits (edid[0x08], 2, 6); | ||||
|   info->manufacturer_code[1]  = get_bits (edid[0x08], 0, 1) << 3; | ||||
|   info->manufacturer_code[1] |= get_bits (edid[0x09], 5, 7); | ||||
|   info->manufacturer_code[2]  = get_bits (edid[0x09], 0, 4); | ||||
|   info->manufacturer_code[3]  = '\0'; | ||||
|  | ||||
|   info->manufacturer_code[0] += 'A' - 1; | ||||
|   info->manufacturer_code[1] += 'A' - 1; | ||||
|   info->manufacturer_code[2] += 'A' - 1; | ||||
|  | ||||
|   /* Product Code */ | ||||
|   info->product_code = edid[0x0b] << 8 | edid[0x0a]; | ||||
|  | ||||
|   /* Serial Number */ | ||||
|   info->serial_number = | ||||
|     edid[0x0c] | edid[0x0d] << 8 | edid[0x0e] << 16 | edid[0x0f] << 24; | ||||
|  | ||||
|   /* Week and Year */ | ||||
|   is_model_year = FALSE; | ||||
|   switch (edid[0x10]) | ||||
|     { | ||||
|     case 0x00: | ||||
|       info->production_week = -1; | ||||
|       break; | ||||
|  | ||||
|     case 0xff: | ||||
|       info->production_week = -1; | ||||
|       is_model_year = TRUE; | ||||
|       break; | ||||
|  | ||||
|     default: | ||||
|       info->production_week = edid[0x10]; | ||||
|       break; | ||||
|     } | ||||
|  | ||||
|   if (is_model_year) | ||||
|     { | ||||
|       info->production_year = -1; | ||||
|       info->model_year = 1990 + edid[0x11]; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       info->production_year = 1990 + edid[0x11]; | ||||
|       info->model_year = -1; | ||||
|     } | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static int | ||||
| decode_edid_version (const uchar *edid, MonitorInfo *info) | ||||
| { | ||||
|   info->major_version = edid[0x12]; | ||||
|   info->minor_version = edid[0x13]; | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static int | ||||
| decode_display_parameters (const uchar *edid, MonitorInfo *info) | ||||
| { | ||||
|   /* Digital vs Analog */ | ||||
|   info->is_digital = get_bit (edid[0x14], 7); | ||||
|  | ||||
|   if (info->is_digital) | ||||
|     { | ||||
|       int bits; | ||||
|  | ||||
|       static const int bit_depth[8] = | ||||
|         { | ||||
|           -1, 6, 8, 10, 12, 14, 16, -1 | ||||
|         }; | ||||
|  | ||||
|       static const Interface interfaces[6] = | ||||
|         { | ||||
|           UNDEFINED, DVI, HDMI_A, HDMI_B, MDDI, DISPLAY_PORT | ||||
|         }; | ||||
|  | ||||
|       bits = get_bits (edid[0x14], 4, 6); | ||||
|       info->connector.digital.bits_per_primary = bit_depth[bits]; | ||||
|  | ||||
|       bits = get_bits (edid[0x14], 0, 3); | ||||
|  | ||||
|       if (bits <= 5) | ||||
|         info->connector.digital.interface = interfaces[bits]; | ||||
|       else | ||||
|         info->connector.digital.interface = UNDEFINED; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       int bits = get_bits (edid[0x14], 5, 6); | ||||
|  | ||||
|       static const double levels[][3] = | ||||
|         { | ||||
|           { 0.7,   0.3,    1.0 }, | ||||
|           { 0.714, 0.286,  1.0 }, | ||||
|           { 1.0,   0.4,    1.4 }, | ||||
|           { 0.7,   0.0,    0.7 }, | ||||
|         }; | ||||
|  | ||||
|       info->connector.analog.video_signal_level = levels[bits][0]; | ||||
|       info->connector.analog.sync_signal_level = levels[bits][1]; | ||||
|       info->connector.analog.total_signal_level = levels[bits][2]; | ||||
|  | ||||
|       info->connector.analog.blank_to_black = get_bit (edid[0x14], 4); | ||||
|  | ||||
|       info->connector.analog.separate_hv_sync = get_bit (edid[0x14], 3); | ||||
|       info->connector.analog.composite_sync_on_h = get_bit (edid[0x14], 2); | ||||
|       info->connector.analog.composite_sync_on_green = get_bit (edid[0x14], 1); | ||||
|  | ||||
|       info->connector.analog.serration_on_vsync = get_bit (edid[0x14], 0); | ||||
|     } | ||||
|  | ||||
|   /* Screen Size / Aspect Ratio */ | ||||
|   if (edid[0x15] == 0 && edid[0x16] == 0) | ||||
|     { | ||||
|       info->width_mm = -1; | ||||
|       info->height_mm = -1; | ||||
|       info->aspect_ratio = -1.0; | ||||
|     } | ||||
|   else if (edid[0x16] == 0) | ||||
|     { | ||||
|       info->width_mm = -1; | ||||
|       info->height_mm = -1;  | ||||
|       info->aspect_ratio = 100.0 / (edid[0x15] + 99); | ||||
|     } | ||||
|   else if (edid[0x15] == 0) | ||||
|     { | ||||
|       info->width_mm = -1; | ||||
|       info->height_mm = -1; | ||||
|       info->aspect_ratio = 100.0 / (edid[0x16] + 99); | ||||
|       info->aspect_ratio = 1/info->aspect_ratio; /* portrait */ | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       info->width_mm = 10 * edid[0x15]; | ||||
|       info->height_mm = 10 * edid[0x16]; | ||||
|     } | ||||
|  | ||||
|   /* Gamma */ | ||||
|   if (edid[0x17] == 0xFF) | ||||
|     info->gamma = -1.0; | ||||
|   else | ||||
|     info->gamma = (edid[0x17] + 100.0) / 100.0; | ||||
|  | ||||
|   /* Features */ | ||||
|   info->standby = get_bit (edid[0x18], 7); | ||||
|   info->suspend = get_bit (edid[0x18], 6); | ||||
|   info->active_off = get_bit (edid[0x18], 5); | ||||
|  | ||||
|   if (info->is_digital) | ||||
|     { | ||||
|       info->connector.digital.rgb444 = TRUE; | ||||
|       if (get_bit (edid[0x18], 3)) | ||||
|         info->connector.digital.ycrcb444 = 1; | ||||
|       if (get_bit (edid[0x18], 4)) | ||||
|         info->connector.digital.ycrcb422 = 1; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       int bits = get_bits (edid[0x18], 3, 4); | ||||
|       ColorType color_type[4] = | ||||
|         { | ||||
|           MONOCHROME, RGB, OTHER_COLOR, UNDEFINED_COLOR | ||||
|         }; | ||||
|  | ||||
|       info->connector.analog.color_type = color_type[bits]; | ||||
|     } | ||||
|  | ||||
|   info->srgb_is_standard = get_bit (edid[0x18], 2); | ||||
|  | ||||
|   /* In 1.3 this is called "has preferred timing" */ | ||||
|   info->preferred_timing_includes_native = get_bit (edid[0x18], 1); | ||||
|  | ||||
|   /* FIXME: In 1.3 this indicates whether the monitor accepts GTF */ | ||||
|   info->continuous_frequency = get_bit (edid[0x18], 0); | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static double | ||||
| decode_fraction (int high, int low) | ||||
| { | ||||
|   double result = 0.0; | ||||
|   int i; | ||||
|  | ||||
|   high = (high << 2) | low; | ||||
|  | ||||
|   for (i = 0; i < 10; ++i) | ||||
|     result += get_bit (high, i) * pow (2, i - 10); | ||||
|  | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| static int | ||||
| decode_color_characteristics (const uchar *edid, MonitorInfo *info) | ||||
| { | ||||
|   info->red_x = decode_fraction (edid[0x1b], get_bits (edid[0x19], 6, 7)); | ||||
|   info->red_y = decode_fraction (edid[0x1c], get_bits (edid[0x19], 5, 4)); | ||||
|   info->green_x = decode_fraction (edid[0x1d], get_bits (edid[0x19], 2, 3)); | ||||
|   info->green_y = decode_fraction (edid[0x1e], get_bits (edid[0x19], 0, 1)); | ||||
|   info->blue_x = decode_fraction (edid[0x1f], get_bits (edid[0x1a], 6, 7)); | ||||
|   info->blue_y = decode_fraction (edid[0x20], get_bits (edid[0x1a], 4, 5)); | ||||
|   info->white_x = decode_fraction (edid[0x21], get_bits (edid[0x1a], 2, 3)); | ||||
|   info->white_y = decode_fraction (edid[0x22], get_bits (edid[0x1a], 0, 1)); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static int | ||||
| decode_established_timings (const uchar *edid, MonitorInfo *info) | ||||
| { | ||||
|   static const Timing established[][8] =  | ||||
|     { | ||||
|       { | ||||
|         { 800, 600, 60 }, | ||||
|         { 800, 600, 56 }, | ||||
|         { 640, 480, 75 }, | ||||
|         { 640, 480, 72 }, | ||||
|         { 640, 480, 67 }, | ||||
|         { 640, 480, 60 }, | ||||
|         { 720, 400, 88 }, | ||||
|         { 720, 400, 70 } | ||||
|       }, | ||||
|       { | ||||
|         { 1280, 1024, 75 }, | ||||
|         { 1024, 768, 75 }, | ||||
|         { 1024, 768, 70 }, | ||||
|         { 1024, 768, 60 }, | ||||
|         { 1024, 768, 87 }, | ||||
|         { 832, 624, 75 }, | ||||
|         { 800, 600, 75 }, | ||||
|         { 800, 600, 72 } | ||||
| 	}, | ||||
|       { | ||||
|         { 0, 0, 0 }, | ||||
|         { 0, 0, 0 }, | ||||
|         { 0, 0, 0 }, | ||||
|         { 0, 0, 0 }, | ||||
|         { 0, 0, 0 }, | ||||
|         { 0, 0, 0 }, | ||||
|         { 0, 0, 0 }, | ||||
|         { 1152, 870, 75 } | ||||
|       }, | ||||
|     }; | ||||
|  | ||||
|   int i, j, idx; | ||||
|  | ||||
|   idx = 0; | ||||
|   for (i = 0; i < 3; ++i) | ||||
|     { | ||||
|       for (j = 0; j < 8; ++j) | ||||
| 	{ | ||||
|           int byte = edid[0x23 + i]; | ||||
|  | ||||
|           if (get_bit (byte, j) && established[i][j].frequency != 0) | ||||
|             info->established[idx++] = established[i][j]; | ||||
| 	} | ||||
|     } | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static int | ||||
| decode_standard_timings (const uchar *edid, MonitorInfo *info) | ||||
| { | ||||
|   int i; | ||||
|  | ||||
|   for (i = 0; i < 8; i++) | ||||
|     { | ||||
|       int first = edid[0x26 + 2 * i]; | ||||
|       int second = edid[0x27 + 2 * i]; | ||||
|  | ||||
|       if (first != 0x01 && second != 0x01) | ||||
| 	{ | ||||
|           int w = 8 * (first + 31); | ||||
|           int h = 0; | ||||
|  | ||||
|           switch (get_bits (second, 6, 7)) | ||||
|             { | ||||
| 	    case 0x00: h = (w / 16) * 10; break; | ||||
| 	    case 0x01: h = (w / 4) * 3; break; | ||||
| 	    case 0x02: h = (w / 5) * 4; break; | ||||
| 	    case 0x03: h = (w / 16) * 9; break; | ||||
| 	    } | ||||
|  | ||||
|           info->standard[i].width = w; | ||||
|           info->standard[i].height = h; | ||||
|           info->standard[i].frequency = get_bits (second, 0, 5) + 60; | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| decode_lf_string (const uchar *s, int n_chars, char *result) | ||||
| { | ||||
|   int i; | ||||
|   for (i = 0; i < n_chars; ++i) | ||||
|     { | ||||
|       if (s[i] == 0x0a) | ||||
| 	{ | ||||
|           *result++ = '\0'; | ||||
|           break; | ||||
| 	} | ||||
|       else if (s[i] == 0x00) | ||||
| 	{ | ||||
|           /* Convert embedded 0's to spaces */ | ||||
|           *result++ = ' '; | ||||
| 	} | ||||
|       else | ||||
| 	{ | ||||
|           *result++ = s[i]; | ||||
| 	} | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| decode_display_descriptor (const uchar *desc, | ||||
| 			   MonitorInfo *info) | ||||
| { | ||||
|   switch (desc[0x03]) | ||||
|     { | ||||
|     case 0xFC: | ||||
|       decode_lf_string (desc + 5, 13, info->dsc_product_name); | ||||
|       break; | ||||
|     case 0xFF: | ||||
|       decode_lf_string (desc + 5, 13, info->dsc_serial_number); | ||||
|       break; | ||||
|     case 0xFE: | ||||
|       decode_lf_string (desc + 5, 13, info->dsc_string); | ||||
|       break; | ||||
|     case 0xFD: | ||||
|       /* Range Limits */ | ||||
|       break; | ||||
|     case 0xFB: | ||||
|       /* Color Point */ | ||||
|       break; | ||||
|     case 0xFA: | ||||
|       /* Timing Identifications */ | ||||
|       break; | ||||
|     case 0xF9: | ||||
|       /* Color Management */ | ||||
|       break; | ||||
|     case 0xF8: | ||||
|       /* Timing Codes */ | ||||
|       break; | ||||
|     case 0xF7: | ||||
|       /* Established Timings */ | ||||
|       break; | ||||
|     case 0x10: | ||||
|       break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| decode_detailed_timing (const uchar *timing, | ||||
| 			DetailedTiming *detailed) | ||||
| { | ||||
|   int bits; | ||||
|   StereoType stereo[] = | ||||
|     { | ||||
|       NO_STEREO, NO_STEREO, FIELD_RIGHT, FIELD_LEFT, | ||||
|       TWO_WAY_RIGHT_ON_EVEN, TWO_WAY_LEFT_ON_EVEN, | ||||
|       FOUR_WAY_INTERLEAVED, SIDE_BY_SIDE | ||||
|     }; | ||||
|  | ||||
|   detailed->pixel_clock = (timing[0x00] | timing[0x01] << 8) * 10000; | ||||
|   detailed->h_addr = timing[0x02] | ((timing[0x04] & 0xf0) << 4); | ||||
|   detailed->h_blank = timing[0x03] | ((timing[0x04] & 0x0f) << 8); | ||||
|   detailed->v_addr = timing[0x05] | ((timing[0x07] & 0xf0) << 4); | ||||
|   detailed->v_blank = timing[0x06] | ((timing[0x07] & 0x0f) << 8); | ||||
|   detailed->h_front_porch = timing[0x08] | get_bits (timing[0x0b], 6, 7) << 8; | ||||
|   detailed->h_sync = timing[0x09] | get_bits (timing[0x0b], 4, 5) << 8; | ||||
|   detailed->v_front_porch = | ||||
|     get_bits (timing[0x0a], 4, 7) | get_bits (timing[0x0b], 2, 3) << 4; | ||||
|   detailed->v_sync = | ||||
|     get_bits (timing[0x0a], 0, 3) | get_bits (timing[0x0b], 0, 1) << 4; | ||||
|   detailed->width_mm =  timing[0x0c] | get_bits (timing[0x0e], 4, 7) << 8; | ||||
|   detailed->height_mm = timing[0x0d] | get_bits (timing[0x0e], 0, 3) << 8; | ||||
|   detailed->right_border = timing[0x0f]; | ||||
|   detailed->top_border = timing[0x10]; | ||||
|  | ||||
|   detailed->interlaced = get_bit (timing[0x11], 7); | ||||
|  | ||||
|   /* Stereo */ | ||||
|   bits = get_bits (timing[0x11], 5, 6) << 1 | get_bit (timing[0x11], 0); | ||||
|   detailed->stereo = stereo[bits]; | ||||
|  | ||||
|   /* Sync */ | ||||
|   bits = timing[0x11]; | ||||
|  | ||||
|   detailed->digital_sync = get_bit (bits, 4); | ||||
|   if (detailed->digital_sync) | ||||
|     { | ||||
|       detailed->connector.digital.composite = !get_bit (bits, 3); | ||||
|  | ||||
|       if (detailed->connector.digital.composite) | ||||
| 	{ | ||||
|           detailed->connector.digital.serrations = get_bit (bits, 2); | ||||
|           detailed->connector.digital.negative_vsync = FALSE; | ||||
| 	} | ||||
|       else | ||||
| 	{ | ||||
|           detailed->connector.digital.serrations = FALSE; | ||||
|           detailed->connector.digital.negative_vsync = !get_bit (bits, 2); | ||||
| 	} | ||||
|  | ||||
|       detailed->connector.digital.negative_hsync = !get_bit (bits, 0); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       detailed->connector.analog.bipolar = get_bit (bits, 3); | ||||
|       detailed->connector.analog.serrations = get_bit (bits, 2); | ||||
|       detailed->connector.analog.sync_on_green = !get_bit (bits, 1); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static int | ||||
| decode_descriptors (const uchar *edid, MonitorInfo *info) | ||||
| { | ||||
|   int i; | ||||
|   int timing_idx; | ||||
|  | ||||
|   timing_idx = 0; | ||||
|  | ||||
|   for (i = 0; i < 4; ++i) | ||||
|     { | ||||
|       int index = 0x36 + i * 18; | ||||
|  | ||||
|       if (edid[index + 0] == 0x00 && edid[index + 1] == 0x00) | ||||
| 	{ | ||||
|           decode_display_descriptor (edid + index, info); | ||||
| 	} | ||||
|       else | ||||
| 	{ | ||||
|           decode_detailed_timing (edid + index, &(info->detailed_timings[timing_idx++])); | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|   info->n_detailed_timings = timing_idx; | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| decode_check_sum (const uchar *edid, | ||||
| 		  MonitorInfo *info) | ||||
| { | ||||
|   int i; | ||||
|   uchar check = 0; | ||||
|  | ||||
|   for (i = 0; i < 128; ++i) | ||||
|     check += edid[i]; | ||||
|  | ||||
|   info->checksum = check; | ||||
| } | ||||
|  | ||||
| MonitorInfo * | ||||
| decode_edid (const uchar *edid) | ||||
| { | ||||
|   MonitorInfo *info = g_new0 (MonitorInfo, 1); | ||||
|  | ||||
|   decode_check_sum (edid, info); | ||||
|  | ||||
|   if (decode_header (edid) | ||||
|       && decode_vendor_and_product_identification (edid, info) | ||||
|       && decode_edid_version (edid, info) | ||||
|       && decode_display_parameters (edid, info) | ||||
|       && decode_color_characteristics (edid, info) | ||||
|       && decode_established_timings (edid, info) | ||||
|       && decode_standard_timings (edid, info) | ||||
|       && decode_descriptors (edid, info)) | ||||
|     { | ||||
|       return info; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       g_free (info); | ||||
|       return NULL; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										195
									
								
								src/core/edid.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								src/core/edid.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,195 @@ | ||||
| /* edid.h | ||||
|  * | ||||
|  * Copyright 2007, 2008, Red Hat, Inc. | ||||
|  *  | ||||
|  * This file is part of the Gnome Library. | ||||
|  *  | ||||
|  * The Gnome Library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Library General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * The Gnome Library 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 | ||||
|  * Library General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU Library General Public | ||||
|  * License along with the Gnome Library; see the file COPYING.LIB.  If not, | ||||
|  * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||||
|  * Boston, MA 02110-1301, USA. | ||||
|  *  | ||||
|  * Author: Soren Sandmann <sandmann@redhat.com> | ||||
|  */ | ||||
|  | ||||
| #ifndef EDID_H | ||||
| #define EDID_H | ||||
|  | ||||
| typedef unsigned char uchar; | ||||
| typedef struct MonitorInfo MonitorInfo; | ||||
| typedef struct Timing Timing; | ||||
| typedef struct DetailedTiming DetailedTiming; | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|   UNDEFINED, | ||||
|   DVI, | ||||
|   HDMI_A, | ||||
|   HDMI_B, | ||||
|   MDDI, | ||||
|   DISPLAY_PORT | ||||
| } Interface; | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|   UNDEFINED_COLOR, | ||||
|   MONOCHROME, | ||||
|   RGB, | ||||
|   OTHER_COLOR | ||||
| } ColorType; | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|   NO_STEREO, | ||||
|   FIELD_RIGHT, | ||||
|   FIELD_LEFT, | ||||
|   TWO_WAY_RIGHT_ON_EVEN, | ||||
|   TWO_WAY_LEFT_ON_EVEN, | ||||
|   FOUR_WAY_INTERLEAVED, | ||||
|   SIDE_BY_SIDE | ||||
| } StereoType; | ||||
|  | ||||
| struct Timing | ||||
| { | ||||
|   int width; | ||||
|   int height; | ||||
|   int frequency; | ||||
| }; | ||||
|  | ||||
| struct DetailedTiming | ||||
| { | ||||
|   int		pixel_clock; | ||||
|   int		h_addr; | ||||
|   int		h_blank; | ||||
|   int		h_sync; | ||||
|   int		h_front_porch; | ||||
|   int		v_addr; | ||||
|   int		v_blank; | ||||
|   int		v_sync; | ||||
|   int		v_front_porch; | ||||
|   int		width_mm; | ||||
|   int		height_mm; | ||||
|   int		right_border; | ||||
|   int		top_border; | ||||
|   int		interlaced; | ||||
|   StereoType	stereo; | ||||
|  | ||||
|   int		digital_sync; | ||||
|   union | ||||
|   { | ||||
|     struct | ||||
|     { | ||||
|       int bipolar; | ||||
|       int serrations; | ||||
|       int sync_on_green; | ||||
|     } analog; | ||||
|  | ||||
|     struct | ||||
|     { | ||||
|       int composite; | ||||
|       int serrations; | ||||
|       int negative_vsync; | ||||
|       int negative_hsync; | ||||
|     } digital; | ||||
|   } connector; | ||||
| }; | ||||
|  | ||||
| struct MonitorInfo | ||||
| { | ||||
|   int		checksum; | ||||
|   char		manufacturer_code[4]; | ||||
|   int		product_code; | ||||
|   unsigned int	serial_number; | ||||
|  | ||||
|   int		production_week;	/* -1 if not specified */ | ||||
|   int		production_year;	/* -1 if not specified */ | ||||
|   int		model_year;		/* -1 if not specified */ | ||||
|  | ||||
|   int		major_version; | ||||
|   int		minor_version; | ||||
|  | ||||
|   int		is_digital; | ||||
|  | ||||
|   union | ||||
|   { | ||||
|     struct | ||||
|     { | ||||
|       int	bits_per_primary; | ||||
|       Interface	interface; | ||||
|       int	rgb444; | ||||
|       int	ycrcb444; | ||||
|       int	ycrcb422; | ||||
|     } digital; | ||||
|  | ||||
|     struct | ||||
|     { | ||||
|       double	video_signal_level; | ||||
|       double	sync_signal_level; | ||||
|       double	total_signal_level; | ||||
|  | ||||
|       int	blank_to_black; | ||||
|  | ||||
|       int	separate_hv_sync; | ||||
|       int	composite_sync_on_h; | ||||
|       int	composite_sync_on_green; | ||||
|       int	serration_on_vsync; | ||||
|       ColorType	color_type; | ||||
|     } analog; | ||||
|   } connector; | ||||
|  | ||||
|   int		width_mm;		/* -1 if not specified */ | ||||
|   int		height_mm;		/* -1 if not specified */ | ||||
|   double	aspect_ratio;		/* -1.0 if not specififed */ | ||||
|  | ||||
|   double	gamma;			/* -1.0 if not specified */ | ||||
|  | ||||
|   int		standby; | ||||
|   int		suspend; | ||||
|   int		active_off; | ||||
|  | ||||
|   int		srgb_is_standard; | ||||
|   int		preferred_timing_includes_native; | ||||
|   int		continuous_frequency; | ||||
|  | ||||
|   double	red_x; | ||||
|   double	red_y; | ||||
|   double	green_x; | ||||
|   double	green_y; | ||||
|   double	blue_x; | ||||
|   double	blue_y; | ||||
|   double	white_x; | ||||
|   double	white_y; | ||||
|  | ||||
|   Timing	established[24];	/* Terminated by 0x0x0 */ | ||||
|   Timing	standard[8]; | ||||
|  | ||||
|   int		n_detailed_timings; | ||||
|   DetailedTiming detailed_timings[4];	/* If monitor has a preferred | ||||
|                                          * mode, it is the first one | ||||
|                                          * (whether it has, is | ||||
|                                          * determined by the  | ||||
|                                          * preferred_timing_includes | ||||
|                                          * bit. | ||||
|                                          */ | ||||
|  | ||||
|   /* Optional product description */ | ||||
|   char		dsc_serial_number[14]; | ||||
|   char		dsc_product_name[14]; | ||||
|   char		dsc_string[14];		/* Unspecified ASCII data */ | ||||
| }; | ||||
|  | ||||
| MonitorInfo *decode_edid (const uchar *data); | ||||
| char *make_display_name (const MonitorInfo *info); | ||||
| char *make_display_size_string (int width_mm, int height_mm); | ||||
|  | ||||
| #endif | ||||
| @@ -68,6 +68,7 @@ meta_window_ensure_frame (MetaWindow *window) | ||||
|  | ||||
|   frame->mapped = FALSE; | ||||
|   frame->is_flashing = FALSE; | ||||
|   frame->borders_cached = FALSE; | ||||
|    | ||||
|   meta_verbose ("Framing window %s: visual %s default, depth %d default depth %d\n", | ||||
|                 window->desc, | ||||
| @@ -327,22 +328,23 @@ meta_frame_calc_borders (MetaFrame        *frame, | ||||
|   if (frame == NULL) | ||||
|     meta_frame_borders_clear (borders); | ||||
|   else | ||||
|     meta_ui_get_frame_borders (frame->window->screen->ui, | ||||
|                                frame->xwindow, | ||||
|                                borders); | ||||
|     { | ||||
|       if (!frame->borders_cached) | ||||
|         { | ||||
|           meta_ui_get_frame_borders (frame->window->screen->ui, | ||||
|                                      frame->xwindow, | ||||
|                                      &frame->cached_borders); | ||||
|           frame->borders_cached = TRUE; | ||||
|         } | ||||
|  | ||||
|       *borders = frame->cached_borders; | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_frame_get_corner_radiuses (MetaFrame *frame, | ||||
|                                 float     *top_left, | ||||
|                                 float     *top_right, | ||||
|                                 float     *bottom_left, | ||||
|                                 float     *bottom_right) | ||||
| meta_frame_clear_cached_borders (MetaFrame *frame) | ||||
| { | ||||
|   meta_ui_get_corner_radiuses (frame->window->screen->ui, | ||||
|                                frame->xwindow, | ||||
|                                top_left, top_right, | ||||
|                                bottom_left, bottom_right); | ||||
|   frame->borders_cached = FALSE; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| @@ -400,6 +402,14 @@ meta_frame_get_frame_bounds (MetaFrame *frame) | ||||
|                                    frame->rect.height); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_frame_get_mask (MetaFrame                    *frame, | ||||
|                      cairo_t                      *cr) | ||||
| { | ||||
|   meta_ui_get_frame_mask (frame->window->screen->ui, frame->xwindow, | ||||
|                           frame->rect.width, frame->rect.height, cr); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_frame_queue_draw (MetaFrame *frame) | ||||
| { | ||||
|   | ||||
| @@ -41,6 +41,8 @@ struct _MetaFrame | ||||
|    */ | ||||
|   MetaRectangle rect; | ||||
|  | ||||
|   MetaFrameBorders cached_borders; /* valid if borders_cached is set */ | ||||
|  | ||||
|   /* position of client, size of frame */ | ||||
|   int child_x; | ||||
|   int child_y; | ||||
| @@ -50,6 +52,7 @@ struct _MetaFrame | ||||
|   guint mapped : 1; | ||||
|   guint need_reapply_frame_shape : 1; | ||||
|   guint is_flashing : 1; /* used by the visual bell flash */ | ||||
|   guint borders_cached : 1; | ||||
| }; | ||||
|  | ||||
| void     meta_window_ensure_frame           (MetaWindow *window); | ||||
| @@ -63,19 +66,18 @@ Window         meta_frame_get_xwindow (MetaFrame *frame); | ||||
| void meta_frame_calc_borders      (MetaFrame        *frame, | ||||
|                                    MetaFrameBorders *borders); | ||||
|  | ||||
| void meta_frame_get_corner_radiuses (MetaFrame *frame, | ||||
|                                      float     *top_left, | ||||
|                                      float     *top_right, | ||||
|                                      float     *bottom_left, | ||||
|                                      float     *bottom_right); | ||||
|  | ||||
| gboolean meta_frame_sync_to_window (MetaFrame         *frame, | ||||
|                                     int                gravity, | ||||
|                                     gboolean           need_move, | ||||
|                                     gboolean           need_resize); | ||||
|  | ||||
| void meta_frame_clear_cached_borders (MetaFrame *frame); | ||||
|  | ||||
| cairo_region_t *meta_frame_get_frame_bounds (MetaFrame *frame); | ||||
|  | ||||
| void meta_frame_get_mask (MetaFrame *frame, | ||||
|                           cairo_t   *cr); | ||||
|  | ||||
| void meta_frame_set_screen_cursor (MetaFrame	*frame, | ||||
| 				   MetaCursor	cursor); | ||||
|  | ||||
|   | ||||
| @@ -69,7 +69,6 @@ void     meta_window_ungrab_all_keys        (MetaWindow  *window, | ||||
| gboolean meta_display_process_key_event     (MetaDisplay   *display, | ||||
|                                              MetaWindow    *window, | ||||
|                                              XIDeviceEvent *event); | ||||
| void     meta_set_keybindings_disabled      (gboolean     setting); | ||||
| void     meta_display_process_mapping_event (MetaDisplay *display, | ||||
|                                              XEvent      *event); | ||||
|  | ||||
|   | ||||
| @@ -56,8 +56,6 @@ | ||||
| #define SCHEMA_COMMON_KEYBINDINGS "org.gnome.desktop.wm.keybindings" | ||||
| #define SCHEMA_MUTTER_KEYBINDINGS "org.gnome.mutter.keybindings" | ||||
|  | ||||
| static gboolean all_bindings_disabled = FALSE; | ||||
|  | ||||
| static gboolean add_builtin_keybinding (MetaDisplay          *display, | ||||
|                                         const char           *name, | ||||
|                                         GSettings            *settings, | ||||
| @@ -302,6 +300,172 @@ reload_modmap (MetaDisplay *display) | ||||
|               display->meta_mask); | ||||
| } | ||||
|  | ||||
| /* Original code from gdk_x11_keymap_get_entries_for_keyval() in | ||||
|  * gdkkeys-x11.c */ | ||||
| static int | ||||
| get_keycodes_for_keysym (MetaDisplay  *display, | ||||
|                          int           keysym, | ||||
|                          int         **keycodes) | ||||
| { | ||||
|   GArray *retval; | ||||
|   int n_keycodes; | ||||
|   int keycode; | ||||
|  | ||||
|   retval = g_array_new (FALSE, FALSE, sizeof (int)); | ||||
|  | ||||
|   keycode = display->min_keycode; | ||||
|   while (keycode <= display->max_keycode) | ||||
|     { | ||||
|       const KeySym *syms = display->keymap + (keycode - display->min_keycode) * display->keysyms_per_keycode; | ||||
|       int i = 0; | ||||
|  | ||||
|       while (i < display->keysyms_per_keycode) | ||||
|         { | ||||
|           if (syms[i] == (unsigned int)keysym) | ||||
|             g_array_append_val (retval, keycode); | ||||
|  | ||||
|           ++i; | ||||
|         } | ||||
|  | ||||
|       ++keycode; | ||||
|     } | ||||
|  | ||||
|   n_keycodes = retval->len; | ||||
|   *keycodes = (int*) g_array_free (retval, n_keycodes == 0 ? TRUE : FALSE); | ||||
|  | ||||
|   return n_keycodes; | ||||
| } | ||||
|  | ||||
| static void | ||||
| reload_iso_next_group_combos (MetaDisplay *display) | ||||
| { | ||||
|   const char *iso_next_group_option; | ||||
|   MetaKeyCombo *combos; | ||||
|   int *keycodes; | ||||
|   int n_keycodes; | ||||
|   int n_combos; | ||||
|   int i; | ||||
|  | ||||
|   g_clear_pointer (&display->iso_next_group_combos, g_free); | ||||
|   display->n_iso_next_group_combos = 0; | ||||
|  | ||||
|   iso_next_group_option = meta_prefs_get_iso_next_group_option (); | ||||
|   if (iso_next_group_option == NULL) | ||||
|     return; | ||||
|  | ||||
|   n_keycodes = get_keycodes_for_keysym (display, XK_ISO_Next_Group, &keycodes); | ||||
|  | ||||
|   if (g_str_equal (iso_next_group_option, "toggle") || | ||||
|       g_str_equal (iso_next_group_option, "lalt_toggle") || | ||||
|       g_str_equal (iso_next_group_option, "lwin_toggle") || | ||||
|       g_str_equal (iso_next_group_option, "rwin_toggle") || | ||||
|       g_str_equal (iso_next_group_option, "lshift_toggle") || | ||||
|       g_str_equal (iso_next_group_option, "rshift_toggle") || | ||||
|       g_str_equal (iso_next_group_option, "lctrl_toggle") || | ||||
|       g_str_equal (iso_next_group_option, "rctrl_toggle") || | ||||
|       g_str_equal (iso_next_group_option, "sclk_toggle") || | ||||
|       g_str_equal (iso_next_group_option, "menu_toggle") || | ||||
|       g_str_equal (iso_next_group_option, "caps_toggle")) | ||||
|     { | ||||
|       n_combos = n_keycodes; | ||||
|       combos = g_new (MetaKeyCombo, n_combos); | ||||
|  | ||||
|       for (i = 0; i < n_keycodes; ++i) | ||||
|         { | ||||
|           combos[i].keysym = XK_ISO_Next_Group; | ||||
|           combos[i].keycode = keycodes[i]; | ||||
|           combos[i].modifiers = 0; | ||||
|         } | ||||
|     } | ||||
|   else if (g_str_equal (iso_next_group_option, "shift_caps_toggle") || | ||||
|            g_str_equal (iso_next_group_option, "shifts_toggle")) | ||||
|     { | ||||
|       n_combos = n_keycodes; | ||||
|       combos = g_new (MetaKeyCombo, n_combos); | ||||
|  | ||||
|       for (i = 0; i < n_keycodes; ++i) | ||||
|         { | ||||
|           combos[i].keysym = XK_ISO_Next_Group; | ||||
|           combos[i].keycode = keycodes[i]; | ||||
|           combos[i].modifiers = ShiftMask; | ||||
|         } | ||||
|     } | ||||
|   else if (g_str_equal (iso_next_group_option, "alt_caps_toggle") || | ||||
|            g_str_equal (iso_next_group_option, "alt_space_toggle")) | ||||
|     { | ||||
|       n_combos = n_keycodes; | ||||
|       combos = g_new (MetaKeyCombo, n_combos); | ||||
|  | ||||
|       for (i = 0; i < n_keycodes; ++i) | ||||
|         { | ||||
|           combos[i].keysym = XK_ISO_Next_Group; | ||||
|           combos[i].keycode = keycodes[i]; | ||||
|           combos[i].modifiers = Mod1Mask; | ||||
|         } | ||||
|     } | ||||
|   else if (g_str_equal (iso_next_group_option, "ctrl_shift_toggle") || | ||||
|            g_str_equal (iso_next_group_option, "lctrl_lshift_toggle") || | ||||
|            g_str_equal (iso_next_group_option, "rctrl_rshift_toggle")) | ||||
|     { | ||||
|       n_combos = n_keycodes * 2; | ||||
|       combos = g_new (MetaKeyCombo, n_combos); | ||||
|  | ||||
|       for (i = 0; i < n_keycodes; ++i) | ||||
|         { | ||||
|           combos[i].keysym = XK_ISO_Next_Group; | ||||
|           combos[i].keycode = keycodes[i]; | ||||
|           combos[i].modifiers = ShiftMask; | ||||
|  | ||||
|           combos[i + n_keycodes].keysym = XK_ISO_Next_Group; | ||||
|           combos[i + n_keycodes].keycode = keycodes[i]; | ||||
|           combos[i + n_keycodes].modifiers = ControlMask; | ||||
|         } | ||||
|     } | ||||
|   else if (g_str_equal (iso_next_group_option, "ctrl_alt_toggle")) | ||||
|     { | ||||
|       n_combos = n_keycodes * 2; | ||||
|       combos = g_new (MetaKeyCombo, n_combos); | ||||
|  | ||||
|       for (i = 0; i < n_keycodes; ++i) | ||||
|         { | ||||
|           combos[i].keysym = XK_ISO_Next_Group; | ||||
|           combos[i].keycode = keycodes[i]; | ||||
|           combos[i].modifiers = Mod1Mask; | ||||
|  | ||||
|           combos[i + n_keycodes].keysym = XK_ISO_Next_Group; | ||||
|           combos[i + n_keycodes].keycode = keycodes[i]; | ||||
|           combos[i + n_keycodes].modifiers = ControlMask; | ||||
|         } | ||||
|     } | ||||
|   else if (g_str_equal (iso_next_group_option, "alt_shift_toggle") || | ||||
|            g_str_equal (iso_next_group_option, "lalt_lshift_toggle")) | ||||
|     { | ||||
|       n_combos = n_keycodes * 2; | ||||
|       combos = g_new (MetaKeyCombo, n_combos); | ||||
|  | ||||
|       for (i = 0; i < n_keycodes; ++i) | ||||
|         { | ||||
|           combos[i].keysym = XK_ISO_Next_Group; | ||||
|           combos[i].keycode = keycodes[i]; | ||||
|           combos[i].modifiers = Mod1Mask; | ||||
|  | ||||
|           combos[i + n_keycodes].keysym = XK_ISO_Next_Group; | ||||
|           combos[i + n_keycodes].keycode = keycodes[i]; | ||||
|           combos[i + n_keycodes].modifiers = ShiftMask; | ||||
|         } | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       n_combos = 0; | ||||
|       combos = NULL; | ||||
|     } | ||||
|  | ||||
|   g_free (keycodes); | ||||
|  | ||||
|   display->n_iso_next_group_combos = n_combos; | ||||
|   display->iso_next_group_combos = combos; | ||||
| } | ||||
|  | ||||
| static guint | ||||
| keysym_to_keycode (MetaDisplay *display, | ||||
|                    guint        keysym) | ||||
| @@ -328,6 +492,8 @@ reload_keycodes (MetaDisplay *display) | ||||
|       display->overlay_key_combo.keycode = 0; | ||||
|     } | ||||
|  | ||||
|   reload_iso_next_group_combos (display); | ||||
|  | ||||
|   if (display->key_bindings) | ||||
|     { | ||||
|       int i; | ||||
| @@ -1026,6 +1192,22 @@ meta_screen_change_keygrabs (MetaScreen *screen, | ||||
|                          display->overlay_key_combo.keycode, | ||||
|                          display->overlay_key_combo.modifiers); | ||||
|  | ||||
|   if (display->iso_next_group_combos) | ||||
|     { | ||||
|       int i = 0; | ||||
|       while (i < display->n_iso_next_group_combos) | ||||
|         { | ||||
|           if (display->iso_next_group_combos[i].keycode != 0) | ||||
|             { | ||||
|               meta_change_keygrab (display, screen->xroot, grab, | ||||
|                                    display->iso_next_group_combos[i].keysym, | ||||
|                                    display->iso_next_group_combos[i].keycode, | ||||
|                                    display->iso_next_group_combos[i].modifiers); | ||||
|             } | ||||
|           ++i; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   change_binding_keygrabs (screen->display->key_bindings, | ||||
|                            screen->display->n_key_bindings, | ||||
|                            screen->display, screen->xroot, | ||||
| @@ -1095,7 +1277,7 @@ meta_window_grab_keys (MetaWindow  *window) | ||||
|     } | ||||
|  | ||||
|   meta_window_change_keygrabs (window, | ||||
|                                window->frame ? window->frame->xwindow : window->xwindow, | ||||
|                                meta_window_get_toplevel_xwindow (window), | ||||
|                                TRUE); | ||||
|  | ||||
|   window->keys_grabbed = TRUE; | ||||
| @@ -1128,7 +1310,7 @@ handle_external_grab (MetaDisplay    *display, | ||||
|   guint action = meta_display_get_keybinding_action (display, | ||||
|                                                      binding->keycode, | ||||
|                                                      binding->mask); | ||||
|   meta_display_accelerator_activate (display, action, event->deviceid); | ||||
|   meta_display_accelerator_activate (display, action, event->deviceid, event->time); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -1264,7 +1446,8 @@ grab_status_to_string (int status) | ||||
| static gboolean | ||||
| grab_keyboard (MetaDisplay *display, | ||||
|                Window       xwindow, | ||||
|                guint32      timestamp) | ||||
|                guint32      timestamp, | ||||
|                int          grab_mode) | ||||
| { | ||||
|   int result; | ||||
|   int grab_status; | ||||
| @@ -1280,13 +1463,22 @@ grab_keyboard (MetaDisplay *display, | ||||
|    */ | ||||
|   meta_error_trap_push_with_return (display); | ||||
|  | ||||
|   /* Strictly, we only need to set grab_mode on the keyboard device | ||||
|    * while the pointer should always be XIGrabModeAsync. Unfortunately | ||||
|    * there is a bug in the X server, only fixed (link below) in 1.15, | ||||
|    * which swaps these arguments for keyboard devices. As such, we set | ||||
|    * both the device and the paired device mode which works around | ||||
|    * that bug and also works on fixed X servers. | ||||
|    * | ||||
|    * http://cgit.freedesktop.org/xorg/xserver/commit/?id=9003399708936481083424b4ff8f18a16b88b7b3 | ||||
|    */ | ||||
|   grab_status = XIGrabDevice (display->xdisplay, | ||||
|                               META_VIRTUAL_CORE_KEYBOARD_ID, | ||||
|                               xwindow, | ||||
|                               timestamp, | ||||
|                               None, | ||||
|                               XIGrabModeAsync, XIGrabModeAsync, | ||||
|                               True, /* owner_events */ | ||||
|                               grab_mode, grab_mode, | ||||
|                               False, /* owner_events */ | ||||
|                               &mask); | ||||
|  | ||||
|   if (grab_status != Success) | ||||
| @@ -1339,7 +1531,7 @@ meta_screen_grab_all_keys (MetaScreen *screen, guint32 timestamp) | ||||
|  | ||||
|   meta_topic (META_DEBUG_KEYBINDINGS, | ||||
|               "Grabbing all keys on RootWindow\n"); | ||||
|   retval = grab_keyboard (screen->display, screen->xroot, timestamp); | ||||
|   retval = grab_keyboard (screen->display, screen->xroot, timestamp, XIGrabModeAsync); | ||||
|   if (retval) | ||||
|     { | ||||
|       screen->all_keys_grabbed = TRUE; | ||||
| @@ -1388,11 +1580,11 @@ meta_window_grab_all_keys (MetaWindow  *window, | ||||
|               window->desc); | ||||
|   meta_window_focus (window, timestamp); | ||||
|  | ||||
|   grabwindow = window->frame ? window->frame->xwindow : window->xwindow; | ||||
|   grabwindow = meta_window_get_toplevel_xwindow (window); | ||||
|  | ||||
|   meta_topic (META_DEBUG_KEYBINDINGS, | ||||
|               "Grabbing all keys on window %s\n", window->desc); | ||||
|   retval = grab_keyboard (window->display, grabwindow, timestamp); | ||||
|   retval = grab_keyboard (window->display, grabwindow, timestamp, XIGrabModeAsync); | ||||
|   if (retval) | ||||
|     { | ||||
|       window->keys_grabbed = FALSE; | ||||
| @@ -1419,6 +1611,32 @@ meta_window_ungrab_all_keys (MetaWindow *window, guint32 timestamp) | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_display_freeze_keyboard (MetaDisplay *display, Window window, guint32 timestamp) | ||||
| { | ||||
|   grab_keyboard (display, window, timestamp, XIGrabModeSync); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_display_ungrab_keyboard (MetaDisplay *display, guint32 timestamp) | ||||
| { | ||||
|   ungrab_keyboard (display, timestamp); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_display_unfreeze_keyboard (MetaDisplay *display, guint32 timestamp) | ||||
| { | ||||
|   meta_error_trap_push (display); | ||||
|   XIAllowEvents (display->xdisplay, META_VIRTUAL_CORE_KEYBOARD_ID, | ||||
|                  XIAsyncDevice, timestamp); | ||||
|   /* We shouldn't need to unfreeze the pointer device here, however we | ||||
|    * have to, due to the workaround we do in grab_keyboard(). | ||||
|    */ | ||||
|   XIAllowEvents (display->xdisplay, META_VIRTUAL_CORE_POINTER_ID, | ||||
|                  XIAsyncDevice, timestamp); | ||||
|   meta_error_trap_pop (display); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| is_modifier (MetaDisplay *display, | ||||
|              unsigned int keycode) | ||||
| @@ -1617,7 +1835,6 @@ invoke_handler_by_name (MetaDisplay    *display, | ||||
|     invoke_handler (display, screen, handler, window, event, NULL); | ||||
| } | ||||
|  | ||||
| /* now called from only one place, may be worth merging */ | ||||
| static gboolean | ||||
| process_event (MetaKeyBinding       *bindings, | ||||
|                int                   n_bindings, | ||||
| @@ -1625,7 +1842,6 @@ process_event (MetaKeyBinding       *bindings, | ||||
|                MetaScreen           *screen, | ||||
|                MetaWindow           *window, | ||||
|                XIDeviceEvent        *event, | ||||
|                KeySym                keysym, | ||||
|                gboolean              on_window) | ||||
| { | ||||
|   int i; | ||||
| @@ -1643,7 +1859,6 @@ process_event (MetaKeyBinding       *bindings, | ||||
|       MetaKeyHandler *handler = bindings[i].handler; | ||||
|  | ||||
|       if ((!on_window && handler->flags & META_KEY_BINDING_PER_WINDOW) || | ||||
|           event->evtype != XI_KeyPress || | ||||
|           bindings[i].keycode != event->detail || | ||||
|           ((event->mods.effective & 0xff & ~(display->ignored_modifier_mask)) != | ||||
|            bindings[i].mask) || | ||||
| @@ -1710,7 +1925,7 @@ process_overlay_key (MetaDisplay *display, | ||||
|            */ | ||||
|           if (process_event (display->key_bindings, | ||||
|                              display->n_key_bindings, | ||||
|                              display, screen, NULL, event, keysym, | ||||
|                              display, screen, NULL, event, | ||||
|                              FALSE)) | ||||
|             { | ||||
|               /* As normally, after we've handled a global key | ||||
| @@ -1747,6 +1962,23 @@ process_overlay_key (MetaDisplay *display, | ||||
|             return TRUE; | ||||
|           meta_display_overlay_key_activate (display); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           /* In some rare race condition, mutter might not receive the Super_L | ||||
|            * KeyRelease event because: | ||||
|            * - the compositor might end the modal mode and call XIUngrabDevice | ||||
|            *   while the key is still down | ||||
|            * - passive grabs are only activated on KeyPress and not KeyRelease. | ||||
|            * | ||||
|            * In this case, display->overlay_key_only_pressed might be wrong. | ||||
|            * Mutter still ought to acknowledge events, otherwise the X server | ||||
|            * will not send the next events. | ||||
|            * | ||||
|            * https://bugzilla.gnome.org/show_bug.cgi?id=666101 | ||||
|            */ | ||||
|           XIAllowEvents (display->xdisplay, event->deviceid, | ||||
|                          XIAsyncDevice, event->time); | ||||
|         } | ||||
|  | ||||
|       return TRUE; | ||||
|     } | ||||
| @@ -1765,6 +1997,41 @@ process_overlay_key (MetaDisplay *display, | ||||
|     return FALSE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| process_iso_next_group (MetaDisplay *display, | ||||
|                         MetaScreen *screen, | ||||
|                         XIDeviceEvent *event, | ||||
|                         KeySym keysym) | ||||
| { | ||||
|   gboolean activate; | ||||
|   unsigned int mods; | ||||
|   int i; | ||||
|  | ||||
|   if (event->evtype != XI_KeyPress) | ||||
|     return FALSE; | ||||
|  | ||||
|   activate = FALSE; | ||||
|   mods = (event->mods.effective & 0xff & ~(display->ignored_modifier_mask)); | ||||
|  | ||||
|   for (i = 0; i < display->n_iso_next_group_combos; ++i) | ||||
|     { | ||||
|       if (event->detail == (int)display->iso_next_group_combos[i].keycode && | ||||
|           mods == display->iso_next_group_combos[i].modifiers) | ||||
|         { | ||||
|           /* If the signal handler returns TRUE the keyboard will | ||||
|              remain frozen. It's the signal handler's responsibility | ||||
|              to unfreeze it. */ | ||||
|           if (!meta_display_modifiers_accelerator_activate (display)) | ||||
|             XIAllowEvents (display->xdisplay, event->deviceid, | ||||
|                            XIAsyncDevice, event->time); | ||||
|           activate = TRUE; | ||||
|           break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   return activate; | ||||
| } | ||||
|  | ||||
| /* Handle a key event. May be called recursively: some key events cause | ||||
|  * grabs to be ended and then need to be processed again in their own | ||||
|  * right. This cannot cause infinite recursion because we never call | ||||
| @@ -1791,21 +2058,6 @@ meta_display_process_key_event (MetaDisplay   *display, | ||||
|   const char *str; | ||||
|   MetaScreen *screen; | ||||
|  | ||||
|   if (all_bindings_disabled) | ||||
|     { | ||||
|       /* In this mode, we try to pretend we don't have grabs, so we | ||||
|        * immediately replay events and drop the grab. (This still | ||||
|        * messes up global passive grabs from other clients.) The | ||||
|        * FALSE return here is a little suspect, but we don't really | ||||
|        * know if we'll see the event again or not, and it's pretty | ||||
|        * poorly defined how this mode is supposed to interact with | ||||
|        * plugins. | ||||
|        */ | ||||
|       XIAllowEvents (display->xdisplay, event->deviceid, | ||||
|                      XIReplayDevice, event->time); | ||||
|       return FALSE; | ||||
|     } | ||||
|  | ||||
|   /* if key event was on root window, we have a shortcut */ | ||||
|   screen = meta_display_screen_for_root (display, event->event); | ||||
|  | ||||
| @@ -1839,6 +2091,10 @@ meta_display_process_key_event (MetaDisplay   *display, | ||||
|       handled = process_overlay_key (display, screen, event, keysym); | ||||
|       if (handled) | ||||
|         return TRUE; | ||||
|  | ||||
|       handled = process_iso_next_group (display, screen, event, keysym); | ||||
|       if (handled) | ||||
|         return TRUE; | ||||
|     } | ||||
|  | ||||
|   XIAllowEvents (display->xdisplay, event->deviceid, | ||||
| @@ -1933,7 +2189,7 @@ meta_display_process_key_event (MetaDisplay   *display, | ||||
|   /* Do the normal keybindings */ | ||||
|   return process_event (display->key_bindings, | ||||
|                         display->n_key_bindings, | ||||
|                         display, screen, window, event, keysym, | ||||
|                         display, screen, window, event, | ||||
|                         !all_keys_grabbed && window); | ||||
| } | ||||
|  | ||||
| @@ -2881,6 +3137,20 @@ handle_maximize_horizontally (MetaDisplay    *display, | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| handle_always_on_top          (MetaDisplay    *display, | ||||
|                               MetaScreen     *screen, | ||||
|                               MetaWindow     *window, | ||||
|                               XIDeviceEvent  *event, | ||||
|                               MetaKeyBinding *binding, | ||||
|                               gpointer        dummy) | ||||
| { | ||||
|   if (window->wm_state_above == FALSE) | ||||
|     meta_window_make_above (window); | ||||
|   else | ||||
|     meta_window_unmake_above (window); | ||||
| } | ||||
|  | ||||
| /* Move a window to a corner; to_bottom/to_right are FALSE for the | ||||
|  * top or left edge, or TRUE for the bottom/right edge.  xchange/ychange | ||||
|  * are FALSE if that dimension is not to be changed, TRUE otherwise. | ||||
| @@ -2898,17 +3168,17 @@ handle_move_to_corner_backend (MetaDisplay    *display, | ||||
|                                gpointer        dummy) | ||||
| { | ||||
|   MetaRectangle work_area; | ||||
|   MetaRectangle outer; | ||||
|   MetaRectangle frame_rect; | ||||
|   int orig_x, orig_y; | ||||
|   int new_x, new_y; | ||||
|  | ||||
|   meta_window_get_work_area_all_monitors (window, &work_area); | ||||
|   meta_window_get_outer_rect (window, &outer); | ||||
|   meta_window_get_frame_rect (window, &frame_rect); | ||||
|   meta_window_get_position (window, &orig_x, &orig_y); | ||||
|  | ||||
|   if (xchange) { | ||||
|     new_x = work_area.x + (to_right ? | ||||
|                            work_area.width - outer.width : | ||||
|                            work_area.width - frame_rect.width : | ||||
|                            0); | ||||
|   } else { | ||||
|     new_x = orig_x; | ||||
| @@ -2916,7 +3186,7 @@ handle_move_to_corner_backend (MetaDisplay    *display, | ||||
|  | ||||
|   if (ychange) { | ||||
|     new_y = work_area.y + (to_bottom ? | ||||
|                            work_area.height - outer.height : | ||||
|                            work_area.height - frame_rect.height : | ||||
|                            0); | ||||
|   } else { | ||||
|     new_y = orig_y; | ||||
| @@ -3025,12 +3295,12 @@ handle_move_to_center  (MetaDisplay    *display, | ||||
|                         gpointer        dummy) | ||||
| { | ||||
|   MetaRectangle work_area; | ||||
|   MetaRectangle outer; | ||||
|   MetaRectangle frame_rect; | ||||
|   int orig_x, orig_y; | ||||
|   int frame_width, frame_height; | ||||
|  | ||||
|   meta_window_get_work_area_all_monitors (window, &work_area); | ||||
|   meta_window_get_outer_rect (window, &outer); | ||||
|   meta_window_get_frame_rect (window, &frame_rect); | ||||
|   meta_window_get_position (window, &orig_x, &orig_y); | ||||
|  | ||||
|   frame_width = (window->frame ? window->frame->child_x : 0); | ||||
| @@ -3038,8 +3308,8 @@ handle_move_to_center  (MetaDisplay    *display, | ||||
|  | ||||
|   meta_window_move_resize (window, | ||||
|                            TRUE, | ||||
|                            work_area.x + (work_area.width +frame_width -outer.width )/2, | ||||
|                            work_area.y + (work_area.height+frame_height-outer.height)/2, | ||||
|                            work_area.x + (work_area.width +frame_width -frame_rect.width )/2, | ||||
|                            work_area.y + (work_area.height+frame_height-frame_rect.height)/2, | ||||
|                            window->rect.width, | ||||
|                            window->rect.height); | ||||
| } | ||||
| @@ -3732,8 +4002,8 @@ handle_raise_or_lower (MetaDisplay    *display, | ||||
|  | ||||
|       if (above->mapped) | ||||
|         { | ||||
|           meta_window_get_outer_rect (window, &win_rect); | ||||
|           meta_window_get_outer_rect (above, &above_rect); | ||||
|           meta_window_get_frame_rect (window, &win_rect); | ||||
|           meta_window_get_frame_rect (above, &above_rect); | ||||
|  | ||||
|           /* Check if obscured */ | ||||
|           if (meta_rectangle_intersect (&win_rect, &above_rect, &tmp)) | ||||
| @@ -3839,14 +4109,6 @@ handle_set_spew_mark (MetaDisplay    *display, | ||||
|   meta_verbose ("-- MARK MARK MARK MARK --\n"); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_set_keybindings_disabled (gboolean setting) | ||||
| { | ||||
|   all_bindings_disabled = setting; | ||||
|   meta_topic (META_DEBUG_KEYBINDINGS, | ||||
|               "Keybindings %s\n", all_bindings_disabled ? "disabled" : "enabled"); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_keybindings_set_custom_handler: | ||||
|  * @name: The name of the keybinding to set | ||||
| @@ -3881,28 +4143,6 @@ meta_keybindings_set_custom_handler (const gchar        *name, | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_keybindings_switch_window: (skip) | ||||
|  * @display: a #MetaDisplay | ||||
|  * @screen: a #MetaScreen | ||||
|  * @event_window: a #MetaWindow | ||||
|  * @event: a #XIDeviceEvent | ||||
|  * @binding: a #MetaKeyBinding | ||||
|  * | ||||
|  */ | ||||
| void | ||||
| meta_keybindings_switch_window (MetaDisplay    *display, | ||||
|                                 MetaScreen     *screen, | ||||
|                                 MetaWindow     *event_window, | ||||
|                                 XIDeviceEvent  *event, | ||||
|                                 MetaKeyBinding *binding) | ||||
| { | ||||
|   gint backwards = (binding->handler->flags & META_KEY_BINDING_IS_REVERSED) != 0; | ||||
|  | ||||
|   do_choose_window (display, screen, event_window, event, binding, | ||||
|                     backwards, FALSE); | ||||
| } | ||||
|  | ||||
| static void | ||||
| init_builtin_key_bindings (MetaDisplay *display) | ||||
| { | ||||
| @@ -4424,6 +4664,13 @@ init_builtin_key_bindings (MetaDisplay *display) | ||||
|                           META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY, | ||||
|                           handle_maximize_horizontally, 0); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "always-on-top", | ||||
|                           common_keybindings, | ||||
|                           META_KEY_BINDING_PER_WINDOW, | ||||
|                           META_KEYBINDING_ACTION_ALWAYS_ON_TOP, | ||||
|                           handle_always_on_top, 0); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "move-to-corner-nw", | ||||
|                           common_keybindings, | ||||
| @@ -4532,6 +4779,12 @@ meta_display_init_keys (MetaDisplay *display) | ||||
|  | ||||
|   g_hash_table_insert (key_handlers, g_strdup ("overlay-key"), handler); | ||||
|  | ||||
|   handler = g_new0 (MetaKeyHandler, 1); | ||||
|   handler->name = g_strdup ("iso-next-group"); | ||||
|   handler->flags = META_KEY_BINDING_BUILTIN; | ||||
|  | ||||
|   g_hash_table_insert (key_handlers, g_strdup ("iso-next-group"), handler); | ||||
|  | ||||
|   handler = g_new0 (MetaKeyHandler, 1); | ||||
|   handler->name = g_strdup ("external-grab"); | ||||
|   handler->func = handle_external_grab; | ||||
|   | ||||
| @@ -514,14 +514,14 @@ meta_run (void) | ||||
|   if (g_getenv ("MUTTER_G_FATAL_WARNINGS") != NULL) | ||||
|     g_log_set_always_fatal (G_LOG_LEVEL_MASK); | ||||
|    | ||||
|   meta_ui_set_current_theme (meta_prefs_get_theme (), FALSE); | ||||
|   meta_ui_set_current_theme (meta_prefs_get_theme ()); | ||||
|  | ||||
|   /* Try to find some theme that'll work if the theme preference | ||||
|    * doesn't exist.  First try Simple (the default theme) then just | ||||
|    * try anything in the themes directory. | ||||
|    */ | ||||
|   if (!meta_ui_have_a_theme ()) | ||||
|     meta_ui_set_current_theme ("Simple", FALSE); | ||||
|     meta_ui_set_current_theme ("Simple"); | ||||
|    | ||||
|   if (!meta_ui_have_a_theme ()) | ||||
|     { | ||||
| @@ -539,7 +539,7 @@ meta_run (void) | ||||
|           while (((dir_entry = g_dir_read_name (themes_dir)) != NULL) &&  | ||||
|                  (!meta_ui_have_a_theme ())) | ||||
|             { | ||||
|               meta_ui_set_current_theme (dir_entry, FALSE); | ||||
|               meta_ui_set_current_theme (dir_entry); | ||||
|             } | ||||
|            | ||||
|           g_dir_close (themes_dir); | ||||
| @@ -598,7 +598,7 @@ prefs_changed_callback (MetaPreference pref, | ||||
|     { | ||||
|     case META_PREF_THEME: | ||||
|     case META_PREF_DRAGGABLE_BORDER_WIDTH: | ||||
|       meta_ui_set_current_theme (meta_prefs_get_theme (), FALSE); | ||||
|       meta_ui_set_current_theme (meta_prefs_get_theme ()); | ||||
|       meta_display_retheme_all (); | ||||
|       break; | ||||
|  | ||||
|   | ||||
							
								
								
									
										34
									
								
								src/core/meta-cursor-tracker-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/core/meta-cursor-tracker-private.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (C) 2013 Red Hat, Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  * | ||||
|  * Author: Giovanni Campagna <gcampagn@redhat.com> | ||||
|  */ | ||||
|  | ||||
| #ifndef META_CURSOR_TRACKER_PRIVATE_H | ||||
| #define META_CURSOR_TRACKER_PRIVATE_H | ||||
|  | ||||
| #include <meta/meta-cursor-tracker.h> | ||||
|  | ||||
| gboolean meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker, | ||||
| 					    XEvent            *xevent); | ||||
|  | ||||
| void     meta_cursor_tracker_set_root_cursor (MetaCursorTracker *tracker, | ||||
|                                               MetaCursor         cursor); | ||||
| #endif | ||||
							
								
								
									
										414
									
								
								src/core/meta-cursor-tracker.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										414
									
								
								src/core/meta-cursor-tracker.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,414 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /*  | ||||
|  * Copyright 2013 Red Hat, Inc. | ||||
|  *  | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  * | ||||
|  * Author: Giovanni Campagna <gcampagn@redhat.com> | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:cursor-tracker | ||||
|  * @title: MetaCursorTracker | ||||
|  * @short_description: Mutter cursor tracking helper | ||||
|  */ | ||||
|  | ||||
| #include <config.h> | ||||
| #include <meta/main.h> | ||||
| #include <meta/util.h> | ||||
| #include <meta/errors.h> | ||||
|  | ||||
| #include <cogl/cogl.h> | ||||
| #include <clutter/clutter.h> | ||||
|  | ||||
| #include <gdk/gdk.h> | ||||
|  | ||||
| #include <X11/cursorfont.h> | ||||
| #include <X11/extensions/Xfixes.h> | ||||
| #include <X11/Xcursor/Xcursor.h> | ||||
|  | ||||
| #include "meta-cursor-tracker-private.h" | ||||
| #include "screen-private.h" | ||||
|  | ||||
| #define META_WAYLAND_DEFAULT_CURSOR_HOTSPOT_X 7 | ||||
| #define META_WAYLAND_DEFAULT_CURSOR_HOTSPOT_Y 4 | ||||
|  | ||||
| struct _MetaCursorTracker { | ||||
|   GObject parent_instance; | ||||
|  | ||||
|   MetaScreen *screen; | ||||
|  | ||||
|   gboolean is_showing; | ||||
|  | ||||
|   CoglTexture2D *sprite; | ||||
|   int hot_x, hot_y; | ||||
| }; | ||||
|  | ||||
| struct _MetaCursorTrackerClass { | ||||
|   GObjectClass parent_class; | ||||
| }; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaCursorTracker, meta_cursor_tracker, G_TYPE_OBJECT); | ||||
|  | ||||
| enum { | ||||
|     CURSOR_CHANGED, | ||||
|     LAST_SIGNAL | ||||
| }; | ||||
|  | ||||
| static guint signals[LAST_SIGNAL]; | ||||
|  | ||||
| static void | ||||
| translate_meta_cursor (MetaCursor   cursor, | ||||
|                        guint       *glyph_out, | ||||
|                        const char **name_out) | ||||
| { | ||||
|   guint glyph = XC_num_glyphs; | ||||
|   const char *name = NULL; | ||||
|  | ||||
|   switch (cursor) | ||||
|     { | ||||
|     case META_CURSOR_DEFAULT: | ||||
|       glyph = XC_left_ptr; | ||||
|       break; | ||||
|     case META_CURSOR_NORTH_RESIZE: | ||||
|       glyph = XC_top_side; | ||||
|       break; | ||||
|     case META_CURSOR_SOUTH_RESIZE: | ||||
|       glyph = XC_bottom_side; | ||||
|       break; | ||||
|     case META_CURSOR_WEST_RESIZE: | ||||
|       glyph = XC_left_side; | ||||
|       break; | ||||
|     case META_CURSOR_EAST_RESIZE: | ||||
|       glyph = XC_right_side; | ||||
|       break; | ||||
|     case META_CURSOR_SE_RESIZE: | ||||
|       glyph = XC_bottom_right_corner; | ||||
|       break; | ||||
|     case META_CURSOR_SW_RESIZE: | ||||
|       glyph = XC_bottom_left_corner; | ||||
|       break; | ||||
|     case META_CURSOR_NE_RESIZE: | ||||
|       glyph = XC_top_right_corner; | ||||
|       break; | ||||
|     case META_CURSOR_NW_RESIZE: | ||||
|       glyph = XC_top_left_corner; | ||||
|       break; | ||||
|     case META_CURSOR_MOVE_OR_RESIZE_WINDOW: | ||||
|       glyph = XC_fleur; | ||||
|       break; | ||||
|     case META_CURSOR_BUSY: | ||||
|       glyph = XC_watch; | ||||
|       break; | ||||
|     case META_CURSOR_DND_IN_DRAG: | ||||
|       name = "dnd-none"; | ||||
|       break; | ||||
|     case META_CURSOR_DND_MOVE: | ||||
|       name = "dnd-move"; | ||||
|       break; | ||||
|     case META_CURSOR_DND_COPY: | ||||
|       name = "dnd-copy"; | ||||
|       break; | ||||
|     case META_CURSOR_DND_UNSUPPORTED_TARGET: | ||||
|       name = "dnd-none"; | ||||
|       break; | ||||
|     case META_CURSOR_POINTING_HAND: | ||||
|       glyph = XC_hand2; | ||||
|       break; | ||||
|     case META_CURSOR_CROSSHAIR: | ||||
|       glyph = XC_crosshair; | ||||
|       break; | ||||
|     case META_CURSOR_IBEAM: | ||||
|       glyph = XC_xterm; | ||||
|       break; | ||||
|  | ||||
|     default: | ||||
|       g_assert_not_reached (); | ||||
|       glyph = 0; /* silence compiler */ | ||||
|       break; | ||||
|     } | ||||
|  | ||||
|   *glyph_out = glyph; | ||||
|   *name_out = name; | ||||
| } | ||||
|  | ||||
| static Cursor | ||||
| load_cursor_on_server (MetaDisplay *display, | ||||
|                        MetaCursor   cursor) | ||||
| { | ||||
|   Cursor xcursor; | ||||
|   guint glyph; | ||||
|   const char *name; | ||||
|  | ||||
|   translate_meta_cursor (cursor, &glyph, &name); | ||||
|  | ||||
|   if (name != NULL) | ||||
|     xcursor = XcursorLibraryLoadCursor (display->xdisplay, name); | ||||
|   else | ||||
|     xcursor = XCreateFontCursor (display->xdisplay, glyph); | ||||
|  | ||||
|   return xcursor; | ||||
| } | ||||
|  | ||||
| Cursor | ||||
| meta_display_create_x_cursor (MetaDisplay *display, | ||||
|                               MetaCursor cursor) | ||||
| { | ||||
|   return load_cursor_on_server (display, cursor); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_cursor_tracker_init (MetaCursorTracker *self) | ||||
| { | ||||
|   /* (JS) Best (?) that can be assumed since XFixes doesn't provide a way of | ||||
|    * detecting if the system mouse cursor is showing or not. | ||||
|    * | ||||
|    * On wayland we start with the cursor showing | ||||
|    */ | ||||
|   self->is_showing = TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_cursor_tracker_finalize (GObject *object) | ||||
| { | ||||
|   MetaCursorTracker *self = META_CURSOR_TRACKER (object); | ||||
|  | ||||
|   if (self->sprite) | ||||
|     cogl_object_unref (self->sprite); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_cursor_tracker_parent_class)->finalize (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|  | ||||
|   object_class->finalize = meta_cursor_tracker_finalize; | ||||
|  | ||||
|   signals[CURSOR_CHANGED] = g_signal_new ("cursor-changed", | ||||
|                                           G_TYPE_FROM_CLASS (klass), | ||||
|                                           G_SIGNAL_RUN_LAST, | ||||
|                                           0, | ||||
|                                           NULL, NULL, NULL, | ||||
|                                           G_TYPE_NONE, 0); | ||||
| } | ||||
|  | ||||
| static MetaCursorTracker * | ||||
| make_x11_cursor_tracker (MetaScreen *screen) | ||||
| { | ||||
|   MetaCursorTracker *self = g_object_new (META_TYPE_CURSOR_TRACKER, NULL); | ||||
|   self->screen = screen; | ||||
|  | ||||
|   XFixesSelectCursorInput (screen->display->xdisplay, | ||||
|                            screen->xroot, | ||||
|                            XFixesDisplayCursorNotifyMask); | ||||
|  | ||||
|   return self; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_cursor_tracker_get_for_screen: | ||||
|  * @screen: the #MetaScreen | ||||
|  * | ||||
|  * Retrieves the cursor tracker object for @screen. | ||||
|  * | ||||
|  * Returns: (transfer none): | ||||
|  */ | ||||
| MetaCursorTracker * | ||||
| meta_cursor_tracker_get_for_screen (MetaScreen *screen) | ||||
| { | ||||
|   MetaCursorTracker *self; | ||||
|  | ||||
|   if (screen->cursor_tracker) | ||||
|     return screen->cursor_tracker; | ||||
|  | ||||
|   self = make_x11_cursor_tracker (screen); | ||||
|  | ||||
|   screen->cursor_tracker = self; | ||||
|   return self; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker, | ||||
|                                    XEvent            *xevent) | ||||
| { | ||||
|   XFixesCursorNotifyEvent *notify_event; | ||||
|  | ||||
|   if (xevent->xany.type != tracker->screen->display->xfixes_event_base + XFixesCursorNotify) | ||||
|     return FALSE; | ||||
|  | ||||
|   notify_event = (XFixesCursorNotifyEvent *)xevent; | ||||
|   if (notify_event->subtype != XFixesDisplayCursorNotify) | ||||
|     return FALSE; | ||||
|  | ||||
|   g_clear_pointer (&tracker->sprite, cogl_object_unref); | ||||
|   g_signal_emit (tracker, signals[CURSOR_CHANGED], 0); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| ensure_xfixes_cursor (MetaCursorTracker *tracker) | ||||
| { | ||||
|   XFixesCursorImage *cursor_image; | ||||
|   CoglTexture2D *sprite; | ||||
|   guint8 *cursor_data; | ||||
|   gboolean free_cursor_data; | ||||
|   CoglContext *ctx; | ||||
|  | ||||
|   if (tracker->sprite) | ||||
|     return; | ||||
|  | ||||
|   cursor_image = XFixesGetCursorImage (tracker->screen->display->xdisplay); | ||||
|   if (!cursor_image) | ||||
|     return; | ||||
|  | ||||
|   /* Like all X APIs, XFixesGetCursorImage() returns arrays of 32-bit | ||||
|    * quantities as arrays of long; we need to convert on 64 bit */ | ||||
|   if (sizeof(long) == 4) | ||||
|     { | ||||
|       cursor_data = (guint8 *)cursor_image->pixels; | ||||
|       free_cursor_data = FALSE; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       int i, j; | ||||
|       guint32 *cursor_words; | ||||
|       gulong *p; | ||||
|       guint32 *q; | ||||
|  | ||||
|       cursor_words = g_new (guint32, cursor_image->width * cursor_image->height); | ||||
|       cursor_data = (guint8 *)cursor_words; | ||||
|  | ||||
|       p = cursor_image->pixels; | ||||
|       q = cursor_words; | ||||
|       for (j = 0; j < cursor_image->height; j++) | ||||
|         for (i = 0; i < cursor_image->width; i++) | ||||
|           *(q++) = *(p++); | ||||
|  | ||||
|       free_cursor_data = TRUE; | ||||
|     } | ||||
|  | ||||
|   ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|   sprite = cogl_texture_2d_new_from_data (ctx, | ||||
|                                           cursor_image->width, | ||||
|                                           cursor_image->height, | ||||
|                                           CLUTTER_CAIRO_FORMAT_ARGB32, | ||||
|                                           COGL_PIXEL_FORMAT_ANY, | ||||
|                                           cursor_image->width * 4, /* stride */ | ||||
|                                           cursor_data, | ||||
|                                           NULL); | ||||
|  | ||||
|   if (free_cursor_data) | ||||
|     g_free (cursor_data); | ||||
|  | ||||
|   if (sprite != NULL) | ||||
|     { | ||||
|       tracker->sprite = sprite; | ||||
|       tracker->hot_x = cursor_image->xhot; | ||||
|       tracker->hot_y = cursor_image->yhot; | ||||
|     } | ||||
|   XFree (cursor_image); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_cursor_tracker_get_sprite: | ||||
|  * | ||||
|  * Returns: (transfer none): | ||||
|  */ | ||||
| CoglTexture * | ||||
| meta_cursor_tracker_get_sprite (MetaCursorTracker *tracker) | ||||
| { | ||||
|   g_return_val_if_fail (META_IS_CURSOR_TRACKER (tracker), NULL); | ||||
|  | ||||
|   ensure_xfixes_cursor (tracker); | ||||
|  | ||||
|   return COGL_TEXTURE (tracker->sprite); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_cursor_tracker_get_hot: | ||||
|  * @tracker: | ||||
|  * @x: (out): | ||||
|  * @y: (out): | ||||
|  * | ||||
|  */ | ||||
| void | ||||
| meta_cursor_tracker_get_hot (MetaCursorTracker *tracker, | ||||
|                              int               *x, | ||||
|                              int               *y) | ||||
| { | ||||
|   g_return_if_fail (META_IS_CURSOR_TRACKER (tracker)); | ||||
|  | ||||
|   ensure_xfixes_cursor (tracker); | ||||
|  | ||||
|   if (x) | ||||
|     *x = tracker->hot_x; | ||||
|   if (y) | ||||
|     *y = tracker->hot_y; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_cursor_tracker_set_root_cursor (MetaCursorTracker *tracker, | ||||
|                                      MetaCursor         cursor) | ||||
| { | ||||
|   Cursor xcursor; | ||||
|   MetaDisplay *display = tracker->screen->display; | ||||
|  | ||||
|   /* First create a cursor for X11 applications that don't specify their own */ | ||||
|   xcursor = meta_display_create_x_cursor (display, cursor); | ||||
|  | ||||
|   XDefineCursor (display->xdisplay, tracker->screen->xroot, xcursor); | ||||
|   XFlush (display->xdisplay); | ||||
|   XFreeCursor (display->xdisplay, xcursor); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_cursor_tracker_get_pointer (MetaCursorTracker   *tracker, | ||||
|                                  int                 *x, | ||||
|                                  int                 *y, | ||||
|                                  ClutterModifierType *mods) | ||||
| { | ||||
|   GdkDeviceManager *gmanager; | ||||
|   GdkDevice *gdevice; | ||||
|   GdkScreen *gscreen; | ||||
|  | ||||
|   gmanager = gdk_display_get_device_manager (gdk_display_get_default ()); | ||||
|   gdevice = gdk_device_manager_get_client_pointer (gmanager); | ||||
|  | ||||
|   gdk_device_get_position (gdevice, &gscreen, x, y); | ||||
|   gdk_device_get_state (gdevice, | ||||
|                         gdk_screen_get_root_window (gscreen), | ||||
|                         NULL, (GdkModifierType*)mods); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_cursor_tracker_set_pointer_visible (MetaCursorTracker *tracker, | ||||
|                                          gboolean           visible) | ||||
| { | ||||
|   if (visible == tracker->is_showing) | ||||
|     return; | ||||
|   tracker->is_showing = visible; | ||||
|  | ||||
|   if (visible) | ||||
|     XFixesShowCursor (tracker->screen->display->xdisplay, | ||||
|                       tracker->screen->xroot); | ||||
|   else | ||||
|     XFixesHideCursor (tracker->screen->display->xdisplay, | ||||
|                       tracker->screen->xroot); | ||||
| } | ||||
							
								
								
									
										30
									
								
								src/core/meta-idle-monitor-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/core/meta-idle-monitor-private.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /*  | ||||
|  * Copyright 2013 Red Hat, Inc. | ||||
|  *  | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  * | ||||
|  * Adapted from gnome-session/gnome-session/gs-idle-monitor.c and | ||||
|  *         from gnome-desktop/libgnome-desktop/gnome-idle-monitor.c | ||||
|  */ | ||||
|  | ||||
| #include <meta/meta-idle-monitor.h> | ||||
|  | ||||
| void meta_idle_monitor_handle_xevent_all (XEvent *xevent); | ||||
|  | ||||
|  | ||||
| void meta_idle_monitor_init_dbus (void); | ||||
							
								
								
									
										889
									
								
								src/core/meta-idle-monitor.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										889
									
								
								src/core/meta-idle-monitor.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,889 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /*  | ||||
|  * Copyright 2013 Red Hat, Inc. | ||||
|  *  | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  * | ||||
|  * Adapted from gnome-session/gnome-session/gs-idle-monitor.c and | ||||
|  *         from gnome-desktop/libgnome-desktop/gnome-idle-monitor.c | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * SECTION:idle-monitor | ||||
|  * @title: MetaIdleMonitor | ||||
|  * @short_description: Mutter idle counter (similar to X's IDLETIME) | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
|  | ||||
| #include <string.h> | ||||
| #include <clutter/clutter.h> | ||||
| #include <X11/Xlib.h> | ||||
| #include <X11/extensions/sync.h> | ||||
|  | ||||
| #include <meta/util.h> | ||||
| #include <meta/main.h> | ||||
| #include <meta/meta-idle-monitor.h> | ||||
| #include "display-private.h" | ||||
| #include "meta-idle-monitor-private.h" | ||||
| #include "meta-dbus-idle-monitor.h" | ||||
|  | ||||
| G_STATIC_ASSERT(sizeof(unsigned long) == sizeof(gpointer)); | ||||
|  | ||||
| struct _MetaIdleMonitor | ||||
| { | ||||
|   GObject parent_instance; | ||||
|  | ||||
|   GHashTable  *watches; | ||||
|   GHashTable  *alarms; | ||||
|   int          device_id; | ||||
|  | ||||
|   /* X11 implementation */ | ||||
|   Display     *display; | ||||
|   int          sync_event_base; | ||||
|   XSyncCounter counter; | ||||
|   XSyncAlarm   user_active_alarm; | ||||
| }; | ||||
|  | ||||
| struct _MetaIdleMonitorClass | ||||
| { | ||||
|   GObjectClass parent_class; | ||||
| }; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   MetaIdleMonitor          *monitor; | ||||
|   guint	                    id; | ||||
|   MetaIdleMonitorWatchFunc  callback; | ||||
|   gpointer		    user_data; | ||||
|   GDestroyNotify            notify; | ||||
|   guint64                   timeout_msec; | ||||
|  | ||||
|   /* x11 */ | ||||
|   XSyncAlarm                xalarm; | ||||
|   int                       idle_source_id; | ||||
| } MetaIdleMonitorWatch; | ||||
|  | ||||
| enum | ||||
| { | ||||
|   PROP_0, | ||||
|   PROP_DEVICE_ID, | ||||
|   PROP_LAST, | ||||
| }; | ||||
|  | ||||
| static GParamSpec *obj_props[PROP_LAST]; | ||||
|  | ||||
| G_DEFINE_TYPE (MetaIdleMonitor, meta_idle_monitor, G_TYPE_OBJECT) | ||||
|  | ||||
| static MetaIdleMonitor *device_monitors[256]; | ||||
| static int              device_id_max; | ||||
|  | ||||
| static gint64 | ||||
| _xsyncvalue_to_int64 (XSyncValue value) | ||||
| { | ||||
|   return ((guint64) XSyncValueHigh32 (value)) << 32 | ||||
|     | (guint64) XSyncValueLow32 (value); | ||||
| } | ||||
|  | ||||
| #define GUINT64_TO_XSYNCVALUE(value, ret) XSyncIntsToValue (ret, (value) & 0xFFFFFFFF, ((guint64)(value)) >> 32) | ||||
|  | ||||
| static void | ||||
| fire_watch (MetaIdleMonitorWatch *watch) | ||||
| { | ||||
|   MetaIdleMonitor *monitor; | ||||
|   guint id; | ||||
|   gboolean is_user_active_watch; | ||||
|  | ||||
|   monitor = watch->monitor; | ||||
|   g_object_ref (monitor); | ||||
|  | ||||
|   if (watch->idle_source_id) | ||||
|     { | ||||
|       g_source_remove (watch->idle_source_id); | ||||
|       watch->idle_source_id = 0; | ||||
|     } | ||||
|  | ||||
|   id = watch->id; | ||||
|   is_user_active_watch = (watch->timeout_msec == 0); | ||||
|  | ||||
|   if (watch->callback) | ||||
|     watch->callback (monitor, id, watch->user_data); | ||||
|  | ||||
|   if (is_user_active_watch) | ||||
|     meta_idle_monitor_remove_watch (monitor, id); | ||||
|  | ||||
|   g_object_unref (monitor); | ||||
| } | ||||
|  | ||||
| static XSyncAlarm | ||||
| _xsync_alarm_set (MetaIdleMonitor	*monitor, | ||||
| 		  XSyncTestType          test_type, | ||||
| 		  guint64                interval, | ||||
| 		  gboolean               want_events) | ||||
| { | ||||
|   XSyncAlarmAttributes attr; | ||||
|   XSyncValue	     delta; | ||||
|   guint		     flags; | ||||
|  | ||||
|   flags = XSyncCACounter | XSyncCAValueType | XSyncCATestType | | ||||
|     XSyncCAValue | XSyncCADelta | XSyncCAEvents; | ||||
|  | ||||
|   XSyncIntToValue (&delta, 0); | ||||
|   attr.trigger.counter = monitor->counter; | ||||
|   attr.trigger.value_type = XSyncAbsolute; | ||||
|   attr.delta = delta; | ||||
|   attr.events = want_events; | ||||
|  | ||||
|   GUINT64_TO_XSYNCVALUE (interval, &attr.trigger.wait_value); | ||||
|   attr.trigger.test_type = test_type; | ||||
|   return XSyncCreateAlarm (monitor->display, flags, &attr); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ensure_alarm_rescheduled (Display    *dpy, | ||||
| 			  XSyncAlarm  alarm) | ||||
| { | ||||
|   XSyncAlarmAttributes attr; | ||||
|  | ||||
|   /* Some versions of Xorg have an issue where alarms aren't | ||||
|    * always rescheduled. Calling XSyncChangeAlarm, even | ||||
|    * without any attributes, will reschedule the alarm. */ | ||||
|   XSyncChangeAlarm (dpy, alarm, 0, &attr); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_alarm_enabled (Display    *dpy, | ||||
| 		   XSyncAlarm  alarm, | ||||
| 		   gboolean    enabled) | ||||
| { | ||||
|   XSyncAlarmAttributes attr; | ||||
|   attr.events = enabled; | ||||
|   XSyncChangeAlarm (dpy, alarm, XSyncCAEvents, &attr); | ||||
| } | ||||
|  | ||||
| static void | ||||
| check_x11_watch (gpointer data, | ||||
|                  gpointer user_data) | ||||
| { | ||||
|   MetaIdleMonitorWatch *watch = data; | ||||
|   XSyncAlarm alarm = (XSyncAlarm) user_data; | ||||
|  | ||||
|   if (watch->xalarm != alarm) | ||||
|     return; | ||||
|  | ||||
|   fire_watch (watch); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_idle_monitor_handle_xevent (MetaIdleMonitor       *monitor, | ||||
|                                  XSyncAlarmNotifyEvent *alarm_event) | ||||
| { | ||||
|   XSyncAlarm alarm; | ||||
|   GList *watches; | ||||
|   gboolean has_alarm; | ||||
|  | ||||
|   if (alarm_event->state != XSyncAlarmActive) | ||||
|     return; | ||||
|  | ||||
|   alarm = alarm_event->alarm; | ||||
|  | ||||
|   has_alarm = FALSE; | ||||
|  | ||||
|   if (alarm == monitor->user_active_alarm) | ||||
|     { | ||||
|       set_alarm_enabled (monitor->display, | ||||
|                          alarm, | ||||
|                          FALSE); | ||||
|       has_alarm = TRUE; | ||||
|     } | ||||
|   else if (g_hash_table_contains (monitor->alarms, (gpointer) alarm)) | ||||
|     { | ||||
|       ensure_alarm_rescheduled (monitor->display, | ||||
|                                 alarm); | ||||
|       has_alarm = TRUE; | ||||
|     } | ||||
|  | ||||
|   if (has_alarm) | ||||
|     { | ||||
|       watches = g_hash_table_get_values (monitor->watches); | ||||
|  | ||||
|       g_list_foreach (watches, check_x11_watch, (gpointer) alarm); | ||||
|       g_list_free (watches); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_idle_monitor_handle_xevent_all (XEvent *xevent) | ||||
| { | ||||
|   int i; | ||||
|  | ||||
|   for (i = 0; i <= device_id_max; i++) | ||||
|     if (device_monitors[i]) | ||||
|       meta_idle_monitor_handle_xevent (device_monitors[i], (XSyncAlarmNotifyEvent*)xevent); | ||||
| } | ||||
|  | ||||
| static char * | ||||
| counter_name_for_device (int device_id) | ||||
| { | ||||
|   if (device_id > 0) | ||||
|     return g_strdup_printf ("DEVICEIDLETIME %d", device_id); | ||||
|  | ||||
|   return g_strdup ("IDLETIME"); | ||||
| } | ||||
|  | ||||
| static XSyncCounter | ||||
| find_idletime_counter (MetaIdleMonitor *monitor) | ||||
| { | ||||
|   int		      i; | ||||
|   int		      ncounters; | ||||
|   XSyncSystemCounter *counters; | ||||
|   XSyncCounter        counter = None; | ||||
|   char               *counter_name; | ||||
|  | ||||
|   counter_name = counter_name_for_device (monitor->device_id); | ||||
|   counters = XSyncListSystemCounters (monitor->display, &ncounters); | ||||
|   for (i = 0; i < ncounters; i++) | ||||
|     { | ||||
|       if (counters[i].name != NULL && strcmp (counters[i].name, counter_name) == 0) | ||||
|         { | ||||
|           counter = counters[i].counter; | ||||
|           break; | ||||
|         } | ||||
|     } | ||||
|   XSyncFreeSystemCounterList (counters); | ||||
|   g_free (counter_name); | ||||
|  | ||||
|   return counter; | ||||
| } | ||||
|  | ||||
| static guint32 | ||||
| get_next_watch_serial (void) | ||||
| { | ||||
|   static guint32 serial = 0; | ||||
|   g_atomic_int_inc (&serial); | ||||
|   return serial; | ||||
| } | ||||
|  | ||||
| static void | ||||
| idle_monitor_watch_free (MetaIdleMonitorWatch *watch) | ||||
| { | ||||
|   MetaIdleMonitor *monitor; | ||||
|  | ||||
|   if (watch == NULL) | ||||
|     return; | ||||
|  | ||||
|   monitor = watch->monitor; | ||||
|   g_object_ref (monitor); | ||||
|  | ||||
|   if (watch->idle_source_id) | ||||
|     { | ||||
|       g_source_remove (watch->idle_source_id); | ||||
|       watch->idle_source_id = 0; | ||||
|     } | ||||
|  | ||||
|   if (watch->notify != NULL) | ||||
|     watch->notify (watch->user_data); | ||||
|  | ||||
|   if (watch->xalarm != monitor->user_active_alarm && | ||||
|       watch->xalarm != None) | ||||
|     { | ||||
|       XSyncDestroyAlarm (monitor->display, watch->xalarm); | ||||
|       g_hash_table_remove (monitor->alarms, (gpointer) watch->xalarm); | ||||
|     } | ||||
|  | ||||
|   g_object_unref (monitor); | ||||
|   g_slice_free (MetaIdleMonitorWatch, watch); | ||||
| } | ||||
|  | ||||
| static void | ||||
| init_xsync (MetaIdleMonitor *monitor) | ||||
| { | ||||
|   monitor->counter = find_idletime_counter (monitor); | ||||
|   /* IDLETIME counter not found? */ | ||||
|   if (monitor->counter == None) | ||||
|     { | ||||
|       meta_warning ("IDLETIME counter not found\n"); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   monitor->user_active_alarm = _xsync_alarm_set (monitor, XSyncNegativeTransition, 1, FALSE); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_idle_monitor_dispose (GObject *object) | ||||
| { | ||||
|   MetaIdleMonitor *monitor; | ||||
|  | ||||
|   monitor = META_IDLE_MONITOR (object); | ||||
|  | ||||
|   g_clear_pointer (&monitor->watches, g_hash_table_destroy); | ||||
|   g_clear_pointer (&monitor->alarms, g_hash_table_destroy); | ||||
|  | ||||
|   if (monitor->user_active_alarm != None) | ||||
|     { | ||||
|       XSyncDestroyAlarm (monitor->display, monitor->user_active_alarm); | ||||
|       monitor->user_active_alarm = None; | ||||
|     } | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_idle_monitor_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_idle_monitor_get_property (GObject    *object, | ||||
|                                 guint       prop_id, | ||||
|                                 GValue     *value, | ||||
|                                 GParamSpec *pspec) | ||||
| { | ||||
|   MetaIdleMonitor *monitor = META_IDLE_MONITOR (object); | ||||
|  | ||||
|   switch (prop_id) | ||||
|     { | ||||
|     case PROP_DEVICE_ID: | ||||
|       g_value_set_int (value, monitor->device_id); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_idle_monitor_set_property (GObject      *object, | ||||
|                                 guint         prop_id, | ||||
|                                 const GValue *value, | ||||
|                                 GParamSpec   *pspec) | ||||
| { | ||||
|   MetaIdleMonitor *monitor = META_IDLE_MONITOR (object); | ||||
|   switch (prop_id) | ||||
|     { | ||||
|     case PROP_DEVICE_ID: | ||||
|       monitor->device_id = g_value_get_int (value); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_idle_monitor_constructed (GObject *object) | ||||
| { | ||||
|   MetaIdleMonitor *monitor = META_IDLE_MONITOR (object); | ||||
|  | ||||
|   monitor->display = meta_get_display ()->xdisplay; | ||||
|   init_xsync (monitor); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_idle_monitor_class_init (MetaIdleMonitorClass *klass) | ||||
| { | ||||
|   GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||||
|  | ||||
|   object_class->dispose = meta_idle_monitor_dispose; | ||||
|   object_class->constructed = meta_idle_monitor_constructed; | ||||
|   object_class->get_property = meta_idle_monitor_get_property; | ||||
|   object_class->set_property = meta_idle_monitor_set_property; | ||||
|  | ||||
|   /** | ||||
|    * MetaIdleMonitor:device_id: | ||||
|    * | ||||
|    * The device to listen to idletime on. | ||||
|    */ | ||||
|   obj_props[PROP_DEVICE_ID] = | ||||
|     g_param_spec_int ("device-id", | ||||
|                       "Device ID", | ||||
|                       "The device to listen to idletime on", | ||||
|                       0, 255, 0, | ||||
|                       G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); | ||||
|   g_object_class_install_property (object_class, PROP_DEVICE_ID, obj_props[PROP_DEVICE_ID]); | ||||
| } | ||||
|  | ||||
| static void | ||||
| meta_idle_monitor_init (MetaIdleMonitor *monitor) | ||||
| { | ||||
|   monitor->watches = g_hash_table_new_full (NULL, | ||||
|                                                   NULL, | ||||
|                                                   NULL, | ||||
|                                                   (GDestroyNotify)idle_monitor_watch_free); | ||||
|  | ||||
|   monitor->alarms = g_hash_table_new (NULL, NULL); | ||||
| } | ||||
|  | ||||
| static void | ||||
| ensure_device_monitor (int device_id) | ||||
| { | ||||
|   if (device_monitors[device_id]) | ||||
|     return; | ||||
|  | ||||
|   device_monitors[device_id] = g_object_new (META_TYPE_IDLE_MONITOR, "device-id", device_id, NULL); | ||||
|   device_id_max = MAX (device_id_max, device_id); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_idle_monitor_get_core: | ||||
|  * | ||||
|  * Returns: (transfer none): the #MetaIdleMonitor that tracks the server-global | ||||
|  * idletime for all devices. To track device-specific idletime, | ||||
|  * use meta_idle_monitor_get_for_device(). | ||||
|  */ | ||||
| MetaIdleMonitor * | ||||
| meta_idle_monitor_get_core (void) | ||||
| { | ||||
|   ensure_device_monitor (0); | ||||
|   return device_monitors[0]; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_idle_monitor_get_for_device: | ||||
|  * @device_id: the device to get the idle time for. | ||||
|  * | ||||
|  * Returns: (transfer none): a new #MetaIdleMonitor that tracks the | ||||
|  * device-specific idletime for @device. To track server-global idletime | ||||
|  * for all devices, use meta_idle_monitor_get_core(). | ||||
|  */ | ||||
| MetaIdleMonitor * | ||||
| meta_idle_monitor_get_for_device (int device_id) | ||||
| { | ||||
|   g_return_val_if_fail (device_id > 0 && device_id < 256, NULL); | ||||
|  | ||||
|   ensure_device_monitor (device_id); | ||||
|   return device_monitors[device_id]; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| fire_watch_idle (gpointer data) | ||||
| { | ||||
|   MetaIdleMonitorWatch *watch = data; | ||||
|  | ||||
|   watch->idle_source_id = 0; | ||||
|   fire_watch (watch); | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static MetaIdleMonitorWatch * | ||||
| make_watch (MetaIdleMonitor           *monitor, | ||||
|             guint64                    timeout_msec, | ||||
| 	    MetaIdleMonitorWatchFunc   callback, | ||||
| 	    gpointer                   user_data, | ||||
| 	    GDestroyNotify             notify) | ||||
| { | ||||
|   MetaIdleMonitorWatch *watch; | ||||
|  | ||||
|   watch = g_slice_new0 (MetaIdleMonitorWatch); | ||||
|   watch->monitor = monitor; | ||||
|   watch->id = get_next_watch_serial (); | ||||
|   watch->callback = callback; | ||||
|   watch->user_data = user_data; | ||||
|   watch->notify = notify; | ||||
|   watch->timeout_msec = timeout_msec; | ||||
|  | ||||
|   if (timeout_msec != 0) | ||||
|     { | ||||
|       watch->xalarm = _xsync_alarm_set (monitor, XSyncPositiveTransition, timeout_msec, TRUE); | ||||
|  | ||||
|       g_hash_table_add (monitor->alarms, (gpointer) watch->xalarm); | ||||
|  | ||||
|       if (meta_idle_monitor_get_idletime (monitor) > (gint64)timeout_msec) | ||||
|         watch->idle_source_id = g_idle_add (fire_watch_idle, watch); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       watch->xalarm = monitor->user_active_alarm; | ||||
|  | ||||
|       set_alarm_enabled (monitor->display, monitor->user_active_alarm, TRUE); | ||||
|     } | ||||
|  | ||||
|   g_hash_table_insert (monitor->watches, | ||||
|                        GUINT_TO_POINTER (watch->id), | ||||
|                        watch); | ||||
|   return watch; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_idle_monitor_add_idle_watch: | ||||
|  * @monitor: A #MetaIdleMonitor | ||||
|  * @interval_msec: The idletime interval, in milliseconds | ||||
|  * @callback: (allow-none): The callback to call when the user has | ||||
|  *     accumulated @interval_msec milliseconds of idle time. | ||||
|  * @user_data: (allow-none): The user data to pass to the callback | ||||
|  * @notify: A #GDestroyNotify | ||||
|  * | ||||
|  * Returns: a watch id | ||||
|  * | ||||
|  * Adds a watch for a specific idle time. The callback will be called | ||||
|  * when the user has accumulated @interval_msec milliseconds of idle time. | ||||
|  * This function will return an ID that can either be passed to | ||||
|  * meta_idle_monitor_remove_watch(), or can be used to tell idle time | ||||
|  * watches apart if you have more than one. | ||||
|  * | ||||
|  * Also note that this function will only care about positive transitions | ||||
|  * (user's idle time exceeding a certain time). If you want to know about | ||||
|  * when the user has become active, use | ||||
|  * meta_idle_monitor_add_user_active_watch(). | ||||
|  */ | ||||
| guint | ||||
| meta_idle_monitor_add_idle_watch (MetaIdleMonitor	       *monitor, | ||||
|                                   guint64	                interval_msec, | ||||
|                                   MetaIdleMonitorWatchFunc      callback, | ||||
|                                   gpointer			user_data, | ||||
|                                   GDestroyNotify		notify) | ||||
| { | ||||
|   MetaIdleMonitorWatch *watch; | ||||
|  | ||||
|   g_return_val_if_fail (META_IS_IDLE_MONITOR (monitor), 0); | ||||
|   g_return_val_if_fail (interval_msec > 0, 0); | ||||
|  | ||||
|   watch = make_watch (monitor, | ||||
|                       interval_msec, | ||||
|                       callback, | ||||
|                       user_data, | ||||
|                       notify); | ||||
|  | ||||
|   return watch->id; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_idle_monitor_add_user_active_watch: | ||||
|  * @monitor: A #MetaIdleMonitor | ||||
|  * @callback: (allow-none): The callback to call when the user is | ||||
|  *     active again. | ||||
|  * @user_data: (allow-none): The user data to pass to the callback | ||||
|  * @notify: A #GDestroyNotify | ||||
|  * | ||||
|  * Returns: a watch id | ||||
|  * | ||||
|  * Add a one-time watch to know when the user is active again. | ||||
|  * Note that this watch is one-time and will de-activate after the | ||||
|  * function is called, for efficiency purposes. It's most convenient | ||||
|  * to call this when an idle watch, as added by | ||||
|  * meta_idle_monitor_add_idle_watch(), has triggered. | ||||
|  */ | ||||
| guint | ||||
| meta_idle_monitor_add_user_active_watch (MetaIdleMonitor          *monitor, | ||||
|                                          MetaIdleMonitorWatchFunc  callback, | ||||
|                                          gpointer		   user_data, | ||||
|                                          GDestroyNotify	           notify) | ||||
| { | ||||
|   MetaIdleMonitorWatch *watch; | ||||
|  | ||||
|   g_return_val_if_fail (META_IS_IDLE_MONITOR (monitor), 0); | ||||
|  | ||||
|   watch = make_watch (monitor, | ||||
|                       0, | ||||
|                       callback, | ||||
|                       user_data, | ||||
|                       notify); | ||||
|  | ||||
|   return watch->id; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_idle_monitor_remove_watch: | ||||
|  * @monitor: A #MetaIdleMonitor | ||||
|  * @id: A watch ID | ||||
|  * | ||||
|  * Removes an idle time watcher, previously added by | ||||
|  * meta_idle_monitor_add_idle_watch() or | ||||
|  * meta_idle_monitor_add_user_active_watch(). | ||||
|  */ | ||||
| void | ||||
| meta_idle_monitor_remove_watch (MetaIdleMonitor *monitor, | ||||
|                                 guint	         id) | ||||
| { | ||||
|   g_return_if_fail (META_IS_IDLE_MONITOR (monitor)); | ||||
|  | ||||
|   g_hash_table_remove (monitor->watches, | ||||
|                        GUINT_TO_POINTER (id)); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_idle_monitor_get_idletime: | ||||
|  * @monitor: A #MetaIdleMonitor | ||||
|  * | ||||
|  * Returns: The current idle time, in milliseconds, or -1 for not supported | ||||
|  */ | ||||
| gint64 | ||||
| meta_idle_monitor_get_idletime (MetaIdleMonitor *monitor) | ||||
| { | ||||
|   XSyncValue value; | ||||
|  | ||||
|   if (!XSyncQueryCounter (monitor->display, monitor->counter, &value)) | ||||
|     return -1; | ||||
|  | ||||
|   return _xsyncvalue_to_int64 (value); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| handle_get_idletime (MetaDBusIdleMonitor   *skeleton, | ||||
|                      GDBusMethodInvocation *invocation, | ||||
|                      MetaIdleMonitor       *monitor) | ||||
| { | ||||
|   guint64 idletime; | ||||
|  | ||||
|   idletime = meta_idle_monitor_get_idletime (monitor); | ||||
|   meta_dbus_idle_monitor_complete_get_idletime (skeleton, invocation, idletime); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| typedef struct { | ||||
|   MetaDBusIdleMonitor *dbus_monitor; | ||||
|   MetaIdleMonitor *monitor; | ||||
|   char *dbus_name; | ||||
|   guint watch_id; | ||||
|   guint name_watcher_id; | ||||
| } DBusWatch; | ||||
|  | ||||
| static void | ||||
| destroy_dbus_watch (gpointer data) | ||||
| { | ||||
|   DBusWatch *watch = data; | ||||
|  | ||||
|   g_object_unref (watch->dbus_monitor); | ||||
|   g_object_unref (watch->monitor); | ||||
|   g_free (watch->dbus_name); | ||||
|   g_bus_unwatch_name (watch->name_watcher_id); | ||||
|  | ||||
|   g_slice_free (DBusWatch, watch); | ||||
| } | ||||
|  | ||||
| static void | ||||
| dbus_idle_callback (MetaIdleMonitor *monitor, | ||||
|                     guint            watch_id, | ||||
|                     gpointer         user_data) | ||||
| { | ||||
|   DBusWatch *watch = user_data; | ||||
|   GDBusInterfaceSkeleton *skeleton = G_DBUS_INTERFACE_SKELETON (watch->dbus_monitor); | ||||
|  | ||||
|   g_dbus_connection_emit_signal (g_dbus_interface_skeleton_get_connection (skeleton), | ||||
|                                  watch->dbus_name, | ||||
|                                  g_dbus_interface_skeleton_get_object_path (skeleton), | ||||
|                                  "org.gnome.Mutter.IdleMonitor", | ||||
|                                  "WatchFired", | ||||
|                                  g_variant_new ("(u)", watch_id), | ||||
|                                  NULL); | ||||
| } | ||||
|  | ||||
| static void | ||||
| name_vanished_callback (GDBusConnection *connection, | ||||
|                         const char      *name, | ||||
|                         gpointer         user_data) | ||||
| { | ||||
|   DBusWatch *watch = user_data; | ||||
|  | ||||
|   meta_idle_monitor_remove_watch (watch->monitor, watch->watch_id); | ||||
| } | ||||
|  | ||||
| static DBusWatch * | ||||
| make_dbus_watch (MetaDBusIdleMonitor   *skeleton, | ||||
|                  GDBusMethodInvocation *invocation, | ||||
|                  MetaIdleMonitor       *monitor) | ||||
| { | ||||
|   DBusWatch *watch; | ||||
|  | ||||
|   watch = g_slice_new (DBusWatch); | ||||
|   watch->dbus_monitor = g_object_ref (skeleton); | ||||
|   watch->monitor = g_object_ref (monitor); | ||||
|   watch->dbus_name = g_strdup (g_dbus_method_invocation_get_sender (invocation)); | ||||
|   watch->name_watcher_id = g_bus_watch_name_on_connection (g_dbus_method_invocation_get_connection (invocation), | ||||
|                                                            watch->dbus_name, | ||||
|                                                            G_BUS_NAME_WATCHER_FLAGS_NONE, | ||||
|                                                            NULL, /* appeared */ | ||||
|                                                            name_vanished_callback, | ||||
|                                                            watch, NULL); | ||||
|  | ||||
|   return watch; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| handle_add_idle_watch (MetaDBusIdleMonitor   *skeleton, | ||||
|                        GDBusMethodInvocation *invocation, | ||||
|                        guint64                interval, | ||||
|                        MetaIdleMonitor       *monitor) | ||||
| { | ||||
|   DBusWatch *watch; | ||||
|  | ||||
|   watch = make_dbus_watch (skeleton, invocation, monitor); | ||||
|   watch->watch_id = meta_idle_monitor_add_idle_watch (monitor, interval, | ||||
|                                                       dbus_idle_callback, watch, destroy_dbus_watch); | ||||
|  | ||||
|   meta_dbus_idle_monitor_complete_add_idle_watch (skeleton, invocation, watch->watch_id); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| handle_add_user_active_watch (MetaDBusIdleMonitor   *skeleton, | ||||
|                               GDBusMethodInvocation *invocation, | ||||
|                               MetaIdleMonitor       *monitor) | ||||
| { | ||||
|   DBusWatch *watch; | ||||
|  | ||||
|   watch = make_dbus_watch (skeleton, invocation, monitor); | ||||
|   watch->watch_id = meta_idle_monitor_add_user_active_watch (monitor, | ||||
|                                                              dbus_idle_callback, watch, | ||||
|                                                              destroy_dbus_watch); | ||||
|  | ||||
|   meta_dbus_idle_monitor_complete_add_user_active_watch (skeleton, invocation, watch->watch_id); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| handle_remove_watch (MetaDBusIdleMonitor   *skeleton, | ||||
|                      GDBusMethodInvocation *invocation, | ||||
|                      guint                  id, | ||||
|                      MetaIdleMonitor       *monitor) | ||||
| { | ||||
|   meta_idle_monitor_remove_watch (monitor, id); | ||||
|   meta_dbus_idle_monitor_complete_remove_watch (skeleton, invocation); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| create_monitor_skeleton (GDBusObjectManagerServer *manager, | ||||
|                          MetaIdleMonitor          *monitor, | ||||
|                          const char               *path) | ||||
| { | ||||
|   MetaDBusIdleMonitor *skeleton; | ||||
|   MetaDBusObjectSkeleton *object; | ||||
|  | ||||
|   skeleton = meta_dbus_idle_monitor_skeleton_new (); | ||||
|   g_signal_connect_object (skeleton, "handle-add-idle-watch", | ||||
|                            G_CALLBACK (handle_add_idle_watch), monitor, 0); | ||||
|   g_signal_connect_object (skeleton, "handle-add-user-active-watch", | ||||
|                            G_CALLBACK (handle_add_user_active_watch), monitor, 0); | ||||
|   g_signal_connect_object (skeleton, "handle-remove-watch", | ||||
|                            G_CALLBACK (handle_remove_watch), monitor, 0); | ||||
|   g_signal_connect_object (skeleton, "handle-get-idletime", | ||||
|                            G_CALLBACK (handle_get_idletime), monitor, 0); | ||||
|  | ||||
|   object = meta_dbus_object_skeleton_new (path); | ||||
|   meta_dbus_object_skeleton_set_idle_monitor (object, skeleton); | ||||
|  | ||||
|   g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_device_added (ClutterDeviceManager     *device_manager, | ||||
|                  ClutterInputDevice       *device, | ||||
|                  GDBusObjectManagerServer *manager) | ||||
| { | ||||
|  | ||||
|   MetaIdleMonitor *monitor; | ||||
|   int device_id; | ||||
|   char *path; | ||||
|  | ||||
|   device_id = clutter_input_device_get_device_id (device); | ||||
|   monitor = meta_idle_monitor_get_for_device (device_id); | ||||
|   path = g_strdup_printf ("/org/gnome/Mutter/IdleMonitor/Device%d", device_id); | ||||
|  | ||||
|   create_monitor_skeleton (manager, monitor, path); | ||||
|   g_free (path); | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_device_removed (ClutterDeviceManager     *device_manager, | ||||
|                    ClutterInputDevice       *device, | ||||
|                    GDBusObjectManagerServer *manager) | ||||
| { | ||||
|   int device_id; | ||||
|   char *path; | ||||
|  | ||||
|   device_id = clutter_input_device_get_device_id (device); | ||||
|   path = g_strdup_printf ("/org/gnome/Mutter/IdleMonitor/Device%d", device_id); | ||||
|   g_dbus_object_manager_server_unexport (manager, path); | ||||
|   g_free (path); | ||||
|  | ||||
|   g_clear_object (&device_monitors[device_id]); | ||||
|   if (device_id == device_id_max) | ||||
|     device_id_max--; | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_bus_acquired (GDBusConnection *connection, | ||||
|                  const char      *name, | ||||
|                  gpointer         user_data) | ||||
| { | ||||
|   GDBusObjectManagerServer *manager; | ||||
|   ClutterDeviceManager *device_manager; | ||||
|   MetaIdleMonitor *monitor; | ||||
|   GSList *devices, *iter; | ||||
|   char *path; | ||||
|  | ||||
|   manager = g_dbus_object_manager_server_new ("/org/gnome/Mutter/IdleMonitor"); | ||||
|  | ||||
|   /* We never clear the core monitor, as that's supposed to cumulate idle times from | ||||
|      all devices */ | ||||
|   monitor = meta_idle_monitor_get_core (); | ||||
|   path = g_strdup ("/org/gnome/Mutter/IdleMonitor/Core"); | ||||
|   create_monitor_skeleton (manager, monitor, path); | ||||
|   g_free (path); | ||||
|  | ||||
|   device_manager = clutter_device_manager_get_default (); | ||||
|   devices = clutter_device_manager_list_devices (device_manager); | ||||
|  | ||||
|   for (iter = devices; iter; iter = iter->next) | ||||
|     on_device_added (device_manager, iter->data, manager); | ||||
|  | ||||
|   g_slist_free (devices); | ||||
|  | ||||
|   g_signal_connect_object (device_manager, "device-added", | ||||
|                            G_CALLBACK (on_device_added), manager, 0); | ||||
|   g_signal_connect_object (device_manager, "device-removed", | ||||
|                            G_CALLBACK (on_device_removed), manager, 0); | ||||
|  | ||||
|   g_dbus_object_manager_server_set_connection (manager, connection); | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_name_acquired (GDBusConnection *connection, | ||||
|                   const char      *name, | ||||
|                   gpointer         user_data) | ||||
| { | ||||
|   meta_verbose ("Acquired name %s\n", name); | ||||
| } | ||||
|  | ||||
| static void | ||||
| on_name_lost (GDBusConnection *connection, | ||||
|               const char      *name, | ||||
|               gpointer         user_data) | ||||
| { | ||||
|   meta_verbose ("Lost or failed to acquire name %s\n", name); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_idle_monitor_init_dbus (void) | ||||
| { | ||||
|   static int dbus_name_id; | ||||
|  | ||||
|   if (dbus_name_id > 0) | ||||
|     return; | ||||
|  | ||||
|   dbus_name_id = g_bus_own_name (G_BUS_TYPE_SESSION, | ||||
|                                  "org.gnome.Mutter.IdleMonitor", | ||||
|                                  G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT | | ||||
|                                  (meta_get_replace_current_wm () ? | ||||
|                                   G_BUS_NAME_OWNER_FLAGS_REPLACE : 0), | ||||
|                                  on_bus_acquired, | ||||
|                                  on_name_acquired, | ||||
|                                  on_name_lost, | ||||
|                                  NULL, NULL); | ||||
| } | ||||
|  | ||||
							
								
								
									
										40
									
								
								src/core/meta-xrandr-shared.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/core/meta-xrandr-shared.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
| /*  | ||||
|  * Copyright (C) 2013 Red Hat Inc. | ||||
|  *  | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| /* This file is shared between mutter (src/core/meta-xrandr-shared.h) | ||||
|    and gnome-desktop (libgnome-desktop/meta-xrandr-shared.h). | ||||
|  | ||||
|    The canonical place for all changes is mutter. | ||||
|  | ||||
|    There should be no includes in this file. | ||||
| */ | ||||
|  | ||||
| #ifndef META_XRANDR_SHARED_H | ||||
| #define META_XRANDR_SHARED_H | ||||
|  | ||||
| typedef enum { | ||||
|   META_POWER_SAVE_UNSUPPORTED = -1, | ||||
|   META_POWER_SAVE_ON = 0, | ||||
|   META_POWER_SAVE_STANDBY, | ||||
|   META_POWER_SAVE_SUSPEND, | ||||
|   META_POWER_SAVE_OFF, | ||||
| } MetaPowerSave; | ||||
|  | ||||
| #endif | ||||
							
								
								
									
										1854
									
								
								src/core/monitor-config.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1854
									
								
								src/core/monitor-config.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										399
									
								
								src/core/monitor-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										399
									
								
								src/core/monitor-private.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,399 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /** | ||||
|  * \file screen-private.h  Handling of monitor configuration | ||||
|  * | ||||
|  * Managing multiple monitors | ||||
|  * This file contains structures and functions that handle | ||||
|  * multiple monitors, including reading the current configuration | ||||
|  * and available hardware, and applying it. | ||||
|  * | ||||
|  * This interface is private to mutter, API users should look | ||||
|  * at MetaScreen instead. | ||||
|  */ | ||||
|  | ||||
| /*  | ||||
|  * Copyright (C) 2001 Havoc Pennington | ||||
|  * Copyright (C) 2003 Rob Adams | ||||
|  * Copyright (C) 2004-2006 Elijah Newren | ||||
|  * Copyright (C) 2013 Red Hat Inc. | ||||
|  *  | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| #ifndef META_MONITOR_PRIVATE_H | ||||
| #define META_MONITOR_PRIVATE_H | ||||
|  | ||||
| #include <cogl/cogl.h> | ||||
| #include <libgnome-desktop/gnome-pnp-ids.h> | ||||
|  | ||||
| #include "display-private.h" | ||||
| #include <meta/screen.h> | ||||
| #include "stack-tracker.h" | ||||
| #include "ui.h" | ||||
| #ifdef HAVE_WAYLAND | ||||
| #include <wayland-server.h> | ||||
| #endif | ||||
| #include "meta-xrandr-shared.h" | ||||
|  | ||||
| #include "meta-dbus-xrandr.h" | ||||
|  | ||||
| typedef struct _MetaMonitorManagerClass    MetaMonitorManagerClass; | ||||
| typedef struct _MetaMonitorManager         MetaMonitorManager; | ||||
| typedef struct _MetaMonitorConfigClass    MetaMonitorConfigClass; | ||||
| typedef struct _MetaMonitorConfig         MetaMonitorConfig; | ||||
|  | ||||
| #ifndef HAVE_WAYLAND | ||||
| enum wl_output_transform { | ||||
|   WL_OUTPUT_TRANSFORM_NORMAL, | ||||
|   WL_OUTPUT_TRANSFORM_90, | ||||
|   WL_OUTPUT_TRANSFORM_180, | ||||
|   WL_OUTPUT_TRANSFORM_270, | ||||
|   WL_OUTPUT_TRANSFORM_FLIPPED, | ||||
|   WL_OUTPUT_TRANSFORM_FLIPPED_90, | ||||
|   WL_OUTPUT_TRANSFORM_FLIPPED_180, | ||||
|   WL_OUTPUT_TRANSFORM_FLIPPED_270 | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| typedef struct _MetaOutput MetaOutput; | ||||
| typedef struct _MetaCRTC MetaCRTC; | ||||
| typedef struct _MetaMonitorMode MetaMonitorMode; | ||||
| typedef struct _MetaMonitorInfo MetaMonitorInfo; | ||||
| typedef struct _MetaCRTCInfo MetaCRTCInfo; | ||||
| typedef struct _MetaOutputInfo MetaOutputInfo; | ||||
|  | ||||
| struct _MetaOutput | ||||
| { | ||||
|   /* The CRTC driving this output, NULL if the output is not enabled */ | ||||
|   MetaCRTC *crtc; | ||||
|   /* The low-level ID of this output, used to apply back configuration */ | ||||
|   glong output_id; | ||||
|   char *name; | ||||
|   char *vendor; | ||||
|   char *product; | ||||
|   char *serial; | ||||
|   int width_mm; | ||||
|   int height_mm; | ||||
|   CoglSubpixelOrder subpixel_order; | ||||
|  | ||||
|   MetaMonitorMode *preferred_mode; | ||||
|   MetaMonitorMode **modes; | ||||
|   unsigned int n_modes; | ||||
|  | ||||
|   MetaCRTC **possible_crtcs; | ||||
|   unsigned int n_possible_crtcs; | ||||
|  | ||||
|   MetaOutput **possible_clones; | ||||
|   unsigned int n_possible_clones; | ||||
|  | ||||
|   int backlight; | ||||
|   int backlight_min; | ||||
|   int backlight_max; | ||||
|  | ||||
|   /* Used when changing configuration */ | ||||
|   gboolean is_dirty; | ||||
|  | ||||
|   /* The low-level bits used to build the high-level info | ||||
|      in MetaMonitorInfo | ||||
|  | ||||
|      XXX: flags maybe? | ||||
|      There is a lot of code that uses MonitorInfo->is_primary, | ||||
|      but nobody uses MetaOutput yet | ||||
|   */ | ||||
|   gboolean is_primary; | ||||
|   gboolean is_presentation; | ||||
|  | ||||
|   /* get a new preferred mode on hotplug events, to handle dynamic guest resizing */ | ||||
|   gboolean hotplug_mode_update; | ||||
| }; | ||||
|  | ||||
| struct _MetaCRTC | ||||
| { | ||||
|   glong crtc_id; | ||||
|   MetaRectangle rect; | ||||
|   MetaMonitorMode *current_mode; | ||||
|   enum wl_output_transform transform; | ||||
|   unsigned int all_transforms; | ||||
|  | ||||
|   /* Only used to build the logical configuration | ||||
|      from the HW one | ||||
|   */ | ||||
|   MetaMonitorInfo *logical_monitor; | ||||
|  | ||||
|   /* Used when changing configuration */ | ||||
|   gboolean is_dirty; | ||||
| }; | ||||
|  | ||||
| struct _MetaMonitorMode | ||||
| { | ||||
|   /* The low-level ID of this mode, used to apply back configuration */ | ||||
|   glong mode_id; | ||||
|  | ||||
|   int width; | ||||
|   int height; | ||||
|   float refresh_rate; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * MetaMonitorInfo: | ||||
|  * | ||||
|  * A structure with high-level information about monitors. | ||||
|  * This corresponds to a subset of the compositor coordinate space. | ||||
|  * Clones are only reported once, irrespective of the way | ||||
|  * they're implemented (two CRTCs configured for the same | ||||
|  * coordinates or one CRTCs driving two outputs). Inactive CRTCs | ||||
|  * are ignored, and so are disabled outputs. | ||||
|  */ | ||||
| struct _MetaMonitorInfo | ||||
| { | ||||
|   int number; | ||||
|   int xinerama_index; | ||||
|   MetaRectangle rect; | ||||
|   gboolean is_primary; | ||||
|   gboolean is_presentation; /* XXX: not yet used */ | ||||
|   gboolean in_fullscreen; | ||||
|  | ||||
|   /* The primary or first output for this monitor, 0 if we can't figure out. | ||||
|      It can be matched to an output_id of a MetaOutput. | ||||
|  | ||||
|      This is used as an opaque token on reconfiguration when switching from | ||||
|      clone to extened, to decide on what output the windows should go next | ||||
|      (it's an attempt to keep windows on the same monitor, and preferably on | ||||
|      the primary one). | ||||
|   */ | ||||
|   glong output_id; | ||||
| }; | ||||
|  | ||||
| /* | ||||
|  * MetaCRTCInfo: | ||||
|  * This represents the writable part of a CRTC, as deserialized from DBus | ||||
|  * or built by MetaMonitorConfig | ||||
|  * | ||||
|  * Note: differently from the other structures in this file, MetaCRTCInfo | ||||
|  * is handled by pointer. This is to accomodate the usage in MetaMonitorConfig | ||||
|  */ | ||||
| struct _MetaCRTCInfo { | ||||
|   MetaCRTC                 *crtc; | ||||
|   MetaMonitorMode          *mode; | ||||
|   int                       x; | ||||
|   int                       y; | ||||
|   enum wl_output_transform  transform; | ||||
|   GPtrArray                *outputs; | ||||
| }; | ||||
|  | ||||
| /* | ||||
|  * MetaOutputInfo: | ||||
|  * this is the same as MetaOutputInfo, but for CRTCs | ||||
|  */ | ||||
| struct _MetaOutputInfo { | ||||
|   MetaOutput  *output; | ||||
|   gboolean     is_primary; | ||||
|   gboolean     is_presentation; | ||||
| }; | ||||
|  | ||||
| #define META_TYPE_MONITOR_MANAGER            (meta_monitor_manager_get_type ()) | ||||
| #define META_MONITOR_MANAGER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_MONITOR_MANAGER, MetaMonitorManager)) | ||||
| #define META_MONITOR_MANAGER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  META_TYPE_MONITOR_MANAGER, MetaMonitorManagerClass)) | ||||
| #define META_IS_MONITOR_MANAGER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_MONITOR_MANAGER)) | ||||
| #define META_IS_MONITOR_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  META_TYPE_MONITOR_MANAGER)) | ||||
| #define META_MONITOR_MANAGER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  META_TYPE_MONITOR_MANAGER, MetaMonitorManagerClass)) | ||||
|  | ||||
| struct _MetaMonitorManager | ||||
| { | ||||
|   MetaDBusDisplayConfigSkeleton parent_instance; | ||||
|  | ||||
|   /* XXX: this structure is very badly | ||||
|      packed, but I like the logical organization | ||||
|      of fields */ | ||||
|  | ||||
|   gboolean in_init; | ||||
|   unsigned int serial; | ||||
|  | ||||
|   MetaPowerSave power_save_mode; | ||||
|  | ||||
|   int max_screen_width; | ||||
|   int max_screen_height; | ||||
|   int screen_width; | ||||
|   int screen_height; | ||||
|  | ||||
|   /* Outputs refer to physical screens, | ||||
|      CRTCs refer to stuff that can drive outputs | ||||
|      (like encoders, but less tied to the HW), | ||||
|      while monitor_infos refer to logical ones. | ||||
|  | ||||
|      See also the comment in monitor-private.h | ||||
|   */ | ||||
|   MetaOutput *outputs; | ||||
|   unsigned int n_outputs; | ||||
|  | ||||
|   MetaMonitorMode *modes; | ||||
|   unsigned int n_modes; | ||||
|  | ||||
|   MetaCRTC *crtcs; | ||||
|   unsigned int n_crtcs; | ||||
|  | ||||
|   MetaMonitorInfo *monitor_infos; | ||||
|   unsigned int n_monitor_infos; | ||||
|   int primary_monitor_index; | ||||
|  | ||||
|   int dbus_name_id; | ||||
|  | ||||
|   int persistent_timeout_id; | ||||
|   MetaMonitorConfig *config; | ||||
|  | ||||
|   GnomePnpIds *pnp_ids; | ||||
| }; | ||||
|  | ||||
| struct _MetaMonitorManagerClass | ||||
| { | ||||
|   MetaDBusDisplayConfigSkeletonClass parent_class; | ||||
|  | ||||
|   void (*read_current) (MetaMonitorManager *); | ||||
|  | ||||
|   char* (*get_edid_file) (MetaMonitorManager *, | ||||
|                           MetaOutput         *); | ||||
|   GBytes* (*read_edid) (MetaMonitorManager *, | ||||
|                         MetaOutput         *); | ||||
|  | ||||
|   void (*apply_configuration) (MetaMonitorManager  *, | ||||
|                                MetaCRTCInfo       **, | ||||
|                                unsigned int         , | ||||
|                                MetaOutputInfo     **, | ||||
|                                unsigned int); | ||||
|  | ||||
|   void (*set_power_save_mode) (MetaMonitorManager *, | ||||
|                                MetaPowerSave); | ||||
|  | ||||
|   void (*change_backlight) (MetaMonitorManager *, | ||||
|                             MetaOutput         *, | ||||
|                             int); | ||||
|  | ||||
|   void (*get_crtc_gamma) (MetaMonitorManager  *, | ||||
|                           MetaCRTC            *, | ||||
|                           gsize               *, | ||||
|                           unsigned short     **, | ||||
|                           unsigned short     **, | ||||
|                           unsigned short     **); | ||||
|   void (*set_crtc_gamma) (MetaMonitorManager *, | ||||
|                           MetaCRTC           *, | ||||
|                           gsize               , | ||||
|                           unsigned short     *, | ||||
|                           unsigned short     *, | ||||
|                           unsigned short     *); | ||||
|  | ||||
|   gboolean (*handle_xevent) (MetaMonitorManager *, | ||||
|                              XEvent             *); | ||||
| }; | ||||
|  | ||||
| GType meta_monitor_manager_get_type (void); | ||||
|  | ||||
| void                meta_monitor_manager_initialize (void); | ||||
| MetaMonitorManager *meta_monitor_manager_get  (void); | ||||
|  | ||||
| void                meta_monitor_manager_rebuild_derived   (MetaMonitorManager *manager); | ||||
|  | ||||
| MetaMonitorInfo    *meta_monitor_manager_get_monitor_infos (MetaMonitorManager *manager, | ||||
| 							    unsigned int       *n_infos); | ||||
|  | ||||
| MetaOutput         *meta_monitor_manager_get_outputs       (MetaMonitorManager *manager, | ||||
| 							    unsigned int       *n_outputs); | ||||
|  | ||||
| void                meta_monitor_manager_get_resources     (MetaMonitorManager  *manager, | ||||
|                                                             MetaMonitorMode    **modes, | ||||
|                                                             unsigned int        *n_modes, | ||||
|                                                             MetaCRTC           **crtcs, | ||||
|                                                             unsigned int        *n_crtcs, | ||||
|                                                             MetaOutput         **outputs, | ||||
|                                                             unsigned int        *n_outputs); | ||||
|  | ||||
| int                 meta_monitor_manager_get_primary_index (MetaMonitorManager *manager); | ||||
|  | ||||
| gboolean            meta_monitor_manager_handle_xevent     (MetaMonitorManager *manager, | ||||
|                                                             XEvent             *event); | ||||
|  | ||||
| void                meta_monitor_manager_get_screen_size   (MetaMonitorManager *manager, | ||||
|                                                             int                *width, | ||||
|                                                             int                *height); | ||||
|  | ||||
| void                meta_monitor_manager_get_screen_limits (MetaMonitorManager *manager, | ||||
|                                                             int                *width, | ||||
|                                                             int                *height); | ||||
|  | ||||
| void                meta_monitor_manager_apply_configuration (MetaMonitorManager  *manager, | ||||
|                                                               MetaCRTCInfo       **crtcs, | ||||
|                                                               unsigned int         n_crtcs, | ||||
|                                                               MetaOutputInfo     **outputs, | ||||
|                                                               unsigned int         n_outputs); | ||||
|  | ||||
| void                meta_monitor_manager_confirm_configuration (MetaMonitorManager *manager, | ||||
|                                                                 gboolean            ok); | ||||
|  | ||||
| #define META_TYPE_MONITOR_MANAGER_XRANDR            (meta_monitor_manager_xrandr_get_type ()) | ||||
| #define META_MONITOR_MANAGER_XRANDR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_MONITOR_MANAGER_XRANDR, MetaMonitorManagerXrandr)) | ||||
| #define META_MONITOR_MANAGER_XRANDR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  META_TYPE_MONITOR_MANAGER_XRANDR, MetaMonitorManagerXrandrClass)) | ||||
| #define META_IS_MONITOR_MANAGER_XRANDR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_MONITOR_MANAGER_XRANDR)) | ||||
| #define META_IS_MONITOR_MANAGER_XRANDR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  META_TYPE_MONITOR_MANAGER_XRANDR)) | ||||
| #define META_MONITOR_MANAGER_XRANDR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  META_TYPE_MONITOR_MANAGER_XRANDR, MetaMonitorManagerXrandrClass)) | ||||
|  | ||||
| typedef struct _MetaMonitorManagerXrandrClass    MetaMonitorManagerXrandrClass; | ||||
| typedef struct _MetaMonitorManagerXrandr         MetaMonitorManagerXrandr; | ||||
|  | ||||
| GType meta_monitor_manager_xrandr_get_type (void); | ||||
|  | ||||
| #define META_TYPE_MONITOR_CONFIG            (meta_monitor_config_get_type ()) | ||||
| #define META_MONITOR_CONFIG(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_MONITOR_CONFIG, MetaMonitorConfig)) | ||||
| #define META_MONITOR_CONFIG_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  META_TYPE_MONITOR_CONFIG, MetaMonitorConfigClass)) | ||||
| #define META_IS_MONITOR_CONFIG(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_MONITOR_CONFIG)) | ||||
| #define META_IS_MONITOR_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  META_TYPE_MONITOR_CONFIG)) | ||||
| #define META_MONITOR_CONFIG_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  META_TYPE_MONITOR_CONFIG, MetaMonitorConfigClass)) | ||||
|  | ||||
| GType meta_monitor_config_get_type (void) G_GNUC_CONST; | ||||
|  | ||||
| MetaMonitorConfig *meta_monitor_config_new (void); | ||||
|  | ||||
| gboolean           meta_monitor_config_match_current (MetaMonitorConfig  *config, | ||||
|                                                       MetaMonitorManager *manager); | ||||
|  | ||||
| gboolean           meta_monitor_config_apply_stored (MetaMonitorConfig  *config, | ||||
|                                                      MetaMonitorManager *manager); | ||||
|  | ||||
| void               meta_monitor_config_make_default (MetaMonitorConfig  *config, | ||||
|                                                      MetaMonitorManager *manager); | ||||
|  | ||||
| void               meta_monitor_config_update_current (MetaMonitorConfig  *config, | ||||
|                                                        MetaMonitorManager *manager); | ||||
| void               meta_monitor_config_make_persistent (MetaMonitorConfig *config); | ||||
|  | ||||
| void               meta_monitor_config_restore_previous (MetaMonitorConfig  *config, | ||||
|                                                          MetaMonitorManager *manager); | ||||
|  | ||||
| void               meta_crtc_info_free   (MetaCRTCInfo   *info); | ||||
| void               meta_output_info_free (MetaOutputInfo *info); | ||||
|  | ||||
| void               meta_monitor_manager_free_output_array (MetaOutput *old_outputs, | ||||
|                                                            int         n_old_outputs); | ||||
| gboolean           meta_monitor_manager_has_hotplug_mode_update (MetaMonitorManager *manager); | ||||
|  | ||||
| /* Returns true if transform causes width and height to be inverted | ||||
|    This is true for the odd transforms in the enum */ | ||||
| static inline gboolean | ||||
| meta_monitor_transform_is_rotated (enum wl_output_transform transform) | ||||
| { | ||||
|   return (transform % 2); | ||||
| } | ||||
|  | ||||
| #endif | ||||
							
								
								
									
										1133
									
								
								src/core/monitor-xrandr.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1133
									
								
								src/core/monitor-xrandr.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1505
									
								
								src/core/monitor.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1505
									
								
								src/core/monitor.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										299
									
								
								src/core/place.c
									
									
									
									
									
								
							
							
						
						
									
										299
									
								
								src/core/place.c
									
									
									
									
									
								
							| @@ -47,34 +47,18 @@ northwestcmp (gconstpointer a, gconstpointer b) | ||||
| { | ||||
|   MetaWindow *aw = (gpointer) a; | ||||
|   MetaWindow *bw = (gpointer) b; | ||||
|   MetaRectangle a_frame; | ||||
|   MetaRectangle b_frame; | ||||
|   int from_origin_a; | ||||
|   int from_origin_b; | ||||
|   int ax, ay, bx, by; | ||||
|  | ||||
|   /* we're interested in the frame position for cascading, | ||||
|    * not meta_window_get_position() | ||||
|    */ | ||||
|   if (aw->frame) | ||||
|     { | ||||
|       ax = aw->frame->rect.x; | ||||
|       ay = aw->frame->rect.y; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       ax = aw->rect.x; | ||||
|       ay = aw->rect.y; | ||||
|     } | ||||
|  | ||||
|   if (bw->frame) | ||||
|     { | ||||
|       bx = bw->frame->rect.x; | ||||
|       by = bw->frame->rect.y; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       bx = bw->rect.x; | ||||
|       by = bw->rect.y; | ||||
|     } | ||||
|   meta_window_get_frame_rect (aw, &a_frame); | ||||
|   meta_window_get_frame_rect (bw, &b_frame); | ||||
|   ax = a_frame.x; | ||||
|   ay = a_frame.y; | ||||
|   bx = b_frame.x; | ||||
|   by = b_frame.y; | ||||
|    | ||||
|   /* probably there's a fast good-enough-guess we could use here. */ | ||||
|   from_origin_a = sqrt (ax * ax + ay * ay); | ||||
| @@ -90,7 +74,6 @@ northwestcmp (gconstpointer a, gconstpointer b) | ||||
|  | ||||
| static void | ||||
| find_next_cascade (MetaWindow *window, | ||||
|                    MetaFrameBorders *borders, | ||||
|                    /* visible windows on relevant workspaces */ | ||||
|                    GList      *windows, | ||||
|                    int         x, | ||||
| @@ -102,6 +85,7 @@ find_next_cascade (MetaWindow *window, | ||||
|   GList *sorted; | ||||
|   int cascade_x, cascade_y; | ||||
|   int x_threshold, y_threshold; | ||||
|   MetaRectangle frame_rect; | ||||
|   int window_width, window_height; | ||||
|   int cascade_stage; | ||||
|   MetaRectangle work_area; | ||||
| @@ -120,10 +104,13 @@ find_next_cascade (MetaWindow *window, | ||||
|    * manually cascade. | ||||
|    */ | ||||
| #define CASCADE_FUZZ 15 | ||||
|   if (borders) | ||||
|   if (window->frame) | ||||
|     { | ||||
|       x_threshold = MAX (borders->visible.left, CASCADE_FUZZ); | ||||
|       y_threshold = MAX (borders->visible.top, CASCADE_FUZZ); | ||||
|       MetaFrameBorders borders; | ||||
|  | ||||
|       meta_frame_calc_borders (window->frame, &borders); | ||||
|       x_threshold = MAX (borders.visible.left, CASCADE_FUZZ); | ||||
|       y_threshold = MAX (borders.visible.top, CASCADE_FUZZ); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
| @@ -143,30 +130,25 @@ find_next_cascade (MetaWindow *window, | ||||
|   cascade_y = MAX (0, work_area.y); | ||||
|    | ||||
|   /* Find first cascade position that's not used. */ | ||||
|    | ||||
|   window_width = window->frame ? window->frame->rect.width : window->rect.width; | ||||
|   window_height = window->frame ? window->frame->rect.height : window->rect.height; | ||||
|  | ||||
|   meta_window_get_frame_rect (window, &frame_rect); | ||||
|   window_width = frame_rect.width; | ||||
|   window_height = frame_rect.height; | ||||
|    | ||||
|   cascade_stage = 0; | ||||
|   tmp = sorted; | ||||
|   while (tmp != NULL) | ||||
|     { | ||||
|       MetaWindow *w; | ||||
|       MetaRectangle w_frame_rect; | ||||
|       int wx, wy; | ||||
|        | ||||
|       w = tmp->data; | ||||
|  | ||||
|       /* we want frame position, not window position */ | ||||
|       if (w->frame) | ||||
|         { | ||||
|           wx = w->frame->rect.x; | ||||
|           wy = w->frame->rect.y; | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           wx = w->rect.x; | ||||
|           wy = w->rect.y; | ||||
|         } | ||||
|       meta_window_get_frame_rect (w, &w_frame_rect); | ||||
|       wx = w_frame_rect.x; | ||||
|       wy = w_frame_rect.y; | ||||
|        | ||||
|       if (ABS (wx - cascade_x) < x_threshold && | ||||
|           ABS (wy - cascade_y) < y_threshold) | ||||
| @@ -223,22 +205,12 @@ find_next_cascade (MetaWindow *window, | ||||
|    | ||||
|   g_list_free (sorted); | ||||
|  | ||||
|   /* Convert coords to position of window, not position of frame. */ | ||||
|   if (borders == NULL) | ||||
|     { | ||||
|       *new_x = cascade_x; | ||||
|       *new_y = cascade_y; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       *new_x = cascade_x + borders->visible.left; | ||||
|       *new_y = cascade_y + borders->visible.top; | ||||
|     } | ||||
|   *new_x = cascade_x; | ||||
|   *new_y = cascade_y; | ||||
| } | ||||
|  | ||||
| static void | ||||
| find_most_freespace (MetaWindow *window, | ||||
|                      MetaFrameBorders *borders, | ||||
|                      /* visible windows on relevant workspaces */ | ||||
|                      MetaWindow *focus_window, | ||||
|                      int         x, | ||||
| @@ -250,29 +222,25 @@ find_most_freespace (MetaWindow *window, | ||||
|   int max_area; | ||||
|   int max_width, max_height, left, right, top, bottom; | ||||
|   int left_space, right_space, top_space, bottom_space; | ||||
|   int frame_size_left, frame_size_top; | ||||
|   MetaRectangle work_area; | ||||
|   MetaRectangle avoid; | ||||
|   MetaRectangle outer; | ||||
|  | ||||
|   frame_size_left = borders ? borders->visible.left : 0; | ||||
|   frame_size_top  = borders ? borders->visible.top : 0; | ||||
|   MetaRectangle frame_rect; | ||||
|  | ||||
|   meta_window_get_work_area_current_monitor (focus_window, &work_area); | ||||
|   meta_window_get_outer_rect (focus_window, &avoid); | ||||
|   meta_window_get_outer_rect (window, &outer); | ||||
|   meta_window_get_frame_rect (focus_window, &avoid); | ||||
|   meta_window_get_frame_rect (window, &frame_rect); | ||||
|  | ||||
|   /* Find the areas of choosing the various sides of the focus window */ | ||||
|   max_width  = MIN (avoid.width, outer.width); | ||||
|   max_height = MIN (avoid.height, outer.height); | ||||
|   max_width  = MIN (avoid.width, frame_rect.width); | ||||
|   max_height = MIN (avoid.height, frame_rect.height); | ||||
|   left_space   = avoid.x - work_area.x; | ||||
|   right_space  = work_area.width - (avoid.x + avoid.width - work_area.x); | ||||
|   top_space    = avoid.y - work_area.y; | ||||
|   bottom_space = work_area.height - (avoid.y + avoid.height - work_area.y); | ||||
|   left   = MIN (left_space,   outer.width); | ||||
|   right  = MIN (right_space,  outer.width); | ||||
|   top    = MIN (top_space,    outer.height); | ||||
|   bottom = MIN (bottom_space, outer.height); | ||||
|   left   = MIN (left_space,   frame_rect.width); | ||||
|   right  = MIN (right_space,  frame_rect.width); | ||||
|   top    = MIN (top_space,    frame_rect.height); | ||||
|   bottom = MIN (bottom_space, frame_rect.height); | ||||
|  | ||||
|   /* Find out which side of the focus_window can show the most of the window */ | ||||
|   side = META_LEFT; | ||||
| @@ -304,39 +272,56 @@ find_most_freespace (MetaWindow *window, | ||||
|   switch (side) | ||||
|     { | ||||
|     case META_LEFT: | ||||
|       *new_y = avoid.y + frame_size_top; | ||||
|       if (left_space > outer.width) | ||||
|         *new_x = avoid.x - outer.width + frame_size_left; | ||||
|       *new_y = avoid.y; | ||||
|       if (left_space > frame_rect.width) | ||||
|         *new_x = avoid.x - frame_rect.width; | ||||
|       else | ||||
|         *new_x = work_area.x + frame_size_left; | ||||
|         *new_x = work_area.x; | ||||
|       break; | ||||
|     case META_RIGHT: | ||||
|       *new_y = avoid.y + frame_size_top; | ||||
|       if (right_space > outer.width) | ||||
|         *new_x = avoid.x + avoid.width + frame_size_left; | ||||
|       *new_y = avoid.y; | ||||
|       if (right_space > frame_rect.width) | ||||
|         *new_x = avoid.x + avoid.width; | ||||
|       else | ||||
|         *new_x = work_area.x + work_area.width - outer.width + frame_size_left; | ||||
|         *new_x = work_area.x + work_area.width - frame_rect.width; | ||||
|       break; | ||||
|     case META_TOP: | ||||
|       *new_x = avoid.x + frame_size_left; | ||||
|       if (top_space > outer.height) | ||||
|         *new_y = avoid.y - outer.height + frame_size_top; | ||||
|       *new_x = avoid.x; | ||||
|       if (top_space > frame_rect.height) | ||||
|         *new_y = avoid.y - frame_rect.height; | ||||
|       else | ||||
|         *new_y = work_area.y + frame_size_top; | ||||
|         *new_y = work_area.y; | ||||
|       break; | ||||
|     case META_BOTTOM: | ||||
|       *new_x = avoid.x + frame_size_left; | ||||
|       if (bottom_space > outer.height) | ||||
|         *new_y = avoid.y + avoid.height + frame_size_top; | ||||
|       *new_x = avoid.x; | ||||
|       if (bottom_space > frame_rect.height) | ||||
|         *new_y = avoid.y + avoid.height; | ||||
|       else | ||||
|         *new_y = work_area.y + work_area.height - outer.height + frame_size_top; | ||||
|         *new_y = work_area.y + work_area.height - frame_rect.height; | ||||
|       break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| window_overlaps_focus_window (MetaWindow *window) | ||||
| { | ||||
|   MetaWindow *focus_window; | ||||
|   MetaRectangle window_frame, focus_frame, overlap; | ||||
|  | ||||
|   focus_window = window->display->focus_window; | ||||
|   if (focus_window == NULL) | ||||
|     return FALSE; | ||||
|  | ||||
|   meta_window_get_frame_rect (window, &window_frame); | ||||
|   meta_window_get_frame_rect (focus_window, &focus_frame); | ||||
|  | ||||
|   return meta_rectangle_intersect (&window_frame, | ||||
|                                    &focus_frame, | ||||
|                                    &overlap); | ||||
| } | ||||
|  | ||||
| static void | ||||
| avoid_being_obscured_as_second_modal_dialog (MetaWindow *window, | ||||
|                                              MetaFrameBorders *borders, | ||||
|                                              int        *x, | ||||
|                                              int        *y) | ||||
| { | ||||
| @@ -355,18 +340,17 @@ avoid_being_obscured_as_second_modal_dialog (MetaWindow *window, | ||||
|    */ | ||||
|  | ||||
|   MetaWindow *focus_window; | ||||
|   MetaRectangle overlap; | ||||
|  | ||||
|   focus_window = window->display->focus_window; | ||||
|  | ||||
|   /* denied_focus_and_not_transient is only set when focus_window != NULL */ | ||||
|  | ||||
|   if (window->denied_focus_and_not_transient && | ||||
|       window->wm_state_modal && /* FIXME: Maybe do this for all transients? */ | ||||
|       meta_window_same_application (window, focus_window) && | ||||
|       meta_rectangle_intersect (&window->rect, | ||||
|                                 &focus_window->rect, | ||||
|                                 &overlap)) | ||||
|       window_overlaps_focus_window (window)) | ||||
|     { | ||||
|       find_most_freespace (window, borders, focus_window, *x, *y, x, y); | ||||
|       find_most_freespace (window, focus_window, *x, *y, x, y); | ||||
|       meta_topic (META_DEBUG_PLACEMENT, | ||||
|                   "Dialog window %s was denied focus but may be modal " | ||||
|                   "to the focus window; had to move it to avoid the " | ||||
| @@ -409,7 +393,7 @@ rectangle_overlaps_some_window (MetaRectangle *rect, | ||||
|         case META_WINDOW_UTILITY: | ||||
|         case META_WINDOW_TOOLBAR: | ||||
|         case META_WINDOW_MENU: | ||||
|           meta_window_get_outer_rect (other, &other_rect); | ||||
|           meta_window_get_frame_rect (other, &other_rect); | ||||
|            | ||||
|           if (meta_rectangle_intersect (rect, &other_rect, &dest)) | ||||
|             return TRUE; | ||||
| @@ -427,20 +411,14 @@ leftmost_cmp (gconstpointer a, gconstpointer b) | ||||
| { | ||||
|   MetaWindow *aw = (gpointer) a; | ||||
|   MetaWindow *bw = (gpointer) b; | ||||
|   MetaRectangle a_frame; | ||||
|   MetaRectangle b_frame; | ||||
|   int ax, bx; | ||||
|  | ||||
|   /* we're interested in the frame position for cascading, | ||||
|    * not meta_window_get_position() | ||||
|    */ | ||||
|   if (aw->frame) | ||||
|     ax = aw->frame->rect.x; | ||||
|   else | ||||
|     ax = aw->rect.x; | ||||
|  | ||||
|   if (bw->frame) | ||||
|     bx = bw->frame->rect.x; | ||||
|   else | ||||
|     bx = bw->rect.x; | ||||
|   meta_window_get_frame_rect (aw, &a_frame); | ||||
|   meta_window_get_frame_rect (bw, &b_frame); | ||||
|   ax = a_frame.x; | ||||
|   bx = b_frame.x; | ||||
|  | ||||
|   if (ax < bx) | ||||
|     return -1; | ||||
| @@ -455,20 +433,14 @@ topmost_cmp (gconstpointer a, gconstpointer b) | ||||
| { | ||||
|   MetaWindow *aw = (gpointer) a; | ||||
|   MetaWindow *bw = (gpointer) b; | ||||
|   MetaRectangle a_frame; | ||||
|   MetaRectangle b_frame; | ||||
|   int ay, by; | ||||
|  | ||||
|   /* we're interested in the frame position for cascading, | ||||
|    * not meta_window_get_position() | ||||
|    */ | ||||
|   if (aw->frame) | ||||
|     ay = aw->frame->rect.y; | ||||
|   else | ||||
|     ay = aw->rect.y; | ||||
|  | ||||
|   if (bw->frame) | ||||
|     by = bw->frame->rect.y; | ||||
|   else | ||||
|     by = bw->rect.y; | ||||
|   meta_window_get_frame_rect (aw, &a_frame); | ||||
|   meta_window_get_frame_rect (bw, &b_frame); | ||||
|   ay = a_frame.y; | ||||
|   by = b_frame.y; | ||||
|  | ||||
|   if (ay < by) | ||||
|     return -1; | ||||
| @@ -506,7 +478,6 @@ center_tile_rect_in_area (MetaRectangle *rect, | ||||
|  */ | ||||
| static gboolean | ||||
| find_first_fit (MetaWindow *window, | ||||
|                 MetaFrameBorders *borders, | ||||
|                 /* visible windows on relevant workspaces */ | ||||
|                 GList      *windows, | ||||
| 		int         monitor, | ||||
| @@ -540,15 +511,8 @@ find_first_fit (MetaWindow *window, | ||||
|   right_sorted = g_list_copy (windows); | ||||
|   right_sorted = g_list_sort (right_sorted, topmost_cmp); | ||||
|   right_sorted = g_list_sort (right_sorted, leftmost_cmp); | ||||
|    | ||||
|   rect.width = window->rect.width; | ||||
|   rect.height = window->rect.height; | ||||
|    | ||||
|   if (borders) | ||||
|     { | ||||
|       rect.width += borders->visible.left + borders->visible.right; | ||||
|       rect.height += borders->visible.top + borders->visible.bottom; | ||||
|     } | ||||
|  | ||||
|   meta_window_get_frame_rect (window, &rect); | ||||
|  | ||||
| #ifdef WITH_VERBOSE_MODE | ||||
|     { | ||||
| @@ -570,11 +534,6 @@ find_first_fit (MetaWindow *window, | ||||
|       { | ||||
|         *new_x = rect.x; | ||||
|         *new_y = rect.y; | ||||
|         if (borders) | ||||
|           { | ||||
|             *new_x += borders->visible.left; | ||||
|             *new_y += borders->visible.top; | ||||
|           } | ||||
|      | ||||
|         retval = TRUE; | ||||
|         | ||||
| @@ -586,23 +545,18 @@ find_first_fit (MetaWindow *window, | ||||
|     while (tmp != NULL) | ||||
|       { | ||||
|         MetaWindow *w = tmp->data; | ||||
|         MetaRectangle outer_rect; | ||||
|         MetaRectangle frame_rect; | ||||
|  | ||||
|         meta_window_get_outer_rect (w, &outer_rect); | ||||
|         meta_window_get_frame_rect (w, &frame_rect); | ||||
|        | ||||
|         rect.x = outer_rect.x; | ||||
|         rect.y = outer_rect.y + outer_rect.height; | ||||
|         rect.x = frame_rect.x; | ||||
|         rect.y = frame_rect.y + frame_rect.height; | ||||
|        | ||||
|         if (meta_rectangle_contains_rect (&work_area, &rect) && | ||||
|             !rectangle_overlaps_some_window (&rect, below_sorted)) | ||||
|           { | ||||
|             *new_x = rect.x; | ||||
|             *new_y = rect.y; | ||||
|             if (borders) | ||||
|               { | ||||
|                 *new_x += borders->visible.left; | ||||
|                 *new_y += borders->visible.top; | ||||
|               } | ||||
|            | ||||
|             retval = TRUE; | ||||
|            | ||||
| @@ -617,23 +571,18 @@ find_first_fit (MetaWindow *window, | ||||
|     while (tmp != NULL) | ||||
|       { | ||||
|         MetaWindow *w = tmp->data; | ||||
|         MetaRectangle outer_rect; | ||||
|         MetaRectangle frame_rect; | ||||
|     | ||||
|         meta_window_get_outer_rect (w, &outer_rect); | ||||
|         meta_window_get_frame_rect (w, &frame_rect); | ||||
|       | ||||
|         rect.x = outer_rect.x + outer_rect.width; | ||||
|         rect.y = outer_rect.y; | ||||
|         rect.x = frame_rect.x + frame_rect.width; | ||||
|         rect.y = frame_rect.y; | ||||
|     | ||||
|         if (meta_rectangle_contains_rect (&work_area, &rect) && | ||||
|             !rectangle_overlaps_some_window (&rect, right_sorted)) | ||||
|           { | ||||
|             *new_x = rect.x; | ||||
|             *new_y = rect.y; | ||||
|             if (borders) | ||||
|               { | ||||
|                 *new_x += borders->visible.left; | ||||
|                 *new_y += borders->visible.top; | ||||
|               } | ||||
|          | ||||
|             retval = TRUE; | ||||
|         | ||||
| @@ -652,7 +601,6 @@ find_first_fit (MetaWindow *window, | ||||
|  | ||||
| void | ||||
| meta_window_place (MetaWindow        *window, | ||||
|                    MetaFrameBorders  *borders, | ||||
|                    int                x, | ||||
|                    int                y, | ||||
|                    int               *new_x, | ||||
| @@ -661,13 +609,6 @@ meta_window_place (MetaWindow        *window, | ||||
|   GList *windows; | ||||
|   const MetaMonitorInfo *xi; | ||||
|  | ||||
|   /* frame member variables should NEVER be used in here, only | ||||
|    * MetaFrameBorders. But remember borders == NULL | ||||
|    * for undecorated windows. Also, this function should | ||||
|    * NEVER have side effects other than computing the | ||||
|    * placement coordinates. | ||||
|    */ | ||||
|  | ||||
|   meta_topic (META_DEBUG_PLACEMENT, "Placing window %s\n", window->desc); | ||||
|  | ||||
|   windows = NULL; | ||||
| @@ -756,7 +697,7 @@ meta_window_place (MetaWindow        *window, | ||||
|         { | ||||
|           meta_topic (META_DEBUG_PLACEMENT, | ||||
|                       "Not placing window with PPosition or USPosition set\n"); | ||||
|           avoid_being_obscured_as_second_modal_dialog (window, borders, &x, &y); | ||||
|           avoid_being_obscured_as_second_modal_dialog (window, &x, &y); | ||||
|           goto done_no_constraints; | ||||
|         } | ||||
|     } | ||||
| @@ -775,29 +716,27 @@ meta_window_place (MetaWindow        *window, | ||||
|  | ||||
|       if (parent) | ||||
|         { | ||||
|           int w; | ||||
|           MetaRectangle frame_rect, parent_frame_rect; | ||||
|  | ||||
|           meta_window_get_position (parent, &x, &y); | ||||
|           w = parent->rect.width; | ||||
|           meta_window_get_frame_rect (window, &frame_rect); | ||||
|           meta_window_get_frame_rect (parent, &parent_frame_rect); | ||||
|  | ||||
|           y = parent_frame_rect.y; | ||||
|  | ||||
|           /* center of parent */ | ||||
|           x = x + w / 2; | ||||
|           x = parent_frame_rect.x + parent_frame_rect.width / 2; | ||||
|           /* center of child over center of parent */ | ||||
|           x -= window->rect.width / 2; | ||||
|           x -= frame_rect.width / 2; | ||||
|  | ||||
|           /* "visually" center window over parent, leaving twice as | ||||
|            * much space below as on top. | ||||
|            */ | ||||
|           y += (parent->rect.height - window->rect.height)/3; | ||||
|  | ||||
|           /* put top of child's frame, not top of child's client */ | ||||
|           if (borders) | ||||
|             y += borders->visible.top; | ||||
|           y += (parent_frame_rect.height - frame_rect.height)/3; | ||||
|  | ||||
|           meta_topic (META_DEBUG_PLACEMENT, "Centered window %s over transient parent\n", | ||||
|                       window->desc); | ||||
|            | ||||
|           avoid_being_obscured_as_second_modal_dialog (window, borders, &x, &y); | ||||
|           avoid_being_obscured_as_second_modal_dialog (window, &x, &y); | ||||
|  | ||||
|           goto done; | ||||
|         } | ||||
| @@ -813,6 +752,9 @@ meta_window_place (MetaWindow        *window, | ||||
|     { | ||||
|       /* Center on current monitor */ | ||||
|       int w, h; | ||||
|       MetaRectangle frame_rect; | ||||
|  | ||||
|       meta_window_get_frame_rect (window, &frame_rect); | ||||
|  | ||||
|       /* Warning, this function is a round trip! */ | ||||
|       xi = meta_screen_get_current_monitor_info (window->screen); | ||||
| @@ -820,8 +762,8 @@ meta_window_place (MetaWindow        *window, | ||||
|       w = xi->rect.width; | ||||
|       h = xi->rect.height; | ||||
|  | ||||
|       x = (w - window->rect.width) / 2; | ||||
|       y = (h - window->rect.height) / 2; | ||||
|       x = (w - frame_rect.width) / 2; | ||||
|       y = (h - frame_rect.height) / 2; | ||||
|  | ||||
|       x += xi->rect.x; | ||||
|       y += xi->rect.y; | ||||
| @@ -865,7 +807,7 @@ meta_window_place (MetaWindow        *window, | ||||
|   x = xi->rect.x; | ||||
|   y = xi->rect.y; | ||||
|  | ||||
|   if (find_first_fit (window, borders, windows, | ||||
|   if (find_first_fit (window, windows, | ||||
|                       xi->number, | ||||
|                       x, y, &x, &y)) | ||||
|     goto done_check_denied_focus; | ||||
| @@ -878,17 +820,17 @@ meta_window_place (MetaWindow        *window, | ||||
|       !window->fullscreen) | ||||
|     { | ||||
|       MetaRectangle workarea; | ||||
|       MetaRectangle outer; | ||||
|       MetaRectangle frame_rect; | ||||
|  | ||||
|       meta_window_get_work_area_for_monitor (window, | ||||
|                                              xi->number, | ||||
|                                              &workarea);       | ||||
|       meta_window_get_outer_rect (window, &outer); | ||||
|       meta_window_get_frame_rect (window, &frame_rect); | ||||
|        | ||||
|       /* If the window is bigger than the screen, then automaximize.  Do NOT | ||||
|        * auto-maximize the directions independently.  See #419810. | ||||
|        */ | ||||
|       if (outer.width >= workarea.width && outer.height >= workarea.height) | ||||
|       if (frame_rect.width >= workarea.width && frame_rect.height >= workarea.height) | ||||
|         { | ||||
|           window->maximize_horizontally_after_placement = TRUE; | ||||
|           window->maximize_vertically_after_placement = TRUE; | ||||
| @@ -899,7 +841,7 @@ meta_window_place (MetaWindow        *window, | ||||
|    * fully overlapping window (e.g. starting multiple terminals) | ||||
|    * */ | ||||
|   if (x == xi->rect.x && y == xi->rect.y)   | ||||
|     find_next_cascade (window, borders, windows, x, y, &x, &y); | ||||
|     find_next_cascade (window, windows, x, y, &x, &y); | ||||
|  | ||||
|  done_check_denied_focus: | ||||
|   /* If the window is being denied focus and isn't a transient of the | ||||
| @@ -909,17 +851,14 @@ meta_window_place (MetaWindow        *window, | ||||
|    */ | ||||
|   if (window->denied_focus_and_not_transient) | ||||
|     { | ||||
|       gboolean       found_fit; | ||||
|       MetaWindow    *focus_window; | ||||
|       MetaRectangle  overlap; | ||||
|       gboolean       found_fit; | ||||
|  | ||||
|       focus_window = window->display->focus_window; | ||||
|       g_assert (focus_window != NULL); | ||||
|  | ||||
|       /* No need to do anything if the window doesn't overlap at all */ | ||||
|       found_fit = !meta_rectangle_intersect (&window->rect, | ||||
|                                              &focus_window->rect, | ||||
|                                              &overlap); | ||||
|       found_fit = !window_overlaps_focus_window (window); | ||||
|  | ||||
|       /* Try to do a first fit again, this time only taking into account the | ||||
|        * focus window. | ||||
| @@ -933,7 +872,7 @@ meta_window_place (MetaWindow        *window, | ||||
|           x = xi->rect.x; | ||||
|           y = xi->rect.y; | ||||
|  | ||||
|           found_fit = find_first_fit (window, borders, focus_window_list, | ||||
|           found_fit = find_first_fit (window, focus_window_list, | ||||
|                                       xi->number, | ||||
|                                       x, y, &x, &y); | ||||
|           g_list_free (focus_window_list); | ||||
| @@ -943,7 +882,7 @@ meta_window_place (MetaWindow        *window, | ||||
|        * as possible. | ||||
|        */ | ||||
|       if (!found_fit) | ||||
|         find_most_freespace (window, borders, focus_window, x, y, &x, &y); | ||||
|         find_most_freespace (window, focus_window, x, y, &x, &y); | ||||
|     } | ||||
|    | ||||
|  done: | ||||
|   | ||||
| @@ -28,7 +28,6 @@ | ||||
| #include "frame.h" | ||||
|  | ||||
| void meta_window_place (MetaWindow *window, | ||||
|                         MetaFrameBorders *borders, | ||||
|                         int         x, | ||||
|                         int         y, | ||||
|                         int        *new_x, | ||||
|   | ||||
							
								
								
									
										298
									
								
								src/core/prefs.c
									
									
									
									
									
								
							
							
						
						
									
										298
									
								
								src/core/prefs.c
									
									
									
									
									
								
							| @@ -55,6 +55,7 @@ | ||||
| #define KEY_GNOME_ANIMATIONS "enable-animations" | ||||
| #define KEY_GNOME_CURSOR_THEME "cursor-theme" | ||||
| #define KEY_GNOME_CURSOR_SIZE "cursor-size" | ||||
| #define KEY_XKB_OPTIONS "xkb-options" | ||||
|  | ||||
| #define KEY_OVERLAY_KEY "overlay-key" | ||||
| #define KEY_WORKSPACES_ONLY_ON_PRIMARY "workspaces-only-on-primary" | ||||
| @@ -65,6 +66,7 @@ | ||||
| #define SCHEMA_GENERAL         "org.gnome.desktop.wm.preferences" | ||||
| #define SCHEMA_MUTTER          "org.gnome.mutter" | ||||
| #define SCHEMA_INTERFACE       "org.gnome.desktop.interface" | ||||
| #define SCHEMA_INPUT_SOURCES   "org.gnome.desktop.input-sources" | ||||
|  | ||||
| #define SETTINGS(s) g_hash_table_lookup (settings_schemas, (s)) | ||||
|  | ||||
| @@ -87,7 +89,6 @@ static GDesktopTitlebarAction action_double_click_titlebar = G_DESKTOP_TITLEBAR_ | ||||
| static GDesktopTitlebarAction action_middle_click_titlebar = G_DESKTOP_TITLEBAR_ACTION_LOWER; | ||||
| static GDesktopTitlebarAction action_right_click_titlebar = G_DESKTOP_TITLEBAR_ACTION_MENU; | ||||
| static gboolean dynamic_workspaces = FALSE; | ||||
| static gboolean application_based = FALSE; | ||||
| static gboolean disable_workarounds = FALSE; | ||||
| static gboolean auto_raise = FALSE; | ||||
| static gboolean auto_raise_delay = 500; | ||||
| @@ -115,6 +116,7 @@ static gboolean workspaces_only_on_primary = FALSE; | ||||
|  | ||||
| static gboolean no_tab_popup = FALSE; | ||||
|  | ||||
| static char *iso_next_group_option = NULL; | ||||
|  | ||||
| static void handle_preference_update_enum (GSettings *settings, | ||||
|                                            gchar     *key); | ||||
| @@ -122,7 +124,6 @@ static gboolean update_binding         (MetaKeyPref *binding, | ||||
|                                         gchar      **strokes); | ||||
| static gboolean update_key_binding     (const char  *key, | ||||
|                                         gchar      **strokes); | ||||
| static gboolean update_workspace_names (void); | ||||
|  | ||||
| static void settings_changed (GSettings      *settings, | ||||
|                               gchar          *key, | ||||
| @@ -140,11 +141,11 @@ static gboolean theme_name_handler (GVariant*, gpointer*, gpointer); | ||||
| static gboolean mouse_button_mods_handler (GVariant*, gpointer*, gpointer); | ||||
| static gboolean button_layout_handler (GVariant*, gpointer*, gpointer); | ||||
| static gboolean overlay_key_handler (GVariant*, gpointer*, gpointer); | ||||
| static gboolean iso_next_group_handler (GVariant*, gpointer*, gpointer); | ||||
|  | ||||
| static void     do_override               (char *key, char *schema); | ||||
|  | ||||
| static void     init_bindings             (void); | ||||
| static void     init_workspace_names      (void); | ||||
|  | ||||
|  | ||||
| typedef struct | ||||
| @@ -198,6 +199,13 @@ typedef struct | ||||
|   gchar **target; | ||||
| } MetaStringPreference; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   MetaBasePreference base; | ||||
|   GSettingsGetMapping handler; | ||||
|   gchar ***target; | ||||
| } MetaStringArrayPreference; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   MetaBasePreference base; | ||||
| @@ -289,13 +297,6 @@ static MetaBoolPreference preferences_bool[] = | ||||
|       }, | ||||
|       &dynamic_workspaces, | ||||
|     }, | ||||
|     { | ||||
|       { "application-based", | ||||
|         SCHEMA_GENERAL, | ||||
|         META_PREF_APPLICATION_BASED, | ||||
|       }, | ||||
|       NULL, /* feature is known but disabled */ | ||||
|     }, | ||||
|     { | ||||
|       { "disable-workarounds", | ||||
|         SCHEMA_GENERAL, | ||||
| @@ -436,6 +437,27 @@ static MetaStringPreference preferences_string[] = | ||||
|     { { NULL, 0, 0 }, NULL }, | ||||
|   }; | ||||
|  | ||||
| static MetaStringArrayPreference preferences_string_array[] = | ||||
|   { | ||||
|     { | ||||
|       { KEY_WORKSPACE_NAMES, | ||||
|         SCHEMA_GENERAL, | ||||
|         META_PREF_KEYBINDINGS, | ||||
|       }, | ||||
|       NULL, | ||||
|       &workspace_names, | ||||
|     }, | ||||
|     { | ||||
|       { KEY_XKB_OPTIONS, | ||||
|         SCHEMA_INPUT_SOURCES, | ||||
|         META_PREF_KEYBINDINGS, | ||||
|       }, | ||||
|       iso_next_group_handler, | ||||
|       NULL, | ||||
|     }, | ||||
|     { { NULL, 0, 0 }, NULL }, | ||||
|   }; | ||||
|  | ||||
| static MetaIntPreference preferences_int[] = | ||||
|   { | ||||
|     { | ||||
| @@ -555,6 +577,42 @@ handle_preference_init_string (void) | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| handle_preference_init_string_array (void) | ||||
| { | ||||
|   MetaStringArrayPreference *cursor = preferences_string_array; | ||||
|  | ||||
|   while (cursor->base.key != NULL) | ||||
|     { | ||||
|       char **value; | ||||
|  | ||||
|       /* Complex keys have a mapping function to check validity */ | ||||
|       if (cursor->handler) | ||||
|         { | ||||
|           if (cursor->target) | ||||
|             meta_bug ("%s has both a target and a handler\n", cursor->base.key); | ||||
|  | ||||
|           g_settings_get_mapped (SETTINGS (cursor->base.schema), | ||||
|                                  cursor->base.key, cursor->handler, NULL); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           if (!cursor->target) | ||||
|             meta_bug ("%s must have handler or target\n", cursor->base.key); | ||||
|  | ||||
|           if (*(cursor->target)) | ||||
|             g_strfreev (*(cursor->target)); | ||||
|  | ||||
|           value = g_settings_get_strv (SETTINGS (cursor->base.schema), | ||||
|                                        cursor->base.key); | ||||
|  | ||||
|           *(cursor->target) = value; | ||||
|         } | ||||
|  | ||||
|       ++cursor; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| handle_preference_init_int (void) | ||||
| { | ||||
| @@ -673,6 +731,56 @@ handle_preference_update_string (GSettings *settings, | ||||
|     queue_changed (cursor->base.pref); | ||||
| } | ||||
|  | ||||
| static void | ||||
| handle_preference_update_string_array (GSettings *settings, | ||||
|                                        gchar *key) | ||||
| { | ||||
|   MetaStringArrayPreference *cursor = preferences_string_array; | ||||
|   gboolean inform_listeners = FALSE; | ||||
|  | ||||
|   while (cursor->base.key != NULL && strcmp (key, cursor->base.key) != 0) | ||||
|     ++cursor; | ||||
|  | ||||
|   if (cursor->base.key==NULL) | ||||
|     /* Didn't recognise that key. */ | ||||
|     return; | ||||
|  | ||||
|   /* Complex keys have a mapping function to check validity */ | ||||
|   if (cursor->handler) | ||||
|     { | ||||
|       if (cursor->target) | ||||
|         meta_bug ("%s has both a target and a handler\n", cursor->base.key); | ||||
|  | ||||
|       g_settings_get_mapped (SETTINGS (cursor->base.schema), | ||||
|                              cursor->base.key, cursor->handler, NULL); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       char **values, **previous; | ||||
|       int n_values, n_previous, i; | ||||
|  | ||||
|       if (!cursor->target) | ||||
|         meta_bug ("%s must have handler or target\n", cursor->base.key); | ||||
|  | ||||
|       values = g_settings_get_strv (SETTINGS (cursor->base.schema), | ||||
|                                     cursor->base.key); | ||||
|       n_values = g_strv_length (values); | ||||
|       previous = *(cursor->target); | ||||
|       n_previous = previous ? g_strv_length (previous) : 0; | ||||
|  | ||||
|       inform_listeners = n_previous != n_values; | ||||
|       for (i = 0; i < n_values && !inform_listeners; i++) | ||||
|         inform_listeners = g_strcmp0 (values[i], previous[i]) != 0; | ||||
|  | ||||
|       if (*(cursor->target)) | ||||
|         g_strfreev (*(cursor->target)); | ||||
|       *(cursor->target) = values; | ||||
|     } | ||||
|  | ||||
|   if (inform_listeners) | ||||
|     queue_changed (cursor->base.pref); | ||||
| } | ||||
|  | ||||
| static void | ||||
| handle_preference_update_int (GSettings *settings, | ||||
|                               gchar *key) | ||||
| @@ -857,6 +965,11 @@ meta_prefs_init (void) | ||||
|                     G_CALLBACK (settings_changed), NULL); | ||||
|   g_hash_table_insert (settings_schemas, g_strdup (SCHEMA_INTERFACE), settings); | ||||
|  | ||||
|   settings = g_settings_new (SCHEMA_INPUT_SOURCES); | ||||
|   g_signal_connect (settings, "changed::" KEY_XKB_OPTIONS, | ||||
|                     G_CALLBACK (settings_changed), NULL); | ||||
|   g_hash_table_insert (settings_schemas, g_strdup (SCHEMA_INPUT_SOURCES), settings); | ||||
|  | ||||
|  | ||||
|   for (tmp = overridden_keys; tmp; tmp = tmp->next) | ||||
|     { | ||||
| @@ -869,10 +982,10 @@ meta_prefs_init (void) | ||||
|   handle_preference_init_enum (); | ||||
|   handle_preference_init_bool (); | ||||
|   handle_preference_init_string (); | ||||
|   handle_preference_init_string_array (); | ||||
|   handle_preference_init_int (); | ||||
|  | ||||
|   init_bindings (); | ||||
|   init_workspace_names (); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| @@ -1020,14 +1133,6 @@ settings_changed (GSettings *settings, | ||||
|   MetaEnumPreference *cursor; | ||||
|   gboolean found_enum; | ||||
|  | ||||
|   /* String array, handled separately */ | ||||
|   if (strcmp (key, KEY_WORKSPACE_NAMES) == 0) | ||||
|     { | ||||
|       if (update_workspace_names ()) | ||||
|         queue_changed (META_PREF_WORKSPACE_NAMES); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   value = g_settings_get_value (settings, key); | ||||
|   type = g_variant_get_type (value); | ||||
|  | ||||
| @@ -1035,6 +1140,8 @@ settings_changed (GSettings *settings, | ||||
|     handle_preference_update_bool (settings, key); | ||||
|   else if (g_variant_type_equal (type, G_VARIANT_TYPE_INT32)) | ||||
|     handle_preference_update_int (settings, key); | ||||
|   else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING_ARRAY)) | ||||
|     handle_preference_update_string_array (settings, key); | ||||
|   else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING)) | ||||
|     { | ||||
|       cursor = preferences_enum; | ||||
| @@ -1554,6 +1661,39 @@ overlay_key_handler (GVariant *value, | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| iso_next_group_handler (GVariant *value, | ||||
|                         gpointer *result, | ||||
|                         gpointer  data) | ||||
| { | ||||
|   const char **xkb_options, **p; | ||||
|   const char *option = NULL; | ||||
|   gboolean changed = FALSE; | ||||
|  | ||||
|   *result = NULL; /* ignored */ | ||||
|   xkb_options = g_variant_get_strv (value, NULL); | ||||
|  | ||||
|   for (p = xkb_options; p && *p; ++p) | ||||
|     if (g_str_has_prefix (*p, "grp:")) | ||||
|       { | ||||
|         option = (*p + 4); | ||||
|         break; | ||||
|       } | ||||
|  | ||||
|   changed = (g_strcmp0 (option, iso_next_group_option) != 0); | ||||
|  | ||||
|   if (changed) | ||||
|     { | ||||
|       g_free (iso_next_group_option); | ||||
|       iso_next_group_option = g_strdup (option); | ||||
|       queue_changed (META_PREF_KEYBINDINGS); | ||||
|     } | ||||
|  | ||||
|   g_free (xkb_options); | ||||
|  | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| const PangoFontDescription* | ||||
| meta_prefs_get_titlebar_font (void) | ||||
| { | ||||
| @@ -1575,14 +1715,6 @@ meta_prefs_get_dynamic_workspaces (void) | ||||
|   return dynamic_workspaces; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_prefs_get_application_based (void) | ||||
| { | ||||
|   return FALSE; /* For now, we never want this to do anything */ | ||||
|    | ||||
|   return application_based; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_prefs_get_disable_workarounds (void) | ||||
| { | ||||
| @@ -1620,9 +1752,6 @@ meta_preference_to_string (MetaPreference pref) | ||||
|     case META_PREF_NUM_WORKSPACES: | ||||
|       return "NUM_WORKSPACES"; | ||||
|  | ||||
|     case META_PREF_APPLICATION_BASED: | ||||
|       return "APPLICATION_BASED"; | ||||
|  | ||||
|     case META_PREF_KEYBINDINGS: | ||||
|       return "KEYBINDINGS"; | ||||
|  | ||||
| @@ -1708,12 +1837,13 @@ meta_prefs_set_num_workspaces (int n_workspaces) | ||||
| { | ||||
|   MetaBasePreference *pref; | ||||
|  | ||||
|   find_pref (preferences_int, sizeof(MetaIntPreference), | ||||
|              KEY_NUM_WORKSPACES, &pref); | ||||
|  | ||||
|   g_settings_set_int (SETTINGS (pref->schema), | ||||
|                       KEY_NUM_WORKSPACES, | ||||
|                       n_workspaces); | ||||
|   if (find_pref (preferences_int, sizeof(MetaIntPreference), | ||||
|                  KEY_NUM_WORKSPACES, &pref)) | ||||
|     { | ||||
|       g_settings_set_int (SETTINGS (pref->schema), | ||||
|                           KEY_NUM_WORKSPACES, | ||||
|                           n_workspaces); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static GHashTable *key_bindings; | ||||
| @@ -1747,20 +1877,15 @@ init_bindings (void) | ||||
|   g_hash_table_insert (key_bindings, g_strdup ("overlay-key"), pref); | ||||
| } | ||||
|  | ||||
| static void | ||||
| init_workspace_names (void) | ||||
| { | ||||
|   update_workspace_names (); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| update_binding (MetaKeyPref *binding, | ||||
|                 gchar      **strokes) | ||||
| { | ||||
|   GSList *old_bindings, *a, *b; | ||||
|   gboolean changed; | ||||
|   unsigned int keysym; | ||||
|   unsigned int keycode; | ||||
|   MetaVirtualModifier mods; | ||||
|   gboolean changed = FALSE; | ||||
|   MetaKeyCombo *combo; | ||||
|   int i; | ||||
|  | ||||
| @@ -1768,13 +1893,9 @@ update_binding (MetaKeyPref *binding, | ||||
|               "Binding \"%s\" has new GSettings value\n", | ||||
|               binding->name); | ||||
|  | ||||
|   /* Okay, so, we're about to provide a new list of key combos for this | ||||
|    * action. Delete any pre-existing list. | ||||
|    */ | ||||
|   g_slist_foreach (binding->bindings, (GFunc) g_free, NULL); | ||||
|   g_slist_free (binding->bindings); | ||||
|   old_bindings = binding->bindings; | ||||
|   binding->bindings = NULL; | ||||
|    | ||||
|  | ||||
|   for (i = 0; strokes && strokes[i]; i++) | ||||
|     { | ||||
|       keysym = 0; | ||||
| @@ -1809,8 +1930,6 @@ update_binding (MetaKeyPref *binding, | ||||
|            * Changing the key in response to a modification could lead to cyclic calls. */ | ||||
|           continue; | ||||
|         } | ||||
|    | ||||
|       changed = TRUE; | ||||
|  | ||||
|       combo = g_malloc0 (sizeof (MetaKeyCombo)); | ||||
|       combo->keysym = keysym; | ||||
| @@ -1825,6 +1944,34 @@ update_binding (MetaKeyPref *binding, | ||||
|  | ||||
|   binding->bindings = g_slist_reverse (binding->bindings); | ||||
|  | ||||
|   a = old_bindings; | ||||
|   b = binding->bindings; | ||||
|   while (TRUE) | ||||
|     { | ||||
|       if ((!a && b) || (a && !b)) | ||||
|         { | ||||
|           changed = TRUE; | ||||
|           break; | ||||
|         } | ||||
|       else if (!a && !b) | ||||
|         { | ||||
|           changed = FALSE; | ||||
|           break; | ||||
|         } | ||||
|       else if (memcmp (a->data, b->data, sizeof (MetaKeyCombo)) != 0) | ||||
|         { | ||||
|           changed = TRUE; | ||||
|           break; | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           a = a->next; | ||||
|           b = b->next; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   g_slist_free_full (old_bindings, g_free); | ||||
|  | ||||
|   return changed; | ||||
| } | ||||
|  | ||||
| @@ -1840,41 +1987,6 @@ update_key_binding (const char *key, | ||||
|     return FALSE; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| update_workspace_names (void) | ||||
| { | ||||
|   int i; | ||||
|   char **names; | ||||
|   int n_workspace_names, n_names; | ||||
|   gboolean changed = FALSE; | ||||
|  | ||||
|   names = g_settings_get_strv (SETTINGS (SCHEMA_GENERAL), KEY_WORKSPACE_NAMES); | ||||
|   n_names = g_strv_length (names); | ||||
|   n_workspace_names = workspace_names ? g_strv_length (workspace_names) : 0; | ||||
|  | ||||
|   for (i = 0; i < n_names; i++) | ||||
|     if (n_workspace_names < i + 1 || !workspace_names[i] || | ||||
|         g_strcmp0 (names[i], workspace_names[i]) != 0) | ||||
|       { | ||||
|         changed = TRUE; | ||||
|         break; | ||||
|       } | ||||
|  | ||||
|   if (n_workspace_names != n_names) | ||||
|     changed = TRUE; | ||||
|  | ||||
|   if (changed) | ||||
|     { | ||||
|       if (workspace_names) | ||||
|         g_strfreev (workspace_names); | ||||
|       workspace_names = names; | ||||
|     } | ||||
|   else | ||||
|     g_strfreev (names); | ||||
|  | ||||
|   return changed; | ||||
| } | ||||
|  | ||||
| const char* | ||||
| meta_prefs_get_workspace_name (int i) | ||||
| { | ||||
| @@ -2074,6 +2186,12 @@ meta_prefs_get_overlay_binding (MetaKeyCombo *combo) | ||||
|   *combo = overlay_key_combo; | ||||
| } | ||||
|  | ||||
| const char * | ||||
| meta_prefs_get_iso_next_group_option (void) | ||||
| { | ||||
|   return iso_next_group_option; | ||||
| } | ||||
|  | ||||
| GDesktopTitlebarAction | ||||
| meta_prefs_get_action_double_click_titlebar (void) | ||||
| { | ||||
| @@ -2216,9 +2334,11 @@ meta_prefs_set_no_tab_popup (gboolean whether) | ||||
| { | ||||
|   MetaBasePreference *pref; | ||||
|  | ||||
|   find_pref (preferences_bool, sizeof(MetaBoolPreference), | ||||
|              KEY_NO_TAB_POPUP, &pref); | ||||
|   g_settings_set_boolean (SETTINGS (pref->schema), KEY_NO_TAB_POPUP, whether); | ||||
|   if (find_pref (preferences_bool, sizeof(MetaBoolPreference), | ||||
|                  KEY_NO_TAB_POPUP, &pref)) | ||||
|     { | ||||
|       g_settings_set_boolean (SETTINGS (pref->schema), KEY_NO_TAB_POPUP, whether); | ||||
|     } | ||||
| } | ||||
|  | ||||
| int | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user