Compare commits
	
		
			247 Commits
		
	
	
		
			3.9.90-way
			...
			wip/csd-fl
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 7e28a69c51 | ||
|   | 911cca9c99 | ||
|   | abb021e51e | ||
|   | 03ee7e05d5 | ||
|   | 02426c50cb | ||
|   | 477acddf64 | ||
|   | 1d04ea62ba | ||
|   | 10c1903c72 | ||
|   | 69dfd07a7f | ||
|   | bc9b923d5c | ||
|   | fef32fb0d4 | ||
|   | 0e9491a415 | ||
|   | c7725ddf2a | ||
|   | 5c7ea17abd | ||
|   | c6a6d057a8 | ||
|   | ed4fb0695e | ||
|   | addac8825d | ||
|   | 8e74880b55 | ||
|   | 6891ce95dc | ||
|   | b7e62d3ca5 | ||
|   | 27a0b8f87a | ||
|   | 21e94ed109 | ||
|   | 0fe5c4f957 | ||
|   | 75f5d59d53 | ||
|   | 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 | 
							
								
								
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -23,7 +23,7 @@ src/50-mutter-navigation.xml | ||||
| src/50-mutter-system.xml | ||||
| src/50-mutter-windows.xml | ||||
| src/mutter-wm.desktop | ||||
| src/mutter-wayland.desktop | ||||
| src/mutter.desktop | ||||
| *.o | ||||
| *.a | ||||
| *.lo | ||||
| @@ -46,15 +46,16 @@ POTFILES | ||||
| po/*.pot | ||||
| 50-metacity-desktop-key.xml | ||||
| 50-metacity-key.xml | ||||
| libmutter-wayland.pc | ||||
| mutter-wayland | ||||
| libmutter.pc | ||||
| mutter | ||||
| mutter-theme-viewer | ||||
| mutter-wayland.desktop | ||||
| mutter.desktop | ||||
| org.gnome.mutter.gschema.valid | ||||
| org.gnome.mutter.gschema.xml | ||||
| testasyncgetprop | ||||
| testboxes | ||||
| testgradient | ||||
| m4/* | ||||
| mutter-grayscale | ||||
| mutter-mag | ||||
| mutter-message | ||||
|   | ||||
| @@ -1,8 +1,12 @@ | ||||
|  | ||||
| SUBDIRS=src protocol data po doc | ||||
| 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} | ||||
|   | ||||
							
								
								
									
										125
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,7 +1,124 @@ | ||||
| 3.11.3 | ||||
| ====== | ||||
| * xrandr: Use "hotplug_mode_update" property [Marc-André; #711216] | ||||
| * Fix position of attached dialogs for CSD windows [Giovanni, Owen; #707194] | ||||
| * Fix focus issues with external OSKs [Jasper; #715030] | ||||
| * Add a MetaCullable interface [Jasper; #714706] | ||||
| * Fix window group paint volume [Owen; #719669] | ||||
| * Fix frame extents problems [Owen; #714707] | ||||
| * Add shortcut to move windows between monitors [Florian; #671054] | ||||
| * Fix problems with focus tracking [Owen; #720558] | ||||
| * Misc. bug fixes and cleanups [Rui, Jasper, Owen; #712833, #678989, #720106, | ||||
|   #720417, #720630] | ||||
|  | ||||
| Contributors: | ||||
|   Robert Bragg, Giovanni Campagna, Marc-André Lureau, Rui Matos, Alberto Milone, | ||||
|   Florian Müllner, Sindhu S, Jasper St. Pierre, Rico Tzschichholz, | ||||
|   Owen W. Taylor | ||||
|  | ||||
| Translations: | ||||
|   甘露(Gan  Lu) [zh_CN], Khaled Hosny [ar] | ||||
|  | ||||
| 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 | ||||
| ====== | ||||
| * First release from the wayland branch, includes basic support for running | ||||
|   as a wayland compositor [Robert, Neil, Giovanni] | ||||
| * Add support for _GTK_FRAME_EXTENTS [Jasper; #705766] | ||||
| * Fix quick consecutive <super> presses breaking keyboard input [Alban; #666101] | ||||
| * Work towards running as wayland compositor [Giovanni] | ||||
| @@ -16,8 +133,8 @@ | ||||
|  | ||||
| Contributors: | ||||
|   Robert Bragg, Giovanni Campagna, Alban Crequy, Adel Gadllah, | ||||
|   Alexander Larsson, Florian Müllner, Jasper St. Pierre, Neil Roberts, | ||||
|   Rico Tzschichholz, Colin Walters | ||||
|   Alexander Larsson, Florian Müllner, Jasper St. Pierre, Rico Tzschichholz, | ||||
|   Colin Walters | ||||
|  | ||||
| Translations: | ||||
|   Jiro Matsuzawa [ja], Kjartan Maraas [nb], Matej Urbančič [sl], | ||||
|   | ||||
| @@ -5,7 +5,7 @@ srcdir=`dirname $0` | ||||
| test -z "$srcdir" && srcdir=. | ||||
|  | ||||
| PKG_NAME="mutter" | ||||
| REQUIRED_AUTOMAKE_VERSION=1.13 | ||||
| REQUIRED_AUTOMAKE_VERSION=1.10 | ||||
|  | ||||
| (test -f $srcdir/configure.ac \ | ||||
|   && test -d $srcdir/src) || { | ||||
|   | ||||
							
								
								
									
										54
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								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], [9]) | ||||
| m4_define([mutter_micro_version], [90]) | ||||
| m4_define([mutter_minor_version], [11]) | ||||
| m4_define([mutter_micro_version], [3]) | ||||
|  | ||||
| m4_define([mutter_version], | ||||
|           [mutter_major_version.mutter_minor_version.mutter_micro_version]) | ||||
| @@ -12,17 +13,14 @@ 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) | ||||
|  | ||||
| AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz tar-ustar]) | ||||
| AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar]) | ||||
| m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],) | ||||
| AM_MAINTAINER_MODE([enable]) | ||||
|  | ||||
| # Change pkglibdir and pkgdatadir to mutter-wayland instead of mutter | ||||
| PACKAGE="mutter-wayland" | ||||
| AC_SUBST([PACKAGE], [$PACKAGE]) | ||||
|  | ||||
| MUTTER_MAJOR_VERSION=mutter_major_version | ||||
| MUTTER_MINOR_VERSION=mutter_minor_version | ||||
| MUTTER_MICRO_VERSION=mutter_micro_version | ||||
| @@ -38,7 +36,7 @@ AC_SUBST(MUTTER_PLUGIN_DIR) | ||||
| # Honor aclocal flags | ||||
| AC_SUBST(ACLOCAL_AMFLAGS, "\${ACLOCAL_FLAGS}") | ||||
|  | ||||
| GETTEXT_PACKAGE=mutter-wayland | ||||
| GETTEXT_PACKAGE=mutter | ||||
| AC_SUBST(GETTEXT_PACKAGE) | ||||
| AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Name of default gettext domain]) | ||||
|  | ||||
| @@ -71,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.14.3 | ||||
|    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 | ||||
| @@ -117,21 +117,6 @@ AC_ARG_ENABLE(shape, | ||||
|                  [disable mutter's use of the shaped window extension]),, | ||||
|   enable_shape=auto) | ||||
|  | ||||
| ## Wayland support requires the xserver.xml protocol extension found in the weston | ||||
| ## repository but since there aren't currently established conventions for | ||||
| ## installing and discovering these we simply require a location to be given | ||||
| ## explicitly... | ||||
| AC_ARG_WITH([wayland-protocols], | ||||
|             [AS_HELP_STRING([--with-wayland-protocols], [Location for wayland extension protocol specs])], | ||||
|             [ | ||||
|             ], | ||||
|             []) | ||||
|  | ||||
| AC_ARG_WITH([xwayland-path], | ||||
|             [AS_HELP_STRING([--with-xwayland-path], [Absolute path for an X Wayland server])], | ||||
|             [XWAYLAND_PATH="$withval"], | ||||
|             [XWAYLAND_PATH="$bindir/Xorg"]) | ||||
|  | ||||
| AM_GLIB_GNU_GETTEXT | ||||
|  | ||||
| ## here we get the flags we'll actually use | ||||
| @@ -215,16 +200,6 @@ if test x$have_xcursor = xyes; then | ||||
|   AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support]) | ||||
| fi | ||||
|  | ||||
| # We always build with wayland enabled | ||||
| AC_DEFINE(HAVE_WAYLAND, , [Building with Wayland support]) | ||||
|  | ||||
| AC_PATH_PROG([WAYLAND_SCANNER],[wayland-scanner],[no]) | ||||
| AS_IF([test "x$WAYLAND_SCANNER" = "xno"], | ||||
|   AC_MSG_ERROR([Could not find wayland-scanner in your PATH, required for parsing wayland extension protocols])) | ||||
| AC_SUBST([WAYLAND_SCANNER]) | ||||
| AC_SUBST(XWAYLAND_PATH) | ||||
|  | ||||
| MUTTER_PC_MODULES="$MUTTER_PC_MODULES wayland-server" | ||||
| PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES) | ||||
|  | ||||
| PKG_CHECK_EXISTS([xi >= 1.6.99.1], | ||||
| @@ -462,10 +437,9 @@ doc/man/Makefile | ||||
| doc/reference/Makefile | ||||
| doc/reference/meta-docs.sgml | ||||
| src/Makefile | ||||
| src/libmutter-wayland.pc | ||||
| src/libmutter.pc | ||||
| src/mutter-plugins.pc | ||||
| src/compositor/plugins/Makefile | ||||
| protocol/Makefile | ||||
| data/Makefile | ||||
| po/Makefile.in | ||||
| ]) | ||||
|  | ||||
| @@ -481,7 +455,7 @@ fi | ||||
|  | ||||
| dnl ========================================================================== | ||||
| echo " | ||||
| mutter-wayland-$VERSION | ||||
| mutter-$VERSION | ||||
|  | ||||
| 	prefix:                   ${prefix} | ||||
| 	source code location:	  ${srcdir} | ||||
|   | ||||
| @@ -1,3 +0,0 @@ | ||||
| defaultcursordir = $(pkgdatadir)/cursors | ||||
|  | ||||
| dist_defaultcursor_DATA = left_ptr.png | ||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 736 B | 
| @@ -1,4 +1,3 @@ | ||||
| man_MANS = mutter.1 mutter-theme-viewer.1 \ | ||||
| 	   mutter-window-demo.1 mutter-message.1 | ||||
| man_MANS = mutter.1 | ||||
|  | ||||
| EXTRA_DIST = $(man_MANS) | ||||
|   | ||||
| @@ -1,60 +0,0 @@ | ||||
| .\"                                      Hey, EMACS: -*- nroff -*- | ||||
| .\" First parameter, NAME, should be all caps | ||||
| .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection | ||||
| .\" other parameters are allowed: see man(7), man(1) | ||||
| .\" ----- | ||||
| .\" This file was confirmed to be licenced under the GPL | ||||
| .\" by its author and copyright holder, Akira TAGOH, on June 1st 2008: | ||||
| .\" | ||||
| .\" > I'm comfortable with DFSG-free. that sounds great if you think it's | ||||
| .\" > useful and worth containing it in upstream. | ||||
| .\" ... | ||||
| .\" > Right I know. any licenses that is DFSG-free, I'm ok with whatever, | ||||
| .\" > since I have contributed that for Debian. so GPL is no problem for me. | ||||
| .\" ----- | ||||
| .TH MUTTER\-MESSAGE 1 "28 August 2002" | ||||
| .\" Please adjust this date whenever revising the manpage. | ||||
| .\" | ||||
| .\" Some roff macros, for reference: | ||||
| .\" .nh        disable hyphenation | ||||
| .\" .hy        enable hyphenation | ||||
| .\" .ad l      left justify | ||||
| .\" .ad b      justify to both left and right margins | ||||
| .\" .nf        disable filling | ||||
| .\" .fi        enable filling | ||||
| .\" .br        insert line break | ||||
| .\" .sp <n>    insert n+1 empty lines | ||||
| .\" for manpage-specific macros, see man(7) | ||||
| .SH NAME | ||||
| MUTTER\-MESSAGE \- a command to send a message to Mutter | ||||
| .SH SYNOPSIS | ||||
| .B MUTTER\-MESSAGE | ||||
| [restart|reload\-theme|enable\-keybindings|disable\-keybindings] | ||||
| .SH DESCRIPTION | ||||
| This manual page documents briefly the | ||||
| .B mutter\-message\fP. | ||||
| This manual page was written for the Debian distribution | ||||
| because the original program does not have a manual page. | ||||
| .PP | ||||
| .\" TeX users may be more comfortable with the \fB<whatever>\fP and | ||||
| .\" \fI<whatever>\fP escape sequences to invode bold face and italics,  | ||||
| .\" respectively. | ||||
| \fBmutter\-message\fP send a specified message to \fBmutter\fP(1). | ||||
| .SH OPTIONS | ||||
| .TP | ||||
| .B restart | ||||
| Restart \fBmutter\fP(1) which is running. | ||||
| .TP | ||||
| .B reload-theme | ||||
| Reload a theme which is specified on gsettings database. | ||||
| .TP | ||||
| .B enable-keybindings | ||||
| Enable all of keybindings which is specified on gsettings database. | ||||
| .TP | ||||
| .B disable-keybindings | ||||
| Disable all of keybindings which is specified on gsettings database. | ||||
| .SH SEE ALSO | ||||
| .BR mutter (1) | ||||
| .SH AUTHOR | ||||
| This manual page was written by Akira TAGOH <tagoh@debian.org>, | ||||
| for the Debian GNU/Linux system (but may be used by others). | ||||
| @@ -1,43 +0,0 @@ | ||||
| .\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection | ||||
| .\" other parms are allowed: see man(7), man(1) | ||||
| .\" | ||||
| .\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>. | ||||
| .\"  | ||||
| .TH MUTTER-THEME-VIEWER 1 "1 June 2004"  | ||||
| .SH NAME | ||||
| mutter-theme-viewer \- view mutter themes | ||||
| .SH SYNOPSIS | ||||
| .B mutter-theme-viewer | ||||
| [ | ||||
| .I THEMENAME | ||||
| ] | ||||
| .SH DESCRIPTION | ||||
| .\" Putting a newline after each sentence can generate better output. | ||||
| .B mutter-theme-viewer | ||||
| allows you to preview any installed Mutter theme. | ||||
| .PP | ||||
| When designing a new Mutter theme, you can use | ||||
| .B mutter-theme-viewer | ||||
| to measure the performance of a window frame option, and to preview | ||||
| the option. | ||||
| .SH OPTIONS | ||||
| .TP | ||||
| .I THEMENAME | ||||
| Name of the theme to be shown (\fIAtlanta\fR by default). | ||||
| It is case-sensitive. | ||||
| .SH FILES | ||||
| .br | ||||
| .nf | ||||
| .TP | ||||
| .I /usr/share/themes | ||||
| system themes directory | ||||
| .TP | ||||
| .I /usr/share/themes/*/mutter-1/mutter-theme-1.xml | ||||
| theme specification file | ||||
| .SH AUTHOR | ||||
| This manual page was written by Jose M. Moya <josem@die.upm.es>, for | ||||
| the Debian  GNU/Linux system (but may be used by others). | ||||
| .SH "SEE ALSO" | ||||
| .\" Always quote multiple words for .SH | ||||
| .BR mutter (1), | ||||
| .BR mutter-window-demo (1). | ||||
| @@ -1,25 +0,0 @@ | ||||
| .\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection | ||||
| .\" other parms are allowed: see man(7), man(1) | ||||
| .\" | ||||
| .\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>. | ||||
| .\"  | ||||
| .TH MUTTER-WINDOW-DEMO 1 "1 June 2004"  | ||||
| .SH NAME | ||||
| mutter-window-demo \- demo of window features | ||||
| .SH SYNOPSIS | ||||
| .B mutter-window-demo | ||||
| .SH DESCRIPTION | ||||
| .\" Putting a newline after each sentence can generate better output. | ||||
| This program demonstrates various kinds of windows that window | ||||
| managers and window manager themes should handle. | ||||
| .PP | ||||
| Be sure to tear off the menu and toolbar, those are also a special | ||||
| kind of window. | ||||
| .SH AUTHOR | ||||
| This manual page was written by Jose M. Moya <josem@die.upm.es>, for | ||||
| the Debian  GNU/Linux system (but may be used by others). | ||||
| .SH "SEE ALSO" | ||||
| .\" Always quote multiple words for .SH | ||||
| .BR x-window-manager (1), | ||||
| .BR mutter (1), | ||||
| .BR mutter-theme-viewer (1). | ||||
| @@ -49,8 +49,8 @@ FIXXREF_OPTIONS= | ||||
| # Used for dependencies. The docs will be rebuilt if any of these change. | ||||
| # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h | ||||
| # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c | ||||
| HFILE_GLOB=$(top_srcdir)/src/*.h | ||||
| CFILE_GLOB=$(top_srcdir)/src/*.c | ||||
| HFILE_GLOB=$(top_srcdir)/src/*/*.h | ||||
| CFILE_GLOB=$(top_srcdir)/src/*/*.c | ||||
|  | ||||
| # Extra header to include when scanning, which are not under DOC_SOURCE_DIR | ||||
| # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h | ||||
| @@ -140,7 +140,7 @@ expand_content_files= \ | ||||
| # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) | ||||
| # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) | ||||
| GTKDOC_CFLAGS=$(MUTTER_CFLAGS) | ||||
| GTKDOC_LIBS=$(MUTTER_LIBS) $(top_builddir)/src/libmutter-wayland.la | ||||
| GTKDOC_LIBS=$(MUTTER_LIBS) $(top_builddir)/src/libmutter.la | ||||
|  | ||||
| # This includes the standard gtk-doc make rules, copied by gtkdocize. | ||||
| include $(top_srcdir)/gtk-doc.make | ||||
|   | ||||
| @@ -207,7 +207,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 +388,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 | ||||
| @@ -542,7 +558,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" | ||||
|  | ||||
|   | ||||
							
								
								
									
										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" | ||||
|   | ||||
							
								
								
									
										309
									
								
								po/nb.po
									
									
									
									
									
								
							
							
						
						
									
										309
									
								
								po/nb.po
									
									
									
									
									
								
							| @@ -6,8 +6,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: mutter 3.9.x\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2013-08-08 22:14+0200\n" | ||||
| "PO-Revision-Date: 2013-05-28 09:48+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,7 +205,7 @@ 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:589 | ||||
| #: ../src/compositor/compositor.c:596 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| @@ -260,7 +260,7 @@ msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon" | ||||
| 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:1138 | ||||
| #: ../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:1335 | ||||
| #: ../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 "" | ||||
| @@ -369,12 +382,12 @@ msgstr "" | ||||
| 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:7513 | ||||
| #: ../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:8237 | ||||
| #: ../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" | ||||
| @@ -696,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" | ||||
|  | ||||
| @@ -1151,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 " | ||||
| @@ -1171,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" | ||||
| @@ -1563,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" | ||||
|   | ||||
							
								
								
									
										660
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
							
						
						
									
										660
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										417
									
								
								po/sk.po
									
									
									
									
									
								
							
							
						
						
									
										417
									
								
								po/sk.po
									
									
									
									
									
								
							| @@ -13,9 +13,9 @@ 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-05-24 21:44+0000\n" | ||||
| "PO-Revision-Date: 2013-05-18 16:53+0100\n" | ||||
| "Last-Translator: Jan Kyselica <kyselica.jan@gmail.com>\n" | ||||
| "POT-Creation-Date: 2013-08-21 17:41+0000\n" | ||||
| "PO-Revision-Date: 2013-08-02 14:46+0200\n" | ||||
| "Last-Translator: Ján Kyselica <kyselica.jan@gmail.com>\n" | ||||
| "Language-Team: Slovak <gnome-sk-list@gnome.org>\n" | ||||
| "Language: sk\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| @@ -87,9 +87,8 @@ msgstr "Prepnúť okná aplikácie" | ||||
| # PK: zisti co to robi | ||||
| # description | ||||
| #: ../src/50-mutter-navigation.xml.in.h:13 | ||||
| #, fuzzy | ||||
| msgid "Switch system controls" | ||||
| msgstr "Prepnúť medzi systémovými ovládacími prvkami" | ||||
| msgstr "Prepnúť medzi ovládacími prvkami systému" | ||||
|  | ||||
| # description | ||||
| #: ../src/50-mutter-navigation.xml.in.h:14 | ||||
| @@ -104,9 +103,8 @@ msgstr "Prepnúť okná aplikácie priamo" | ||||
| # MČ: podobne ako vyššie: „cycle-panels“ | ||||
| # description | ||||
| #: ../src/50-mutter-navigation.xml.in.h:16 | ||||
| #, fuzzy | ||||
| msgid "Switch system controls directly" | ||||
| msgstr "Prepnúť medzi systémovými ovládacími prvkami priamo" | ||||
| msgstr "Prepnúť medzi ovládacími prvkami systému priamo" | ||||
|  | ||||
| # description | ||||
| #: ../src/50-mutter-navigation.xml.in.h:17 | ||||
| @@ -267,13 +265,13 @@ msgstr "Zobraziť rozdelenie napravo" | ||||
| # PK: je %i cislo obrazovky? ak ano tak "č. %i" | ||||
| #. 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:571 | ||||
| #, fuzzy, c-format | ||||
| #: ../src/compositor/compositor.c:596 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Another compositing manager is already running on screen %i on display \"%s" | ||||
| "\"." | ||||
| msgstr "" | ||||
| "Pre obrazovku %i na displeji „%s“ je spustený už iný správca rozloženia." | ||||
| "Pre obrazovku č. %i na displeji „%s“ je spustený už iný správca rozloženia." | ||||
|  | ||||
| #: ../src/compositor/meta-background.c:1076 | ||||
| msgid "background texture could not be created from file" | ||||
| @@ -313,18 +311,18 @@ msgstr "_Počkať" | ||||
| msgid "_Force Quit" | ||||
| msgstr "_Vynútiť ukončenie" | ||||
|  | ||||
| #: ../src/core/display.c:401 | ||||
| #: ../src/core/display.c:421 | ||||
| #, c-format | ||||
| msgid "Missing %s extension required for compositing" | ||||
| msgstr "Rozšírenie %s, potrebné pre kompozitné prostredie, chýba" | ||||
|  | ||||
| # X window system preloz, napr. system na spravu okien X | ||||
| #: ../src/core/display.c:493 | ||||
| #: ../src/core/display.c:513 | ||||
| #, c-format | ||||
| msgid "Failed to open X Window System display '%s'\n" | ||||
| msgstr "Zlyhalo otvorenie displeja systému na správu okien X „%s“\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:970 | ||||
| #: ../src/core/keybindings.c:1136 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Some other program is already using the key %s with modifiers %x as a " | ||||
| @@ -332,7 +330,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Iný program už používa kláves %s s modifikátormi %x ako klávesovú skratku\n" | ||||
|  | ||||
| #: ../src/core/keybindings.c:1151 | ||||
| #: ../src/core/keybindings.c:1333 | ||||
| #, c-format | ||||
| msgid "\"%s\" is not a valid accelerator\n" | ||||
| msgstr "„%s“ nie je platný akcelerátor\n" | ||||
| @@ -378,6 +376,20 @@ msgid "" | ||||
| msgstr "" | ||||
| "Nepodarilo sa nájsť tému! Overte, že %s existuje a obsahuje obvyklé témy.\n" | ||||
|  | ||||
| #: ../src/core/monitor.c:702 | ||||
| msgid "Built-in display" | ||||
| msgstr "Vstavaný 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:730 | ||||
| #, c-format | ||||
| #| msgid "Unknown element %s" | ||||
| msgid "Unknown %s" | ||||
| msgstr "Neznámy %s" | ||||
|  | ||||
| #: ../src/core/mutter.c:40 | ||||
| #, c-format | ||||
| msgid "" | ||||
| @@ -403,7 +415,7 @@ msgstr "Zobrazí verziu" | ||||
| msgid "Mutter plugin to use" | ||||
| msgstr "Použije zásuvný modul Mutter" | ||||
|  | ||||
| #: ../src/core/prefs.c:1193 | ||||
| #: ../src/core/prefs.c:1202 | ||||
| msgid "" | ||||
| "Workarounds for broken applications disabled. Some applications may not " | ||||
| "behave properly.\n" | ||||
| @@ -411,12 +423,12 @@ msgstr "" | ||||
| "Náhradné riešenia pre chybné aplikácie nie sú povolené. Niektoré aplikácie " | ||||
| "sa nemusia správať správne.\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1268 | ||||
| #: ../src/core/prefs.c:1277 | ||||
| #, c-format | ||||
| msgid "Could not parse font description \"%s\" from GSettings key %s\n" | ||||
| msgstr "Nepodarilo sa spracovať popis písma „%s“ z kľúča GSettings %s\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1334 | ||||
| #: ../src/core/prefs.c:1343 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for mouse button " | ||||
| @@ -425,7 +437,7 @@ msgstr "" | ||||
| "V konfiguračnej databáze sa našlo „%s“, čo nie je platná hodnota pre " | ||||
| "modifikátor tlačidla myši\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1881 | ||||
| #: ../src/core/prefs.c:1909 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "\"%s\" found in configuration database is not a valid value for keybinding " | ||||
| @@ -434,17 +446,17 @@ msgstr "" | ||||
| "V konfiguračnej databáze sa našlo „%s“, čo nie je platná hodnota pre " | ||||
| "klávesovú skratku „%s“\n" | ||||
|  | ||||
| #: ../src/core/prefs.c:1945 | ||||
| #: ../src/core/prefs.c:1999 | ||||
| #, c-format | ||||
| msgid "Workspace %d" | ||||
| msgstr "Pracovný priestor č. %d" | ||||
|  | ||||
| #: ../src/core/screen.c:691 | ||||
| #: ../src/core/screen.c:537 | ||||
| #, c-format | ||||
| msgid "Screen %d on display '%s' is invalid\n" | ||||
| msgstr "Obrazovka č. %d na displeji „%s“ nie je platná\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 --" | ||||
| @@ -453,7 +465,7 @@ msgstr "" | ||||
| "Obrazovka č. %d na displeji „%s“ už má správcu okien. Skúste použiť prepínač " | ||||
| "--replace, aby sa aktuálny správca nahradil.\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" | ||||
| @@ -461,12 +473,12 @@ msgstr "" | ||||
| "Nepodarilo sa získať výber správcu okien pre obrazovku č. %d na displeji " | ||||
| "„%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 "Obrazovka č. %d na displeji „%s“ už má správcu okien\n" | ||||
|  | ||||
| #: ../src/core/screen.c:998 | ||||
| #: ../src/core/screen.c:850 | ||||
| #, c-format | ||||
| msgid "Could not release screen %d on display \"%s\"\n" | ||||
| msgstr "Nepodarilo sa uvoľniť obrazovku č. %d na displeji „%s“\n" | ||||
| @@ -542,8 +554,7 @@ msgstr "Zlyhalo otvorenie súboru so záznamom pomocou fdopen() %s: %s\n" | ||||
| msgid "Opened log file %s\n" | ||||
| msgstr "Otvorený súbor so záznamom %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 bol skompilovaný bez výpisu podrobností pri behu\n" | ||||
|  | ||||
| @@ -551,20 +562,20 @@ msgstr "Mutter bol skompilovaný bez výpisu podrobností pri behu\n" | ||||
| msgid "Window manager: " | ||||
| msgstr "Správca okien: " | ||||
|  | ||||
| #: ../src/core/util.c:412 | ||||
| #: ../src/core/util.c:414 | ||||
| msgid "Bug in window manager: " | ||||
| msgstr "Chyba v správcovi okien: " | ||||
|  | ||||
| #: ../src/core/util.c:443 | ||||
| #: ../src/core/util.c:445 | ||||
| msgid "Window manager warning: " | ||||
| msgstr "Varovanie správcu okien: " | ||||
|  | ||||
| #: ../src/core/util.c:471 | ||||
| #: ../src/core/util.c:473 | ||||
| msgid "Window manager error: " | ||||
| msgstr "Chyba správcu okien: " | ||||
|  | ||||
| #. first time through | ||||
| #: ../src/core/window.c:7505 | ||||
| #: ../src/core/window.c:7533 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " | ||||
| @@ -580,7 +591,7 @@ msgstr "" | ||||
| #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain | ||||
| #. * about these apps but make them work. | ||||
| #. | ||||
| #: ../src/core/window.c:8229 | ||||
| #: ../src/core/window.c:8257 | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Window %s sets an MWM hint indicating it isn't resizable, but sets min size " | ||||
| @@ -590,7 +601,7 @@ msgstr "" | ||||
| "nastavuje minimálnu veľkosť %d x %d a maximálnu veľkosť %d x %d. To nedáva " | ||||
| "zmysel.\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 "Aplikácia nastavila neplatné _NET_WM_PID %lu\n" | ||||
| @@ -598,18 +609,18 @@ msgstr "Aplikácia nastavila neplatné _NET_WM_PID %lu\n" | ||||
| # PK: co je toto? | ||||
| # JK: nedokazem zistit | ||||
| # PM: vyžiadaj komentár od vývojárov, pomožeme aj ostatným prekladateľom | ||||
| #: ../src/core/window-props.c:434 | ||||
| #: ../src/core/window-props.c:463 | ||||
| #, fuzzy, 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é WM_TRANSIENT_FOR okno 0x%lx nastavené pre %s.\n" | ||||
|  | ||||
| # MČ: zacykliť sa, alebo vytvoriť slučku. | ||||
| #: ../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 okno 0x%lx  pre %s môže vytvoriť slučku.\n" | ||||
| @@ -697,9 +708,9 @@ msgid "" | ||||
| "vertically and resizes them horizontally to cover half of the available " | ||||
| "area. Dropping windows on the top screen edge maximizes them completely." | ||||
| msgstr "" | ||||
| "Ak je povolené, upustenie okien pri zvislých okrajoch obrazovky ich " | ||||
| "zvislo maximalizuje a vodorovná veľkosť sa zmení na polovicu dostupnej " | ||||
| "plochy. Upustenie okien pri vrchnom okraji obrazovky ich maximalizuje úplne." | ||||
| "Ak je povolené, upustenie okien pri zvislých okrajoch obrazovky ich zvislo " | ||||
| "maximalizuje a vodorovná veľkosť sa zmení na polovicu dostupnej plochy. " | ||||
| "Upustenie okien pri vrchnom okraji obrazovky ich maximalizuje úplne." | ||||
|  | ||||
| # summary | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:7 | ||||
| @@ -735,9 +746,8 @@ msgstr "" | ||||
| # PM: ja by som dal Bez vyvovlávania tabulátorom | ||||
| # summary | ||||
| #: ../src/org.gnome.mutter.gschema.xml.in.h:11 | ||||
| #, fuzzy | ||||
| msgid "No tab popup" | ||||
| msgstr "Nepoužívať prekryvnú ponuku tabulátora" | ||||
| msgstr "Bez vyvolávania tabulátorom" | ||||
|  | ||||
| # MČ: Neviem, čo to presne má robiť, ale popis som pochopil inak. „…či sa má používať rozbaľovacia ponuka a zvýraznenie rámikom sa má vypnúť…“ | ||||
| # description | ||||
| @@ -806,109 +816,104 @@ msgstr "Vybrať okno z rozbaľovacej ponuky tabulátoru" | ||||
| msgid "Cancel tab popup" | ||||
| msgstr "Zrušit rozbaľovaciu ponuku tabulátoru" | ||||
|  | ||||
| #: ../src/tools/mutter-message.c:123 | ||||
| #, c-format | ||||
| msgid "Usage: %s\n" | ||||
| msgstr "Použitie: %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_nimalizovať" | ||||
|  | ||||
| #. 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_ximalizovať" | ||||
|  | ||||
| #. 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šiť ma_ximalizáciu" | ||||
|  | ||||
| #. 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 "_Zabaliť" | ||||
|  | ||||
| #. 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 "_Rozbaliť" | ||||
|  | ||||
| #. 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 "Pre_miestniť" | ||||
|  | ||||
| #. 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 "Zmeniť veľko_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 "Presunúť titulok 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 na_vrchu" | ||||
|  | ||||
| #. 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ž_dy na viditeľnom pracovnom priestore" | ||||
|  | ||||
| #. 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 "_Len na tomto pracovnom priestore" | ||||
|  | ||||
| #. 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 "Presunúť na pracovný priestor vľav_o" | ||||
|  | ||||
| #. 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 "Presunúť na pracovný priestor v_pravo" | ||||
|  | ||||
| #. 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 "Presunúť na pracovný priestor _hore" | ||||
|  | ||||
| #. 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 "Presunúť na pracovný priestor _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 "_Zavrieť" | ||||
|  | ||||
| #: ../src/ui/menu.c:204 | ||||
| #: ../src/ui/menu.c:202 | ||||
| #, c-format | ||||
| msgid "Workspace %d%n" | ||||
| msgstr "Pracovná priestor %d%n" | ||||
|  | ||||
| #: ../src/ui/menu.c:214 | ||||
| #: ../src/ui/menu.c:212 | ||||
| #, c-format | ||||
| msgid "Workspace 1_0" | ||||
| msgstr "Pracovný priestor 1_0" | ||||
|  | ||||
| #: ../src/ui/menu.c:216 | ||||
| #: ../src/ui/menu.c:214 | ||||
| #, c-format | ||||
| msgid "Workspace %s%d" | ||||
| msgstr "Pracovný priestor %s%d" | ||||
|  | ||||
| #: ../src/ui/menu.c:397 | ||||
| #: ../src/ui/menu.c:384 | ||||
| msgid "Move to Another _Workspace" | ||||
| msgstr "P_resunúť na iný pracovný priestor" | ||||
|  | ||||
| @@ -1066,21 +1071,21 @@ msgstr "" | ||||
| # MČ: Preformuloval by som koniec: „platné sú len znaky A-Za-z0-9-_“ | ||||
| # PK: color_name je asi nejaky atribut, to sa nepreklada, ked tak do zatvorky | ||||
| #: ../src/ui/theme.c:1219 | ||||
| #, fuzzy, c-format | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" | ||||
| "_ are valid" | ||||
| msgstr "" | ||||
| "V parametri názov_farby pre gtk:custom je neplatný znak „%c“, platné sú len " | ||||
| "V parametri color_name (názov farby) pre gtk:custom je neplatný znak „%c“, platné sú len " | ||||
| "znaky A-Za-z0-9-_" | ||||
|  | ||||
| #: ../src/ui/theme.c:1233 | ||||
| #, fuzzy, c-format | ||||
| #, c-format | ||||
| msgid "" | ||||
| "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " | ||||
| "fit the format" | ||||
| msgstr "" | ||||
| "Formát Gtk:custom je  „gtk:custom(názov_farby,fallback)“, „%s“ tomu " | ||||
| "Formát Gtk:custom je  „gtk:custom(color_name,fallback)“, „%s“ tomu " | ||||
| "nezodpovedá" | ||||
|  | ||||
| #: ../src/ui/theme.c:1278 | ||||
| @@ -1266,20 +1271,20 @@ msgid "" | ||||
| "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" | ||||
| msgstr "Chýbajúce <frame state=„%s“ resize=„%s“ focus=„%s“ style=„whatever“/>" | ||||
|  | ||||
| #: ../src/ui/theme.c:5084 | ||||
| #: ../src/ui/theme.c:5082 | ||||
| #, c-format | ||||
| msgid "Failed to load theme \"%s\": %s\n" | ||||
| msgstr "Zlyhalo načítanie témy „%s“: %s\n" | ||||
|  | ||||
| # PK: prvok? | ||||
| # JK: XML značka (XML tag) | ||||
| #: ../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 "Pre tému „%s“ nie je nastavená <%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 " | ||||
| @@ -1288,13 +1293,13 @@ msgstr "" | ||||
| "Pre typ okna „%s“ nie je sada štýlov v téme „%s“, pridajte prvok <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 "Používateľské konštanty musia začínať veľkým písmenom, „%s“ nezačína" | ||||
|  | ||||
| #: ../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 "Konštanta „%s“ už je definovaná" | ||||
| @@ -1397,7 +1402,7 @@ msgstr "<%s> musí uvádzať buď geometriu alebo rodiča, ktorý má geometriu" | ||||
| msgid "You must specify a background for an alpha value to be meaningful" | ||||
| msgstr "Ak má byť hodnota alpha zmysluplná, tak musíte vybrať nejaké pozadie" | ||||
|  | ||||
| # PM: asi atribút type | ||||
| #  PM: asi atribút type | ||||
| # JK: https://bugzilla.gnome.org/show_bug.cgi?id=698123 | ||||
| #: ../src/ui/theme-parser.c:1264 | ||||
| #, fuzzy, c-format | ||||
| @@ -1559,6 +1564,7 @@ msgid "\"%s\" is not a valid value for resize attribute" | ||||
| msgstr "„%s“ nie je platná hodnota pre atribút zmeny veľkosti" | ||||
|  | ||||
| # PK: shaded states? to zatvorky daj popis co je resize | ||||
| # PM: skôr "pre stavy maximized (maximalizovaný)/shaded (zatienený)" | ||||
| #: ../src/ui/theme-parser.c:3147 | ||||
| #, fuzzy, c-format | ||||
| msgid "" | ||||
| @@ -1700,221 +1706,172 @@ msgstr "<%s> uvedený dvakrát pre túto tému" | ||||
| msgid "Failed to find a valid file for theme %s\n" | ||||
| msgstr "Zlyhalo nájdenie platného súboru pre tému%s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:99 | ||||
| msgid "_Windows" | ||||
| msgstr "_Okná" | ||||
| #~ msgid "Usage: %s\n" | ||||
| #~ msgstr "Použitie: %s\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:100 | ||||
| msgid "_Dialog" | ||||
| msgstr "_Dialógové okno" | ||||
| #~ msgid "_Windows" | ||||
| #~ msgstr "_Okná" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:101 | ||||
| msgid "_Modal dialog" | ||||
| msgstr "_Modálne dialógové okno" | ||||
| #~ msgid "_Dialog" | ||||
| #~ msgstr "_Dialógové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:102 | ||||
| msgid "_Utility" | ||||
| msgstr "_Nástroje" | ||||
| #~ msgid "_Modal dialog" | ||||
| #~ msgstr "_Modálne dialógové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:103 | ||||
| msgid "_Splashscreen" | ||||
| msgstr "Ú_vodná obrazovka" | ||||
| #~ msgid "_Utility" | ||||
| #~ msgstr "_Nástroje" | ||||
|  | ||||
| #~ msgid "_Splashscreen" | ||||
| #~ msgstr "Ú_vodná obrazovka" | ||||
|  | ||||
| # MČ: nie som si istý prekladom „dok“, nemal by to byť „panel“? | ||||
| #: ../src/ui/theme-viewer.c:104 | ||||
| msgid "_Top dock" | ||||
| msgstr "_Horný panel" | ||||
| #~ msgid "_Top dock" | ||||
| #~ msgstr "_Horný panel" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:105 | ||||
| msgid "_Bottom dock" | ||||
| msgstr "_Spodný panel" | ||||
| #~ msgid "_Bottom dock" | ||||
| #~ msgstr "_Spodný panel" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:106 | ||||
| msgid "_Left dock" | ||||
| msgstr "Ľ_avý panel" | ||||
| #~ msgid "_Left dock" | ||||
| #~ msgstr "Ľ_avý panel" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:107 | ||||
| msgid "_Right dock" | ||||
| msgstr "_Pravý panel" | ||||
| #~ msgid "_Right dock" | ||||
| #~ msgstr "_Pravý panel" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:108 | ||||
| msgid "_All docks" | ||||
| msgstr "_Všetky panely" | ||||
| #~ msgid "_All docks" | ||||
| #~ msgstr "_Všetky panely" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:109 | ||||
| msgid "Des_ktop" | ||||
| msgstr "P_racovná plocha" | ||||
| #~ msgid "Des_ktop" | ||||
| #~ msgstr "P_racovná plocha" | ||||
|  | ||||
| # tooltip | ||||
| #: ../src/ui/theme-viewer.c:115 | ||||
| msgid "Open another one of these windows" | ||||
| msgstr "Otvorí ďalšie z týchto okien" | ||||
| #~ msgid "Open another one of these windows" | ||||
| #~ msgstr "Otvorí ďalšie z týchto okien" | ||||
|  | ||||
| # PK: prekladat to v uvodzovkach? nahlas bug | ||||
| # tooltip | ||||
| # JK: https://bugzilla.gnome.org/show_bug.cgi?id=698123 | ||||
| #: ../src/ui/theme-viewer.c:117 | ||||
| #, fuzzy | ||||
| msgid "This is a demo button with an 'open' icon" | ||||
| msgstr "Toto je ukážkové tlačidlo s ikonou „open“" | ||||
| #~ msgid "This is a demo button with an 'open' icon" | ||||
| #~ msgstr "Toto je ukážkové tlačidlo s ikonou „open“" | ||||
|  | ||||
| # tooltip | ||||
| # JK: https://bugzilla.gnome.org/show_bug.cgi?id=698123 | ||||
| #: ../src/ui/theme-viewer.c:119 | ||||
| #, fuzzy | ||||
| msgid "This is a demo button with a 'quit' icon" | ||||
| msgstr "Toto je ukážkové tlačidlo s ikonou „quit“" | ||||
| #~ msgid "This is a demo button with a 'quit' icon" | ||||
| #~ msgstr "Toto je ukážkové tlačidlo s ikonou „quit“" | ||||
|  | ||||
| # label | ||||
| #: ../src/ui/theme-viewer.c:248 | ||||
| msgid "This is a sample message in a sample dialog" | ||||
| msgstr "Toto je ukážková správa v ukážkovom dialógovom okne" | ||||
| #~ msgid "This is a sample message in a sample dialog" | ||||
| #~ msgstr "Toto je ukážková správa v ukážkovom dialógovom okne" | ||||
|  | ||||
| # PK: falosna | ||||
| #: ../src/ui/theme-viewer.c:328 | ||||
| #, c-format | ||||
| msgid "Fake menu item %d\n" | ||||
| msgstr "Falošná položka ponuky č. %d\n" | ||||
| #~ msgid "Fake menu item %d\n" | ||||
| #~ msgstr "Falošná položka ponuky č. %d\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:363 | ||||
| msgid "Border-only window" | ||||
| msgstr "Okno len s okrajom" | ||||
| #~ msgid "Border-only window" | ||||
| #~ msgstr "Okno len s okrajom" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:365 | ||||
| msgid "Bar" | ||||
| msgstr "Lišta" | ||||
| #~ msgid "Bar" | ||||
| #~ msgstr "Lišta" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:382 | ||||
| msgid "Normal Application Window" | ||||
| msgstr "Normálne aplikačné okno" | ||||
| #~ msgid "Normal Application Window" | ||||
| #~ msgstr "Normálne aplikačné okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:386 | ||||
| msgid "Dialog Box" | ||||
| msgstr "Dialógové okno" | ||||
| #~ msgid "Dialog Box" | ||||
| #~ msgstr "Dialógové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:390 | ||||
| msgid "Modal Dialog Box" | ||||
| msgstr "Modálne dialógové okno" | ||||
| #~ msgid "Modal Dialog Box" | ||||
| #~ msgstr "Modálne dialógové okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:394 | ||||
| msgid "Utility Palette" | ||||
| msgstr "Paleta nástrojov" | ||||
| #~ msgid "Utility Palette" | ||||
| #~ msgstr "Paleta nástrojov" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:398 | ||||
| msgid "Torn-off Menu" | ||||
| msgstr "Vypnúť ponuku" | ||||
| #~ msgid "Torn-off Menu" | ||||
| #~ msgstr "Vypnúť ponuku" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:402 | ||||
| msgid "Border" | ||||
| msgstr "Okraj" | ||||
| #~ msgid "Border" | ||||
| #~ msgstr "Okraj" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:406 | ||||
| msgid "Attached Modal Dialog" | ||||
| msgstr "Pričlenené modálne okno" | ||||
| #~ msgid "Attached Modal Dialog" | ||||
| #~ msgstr "Pričlenené modálne okno" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:737 | ||||
| #, c-format | ||||
| msgid "Button layout test %d" | ||||
| msgstr "Test rozloženia tlačidiel č. %d" | ||||
| #~ msgid "Button layout test %d" | ||||
| #~ msgstr "Test rozloženia tlačidiel č. %d" | ||||
|  | ||||
| # PK: plural forms | ||||
| # JK: https://bugzilla.gnome.org/show_bug.cgi?id=697987 | ||||
| #: ../src/ui/theme-viewer.c:766 | ||||
| #, fuzzy, c-format | ||||
| msgid "%g milliseconds to draw one window frame" | ||||
| msgstr "%g milisekúnd pre vykreslenie jedného rámca okna" | ||||
| #, fuzzy | ||||
| #~ msgid "%g milliseconds to draw one window frame" | ||||
| #~ msgstr "%g milisekúnd pre vykreslenie jedného rámca okna" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:811 | ||||
| #, c-format | ||||
| msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| msgstr "Použitie: metacity-theme-viewer [NÁZOVTÉMY]\n" | ||||
| #~ msgid "Usage: metacity-theme-viewer [THEMENAME]\n" | ||||
| #~ msgstr "Použitie: metacity-theme-viewer [NÁZOVTÉMY]\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:818 | ||||
| #, c-format | ||||
| msgid "Error loading theme: %s\n" | ||||
| msgstr "Chyba pri načítavaní témy: %s\n" | ||||
| #~ msgid "Error loading theme: %s\n" | ||||
| #~ msgstr "Chyba pri načítavaní témy: %s\n" | ||||
|  | ||||
| # PK: plural forms | ||||
| # JK: https://bugzilla.gnome.org/show_bug.cgi?id=697987 | ||||
| #: ../src/ui/theme-viewer.c:824 | ||||
| #, fuzzy, c-format | ||||
| msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| msgstr "Téma „%s“ načítaná za %g sekúnd\n" | ||||
| #, fuzzy | ||||
| #~ msgid "Loaded theme \"%s\" in %g seconds\n" | ||||
| #~ msgstr "Téma „%s“ načítaná za %g sekúnd\n" | ||||
|  | ||||
| # PK: inde titulku, aky je rozdiel | ||||
| #: ../src/ui/theme-viewer.c:869 | ||||
| msgid "Normal Title Font" | ||||
| msgstr "Obyčajné písmo titulku" | ||||
| #~ msgid "Normal Title Font" | ||||
| #~ msgstr "Obyčajné písmo titulku" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:875 | ||||
| msgid "Small Title Font" | ||||
| msgstr "Malé písmo titulku" | ||||
| #~ msgid "Small Title Font" | ||||
| #~ msgstr "Malé písmo titulku" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:881 | ||||
| msgid "Large Title Font" | ||||
| msgstr "Veľké písmo titulku" | ||||
| #~ msgid "Large Title Font" | ||||
| #~ msgstr "Veľké písmo titulku" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:886 | ||||
| msgid "Button Layouts" | ||||
| msgstr "Rozloženia tlačidiel" | ||||
| #~ msgid "Button Layouts" | ||||
| #~ msgstr "Rozloženia tlačidiel" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:891 | ||||
| msgid "Benchmark" | ||||
| msgstr "Test rýchlosti" | ||||
| #~ msgid "Benchmark" | ||||
| #~ msgstr "Test rýchlosti" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:947 | ||||
| msgid "Window Title Goes Here" | ||||
| msgstr "Sem príde názov okna" | ||||
| #~ msgid "Window Title Goes Here" | ||||
| #~ msgstr "Sem príde názov okna" | ||||
|  | ||||
| # PK: plural forms | ||||
| # JK: https://bugzilla.gnome.org/show_bug.cgi?id=697987 | ||||
| #: ../src/ui/theme-viewer.c:1053 | ||||
| #, fuzzy, 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 "" | ||||
| "Vykreslených %d rámcov za %g sekúnd na strane klienta (%g milisekúnd na " | ||||
| "rámec) a %g sekúnd celkového času vrátane zdrojov servera X (%g milisekúnd " | ||||
| "na rámec)\n" | ||||
| #, fuzzy | ||||
| #~ 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 "" | ||||
| #~ "Vykreslených %d rámcov za %g sekúnd na strane klienta (%g milisekúnd na " | ||||
| #~ "rámec) a %g sekúnd celkového času vrátane zdrojov servera X (%g " | ||||
| #~ "milisekúnd na rámec)\n" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1273 | ||||
| msgid "position expression test returned TRUE but set error" | ||||
| msgstr "test výrazu polohy vrátil TRUE, ale nastavil chybu" | ||||
| #~ msgid "position expression test returned TRUE but set error" | ||||
| #~ msgstr "test výrazu polohy 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 polohy vrátil FALSE, ale nenastavil chybu" | ||||
| #~ msgid "position expression test returned FALSE but didn't set error" | ||||
| #~ msgstr "test výrazu polohy vrátil FALSE, ale nenastavil chybu" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1279 | ||||
| msgid "Error was expected but none given" | ||||
| msgstr "Bola očakávaná chyba, ale žiadna nenastala" | ||||
| #~ msgid "Error was expected but none given" | ||||
| #~ msgstr "Bola očakávaná chyba, ale žiadna nenastala" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1281 | ||||
| #, c-format | ||||
| msgid "Error %d was expected but %d given" | ||||
| msgstr "Bola očakávaná chyba %d, ale nastala %d" | ||||
| #~ msgid "Error %d was expected but %d given" | ||||
| #~ msgstr "Bola očakávaná chyba %d, ale nastala %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1287 | ||||
| #, c-format | ||||
| msgid "Error not expected but one was returned: %s" | ||||
| msgstr "Chyba nebola očakávaná, ale bola vrátená: %s" | ||||
| #~ msgid "Error not expected but one was returned: %s" | ||||
| #~ msgstr "Chyba nebola očakávaná, ale bola vrátená: %s" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1291 | ||||
| #, c-format | ||||
| msgid "x value was %d, %d was expected" | ||||
| msgstr "hodnota x bola %d, očakávaná bola %d" | ||||
| #~ msgid "x value was %d, %d was expected" | ||||
| #~ msgstr "hodnota x bola %d, očakávaná bola %d" | ||||
|  | ||||
| #: ../src/ui/theme-viewer.c:1294 | ||||
| #, c-format | ||||
| msgid "y value was %d, %d was expected" | ||||
| msgstr "hodnota y bola %d, očakávaná bola %d" | ||||
| #~ msgid "y value was %d, %d was expected" | ||||
| #~ msgstr "hodnota y bola %d, očakávaná bola %d" | ||||
|  | ||||
| # PK: plural forms | ||||
| # JK: https://bugzilla.gnome.org/show_bug.cgi?id=697987 | ||||
| #: ../src/ui/theme-viewer.c:1359 | ||||
| #, fuzzy, c-format | ||||
| msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| msgstr "" | ||||
| "%d výrazov pre súradnice analyzovaných za %g sekúnd (priemer %g sekúnd)\n" | ||||
| #, fuzzy | ||||
| #~ msgid "" | ||||
| #~ "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" | ||||
| #~ msgstr "" | ||||
| #~ "%d výrazov pre súradnice analyzovaných za %g sekúnd (priemer %g sekúnd)\n" | ||||
|   | ||||
							
								
								
									
										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
											
										
									
								
							| @@ -1 +0,0 @@ | ||||
| EXTRA_DIST = xserver.xml | ||||
| @@ -1,18 +0,0 @@ | ||||
| <protocol name="xserver"> | ||||
|  | ||||
|   <interface name="xserver" version="1"> | ||||
|     <request name="set_window_id"> | ||||
|       <arg name="surface" type="object" interface="wl_surface"/> | ||||
|       <arg name="id" type="uint"/> | ||||
|     </request> | ||||
|  | ||||
|     <event name="client"> | ||||
|       <arg name="fd" type="fd"/> | ||||
|     </event> | ||||
|  | ||||
|     <event name="listen_socket"> | ||||
|       <arg name="fd" type="fd"/> | ||||
|     </event> | ||||
|   </interface> | ||||
|  | ||||
| </protocol> | ||||
							
								
								
									
										114
									
								
								src/Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								src/Makefile.am
									
									
									
									
									
								
							| @@ -1,7 +1,7 @@ | ||||
| # Flag build for parallelism; see https://savannah.gnu.org/patch/?6905 | ||||
| .AUTOPARALLEL: | ||||
|  | ||||
| lib_LTLIBRARIES = libmutter-wayland.la | ||||
| lib_LTLIBRARIES = libmutter.la | ||||
|  | ||||
| SUBDIRS=compositor/plugins | ||||
|  | ||||
| @@ -10,7 +10,6 @@ INCLUDES=								\ | ||||
| 	-DCOGL_ENABLE_EXPERIMENTAL_API					\ | ||||
| 	-DCOGL_ENABLE_EXPERIMENTAL_2_0_API                              \ | ||||
| 	$(MUTTER_CFLAGS)						\ | ||||
| 	-I$(top_builddir)						\ | ||||
| 	-I$(srcdir)							\ | ||||
| 	-I$(srcdir)/core						\ | ||||
| 	-I$(srcdir)/ui							\ | ||||
| @@ -30,20 +29,13 @@ INCLUDES=								\ | ||||
| 	-DMUTTER_PLUGIN_DIR=\"@MUTTER_PLUGIN_DIR@\"			\ | ||||
| 	-DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\" | ||||
|  | ||||
| INCLUDES += \ | ||||
| 	-I$(srcdir)/wayland						\ | ||||
| 	-I$(builddir)/wayland						\ | ||||
| 	-DXWAYLAND_PATH='"@XWAYLAND_PATH@"' | ||||
|  | ||||
| mutter_built_sources = \ | ||||
| 	$(dbus_idle_built_sources)		\ | ||||
| 	mutter-enum-types.h 			\ | ||||
| 	mutter-enum-types.c			\ | ||||
| 	wayland/xserver-protocol.c		\ | ||||
| 	wayland/xserver-server-protocol.h	\ | ||||
| 	wayland/xserver-client-protocol.h | ||||
| 	$(dbus_idle_built_sources)	\ | ||||
| 	$(dbus_xrandr_built_sources)	\ | ||||
| 	mutter-enum-types.h		\ | ||||
| 	mutter-enum-types.c | ||||
|  | ||||
| libmutter_wayland_la_SOURCES =			\ | ||||
| libmutter_la_SOURCES =				\ | ||||
| 	core/async-getprop.c			\ | ||||
| 	core/async-getprop.h			\ | ||||
| 	core/barrier.c				\ | ||||
| @@ -63,7 +55,8 @@ libmutter_wayland_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		\ | ||||
| @@ -72,7 +65,6 @@ libmutter_wayland_la_SOURCES =			\ | ||||
| 	compositor/meta-shadow-factory.c	\ | ||||
| 	compositor/meta-shadow-factory-private.h	\ | ||||
| 	compositor/meta-shaped-texture.c	\ | ||||
| 	compositor/meta-shaped-texture-private.h 	\ | ||||
| 	compositor/meta-texture-rectangle.c	\ | ||||
| 	compositor/meta-texture-rectangle.h	\ | ||||
| 	compositor/meta-texture-tower.c		\ | ||||
| @@ -105,6 +97,8 @@ libmutter_wayland_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				\ | ||||
| @@ -125,6 +119,11 @@ libmutter_wayland_la_SOURCES =			\ | ||||
| 	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				\ | ||||
| @@ -170,27 +169,13 @@ libmutter_wayland_la_SOURCES =			\ | ||||
| 	ui/theme.c				\ | ||||
| 	meta/theme.h				\ | ||||
| 	ui/theme-private.h			\ | ||||
| 	ui/ui.c					\ | ||||
| 	ui/ui.c | ||||
|  | ||||
| nodist_libmutter_la_SOURCES =			\ | ||||
| 	$(mutter_built_sources) | ||||
|  | ||||
| libmutter_wayland_la_SOURCES +=			\ | ||||
| 	wayland/meta-wayland.c			\ | ||||
| 	wayland/meta-wayland-private.h		\ | ||||
| 	wayland/meta-xwayland-private.h		\ | ||||
| 	wayland/meta-xwayland.c			\ | ||||
| 	wayland/meta-wayland-data-device.c      \ | ||||
| 	wayland/meta-wayland-data-device.h      \ | ||||
| 	wayland/meta-wayland-keyboard.c		\ | ||||
| 	wayland/meta-wayland-keyboard.h		\ | ||||
| 	wayland/meta-wayland-pointer.c		\ | ||||
| 	wayland/meta-wayland-pointer.h		\ | ||||
| 	wayland/meta-wayland-seat.c		\ | ||||
| 	wayland/meta-wayland-seat.h		\ | ||||
| 	wayland/meta-wayland-stage.h		\ | ||||
| 	wayland/meta-wayland-stage.c | ||||
|  | ||||
| libmutter_wayland_la_LDFLAGS = -no-undefined | ||||
| libmutter_wayland_la_LIBADD  = $(MUTTER_LIBS) | ||||
| libmutter_la_LDFLAGS = -no-undefined | ||||
| libmutter_la_LIBADD  = $(MUTTER_LIBS) | ||||
|  | ||||
| # Headers installed for plugins; introspected information will | ||||
| # be extracted into Mutter-<version>.gir | ||||
| @@ -228,16 +213,16 @@ libmutterinclude_base_headers =		\ | ||||
| libmutterinclude_extra_headers =		\ | ||||
| 	meta/atomnames.h | ||||
|  | ||||
| libmutterincludedir = $(includedir)/mutter-wayland/meta | ||||
| libmutterincludedir = $(includedir)/mutter/meta | ||||
|  | ||||
| libmutterinclude_HEADERS =			\ | ||||
| 	$(libmutterinclude_base_headers)	\ | ||||
| 	$(libmutterinclude_extra_headers) | ||||
|  | ||||
| bin_PROGRAMS=mutter-wayland | ||||
| bin_PROGRAMS=mutter | ||||
|  | ||||
| mutter_wayland_SOURCES = core/mutter.c | ||||
| mutter_wayland_LDADD = $(MUTTER_LIBS) libmutter-wayland.la | ||||
| mutter_SOURCES = core/mutter.c | ||||
| mutter_LDADD = $(MUTTER_LIBS) libmutter.la | ||||
|  | ||||
| if HAVE_INTROSPECTION | ||||
| include $(INTROSPECTION_MAKEFILE) | ||||
| @@ -259,15 +244,15 @@ typelib_DATA = Meta-$(api_version).typelib | ||||
|  | ||||
| INTROSPECTION_GIRS = Meta-$(api_version).gir | ||||
|  | ||||
| Meta-$(api_version).gir: libmutter-wayland.la | ||||
| Meta-$(api_version).gir: libmutter.la | ||||
| @META_GIR@_INCLUDES = GObject-2.0 GDesktopEnums-3.0 Gdk-3.0 Gtk-3.0 Clutter-1.0 xlib-2.0 xfixes-4.0 Cogl-1.0 | ||||
| @META_GIR@_EXPORT_PACKAGES = libmutter-wayland | ||||
| @META_GIR@_EXPORT_PACKAGES = libmutter | ||||
| @META_GIR@_CFLAGS = $(INCLUDES) | ||||
| @META_GIR@_LIBS = libmutter-wayland.la | ||||
| @META_GIR@_LIBS = libmutter.la | ||||
| @META_GIR@_FILES =				\ | ||||
| 	mutter-enum-types.h			\ | ||||
| 	$(libmutterinclude_base_headers)	\ | ||||
| 	$(filter %.c,$(libmutter_wayland_la_SOURCES)) | ||||
| 	$(filter %.c,$(libmutter_la_SOURCES) $(nodist_libmutter_la_SOURCES)) | ||||
| @META_GIR@_SCANNERFLAGS = --warn-all --warn-error | ||||
|  | ||||
| endif | ||||
| @@ -278,17 +263,22 @@ testasyncgetprop_SOURCES = core/testasyncgetprop.c | ||||
|  | ||||
| noinst_PROGRAMS=testboxes testgradient testasyncgetprop | ||||
|  | ||||
| testboxes_LDADD = $(MUTTER_LIBS) libmutter-wayland.la | ||||
| testgradient_LDADD = $(MUTTER_LIBS) libmutter-wayland.la | ||||
| testasyncgetprop_LDADD = $(MUTTER_LIBS) libmutter-wayland.la | ||||
| testboxes_LDADD = $(MUTTER_LIBS) libmutter.la | ||||
| testgradient_LDADD = $(MUTTER_LIBS) libmutter.la | ||||
| testasyncgetprop_LDADD = $(MUTTER_LIBS) libmutter.la | ||||
|  | ||||
| @INTLTOOL_DESKTOP_RULE@ | ||||
|  | ||||
| desktopfilesdir=$(datadir)/applications | ||||
| desktopfiles_in_files=mutter-wayland.desktop.in | ||||
| desktopfiles_in_files=mutter.desktop.in | ||||
| desktopfiles_files=$(desktopfiles_in_files:.desktop.in=.desktop) | ||||
| desktopfiles_DATA = $(desktopfiles_files) | ||||
|  | ||||
| wmpropertiesdir=$(datadir)/gnome/wm-properties | ||||
| wmproperties_in_files=mutter-wm.desktop.in | ||||
| wmproperties_files=$(wmproperties_in_files:.desktop.in=.desktop) | ||||
| wmproperties_DATA = $(wmproperties_files) | ||||
|  | ||||
| xmldir       = @GNOME_KEYBINDINGS_KEYSDIR@ | ||||
| xml_in_files = \ | ||||
|         50-mutter-navigation.xml.in	\ | ||||
| @@ -296,8 +286,6 @@ xml_in_files = \ | ||||
|         50-mutter-windows.xml.in | ||||
| xml_DATA     = $(xml_in_files:.xml.in=.xml) | ||||
|  | ||||
| dbus_idle_built_sources = meta-dbus-idle-monitor.c meta-dbus-idle-monitor.h | ||||
|  | ||||
| gsettings_SCHEMAS = org.gnome.mutter.gschema.xml | ||||
| @INTLTOOL_XML_NOMERGE_RULE@ | ||||
| @GSETTINGS_RULES@ | ||||
| @@ -306,7 +294,7 @@ convertdir = $(datadir)/GConf/gsettings | ||||
| convert_DATA = mutter-schemas.convert | ||||
|  | ||||
| CLEANFILES =					\ | ||||
| 	mutter-wayland.desktop			\ | ||||
| 	mutter.desktop				\ | ||||
| 	mutter-wm.desktop			\ | ||||
| 	org.gnome.mutter.gschema.xml		\ | ||||
| 	$(xml_DATA)				\ | ||||
| @@ -316,7 +304,7 @@ CLEANFILES =					\ | ||||
|  | ||||
| pkgconfigdir = $(libdir)/pkgconfig | ||||
|  | ||||
| pkgconfig_DATA = libmutter-wayland.pc | ||||
| pkgconfig_DATA = libmutter.pc mutter-plugins.pc | ||||
|  | ||||
| EXTRA_DIST=$(desktopfiles_files) 	\ | ||||
| 	$(wmproperties_files)		\ | ||||
| @@ -325,8 +313,11 @@ 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-wayland.pc.in \ | ||||
| 	libmutter.pc.in \ | ||||
| 	mutter-plugins.pc.in  \ | ||||
| 	mutter-enum-types.h.in \ | ||||
| 	mutter-enum-types.c.in | ||||
|  | ||||
| @@ -353,6 +344,15 @@ mutter-enum-types.c: stamp-mutter-enum-types.h mutter-enum-types.c.in | ||||
| 	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 | ||||
| @@ -362,13 +362,3 @@ $(dbus_idle_built_sources) : Makefile.am idle-monitor.xml | ||||
| 		--generate-c-code meta-dbus-idle-monitor				\ | ||||
| 		--c-generate-object-manager						\ | ||||
| 		$(srcdir)/idle-monitor.xml | ||||
|  | ||||
| wayland/%-protocol.c : $(top_builddir)/protocol/%.xml | ||||
| 	mkdir -p wayland | ||||
| 	$(AM_V_GEN)$(WAYLAND_SCANNER) code < $< > $@ | ||||
| wayland/%-server-protocol.h : $(top_builddir)/protocol/%.xml | ||||
| 	mkdir -p wayland | ||||
| 	$(AM_V_GEN)$(WAYLAND_SCANNER) server-header < $< > $@ | ||||
| wayland/%-client-protocol.h : $(top_builddir)/protocol/%.xml | ||||
| 	mkdir -p wayland | ||||
| 	$(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@ | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -84,7 +84,6 @@ | ||||
| #include "meta-window-group.h" | ||||
| #include "window-private.h" /* to check window->hidden */ | ||||
| #include "display-private.h" /* for meta_display_lookup_x_window() */ | ||||
| #include "meta-wayland-private.h" | ||||
| #include <X11/extensions/shape.h> | ||||
| #include <X11/extensions/Xcomposite.h> | ||||
|  | ||||
| @@ -173,32 +172,7 @@ process_damage (MetaCompositor     *compositor, | ||||
|   if (window_actor == NULL) | ||||
|     return; | ||||
|  | ||||
|   meta_window_actor_process_x11_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"); | ||||
|   meta_window_actor_process_damage (window_actor, event); | ||||
| } | ||||
|  | ||||
| static Window | ||||
| @@ -328,37 +302,29 @@ void | ||||
| meta_set_stage_input_region (MetaScreen   *screen, | ||||
|                              XserverRegion region) | ||||
| { | ||||
|   /* As a wayland compositor we can simply ignore all this trickery | ||||
|    * for setting an input region on the stage for capturing events in | ||||
|    * clutter since all input comes to us first and we get to choose | ||||
|    * who else sees them. | ||||
|    */ | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       MetaCompScreen *info = meta_screen_get_compositor_data (screen); | ||||
|       MetaDisplay  *display = meta_screen_get_display (screen); | ||||
|       Display      *xdpy    = meta_display_get_xdisplay (display); | ||||
|   MetaCompScreen *info = meta_screen_get_compositor_data (screen); | ||||
|   MetaDisplay  *display = meta_screen_get_display (screen); | ||||
|   Display      *xdpy    = meta_display_get_xdisplay (display); | ||||
|  | ||||
|       if (info->stage && info->output) | ||||
|         { | ||||
|           do_set_stage_input_region (screen, region); | ||||
|         } | ||||
|       else  | ||||
|         { | ||||
|           /* Reset info->pending_input_region if one existed before and set the new | ||||
|            * one to use it later. */  | ||||
|           if (info->pending_input_region) | ||||
|             { | ||||
|               XFixesDestroyRegion (xdpy, info->pending_input_region); | ||||
|               info->pending_input_region = None; | ||||
|             } | ||||
|           if (region != None) | ||||
|             { | ||||
|               info->pending_input_region = XFixesCreateRegion (xdpy, NULL, 0); | ||||
|               XFixesCopyRegion (xdpy, info->pending_input_region, region); | ||||
|             } | ||||
|         }  | ||||
|   if (info->stage && info->output) | ||||
|     { | ||||
|       do_set_stage_input_region (screen, region); | ||||
|     } | ||||
|   else  | ||||
|     { | ||||
|       /* Reset info->pending_input_region if one existed before and set the new | ||||
|        * one to use it later. */  | ||||
|       if (info->pending_input_region) | ||||
|         { | ||||
|           XFixesDestroyRegion (xdpy, info->pending_input_region); | ||||
|           info->pending_input_region = None; | ||||
|         } | ||||
|       if (region != None) | ||||
|         { | ||||
|           info->pending_input_region = XFixesCreateRegion (xdpy, NULL, 0); | ||||
|           XFixesCopyRegion (xdpy, info->pending_input_region, region); | ||||
|         } | ||||
|     }  | ||||
| } | ||||
|  | ||||
| void | ||||
| @@ -389,39 +355,33 @@ meta_focus_stage_window (MetaScreen *screen, | ||||
|   if (!stage) | ||||
|     return; | ||||
|  | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       window = clutter_x11_get_stage_window (stage); | ||||
|   window = clutter_x11_get_stage_window (stage); | ||||
|  | ||||
|       if (window == None) | ||||
|         return; | ||||
|   if (window == None) | ||||
|     return; | ||||
|  | ||||
|       meta_display_set_input_focus_xwindow (screen->display, | ||||
|                                             screen, | ||||
|                                             META_FOCUS_STAGE, | ||||
|                                             window, | ||||
|                                             timestamp); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       meta_display_set_input_focus_xwindow (screen->display, | ||||
|                                             screen, | ||||
|                                             META_FOCUS_STAGE, | ||||
|                                             None, | ||||
|                                             timestamp); | ||||
|     } | ||||
|   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; | ||||
|  | ||||
|   return (screen->display->focus_type == META_FOCUS_STAGE); | ||||
|   window = clutter_x11_get_stage_window (stage); | ||||
|  | ||||
|   if (window == None) | ||||
|     return FALSE; | ||||
|  | ||||
|   return (screen->display->focus_xwindow == window); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| @@ -584,11 +544,6 @@ redirect_windows (MetaCompositor *compositor, | ||||
|   guint        n_retries; | ||||
|   guint        max_retries; | ||||
|  | ||||
|   /* If we're running with wayland, connected to a headless xwayland | ||||
|    * server then all the windows are implicitly redirected offscreen | ||||
|    * already and it would generate an error to try and explicitly | ||||
|    * redirect them via XCompositeRedirectSubwindows() */ | ||||
|  | ||||
|   if (meta_get_replace_current_wm ()) | ||||
|     max_retries = 5; | ||||
|   else | ||||
| @@ -631,7 +586,6 @@ meta_compositor_manage_screen (MetaCompositor *compositor, | ||||
|   Display        *xdisplay      = meta_display_get_xdisplay (display); | ||||
|   Window          xwin; | ||||
|   gint            width, height; | ||||
|   MetaWaylandCompositor *wayland_compositor; | ||||
|  | ||||
|   /* Check if the screen is already managed */ | ||||
|   if (meta_screen_get_compositor_data (screen)) | ||||
| @@ -644,14 +598,7 @@ meta_compositor_manage_screen (MetaCompositor *compositor, | ||||
|    * We have to initialize info->pending_input_region to an empty region explicitly,  | ||||
|    * because None value is used to mean that the whole screen is an input region. | ||||
|    */ | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|     info->pending_input_region = XFixesCreateRegion (xdisplay, NULL, 0); | ||||
|   else | ||||
|     { | ||||
|       /* Stage input region trickery isn't needed when we're running as a | ||||
|        * wayland compositor. */ | ||||
|       info->pending_input_region = None; | ||||
|     } | ||||
|   info->pending_input_region = XFixesCreateRegion (xdisplay, NULL, 0); | ||||
|  | ||||
|   info->screen = screen; | ||||
|  | ||||
| @@ -662,53 +609,7 @@ meta_compositor_manage_screen (MetaCompositor *compositor, | ||||
|  | ||||
|   meta_screen_set_cm_selection (screen); | ||||
|  | ||||
|   /* We will have already created a stage if running as a wayland | ||||
|    * compositor... */ | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       wayland_compositor = meta_wayland_compositor_get_default (); | ||||
|       info->stage = wayland_compositor->stage; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       info->stage = clutter_stage_new (); | ||||
|  | ||||
|       meta_screen_get_size (screen, &width, &height); | ||||
|       clutter_actor_realize (info->stage); | ||||
|  | ||||
|       xwin = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage)); | ||||
|  | ||||
|       XResizeWindow (xdisplay, xwin, width, height); | ||||
|  | ||||
|         { | ||||
|           long event_mask; | ||||
|           unsigned char mask_bits[XIMaskLen (XI_LASTEVENT)] = { 0 }; | ||||
|           XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits }; | ||||
|           XWindowAttributes attr; | ||||
|  | ||||
|           meta_core_add_old_event_mask (xdisplay, xwin, &mask); | ||||
|  | ||||
|           XISetMask (mask.mask, XI_KeyPress); | ||||
|           XISetMask (mask.mask, XI_KeyRelease); | ||||
|           XISetMask (mask.mask, XI_ButtonPress); | ||||
|           XISetMask (mask.mask, XI_ButtonRelease); | ||||
|           XISetMask (mask.mask, XI_Enter); | ||||
|           XISetMask (mask.mask, XI_Leave); | ||||
|           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; | ||||
|           if (XGetWindowAttributes (xdisplay, xwin, &attr)) | ||||
|             event_mask |= attr.your_event_mask; | ||||
|  | ||||
|           XSelectInput (xdisplay, xwin, event_mask); | ||||
|         } | ||||
|     } | ||||
|   info->stage = clutter_stage_new (); | ||||
|  | ||||
|   clutter_stage_set_paint_callback (CLUTTER_STAGE (info->stage), | ||||
|                                     after_stage_paint, | ||||
| @@ -717,74 +618,90 @@ meta_compositor_manage_screen (MetaCompositor *compositor, | ||||
|  | ||||
|   clutter_stage_set_sync_delay (CLUTTER_STAGE (info->stage), META_SYNC_DELAY); | ||||
|  | ||||
|   meta_screen_get_size (screen, &width, &height); | ||||
|   clutter_actor_realize (info->stage); | ||||
|  | ||||
|   xwin = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage)); | ||||
|  | ||||
|   XResizeWindow (xdisplay, xwin, width, height); | ||||
|  | ||||
|   { | ||||
|     long event_mask; | ||||
|     unsigned char mask_bits[XIMaskLen (XI_LASTEVENT)] = { 0 }; | ||||
|     XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits }; | ||||
|     XWindowAttributes attr; | ||||
|  | ||||
|     meta_core_add_old_event_mask (xdisplay, xwin, &mask); | ||||
|  | ||||
|     XISetMask (mask.mask, XI_KeyPress); | ||||
|     XISetMask (mask.mask, XI_KeyRelease); | ||||
|     XISetMask (mask.mask, XI_ButtonPress); | ||||
|     XISetMask (mask.mask, XI_ButtonRelease); | ||||
|     XISetMask (mask.mask, XI_Enter); | ||||
|     XISetMask (mask.mask, XI_Leave); | ||||
|     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; | ||||
|     if (XGetWindowAttributes (xdisplay, xwin, &attr)) | ||||
|       event_mask |= attr.your_event_mask; | ||||
|  | ||||
|     XSelectInput (xdisplay, xwin, event_mask); | ||||
|   } | ||||
|  | ||||
|   info->window_group = meta_window_group_new (screen); | ||||
|   info->top_window_group = meta_window_group_new (screen); | ||||
|  | ||||
|   clutter_actor_add_child (info->stage, info->window_group); | ||||
|   clutter_actor_add_child (info->stage, info->top_window_group); | ||||
|  | ||||
|   info->output = get_output_window (screen); | ||||
|   XReparentWindow (xdisplay, xwin, info->output, 0, 0); | ||||
|  | ||||
|  /* Make sure there isn't any left-over output shape on the  | ||||
|   * overlay window by setting the whole screen to be an | ||||
|   * output region. | ||||
|   *  | ||||
|   * Note: there doesn't seem to be any real chance of that | ||||
|   *  because the X server will destroy the overlay window | ||||
|   *  when the last client using it exits. | ||||
|   */ | ||||
|   XFixesSetWindowShapeRegion (xdisplay, info->output, ShapeBounding, 0, 0, None); | ||||
|  | ||||
|   do_set_stage_input_region (screen, info->pending_input_region); | ||||
|   if (info->pending_input_region != None) | ||||
|     { | ||||
|       XFixesDestroyRegion (xdisplay, info->pending_input_region); | ||||
|       info->pending_input_region = None; | ||||
|     } | ||||
|  | ||||
|   info->plugin_mgr = meta_plugin_manager_new (screen); | ||||
|  | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       /* NB: When running as a wayland compositor we don't need an X | ||||
|        * composite overlay window, and we don't need to play any input | ||||
|        * region tricks to redirect events into clutter. */ | ||||
|       info->output = None; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       /* | ||||
|        * 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); | ||||
|   /* Map overlay window before redirecting windows offscreen so we catch their | ||||
|    * contents until we show the stage. | ||||
|    */ | ||||
|   XMapWindow (xdisplay, info->output); | ||||
|  | ||||
|       /* Make sure there isn't any left-over output shape on the  | ||||
|        * overlay window by setting the whole screen to be an | ||||
|        * output region. | ||||
|        *  | ||||
|        * Note: there doesn't seem to be any real chance of that | ||||
|        *  because the X server will destroy the overlay window | ||||
|        *  when the last client using it exits. | ||||
|        */ | ||||
|       XFixesSetWindowShapeRegion (xdisplay, info->output, ShapeBounding, 0, 0, None); | ||||
|  | ||||
|       do_set_stage_input_region (screen, info->pending_input_region); | ||||
|       if (info->pending_input_region != None) | ||||
|         { | ||||
|           XFixesDestroyRegion (xdisplay, info->pending_input_region); | ||||
|           info->pending_input_region = None; | ||||
|         } | ||||
|  | ||||
|       /* Map overlay window before redirecting windows offscreen so we catch their | ||||
|        * contents until we show the stage. | ||||
|        */ | ||||
|       XMapWindow (xdisplay, info->output); | ||||
|  | ||||
|       redirect_windows (compositor, screen); | ||||
|     } | ||||
|   redirect_windows (compositor, screen); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_compositor_unmanage_screen (MetaCompositor *compositor, | ||||
|                                  MetaScreen     *screen) | ||||
| { | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       MetaDisplay    *display       = meta_screen_get_display (screen); | ||||
|       Display        *xdisplay      = meta_display_get_xdisplay (display); | ||||
|       Window          xroot         = meta_screen_get_xroot (screen); | ||||
|   MetaDisplay    *display       = meta_screen_get_display (screen); | ||||
|   Display        *xdisplay      = meta_display_get_xdisplay (display); | ||||
|   Window          xroot         = meta_screen_get_xroot (screen); | ||||
|  | ||||
|       /* This is the most important part of cleanup - we have to do this | ||||
|        * before giving up the window manager selection or the next | ||||
|        * window manager won't be able to redirect subwindows */ | ||||
|       XCompositeUnredirectSubwindows (xdisplay, xroot, CompositeRedirectManual); | ||||
|     } | ||||
|   /* This is the most important part of cleanup - we have to do this | ||||
|    * before giving up the window manager selection or the next | ||||
|    * window manager won't be able to redirect subwindows */ | ||||
|   XCompositeUnredirectSubwindows (xdisplay, xroot, CompositeRedirectManual); | ||||
| } | ||||
|  | ||||
| /* | ||||
| @@ -807,7 +724,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,18 +773,15 @@ meta_compositor_remove_window (MetaCompositor *compositor, | ||||
|   if (!window_actor) | ||||
|     return; | ||||
|  | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       screen = meta_window_get_screen (window); | ||||
|       info = meta_screen_get_compositor_data (screen); | ||||
|   screen = meta_window_get_screen (window); | ||||
|   info = meta_screen_get_compositor_data (screen); | ||||
|  | ||||
|       if (window_actor == info->unredirected_window) | ||||
|         { | ||||
|           meta_window_actor_set_redirected (window_actor, TRUE); | ||||
|           meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (info->unredirected_window)), | ||||
|                                      NULL); | ||||
|           info->unredirected_window = NULL; | ||||
|         } | ||||
|   if (window_actor == info->unredirected_window) | ||||
|     { | ||||
|       meta_window_actor_set_redirected (window_actor, TRUE); | ||||
|       meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (info->unredirected_window)), | ||||
|                                  NULL); | ||||
|       info->unredirected_window = NULL; | ||||
|     } | ||||
|  | ||||
|   meta_window_actor_destroy (window_actor); | ||||
| @@ -927,8 +841,8 @@ is_grabbed_event (MetaDisplay *display, | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_compositor_window_x11_shape_changed (MetaCompositor *compositor, | ||||
|                                           MetaWindow     *window) | ||||
| meta_compositor_window_shape_changed (MetaCompositor *compositor, | ||||
|                                       MetaWindow     *window) | ||||
| { | ||||
|   MetaWindowActor *window_actor; | ||||
|   window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window)); | ||||
| @@ -938,6 +852,18 @@ meta_compositor_window_x11_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 | ||||
| @@ -998,10 +924,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 */ | ||||
| @@ -1047,34 +970,24 @@ 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 (!meta_is_wayland_compositor () && | ||||
|           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 | ||||
|      think the stage is invisible */ | ||||
|   if (!meta_is_wayland_compositor () && event->type == MapNotify) | ||||
|   if (event->type == MapNotify) | ||||
|     clutter_x11_handle_event (event); | ||||
|  | ||||
|   /* The above handling is basically just "observing" the events, so we return | ||||
| @@ -1207,6 +1120,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 | ||||
| @@ -1416,33 +1330,22 @@ meta_compositor_sync_screen_size (MetaCompositor  *compositor, | ||||
| 				  guint		   width, | ||||
| 				  guint		   height) | ||||
| { | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       /* It's not clear at the moment how we will be dealing with screen | ||||
|        * resizing as a Wayland compositor so for now just abort if we | ||||
|        * hit this code. */ | ||||
|       g_critical ("Unexpected call to meta_compositor_sync_screen_size() " | ||||
|                   "when running as a wayland compositor"); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       MetaDisplay    *display = meta_screen_get_display (screen); | ||||
|       MetaCompScreen *info    = meta_screen_get_compositor_data (screen); | ||||
|       Display        *xdisplay; | ||||
|       Window          xwin; | ||||
|   MetaDisplay    *display = meta_screen_get_display (screen); | ||||
|   MetaCompScreen *info    = meta_screen_get_compositor_data (screen); | ||||
|   Display        *xdisplay; | ||||
|   Window          xwin; | ||||
|  | ||||
|       DEBUG_TRACE ("meta_compositor_sync_screen_size\n"); | ||||
|       g_return_if_fail (info); | ||||
|   DEBUG_TRACE ("meta_compositor_sync_screen_size\n"); | ||||
|   g_return_if_fail (info); | ||||
|  | ||||
|       xdisplay = meta_display_get_xdisplay (display); | ||||
|       xwin = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage)); | ||||
|   xdisplay = meta_display_get_xdisplay (display); | ||||
|   xwin = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage)); | ||||
|  | ||||
|       XResizeWindow (xdisplay, xwin, width, height); | ||||
|   XResizeWindow (xdisplay, xwin, width, height); | ||||
|  | ||||
|       meta_verbose ("Changed size for stage on screen %d to %dx%d\n", | ||||
|                     meta_screen_get_screen_number (screen), | ||||
|                     width, height); | ||||
|     } | ||||
|   meta_verbose ("Changed size for stage on screen %d to %dx%d\n", | ||||
| 		meta_screen_get_screen_number (screen), | ||||
| 		width, height); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -1506,32 +1409,29 @@ pre_paint_windows (MetaCompScreen *info) | ||||
|   if (info->windows == NULL) | ||||
|     return; | ||||
|  | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|   top_window = g_list_last (info->windows)->data; | ||||
|  | ||||
|   if (meta_window_actor_should_unredirect (top_window) && | ||||
|       info->disable_unredirect_count == 0) | ||||
|     expected_unredirected_window = top_window; | ||||
|  | ||||
|   if (info->unredirected_window != expected_unredirected_window) | ||||
|     { | ||||
|       top_window = g_list_last (info->windows)->data; | ||||
|  | ||||
|       if (meta_window_actor_should_unredirect (top_window) && | ||||
|           info->disable_unredirect_count == 0) | ||||
|         expected_unredirected_window = top_window; | ||||
|  | ||||
|       if (info->unredirected_window != expected_unredirected_window) | ||||
|       if (info->unredirected_window != NULL) | ||||
|         { | ||||
|           if (info->unredirected_window != NULL) | ||||
|             { | ||||
|               meta_window_actor_set_redirected (info->unredirected_window, TRUE); | ||||
|               meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (info->unredirected_window)), | ||||
|                                          NULL); | ||||
|             } | ||||
|  | ||||
|           if (expected_unredirected_window != NULL) | ||||
|             { | ||||
|               meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (top_window)), | ||||
|                                          meta_window_actor_get_meta_window (top_window)); | ||||
|               meta_window_actor_set_redirected (top_window, FALSE); | ||||
|             } | ||||
|  | ||||
|           info->unredirected_window = expected_unredirected_window; | ||||
|           meta_window_actor_set_redirected (info->unredirected_window, TRUE); | ||||
|           meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (info->unredirected_window)), | ||||
|                                      NULL); | ||||
|         } | ||||
|  | ||||
|       if (expected_unredirected_window != NULL) | ||||
|         { | ||||
|           meta_shape_cow_for_window (meta_window_get_screen (meta_window_actor_get_meta_window (top_window)), | ||||
|                                      meta_window_actor_get_meta_window (top_window)); | ||||
|           meta_window_actor_set_redirected (top_window, FALSE); | ||||
|         } | ||||
|  | ||||
|       info->unredirected_window = expected_unredirected_window; | ||||
|     } | ||||
|  | ||||
|   for (l = info->windows; l; l = l->next) | ||||
| @@ -1586,13 +1486,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; | ||||
| @@ -1604,18 +1498,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); | ||||
|   | ||||
| @@ -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); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -1031,7 +1031,6 @@ meta_background_load_file_finish (MetaBackground  *self, | ||||
|                                   GAsyncResult    *result, | ||||
|                                   GError         **error) | ||||
| { | ||||
|   static CoglUserDataKey key; | ||||
|   GTask *task; | ||||
|   LoadFileTaskData *task_data; | ||||
|   CoglTexture *texture; | ||||
| @@ -1077,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,39 +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); | ||||
|  | ||||
|   /* When mutter is running as a wayland compositor, things like input | ||||
|    * events just come directly from clutter so it won't have disabled | ||||
|    * clutter's event retrieval and won't need to forward it events (if | ||||
|    * it did it would lead to recursion). Also when running as a | ||||
|    * wayland compositor we shouldn't be assuming that we're running | ||||
|    * with the clutter x11 backend. | ||||
|    */ | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     return FALSE; | ||||
|  | ||||
|   return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE; | ||||
|   if (klass->confirm_display_change) | ||||
|     return klass->confirm_display_change (plugin); | ||||
|   else | ||||
|     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) | ||||
| { | ||||
| @@ -332,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); | ||||
| } | ||||
|   | ||||
| @@ -1,44 +0,0 @@ | ||||
| /* | ||||
|  * shaped texture | ||||
|  * | ||||
|  * An actor to draw a texture clipped to a list of rectangles | ||||
|  * | ||||
|  * Authored By Neil Roberts  <neil@linux.intel.com> | ||||
|  * | ||||
|  * Copyright (C) 2008 Intel Corporation | ||||
|  *               2013 Red Hat, Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||||
|  * 02111-1307, USA. | ||||
|  */ | ||||
|  | ||||
| #ifndef __META_SHAPED_TEXTURE_PRIVATE_H__ | ||||
| #define __META_SHAPED_TEXTURE_PRIVATE_H__ | ||||
|  | ||||
| #include <meta/meta-shaped-texture.h> | ||||
| #include "meta-wayland-private.h" | ||||
|  | ||||
| ClutterActor *meta_shaped_texture_new_with_xwindow (Window xwindow); | ||||
| ClutterActor *meta_shaped_texture_new_with_wayland_surface  (MetaWaylandSurface *surface); | ||||
| void meta_shaped_texture_set_wayland_surface                (MetaShapedTexture  *stex, | ||||
|                                                              MetaWaylandSurface *surface); | ||||
| MetaWaylandSurface *meta_shaped_texture_get_wayland_surface (MetaShapedTexture *stex); | ||||
|  | ||||
| void meta_shaped_texture_set_pixmap (MetaShapedTexture *stex, | ||||
|                                      Pixmap             pixmap); | ||||
| void meta_shaped_texture_attach_wayland_buffer (MetaShapedTexture  *stex, | ||||
|                                                 MetaWaylandBuffer  *buffer); | ||||
|  | ||||
| #endif | ||||
| @@ -30,13 +30,9 @@ | ||||
| #include <config.h> | ||||
|  | ||||
| #include <meta/meta-shaped-texture.h> | ||||
| #include <meta/util.h> | ||||
| #include "clutter-utils.h" | ||||
| #include "meta-texture-tower.h" | ||||
|  | ||||
| #include "meta-shaped-texture-private.h" | ||||
| #include "meta-wayland-private.h" | ||||
| #include <cogl/cogl-wayland-server.h> | ||||
|  | ||||
| #include <clutter/clutter.h> | ||||
| #include <cogl/cogl.h> | ||||
| #include <cogl/cogl-texture-pixmap-x11.h> | ||||
| @@ -60,13 +56,6 @@ static void meta_shaped_texture_get_preferred_height (ClutterActor *self, | ||||
|  | ||||
| static gboolean meta_shaped_texture_get_paint_volume (ClutterActor *self, ClutterPaintVolume *volume); | ||||
|  | ||||
| typedef enum _MetaShapedTextureType | ||||
| { | ||||
|   META_SHAPED_TEXTURE_TYPE_X11_PIXMAP, | ||||
|   META_SHAPED_TEXTURE_TYPE_WAYLAND_SURFACE, | ||||
| } MetaShapedTextureType; | ||||
|  | ||||
|  | ||||
| G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture, | ||||
|                CLUTTER_TYPE_ACTOR); | ||||
|  | ||||
| @@ -77,24 +66,12 @@ G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture, | ||||
| struct _MetaShapedTexturePrivate | ||||
| { | ||||
|   MetaTextureTower *paint_tower; | ||||
|  | ||||
|   MetaShapedTextureType type; | ||||
|   union { | ||||
|     struct { | ||||
|       Pixmap pixmap; | ||||
|     } x11; | ||||
|     struct { | ||||
|       MetaWaylandSurface *surface; | ||||
|     } wayland; | ||||
|   }; | ||||
|  | ||||
|   CoglTexture *texture; | ||||
|  | ||||
|   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; | ||||
| @@ -127,10 +104,7 @@ meta_shaped_texture_init (MetaShapedTexture *self) | ||||
|   priv = self->priv = META_SHAPED_TEXTURE_GET_PRIVATE (self); | ||||
|  | ||||
|   priv->paint_tower = meta_texture_tower_new (); | ||||
|  | ||||
|   priv->type = META_SHAPED_TEXTURE_TYPE_X11_PIXMAP; | ||||
|   priv->texture = NULL; | ||||
|  | ||||
|   priv->mask_texture = NULL; | ||||
|   priv->create_mipmaps = TRUE; | ||||
| } | ||||
| @@ -145,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); | ||||
| @@ -155,69 +128,90 @@ meta_shaped_texture_dispose (GObject *object) | ||||
|   G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object); | ||||
| } | ||||
|  | ||||
| static void | ||||
| set_cogl_texture (MetaShapedTexture *stex, | ||||
|                   CoglTexture       *cogl_tex) | ||||
| static CoglPipeline * | ||||
| get_unmasked_pipeline (CoglContext *ctx) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   guint width, height; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->texture) | ||||
|     cogl_object_unref (priv->texture); | ||||
|  | ||||
|   priv->texture = cogl_tex; | ||||
|  | ||||
|   if (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)); | ||||
|       height = cogl_texture_get_height (COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|       if (width != priv->tex_width || | ||||
|           height != priv->tex_height) | ||||
|         { | ||||
|           priv->tex_width = width; | ||||
|           priv->tex_height = height; | ||||
|  | ||||
|           clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|         } | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       /* size changed to 0 going to an invalid handle */ | ||||
|       priv->tex_width = 0; | ||||
|       priv->tex_height = 0; | ||||
|       clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|     } | ||||
|  | ||||
|   /* NB: We don't queue a redraw of the actor here because we don't | ||||
|    * know how much of the buffer has changed with respect to the | ||||
|    * previous buffer. We only queue a redraw in response to surface | ||||
|    * damage. */ | ||||
|   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; | ||||
| @@ -254,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 | ||||
| @@ -368,13 +401,16 @@ meta_shaped_texture_pick (ClutterActor       *actor, | ||||
|  | ||||
|   /* If there is no region then use the regular pick */ | ||||
|   if (priv->input_shape_region == NULL) | ||||
|     CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class) | ||||
|       ->pick (actor, color); | ||||
|     CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class)->pick (actor, color); | ||||
|   else | ||||
|     { | ||||
|       int n_rects; | ||||
|       float *rectangles; | ||||
|       int i; | ||||
|       CoglPipeline *pipeline; | ||||
|       CoglContext *ctx; | ||||
|       CoglFramebuffer *fb; | ||||
|       CoglColor cogl_color; | ||||
|  | ||||
|       /* Note: We don't bother trying to intersect the pick and clip regions | ||||
|        * since needing to copy the region, do the intersection, and probably | ||||
| @@ -403,12 +439,17 @@ meta_shaped_texture_pick (ClutterActor       *actor, | ||||
|           rectangles[pos + 3] = rect.y + rect.height; | ||||
|         } | ||||
|  | ||||
|       cogl_set_source_color4ub (color->red, | ||||
|                                 color->green, | ||||
|                                 color->blue, | ||||
|                                 color->alpha); | ||||
|       ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|       fb = cogl_get_draw_framebuffer (); | ||||
|  | ||||
|       cogl_rectangles (rectangles, n_rects); | ||||
|       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); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -458,45 +499,11 @@ meta_shaped_texture_get_paint_volume (ClutterActor *self, | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_shaped_texture_new_with_wayland_surface (MetaWaylandSurface *surface) | ||||
| meta_shaped_texture_new (void) | ||||
| { | ||||
|   ClutterActor *actor = g_object_new (META_TYPE_SHAPED_TEXTURE, NULL); | ||||
|   MetaShapedTexturePrivate *priv = META_SHAPED_TEXTURE (actor)->priv; | ||||
|   ClutterActor *self = g_object_new (META_TYPE_SHAPED_TEXTURE, NULL); | ||||
|  | ||||
|   /* XXX: it could probably be better to have a "type" construct-only | ||||
|    * property or create wayland/x11 subclasses */ | ||||
|   priv->type = META_SHAPED_TEXTURE_TYPE_WAYLAND_SURFACE; | ||||
|  | ||||
|   meta_shaped_texture_set_wayland_surface (META_SHAPED_TEXTURE (actor), | ||||
|                                            surface); | ||||
|  | ||||
|   return actor; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_shaped_texture_set_wayland_surface (MetaShapedTexture *stex, | ||||
|                                          MetaWaylandSurface *surface) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|  | ||||
|   priv->wayland.surface = surface; | ||||
|  | ||||
|   if (surface && surface->buffer_ref.buffer) | ||||
|     meta_shaped_texture_attach_wayland_buffer (stex, | ||||
|                                                surface->buffer_ref.buffer); | ||||
| } | ||||
|  | ||||
| MetaWaylandSurface * | ||||
| meta_shaped_texture_get_wayland_surface (MetaShapedTexture *stex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv = stex->priv; | ||||
|   return priv->wayland.surface; | ||||
| } | ||||
|  | ||||
| ClutterActor * | ||||
| meta_shaped_texture_new_with_xwindow (Window xwindow) | ||||
| { | ||||
|   return g_object_new (META_TYPE_SHAPED_TEXTURE, NULL); | ||||
|   return self; | ||||
| } | ||||
|  | ||||
| void | ||||
| @@ -515,7 +522,8 @@ meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex, | ||||
|     { | ||||
|       CoglTexture *base_texture; | ||||
|       priv->create_mipmaps = create_mipmaps; | ||||
|       base_texture = create_mipmaps ? priv->texture : NULL; | ||||
|       base_texture = create_mipmaps ? | ||||
|         COGL_TEXTURE (priv->texture) : NULL; | ||||
|       meta_texture_tower_set_base_texture (priv->paint_tower, base_texture); | ||||
|     } | ||||
| } | ||||
| @@ -541,142 +549,115 @@ meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex, | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| static void | ||||
| wayland_surface_update_area (MetaShapedTexture *stex, | ||||
|                              int                x, | ||||
|                              int                y, | ||||
|                              int                width, | ||||
|                              int                height) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   MetaWaylandBuffer *buffer; | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   g_return_if_fail (priv->type == META_SHAPED_TEXTURE_TYPE_WAYLAND_SURFACE); | ||||
|   g_return_if_fail (priv->texture != NULL); | ||||
|  | ||||
|   buffer = priv->wayland.surface->buffer_ref.buffer; | ||||
|  | ||||
|   if (buffer) | ||||
|     { | ||||
|       struct wl_resource *resource = buffer->resource; | ||||
|       struct wl_shm_buffer *shm_buffer = wl_shm_buffer_get (resource); | ||||
|  | ||||
|       if (shm_buffer) | ||||
|         { | ||||
|           CoglPixelFormat format; | ||||
|  | ||||
|           switch (wl_shm_buffer_get_format (shm_buffer)) | ||||
|             { | ||||
| #if G_BYTE_ORDER == G_BIG_ENDIAN | ||||
|             case WL_SHM_FORMAT_ARGB8888: | ||||
|               format = COGL_PIXEL_FORMAT_ARGB_8888_PRE; | ||||
|               break; | ||||
|             case WL_SHM_FORMAT_XRGB8888: | ||||
|               format = COGL_PIXEL_FORMAT_ARGB_8888; | ||||
|               break; | ||||
| #elif G_BYTE_ORDER == G_LITTLE_ENDIAN | ||||
|             case WL_SHM_FORMAT_ARGB8888: | ||||
|               format = COGL_PIXEL_FORMAT_BGRA_8888_PRE; | ||||
|               break; | ||||
|             case WL_SHM_FORMAT_XRGB8888: | ||||
|               format = COGL_PIXEL_FORMAT_BGRA_8888; | ||||
|               break; | ||||
| #endif | ||||
|             default: | ||||
|               g_warn_if_reached (); | ||||
|               format = COGL_PIXEL_FORMAT_ARGB_8888; | ||||
|             } | ||||
|  | ||||
|           cogl_texture_set_region (priv->texture, | ||||
|                                    x, y, | ||||
|                                    x, y, | ||||
|                                    width, height, | ||||
|                                    width, height, | ||||
|                                    format, | ||||
|                                    wl_shm_buffer_get_stride (shm_buffer), | ||||
|                                    wl_shm_buffer_get_data (shm_buffer)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| queue_damage_redraw_with_clip (MetaShapedTexture *stex, | ||||
|                                int x, | ||||
|                                int y, | ||||
|                                int width, | ||||
|                                int height) | ||||
| { | ||||
|   ClutterActor *self = CLUTTER_ACTOR (stex); | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   ClutterActorBox allocation; | ||||
|   float scale_x; | ||||
|   float scale_y; | ||||
|   cairo_rectangle_int_t clip; | ||||
|  | ||||
|   /* NB: clutter_actor_queue_redraw_with_clip expects a box in the actor's | ||||
|    * coordinate space so we need to convert from surface coordinates to | ||||
|    * actor coordinates... | ||||
|    */ | ||||
|  | ||||
|   /* Calling clutter_actor_get_allocation_box() is enormously expensive | ||||
|    * if the actor has an out-of-date allocation, since it triggers | ||||
|    * a full redraw. clutter_actor_queue_redraw_with_clip() would redraw | ||||
|    * the whole stage anyways in that case, so just go ahead and do | ||||
|    * it here. | ||||
|    */ | ||||
|   if (!clutter_actor_has_allocation (self)) | ||||
|     { | ||||
|       clutter_actor_queue_redraw (self); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->tex_width == 0 || priv->tex_height == 0) | ||||
|     return; | ||||
|  | ||||
|   clutter_actor_get_allocation_box (self, &allocation); | ||||
|  | ||||
|   scale_x = (allocation.x2 - allocation.x1) / priv->tex_width; | ||||
|   scale_y = (allocation.y2 - allocation.y1) / priv->tex_height; | ||||
|  | ||||
|   clip.x = x * scale_x; | ||||
|   clip.y = y * scale_y; | ||||
|   clip.width = width * scale_x; | ||||
|   clip.height = height * scale_y; | ||||
|   clutter_actor_queue_redraw_with_clip (self, &clip); | ||||
| } | ||||
|  | ||||
| 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                x, | ||||
| 				 int                y, | ||||
| 				 int                width, | ||||
| 				 int                height, | ||||
| 				 cairo_region_t    *unobscured_region) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   const cairo_rectangle_int_t clip = { x, y, width, height }; | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->texture == NULL) | ||||
|     return; | ||||
|     return FALSE; | ||||
|  | ||||
|   switch (priv->type) | ||||
|     { | ||||
|     case META_SHAPED_TEXTURE_TYPE_X11_PIXMAP: | ||||
|       cogl_texture_pixmap_x11_update_area (COGL_TEXTURE_PIXMAP_X11 (priv->texture), | ||||
|                                            x, y, width, height); | ||||
|       break; | ||||
|     case META_SHAPED_TEXTURE_TYPE_WAYLAND_SURFACE: | ||||
|       wayland_surface_update_area (stex, x, y, width, height); | ||||
|       break; | ||||
|     } | ||||
|   cogl_texture_pixmap_x11_update_area (priv->texture, | ||||
|                                        x, y, width, height); | ||||
|  | ||||
|   meta_texture_tower_update_area (priv->paint_tower, x, y, width, height); | ||||
|  | ||||
|   queue_damage_redraw_with_clip (stex, 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 | ||||
| set_cogl_texture (MetaShapedTexture    *stex, | ||||
|                   CoglTexturePixmapX11 *cogl_tex) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|   guint width, height; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->texture != NULL) | ||||
|     cogl_object_unref (priv->texture); | ||||
|  | ||||
|   priv->texture = cogl_tex; | ||||
|  | ||||
|   if (cogl_tex != NULL) | ||||
|     { | ||||
|       width = cogl_texture_get_width (COGL_TEXTURE (cogl_tex)); | ||||
|       height = cogl_texture_get_height (COGL_TEXTURE (cogl_tex)); | ||||
|  | ||||
|       if (width != priv->tex_width || | ||||
|           height != priv->tex_height) | ||||
|         { | ||||
|           priv->tex_width = width; | ||||
|           priv->tex_height = height; | ||||
|  | ||||
|           clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|         } | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       /* size changed to 0 going to an inavlid texture */ | ||||
|       priv->tex_width = 0; | ||||
|       priv->tex_height = 0; | ||||
|       clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); | ||||
|     } | ||||
|  | ||||
|   clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -694,64 +675,16 @@ meta_shaped_texture_set_pixmap (MetaShapedTexture *stex, | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   if (priv->x11.pixmap == pixmap) | ||||
|   if (priv->pixmap == pixmap) | ||||
|     return; | ||||
|  | ||||
|   priv->x11.pixmap = pixmap; | ||||
|   priv->pixmap = pixmap; | ||||
|  | ||||
|   if (pixmap != None) | ||||
|     { | ||||
|       CoglContext *ctx = | ||||
|         clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|       CoglTexture *texture = | ||||
|         COGL_TEXTURE (cogl_texture_pixmap_x11_new (ctx, pixmap, FALSE, NULL)); | ||||
|       set_cogl_texture (stex, texture); | ||||
|     } | ||||
|   else | ||||
|     set_cogl_texture (stex, NULL); | ||||
|  | ||||
|   if (priv->create_mipmaps) | ||||
|     meta_texture_tower_set_base_texture (priv->paint_tower, | ||||
|                                          COGL_TEXTURE (priv->texture)); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_shaped_texture_attach_wayland_buffer (MetaShapedTexture  *stex, | ||||
|                                            MetaWaylandBuffer  *buffer) | ||||
| { | ||||
|   MetaShapedTexturePrivate *priv; | ||||
|  | ||||
|   g_return_if_fail (META_IS_SHAPED_TEXTURE (stex)); | ||||
|  | ||||
|   priv = stex->priv; | ||||
|  | ||||
|   /* TODO: we should change this api to be something like | ||||
|    * meta_shaped_texture_notify_buffer_attach() since we now maintain | ||||
|    * a reference to the MetaWaylandSurface where we can access the | ||||
|    * buffer without it being explicitly passed as an argument. | ||||
|    */ | ||||
|   g_return_if_fail (priv->wayland.surface->buffer_ref.buffer == buffer); | ||||
|  | ||||
|   if (buffer) | ||||
|     { | ||||
|       CoglContext *ctx = | ||||
|         clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|       CoglError *catch_error = NULL; | ||||
|       CoglTexture *texture = | ||||
|         COGL_TEXTURE (cogl_wayland_texture_2d_new_from_buffer (ctx, | ||||
|                                                                buffer->resource, | ||||
|                                                                &catch_error)); | ||||
|       if (!texture) | ||||
|         { | ||||
|           cogl_error_free (catch_error); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           buffer->width = cogl_texture_get_width (texture); | ||||
|           buffer->height = cogl_texture_get_height (texture); | ||||
|         } | ||||
|  | ||||
|       set_cogl_texture (stex, texture); | ||||
|       set_cogl_texture (stex, cogl_texture_pixmap_x11_new (ctx, pixmap, FALSE, NULL)); | ||||
|     } | ||||
|   else | ||||
|     set_cogl_texture (stex, NULL); | ||||
| @@ -812,8 +745,8 @@ meta_shaped_texture_set_input_shape_region (MetaShapedTexture *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 | ||||
| @@ -834,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); | ||||
| @@ -845,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); | ||||
| } | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -5,9 +5,6 @@ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include <wayland-server.h> | ||||
| #include <meta-wayland-private.h> | ||||
|  | ||||
| #include <X11/extensions/Xdamage.h> | ||||
| #include <meta/compositor-mutter.h> | ||||
|  | ||||
| @@ -27,18 +24,8 @@ void meta_window_actor_unmaximize (MetaWindowActor *self, | ||||
|                                    MetaRectangle   *old_rect, | ||||
|                                    MetaRectangle   *new_rect); | ||||
|  | ||||
| void meta_window_actor_process_x11_damage (MetaWindowActor    *self, | ||||
|                                            XDamageNotifyEvent *event); | ||||
|  | ||||
| void meta_window_actor_process_wayland_damage (MetaWindowActor *self, | ||||
|                                                int              x, | ||||
|                                                int              y, | ||||
|                                                int              width, | ||||
|                                                int              height); | ||||
| void meta_window_actor_set_wayland_surface    (MetaWindowActor    *self, | ||||
|                                                MetaWaylandSurface *surface); | ||||
| void meta_window_actor_attach_wayland_buffer  (MetaWindowActor   *self, | ||||
|                                                MetaWaylandBuffer *buffer); | ||||
| void meta_window_actor_process_damage (MetaWindowActor    *self, | ||||
|                                        XDamageNotifyEvent *event); | ||||
|  | ||||
| void meta_window_actor_pre_paint      (MetaWindowActor    *self); | ||||
| void meta_window_actor_post_paint     (MetaWindowActor    *self); | ||||
| @@ -68,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,9 +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 | ||||
| { | ||||
| @@ -27,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 | ||||
| @@ -87,20 +89,54 @@ 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_region_t *clip_region; | ||||
|   cairo_region_t *unobscured_region; | ||||
|   ClutterActorIter iter; | ||||
|   ClutterActor *child; | ||||
|   cairo_rectangle_int_t visible_rect; | ||||
|   cairo_rectangle_int_t visible_rect, clip_rect; | ||||
|   int paint_x_offset, paint_y_offset; | ||||
|   int paint_x_origin, paint_y_origin; | ||||
|   int actor_x_origin, actor_y_origin; | ||||
|   int paint_x_offset, paint_y_offset; | ||||
|  | ||||
|   MetaWindowGroup *window_group = META_WINDOW_GROUP (actor); | ||||
|   MetaCompScreen *info; | ||||
|   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 | ||||
| @@ -122,8 +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)); | ||||
|  | ||||
|   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 | ||||
| @@ -131,142 +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); | ||||
|  | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|   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) | ||||
|     { | ||||
|       info = meta_screen_get_compositor_data (window_group->screen); | ||||
|       if (info->unredirected_window != NULL) | ||||
|         { | ||||
|           cairo_rectangle_int_t unredirected_rect; | ||||
|           MetaWindow *window = meta_window_actor_get_meta_window (info->unredirected_window); | ||||
|       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); | ||||
|     } | ||||
|  | ||||
|   /* 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. | ||||
|    */ | ||||
|   clutter_actor_iter_init (&iter, actor); | ||||
|   while (clutter_actor_iter_prev (&iter, &child)) | ||||
|     { | ||||
|       if (!CLUTTER_ACTOR_IS_VISIBLE (child)) | ||||
|         continue; | ||||
|   meta_cullable_cull_out (META_CULLABLE (window_group), unobscured_region, clip_region); | ||||
|  | ||||
|       if (!meta_is_wayland_compositor () && | ||||
|           info->unredirected_window != NULL && | ||||
|           child == CLUTTER_ACTOR (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 (child)) | ||||
|         continue; | ||||
|  | ||||
|       if (META_IS_WINDOW_ACTOR (child)) | ||||
|         { | ||||
|           MetaWindow *meta_window; | ||||
|           MetaWindowActor *window_actor = META_WINDOW_ACTOR (child); | ||||
|           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); | ||||
|  | ||||
|           /* TODO: Track the opaque regions of wayland clients. | ||||
|            * Although wayland clients can report opaque window | ||||
|            * regions, for now we assume that all wayland clients are | ||||
|            * transparent... */ | ||||
|           meta_window = meta_window_actor_get_meta_window (window_actor); | ||||
|  | ||||
|           if (meta_window->client_type != META_WINDOW_CLIENT_TYPE_WAYLAND && | ||||
|               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 (child) || | ||||
|                META_IS_BACKGROUND_GROUP (child)) | ||||
|         { | ||||
|           int x, y; | ||||
|  | ||||
|           if (!meta_actor_is_untransformed (child, &x, &y)) | ||||
|             continue; | ||||
|  | ||||
|           x += paint_x_offset; | ||||
|           y += paint_y_offset; | ||||
|  | ||||
|           cairo_region_translate (visible_region, - x, - y); | ||||
|  | ||||
|           if (META_IS_BACKGROUND_GROUP (child)) | ||||
|             meta_background_group_set_visible_region (META_BACKGROUND_GROUP (child), visible_region); | ||||
|           else | ||||
|             meta_background_actor_set_visible_region (META_BACKGROUND_ACTOR (child), 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) | ||||
|    */ | ||||
|   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_reset_visible_regions (window_actor); | ||||
|         } | ||||
|       else if (META_IS_BACKGROUND_ACTOR (child)) | ||||
|         { | ||||
|           MetaBackgroundActor *background_actor = META_BACKGROUND_ACTOR (child); | ||||
|           meta_background_actor_set_visible_region (background_actor, NULL); | ||||
|         } | ||||
|     } | ||||
|   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); | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
| @@ -269,8 +271,6 @@ meta_core_lower_beneath_grab_window (Display *xdisplay, | ||||
|   MetaDisplay *display; | ||||
|   MetaScreen *screen; | ||||
|   MetaWindow *grab_window; | ||||
|   MetaStackWindow stack_window; | ||||
|   MetaStackWindow stack_sibling; | ||||
|  | ||||
|   display = meta_display_for_x_display (xdisplay); | ||||
|   screen = meta_display_screen_for_xwindow (display, xwindow); | ||||
| @@ -280,16 +280,11 @@ 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); | ||||
|  | ||||
|   stack_window.any.type = META_WINDOW_CLIENT_TYPE_X11; | ||||
|   stack_window.x11.xwindow = xwindow; | ||||
|   stack_sibling.any.type = META_WINDOW_CLIENT_TYPE_X11; | ||||
|   stack_sibling.x11.xwindow = changes.sibling; | ||||
|   meta_stack_tracker_record_lower_below (screen->stack_tracker, | ||||
|                                          &stack_window, | ||||
|                                          &stack_sibling, | ||||
|                                          xwindow, | ||||
|                                          changes.sibling, | ||||
|                                          XNextRequest (screen->display->xdisplay)); | ||||
|  | ||||
|   meta_error_trap_push (display); | ||||
| @@ -474,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, | ||||
|   | ||||
| @@ -86,14 +86,6 @@ typedef enum { | ||||
|   META_TILE_MAXIMIZED | ||||
| } MetaTileMode; | ||||
|  | ||||
| typedef enum { | ||||
|   META_FOCUS_NONE = 0, | ||||
|   META_FOCUS_X_CLIENT = 1, | ||||
|   META_FOCUS_WAYLAND_CLIENT = 2, | ||||
|   META_FOCUS_NO_FOCUS_WINDOW = 3, | ||||
|   META_FOCUS_STAGE = 4 | ||||
| } MetaFocusType; | ||||
|  | ||||
| struct _MetaDisplay | ||||
| { | ||||
|   GObject parent_instance; | ||||
| @@ -125,7 +117,6 @@ struct _MetaDisplay | ||||
|    * like the no_focus_window or the stage X window. */ | ||||
|   Window focus_xwindow; | ||||
|   gulong focus_serial; | ||||
|   MetaFocusType focus_type; | ||||
|  | ||||
|   /* last timestamp passed to XSetInputFocus */ | ||||
|   guint32 last_focus_time; | ||||
| @@ -147,6 +138,14 @@ struct _MetaDisplay | ||||
|    */ | ||||
|   guint allow_terminal_deactivation : 1; | ||||
|  | ||||
|   /* If true, server->focus_serial refers to us changing the focus; in | ||||
|    * this case, we can ignore focus events that have exactly focus_serial, | ||||
|    * since we take care to make another request immediately afterwards. | ||||
|    * But if focus is being changed by another client, we have to accept | ||||
|    * multiple events with the same serial. | ||||
|    */ | ||||
|   guint focused_by_us : 1; | ||||
|  | ||||
|   guint static_gravity_works : 1; | ||||
|    | ||||
|   /*< private-ish >*/ | ||||
| @@ -476,18 +475,14 @@ gboolean meta_display_modifiers_accelerator_activate (MetaDisplay *display); | ||||
| /* In above-tab-keycode.c */ | ||||
| guint meta_display_get_above_tab_keycode (MetaDisplay *display); | ||||
|  | ||||
| gboolean meta_display_handle_event (MetaDisplay *display, | ||||
|                                     XEvent      *event); | ||||
|  | ||||
| #ifdef HAVE_XI23 | ||||
| gboolean meta_display_process_barrier_event (MetaDisplay    *display, | ||||
|                                              XIBarrierEvent *event); | ||||
| #endif /* HAVE_XI23 */ | ||||
|  | ||||
| void meta_display_set_input_focus_xwindow (MetaDisplay   *display, | ||||
|                                            MetaScreen    *screen, | ||||
|                                            MetaFocusType  type, | ||||
|                                            Window         window, | ||||
|                                            guint32        timestamp); | ||||
| void meta_display_set_input_focus_xwindow (MetaDisplay *display, | ||||
|                                            MetaScreen  *screen, | ||||
|                                            Window       window, | ||||
|                                            guint32      timestamp); | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -51,7 +51,6 @@ | ||||
| #include <meta/compositor.h> | ||||
| #include <meta/compositor-mutter.h> | ||||
| #include <X11/Xatom.h> | ||||
| #include <X11/cursorfont.h> | ||||
| #include "mutter-enum-types.h" | ||||
| #include "meta-idle-monitor-private.h" | ||||
|  | ||||
| @@ -118,12 +117,6 @@ typedef struct | ||||
|   guint        ping_timeout_id; | ||||
| } MetaPingData; | ||||
|  | ||||
| typedef struct  | ||||
| { | ||||
|   MetaDisplay *display; | ||||
|   Window xwindow; | ||||
| } MetaAutoRaiseData; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|   MetaDisplay *display; | ||||
| @@ -925,31 +918,13 @@ meta_display_open (void) | ||||
|  | ||||
|   enable_compositor (the_display); | ||||
|     | ||||
|   meta_display_grab (the_display); | ||||
|    | ||||
|   /* Now manage all existing windows */ | ||||
|   tmp = the_display->screens; | ||||
|   while (tmp != NULL) | ||||
|     { | ||||
|       MetaScreen *screen = tmp->data; | ||||
|  | ||||
|       if (meta_is_wayland_compositor ()) | ||||
|         { | ||||
|           /* Instead of explicitly enumerating all windows during | ||||
|            * initialization, when we run as a wayland compositor we can rely on | ||||
|            * xwayland notifying us of all top level windows so we create | ||||
|            * MetaWindows when we get those notifications. | ||||
|            * | ||||
|            * We still want a guard window so we can avoid | ||||
|            * unmapping/withdrawing minimized windows for live | ||||
|            * thumbnails... | ||||
|            */ | ||||
|           if (screen->guard_window == None) | ||||
|             screen->guard_window = | ||||
|               meta_screen_create_guard_window (screen->display->xdisplay, screen); | ||||
|         } | ||||
|       else | ||||
|         meta_screen_manage_all_windows (screen); | ||||
| 	 | ||||
|       meta_screen_manage_all_windows (screen); | ||||
|  | ||||
|       tmp = tmp->next; | ||||
|     } | ||||
| @@ -994,8 +969,6 @@ meta_display_open (void) | ||||
|  | ||||
|   meta_idle_monitor_init_dbus (); | ||||
|  | ||||
|   meta_display_ungrab (the_display); | ||||
|  | ||||
|   /* Done opening new display */ | ||||
|   the_display->display_opening = FALSE; | ||||
|  | ||||
| @@ -1240,7 +1213,18 @@ meta_display_screen_for_x_screen (MetaDisplay *display, | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| /* Grab/ungrab routines taken from fvwm */ | ||||
| /* Grab/ungrab routines taken from fvwm. | ||||
|  * Calling this function will cause X to ignore all other clients until | ||||
|  * you ungrab. This may not be quite as bad as it sounds, yet there is | ||||
|  * agreement that avoiding server grabs except when they are clearly needed | ||||
|  * is a good thing. | ||||
|  * | ||||
|  * If you do use such grabs, please clearly explain the necessity for their | ||||
|  * usage in a comment. Try to keep their scope extremely limited. In | ||||
|  * particular, try to avoid emitting any signals or notifications while | ||||
|  * a grab is active (if the signal receiver tries to block on an X request | ||||
|  * from another client at this point, you will have a deadlock). | ||||
|  */ | ||||
| void | ||||
| meta_display_grab (MetaDisplay *display) | ||||
| { | ||||
| @@ -1602,23 +1586,10 @@ reset_ignored_crossing_serials (MetaDisplay *display) | ||||
| static gboolean  | ||||
| window_raise_with_delay_callback (void *data) | ||||
| { | ||||
|   MetaWindow *window; | ||||
|   MetaAutoRaiseData *auto_raise; | ||||
|   MetaWindow *window = data; | ||||
|  | ||||
|   auto_raise = data; | ||||
|  | ||||
|   meta_topic (META_DEBUG_FOCUS,  | ||||
| 	      "In autoraise callback for window 0x%lx\n",  | ||||
| 	      auto_raise->xwindow); | ||||
|  | ||||
|   auto_raise->display->autoraise_timeout_id = 0; | ||||
|   auto_raise->display->autoraise_window = NULL; | ||||
|  | ||||
|   window  = meta_display_lookup_x_window (auto_raise->display,  | ||||
| 					  auto_raise->xwindow); | ||||
|    | ||||
|   if (window == NULL)  | ||||
|     return FALSE; | ||||
|   window->display->autoraise_timeout_id = 0; | ||||
|   window->display->autoraise_window = NULL; | ||||
|  | ||||
|   /* If we aren't already on top, check whether the pointer is inside | ||||
|    * the window and raise the window if so. | ||||
| @@ -1627,6 +1598,7 @@ window_raise_with_delay_callback (void *data) | ||||
|     { | ||||
|       int x, y, root_x, root_y; | ||||
|       Window root, child; | ||||
|       MetaRectangle frame_rect; | ||||
|       unsigned int mask; | ||||
|       gboolean same_screen; | ||||
|       gboolean point_in_window; | ||||
| @@ -1638,9 +1610,8 @@ window_raise_with_delay_callback (void *data) | ||||
| 				   &root_x, &root_y, &x, &y, &mask); | ||||
|       meta_error_trap_pop (window->display); | ||||
|  | ||||
|       point_in_window =  | ||||
|         (window->frame && POINT_IN_RECT (root_x, root_y, window->frame->rect)) || | ||||
|         (window->frame == NULL && POINT_IN_RECT (root_x, root_y, window->rect)); | ||||
|       meta_window_get_frame_rect (window, &frame_rect); | ||||
|       point_in_window = POINT_IN_RECT (root_x, root_y, frame_rect); | ||||
|       if (same_screen && point_in_window) | ||||
| 	meta_window_raise (window); | ||||
|       else | ||||
| @@ -1655,7 +1626,8 @@ window_raise_with_delay_callback (void *data) | ||||
| static void | ||||
| meta_display_mouse_mode_focus (MetaDisplay *display, | ||||
|                                MetaWindow  *window, | ||||
|                                guint32      timestamp) { | ||||
|                                guint32      timestamp) | ||||
| { | ||||
|   if (window->type != META_WINDOW_DESKTOP) | ||||
|     { | ||||
|       meta_topic (META_DEBUG_FOCUS, | ||||
| @@ -1694,7 +1666,8 @@ meta_display_mouse_mode_focus (MetaDisplay *display, | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| window_focus_on_pointer_rest_callback (gpointer data) { | ||||
| window_focus_on_pointer_rest_callback (gpointer data) | ||||
| { | ||||
|   MetaFocusData *focus_data; | ||||
|   MetaDisplay *display; | ||||
|   MetaScreen *screen; | ||||
| @@ -1739,9 +1712,9 @@ window_focus_on_pointer_rest_callback (gpointer data) { | ||||
|     goto out; | ||||
|  | ||||
|   window = | ||||
|       meta_stack_get_default_focus_window_at_point (screen->stack, | ||||
|                                                     screen->active_workspace, | ||||
|                                                     None, root_x, root_y); | ||||
|     meta_stack_get_default_focus_window_at_point (screen->stack, | ||||
|                                                   screen->active_workspace, | ||||
|                                                   None, root_x, root_y); | ||||
|  | ||||
|   if (window == NULL) | ||||
|     goto out; | ||||
| @@ -1749,7 +1722,7 @@ window_focus_on_pointer_rest_callback (gpointer data) { | ||||
|   timestamp = meta_display_get_current_time_roundtrip (display); | ||||
|   meta_display_mouse_mode_focus (display, window, timestamp); | ||||
|  | ||||
| out: | ||||
|  out: | ||||
|   display->focus_timeout_id = 0; | ||||
|   return FALSE; | ||||
| } | ||||
| @@ -1758,17 +1731,11 @@ void | ||||
| meta_display_queue_autoraise_callback (MetaDisplay *display, | ||||
|                                        MetaWindow  *window) | ||||
| { | ||||
|   MetaAutoRaiseData *auto_raise_data; | ||||
|  | ||||
|   meta_topic (META_DEBUG_FOCUS,  | ||||
|               "Queuing an autoraise timeout for %s with delay %d\n",  | ||||
|               window->desc,  | ||||
|               meta_prefs_get_auto_raise_delay ()); | ||||
|    | ||||
|   auto_raise_data = g_new (MetaAutoRaiseData, 1); | ||||
|   auto_raise_data->display = window->display; | ||||
|   auto_raise_data->xwindow = window->xwindow; | ||||
|    | ||||
|   if (display->autoraise_timeout_id != 0) | ||||
|     g_source_remove (display->autoraise_timeout_id); | ||||
|  | ||||
| @@ -1776,8 +1743,7 @@ meta_display_queue_autoraise_callback (MetaDisplay *display, | ||||
|     g_timeout_add_full (G_PRIORITY_DEFAULT, | ||||
|                         meta_prefs_get_auto_raise_delay (), | ||||
|                         window_raise_with_delay_callback, | ||||
|                         auto_raise_data, | ||||
|                         g_free); | ||||
|                         window, NULL); | ||||
|   display->autoraise_window = window; | ||||
| } | ||||
|  | ||||
| @@ -1871,14 +1837,17 @@ get_input_event (MetaDisplay *display, | ||||
|         case XI_ButtonRelease: | ||||
|           if (((XIDeviceEvent *) input_event)->deviceid == META_VIRTUAL_CORE_POINTER_ID) | ||||
|             return input_event; | ||||
|           break; | ||||
|         case XI_KeyPress: | ||||
|         case XI_KeyRelease: | ||||
|           if (((XIDeviceEvent *) input_event)->deviceid == META_VIRTUAL_CORE_KEYBOARD_ID) | ||||
|             return input_event; | ||||
|           break; | ||||
|         case XI_FocusIn: | ||||
|         case XI_FocusOut: | ||||
|           if (((XIEnterEvent *) input_event)->deviceid == META_VIRTUAL_CORE_KEYBOARD_ID) | ||||
|             return input_event; | ||||
|           break; | ||||
|         case XI_Enter: | ||||
|         case XI_Leave: | ||||
|           if (((XIEnterEvent *) input_event)->deviceid == META_VIRTUAL_CORE_POINTER_ID) | ||||
| @@ -1900,19 +1869,16 @@ get_input_event (MetaDisplay *display, | ||||
| } | ||||
|  | ||||
| static void | ||||
| update_focus_window (MetaDisplay   *display, | ||||
|                      MetaFocusType  type, | ||||
|                      MetaWindow    *window, | ||||
|                      Window         xwindow, | ||||
|                      gulong         serial) | ||||
| update_focus_window (MetaDisplay *display, | ||||
|                      MetaWindow  *window, | ||||
|                      Window       xwindow, | ||||
|                      gulong       serial, | ||||
|                      gboolean     focused_by_us) | ||||
| { | ||||
|   MetaWaylandCompositor *compositor; | ||||
|  | ||||
|   display->focus_serial = serial; | ||||
|   display->focused_by_us = focused_by_us; | ||||
|  | ||||
|   if (display->focus_xwindow == xwindow && | ||||
|       display->focus_type == type && | ||||
|       display->focus_window == window) | ||||
|   if (display->focus_xwindow == xwindow) | ||||
|     return; | ||||
|  | ||||
|   if (display->focus_window) | ||||
| @@ -1934,7 +1900,6 @@ update_focus_window (MetaDisplay   *display, | ||||
|       meta_window_set_focused_internal (previous, FALSE); | ||||
|     } | ||||
|  | ||||
|   display->focus_type = type; | ||||
|   display->focus_window = window; | ||||
|   display->focus_xwindow = xwindow; | ||||
|  | ||||
| @@ -1947,19 +1912,6 @@ update_focus_window (MetaDisplay   *display, | ||||
|   else | ||||
|     meta_topic (META_DEBUG_FOCUS, "* Focus --> NULL with serial %lu\n", serial); | ||||
|  | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       compositor = meta_wayland_compositor_get_default (); | ||||
|  | ||||
|       if (display->focus_type == META_FOCUS_NO_FOCUS_WINDOW || | ||||
|           display->focus_type == META_FOCUS_STAGE) | ||||
|         meta_wayland_compositor_set_input_focus (compositor, NULL); | ||||
|       else if (window && window->surface) | ||||
|         meta_wayland_compositor_set_input_focus (compositor, window); | ||||
|       else | ||||
|         meta_topic (META_DEBUG_FOCUS, "Focus change has no effect, because there is no matching wayland surface"); | ||||
|      } | ||||
|  | ||||
|   g_object_notify (G_OBJECT (display), "focus-window"); | ||||
|   meta_display_update_active_window_hint (display); | ||||
| } | ||||
| @@ -1994,18 +1946,19 @@ timestamp_too_old (MetaDisplay *display, | ||||
| } | ||||
|  | ||||
| static void | ||||
| request_xserver_input_focus_change (MetaDisplay   *display, | ||||
|                                     MetaScreen    *screen, | ||||
|                                     MetaFocusType  type, | ||||
|                                     MetaWindow    *meta_window, | ||||
|                                     Window         xwindow, | ||||
|                                     guint32        timestamp) | ||||
| request_xserver_input_focus_change (MetaDisplay *display, | ||||
|                                     MetaScreen  *screen, | ||||
|                                     Window       xwindow, | ||||
|                                     guint32      timestamp) | ||||
| { | ||||
|   MetaWindow *meta_window; | ||||
|   gulong serial; | ||||
|  | ||||
|   if (timestamp_too_old (display, ×tamp)) | ||||
|     return; | ||||
|  | ||||
|   meta_window = meta_display_lookup_x_window (display, xwindow); | ||||
|  | ||||
|   meta_error_trap_push (display); | ||||
|  | ||||
|   /* In order for mutter to know that the focus request succeeded, we track | ||||
| @@ -2032,10 +1985,10 @@ request_xserver_input_focus_change (MetaDisplay   *display, | ||||
|   meta_display_ungrab (display); | ||||
|  | ||||
|   update_focus_window (display, | ||||
|                        type, | ||||
|                        meta_window, | ||||
|                        xwindow, | ||||
|                        serial); | ||||
|                        serial, | ||||
|                        TRUE); | ||||
|  | ||||
|   meta_error_trap_pop (display); | ||||
|  | ||||
| @@ -2053,12 +2006,9 @@ handle_window_focus_event (MetaDisplay  *display, | ||||
|                            unsigned long serial) | ||||
| { | ||||
|   MetaWindow *focus_window; | ||||
|   MetaFocusType type; | ||||
| #ifdef WITH_VERBOSE_MODE | ||||
|   const char *window_type; | ||||
|  | ||||
|   type = META_FOCUS_NONE; | ||||
|  | ||||
|   /* Note the event can be on either the window or the frame, | ||||
|    * we focus the frame for shaded windows | ||||
|    */ | ||||
| @@ -2070,26 +2020,14 @@ handle_window_focus_event (MetaDisplay  *display, | ||||
|         window_type = "frame window"; | ||||
|       else | ||||
|         window_type = "unknown client window"; | ||||
|  | ||||
|       if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND) | ||||
|         type = META_FOCUS_WAYLAND_CLIENT; | ||||
|       else | ||||
|         type = META_FOCUS_X_CLIENT; | ||||
|     } | ||||
|   else if (meta_display_xwindow_is_a_no_focus_window (display, event->event)) | ||||
|     { | ||||
|       window_type = "no_focus_window"; | ||||
|       type = META_FOCUS_NO_FOCUS_WINDOW; | ||||
|     } | ||||
|     window_type = "no_focus_window"; | ||||
|   else if (meta_display_screen_for_root (display, event->event)) | ||||
|     window_type = "root window"; | ||||
|   else | ||||
|     window_type = "unknown window"; | ||||
|  | ||||
|   /* Don't change type if we don't know the new window */ | ||||
|   if (type == META_FOCUS_NONE) | ||||
|     type = display->focus_type; | ||||
|  | ||||
|   meta_topic (META_DEBUG_FOCUS, | ||||
|               "Focus %s event received on %s 0x%lx (%s) " | ||||
|               "mode %s detail %s serial %lu\n", | ||||
| @@ -2164,20 +2102,41 @@ handle_window_focus_event (MetaDisplay  *display, | ||||
|   else | ||||
|     g_return_if_reached (); | ||||
|  | ||||
|   if (display->server_focus_serial > display->focus_serial) | ||||
|   /* If display->focused_by_us, then the focus_serial will be used only | ||||
|    * for a focus change we made and have already accounted for. | ||||
|    * (See request_xserver_input_focus_change().) Otherwise, we can get | ||||
|    * multiple focus events with the same serial. | ||||
|    */ | ||||
|   if (display->server_focus_serial > display->focus_serial || | ||||
|       (!display->focused_by_us && | ||||
|        display->server_focus_serial == display->focus_serial)) | ||||
|     { | ||||
|       update_focus_window (display, | ||||
|                            type, | ||||
|                            focus_window, | ||||
|                            focus_window ? focus_window->xwindow : None, | ||||
|                            display->server_focus_serial); | ||||
|                            display->server_focus_serial, | ||||
|                            FALSE); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| window_has_xwindow (MetaWindow *window, | ||||
|                     Window      xwindow) | ||||
| { | ||||
|   if (window->xwindow == xwindow) | ||||
|     return TRUE; | ||||
|  | ||||
|   if (window->frame && window->frame->xwindow == xwindow) | ||||
|     return TRUE; | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_display_handle_event: | ||||
|  * @display: The MetaDisplay that events are coming from | ||||
|  * event_callback: | ||||
|  * @event: The event that just happened | ||||
|  * @data: The #MetaDisplay that events are coming from, cast to a gpointer | ||||
|  *        so that it can be sent to a callback | ||||
|  * | ||||
|  * This is the most important function in the whole program. It is the heart, | ||||
|  * it is the nexus, it is the Grand Central Station of Mutter's world. | ||||
| @@ -2187,19 +2146,23 @@ handle_window_focus_event (MetaDisplay  *display, | ||||
|  * busy around here. Most of this function is a ginormous switch statement | ||||
|  * dealing with all the kinds of events that might turn up. | ||||
|  */ | ||||
| gboolean | ||||
| meta_display_handle_event (MetaDisplay *display, | ||||
|                            XEvent   *event) | ||||
| static gboolean | ||||
| event_callback (XEvent   *event, | ||||
|                 gpointer  data) | ||||
| { | ||||
|   MetaWindow *window; | ||||
|   MetaWindow *property_for_window; | ||||
|   MetaDisplay *display; | ||||
|   Window modified; | ||||
|   gboolean frame_was_receiver; | ||||
|   gboolean bypass_compositor; | ||||
|   gboolean filter_out_event; | ||||
|   XIEvent *input_event; | ||||
|   MetaMonitorManager *monitor; | ||||
|   MetaScreen *screen; | ||||
|  | ||||
|   display = data; | ||||
|    | ||||
| #ifdef WITH_VERBOSE_MODE | ||||
|   if (dump_events) | ||||
|     meta_spew_event (display, event); | ||||
| @@ -2208,23 +2171,32 @@ meta_display_handle_event (MetaDisplay *display, | ||||
| #ifdef HAVE_STARTUP_NOTIFICATION | ||||
|   sn_display_process_event (display->sn_display, event); | ||||
| #endif | ||||
|  | ||||
|   /* Intercept XRandR events early and don't attempt any | ||||
|      processing for them. We still let them through to Gdk though, | ||||
|      so it can update its own internal state. | ||||
|   */ | ||||
|   monitor = meta_monitor_manager_get (); | ||||
|   if (meta_monitor_manager_handle_xevent (monitor, event)) | ||||
|     return FALSE; | ||||
|    | ||||
|   bypass_compositor = FALSE; | ||||
|   filter_out_event = FALSE; | ||||
|   display->current_time = event_get_time (display, event); | ||||
|   display->monitor_cache_invalidated = TRUE; | ||||
|  | ||||
|   if (event->xany.serial > display->focus_serial && | ||||
|   if (display->focused_by_us && | ||||
|       event->xany.serial > display->focus_serial && | ||||
|       display->focus_window && | ||||
|       display->focus_window->xwindow != display->server_focus_window) | ||||
|       !window_has_xwindow (display->focus_window, display->server_focus_window)) | ||||
|     { | ||||
|       meta_topic (META_DEBUG_FOCUS, "Earlier attempt to focus %s failed\n", | ||||
|                   display->focus_window->desc); | ||||
|       update_focus_window (display, | ||||
|                            META_FOCUS_NONE, | ||||
|                            meta_display_lookup_x_window (display, display->server_focus_window), | ||||
|                            display->server_focus_window, | ||||
|                            display->server_focus_serial); | ||||
|                            display->server_focus_serial, | ||||
|                            FALSE); | ||||
|     } | ||||
|  | ||||
|   screen = meta_display_screen_for_root (display, event->xany.window); | ||||
| @@ -2322,59 +2294,7 @@ meta_display_handle_event (MetaDisplay *display, | ||||
|           XShapeEvent *sev = (XShapeEvent*) event; | ||||
|  | ||||
|           if (sev->kind == ShapeBounding) | ||||
|             { | ||||
|               if (sev->shaped && !window->has_shape) | ||||
|                 { | ||||
|                   window->has_shape = TRUE;                   | ||||
|                   meta_topic (META_DEBUG_SHAPES, | ||||
|                               "Window %s now has a shape\n", | ||||
|                               window->desc); | ||||
|                 } | ||||
|               else if (!sev->shaped && window->has_shape) | ||||
|                 { | ||||
|                   window->has_shape = FALSE; | ||||
|                   meta_topic (META_DEBUG_SHAPES, | ||||
|                               "Window %s no longer has a shape\n", | ||||
|                               window->desc); | ||||
|                 } | ||||
|               else | ||||
|                 { | ||||
|                   meta_topic (META_DEBUG_SHAPES, | ||||
|                               "Window %s shape changed\n", | ||||
|                               window->desc); | ||||
|                 } | ||||
|  | ||||
|               if (display->compositor) | ||||
|                 meta_compositor_window_x11_shape_changed (display->compositor, | ||||
|                                                           window); | ||||
|             } | ||||
|           else if (sev->kind == ShapeInput) | ||||
|             { | ||||
|               if (sev->shaped && !window->has_input_shape) | ||||
|                 { | ||||
|                   window->has_input_shape = TRUE;                   | ||||
|                   meta_topic (META_DEBUG_SHAPES, | ||||
|                               "Window %s now has an input shape\n", | ||||
|                               window->desc); | ||||
|                 } | ||||
|               else if (!sev->shaped && window->has_input_shape) | ||||
|                 { | ||||
|                   window->has_input_shape = FALSE; | ||||
|                   meta_topic (META_DEBUG_SHAPES, | ||||
|                               "Window %s no longer has an input shape\n", | ||||
|                               window->desc); | ||||
|                 } | ||||
|               else | ||||
|                 { | ||||
|                   meta_topic (META_DEBUG_SHAPES, | ||||
|                               "Window %s input shape changed\n", | ||||
|                               window->desc); | ||||
|                 } | ||||
|  | ||||
|               if (display->compositor) | ||||
|                 meta_compositor_window_x11_shape_changed (display->compositor, | ||||
|                                                           window); | ||||
|             } | ||||
|             meta_window_update_shape_region_x11 (window); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
| @@ -2392,7 +2312,7 @@ meta_display_handle_event (MetaDisplay *display, | ||||
|       XIEnterEvent *enter_event = (XIEnterEvent *) input_event; | ||||
|  | ||||
|       if (window && !window->override_redirect && | ||||
|           ((input_event->type == XI_KeyPress) || (input_event->type == XI_ButtonPress))) | ||||
|           ((input_event->evtype == XI_KeyPress) || (input_event->evtype == XI_ButtonPress))) | ||||
|         { | ||||
|           if (CurrentTime == display->current_time) | ||||
|             { | ||||
| @@ -2437,6 +2357,7 @@ meta_display_handle_event (MetaDisplay *display, | ||||
|  | ||||
|           if ((window && | ||||
|                meta_grab_op_is_mouse (display->grab_op) && | ||||
|                (device_event->mods.effective & display->window_grab_modifiers) && | ||||
|                display->grab_button != device_event->detail && | ||||
|                display->grab_window == window) || | ||||
|               grab_op_is_keyboard (display->grab_op)) | ||||
| @@ -2523,15 +2444,15 @@ meta_display_handle_event (MetaDisplay *display, | ||||
|                     { | ||||
|                       gboolean north, south; | ||||
|                       gboolean west, east; | ||||
|                       int root_x, root_y; | ||||
|                       MetaRectangle frame_rect; | ||||
|                       MetaGrabOp op; | ||||
|  | ||||
|                       meta_window_get_position (window, &root_x, &root_y); | ||||
|                       meta_window_get_frame_rect (window, &frame_rect); | ||||
|  | ||||
|                       west = device_event->root_x <  (root_x + 1 * window->rect.width  / 3); | ||||
|                       east = device_event->root_x >  (root_x + 2 * window->rect.width  / 3); | ||||
|                       north = device_event->root_y < (root_y + 1 * window->rect.height / 3); | ||||
|                       south = device_event->root_y > (root_y + 2 * window->rect.height / 3); | ||||
|                       west = device_event->root_x <  (frame_rect.x + 1 * frame_rect.width  / 3); | ||||
|                       east = device_event->root_x >  (frame_rect.x + 2 * frame_rect.width  / 3); | ||||
|                       north = device_event->root_y < (frame_rect.y + 1 * frame_rect.height / 3); | ||||
|                       south = device_event->root_y > (frame_rect.y + 2 * frame_rect.height / 3); | ||||
|  | ||||
|                       if (north && west) | ||||
|                         op = META_GRAB_OP_RESIZING_NW; | ||||
| @@ -2861,14 +2782,14 @@ meta_display_handle_event (MetaDisplay *display, | ||||
|               && meta_display_screen_for_root (display, event->xmap.event)) | ||||
|             { | ||||
|               window = meta_window_new (display, event->xmap.window, | ||||
|                                         FALSE); | ||||
|                                         FALSE, META_COMP_EFFECT_CREATE); | ||||
|             } | ||||
|           break; | ||||
|         case MapRequest: | ||||
|           if (window == NULL) | ||||
|             { | ||||
|               window = meta_window_new (display, event->xmaprequest.window, | ||||
|                                         FALSE); | ||||
|                                         FALSE, META_COMP_EFFECT_CREATE); | ||||
|             } | ||||
|           /* if frame was receiver it's some malicious send event or something */ | ||||
|           else if (!frame_was_receiver && window)         | ||||
| @@ -2910,32 +2831,10 @@ meta_display_handle_event (MetaDisplay *display, | ||||
|                 meta_stack_tracker_configure_event (screen->stack_tracker, | ||||
|                                                     &event->xconfigure); | ||||
|             } | ||||
|  | ||||
|           if (window && window->override_redirect) | ||||
|             meta_window_configure_notify (window, &event->xconfigure); | ||||
|           else | ||||
|             /* Handle screen resize */ | ||||
|             { | ||||
|               MetaScreen *screen; | ||||
|  | ||||
|               screen = meta_display_screen_for_root (display, | ||||
|                                                      event->xconfigure.window); | ||||
|  | ||||
|               if (screen != NULL) | ||||
|                 { | ||||
| #ifdef HAVE_RANDR | ||||
|                   /* do the resize the official way */ | ||||
|                   XRRUpdateConfiguration (event); | ||||
| #else | ||||
|                   /* poke around in Xlib */ | ||||
|                   screen->xscreen->width   = event->xconfigure.width; | ||||
|                   screen->xscreen->height  = event->xconfigure.height; | ||||
| #endif | ||||
| 	       | ||||
|                   meta_screen_resize (screen,  | ||||
|                                       event->xconfigure.width, | ||||
|                                       event->xconfigure.height); | ||||
|                 } | ||||
|             } | ||||
|           break; | ||||
|         case ConfigureRequest: | ||||
|           /* This comment and code is found in both twm and fvwm */ | ||||
| @@ -3226,30 +3125,6 @@ meta_display_handle_event (MetaDisplay *display, | ||||
|   return filter_out_event; | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| event_callback (XEvent  *event, | ||||
|                 gpointer data) | ||||
| { | ||||
|   MetaDisplay *display = data; | ||||
|  | ||||
|   /* Under Wayland we want to filter out mouse motion events so we can | ||||
|      synthesize them from the Clutter events instead. This is | ||||
|      necessary because the position in the mouse events is passed to | ||||
|      the X server relative to the position of the surface. The X | ||||
|      server then translates these back to screen coordinates based on | ||||
|      the window position. If we rely on this translatation when | ||||
|      dragging a window around then the window will jump around | ||||
|      erratically because of the lag between updating the window | ||||
|      position from the surface position. Instead we bypass the | ||||
|      translation altogether by directly using the Clutter events */ | ||||
|   if (meta_is_wayland_compositor () && | ||||
|       event->type == GenericEvent && | ||||
|       event->xcookie.evtype == XI_Motion) | ||||
|     return FALSE; | ||||
|  | ||||
|   return meta_display_handle_event (display, event); | ||||
| } | ||||
|  | ||||
| /* Return the window this has to do with, if any, rather | ||||
|  * than the frame or root window that was selecting | ||||
|  * for substructure | ||||
| @@ -3992,60 +3867,6 @@ meta_display_xwindow_is_a_no_focus_window (MetaDisplay *display, | ||||
|   return is_a_no_focus_window; | ||||
| } | ||||
|  | ||||
| Cursor | ||||
| meta_display_create_x_cursor (MetaDisplay *display, | ||||
|                               MetaCursor cursor) | ||||
| { | ||||
|   Cursor xcursor; | ||||
|   guint glyph; | ||||
|  | ||||
|   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; | ||||
|        | ||||
|     default: | ||||
|       g_assert_not_reached (); | ||||
|       glyph = 0; /* silence compiler */ | ||||
|       break; | ||||
|     } | ||||
|    | ||||
|   xcursor = XCreateFontCursor (display->xdisplay, glyph); | ||||
|  | ||||
|   return xcursor; | ||||
| } | ||||
|  | ||||
| static Cursor | ||||
| xcursor_for_op (MetaDisplay *display, | ||||
|                 MetaGrabOp   op) | ||||
| @@ -4207,7 +4028,7 @@ meta_display_begin_grab_op (MetaDisplay *display, | ||||
|    *   key grab on the RootWindow. | ||||
|    */ | ||||
|   if (grab_window) | ||||
|     grab_xwindow = grab_window->frame ? grab_window->frame->xwindow : grab_window->xwindow; | ||||
|     grab_xwindow = meta_window_get_toplevel_xwindow (grab_window); | ||||
|   else | ||||
|     grab_xwindow = screen->xroot; | ||||
|  | ||||
| @@ -4735,6 +4556,7 @@ meta_display_queue_retheme_all_windows (MetaDisplay *display) | ||||
|       MetaWindow *window = tmp->data; | ||||
|        | ||||
|       meta_window_queue (window, META_QUEUE_MOVE_RESIZE); | ||||
|       meta_window_frame_size_changed (window); | ||||
|       if (window->frame) | ||||
|         { | ||||
|           meta_frame_queue_draw (window->frame); | ||||
| @@ -5901,9 +5723,6 @@ meta_display_set_input_focus_window (MetaDisplay *display, | ||||
| { | ||||
|   request_xserver_input_focus_change (display, | ||||
|                                       window->screen, | ||||
|                                       window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND ? | ||||
|                                       META_FOCUS_WAYLAND_CLIENT : META_FOCUS_X_CLIENT, | ||||
|                                       window, | ||||
|                                       focus_frame ? window->frame->xwindow : window->xwindow, | ||||
|                                       timestamp); | ||||
| } | ||||
| @@ -5919,41 +5738,19 @@ meta_display_request_take_focus (MetaDisplay *display, | ||||
|   meta_topic (META_DEBUG_FOCUS, "WM_TAKE_FOCUS(%s, %u)\n", | ||||
|               window->desc, timestamp); | ||||
|  | ||||
|   if (window != display->focus_window) | ||||
|     { | ||||
|       /* The "Globally Active Input" window case, where the window | ||||
|        * doesn't want us to call XSetInputFocus on it, but does | ||||
|        * want us to send a WM_TAKE_FOCUS. | ||||
|        * | ||||
|        * We can't just set display->focus_window to @window, since we | ||||
|        * we don't know when (or even if) the window will actually take | ||||
|        * focus, so we could end up being wrong for arbitrarily long. | ||||
|        * But we also can't leave it set to the current window, or else | ||||
|        * bug #597352 would come back. So we focus the no_focus_window | ||||
|        * now (and set display->focus_window to that), send the | ||||
|        * WM_TAKE_FOCUS, and then just forget about @window | ||||
|        * until/unless we get a FocusIn. | ||||
|        */ | ||||
|       meta_display_focus_the_no_focus_window (display, | ||||
|                                               window->screen, | ||||
|                                               timestamp); | ||||
|     } | ||||
|   meta_window_send_icccm_message (window, | ||||
|                                   display->atom_WM_TAKE_FOCUS, | ||||
|                                   timestamp); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_display_set_input_focus_xwindow (MetaDisplay   *display, | ||||
|                                       MetaScreen    *screen, | ||||
|                                       MetaFocusType  type, | ||||
|                                       Window         window, | ||||
|                                       guint32        timestamp) | ||||
| meta_display_set_input_focus_xwindow (MetaDisplay *display, | ||||
|                                       MetaScreen  *screen, | ||||
|                                       Window       window, | ||||
|                                       guint32      timestamp) | ||||
| { | ||||
|   request_xserver_input_focus_change (display, | ||||
|                                       screen, | ||||
|                                       type, | ||||
|                                       NULL, | ||||
|                                       window, | ||||
|                                       timestamp); | ||||
| } | ||||
| @@ -5965,8 +5762,6 @@ meta_display_focus_the_no_focus_window (MetaDisplay *display, | ||||
| { | ||||
|   request_xserver_input_focus_change (display, | ||||
|                                       screen, | ||||
|                                       META_FOCUS_NO_FOCUS_WINDOW, | ||||
|                                       NULL, | ||||
|                                       screen->no_focus_window, | ||||
|                                       timestamp); | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
| @@ -47,14 +47,10 @@ meta_window_ensure_frame (MetaWindow *window) | ||||
|   XSetWindowAttributes attrs; | ||||
|   Visual *visual; | ||||
|   gulong create_serial; | ||||
|   MetaStackWindow stack_window; | ||||
|    | ||||
|   if (window->frame) | ||||
|     return; | ||||
|    | ||||
|   /* See comment below for why this is required. */ | ||||
|   meta_display_grab (window->display); | ||||
|    | ||||
|   frame = g_new (MetaFrame, 1); | ||||
|  | ||||
|   frame->window = window; | ||||
| @@ -69,6 +65,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, | ||||
| @@ -106,10 +103,8 @@ meta_window_ensure_frame (MetaWindow *window) | ||||
| 						frame->rect.height, | ||||
| 						frame->window->screen->number, | ||||
|                                                 &create_serial); | ||||
|   stack_window.any.type = META_WINDOW_CLIENT_TYPE_X11; | ||||
|   stack_window.x11.xwindow = frame->xwindow; | ||||
|   meta_stack_tracker_record_add (window->screen->stack_tracker, | ||||
|                                  &stack_window, | ||||
|                                  frame->xwindow, | ||||
|                                  create_serial); | ||||
|  | ||||
|   meta_verbose ("Frame for %s is 0x%lx\n", frame->window->desc, frame->xwindow); | ||||
| @@ -119,14 +114,6 @@ meta_window_ensure_frame (MetaWindow *window) | ||||
|    | ||||
|   meta_display_register_x_window (window->display, &frame->xwindow, window); | ||||
|  | ||||
|   /* Reparent the client window; it may be destroyed, | ||||
|    * thus the error trap. We'll get a destroy notify later | ||||
|    * and free everything. Comment in FVWM source code says | ||||
|    * we need a server grab or the child can get its MapNotify | ||||
|    * before we've finished reparenting and getting the decoration | ||||
|    * window onscreen, so ensure_frame must be called with | ||||
|    * a grab. | ||||
|    */ | ||||
|   meta_error_trap_push (window->display); | ||||
|   if (window->mapped) | ||||
|     { | ||||
| @@ -141,9 +128,8 @@ meta_window_ensure_frame (MetaWindow *window) | ||||
|   window->rect.x = 0; | ||||
|   window->rect.y = 0; | ||||
|  | ||||
|   stack_window.x11.xwindow = window->xwindow; | ||||
|   meta_stack_tracker_record_remove (window->screen->stack_tracker, | ||||
|                                     &stack_window, | ||||
|                                     window->xwindow, | ||||
|                                     XNextRequest (window->display->xdisplay)); | ||||
|   XReparentWindow (window->display->xdisplay, | ||||
|                    window->xwindow, | ||||
| @@ -169,8 +155,6 @@ meta_window_ensure_frame (MetaWindow *window) | ||||
|  | ||||
|   /* Move keybindings to frame instead of window */ | ||||
|   meta_window_grab_keys (window); | ||||
|  | ||||
|   meta_display_ungrab (window->display); | ||||
| } | ||||
|  | ||||
| void | ||||
| @@ -178,7 +162,6 @@ meta_window_destroy_frame (MetaWindow *window) | ||||
| { | ||||
|   MetaFrame *frame; | ||||
|   MetaFrameBorders borders; | ||||
|   MetaStackWindow stack_window; | ||||
|    | ||||
|   if (window->frame == NULL) | ||||
|     return; | ||||
| @@ -205,10 +188,8 @@ meta_window_destroy_frame (MetaWindow *window) | ||||
|                   "Incrementing unmaps_pending on %s for reparent back to root\n", window->desc); | ||||
|       window->unmaps_pending += 1; | ||||
|     } | ||||
|   stack_window.any.type = META_WINDOW_CLIENT_TYPE_X11; | ||||
|   stack_window.x11.xwindow = window->xwindow; | ||||
|   meta_stack_tracker_record_add (window->screen->stack_tracker, | ||||
|                                  &stack_window, | ||||
|                                  window->xwindow, | ||||
|                                  XNextRequest (window->display->xdisplay)); | ||||
|   XReparentWindow (window->display->xdisplay, | ||||
|                    window->xwindow, | ||||
| @@ -334,9 +315,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_clear_cached_borders (MetaFrame *frame) | ||||
| { | ||||
|   frame->borders_cached = FALSE; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
|   | ||||
| @@ -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); | ||||
| @@ -68,6 +71,8 @@ gboolean meta_frame_sync_to_window (MetaFrame         *frame, | ||||
|                                     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, | ||||
|   | ||||
| @@ -41,6 +41,7 @@ | ||||
| #include "ui.h" | ||||
| #include "frame.h" | ||||
| #include "place.h" | ||||
| #include "screen-private.h" | ||||
| #include <meta/prefs.h> | ||||
| #include <meta/util.h> | ||||
|  | ||||
| @@ -1277,7 +1278,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; | ||||
| @@ -1580,7 +1581,7 @@ 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); | ||||
| @@ -1835,7 +1836,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, | ||||
| @@ -1843,7 +1843,6 @@ process_event (MetaKeyBinding       *bindings, | ||||
|                MetaScreen           *screen, | ||||
|                MetaWindow           *window, | ||||
|                XIDeviceEvent        *event, | ||||
|                KeySym                keysym, | ||||
|                gboolean              on_window) | ||||
| { | ||||
|   int i; | ||||
| @@ -1861,7 +1860,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) || | ||||
| @@ -1928,7 +1926,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 | ||||
| @@ -1965,6 +1963,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; | ||||
|     } | ||||
| @@ -2175,7 +2190,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); | ||||
| } | ||||
|  | ||||
| @@ -3123,6 +3138,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. | ||||
| @@ -3140,17 +3169,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; | ||||
| @@ -3158,7 +3187,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; | ||||
| @@ -3267,12 +3296,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); | ||||
| @@ -3280,8 +3309,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); | ||||
| } | ||||
| @@ -3945,6 +3974,26 @@ handle_move_to_workspace  (MetaDisplay    *display, | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void | ||||
| handle_move_to_monitor (MetaDisplay    *display, | ||||
|                         MetaScreen     *screen, | ||||
|                         MetaWindow     *window, | ||||
|                         XIDeviceEvent  *event, | ||||
|                         MetaKeyBinding *binding, | ||||
|                         gpointer        dummy) | ||||
| { | ||||
|   gint which = binding->handler->data; | ||||
|   const MetaMonitorInfo *current, *new; | ||||
|  | ||||
|   current = meta_screen_get_monitor_for_window (screen, window); | ||||
|   new = meta_screen_get_monitor_neighbor (screen, current->number, which); | ||||
|  | ||||
|   if (new == NULL) | ||||
|     return; | ||||
|  | ||||
|   meta_window_move_to_monitor (window, new->number); | ||||
| } | ||||
|  | ||||
| static void | ||||
| handle_raise_or_lower (MetaDisplay    *display, | ||||
|                        MetaScreen     *screen, | ||||
| @@ -3974,8 +4023,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)) | ||||
| @@ -4115,28 +4164,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) | ||||
| { | ||||
| @@ -4623,6 +4650,34 @@ init_builtin_key_bindings (MetaDisplay *display) | ||||
|                           META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_DOWN, | ||||
|                           handle_move_to_workspace, META_MOTION_DOWN); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "move-to-monitor-left", | ||||
|                           common_keybindings, | ||||
|                           META_KEY_BINDING_PER_WINDOW, | ||||
|                           META_KEYBINDING_ACTION_MOVE_TO_MONITOR_LEFT, | ||||
|                           handle_move_to_monitor, META_SCREEN_LEFT); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "move-to-monitor-right", | ||||
|                           common_keybindings, | ||||
|                           META_KEY_BINDING_PER_WINDOW, | ||||
|                           META_KEYBINDING_ACTION_MOVE_TO_MONITOR_RIGHT, | ||||
|                           handle_move_to_monitor, META_SCREEN_RIGHT); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "move-to-monitor-down", | ||||
|                           common_keybindings, | ||||
|                           META_KEY_BINDING_PER_WINDOW, | ||||
|                           META_KEYBINDING_ACTION_MOVE_TO_MONITOR_DOWN, | ||||
|                           handle_move_to_monitor, META_SCREEN_DOWN); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "move-to-monitor-up", | ||||
|                           common_keybindings, | ||||
|                           META_KEY_BINDING_PER_WINDOW, | ||||
|                           META_KEYBINDING_ACTION_MOVE_TO_MONITOR_UP, | ||||
|                           handle_move_to_monitor, META_SCREEN_UP); | ||||
|  | ||||
|   add_builtin_keybinding (display, | ||||
|                           "raise-or-lower", | ||||
|                           common_keybindings, | ||||
| @@ -4658,6 +4713,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, | ||||
|   | ||||
| @@ -55,7 +55,6 @@ | ||||
| #include "session.h" | ||||
| #include <meta/prefs.h> | ||||
| #include <meta/compositor.h> | ||||
| #include "meta-wayland-private.h" | ||||
|  | ||||
| #include <glib-object.h> | ||||
| #include <gdk/gdkx.h> | ||||
| @@ -347,64 +346,28 @@ meta_finalize (void) | ||||
|   if (display) | ||||
|     meta_display_close (display, | ||||
|                         CurrentTime); /* I doubt correct timestamps matter here */ | ||||
|  | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     meta_wayland_finalize (); | ||||
| } | ||||
|  | ||||
| static int signal_pipe_fds[2] = { -1, -1 }; | ||||
| static int sigterm_pipe_fds[2] = { -1, -1 }; | ||||
|  | ||||
| static void | ||||
| signal_handler (int signum) | ||||
| sigterm_handler (int signum) | ||||
| { | ||||
|   if (signal_pipe_fds[1] >= 0) | ||||
|   if (sigterm_pipe_fds[1] >= 0) | ||||
|     { | ||||
|       switch (signum) | ||||
|         { | ||||
|         case SIGTERM: | ||||
|           write (signal_pipe_fds[1], "T", 1); | ||||
|           break; | ||||
|         default: | ||||
|           break; | ||||
|         } | ||||
|       int G_GNUC_UNUSED dummy; | ||||
|  | ||||
|       dummy = write (sigterm_pipe_fds[1], "", 1); | ||||
|       close (sigterm_pipe_fds[1]); | ||||
|       sigterm_pipe_fds[1] = -1; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| on_signal (GIOChannel *source, | ||||
|            GIOCondition condition, | ||||
|            void *data) | ||||
| on_sigterm (void) | ||||
| { | ||||
|   char signal; | ||||
|   int count; | ||||
|  | ||||
|   for (;;) | ||||
|     { | ||||
|       count = read (signal_pipe_fds[0], &signal, 1); | ||||
|       if (count == EINTR) | ||||
|         continue; | ||||
|       if (count < 0) | ||||
|         { | ||||
|           const char *msg = strerror (errno); | ||||
|           g_warning ("Error handling signal: %s", msg); | ||||
|         } | ||||
|       if (count != 1) | ||||
|         { | ||||
|           g_warning ("Unexpectedly failed to read byte from signal pipe\n"); | ||||
|           return TRUE; | ||||
|         } | ||||
|       break; | ||||
|     } | ||||
|   switch (signal) | ||||
|     { | ||||
|     case 'T': /* SIGTERM */ | ||||
|       meta_quit (META_EXIT_SUCCESS); | ||||
|       break; | ||||
|     default: | ||||
|       g_warning ("Spurious character '%c' read from signal pipe", signal); | ||||
|     } | ||||
|  | ||||
|   return TRUE; | ||||
|   meta_quit (META_EXIT_SUCCESS); | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -433,17 +396,17 @@ meta_init (void) | ||||
|                 g_strerror (errno)); | ||||
| #endif | ||||
|  | ||||
|   if (pipe (signal_pipe_fds) != 0) | ||||
|     g_printerr ("Failed to create signal pipe: %s\n", | ||||
|   if (pipe (sigterm_pipe_fds) != 0) | ||||
|     g_printerr ("Failed to create SIGTERM pipe: %s\n", | ||||
|                 g_strerror (errno)); | ||||
|  | ||||
|   channel = g_io_channel_unix_new (signal_pipe_fds[0]); | ||||
|   channel = g_io_channel_unix_new (sigterm_pipe_fds[0]); | ||||
|   g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, NULL); | ||||
|   g_io_add_watch (channel, G_IO_IN, (GIOFunc) on_signal, NULL); | ||||
|   g_io_add_watch (channel, G_IO_IN, (GIOFunc) on_sigterm, NULL); | ||||
|   g_io_channel_set_close_on_unref (channel, TRUE); | ||||
|   g_io_channel_unref (channel); | ||||
|  | ||||
|   act.sa_handler = &signal_handler; | ||||
|   act.sa_handler = &sigterm_handler; | ||||
|   if (sigaction (SIGTERM, &act, NULL) < 0) | ||||
|     g_printerr ("Failed to register SIGTERM handler: %s\n", | ||||
| 		g_strerror (errno)); | ||||
| @@ -464,16 +427,9 @@ meta_init (void) | ||||
|   g_irepository_prepend_search_path (MUTTER_PKGLIBDIR); | ||||
| #endif | ||||
|  | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       /* NB: When running as a hybrid wayland compositor we run our own headless X | ||||
|        * server so the user can't control the X display to connect too. */ | ||||
|       meta_wayland_init (); | ||||
|     } | ||||
|   else | ||||
|     meta_select_display (opt_display_name); | ||||
|  | ||||
|   meta_set_syncing (opt_sync || (g_getenv ("MUTTER_SYNC") != NULL)); | ||||
|  | ||||
|   meta_select_display (opt_display_name); | ||||
|    | ||||
|   if (opt_replace_wm) | ||||
|     meta_set_replace_current_wm (TRUE); | ||||
| @@ -485,17 +441,10 @@ meta_init (void) | ||||
|    | ||||
|   meta_ui_init (); | ||||
|  | ||||
|   /* If we are running with wayland then we don't wait until we have | ||||
|    * an X connection before initializing clutter we instead initialize | ||||
|    * it earlier since we need to initialize the GL driver so the driver | ||||
|    * can register any needed wayland extensions. */ | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       /* | ||||
|        * Clutter can only be initialized after the UI. | ||||
|        */ | ||||
|       meta_clutter_init (); | ||||
|     } | ||||
|   /* | ||||
|    * Clutter can only be initialized after the UI. | ||||
|    */ | ||||
|   meta_clutter_init (); | ||||
| } | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ | ||||
|  | ||||
| /* | ||||
|  * Copyright 2013 Red Hat, Inc. | ||||
|  * 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 | ||||
| @@ -25,23 +25,10 @@ | ||||
| #define META_CURSOR_TRACKER_PRIVATE_H | ||||
|  | ||||
| #include <meta/meta-cursor-tracker.h> | ||||
| #include <clutter/clutter.h> | ||||
|  | ||||
| gboolean meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker, | ||||
| 					    XEvent            *xevent); | ||||
|  | ||||
| void     meta_cursor_tracker_set_root_cursor (MetaCursorTracker *tracker, | ||||
|                                               MetaCursor         cursor); | ||||
| void     meta_cursor_tracker_revert_root     (MetaCursorTracker *tracker); | ||||
| void     meta_cursor_tracker_set_sprite      (MetaCursorTracker *tracker, | ||||
|                                               CoglTexture2D     *texture, | ||||
|                                               int                hot_x, | ||||
|                                               int                hot_y); | ||||
|  | ||||
| void     meta_cursor_tracker_update_position (MetaCursorTracker *tracker, | ||||
| 					      int                new_x, | ||||
| 					      int                new_y); | ||||
| void     meta_cursor_tracker_paint           (MetaCursorTracker *tracker); | ||||
| void     meta_cursor_tracker_queue_redraw    (MetaCursorTracker *tracker, | ||||
| 					      ClutterActor      *stage); | ||||
| #endif | ||||
|   | ||||
| @@ -35,15 +35,15 @@ | ||||
| #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" | ||||
|  | ||||
| #ifdef HAVE_WAYLAND | ||||
| #include "meta-wayland-private.h" | ||||
| #endif | ||||
|  | ||||
| #define META_WAYLAND_DEFAULT_CURSOR_HOTSPOT_X 7 | ||||
| #define META_WAYLAND_DEFAULT_CURSOR_HOTSPOT_Y 4 | ||||
|  | ||||
| @@ -56,18 +56,6 @@ struct _MetaCursorTracker { | ||||
|  | ||||
|   CoglTexture2D *sprite; | ||||
|   int hot_x, hot_y; | ||||
|  | ||||
|   CoglTexture2D *root_cursor; | ||||
|   int root_hot_x, root_hot_y; | ||||
|  | ||||
|   CoglTexture2D *default_cursor; | ||||
|  | ||||
|   int current_x, current_y; | ||||
|   cairo_rectangle_int_t current_rect; | ||||
|   cairo_rectangle_int_t previous_rect; | ||||
|   gboolean previous_is_valid; | ||||
|  | ||||
|   CoglPipeline *pipeline; | ||||
| }; | ||||
|  | ||||
| struct _MetaCursorTrackerClass { | ||||
| @@ -83,14 +71,114 @@ enum { | ||||
|  | ||||
| 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 | ||||
|   */ | ||||
|    * detecting if the system mouse cursor is showing or not. | ||||
|    * | ||||
|    * On wayland we start with the cursor showing | ||||
|    */ | ||||
|   self->is_showing = TRUE; | ||||
| } | ||||
|  | ||||
| @@ -101,12 +189,6 @@ meta_cursor_tracker_finalize (GObject *object) | ||||
|  | ||||
|   if (self->sprite) | ||||
|     cogl_object_unref (self->sprite); | ||||
|   if (self->root_cursor) | ||||
|     cogl_object_unref (self->root_cursor); | ||||
|   if (self->default_cursor) | ||||
|     cogl_object_unref (self->default_cursor); | ||||
|   if (self->pipeline) | ||||
|     cogl_object_unref (self->pipeline); | ||||
|  | ||||
|   G_OBJECT_CLASS (meta_cursor_tracker_parent_class)->finalize (object); | ||||
| } | ||||
| @@ -126,25 +208,6 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass) | ||||
|                                           G_TYPE_NONE, 0); | ||||
| } | ||||
|  | ||||
| #ifdef HAVE_WAYLAND | ||||
| static MetaCursorTracker * | ||||
| make_wayland_cursor_tracker (MetaScreen *screen) | ||||
| { | ||||
|   MetaWaylandCompositor *compositor; | ||||
|   CoglContext *ctx; | ||||
|   MetaCursorTracker *self = g_object_new (META_TYPE_CURSOR_TRACKER, NULL); | ||||
|   self->screen = screen; | ||||
|  | ||||
|   ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); | ||||
|   self->pipeline = cogl_pipeline_new (ctx); | ||||
|  | ||||
|   compositor = meta_wayland_compositor_get_default (); | ||||
|   compositor->seat->cursor_tracker = self; | ||||
|  | ||||
|   return self; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static MetaCursorTracker * | ||||
| make_x11_cursor_tracker (MetaScreen *screen) | ||||
| { | ||||
| @@ -174,12 +237,7 @@ meta_cursor_tracker_get_for_screen (MetaScreen *screen) | ||||
|   if (screen->cursor_tracker) | ||||
|     return screen->cursor_tracker; | ||||
|  | ||||
| #ifdef HAVE_WAYLAND | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     self = make_wayland_cursor_tracker (screen); | ||||
|   else | ||||
| #endif | ||||
|     self = make_x11_cursor_tracker (screen); | ||||
|   self = make_x11_cursor_tracker (screen); | ||||
|  | ||||
|   screen->cursor_tracker = self; | ||||
|   return self; | ||||
| @@ -191,9 +249,6 @@ meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker, | ||||
| { | ||||
|   XFixesCursorNotifyEvent *notify_event; | ||||
|  | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (xevent->xany.type != tracker->screen->display->xfixes_event_base + XFixesCursorNotify) | ||||
|     return FALSE; | ||||
|  | ||||
| @@ -281,8 +336,7 @@ meta_cursor_tracker_get_sprite (MetaCursorTracker *tracker) | ||||
| { | ||||
|   g_return_val_if_fail (META_IS_CURSOR_TRACKER (tracker), NULL); | ||||
|  | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|     ensure_xfixes_cursor (tracker); | ||||
|   ensure_xfixes_cursor (tracker); | ||||
|  | ||||
|   return COGL_TEXTURE (tracker->sprite); | ||||
| } | ||||
| @@ -301,8 +355,7 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker, | ||||
| { | ||||
|   g_return_if_fail (META_IS_CURSOR_TRACKER (tracker)); | ||||
|  | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|     ensure_xfixes_cursor (tracker); | ||||
|   ensure_xfixes_cursor (tracker); | ||||
|  | ||||
|   if (x) | ||||
|     *x = tracker->hot_x; | ||||
| @@ -310,28 +363,6 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker, | ||||
|     *y = tracker->hot_y; | ||||
| } | ||||
|  | ||||
| static void | ||||
| ensure_wayland_cursor (MetaCursorTracker *tracker) | ||||
| { | ||||
|   CoglBitmap *bitmap; | ||||
|   char *filename; | ||||
|  | ||||
|   if (tracker->default_cursor) | ||||
|     return; | ||||
|  | ||||
|   filename = g_build_filename (MUTTER_PKGDATADIR, | ||||
|                                "cursors/left_ptr.png", | ||||
|                                NULL); | ||||
|  | ||||
|   bitmap = cogl_bitmap_new_from_file (filename, NULL); | ||||
|   tracker->default_cursor = cogl_texture_2d_new_from_bitmap (bitmap, | ||||
|                                                              COGL_PIXEL_FORMAT_ANY, | ||||
|                                                              NULL); | ||||
|  | ||||
|   cogl_object_unref (bitmap); | ||||
|   g_free (filename); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_cursor_tracker_set_root_cursor (MetaCursorTracker *tracker, | ||||
|                                      MetaCursor         cursor) | ||||
| @@ -345,114 +376,39 @@ meta_cursor_tracker_set_root_cursor (MetaCursorTracker *tracker, | ||||
|   XDefineCursor (display->xdisplay, tracker->screen->xroot, xcursor); | ||||
|   XFlush (display->xdisplay); | ||||
|   XFreeCursor (display->xdisplay, xcursor); | ||||
|  | ||||
|   /* Now update the real root cursor */ | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       /* FIXME! We need to load all the other cursors too */ | ||||
|       ensure_wayland_cursor (tracker); | ||||
|  | ||||
|       g_clear_pointer (&tracker->root_cursor, cogl_object_unref); | ||||
|       tracker->root_cursor = cogl_object_ref (tracker->default_cursor); | ||||
|       tracker->root_hot_x = META_WAYLAND_DEFAULT_CURSOR_HOTSPOT_X; | ||||
|       tracker->root_hot_y = META_WAYLAND_DEFAULT_CURSOR_HOTSPOT_Y; | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_cursor_tracker_revert_root (MetaCursorTracker *tracker) | ||||
| meta_cursor_tracker_get_pointer (MetaCursorTracker   *tracker, | ||||
|                                  int                 *x, | ||||
|                                  int                 *y, | ||||
|                                  ClutterModifierType *mods) | ||||
| { | ||||
|   meta_cursor_tracker_set_sprite (tracker, | ||||
|                                   tracker->root_cursor, | ||||
|                                   tracker->root_hot_x, | ||||
|                                   tracker->root_hot_y); | ||||
|   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_sprite (MetaCursorTracker *tracker, | ||||
|                                 CoglTexture2D     *sprite, | ||||
|                                 int                hot_x, | ||||
|                                 int                hot_y) | ||||
| meta_cursor_tracker_set_pointer_visible (MetaCursorTracker *tracker, | ||||
|                                          gboolean           visible) | ||||
| { | ||||
|   g_assert (meta_is_wayland_compositor ()); | ||||
|  | ||||
|   g_clear_pointer (&tracker->sprite, cogl_object_unref); | ||||
|  | ||||
|   if (sprite) | ||||
|     { | ||||
|       tracker->sprite = cogl_object_ref (sprite); | ||||
|       tracker->hot_x = hot_x; | ||||
|       tracker->hot_y = hot_y; | ||||
|       cogl_pipeline_set_layer_texture (tracker->pipeline, 0, COGL_TEXTURE (tracker->sprite)); | ||||
|     } | ||||
|   else | ||||
|     cogl_pipeline_set_layer_texture (tracker->pipeline, 0, NULL); | ||||
|  | ||||
|   g_signal_emit (tracker, signals[CURSOR_CHANGED], 0); | ||||
|  | ||||
|   meta_cursor_tracker_update_position (tracker, tracker->current_x, tracker->current_y); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_cursor_tracker_update_position (MetaCursorTracker *tracker, | ||||
|                                      int                new_x, | ||||
|                                      int                new_y) | ||||
| { | ||||
|   g_assert (meta_is_wayland_compositor ()); | ||||
|  | ||||
|   tracker->current_x = new_x; | ||||
|   tracker->current_y = new_y; | ||||
|   tracker->current_rect.x = tracker->current_x - tracker->hot_x; | ||||
|   tracker->current_rect.y = tracker->current_y - tracker->hot_y; | ||||
|  | ||||
|   if (tracker->sprite) | ||||
|     { | ||||
|       tracker->current_rect.width = cogl_texture_get_width (COGL_TEXTURE (tracker->sprite)); | ||||
|       tracker->current_rect.height = cogl_texture_get_height (COGL_TEXTURE (tracker->sprite)); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       tracker->current_rect.width = 0; | ||||
|       tracker->current_rect.height = 0; | ||||
|     } | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_cursor_tracker_paint (MetaCursorTracker *tracker) | ||||
| { | ||||
|   g_assert (meta_is_wayland_compositor ()); | ||||
|  | ||||
|   if (tracker->sprite == NULL) | ||||
|   if (visible == tracker->is_showing) | ||||
|     return; | ||||
|   tracker->is_showing = visible; | ||||
|  | ||||
|   /* FIXME: try to use a DRM cursor when possible */ | ||||
|   cogl_framebuffer_draw_rectangle (cogl_get_draw_framebuffer (), | ||||
|                                    tracker->pipeline, | ||||
|                                    tracker->current_rect.x, | ||||
|                                    tracker->current_rect.y, | ||||
|                                    tracker->current_rect.x + | ||||
|                                    tracker->current_rect.width, | ||||
|                                    tracker->current_rect.y + | ||||
|                                    tracker->current_rect.height); | ||||
|  | ||||
|   tracker->previous_rect = tracker->current_rect; | ||||
|   tracker->previous_is_valid = TRUE; | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_cursor_tracker_queue_redraw (MetaCursorTracker *tracker, | ||||
|                                   ClutterActor      *stage) | ||||
| { | ||||
|   g_assert (meta_is_wayland_compositor ()); | ||||
|  | ||||
|   if (tracker->previous_is_valid) | ||||
|     { | ||||
|       clutter_actor_queue_redraw_with_clip (stage, &tracker->previous_rect); | ||||
|       tracker->previous_is_valid = FALSE; | ||||
|     } | ||||
|  | ||||
|   if (tracker->sprite == NULL) | ||||
|     return; | ||||
|  | ||||
|   clutter_actor_queue_redraw_with_clip (stage, &tracker->current_rect); | ||||
|   if (visible) | ||||
|     XFixesShowCursor (tracker->screen->display->xdisplay, | ||||
|                       tracker->screen->xroot); | ||||
|   else | ||||
|     XFixesHideCursor (tracker->screen->display->xdisplay, | ||||
|                       tracker->screen->xroot); | ||||
| } | ||||
|   | ||||
| @@ -26,6 +26,5 @@ | ||||
|  | ||||
| void meta_idle_monitor_handle_xevent_all (XEvent *xevent); | ||||
|  | ||||
| void meta_idle_monitor_reset_idletime (MetaIdleMonitor *monitor); | ||||
|  | ||||
| void meta_idle_monitor_init_dbus (void); | ||||
|   | ||||
| @@ -57,9 +57,6 @@ struct _MetaIdleMonitor | ||||
|   int          sync_event_base; | ||||
|   XSyncCounter counter; | ||||
|   XSyncAlarm   user_active_alarm; | ||||
|  | ||||
|   /* Wayland implementation */ | ||||
|   guint64      last_event_time; | ||||
| }; | ||||
|  | ||||
| struct _MetaIdleMonitorClass | ||||
| @@ -77,10 +74,8 @@ typedef struct | ||||
|   guint64                   timeout_msec; | ||||
|  | ||||
|   /* x11 */ | ||||
|   XSyncAlarm	            xalarm; | ||||
|  | ||||
|   /* wayland */ | ||||
|   GSource                  *timeout_source; | ||||
|   XSyncAlarm                xalarm; | ||||
|   int                       idle_source_id; | ||||
| } MetaIdleMonitorWatch; | ||||
|  | ||||
| enum | ||||
| @@ -110,19 +105,26 @@ static void | ||||
| fire_watch (MetaIdleMonitorWatch *watch) | ||||
| { | ||||
|   MetaIdleMonitor *monitor; | ||||
|   guint id; | ||||
|   gboolean is_user_active_watch; | ||||
|  | ||||
|   monitor = watch->monitor; | ||||
|   g_object_ref (monitor); | ||||
|  | ||||
|   if (watch->callback) | ||||
|   if (watch->idle_source_id) | ||||
|     { | ||||
|       watch->callback (watch->monitor, | ||||
|                        watch->id, | ||||
|                        watch->user_data); | ||||
|       g_source_remove (watch->idle_source_id); | ||||
|       watch->idle_source_id = 0; | ||||
|     } | ||||
|  | ||||
|   if (watch->timeout_msec == 0) | ||||
|     meta_idle_monitor_remove_watch (watch->monitor, watch->id); | ||||
|   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); | ||||
| } | ||||
| @@ -229,7 +231,7 @@ meta_idle_monitor_handle_xevent_all (XEvent *xevent) | ||||
| { | ||||
|   int i; | ||||
|  | ||||
|   for (i = 0; i < device_id_max; i++) | ||||
|   for (i = 0; i <= device_id_max; i++) | ||||
|     if (device_monitors[i]) | ||||
|       meta_idle_monitor_handle_xevent (device_monitors[i], (XSyncAlarmNotifyEvent*)xevent); | ||||
| } | ||||
| @@ -285,6 +287,13 @@ idle_monitor_watch_free (MetaIdleMonitorWatch *watch) | ||||
|     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); | ||||
| @@ -296,9 +305,7 @@ idle_monitor_watch_free (MetaIdleMonitorWatch *watch) | ||||
|       g_hash_table_remove (monitor->alarms, (gpointer) watch->xalarm); | ||||
|     } | ||||
|  | ||||
|   if (watch->timeout_source != NULL) | ||||
|     g_source_destroy (watch->timeout_source); | ||||
|  | ||||
|   g_object_unref (monitor); | ||||
|   g_slice_free (MetaIdleMonitorWatch, watch); | ||||
| } | ||||
|  | ||||
| @@ -377,11 +384,8 @@ meta_idle_monitor_constructed (GObject *object) | ||||
| { | ||||
|   MetaIdleMonitor *monitor = META_IDLE_MONITOR (object); | ||||
|  | ||||
|   if (!meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       monitor->display = meta_get_display ()->xdisplay; | ||||
|       init_xsync (monitor); | ||||
|     } | ||||
|   monitor->display = meta_get_display ()->xdisplay; | ||||
|   init_xsync (monitor); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -461,23 +465,15 @@ meta_idle_monitor_get_for_device (int device_id) | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| wayland_dispatch_timeout (GSource     *source, | ||||
|                           GSourceFunc  callback, | ||||
|                           gpointer     user_data) | ||||
| fire_watch_idle (gpointer data) | ||||
| { | ||||
|   MetaIdleMonitorWatch *watch = user_data; | ||||
|   MetaIdleMonitorWatch *watch = data; | ||||
|  | ||||
|   watch->idle_source_id = 0; | ||||
|   fire_watch (watch); | ||||
|   g_source_set_ready_time (watch->timeout_source, -1); | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static GSourceFuncs wayland_source_funcs = { | ||||
|   NULL, /* prepare */ | ||||
|   NULL, /* check */ | ||||
|   wayland_dispatch_timeout, | ||||
|   NULL, /* finalize */ | ||||
| }; | ||||
|   return FALSE; | ||||
| } | ||||
|  | ||||
| static MetaIdleMonitorWatch * | ||||
| make_watch (MetaIdleMonitor           *monitor, | ||||
| @@ -496,34 +492,20 @@ make_watch (MetaIdleMonitor           *monitor, | ||||
|   watch->notify = notify; | ||||
|   watch->timeout_msec = timeout_msec; | ||||
|  | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|   if (timeout_msec != 0) | ||||
|     { | ||||
|       if (timeout_msec != 0) | ||||
|         { | ||||
|           GSource *source = g_source_new (&wayland_source_funcs, sizeof (GSource)); | ||||
|       watch->xalarm = _xsync_alarm_set (monitor, XSyncPositiveTransition, timeout_msec, TRUE); | ||||
|  | ||||
|           g_source_set_callback (source, NULL, watch, NULL); | ||||
|           g_source_set_ready_time (source, monitor->last_event_time + timeout_msec * 1000); | ||||
|           g_source_attach (source, NULL); | ||||
|           g_source_unref (source); | ||||
|       g_hash_table_add (monitor->alarms, (gpointer) watch->xalarm); | ||||
|  | ||||
|           watch->timeout_source = source; | ||||
|         } | ||||
|       if (meta_idle_monitor_get_idletime (monitor) > (gint64)timeout_msec) | ||||
|         watch->idle_source_id = g_idle_add (fire_watch_idle, watch); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (timeout_msec != 0) | ||||
|         { | ||||
|           watch->xalarm = _xsync_alarm_set (monitor, XSyncPositiveTransition, timeout_msec, TRUE); | ||||
|       watch->xalarm = monitor->user_active_alarm; | ||||
|  | ||||
|           g_hash_table_add (monitor->alarms, (gpointer) watch->xalarm); | ||||
|         } | ||||
|       else | ||||
|         { | ||||
|           watch->xalarm = monitor->user_active_alarm; | ||||
|  | ||||
|           set_alarm_enabled (monitor->display, monitor->user_active_alarm, TRUE); | ||||
|         } | ||||
|       set_alarm_enabled (monitor->display, monitor->user_active_alarm, TRUE); | ||||
|     } | ||||
|  | ||||
|   g_hash_table_insert (monitor->watches, | ||||
| @@ -640,69 +622,10 @@ meta_idle_monitor_get_idletime (MetaIdleMonitor *monitor) | ||||
| { | ||||
|   XSyncValue value; | ||||
|  | ||||
|   if (meta_is_wayland_compositor ()) | ||||
|     { | ||||
|       return (g_get_monotonic_time () - monitor->last_event_time) / 1000; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (!XSyncQueryCounter (monitor->display, monitor->counter, &value)) | ||||
|         return -1; | ||||
|   if (!XSyncQueryCounter (monitor->display, monitor->counter, &value)) | ||||
|     return -1; | ||||
|  | ||||
|       return _xsyncvalue_to_int64 (value); | ||||
|     } | ||||
| } | ||||
|  | ||||
| typedef struct { | ||||
|   MetaIdleMonitor *monitor; | ||||
|   GList *fired_watches; | ||||
| } CheckWaylandClosure; | ||||
|  | ||||
| static gboolean | ||||
| check_wayland_watch (gpointer key, | ||||
|                      gpointer value, | ||||
|                      gpointer user_data) | ||||
| { | ||||
|   MetaIdleMonitorWatch *watch = value; | ||||
|   CheckWaylandClosure *closure = user_data; | ||||
|   gboolean steal; | ||||
|  | ||||
|   if (watch->timeout_msec == 0) | ||||
|     { | ||||
|       closure->fired_watches = g_list_prepend (closure->fired_watches, watch); | ||||
|       steal = TRUE; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       g_source_set_ready_time (watch->timeout_source, | ||||
|                                closure->monitor->last_event_time + | ||||
|                                watch->timeout_msec * 1000); | ||||
|       steal = FALSE; | ||||
|     } | ||||
|  | ||||
|   return steal; | ||||
| } | ||||
|  | ||||
| static void | ||||
| fire_wayland_watch (gpointer watch, | ||||
|                     gpointer data) | ||||
| { | ||||
|   fire_watch (watch); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_idle_monitor_reset_idletime (MetaIdleMonitor *monitor) | ||||
| { | ||||
|   CheckWaylandClosure closure; | ||||
|  | ||||
|   monitor->last_event_time = g_get_monotonic_time (); | ||||
|  | ||||
|   closure.monitor = monitor; | ||||
|   closure.fired_watches = NULL; | ||||
|   g_hash_table_foreach_steal (monitor->watches, check_wayland_watch, &closure); | ||||
|  | ||||
|   g_list_foreach (closure.fired_watches, fire_wayland_watch, NULL); | ||||
|   g_list_free (closure.fired_watches); | ||||
|   return _xsyncvalue_to_int64 (value); | ||||
| } | ||||
|  | ||||
| static gboolean | ||||
| @@ -919,6 +842,8 @@ on_bus_acquired (GDBusConnection *connection, | ||||
|   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", | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| /*
 | ||||
|  * Copyright (C) 2013 Intel Corporation | ||||
|  * | ||||
| /* -*- 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 | ||||
| @@ -10,24 +11,30 @@ | ||||
|  * 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_XWAYLAND_PRIVATE_H | ||||
| #define META_XWAYLAND_PRIVATE_H | ||||
| /* This file is shared between mutter (src/core/meta-xrandr-shared.h)
 | ||||
|    and gnome-desktop (libgnome-desktop/meta-xrandr-shared.h). | ||||
| 
 | ||||
| #include "meta-wayland-private.h" | ||||
|    The canonical place for all changes is mutter. | ||||
| 
 | ||||
| #include <glib.h> | ||||
|    There should be no includes in this file. | ||||
| */ | ||||
| 
 | ||||
| gboolean | ||||
| meta_xwayland_start (MetaWaylandCompositor *compositor); | ||||
| #ifndef META_XRANDR_SHARED_H | ||||
| #define META_XRANDR_SHARED_H | ||||
| 
 | ||||
| void | ||||
| meta_xwayland_stop (MetaWaylandCompositor *compositor); | ||||
| 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 /* META_XWAYLAND_PRIVATE_H */ | ||||
| #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
											
										
									
								
							
							
								
								
									
										1519
									
								
								src/core/monitor.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1519
									
								
								src/core/monitor.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user